From 5bb42c29f71f01c86c1604435918fc86666ff0d6 Mon Sep 17 00:00:00 2001 From: Endrju Date: Fri, 27 Jan 2017 00:06:45 +0100 Subject: [PATCH 001/143] Added catch submodule --- .gitmodules | 3 +++ sources/3rdParty/catch | 1 + 2 files changed, 4 insertions(+) create mode 160000 sources/3rdParty/catch diff --git a/.gitmodules b/.gitmodules index 30f6140..ae80783 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "sources/3rdParty/tclap"] path = sources/3rdParty/tclap url = https://github.com/sjm324/tclap +[submodule "sources/3rdParty/catch"] + path = sources/3rdParty/catch + url = https://github.com/philsquared/Catch diff --git a/sources/3rdParty/catch b/sources/3rdParty/catch new file mode 160000 index 0000000..c390c4c --- /dev/null +++ b/sources/3rdParty/catch @@ -0,0 +1 @@ +Subproject commit c390c4cb9f9ae384451a5b8cda08aebf34407207 From 4c07df66fc0241ae395b95aec0047aba1899b35b Mon Sep 17 00:00:00 2001 From: Endrju Date: Wed, 29 Mar 2017 20:39:21 +0200 Subject: [PATCH 002/143] Move functional tests to separate directory --- .gitignore | 9 +++++++++ sources/CMakeLists.txt | 4 ++-- sources/vcdMaker/test/{ => functional}/test.xml | 0 sources/vcdMaker/test/{ => functional}/test_001.txt | 0 sources/vcdMaker/test/{ => functional}/test_001.vcd | 0 sources/vcdMaker/test/{ => functional}/test_002.txt | 0 sources/vcdMaker/test/{ => functional}/test_002.vcd | 0 sources/vcdMaker/test/{ => functional}/test_003.txt | 0 sources/vcdMaker/test/{ => functional}/test_003.vcd | 0 sources/vcdMerge/test/{ => functional}/system1_time1.txt | 0 sources/vcdMerge/test/{ => functional}/system2_time1.txt | 0 sources/vcdMerge/test/{ => functional}/system2_time2.txt | 0 sources/vcdMerge/test/{ => functional}/test.xml | 0 sources/vcdMerge/test/{ => functional}/test0_ms.vcd | 0 sources/vcdMerge/test/{ => functional}/test0_ns.vcd | 0 sources/vcdMerge/test/{ => functional}/test0_us.vcd | 0 sources/vcdMerge/test/{ => functional}/test1_ms.vcd | 0 sources/vcdMerge/test/{ => functional}/test1_ns.vcd | 0 sources/vcdMerge/test/{ => functional}/test1_us.vcd | 0 19 files changed, 11 insertions(+), 2 deletions(-) rename sources/vcdMaker/test/{ => functional}/test.xml (100%) rename sources/vcdMaker/test/{ => functional}/test_001.txt (100%) rename sources/vcdMaker/test/{ => functional}/test_001.vcd (100%) rename sources/vcdMaker/test/{ => functional}/test_002.txt (100%) rename sources/vcdMaker/test/{ => functional}/test_002.vcd (100%) rename sources/vcdMaker/test/{ => functional}/test_003.txt (100%) rename sources/vcdMaker/test/{ => functional}/test_003.vcd (100%) rename sources/vcdMerge/test/{ => functional}/system1_time1.txt (100%) rename sources/vcdMerge/test/{ => functional}/system2_time1.txt (100%) rename sources/vcdMerge/test/{ => functional}/system2_time2.txt (100%) rename sources/vcdMerge/test/{ => functional}/test.xml (100%) rename sources/vcdMerge/test/{ => functional}/test0_ms.vcd (100%) rename sources/vcdMerge/test/{ => functional}/test0_ns.vcd (100%) rename sources/vcdMerge/test/{ => functional}/test0_us.vcd (100%) rename sources/vcdMerge/test/{ => functional}/test1_ms.vcd (100%) rename sources/vcdMerge/test/{ => functional}/test1_ns.vcd (100%) rename sources/vcdMerge/test/{ => functional}/test1_us.vcd (100%) diff --git a/.gitignore b/.gitignore index f02745e..6bfed23 100644 --- a/.gitignore +++ b/.gitignore @@ -287,3 +287,12 @@ paket-files/ *.exe *.out *.app + +# Created by https://www.gitignore.io/api/python +# (few lines only) + +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt index b4e6110..056db5e 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -264,8 +264,8 @@ find_package(PythonInterp 3.5) if (PYTHONINTERP_FOUND) set(COMPARISON_TEST_SCRIPT ${ROOT_DIR}/test/functional/comparison_test.py) - set(MAKER_COMPARISON_TEST_DIR ${PROJECT_SOURCE_DIR}/vcdMaker/test) - set(MERGE_COMPARISON_TEST_DIR ${PROJECT_SOURCE_DIR}/vcdMerge/test) + set(MAKER_COMPARISON_TEST_DIR ${PROJECT_SOURCE_DIR}/vcdMaker/test/functional) + set(MERGE_COMPARISON_TEST_DIR ${PROJECT_SOURCE_DIR}/vcdMerge/test/functional) add_custom_target(comparisonTest COMMAND ${PYTHON_EXECUTABLE} ${COMPARISON_TEST_SCRIPT} -e ./vcdMaker -t ${MAKER_COMPARISON_TEST_DIR} diff --git a/sources/vcdMaker/test/test.xml b/sources/vcdMaker/test/functional/test.xml similarity index 100% rename from sources/vcdMaker/test/test.xml rename to sources/vcdMaker/test/functional/test.xml diff --git a/sources/vcdMaker/test/test_001.txt b/sources/vcdMaker/test/functional/test_001.txt similarity index 100% rename from sources/vcdMaker/test/test_001.txt rename to sources/vcdMaker/test/functional/test_001.txt diff --git a/sources/vcdMaker/test/test_001.vcd b/sources/vcdMaker/test/functional/test_001.vcd similarity index 100% rename from sources/vcdMaker/test/test_001.vcd rename to sources/vcdMaker/test/functional/test_001.vcd diff --git a/sources/vcdMaker/test/test_002.txt b/sources/vcdMaker/test/functional/test_002.txt similarity index 100% rename from sources/vcdMaker/test/test_002.txt rename to sources/vcdMaker/test/functional/test_002.txt diff --git a/sources/vcdMaker/test/test_002.vcd b/sources/vcdMaker/test/functional/test_002.vcd similarity index 100% rename from sources/vcdMaker/test/test_002.vcd rename to sources/vcdMaker/test/functional/test_002.vcd diff --git a/sources/vcdMaker/test/test_003.txt b/sources/vcdMaker/test/functional/test_003.txt similarity index 100% rename from sources/vcdMaker/test/test_003.txt rename to sources/vcdMaker/test/functional/test_003.txt diff --git a/sources/vcdMaker/test/test_003.vcd b/sources/vcdMaker/test/functional/test_003.vcd similarity index 100% rename from sources/vcdMaker/test/test_003.vcd rename to sources/vcdMaker/test/functional/test_003.vcd diff --git a/sources/vcdMerge/test/system1_time1.txt b/sources/vcdMerge/test/functional/system1_time1.txt similarity index 100% rename from sources/vcdMerge/test/system1_time1.txt rename to sources/vcdMerge/test/functional/system1_time1.txt diff --git a/sources/vcdMerge/test/system2_time1.txt b/sources/vcdMerge/test/functional/system2_time1.txt similarity index 100% rename from sources/vcdMerge/test/system2_time1.txt rename to sources/vcdMerge/test/functional/system2_time1.txt diff --git a/sources/vcdMerge/test/system2_time2.txt b/sources/vcdMerge/test/functional/system2_time2.txt similarity index 100% rename from sources/vcdMerge/test/system2_time2.txt rename to sources/vcdMerge/test/functional/system2_time2.txt diff --git a/sources/vcdMerge/test/test.xml b/sources/vcdMerge/test/functional/test.xml similarity index 100% rename from sources/vcdMerge/test/test.xml rename to sources/vcdMerge/test/functional/test.xml diff --git a/sources/vcdMerge/test/test0_ms.vcd b/sources/vcdMerge/test/functional/test0_ms.vcd similarity index 100% rename from sources/vcdMerge/test/test0_ms.vcd rename to sources/vcdMerge/test/functional/test0_ms.vcd diff --git a/sources/vcdMerge/test/test0_ns.vcd b/sources/vcdMerge/test/functional/test0_ns.vcd similarity index 100% rename from sources/vcdMerge/test/test0_ns.vcd rename to sources/vcdMerge/test/functional/test0_ns.vcd diff --git a/sources/vcdMerge/test/test0_us.vcd b/sources/vcdMerge/test/functional/test0_us.vcd similarity index 100% rename from sources/vcdMerge/test/test0_us.vcd rename to sources/vcdMerge/test/functional/test0_us.vcd diff --git a/sources/vcdMerge/test/test1_ms.vcd b/sources/vcdMerge/test/functional/test1_ms.vcd similarity index 100% rename from sources/vcdMerge/test/test1_ms.vcd rename to sources/vcdMerge/test/functional/test1_ms.vcd diff --git a/sources/vcdMerge/test/test1_ns.vcd b/sources/vcdMerge/test/functional/test1_ns.vcd similarity index 100% rename from sources/vcdMerge/test/test1_ns.vcd rename to sources/vcdMerge/test/functional/test1_ns.vcd diff --git a/sources/vcdMerge/test/test1_us.vcd b/sources/vcdMerge/test/functional/test1_us.vcd similarity index 100% rename from sources/vcdMerge/test/test1_us.vcd rename to sources/vcdMerge/test/functional/test1_us.vcd From 4485aab670eca36d51db3ee01b010122494336a8 Mon Sep 17 00:00:00 2001 From: Endrju Date: Wed, 29 Mar 2017 21:07:43 +0200 Subject: [PATCH 003/143] Update .gitignore with C++, VS, Eclipse, CMake and Python --- .gitignore | 175 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 142 insertions(+), 33 deletions(-) diff --git a/.gitignore b/.gitignore index 6bfed23..3fe302a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,117 @@ # Doxygen generated doc sources/doc/doxygen -# Created by https://www.gitignore.io/api/visualstudio,c++ + +# Created by https://www.gitignore.io/api/c++,cmake,eclipse,visualstudio + +### C++ ### +# Prerequisites +*.d + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app + +### CMake ### +CMakeCache.txt +CMakeFiles +CMakeScripts +Testing +Makefile +cmake_install.cmake +install_manifest.txt +compile_commands.json +CTestTestfile.cmake + +### Eclipse ### + +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath +.recommenders + +# Eclipse Core +.project + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# PyDev specific (Python IDE for Eclipse) +*.pydevproject + +# CDT-specific (C/C++ Development Tooling) +.cproject + +# JDT-specific (Eclipse Java Development Tools) +.classpath + +# Java annotation processor (APT) +.factorypath + +# PDT-specific (PHP Development Tools) +.buildpath + +# sbteclipse plugin +.target + +# Tern plugin +.tern-project + +# TeXlipse plugin +.texlipse + +# STS (Spring Tool Suite) +.springBeans + +# Code Recommenders +.recommenders/ + +# Scala IDE specific (Scala & Java development for Eclipse) +.cache-main +.scala_dependencies +.worksheet ### VisualStudio ### ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # User-specific files *.suo @@ -46,17 +152,17 @@ TestResult.xml [Rr]eleasePS/ dlldata.c -# DNX +# .NET Core project.lock.json +project.fragment.lock.json artifacts/ +**/Properties/launchSettings.json *_i.c *_p.c *_i.h *.ilk *.meta -*.obj -*.pch *.pdb *.pgc *.pgd @@ -65,7 +171,6 @@ artifacts/ *.tlb *.tli *.tlh -*.tmp *.tmp_proj *.log *.vspscc @@ -115,6 +220,10 @@ _TeamCity* # DotCover is a Code Coverage Tool *.dotCover +# Visual Studio code coverage results +*.coverage +*.coveragexml + # NCrunch _NCrunch_* .*crunch*.local.xml @@ -164,7 +273,7 @@ PublishScripts/ !**/packages/build/ # Uncomment if necessary however generally it will be regenerated when needed #!**/packages/repositories.config -# NuGet v3's project.json files produces more ignoreable files +# NuGet v3's project.json files produces more ignorable files *.nuget.props *.nuget.targets @@ -194,9 +303,9 @@ ClientBin/ *~ *.dbmdl *.dbproj.schemaview +*.jfm *.pfx *.publishsettings -node_modules/ orleans.codegen.cs # Since there are multiple workflows, uncomment next line to ignore bower_components @@ -217,6 +326,7 @@ UpgradeLog*.htm # SQL Server files *.mdf *.ldf +*.ndf # Business Intelligence projects *.rdl.data @@ -231,6 +341,10 @@ FakesAssemblies/ # Node.js Tools for Visual Studio .ntvs_analysis.dat +node_modules/ + +# Typescript v1 declaration files +typings/ # Visual Studio 6 build log *.plg @@ -238,6 +352,9 @@ FakesAssemblies/ # Visual Studio 6 workspace options file *.opt +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + # Visual Studio LightSwitch build output **/*.HTMLClient/GeneratedArtifacts **/*.DesktopClient/GeneratedArtifacts @@ -257,42 +374,34 @@ paket-files/ .idea/ *.sln.iml +# CodeRush +.cr/ -### C++ ### -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc -# Compiled Dynamic libraries -*.so -*.dylib -*.dll +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config -# Fortran module files -*.mod +# Telerik's JustMock configuration file +*.jmconfig -# Compiled Static libraries -*.lai -*.la -*.a -*.lib +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs -# Executables -*.exe -*.out -*.app +# End of https://www.gitignore.io/api/c++,cmake,eclipse,visualstudio # Created by https://www.gitignore.io/api/python -# (few lines only) ### Python ### # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class + +# End of https://www.gitignore.io/api/python From 3f1859a0b75b1241d79a60a2a5a110c88a4eeefd Mon Sep 17 00:00:00 2001 From: Endrju Date: Thu, 6 Apr 2017 22:57:33 +0200 Subject: [PATCH 004/143] Ignore empty fields in Split() function --- sources/common/src/Utils.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sources/common/src/Utils.cpp b/sources/common/src/Utils.cpp index 6d22b35..597c5bc 100644 --- a/sources/common/src/Utils.cpp +++ b/sources/common/src/Utils.cpp @@ -7,7 +7,7 @@ /// /// @ingroup Utils /// -/// @par Copyright (c) 2016 vcdMaker team +/// @par Copyright (c) 2017 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -43,7 +43,10 @@ std::vector UTILS::Split(const std::string &inString, while (std::getline(inStream, outField, delimiter)) { - outStrings.push_back(outField); + if (!outField.empty()) + { + outStrings.push_back(outField); + } } return outStrings; From d6bf1dfa5e576f770044ebd9c324d0568d80a1e0 Mon Sep 17 00:00:00 2001 From: Endrju Date: Thu, 6 Apr 2017 23:00:56 +0200 Subject: [PATCH 005/143] Add basic Unit Test support --- sources/CMakeLists.txt | 41 ++++++++++++++++++++++++- sources/common/test/unitTest/UtMain.cpp | 31 +++++++++++++++++++ 2 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 sources/common/test/unitTest/UtMain.cpp diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt index 056db5e..e900f23 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -2,7 +2,7 @@ # # vcdMaker and vcdMerge CMake file. # -# Copyright (c) 2016 vcdMaker team +# Copyright (c) 2017 vcdMaker team # # Permission is hereby granted, free of charge, to any person obtaining a # copy of this software and associated documentation files (the "Software"), @@ -260,6 +260,14 @@ get_filename_component(ROOT_DIR ${PROJECT_SOURCE_DIR}/.. ABSOLUTE) # Add test targets +enable_testing() + +add_custom_target(check + COMMAND ${CMAKE_CTEST_COMMAND} -V + COMMENT "vcdMaker test suite") + +# Functional tests + find_package(PythonInterp 3.5) if (PYTHONINTERP_FOUND) @@ -275,6 +283,37 @@ if (PYTHONINTERP_FOUND) VERBATIM) endif() +# Unit tests + +set(COMMON_UT_DIR common/test/unitTest) + +set(CATCH_HEADERS_DIR 3rdParty/catch/single_include) + +set(OUTPUT_UT_DIR output/ut) + +set(COMMON_UT_TARGET utCommon) + +# Function for unit test creation. +function(add_vcdtools_ut UT_NAME UT_SOURCES) + add_executable(${UT_NAME} EXCLUDE_FROM_ALL $ ${UT_SOURCES}) + + target_include_directories(${UT_NAME} PUBLIC ${COMMON_HEADERS_DIR} ${VMAKER_HEADERS_DIR} ${VMERGE_HEADERS_DIR} ${CATCH_HEADERS_DIR}) + + add_common_vcdtools_target_props(${UT_NAME}) + + set_target_properties(${UT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_UT_DIR}) + + add_test(NAME ${UT_NAME} + COMMAND ${UT_NAME} --use-colour yes) + add_dependencies(check ${UT_NAME}) +endfunction(add_vcdtools_ut) + +add_library(${COMMON_UT_TARGET} OBJECT ${COMMON_UT_DIR}/UtMain.cpp) + +target_include_directories(${COMMON_UT_TARGET} PUBLIC ${CATCH_HEADERS_DIR}) + +add_common_vcdtools_target_props(${COMMON_UT_TARGET}) + # Add Doxygen target find_package(Doxygen) diff --git a/sources/common/test/unitTest/UtMain.cpp b/sources/common/test/unitTest/UtMain.cpp new file mode 100644 index 0000000..90c57b6 --- /dev/null +++ b/sources/common/test/unitTest/UtMain.cpp @@ -0,0 +1,31 @@ +/// @file UtMain.cpp +/// +/// Unit tests main source file. +/// +/// @par Full Description +/// Unit tests main source file that includes Catch main() function. +/// +/// @ingroup UnitTest +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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. + +#define CATCH_CONFIG_MAIN +#include "catch.hpp" From ae4783279f7e99cbf61374e4282364b847c4189c Mon Sep 17 00:00:00 2001 From: Endrju Date: Thu, 6 Apr 2017 23:02:43 +0200 Subject: [PATCH 006/143] Add Utils UT --- sources/CMakeLists.txt | 8 +++ sources/common/test/unitTest/Utils.cpp | 67 ++++++++++++++++++++ sources/common/test/unitTest/stub/Signal.cpp | 33 ++++++++++ 3 files changed, 108 insertions(+) create mode 100644 sources/common/test/unitTest/Utils.cpp create mode 100644 sources/common/test/unitTest/stub/Signal.cpp diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt index e900f23..e3a642d 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -286,6 +286,7 @@ endif() # Unit tests set(COMMON_UT_DIR common/test/unitTest) +set(COMMON_UT_STUB_DIR common/test/unitTest/stub) set(CATCH_HEADERS_DIR 3rdParty/catch/single_include) @@ -314,6 +315,13 @@ target_include_directories(${COMMON_UT_TARGET} PUBLIC ${CATCH_HEADERS_DIR}) add_common_vcdtools_target_props(${COMMON_UT_TARGET}) +set(UT_UTILS_SOURCES + ${COMMON_UT_DIR}/Utils.cpp + ${COMMON_UT_STUB_DIR}/Signal.cpp + ${COMMON_SOURCES_DIR}/Utils.cpp) + +add_vcdtools_ut(utUtils "${UT_UTILS_SOURCES}") + # Add Doxygen target find_package(Doxygen) diff --git a/sources/common/test/unitTest/Utils.cpp b/sources/common/test/unitTest/Utils.cpp new file mode 100644 index 0000000..f61f89d --- /dev/null +++ b/sources/common/test/unitTest/Utils.cpp @@ -0,0 +1,67 @@ +/// @file Utils.cpp +/// +/// The utilities unit test. +/// +/// @par Full Description +/// Unit test for the utilities used among vcdMaker applications. +/// +/// @ingroup UnitTest +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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 "catch.hpp" + +#include "Utils.h" + +using namespace std::string_literals; + +using StringVector = std::vector; + +TEST_CASE("UTILS::Split") +{ + REQUIRE((UTILS::Split(""s, '\0')) == (StringVector{})); + REQUIRE((UTILS::Split("abcd"s, '\0')) == (StringVector{"abcd"s})); + REQUIRE((UTILS::Split("a b c d"s, ' ')) == (StringVector{"a"s, "b"s, "c"s, "d"s})); + REQUIRE((UTILS::Split(" a b c d"s, ' ')) == (StringVector{"a"s, "b"s, "c"s, "d"s})); + REQUIRE((UTILS::Split("a b c d "s, ' ')) == (StringVector{"a"s, "b"s, "c"s, "d"s})); + REQUIRE((UTILS::Split(" a b c d "s, ' ')) == (StringVector{"a"s, "b"s, "c"s, "d"s})); + REQUIRE((UTILS::Split("a b c d"s, ' ')) == (StringVector{"a"s, "b"s, "c"s, "d"s})); +} + +TEST_CASE("UTILS::IsTimeUnitValid") +{ + REQUIRE(UTILS::IsTimeUnitValid("a"s)); + REQUIRE(UTILS::IsTimeUnitValid("b"s)); + REQUIRE(UTILS::IsTimeUnitValid("c"s)); + REQUIRE(UTILS::IsTimeUnitValid("d"s)); + + REQUIRE_FALSE(UTILS::IsTimeUnitValid("e"s)); +} + +TEST_CASE("UTILS::GetTimeUnitIndex") +{ + REQUIRE(UTILS::GetTimeUnitIndex("a"s) == 0); + REQUIRE(UTILS::GetTimeUnitIndex("b"s) == 1); + REQUIRE(UTILS::GetTimeUnitIndex("c"s) == 2); + REQUIRE(UTILS::GetTimeUnitIndex("d"s) == 3); + + REQUIRE_THROWS(UTILS::GetTimeUnitIndex("e"s)); +} diff --git a/sources/common/test/unitTest/stub/Signal.cpp b/sources/common/test/unitTest/stub/Signal.cpp new file mode 100644 index 0000000..fad5f36 --- /dev/null +++ b/sources/common/test/unitTest/stub/Signal.cpp @@ -0,0 +1,33 @@ +/// @file Signal.cpp +/// +/// Signal class stub for unit tests. +/// +/// @par Full Description +/// Signal class stub for unit tests. +/// +/// @ingroup UnitTest +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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 "Signal.h" + +std::vector SIGNAL::Signal::TIME_UNITS = + { "a", "b", "c", "d" }; From 567bb3b5c4c34891c1c727118bcd1daf0cb3440f Mon Sep 17 00:00:00 2001 From: Endrju Date: Fri, 7 Apr 2017 22:42:13 +0200 Subject: [PATCH 007/143] Fix doxygen for UTs --- sources/common/test/unitTest/UtMain.cpp | 8 ++++++++ sources/common/test/unitTest/Utils.cpp | 3 --- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/sources/common/test/unitTest/UtMain.cpp b/sources/common/test/unitTest/UtMain.cpp index 90c57b6..ccb475b 100644 --- a/sources/common/test/unitTest/UtMain.cpp +++ b/sources/common/test/unitTest/UtMain.cpp @@ -27,5 +27,13 @@ /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS /// IN THE SOFTWARE. +/// @defgroup UnitTest UnitTest +/// +/// @brief vcdMaker and vcdMerge unit tests. +/// +/// @par Full Description +/// The group consists of the unit test files: actual unit test sources +/// and stubs. + #define CATCH_CONFIG_MAIN #include "catch.hpp" diff --git a/sources/common/test/unitTest/Utils.cpp b/sources/common/test/unitTest/Utils.cpp index f61f89d..244cb59 100644 --- a/sources/common/test/unitTest/Utils.cpp +++ b/sources/common/test/unitTest/Utils.cpp @@ -2,9 +2,6 @@ /// /// The utilities unit test. /// -/// @par Full Description -/// Unit test for the utilities used among vcdMaker applications. -/// /// @ingroup UnitTest /// /// @par Copyright (c) 2017 vcdMaker team From 062b5594922a4adf3ce838e20875beb7a6444a14 Mon Sep 17 00:00:00 2001 From: Endrju Date: Fri, 7 Apr 2017 22:42:26 +0200 Subject: [PATCH 008/143] Added SourceRegistry UT --- sources/CMakeLists.txt | 6 ++ .../common/test/unitTest/SourceRegistry.cpp | 57 +++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 sources/common/test/unitTest/SourceRegistry.cpp diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt index e3a642d..13e8723 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -322,6 +322,12 @@ set(UT_UTILS_SOURCES add_vcdtools_ut(utUtils "${UT_UTILS_SOURCES}") +set(UT_SOURCE_REGISTRY_SOURCES + ${COMMON_UT_DIR}/SourceRegistry.cpp + ${COMMON_SOURCES_DIR}/SourceRegistry.cpp) + +add_vcdtools_ut(utSourceRegistry "${UT_SOURCE_REGISTRY_SOURCES}") + # Add Doxygen target find_package(Doxygen) diff --git a/sources/common/test/unitTest/SourceRegistry.cpp b/sources/common/test/unitTest/SourceRegistry.cpp new file mode 100644 index 0000000..109b445 --- /dev/null +++ b/sources/common/test/unitTest/SourceRegistry.cpp @@ -0,0 +1,57 @@ +/// @file Utils.cpp +/// +/// Unit test for SourceRegistry class. +/// +/// @ingroup UnitTest +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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 "catch.hpp" + +#include "SourceRegistry.h" + +constexpr SIGNAL::SourceRegistry::HandleT SIGNAL::SourceRegistry::BAD_HANDLE; + +TEST_CASE("SourceRegistry") +{ + const std::string name1 = "abcd"; + const std::string name2 = "efgh"; + + SIGNAL::SourceRegistry registry; + + const SIGNAL::SourceRegistry::HandleT handle1 = + registry.Register(name1); + + SECTION("SourceRegistry::Register") + { + REQUIRE(handle1 != SIGNAL::SourceRegistry::BAD_HANDLE); + REQUIRE(handle1 != registry.Register(name2)); + REQUIRE(handle1 == registry.Register(name1)); + } + + SECTION("SourceRegistry::GetSourceName") + { + REQUIRE(name1 == registry.GetSourceName(handle1)); + REQUIRE_THROWS(registry.GetSourceName(SIGNAL::SourceRegistry::BAD_HANDLE)); + REQUIRE_THROWS(registry.GetSourceName(handle1 + 1)); + } +} + From da3bebfbc4562f565bb7ca7f6b7558cebf42caae Mon Sep 17 00:00:00 2001 From: Endrju Date: Tue, 25 Apr 2017 22:19:42 +0200 Subject: [PATCH 009/143] Change tests order --- sources/CMakeLists.txt | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt index 13e8723..a4ec566 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -315,12 +315,7 @@ target_include_directories(${COMMON_UT_TARGET} PUBLIC ${CATCH_HEADERS_DIR}) add_common_vcdtools_target_props(${COMMON_UT_TARGET}) -set(UT_UTILS_SOURCES - ${COMMON_UT_DIR}/Utils.cpp - ${COMMON_UT_STUB_DIR}/Signal.cpp - ${COMMON_SOURCES_DIR}/Utils.cpp) -add_vcdtools_ut(utUtils "${UT_UTILS_SOURCES}") set(UT_SOURCE_REGISTRY_SOURCES ${COMMON_UT_DIR}/SourceRegistry.cpp @@ -328,6 +323,13 @@ set(UT_SOURCE_REGISTRY_SOURCES add_vcdtools_ut(utSourceRegistry "${UT_SOURCE_REGISTRY_SOURCES}") +set(UT_UTILS_SOURCES + ${COMMON_UT_DIR}/Utils.cpp + ${COMMON_UT_STUB_DIR}/Signal.cpp + ${COMMON_SOURCES_DIR}/Utils.cpp) + +add_vcdtools_ut(utUtils "${UT_UTILS_SOURCES}") + # Add Doxygen target find_package(Doxygen) From 57351eb4ac9302585b5f3ca367ceb49e74393546 Mon Sep 17 00:00:00 2001 From: Endrju Date: Tue, 25 Apr 2017 22:19:57 +0200 Subject: [PATCH 010/143] Exclude common ut target from all --- sources/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt index a4ec566..6619cda 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -309,7 +309,7 @@ function(add_vcdtools_ut UT_NAME UT_SOURCES) add_dependencies(check ${UT_NAME}) endfunction(add_vcdtools_ut) -add_library(${COMMON_UT_TARGET} OBJECT ${COMMON_UT_DIR}/UtMain.cpp) +add_library(${COMMON_UT_TARGET} EXCLUDE_FROM_ALL OBJECT ${COMMON_UT_DIR}/UtMain.cpp) target_include_directories(${COMMON_UT_TARGET} PUBLIC ${CATCH_HEADERS_DIR}) From b4ae0d8f45c5bd235d7baaadaabd7616ec96416a Mon Sep 17 00:00:00 2001 From: Endrju Date: Tue, 25 Apr 2017 22:20:13 +0200 Subject: [PATCH 011/143] Add Signal UT --- sources/CMakeLists.txt | 5 ++ sources/common/test/unitTest/Signal.cpp | 64 +++++++++++++++ .../common/test/unitTest/stub/DummySignal.h | 80 +++++++++++++++++++ .../common/test/unitTest/stub/UtilsEmpty.cpp | 47 +++++++++++ 4 files changed, 196 insertions(+) create mode 100644 sources/common/test/unitTest/Signal.cpp create mode 100644 sources/common/test/unitTest/stub/DummySignal.h create mode 100644 sources/common/test/unitTest/stub/UtilsEmpty.cpp diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt index 6619cda..6cb9e44 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -315,7 +315,12 @@ target_include_directories(${COMMON_UT_TARGET} PUBLIC ${CATCH_HEADERS_DIR}) add_common_vcdtools_target_props(${COMMON_UT_TARGET}) +set(UT_SIGNAL_SOURCES + ${COMMON_UT_DIR}/Signal.cpp + ${COMMON_UT_STUB_DIR}/UtilsEmpty.cpp + ${COMMON_SOURCES_DIR}/Signal.cpp) +add_vcdtools_ut(utSignal "${UT_SIGNAL_SOURCES}") set(UT_SOURCE_REGISTRY_SOURCES ${COMMON_UT_DIR}/SourceRegistry.cpp diff --git a/sources/common/test/unitTest/Signal.cpp b/sources/common/test/unitTest/Signal.cpp new file mode 100644 index 0000000..6bd7cf7 --- /dev/null +++ b/sources/common/test/unitTest/Signal.cpp @@ -0,0 +1,64 @@ +/// @file Signal.cpp +/// +/// Unit test for Signal class. +/// +/// @ingroup UnitTest +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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 "catch.hpp" + +#include "Signal.h" +#include "stub/DummySignal.h" + +TEST_CASE("Signal") +{ + DummySignal dummySignal1("dummy1", 1); + DummySignal dummySignal2("dummy2", 2); + DummySignal dummySignal3("dummy2", 2); + + SIGNAL::Signal &rSignal1 = dummySignal1; + SIGNAL::Signal &rSignal2 = dummySignal2; + SIGNAL::Signal &rSignal3 = dummySignal3; + + SECTION("operator==") + { + REQUIRE(rSignal1 == rSignal1); + REQUIRE(rSignal2 == rSignal3); + REQUIRE_FALSE(rSignal1 == rSignal2); + } + SECTION("operator!=") + { + REQUIRE_FALSE(rSignal1 != rSignal1); + REQUIRE_FALSE(rSignal2 != rSignal3); + REQUIRE(rSignal1 != rSignal2); + } + SECTION("PtrTimestampLtComparator") + { + SIGNAL::PtrTimestampLtComparator ltComparator; + + REQUIRE_FALSE((ltComparator(&rSignal1, &rSignal1))); + REQUIRE_FALSE((ltComparator(&rSignal2, &rSignal1))); + REQUIRE_FALSE((ltComparator(&rSignal2, &rSignal3))); + REQUIRE((ltComparator(&rSignal1, &rSignal2))); + } +} + diff --git a/sources/common/test/unitTest/stub/DummySignal.h b/sources/common/test/unitTest/stub/DummySignal.h new file mode 100644 index 0000000..ba8a491 --- /dev/null +++ b/sources/common/test/unitTest/stub/DummySignal.h @@ -0,0 +1,80 @@ +/// @file DummySignal.h +/// +/// The dummy signal class. +/// +/// @par Full Description +/// The dummy signal class. It implements Signal interface for Unit Test +/// purposes. +/// +/// @ingroup UnitTest +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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. + +#pragma once + +#include "Signal.h" + +/// Dummy signal class. +class DummySignal : public SIGNAL::Signal +{ + public: + + static const size_t DUMMY_SIZE = 1; + static constexpr const char *DUMMY_TYPE = "dummy"; + static const SIGNAL::SourceRegistry::HandleT DUMMY_HANDLE = 1; + + /// Dumy signal signal constructor. + DummySignal(const std::string &name, + uint64_t timestamp) : + Signal(name, + DUMMY_SIZE, + timestamp, + DUMMY_TYPE, + DUMMY_HANDLE) + { + } + + /// Dumy signal signal cloning method. + virtual Signal *Clone() const + { + return new DummySignal(*this); + } + + /// @copydoc Signal::Print() + virtual std::string Print() const + { + return "PRINT " + GetName(); + } + + /// @copydoc Signal::Footprint() + virtual std::string Footprint() const + { + return "FOOTPRINT " + GetName(); + } + + protected: + + /// @copydoc Signal::EqualTo() + virtual bool EqualTo(Signal const &other) const + { + return (GetName() == other.GetName()); + } +}; diff --git a/sources/common/test/unitTest/stub/UtilsEmpty.cpp b/sources/common/test/unitTest/stub/UtilsEmpty.cpp new file mode 100644 index 0000000..8e071c3 --- /dev/null +++ b/sources/common/test/unitTest/stub/UtilsEmpty.cpp @@ -0,0 +1,47 @@ +/// @file UtilsEmpty.cpp +/// +/// Utils stub for unit tests. +/// +/// @par Full Description +/// Utils stub for unit tests. Contains dummy empty functions. +/// +/// @ingroup UnitTest +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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 "Utils.h" + +std::vector UTILS::Split(const std::string &, + const char) +{ + return {}; +} + +bool UTILS::IsTimeUnitValid(const std::string &) +{ + return false; +} + +size_t UTILS::GetTimeUnitIndex(const std::string &) +{ + return 0; +} + From b07fbbaa1ceb7f2dd859f37ab2003ad207dd32ee Mon Sep 17 00:00:00 2001 From: Endrju Date: Tue, 25 Apr 2017 22:24:48 +0200 Subject: [PATCH 012/143] Doxygen fixes in ut --- sources/common/test/unitTest/SourceRegistry.cpp | 2 +- sources/common/test/unitTest/stub/DummySignal.h | 5 ++++- sources/common/test/unitTest/stub/Signal.cpp | 3 --- sources/common/test/unitTest/stub/UtilsEmpty.cpp | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/sources/common/test/unitTest/SourceRegistry.cpp b/sources/common/test/unitTest/SourceRegistry.cpp index 109b445..12f382e 100644 --- a/sources/common/test/unitTest/SourceRegistry.cpp +++ b/sources/common/test/unitTest/SourceRegistry.cpp @@ -1,4 +1,4 @@ -/// @file Utils.cpp +/// @file SourceRegistry.cpp /// /// Unit test for SourceRegistry class. /// diff --git a/sources/common/test/unitTest/stub/DummySignal.h b/sources/common/test/unitTest/stub/DummySignal.h index ba8a491..0330a92 100644 --- a/sources/common/test/unitTest/stub/DummySignal.h +++ b/sources/common/test/unitTest/stub/DummySignal.h @@ -3,7 +3,7 @@ /// The dummy signal class. /// /// @par Full Description -/// The dummy signal class. It implements Signal interface for Unit Test +/// The dummy signal class that implements Signal interface for unit test /// purposes. /// /// @ingroup UnitTest @@ -37,9 +37,12 @@ class DummySignal : public SIGNAL::Signal { public: + /// Dummy values used to construct dummy signal. + /// @{ static const size_t DUMMY_SIZE = 1; static constexpr const char *DUMMY_TYPE = "dummy"; static const SIGNAL::SourceRegistry::HandleT DUMMY_HANDLE = 1; + /// @} /// Dumy signal signal constructor. DummySignal(const std::string &name, diff --git a/sources/common/test/unitTest/stub/Signal.cpp b/sources/common/test/unitTest/stub/Signal.cpp index fad5f36..6670e9e 100644 --- a/sources/common/test/unitTest/stub/Signal.cpp +++ b/sources/common/test/unitTest/stub/Signal.cpp @@ -2,9 +2,6 @@ /// /// Signal class stub for unit tests. /// -/// @par Full Description -/// Signal class stub for unit tests. -/// /// @ingroup UnitTest /// /// @par Copyright (c) 2017 vcdMaker team diff --git a/sources/common/test/unitTest/stub/UtilsEmpty.cpp b/sources/common/test/unitTest/stub/UtilsEmpty.cpp index 8e071c3..a9e2a02 100644 --- a/sources/common/test/unitTest/stub/UtilsEmpty.cpp +++ b/sources/common/test/unitTest/stub/UtilsEmpty.cpp @@ -1,9 +1,9 @@ /// @file UtilsEmpty.cpp /// -/// Utils stub for unit tests. +/// Utilities stub for unit tests. /// /// @par Full Description -/// Utils stub for unit tests. Contains dummy empty functions. +/// To make compliation possible. Contains dummy empty functions. /// /// @ingroup UnitTest /// From 61a149fe1b8d69b5518f1556a2eb56f661ac4eb4 Mon Sep 17 00:00:00 2001 From: Endrju Date: Wed, 26 Apr 2017 00:04:55 +0200 Subject: [PATCH 013/143] Add more dummy values and provide better EqualTo --- sources/common/test/unitTest/stub/DummySignal.h | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/sources/common/test/unitTest/stub/DummySignal.h b/sources/common/test/unitTest/stub/DummySignal.h index 0330a92..3591bcc 100644 --- a/sources/common/test/unitTest/stub/DummySignal.h +++ b/sources/common/test/unitTest/stub/DummySignal.h @@ -39,7 +39,9 @@ class DummySignal : public SIGNAL::Signal /// Dummy values used to construct dummy signal. /// @{ - static const size_t DUMMY_SIZE = 1; + static constexpr const char *DUMMY_NAME = "signal"; + static const size_t DUMMY_SIZE = 32; + static const uint64_t DUMMY_TIMESTAMP = 0; static constexpr const char *DUMMY_TYPE = "dummy"; static const SIGNAL::SourceRegistry::HandleT DUMMY_HANDLE = 1; /// @} @@ -78,6 +80,13 @@ class DummySignal : public SIGNAL::Signal /// @copydoc Signal::EqualTo() virtual bool EqualTo(Signal const &other) const { - return (GetName() == other.GetName()); + if (DummySignal const *p = dynamic_cast(&other)) + { + return (m_Name == p->m_Name); + } + else + { + return false; + } } }; From 7b7be09da9bbee8d28cf2d46c79357b7a46c1255 Mon Sep 17 00:00:00 2001 From: Endrju Date: Wed, 26 Apr 2017 00:07:07 +0200 Subject: [PATCH 014/143] Add ISignal UT --- sources/CMakeLists.txt | 6 + sources/common/test/unitTest/ISignal.cpp | 164 +++++++++++++++++++++++ 2 files changed, 170 insertions(+) create mode 100644 sources/common/test/unitTest/ISignal.cpp diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt index 6cb9e44..bcbe7bf 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -322,6 +322,12 @@ set(UT_SIGNAL_SOURCES add_vcdtools_ut(utSignal "${UT_SIGNAL_SOURCES}") +set(UT_ISIGNAL_SOURCES + ${COMMON_UT_DIR}/ISignal.cpp + ${COMMON_SOURCES_DIR}/ISignal.cpp) + +add_vcdtools_ut(utISignal "${UT_ISIGNAL_SOURCES}") + set(UT_SOURCE_REGISTRY_SOURCES ${COMMON_UT_DIR}/SourceRegistry.cpp ${COMMON_SOURCES_DIR}/SourceRegistry.cpp) diff --git a/sources/common/test/unitTest/ISignal.cpp b/sources/common/test/unitTest/ISignal.cpp new file mode 100644 index 0000000..33b1d27 --- /dev/null +++ b/sources/common/test/unitTest/ISignal.cpp @@ -0,0 +1,164 @@ +/// @file ISignal.cpp +/// +/// Unit test for ISignal class. +/// +/// @ingroup UnitTest +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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 + +#include "catch.hpp" + +#include "ISignal.h" +#include "stub/DummySignal.h" + +/// Create valid VCD line for ISignal. +static inline std::string getSignalPrint(const std::string &value) +{ + return ('b' + value + ' ' + DummySignal::DUMMY_NAME); +} + +/// Structure describing expected signal value. +class SignalValueTest +{ + public: + /// Signal size. + size_t m_Size; + + /// Signal value. + uint64_t m_Value; + + /// Signal value string. + std::string m_ValueString; +}; + +/// Signal::Print() test vector. +SignalValueTest SIGNAL_VALUE_TESTS[] = +{ + { 1, 0, "0" }, + { 1, 1, "1" }, + { 8, 0, "00000000" }, + { 8, 1, "00000001" }, + { 8, 63, "00111111" }, + { 8, 201, "11001001" }, + { 8, 255, "11111111" }, + { 64, 0, "0000000000000000000000000000000000000000000000000000000000000000" }, + { 64, UINT64_C(2548849195707703904), "0010001101011111010101001101011011010000001100101010001001100000" } +}; + +TEST_CASE("ISignal::Print") +{ + for (const auto &testCase : SIGNAL_VALUE_TESTS) + { + SIGNAL::ISignal signal(DummySignal::DUMMY_NAME, + testCase.m_Size, + DummySignal::DUMMY_TIMESTAMP, + testCase.m_Value, + DummySignal::DUMMY_HANDLE); + + const std::string expectedPrint = getSignalPrint(testCase.m_ValueString); + + REQUIRE(signal.Print() == expectedPrint); + } +} + +/// Structure describing expected signal footprint. +class SignalSizeTest +{ + public: + /// Signal size. + size_t m_Size; + + /// Signal footprint string. + std::string m_Footprint; +}; + +/// Signal::Footprint() test vector. +SignalSizeTest SIGNAL_SIZE_TESTS[] = +{ + { 1, "x" }, + { 8, "xxxxxxxx" }, + { 32, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, + { 64, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" } +}; + +TEST_CASE("ISignal::Footprint") +{ + for (const auto &testCase : SIGNAL_SIZE_TESTS) + { + SIGNAL::ISignal signal(DummySignal::DUMMY_NAME, + testCase.m_Size, + DummySignal::DUMMY_TIMESTAMP, + 0, + DummySignal::DUMMY_HANDLE); + + const std::string expectedFootprint = getSignalPrint(testCase.m_Footprint); + + REQUIRE(signal.Footprint() == expectedFootprint); + } +} + +/// Create ISignal with given value. Other parameters are dummies. +static inline SIGNAL::ISignal getISignal(uint64_t value) +{ + return {DummySignal::DUMMY_NAME, + DummySignal::DUMMY_SIZE, + DummySignal::DUMMY_TIMESTAMP, + value, + DummySignal::DUMMY_HANDLE}; +} + +TEST_CASE("ISignal::EqualTo") +{ + SIGNAL::ISignal signal1 = getISignal(1); + SIGNAL::Signal &rSignal1 = signal1; + + SIGNAL::ISignal signal2 = getISignal(2); + SIGNAL::Signal &rSignal2 = signal2; + + SIGNAL::ISignal signal3 = getISignal(2); + SIGNAL::Signal &rSignal3 = signal3; + + DummySignal dummySignal(DummySignal::DUMMY_NAME, + DummySignal::DUMMY_TIMESTAMP); + SIGNAL::Signal &rDummySignal = dummySignal; + + SECTION("operator==") + { + REQUIRE(rSignal1 == rSignal1); + REQUIRE(rSignal2 == rSignal3); + REQUIRE_FALSE(rSignal1 == rSignal2); + + REQUIRE_FALSE(rSignal1 == rDummySignal); + REQUIRE_FALSE(rDummySignal == rSignal1); + } + SECTION("operator!=") + { + REQUIRE_FALSE(rSignal1 != rSignal1); + REQUIRE_FALSE(rSignal2 != rSignal3); + REQUIRE(rSignal1 != rSignal2); + + REQUIRE(rSignal1 != rDummySignal); + REQUIRE(rDummySignal != rSignal1); + } +} + From 1bdb15e7f5c08bc1377779ae316a9762863c17b2 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Fri, 5 May 2017 20:27:40 +0200 Subject: [PATCH 015/143] Added badges --- README.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index db8d1fd..866bb68 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,15 @@ # vcdMaker +[![GitHub License](https://github-basic-badges.herokuapp.com/license/WojciechRynczuk/vcdMaker.svg)](https://github.com/WojciechRynczuk/vcdMaker/blob/master/LICENSE) +[![GitHub Release](https://github-basic-badges.herokuapp.com/release/WojciechRynczuk/vcdMaker.svg)](https://github.com/WojciechRynczuk/vcdMaker/releases/latest) +[![Build Status](https://travis-ci.org/WojciechRynczuk/vcdMaker.svg?branch=master)](https://travis-ci.org/WojciechRynczuk/vcdMaker) +[![Coverity Scan Build Status](https://scan.coverity.com/projects/11276/badge.svg)](https://scan.coverity.com/projects/vcdmaker) + ## Basic information The **vcdMaker** is an open and free application for translating text log files into the VCD (Variable Change Dump) format files. It is supposed to help engineers to debug their applications and systems by visualising their behavior. You can contact us via e-mail. -## Project status -Master branch: [![Build Status](https://travis-ci.org/WojciechRynczuk/vcdMaker.svg?branch=master)](https://travis-ci.org/WojciechRynczuk/vcdMaker) - -Development branch: [![Build Status](https://travis-ci.org/WojciechRynczuk/vcdMaker.svg?branch=v3_release)](https://travis-ci.org/WojciechRynczuk/vcdMaker) +## Development status +[![Build Status](https://travis-ci.org/WojciechRynczuk/vcdMaker.svg?branch=v3_release)](https://travis-ci.org/WojciechRynczuk/vcdMaker) +[![GitHub Issues Open](https://github-basic-badges.herokuapp.com/issues/WojciechRynczuk/vcdMaker.svg)](https://github.com/WojciechRynczuk/vcdMaker/issues) From 6b0f59f5f0beb5a53311c9859d32a3bc52705b28 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Sun, 14 May 2017 19:56:10 +0200 Subject: [PATCH 016/143] #18 Warnings and errors --- sources/CMakeLists.txt | 5 +- sources/common/inc/CliParser.h | 1 + sources/common/inc/Instrument.h | 9 +- sources/common/inc/LineCounter.h | 14 +- sources/common/inc/LogParser.h | 8 +- sources/common/inc/Signal.h | 1 + sources/common/inc/SourceRegistry.h | 11 +- sources/common/inc/TimeFrame.h | 18 +-- sources/common/inc/TxtParser.h | 7 +- sources/common/inc/Utils.h | 30 ++++- sources/common/inc/VCDTracer.h | 1 + sources/common/inc/VcdError.h | 113 ++++++++++++++++ sources/common/inc/VcdException.h | 95 +++++++++++++ sources/common/inc/VcdExceptionList.h | 80 +++++++++++ sources/common/inc/VcdExceptions.h | 112 ---------------- sources/common/inc/VcdWarning.h | 79 +++++++++++ sources/common/src/LogParser.cpp | 19 ++- sources/common/src/SignalDb.cpp | 121 ++++++++++++++--- sources/common/src/SourceRegistry.cpp | 43 ++++-- sources/common/src/TimeFrame.cpp | 14 +- sources/common/src/Utils.cpp | 16 +-- sources/vcdMaker/src/vcdMaker.cpp | 25 +--- sources/vcdMerge/inc/Merge.h | 1 + sources/vcdMerge/inc/SignalSource.h | 6 +- sources/vcdMerge/src/Merge.cpp | 58 +++++--- sources/vcdMerge/src/SignalSource.cpp | 126 ++++++++++++++---- sources/vcdMerge/src/vcdMerge.cpp | 25 +--- .../vcdMakerCore/vcdMakerCore.vcxproj | 5 +- 28 files changed, 769 insertions(+), 274 deletions(-) create mode 100644 sources/common/inc/VcdError.h create mode 100644 sources/common/inc/VcdException.h create mode 100644 sources/common/inc/VcdExceptionList.h delete mode 100644 sources/common/inc/VcdExceptions.h create mode 100644 sources/common/inc/VcdWarning.h diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt index b4e6110..540e671 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -79,7 +79,10 @@ set(COMMON_HEADERS ${COMMON_HEADERS_DIR}/Signal.h ${COMMON_HEADERS_DIR}/SourceRegistry.h ${COMMON_HEADERS_DIR}/SignalDb.h - ${COMMON_HEADERS_DIR}/VcdExceptions.h + ${COMMON_HEADERS_DIR}/VcdException.h + ${COMMON_HEADERS_DIR}/VcdExceptionList.h + ${COMMON_HEADERS_DIR}/VcdError.h + ${COMMON_HEADERS_DIR}/VcdWarning.h ${COMMON_HEADERS_DIR}/TimeFrame.h ${COMMON_HEADERS_DIR}/Utils.h ${COMMON_HEADERS_DIR}/Instrument.h diff --git a/sources/common/inc/CliParser.h b/sources/common/inc/CliParser.h index c78c6c6..6bdb998 100644 --- a/sources/common/inc/CliParser.h +++ b/sources/common/inc/CliParser.h @@ -39,6 +39,7 @@ #include "tclap/CmdLine.h" +/// Command Line Interface namespace CLI { diff --git a/sources/common/inc/Instrument.h b/sources/common/inc/Instrument.h index 92a6000..dc33ff7 100644 --- a/sources/common/inc/Instrument.h +++ b/sources/common/inc/Instrument.h @@ -39,6 +39,7 @@ #include "SignalDb.h" +/// Instrumentation. namespace INSTRUMENT { /// The instrument interface class. @@ -53,7 +54,7 @@ namespace INSTRUMENT /// It is to be invoked by a parser. /// /// @param lineNumber The line number. - /// @param signal The signal. + /// @param rSignal The signal. virtual void Notify(LineNumberT lineNumber, const SIGNAL::Signal &rSignal) = 0; /// Signalize the instrument the end of the parsing process. @@ -65,9 +66,9 @@ namespace INSTRUMENT /// /// This constructor shall be used by the inheriting classes. /// - /// @param sourceRegistry A signal sources registry. - /// @param signalDb A signal database. - /// @param sourceName A source name. + /// @param rSourceRegistry A signal sources registry. + /// @param rSignalDb A signal database. + /// @param rSourceName A source name. Instrument(SIGNAL::SourceRegistry &rSourceRegistry, SIGNAL::SignalDb &rSignalDb, const std::string &rSourceName) : diff --git a/sources/common/inc/LineCounter.h b/sources/common/inc/LineCounter.h index 238205f..9b12839 100644 --- a/sources/common/inc/LineCounter.h +++ b/sources/common/inc/LineCounter.h @@ -45,10 +45,10 @@ namespace INSTRUMENT /// If the counter name does not provide the top module name /// it will be automatically set to "Top". /// - /// @param filename The name of the file associated with the counter. - /// @param counterName The counter signal name. - /// @param sourceRegistry Signal sources registry. - /// @param signalDb The signal database to be used. + /// @param rFilename The name of the file associated with the counter. + /// @param rCounterName The counter signal name. + /// @param rSourceRegistry Signal sources registry. + /// @param rSignalDb The signal database to be used. LineCounter(const std::string &rFilename, const std::string &rCounterName, SIGNAL::SourceRegistry &rSourceRegistry, @@ -95,13 +95,13 @@ namespace INSTRUMENT static const std::string HIGH_COUNTER_NAME; /// The counter name. - const std::string m_CounterName{}; + const std::string m_CounterName {}; /// The name of the counter signal low boundary. - const std::string m_CounterNameLow{}; + const std::string m_CounterNameLow {}; /// The name of the counter signal high boundary. - const std::string m_CounterNameHigh{}; + const std::string m_CounterNameHigh {}; /// The counter storage. CounterSignalT m_Counter{}; diff --git a/sources/common/inc/LogParser.h b/sources/common/inc/LogParser.h index c7287ce..96c32ab 100644 --- a/sources/common/inc/LogParser.h +++ b/sources/common/inc/LogParser.h @@ -74,7 +74,7 @@ namespace PARSER /// Attaches an instrument to the parser. /// - /// @param instrument An instrument to be attached. + /// @param rInstrument An instrument to be attached. virtual void Attach(INSTRUMENT::Instrument &rInstrument); /// Triggers the final instrument actions. @@ -87,10 +87,10 @@ namespace PARSER /// This constructor shall be used by the inheriting classes. /// It opens the input log file and sets the verbose mode. /// - /// @param filename The name of the log file to be open. - /// @param timeBase The time base used in the log. + /// @param rFilename The name of the log file to be open. + /// @param rTimeBase The time base used in the log. /// @param verboseMode Value 'true' enables the verbose mode. - /// @param sourceRegistry Signal sources registry. + /// @param rSourceRegistry Signal sources registry. LogParser(const std::string &rFilename, const std::string &rTimeBase, SIGNAL::SourceRegistry &rSourceRegistry, diff --git a/sources/common/inc/Signal.h b/sources/common/inc/Signal.h index 143c980..e5101f9 100644 --- a/sources/common/inc/Signal.h +++ b/sources/common/inc/Signal.h @@ -45,6 +45,7 @@ #include "SourceRegistry.h" +/// Signal handling. namespace SIGNAL { /// The base VCD signal class. The integer and real signal classes diff --git a/sources/common/inc/SourceRegistry.h b/sources/common/inc/SourceRegistry.h index 9459efd..af398fd 100644 --- a/sources/common/inc/SourceRegistry.h +++ b/sources/common/inc/SourceRegistry.h @@ -8,7 +8,7 @@ /// /// @ingroup Signal /// -/// @par Copyright (c) 2016 vcdMaker team +/// @par Copyright (c) 2017 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -46,6 +46,13 @@ namespace SIGNAL static constexpr HandleT BAD_HANDLE = std::numeric_limits::min(); + /// Source registry is unique. Let it be a singleton. + static SourceRegistry &GetInstance() + { + static SourceRegistry instance; + return instance; + } + /// Registers a signal source. /// /// @param sourceName The name of the signal source. @@ -56,7 +63,7 @@ namespace SIGNAL HandleT Register(const std::string &sourceName); /// Returns the name of the signal source. - std::string GetSourceName(HandleT sourceHandle); + std::string GetSourceName(HandleT sourceHandle) const; private: /// A registry type. diff --git a/sources/common/inc/TimeFrame.h b/sources/common/inc/TimeFrame.h index 5e0e80c..13d2e96 100644 --- a/sources/common/inc/TimeFrame.h +++ b/sources/common/inc/TimeFrame.h @@ -43,10 +43,10 @@ namespace TRACER /// The time frame constructor. /// /// @param timestamp The initial timestamp. - /// @param file The output stream. - TimeFrame(const uint64_t timestamp, std::ofstream &file) : + /// @param rFile The output stream. + TimeFrame(const uint64_t timestamp, std::ofstream &rFile) : m_Timestamp(timestamp), - m_rFile(file), + m_rFile(rFile), m_FrameSignals(), m_Signals() { @@ -62,8 +62,8 @@ namespace TRACER /// Adds the signal information to the time frame. /// - /// @param signal The signal. - void Add(const SIGNAL::Signal *signal); + /// @param pSignal The signal. + void Add(const SIGNAL::Signal *pSignal); /// Dumps the time frame information. /// @@ -73,17 +73,17 @@ namespace TRACER private: /// Write on line to output file. - void DumpLine(const std::string &line) + void DumpLine(const std::string &rLine) { - m_rFile << line << '\n'; + m_rFile << rLine << '\n'; } /// Check weather given signal value has been already added. /// - /// @param signal The signal. + /// @param pSignal The signal. /// @retval true Signal with this value has been already added. /// @retval false Signal with this value has not been added. - bool WasSignalValueAdded(const SIGNAL::Signal *signal); + bool WasSignalValueAdded(const SIGNAL::Signal *pSignal); /// The timestamp of the time frame. uint64_t m_Timestamp; diff --git a/sources/common/inc/TxtParser.h b/sources/common/inc/TxtParser.h index c711d32..246f12f 100644 --- a/sources/common/inc/TxtParser.h +++ b/sources/common/inc/TxtParser.h @@ -31,6 +31,7 @@ #include "LogParser.h" +/// Log parser. namespace PARSER { /// The text log parser class. @@ -43,9 +44,9 @@ namespace PARSER /// This constructor is used by the vcdMaker app. /// It opens the input log file, sets the timebase and the verbose mode. /// - /// @param filename The name of the log file to be open. - /// @param timeBase The time base used in the log. - /// @param sourceRegistry Signal sources registry. + /// @param rFilename The name of the log file to be open. + /// @param rTimeBase The time base used in the log. + /// @param rSourceRegistry Signal sources registry. /// @param verboseMode Value 'true' enables the verbose mode. TxtParser(const std::string &rFilename, const std::string &rTimeBase, diff --git a/sources/common/inc/Utils.h b/sources/common/inc/Utils.h index e0d524b..1ee31e2 100644 --- a/sources/common/inc/Utils.h +++ b/sources/common/inc/Utils.h @@ -7,7 +7,7 @@ /// /// @ingroup Utils /// -/// @par Copyright (c) 2016 vcdMaker team +/// @par Copyright (c) 2017 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -32,6 +32,8 @@ #include #include +#include "vcdError.h" + /// @defgroup Utils Utils /// /// @brief Utilities. @@ -40,19 +42,35 @@ /// The utilities used among vcdMaker applications. /// Utilities namespace. -namespace UTILS { +namespace UTILS +{ + + /// The invalid time unit exception. + class InvalidTimeUnit : public EXCEPTION::VcdErrorGeneric + { + /// @todo The exception shall be moved to the time unit class. + public: + /// The constructor of the exception. + /// + /// @param rInvalidTimeUnit The invalid time unit. + InvalidTimeUnit(const std::string &rInvalidTimeUnit) : + VcdErrorGeneric(EXCEPTION::Error::INVALID_TIME_UNIT, + "Invalid time unit: " + rInvalidTimeUnit) + { + } + }; /// Returns a vector of separated strings. /// - /// @param inString The string to be split. + /// @param rInString The string to be split. /// @param delimiter The delimiter. - std::vector Split(const std::string &inString, + std::vector Split(const std::string &rInString, const char delimiter); /// Checks if given time unit is supported. - bool IsTimeUnitValid(const std::string &unit); + bool IsTimeUnitValid(const std::string &rUnit); /// Returns given time unit index in supported units list. - size_t GetTimeUnitIndex(const std::string &unit); + size_t GetTimeUnitIndex(const std::string &rUnit); } diff --git a/sources/common/inc/VCDTracer.h b/sources/common/inc/VCDTracer.h index 47cc21f..8a6ef5e 100644 --- a/sources/common/inc/VCDTracer.h +++ b/sources/common/inc/VCDTracer.h @@ -40,6 +40,7 @@ #include "SignalDb.h" +/// VCD tracer. namespace TRACER { /// The class provides means for creating diff --git a/sources/common/inc/VcdError.h b/sources/common/inc/VcdError.h new file mode 100644 index 0000000..842e763 --- /dev/null +++ b/sources/common/inc/VcdError.h @@ -0,0 +1,113 @@ +/// @file VcdError.h +/// +/// The error exception class. +/// +/// @par Full Description +/// The module defines the error exception class. +/// +/// @ingroup Exception +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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. + +#pragma once + +#include "VcdException.h" +#include "VcdExceptionList.h" + +namespace EXCEPTION +{ + /// To error shall be thrown when an unrecoverable condition occurs. + /// The class shall not be used directly. + /// Use VcdExceptionGeneric or VcdErrorLogic. + + /// The error exception base class. + class VcdError : public VcdException + { + public: + /// @copydoc VcdException::VcdException + VcdError(uint32_t id) : + VcdException(id) + {} + + /// @copydoc VcdException::GetType + const std::string GetType() const + { + return "Error"; + } + + /// The default VcdError destructor. + ~VcdError() + { + // All errors shall terminate the application execution. + exit(-1); + } + }; + + /// The generic error exception class shall be + /// used by runtime errors. + + /// The generic error exception base class. + class VcdErrorGeneric : public VcdError + { + /// The error message. + const std::string m_Message; + public: + /// The generic error constructor. + /// + /// @param id The error ID. + /// @param rMessage The error message. + VcdErrorGeneric(uint32_t id, const std::string& rMessage) : + VcdError(id), + m_Message(rMessage) + {} + + /// @copydoc VcdException::GetInfo + const std::string GetInfo() const + { + return std::string(m_Message); + } + }; + + /// The logic error exception class shall + /// be used to handle internal logic errors. + + /// The logic error exception base class. + class VcdErrorLogic : public VcdError + { + /// The error message. + const std::string m_Message; + public: + /// The logic error constructor. + /// + /// @param id The error ID. + /// @param rMessage The error message. + VcdErrorLogic(uint32_t id, const std::string &rMessage) : + VcdError(id), + m_Message(rMessage) + {} + + /// @copydoc VcdException::GetInfo + const std::string GetInfo() const + { + return std::string(m_Message + " Please e-mail your application version, parameters and input files to vcdmaker@mail.com for analysis."); + } + }; +} \ No newline at end of file diff --git a/sources/common/inc/VcdException.h b/sources/common/inc/VcdException.h new file mode 100644 index 0000000..9b6a9a6 --- /dev/null +++ b/sources/common/inc/VcdException.h @@ -0,0 +1,95 @@ +/// @file VcdException.h +/// +/// The VCD exception base class. +/// +/// @par Full Description +/// The base class for VCD errors and warnings. +/// +/// @ingroup Exception +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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. + +#pragma once + +/// @defgroup Exception Exception +/// +/// @brief Errors and warnings handling. +/// +/// @par Full Description +/// The module provides means for handling errors and warnings. + +#include +#include +#include + +/// The vcdMaker exceptions. +namespace EXCEPTION +{ + /// The base exception class. The error and warning classes + /// inherit from it. + + /// The base exception class. + class VcdException : public std::runtime_error + { + /// The exception ID to identify the error or warning. + /// The ID is referenced by the user manual. + const uint32_t m_ExceptionId; + + public: + /// The exception constructor. + /// It initializes the ID of the exception. + /// + /// @param id The ID of the exception. + VcdException(uint32_t id) : + m_ExceptionId(id), + std::runtime_error("vcdException") + { + } + + /// The destructor. + virtual ~VcdException(); + + /// Returns the formatted exception description. + const std::string GetMessage() const + { + return "[" + GetType() + " " + GetExceptionNumber() + "]: " + GetInfo() + '\n'; + } + + protected: + /// Returns the description of the exception. + virtual const std::string GetType() const = 0; + + /// Returns the exception specific description. + virtual const std::string GetInfo() const = 0; + + private: + /// Returns the formatted exception number. + const std::string GetExceptionNumber() const + { + std::ostringstream exceptionValue; + + exceptionValue << std::setfill('0') << std::setw(4) << m_ExceptionId; + return exceptionValue.str(); + } + }; + + inline VcdException::~VcdException() = default; +} diff --git a/sources/common/inc/VcdExceptionList.h b/sources/common/inc/VcdExceptionList.h new file mode 100644 index 0000000..bcb374c --- /dev/null +++ b/sources/common/inc/VcdExceptionList.h @@ -0,0 +1,80 @@ +/// @file VcdExceptionList.h +/// +/// The file lists errors and warnings which might occur within vcdMaker +/// applications. +/// +/// @par Full Description +/// vcdMaker errors and warnings. +/// +/// @ingroup Exception +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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. + +#pragma once + +namespace EXCEPTION +{ + /// The list of warnings. + namespace Warning + { + /// Synchronization time out of bounds. + const uint32_t SYNCHRONIZATION_TIME_OUT_OF_BOUNDS = 1U; + + /// Timestamp out of bounds. + const uint32_t TIMESTAMP_OUT_OF_BOUNDS = 2U; + }; + + /// The list of errors. + namespace Error + { + /// Cannot open the file. + const uint32_t CANNOT_OPEN_FILE = 1U; + + /// Conflicting signals names. + const uint32_t CONFLICTING_SIGNAL_NAMES = 2U; + + /// Invalid time unit. + const uint32_t INVALID_TIME_UNIT = 3U; + + /// Synchronization point out of bounds. + const uint32_t SYNCHRONIZATION_POINT_OUT_OF_BOUNDS = 4U; + + /// Invalid log file format. + const uint32_t INVALID_LOG_FILE_FORMAT = 5U; + + /// Invalid synchronization point value. + const uint32_t INVALID_SYNCHRONIZATION_POINT_VALUE = 6U; + + /// Invalid number of the source parameters. + const uint32_t INVALID_NUMBER_OF_SOURCE_PARAMS = 7U; + + /// Logic errors which shall never happen start from 9000. + + /// Invalid signal source. + const uint32_t INVALID_SIGNAL_SOURCE = 9000U; + + /// Cannot find the source signal name. + const uint32_t CANNOT_FIND_SOURCE_SIGNAL_NAME = 9001U; + + /// Too many signal sources. + const uint32_t TOO_MANY_SIGNAL_SOURCES = 9002U; + }; +} \ No newline at end of file diff --git a/sources/common/inc/VcdExceptions.h b/sources/common/inc/VcdExceptions.h deleted file mode 100644 index 765ec01..0000000 --- a/sources/common/inc/VcdExceptions.h +++ /dev/null @@ -1,112 +0,0 @@ -/// @file VcdExceptions.h -/// -/// The exceptions that could occur in the system. -/// -/// @par Full Description -/// The module defines the exceptions that could occur in the system. -/// -/// @ingroup Exception -/// -/// @par Copyright (c) 2016 vcdMaker team -/// -/// 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. - -#pragma once - -/// @defgroup Exception Exception -/// -/// @brief The module defines the exceptions that could occur in the system. -/// -/// @par Full Description -/// The module defines the exceptions that could occur in the system. - -#include - -#include "SourceRegistry.h" - -namespace EXCEPTION -{ - /// The conflicting name exception. Provides information allowing - /// for returning meaningful details to the user. - - /// The conflicting name exception. - class ConflictingNames : public std::runtime_error - { - public: - - /// The exception constructor. - /// - /// The conflicting name exception might occur while merging - /// signals from different sources. The signals do not have to - /// originate from different logs. These could be a log signal - /// and a line couning signal (created for this log) having the - /// same name. - /// - /// @param signalName The name of the conflicting signal. - /// @param sourceA The first source of the signal. - /// @param sourceB The second source of the signal. - ConflictingNames(const std::string &signalName, - SIGNAL::SourceRegistry::HandleT sourceA, - SIGNAL::SourceRegistry::HandleT sourceB) : - std::runtime_error("Conflicting signal names!"), - m_SignalName(signalName), - m_SourceA(sourceA), - m_SourceB(sourceB) - {} - - /// Returns the conflicting signal's name. - /// - /// The method is used while providing the detailed information - /// about the conflicting signal name. - const std::string &GetName() const - { - return m_SignalName; - } - - /// Returns the handle to the first source providing - /// the conflicting signal. - /// - /// The method is used while providing the detailed information - /// about the sources of the conflicting signal. - SIGNAL::SourceRegistry::HandleT GetSourceA() const - { - return m_SourceA; - } - - /// Returns the handle to the second source providing - /// the conflicting signal. - /// - /// The method is used while providing the detailed information - /// about the sources of the conflicting signal. - SIGNAL::SourceRegistry::HandleT GetSourceB() const - { - return m_SourceB; - } - - private: - /// The duplicated signal's name. - const std::string m_SignalName; - - /// The first source of the signal. - const SIGNAL::SourceRegistry::HandleT m_SourceA; - - /// The second source of the signal. - const SIGNAL::SourceRegistry::HandleT m_SourceB; - }; -} diff --git a/sources/common/inc/VcdWarning.h b/sources/common/inc/VcdWarning.h new file mode 100644 index 0000000..3b64a9f --- /dev/null +++ b/sources/common/inc/VcdWarning.h @@ -0,0 +1,79 @@ +/// @file VcdWarning.h +/// +/// The warning exception class. +/// +/// @par Full Description +/// The module defines the warning exception class. +/// +/// @ingroup Exception +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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. + +#pragma once + +#include + +#include "VcdException.h" +#include "VcdExceptionList.h" + +namespace EXCEPTION +{ + /// The base warning exception class. + /// To be thrown when a problematic but recoverable condition occurs. + + /// The warning exception base class. + class VcdWarning : public VcdException + { + /// The warning message. + const std::string m_Message; + public: + /// The warning constructor. + /// + /// @param id The warning ID. + /// @param rMessage The warning message. + VcdWarning(uint32_t id, const std::string& rMessage) : + VcdException(id), + m_Message(rMessage) + {} + + /// @copydoc VcdException::GetType + const std::string GetType() const + { + return "Warning"; + } + + /// The default warning destructor. + /// + /// It just returns the warning. + ~VcdWarning() + { + std::cout << this->GetMessage(); + } + + /// @copydoc VcdException::GetInfo + const std::string GetInfo() const + { + return std::string(m_Message); + } + }; +} + + diff --git a/sources/common/src/LogParser.cpp b/sources/common/src/LogParser.cpp index 96cab21..65b6d75 100644 --- a/sources/common/src/LogParser.cpp +++ b/sources/common/src/LogParser.cpp @@ -28,6 +28,22 @@ /// IN THE SOFTWARE. #include "LogParser.h" +#include "VcdError.h" + +/// The exception to be thrown on missing or inaccessible files. +class CannotOpenFile : public EXCEPTION::VcdErrorGeneric +{ + /// @todo Maybe we need a class for it as the code is duplicate. + public: + /// The constructor of the exception. + /// + /// @param rFileName The file name. + CannotOpenFile(const std::string &rFileName) : + VcdErrorGeneric(EXCEPTION::Error::CANNOT_OPEN_FILE, + "Opening file '" + rFileName + "' failed, it either doesn't exist or is inaccessible.") + { + } +}; PARSER::LogParser::LogParser(const std::string &rFilename, const std::string &rTimeBase, @@ -41,8 +57,7 @@ PARSER::LogParser::LogParser(const std::string &rFilename, { if (!m_LogFile.is_open()) { - throw std::runtime_error("Opening file '" + m_FileName + - "' failed, it either doesn't exist or is inaccessible."); + throw CannotOpenFile(m_FileName); } } diff --git a/sources/common/src/SignalDb.cpp b/sources/common/src/SignalDb.cpp index 485ca12..5f6a514 100644 --- a/sources/common/src/SignalDb.cpp +++ b/sources/common/src/SignalDb.cpp @@ -8,7 +8,7 @@ /// /// @ingroup Signal /// -/// @par Copyright (c) 2016 vcdMaker team +/// @par Copyright (c) 2017 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -28,11 +28,102 @@ /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS /// IN THE SOFTWARE. +#include +#include + #include "SignalDb.h" -#include "VcdExceptions.h" +#include "VcdError.h" +#include "SourceRegistry.h" + +/// The invalid signal source exception. +class InvalidSignalSource : public EXCEPTION::VcdErrorGeneric +{ + public: + /// The invalid signal source exception constructor. + InvalidSignalSource() : VcdErrorGeneric(EXCEPTION::Error::INVALID_SIGNAL_SOURCE, + "Invalid signal source.") + { + } +}; + +/// The conflicting name exception. +class ConflictingNames : public EXCEPTION::VcdError +{ + public: + + /// The exception constructor. + /// + /// The conflicting name exception might occur while merging + /// signals from different sources. The signals do not have to + /// originate from different logs. These could be a log signal + /// and a line couning signal (created for this log) having the + /// same name. + /// + /// @param rSignalName The name of the conflicting signal. + /// @param sourceA The first source of the signal. + /// @param sourceB The second source of the signal. + ConflictingNames(const std::string &rSignalName, + SIGNAL::SourceRegistry::HandleT sourceA, + SIGNAL::SourceRegistry::HandleT sourceB) : + VcdError(EXCEPTION::Error::CONFLICTING_SIGNAL_NAMES), + m_SignalName(rSignalName), + m_SourceA(sourceA), + m_SourceB(sourceB) + {} + + /// Returns the conflicting signal's name. + /// + /// The method is used while providing the detailed information + /// about the conflicting signal name. + const std::string &GetName() const + { + return m_SignalName; + } + + /// Returns the handle to the first source providing + /// the conflicting signal. + /// + /// The method is used while providing the detailed information + /// about the sources of the conflicting signal. + SIGNAL::SourceRegistry::HandleT GetSourceA() const + { + return m_SourceA; + } + + /// Returns the handle to the second source providing + /// the conflicting signal. + /// + /// The method is used while providing the detailed information + /// about the sources of the conflicting signal. + SIGNAL::SourceRegistry::HandleT GetSourceB() const + { + return m_SourceB; + } + + protected: + const std::string GetInfo() const + { + return std::string("Conflicting signal names! " + + this->GetName() + + " in the sources: " + + SIGNAL::SourceRegistry::GetInstance().GetSourceName(this->GetSourceA()) + + " and " + + SIGNAL::SourceRegistry::GetInstance().GetSourceName(this->GetSourceB()) ); + } + + private: + /// The duplicated signal's name. + const std::string m_SignalName; + + /// The first source of the signal. + const SIGNAL::SourceRegistry::HandleT m_SourceA; + + /// The second source of the signal. + const SIGNAL::SourceRegistry::HandleT m_SourceB; +}; -SIGNAL::SignalDb::SignalDb(const std::string &timeUnit) : - m_TimeUnit(timeUnit) +SIGNAL::SignalDb::SignalDb(const std::string &rTimeUnit) : + m_TimeUnit(rTimeUnit) { } @@ -44,33 +135,33 @@ SIGNAL::SignalDb::~SignalDb() } } -void SIGNAL::SignalDb::Add(const SIGNAL::Signal *signal) +void SIGNAL::SignalDb::Add(const SIGNAL::Signal *pSignal) { // A signal shall have a valid source once added to the database. - if (signal->GetSource() == SourceRegistry::BAD_HANDLE) + if (pSignal->GetSource() == SourceRegistry::BAD_HANDLE) { - throw std::logic_error("Invalid signal source."); + throw InvalidSignalSource(); } - const auto it = m_AddedSignals.find(signal->GetName()); + const auto it = m_AddedSignals.find(pSignal->GetName()); // Is this a new signal to be logged? if (it == m_AddedSignals.end()) { - m_AddedSignals[signal->GetName()] = signal; + m_AddedSignals[pSignal->GetName()] = pSignal; } else { - if ( (it->second->GetName() == signal->GetName()) && - (it->second->GetSource() != signal->GetSource()) ) + if ( (it->second->GetName() == pSignal->GetName()) && + (it->second->GetSource() != pSignal->GetSource()) ) { // There are duplicated signal names in different sources. - throw EXCEPTION::ConflictingNames(signal->GetName(), - it->second->GetSource(), - signal->GetSource()); + throw ConflictingNames(pSignal->GetName(), + it->second->GetSource(), + pSignal->GetSource()); } } // Store the full signal data - m_SignalSet.insert(signal); + m_SignalSet.insert(pSignal); } diff --git a/sources/common/src/SourceRegistry.cpp b/sources/common/src/SourceRegistry.cpp index 0acb85b..cdf6a20 100644 --- a/sources/common/src/SourceRegistry.cpp +++ b/sources/common/src/SourceRegistry.cpp @@ -8,7 +8,7 @@ /// /// @ingroup Signal /// -/// @par Copyright (c) 2016 vcdMaker team +/// @par Copyright (c) 2017 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -29,15 +29,40 @@ /// IN THE SOFTWARE. #include "SourceRegistry.h" +#include "VcdError.h" -SIGNAL::SourceRegistry::HandleT SIGNAL::SourceRegistry::Register(const std::string &sourceName) +/// Logic error. Cannot find source signal name. +class CannotFindSourceSignalName : public EXCEPTION::VcdErrorLogic { - const HandleT existing_handle = GetHandleForSource(sourceName); + public: + /// The cannot find source signal name exception constructor. + CannotFindSourceSignalName() : + VcdErrorLogic(EXCEPTION::Error::CANNOT_FIND_SOURCE_SIGNAL_NAME, + "Couldn't find source signal name!") + { + } +}; + +/// Logic error. Too many signal sources. +class TooManySignalSources : public EXCEPTION::VcdErrorLogic +{ + public: + /// Too many signal sources exception constructor. + TooManySignalSources() : + VcdErrorLogic(EXCEPTION::Error::TOO_MANY_SIGNAL_SOURCES, + "Too many signal sources!") + { + } +}; + +SIGNAL::SourceRegistry::HandleT SIGNAL::SourceRegistry::Register(const std::string &rSourceName) +{ + const HandleT existing_handle = GetHandleForSource(rSourceName); if (existing_handle == BAD_HANDLE) { const HandleT new_handle = GetNewHandle(); - m_Registry[sourceName] = new_handle; + m_Registry[rSourceName] = new_handle; return new_handle; } @@ -47,7 +72,7 @@ SIGNAL::SourceRegistry::HandleT SIGNAL::SourceRegistry::Register(const std::stri } } -std::string SIGNAL::SourceRegistry::GetSourceName(const HandleT sourceHandle) +std::string SIGNAL::SourceRegistry::GetSourceName(const HandleT sourceHandle) const { for (const auto ®istryItem : m_Registry) { @@ -57,12 +82,12 @@ std::string SIGNAL::SourceRegistry::GetSourceName(const HandleT sourceHandle) } } - throw std::runtime_error("Couldn't find source signal name!"); + throw CannotFindSourceSignalName(); } -SIGNAL::SourceRegistry::HandleT SIGNAL::SourceRegistry::GetHandleForSource(const std::string &sourceName) +SIGNAL::SourceRegistry::HandleT SIGNAL::SourceRegistry::GetHandleForSource(const std::string &rSourceName) { - const RegistryT::const_iterator it = m_Registry.find(sourceName); + const RegistryT::const_iterator it = m_Registry.find(rSourceName); if (it != m_Registry.end()) { @@ -84,6 +109,6 @@ SIGNAL::SourceRegistry::HandleT SIGNAL::SourceRegistry::GetNewHandle() } else { - throw std::runtime_error("Too many signal sources!"); + throw TooManySignalSources(); } } diff --git a/sources/common/src/TimeFrame.cpp b/sources/common/src/TimeFrame.cpp index ee47c71..d2a1306 100644 --- a/sources/common/src/TimeFrame.cpp +++ b/sources/common/src/TimeFrame.cpp @@ -30,12 +30,12 @@ #include "TimeFrame.h" -void TRACER::TimeFrame::Add(const SIGNAL::Signal *signal) +void TRACER::TimeFrame::Add(const SIGNAL::Signal *pSignal) { - if (WasSignalValueAdded(signal)) + if (WasSignalValueAdded(pSignal)) { - m_Signals[signal->GetName()] = signal; - m_FrameSignals[signal->GetName()] = signal; + m_Signals[pSignal->GetName()] = pSignal; + m_FrameSignals[pSignal->GetName()] = pSignal; } } @@ -54,13 +54,13 @@ void TRACER::TimeFrame::DumpAndClear() } } -bool TRACER::TimeFrame::WasSignalValueAdded(const SIGNAL::Signal *signal) +bool TRACER::TimeFrame::WasSignalValueAdded(const SIGNAL::Signal *pSignal) { - const auto it = m_Signals.find(signal->GetName()); + const auto it = m_Signals.find(pSignal->GetName()); if (it != m_Signals.end()) { - return (*it->second != *signal); + return (*it->second != *pSignal); } else { diff --git a/sources/common/src/Utils.cpp b/sources/common/src/Utils.cpp index 6d22b35..205c8f4 100644 --- a/sources/common/src/Utils.cpp +++ b/sources/common/src/Utils.cpp @@ -7,7 +7,7 @@ /// /// @ingroup Utils /// -/// @par Copyright (c) 2016 vcdMaker team +/// @par Copyright (c) 2017 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -34,11 +34,11 @@ #include "Utils.h" #include "Signal.h" -std::vector UTILS::Split(const std::string &inString, +std::vector UTILS::Split(const std::string &rInString, const char delimiter) { std::vector outStrings; - std::stringstream inStream(inString); + std::stringstream inStream(rInString); std::string outField; while (std::getline(inStream, outField, delimiter)) @@ -49,22 +49,22 @@ std::vector UTILS::Split(const std::string &inString, return outStrings; } -bool UTILS::IsTimeUnitValid(const std::string &unit) +bool UTILS::IsTimeUnitValid(const std::string &rUnit) { return (std::find(SIGNAL::Signal::TIME_UNITS.cbegin(), SIGNAL::Signal::TIME_UNITS.cend(), - unit) != SIGNAL::Signal::TIME_UNITS.cend()); + rUnit) != SIGNAL::Signal::TIME_UNITS.cend()); } -size_t UTILS::GetTimeUnitIndex(const std::string &unit) +size_t UTILS::GetTimeUnitIndex(const std::string &rUnit) { const size_t index = (std::find(SIGNAL::Signal::TIME_UNITS.cbegin(), SIGNAL::Signal::TIME_UNITS.cend(), - unit) - SIGNAL::Signal::TIME_UNITS.cbegin()); + rUnit) - SIGNAL::Signal::TIME_UNITS.cbegin()); if (index == SIGNAL::Signal::TIME_UNITS.size()) { - throw std::runtime_error("Invalid time unit " + unit); + throw InvalidTimeUnit(rUnit); } else { diff --git a/sources/vcdMaker/src/vcdMaker.cpp b/sources/vcdMaker/src/vcdMaker.cpp index 76d173c..68cd690 100644 --- a/sources/vcdMaker/src/vcdMaker.cpp +++ b/sources/vcdMaker/src/vcdMaker.cpp @@ -31,7 +31,7 @@ #include "TxtParser.h" #include "SourceRegistry.h" #include "LineCounter.h" -#include "VcdExceptions.h" +#include "VcdException.h" /// The vcdMaker main function. /// @@ -44,15 +44,12 @@ int main(int argc, const char *argv[]) CLI::CliMaker cli; cli.Parse(argc, argv); - // Source registry. - SIGNAL::SourceRegistry registry; - try { // Create the log parser. PARSER::TxtParser txtLog(cli.GetInputFileName(), cli.GetTimebase(), - registry, + SIGNAL::SourceRegistry::GetInstance(), cli.IsVerboseMode()); // Line counter. @@ -63,7 +60,7 @@ int main(int argc, const char *argv[]) // Register the line counting instrument. lineCounter = std::make_unique(cli.GetInputFileName(), cli.GetLineCounterName(), - registry, + SIGNAL::SourceRegistry::GetInstance(), txtLog.GetSignalDb()); txtLog.Attach(*lineCounter); } @@ -76,21 +73,9 @@ int main(int argc, const char *argv[]) txtLog.GetSignalDb()); vcd_trace.Dump(); } - catch (const EXCEPTION::ConflictingNames &exception) - { - // Conflicting signal names in different sources. - std::cerr << exception.what() - << " Signal " - << exception.GetName() - << " in the sources: " - << registry.GetSourceName(exception.GetSourceA()) - << " and " - << registry.GetSourceName(exception.GetSourceB()) - << '\n'; - } - catch (const std::runtime_error &exception) + catch (const EXCEPTION::VcdException &rException) { - std::cerr << exception.what() << '\n'; + std::cerr << rException.GetMessage(); } } diff --git a/sources/vcdMerge/inc/Merge.h b/sources/vcdMerge/inc/Merge.h index 33df2f3..031ffd7 100644 --- a/sources/vcdMerge/inc/Merge.h +++ b/sources/vcdMerge/inc/Merge.h @@ -38,6 +38,7 @@ #include "SignalSource.h" +/// The merging engine. namespace MERGE { /// The merging unit class. Allows for merging different diff --git a/sources/vcdMerge/inc/SignalSource.h b/sources/vcdMerge/inc/SignalSource.h index 4899255..3f1f41d 100644 --- a/sources/vcdMerge/inc/SignalSource.h +++ b/sources/vcdMerge/inc/SignalSource.h @@ -34,9 +34,9 @@ namespace MERGE { - /// The base source class. - /// - /// The objects of this class describes the source and holds source data. + /// The objects of this class describe the source and holds source data. + + /// The signal source base class. class SignalSource { public: diff --git a/sources/vcdMerge/src/Merge.cpp b/sources/vcdMerge/src/Merge.cpp index 46812da..cde833d 100644 --- a/sources/vcdMerge/src/Merge.cpp +++ b/sources/vcdMerge/src/Merge.cpp @@ -7,7 +7,7 @@ /// /// @ingroup Merge /// -/// @par Copyright (c) 2016 vcdMaker team +/// @par Copyright (c) 2017 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -34,6 +34,41 @@ #include "Merge.h" #include "Utils.h" +#include "VcdWarning.h" + +/// The synchronization time out of bounds. +class SynchronizationTimeOutOfBounds : public EXCEPTION::VcdWarning +{ + public: + /// The warning constructor. + /// + /// @param rSource The full warning description. + SynchronizationTimeOutOfBounds(const std::string &rSource) : + VcdWarning(EXCEPTION::Warning::SYNCHRONIZATION_TIME_OUT_OF_BOUNDS, + "Synchronization time out of bounds.Cannot merge " + rSource + ".") + { + } +}; + +/// The timestamp out of bounds. +class TimestampOutOfBounds : public EXCEPTION::VcdWarning +{ + public: + /// The warning constructor. + /// + /// @param rSignalName The name of the troublesome signal. + /// @param timestamp The timestamp of the signal. + /// @param rTimeUnit The time unit of the signal. + TimestampOutOfBounds(const std::string &rSignalName, uint64_t timestamp, const std::string &rTimeUnit) : + VcdWarning(EXCEPTION::Warning::TIMESTAMP_OUT_OF_BOUNDS, + std::string("Timestamp out of bounds. Cannot merge " + + rSignalName + + " at " + + std::to_string(timestamp) + " " + + rTimeUnit)) + { + } +}; const uint64_t MERGE::Merge::TEN_POWER[] = { @@ -79,10 +114,7 @@ void MERGE::Merge::Run() } catch (std::runtime_error &) { - std::cout << "Synchronization time out of bounds. Cannot merge " - << source->GetDescription() - << "." - << '\n'; + SynchronizationTimeOutOfBounds warning(source->GetDescription()); continue; } @@ -101,12 +133,8 @@ void MERGE::Merge::Run() } catch (std::runtime_error &) { - std::cout << "Timestamp out of bounds. Cannot merge " - << signal->GetName() - << " at " - << signal->GetTimestamp() << " " - << source->GetTimeUnit() - << '\n'; + TimestampOutOfBounds warning(signal->GetName(), signal->GetTimestamp(), source->GetTimeUnit()); + delete signal; continue; } @@ -153,15 +181,15 @@ uint64_t MERGE::Merge::FindMaxLeadingTime() } uint64_t MERGE::Merge::TransformTimestamp(uint64_t time, - const std::string &targetTimeUnit, - const std::string &sourceTimeUnit) + const std::string &rTargetTimeUnit, + const std::string &rSourceTimeUnit) { uint64_t new_time = time; uint32_t nominator = 0; uint32_t denominator = 0; - const uint32_t target_power = UTILS::GetTimeUnitIndex(targetTimeUnit); - const uint32_t source_power = UTILS::GetTimeUnitIndex(sourceTimeUnit); + const uint32_t target_power = UTILS::GetTimeUnitIndex(rTargetTimeUnit); + const uint32_t source_power = UTILS::GetTimeUnitIndex(rSourceTimeUnit); if (target_power > source_power) { diff --git a/sources/vcdMerge/src/SignalSource.cpp b/sources/vcdMerge/src/SignalSource.cpp index 3ded3c6..d679cb2 100644 --- a/sources/vcdMerge/src/SignalSource.cpp +++ b/sources/vcdMerge/src/SignalSource.cpp @@ -35,12 +35,86 @@ #include "SignalSource.h" #include "LineCounter.h" #include "Utils.h" +#include "VcdError.h" -MERGE::SignalSource::SignalSource(const std::string &description, - SIGNAL::SourceRegistry &signalRegistry, +/// The synchronization point out of bounds exception. +class SynchronizationPointOutOfBounds : public EXCEPTION::VcdErrorGeneric +{ + public: + /// The error exception constructor. + /// + /// @param synchronizationPoint the value of the synchronization point. + SynchronizationPointOutOfBounds(uint64_t synchronizationPoint) : + VcdErrorGeneric(EXCEPTION::Error::SYNCHRONIZATION_POINT_OUT_OF_BOUNDS, + "Synchronization point value out of bounds: " + synchronizationPoint) + { + } +}; + +/// The invalid log file fomat error. +class InvalidLogFileFormat : public EXCEPTION::VcdErrorGeneric +{ + public: + /// The error exception constructor. + /// + /// @param rFormat The format of the invalid log file. + InvalidLogFileFormat(const std::string &rFormat) : + VcdErrorGeneric(EXCEPTION::Error::INVALID_LOG_FILE_FORMAT, + "Invalid log file format: " + rFormat) + { + } +}; + +/// Invalid synchronization point value error. +class InvalidSynchronizationPointValue : public EXCEPTION::VcdErrorGeneric +{ + public: + /// The error exception constructor. + /// + /// @param rValue The value of the invalid synchronization point. + InvalidSynchronizationPointValue(const std::string &rValue) : + VcdErrorGeneric(EXCEPTION::Error::INVALID_SYNCHRONIZATION_POINT_VALUE, + "Invalid synchronization point value: " + rValue) + { + } +}; + +/// Cannot open file error. +class CannotOpenFile : public EXCEPTION::VcdErrorGeneric +{ + /// @todo Duplicate. Maybe a common file class is needed. + public: + /// The error exception constructor. + /// + /// @param rFileName The name of the missing file. + CannotOpenFile(const std::string &rFileName) : + VcdErrorGeneric(EXCEPTION::Error::CANNOT_OPEN_FILE, + "Opening file '" + + rFileName + + "' failed, it either doesn't exist or is inaccessible.") + { + } +}; + +/// Invalid number of source parameters error. +class InvalidNumberOfSourceParameters : public EXCEPTION::VcdErrorGeneric +{ + public: + /// The error exception constructor. + /// + /// @param rSourceDescription The source description. + InvalidNumberOfSourceParameters(const std::string &rSourceDescription) : + VcdErrorGeneric(EXCEPTION::Error::INVALID_NUMBER_OF_SOURCE_PARAMS, + "Invalid number of source parameters: " + rSourceDescription) + { + } +}; + +MERGE::SignalSource::SignalSource(const std::string &rDescription, + SIGNAL::SourceRegistry &rSignalRegistry, bool verboseMode) : - m_SourceDescription(description), - m_rSignalRegistry(signalRegistry), + m_SourceDescription(rDescription), + m_rSignalRegistry(rSignalRegistry), m_pSignalDb(), m_SyncPoint(), m_TimeUnit(), @@ -60,7 +134,7 @@ uint64_t MERGE::SignalSource::GetLeadingTime() const // The sync point value is out of bounds. if ((t0 > m_SyncPoint) && (m_SyncPoint > 0)) { - throw std::runtime_error("Synchronization point value out of bounds: " + m_SyncPoint); + throw SynchronizationPointOutOfBounds(m_SyncPoint); } return (m_SyncPoint - t0); @@ -93,68 +167,68 @@ void MERGE::SignalSource::Create() m_pSignalDb = parser.MoveSignalDb(); } -void MERGE::SignalSource::SetFormat(const std::string &format) +void MERGE::SignalSource::SetFormat(const std::string &rFormat) { - if (format != "T") + if (rFormat != "T") { - throw std::runtime_error("Invalid log file format: " + format); + throw InvalidLogFileFormat(rFormat); } } -void MERGE::SignalSource::SetSyncPoint(const std::string &syncPoint) +void MERGE::SignalSource::SetSyncPoint(const std::string &rSyncPoint) { try { - m_SyncPoint = std::stoull(syncPoint); + m_SyncPoint = std::stoull(rSyncPoint); } catch (std::logic_error &) { - throw std::runtime_error("Invalid synchronization point value: " + syncPoint); + throw InvalidSynchronizationPointValue(rSyncPoint); } } -void MERGE::SignalSource::SetTimeUnit(const std::string &timeUnit) +void MERGE::SignalSource::SetTimeUnit(const std::string &rTimeUnit) { - if (UTILS::IsTimeUnitValid(timeUnit)) + if (UTILS::IsTimeUnitValid(rTimeUnit)) { - m_TimeUnit = timeUnit; + m_TimeUnit = rTimeUnit; } else { - throw std::runtime_error("Invalid time unit: " + timeUnit); + throw UTILS::InvalidTimeUnit(rTimeUnit); } } -void MERGE::SignalSource::SetPrefix(const std::string &prefix) +void MERGE::SignalSource::SetPrefix(const std::string &rPrefix) { - if (!prefix.empty()) + if (!rPrefix.empty()) { // The prefix shall contain the terminating '.' but the user // does not have to provide it. - m_Prefix = prefix + "."; + m_Prefix = rPrefix + "."; } else { - m_Prefix = prefix; + m_Prefix = rPrefix; } } -void MERGE::SignalSource::SetCounterName(const std::string &lineCounter) +void MERGE::SignalSource::SetCounterName(const std::string &rLineCounter) { - m_LineCounter = lineCounter; + m_LineCounter = rLineCounter; } -void MERGE::SignalSource::SetFilename(const std::string &filename) +void MERGE::SignalSource::SetFilename(const std::string &rFilename) { - std::ifstream infile(filename); + std::ifstream infile(rFilename); if (infile.good()) { - m_Filename = filename; + m_Filename = rFilename; } else { - throw std::runtime_error("No such file: " + filename); + throw CannotOpenFile(rFilename); } } @@ -164,7 +238,7 @@ void MERGE::SignalSource::ParseParameters() if (params.size() != Parameters::SOURCE_PARAM_N) { - throw std::runtime_error("Invalid number of source parameters: " + m_SourceDescription); + throw InvalidNumberOfSourceParameters(m_SourceDescription); } else { diff --git a/sources/vcdMerge/src/vcdMerge.cpp b/sources/vcdMerge/src/vcdMerge.cpp index ef62269..caccf21 100644 --- a/sources/vcdMerge/src/vcdMerge.cpp +++ b/sources/vcdMerge/src/vcdMerge.cpp @@ -2,7 +2,7 @@ /// /// The main module of the vcdMerge application. /// -/// @par Copyright (c) 2016 vcdMaker team +/// @par Copyright (c) 2017 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -25,7 +25,7 @@ #include "CliMerge.h" #include "VCDTracer.h" #include "SourceRegistry.h" -#include "VcdExceptions.h" +#include "VcdException.h" #include "SignalSource.h" #include "Merge.h" @@ -40,9 +40,6 @@ int main(int argc, const char *argv[]) CLI::CliMerge cli; cli.Parse(argc, argv); - // Source registry. - SIGNAL::SourceRegistry registry; - try { // Get input sources. @@ -64,7 +61,7 @@ int main(int argc, const char *argv[]) for (const std::string &source : in_parameters) { in_sources.push_back(std::make_unique(source, - registry, + SIGNAL::SourceRegistry::GetInstance(), cli.IsVerboseMode())); merge.AddSource(in_sources.back().get()); @@ -85,21 +82,9 @@ int main(int argc, const char *argv[]) std::cout << '\n' << "Dumping " << cli.GetOutputFileName() << '\n'; vcd_trace.Dump(); } - catch (const EXCEPTION::ConflictingNames &exception) - { - // Conflicting signal names in different sources. - std::cerr << exception.what() - << " Signal " - << exception.GetName() - << " in the sources: " - << registry.GetSourceName(exception.GetSourceA()) - << " and " - << registry.GetSourceName(exception.GetSourceB()) - << '\n'; - } - catch (const std::runtime_error &exception) + catch (const EXCEPTION::VcdException &exception) { - std::cerr << exception.what() << '\n'; + std::cerr << exception.GetMessage(); } } diff --git a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj index 9183193..c6f13fa 100644 --- a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj +++ b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj @@ -157,8 +157,11 @@ - + + + + From 33fedfeb8f2c12ede0e8db4420058b67dfbb2d0b Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Sun, 14 May 2017 20:09:51 +0200 Subject: [PATCH 017/143] #18 Fixed case --- sources/common/inc/Utils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/common/inc/Utils.h b/sources/common/inc/Utils.h index 1ee31e2..61d7f8a 100644 --- a/sources/common/inc/Utils.h +++ b/sources/common/inc/Utils.h @@ -32,7 +32,7 @@ #include #include -#include "vcdError.h" +#include "VcdError.h" /// @defgroup Utils Utils /// From f658ecf3184425417adddd21d5e9378e47938d21 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Sun, 14 May 2017 22:23:58 +0200 Subject: [PATCH 018/143] #18 Fixed warnings --- sources/common/inc/VcdException.h | 4 ++-- sources/common/inc/VcdExceptionList.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sources/common/inc/VcdException.h b/sources/common/inc/VcdException.h index 9b6a9a6..51eb964 100644 --- a/sources/common/inc/VcdException.h +++ b/sources/common/inc/VcdException.h @@ -59,8 +59,8 @@ namespace EXCEPTION /// /// @param id The ID of the exception. VcdException(uint32_t id) : - m_ExceptionId(id), - std::runtime_error("vcdException") + std::runtime_error("vcdException"), + m_ExceptionId(id) { } diff --git a/sources/common/inc/VcdExceptionList.h b/sources/common/inc/VcdExceptionList.h index bcb374c..999bf22 100644 --- a/sources/common/inc/VcdExceptionList.h +++ b/sources/common/inc/VcdExceptionList.h @@ -40,7 +40,7 @@ namespace EXCEPTION /// Timestamp out of bounds. const uint32_t TIMESTAMP_OUT_OF_BOUNDS = 2U; - }; + } /// The list of errors. namespace Error @@ -76,5 +76,5 @@ namespace EXCEPTION /// Too many signal sources. const uint32_t TOO_MANY_SIGNAL_SOURCES = 9002U; - }; + } } \ No newline at end of file From 91eaa4f9a9b2208e67e1a1f855313de7fd0c4534 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Tue, 16 May 2017 22:07:25 +0200 Subject: [PATCH 019/143] #18 Doc update and minor fixes --- .travis.yml | 2 ++ development/config/Doxyfile | 2 +- sources/common/doc/manual.odt | Bin 552957 -> 554620 bytes sources/common/inc/LogParser.h | 1 + sources/common/inc/SignalDb.h | 12 ++++++--- sources/common/inc/SourceRegistry.h | 13 ++++++---- sources/common/inc/Utils.h | 3 +++ sources/common/inc/VcdExceptionList.h | 6 +++++ sources/vcdMerge/inc/Merge.h | 23 +++++++++-------- sources/vcdMerge/inc/SignalSource.h | 34 +++++++++++++++++--------- sources/vcdMerge/src/Merge.cpp | 28 ++++++++++++++++++--- sources/vcdMerge/src/vcdMerge.cpp | 15 ++++++++++-- 12 files changed, 102 insertions(+), 37 deletions(-) diff --git a/.travis.yml b/.travis.yml index e8c5c59..59adda7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,6 +26,8 @@ addons: - gcc-6 - g++-6 - txt2man + - doxygen + - graphviz coverity_scan: project: diff --git a/development/config/Doxyfile b/development/config/Doxyfile index e6d2343..b33790a 100644 --- a/development/config/Doxyfile +++ b/development/config/Doxyfile @@ -38,7 +38,7 @@ PROJECT_NAME = vcdMaker # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 2.0 +PROJECT_NUMBER = 3.0 # 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 diff --git a/sources/common/doc/manual.odt b/sources/common/doc/manual.odt index 0fff62ee8387642106a2ac66f71df41f079c4a9d..15bf459b0d54d3ed06211d29a5e2a18606a15c91 100644 GIT binary patch delta 18963 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 delta 17309 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 - // Find the longest leading time for among all sources. - m_MaxLeadingTime = FindMaxLeadingTime(); + // Find the longest leading time among all sources. + try + { + m_MaxLeadingTime = FindMaxLeadingTime(); + } + catch (std::runtime_error &) + { + // Sources cannot be merged. + throw LeadingTimeOutOfBounds(); + } // Merge Sources. for (const SignalSource *source : m_Sources) diff --git a/sources/vcdMerge/src/vcdMerge.cpp b/sources/vcdMerge/src/vcdMerge.cpp index caccf21..2d15952 100644 --- a/sources/vcdMerge/src/vcdMerge.cpp +++ b/sources/vcdMerge/src/vcdMerge.cpp @@ -25,10 +25,21 @@ #include "CliMerge.h" #include "VCDTracer.h" #include "SourceRegistry.h" -#include "VcdException.h" +#include "VcdError.h" #include "SignalSource.h" #include "Merge.h" +/// The invalid number of sources. +class InvalidNoOfSources : public EXCEPTION::VcdErrorGeneric +{ + public: + /// The invalid signal source exception constructor. + InvalidNoOfSources() : VcdErrorGeneric(EXCEPTION::Error::INVALID_NO_OF_SOURCES, + "There are at least two signal sources required.") + { + } +}; + /// The vcdMerge main function. /// /// @param argc Number of arguments. @@ -55,7 +66,7 @@ int main(int argc, const char *argv[]) // There must be at least 2 files to be merged. if (in_parameters.size() < 2) { - throw std::runtime_error("There are at least two signal sources required."); + throw InvalidNoOfSources(); } for (const std::string &source : in_parameters) From 383227c057e5f87c72e64519dca3ba30efbb7968 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Thu, 18 May 2017 21:08:56 +0200 Subject: [PATCH 020/143] #18 Peer review changes --- development/config/Doxyfile | 2 +- sources/CMakeLists.txt | 6 +- sources/common/inc/LineCounter.h | 6 +- sources/common/inc/Logger.h | 77 ++++++++++++ sources/common/inc/Signal.h | 3 +- sources/common/inc/SourceRegistry.h | 5 +- sources/common/inc/Utils.h | 18 --- sources/common/inc/VCDTracer.h | 3 +- sources/common/inc/VcdError.h | 113 ------------------ sources/common/inc/VcdException.h | 54 +++++---- sources/common/inc/VcdExceptionList.h | 12 +- sources/common/inc/VcdWarning.h | 79 ------------ sources/common/src/LogParser.cpp | 20 +--- sources/common/src/Logger.cpp | 57 +++++++++ sources/common/src/SignalDb.cpp | 105 ++-------------- sources/common/src/SourceRegistry.cpp | 32 +---- sources/common/src/Utils.cpp | 4 +- sources/vcdMaker/src/vcdMaker.cpp | 13 +- sources/vcdMerge/inc/Merge.h | 4 +- sources/vcdMerge/inc/SignalSource.h | 3 +- sources/vcdMerge/src/Merge.cpp | 85 ++++--------- sources/vcdMerge/src/SignalSource.cpp | 97 +++------------ sources/vcdMerge/src/vcdMerge.cpp | 29 ++--- .../vcdMakerCore/vcdMakerCore.vcxproj | 4 +- .../vcdMakerCore/vcdMakerCore.vcxproj.filters | 15 ++- 25 files changed, 284 insertions(+), 562 deletions(-) create mode 100644 sources/common/inc/Logger.h delete mode 100644 sources/common/inc/VcdError.h delete mode 100644 sources/common/inc/VcdWarning.h create mode 100644 sources/common/src/Logger.cpp diff --git a/development/config/Doxyfile b/development/config/Doxyfile index b33790a..965f2ae 100644 --- a/development/config/Doxyfile +++ b/development/config/Doxyfile @@ -187,7 +187,7 @@ SHORT_NAMES = NO # description.) # The default value is: NO. -JAVADOC_AUTOBRIEF = NO +JAVADOC_AUTOBRIEF = YES # 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 diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt index 540e671..1feaad2 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -56,6 +56,7 @@ set(COMMON_SOURCES ${COMMON_SOURCES_DIR}/LineCounter.cpp ${COMMON_SOURCES_DIR}/TimeFrame.cpp ${COMMON_SOURCES_DIR}/Utils.cpp + ${COMMON_SOURCES_DIR}/Logger.cpp ${COMMON_SOURCES_DIR}/VCDTracer.cpp) # Set common header files. @@ -80,9 +81,8 @@ set(COMMON_HEADERS ${COMMON_HEADERS_DIR}/SourceRegistry.h ${COMMON_HEADERS_DIR}/SignalDb.h ${COMMON_HEADERS_DIR}/VcdException.h - ${COMMON_HEADERS_DIR}/VcdExceptionList.h - ${COMMON_HEADERS_DIR}/VcdError.h - ${COMMON_HEADERS_DIR}/VcdWarning.h + ${COMMON_HEADERS_DIR}/VcdExceptionList.h + ${COMMON_HEADERS_DIR}/Logger.h ${COMMON_HEADERS_DIR}/TimeFrame.h ${COMMON_HEADERS_DIR}/Utils.h ${COMMON_HEADERS_DIR}/Instrument.h diff --git a/sources/common/inc/LineCounter.h b/sources/common/inc/LineCounter.h index 9b12839..fc99bd5 100644 --- a/sources/common/inc/LineCounter.h +++ b/sources/common/inc/LineCounter.h @@ -95,13 +95,13 @@ namespace INSTRUMENT static const std::string HIGH_COUNTER_NAME; /// The counter name. - const std::string m_CounterName {}; + const std::string m_CounterName{}; /// The name of the counter signal low boundary. - const std::string m_CounterNameLow {}; + const std::string m_CounterNameLow{}; /// The name of the counter signal high boundary. - const std::string m_CounterNameHigh {}; + const std::string m_CounterNameHigh{}; /// The counter storage. CounterSignalT m_Counter{}; diff --git a/sources/common/inc/Logger.h b/sources/common/inc/Logger.h new file mode 100644 index 0000000..c4fc32e --- /dev/null +++ b/sources/common/inc/Logger.h @@ -0,0 +1,77 @@ +/// @file Logger.h +/// +/// An error and warning logger. +/// +/// @par Full Description +/// This is a simple module for printing error and warning messages. +/// +/// @ingroup Logger +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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. + +#pragma once + +/// @defgroup Logger Logger +/// +/// @brief Errors and warnings logging. +/// +/// @par Full Description +/// This is a simple module for printing error and warning messages. + +#include "VcdException.h" + +/// A simple message logger. +namespace LOGGER +{ + /// A simple message logging module. + /// The module is used for logging warning and error messages. + class Logger + { + public: + /// The logger constructor. + Logger() + {} + + /// The destructor. + ~Logger(); + + /// The warning logging method. + void LogWarning(uint32_t number, const std::string &rMessage); + + /// The error logging method. + void Log(const EXCEPTION::VcdException &rException); + + private: + /// Returns the formatted exception number. + /// + /// @param number The numeric value to be converted and formatted. + const std::string FormatNumber(uint32_t number) const; + + /// Logging method. + /// + /// @param rOs The output stream. Could be std::cout or std::cerr. + /// @param rType The string representing the type of the logged message (error, warning). + /// @param number The catalogued number of the warnning or error message. + /// @param rMessage The message to be logged. + void Log(std::ostream &rOs, const std::string &rType, uint32_t number, const std::string &rMessage); + }; + inline Logger::~Logger() = default; +} diff --git a/sources/common/inc/Signal.h b/sources/common/inc/Signal.h index e5101f9..8543e11 100644 --- a/sources/common/inc/Signal.h +++ b/sources/common/inc/Signal.h @@ -48,10 +48,9 @@ /// Signal handling. namespace SIGNAL { + /// A base signal class. /// The base VCD signal class. The integer and real signal classes /// inherit from it. - - /// A base signal class. class Signal { public: diff --git a/sources/common/inc/SourceRegistry.h b/sources/common/inc/SourceRegistry.h index ba0e446..2cdb533 100644 --- a/sources/common/inc/SourceRegistry.h +++ b/sources/common/inc/SourceRegistry.h @@ -69,6 +69,9 @@ namespace SIGNAL std::string GetSourceName(HandleT sourceHandle) const; private: + /// The default constructor. + SourceRegistry(); + /// A registry type. using RegistryT = std::map; @@ -93,5 +96,5 @@ namespace SIGNAL /// @throws VcdError if no handles available. HandleT GetNewHandle(); }; - + inline SourceRegistry::SourceRegistry() = default; } diff --git a/sources/common/inc/Utils.h b/sources/common/inc/Utils.h index 6a78a86..19c294a 100644 --- a/sources/common/inc/Utils.h +++ b/sources/common/inc/Utils.h @@ -32,8 +32,6 @@ #include #include -#include "VcdError.h" - /// @defgroup Utils Utils /// /// @brief Utilities. @@ -44,22 +42,6 @@ /// Utilities namespace. namespace UTILS { - - /// The invalid time unit exception. - class InvalidTimeUnit : public EXCEPTION::VcdErrorGeneric - { - /// @todo The exception shall be moved to the time unit class. - public: - /// The constructor of the exception. - /// - /// @param rInvalidTimeUnit The invalid time unit. - InvalidTimeUnit(const std::string &rInvalidTimeUnit) : - VcdErrorGeneric(EXCEPTION::Error::INVALID_TIME_UNIT, - "Invalid time unit: " + rInvalidTimeUnit) - { - } - }; - /// Returns a vector of separated strings. /// /// @param rInString The string to be split. diff --git a/sources/common/inc/VCDTracer.h b/sources/common/inc/VCDTracer.h index 8a6ef5e..0017049 100644 --- a/sources/common/inc/VCDTracer.h +++ b/sources/common/inc/VCDTracer.h @@ -43,10 +43,9 @@ /// VCD tracer. namespace TRACER { + /// The VCD file creator. /// The class provides means for creating /// the output VCD file. - - /// This class creates the output VCD file. class VCDTracer { public: diff --git a/sources/common/inc/VcdError.h b/sources/common/inc/VcdError.h deleted file mode 100644 index 842e763..0000000 --- a/sources/common/inc/VcdError.h +++ /dev/null @@ -1,113 +0,0 @@ -/// @file VcdError.h -/// -/// The error exception class. -/// -/// @par Full Description -/// The module defines the error exception class. -/// -/// @ingroup Exception -/// -/// @par Copyright (c) 2017 vcdMaker team -/// -/// 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. - -#pragma once - -#include "VcdException.h" -#include "VcdExceptionList.h" - -namespace EXCEPTION -{ - /// To error shall be thrown when an unrecoverable condition occurs. - /// The class shall not be used directly. - /// Use VcdExceptionGeneric or VcdErrorLogic. - - /// The error exception base class. - class VcdError : public VcdException - { - public: - /// @copydoc VcdException::VcdException - VcdError(uint32_t id) : - VcdException(id) - {} - - /// @copydoc VcdException::GetType - const std::string GetType() const - { - return "Error"; - } - - /// The default VcdError destructor. - ~VcdError() - { - // All errors shall terminate the application execution. - exit(-1); - } - }; - - /// The generic error exception class shall be - /// used by runtime errors. - - /// The generic error exception base class. - class VcdErrorGeneric : public VcdError - { - /// The error message. - const std::string m_Message; - public: - /// The generic error constructor. - /// - /// @param id The error ID. - /// @param rMessage The error message. - VcdErrorGeneric(uint32_t id, const std::string& rMessage) : - VcdError(id), - m_Message(rMessage) - {} - - /// @copydoc VcdException::GetInfo - const std::string GetInfo() const - { - return std::string(m_Message); - } - }; - - /// The logic error exception class shall - /// be used to handle internal logic errors. - - /// The logic error exception base class. - class VcdErrorLogic : public VcdError - { - /// The error message. - const std::string m_Message; - public: - /// The logic error constructor. - /// - /// @param id The error ID. - /// @param rMessage The error message. - VcdErrorLogic(uint32_t id, const std::string &rMessage) : - VcdError(id), - m_Message(rMessage) - {} - - /// @copydoc VcdException::GetInfo - const std::string GetInfo() const - { - return std::string(m_Message + " Please e-mail your application version, parameters and input files to vcdmaker@mail.com for analysis."); - } - }; -} \ No newline at end of file diff --git a/sources/common/inc/VcdException.h b/sources/common/inc/VcdException.h index 51eb964..0f6065d 100644 --- a/sources/common/inc/VcdException.h +++ b/sources/common/inc/VcdException.h @@ -37,16 +37,15 @@ /// The module provides means for handling errors and warnings. #include -#include -#include + +#include "VcdExceptionList.h" /// The vcdMaker exceptions. namespace EXCEPTION { + /// The base exception class. /// The base exception class. The error and warning classes /// inherit from it. - - /// The base exception class. class VcdException : public std::runtime_error { /// The exception ID to identify the error or warning. @@ -58,8 +57,9 @@ namespace EXCEPTION /// It initializes the ID of the exception. /// /// @param id The ID of the exception. - VcdException(uint32_t id) : - std::runtime_error("vcdException"), + /// @param rMessage The exception warning. + VcdException(uint32_t id, const std::string &rMessage) : + std::runtime_error(rMessage), m_ExceptionId(id) { } @@ -67,29 +67,31 @@ namespace EXCEPTION /// The destructor. virtual ~VcdException(); - /// Returns the formatted exception description. - const std::string GetMessage() const + /// Returns the ID of the exception. + const uint32_t GetId() const { - return "[" + GetType() + " " + GetExceptionNumber() + "]: " + GetInfo() + '\n'; + return m_ExceptionId; } + }; + inline VcdException::~VcdException() = default; - protected: - /// Returns the description of the exception. - virtual const std::string GetType() const = 0; - - /// Returns the exception specific description. - virtual const std::string GetInfo() const = 0; - - private: - /// Returns the formatted exception number. - const std::string GetExceptionNumber() const - { - std::ostringstream exceptionValue; + /// @brief The logic exception base class. + /// The logic exception class shall be used + /// to handle internal logic errors. + class VcdLogicException : public VcdException + { + public: + /// The logic error constructor. + /// + /// @param id The error ID. + /// @param rMessage The error message. + VcdLogicException(uint32_t id, const std::string &rMessage) : + VcdException(id, rMessage + + " Please e-mail your application version, parameters and input files to vcdmaker@mail.com for analysis.") + {} - exceptionValue << std::setfill('0') << std::setw(4) << m_ExceptionId; - return exceptionValue.str(); - } + /// The default destructor. + ~VcdLogicException(); }; - - inline VcdException::~VcdException() = default; + inline VcdLogicException::~VcdLogicException() = default; } diff --git a/sources/common/inc/VcdExceptionList.h b/sources/common/inc/VcdExceptionList.h index c2d01dd..d636d56 100644 --- a/sources/common/inc/VcdExceptionList.h +++ b/sources/common/inc/VcdExceptionList.h @@ -30,6 +30,15 @@ #pragma once +namespace EXECUTION +{ + /// Application's proper termination. + const int32_t APP_OK = 0; + + /// Application's failure. + const int32_t APP_ERROR = -1; +} + namespace EXCEPTION { /// The list of warnings. @@ -72,7 +81,8 @@ namespace EXCEPTION /// Invalid number of sources. const uint32_t INVALID_NO_OF_SOURCES = 9U; - /// Logic errors which shall never happen start from 9000. + // Logic errors below shall never happen. + // They are enumerated from 9000. /// Invalid signal source. const uint32_t INVALID_SIGNAL_SOURCE = 9000U; diff --git a/sources/common/inc/VcdWarning.h b/sources/common/inc/VcdWarning.h deleted file mode 100644 index 3b64a9f..0000000 --- a/sources/common/inc/VcdWarning.h +++ /dev/null @@ -1,79 +0,0 @@ -/// @file VcdWarning.h -/// -/// The warning exception class. -/// -/// @par Full Description -/// The module defines the warning exception class. -/// -/// @ingroup Exception -/// -/// @par Copyright (c) 2017 vcdMaker team -/// -/// 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. - -#pragma once - -#include - -#include "VcdException.h" -#include "VcdExceptionList.h" - -namespace EXCEPTION -{ - /// The base warning exception class. - /// To be thrown when a problematic but recoverable condition occurs. - - /// The warning exception base class. - class VcdWarning : public VcdException - { - /// The warning message. - const std::string m_Message; - public: - /// The warning constructor. - /// - /// @param id The warning ID. - /// @param rMessage The warning message. - VcdWarning(uint32_t id, const std::string& rMessage) : - VcdException(id), - m_Message(rMessage) - {} - - /// @copydoc VcdException::GetType - const std::string GetType() const - { - return "Warning"; - } - - /// The default warning destructor. - /// - /// It just returns the warning. - ~VcdWarning() - { - std::cout << this->GetMessage(); - } - - /// @copydoc VcdException::GetInfo - const std::string GetInfo() const - { - return std::string(m_Message); - } - }; -} - - diff --git a/sources/common/src/LogParser.cpp b/sources/common/src/LogParser.cpp index 65b6d75..8aec063 100644 --- a/sources/common/src/LogParser.cpp +++ b/sources/common/src/LogParser.cpp @@ -28,22 +28,7 @@ /// IN THE SOFTWARE. #include "LogParser.h" -#include "VcdError.h" - -/// The exception to be thrown on missing or inaccessible files. -class CannotOpenFile : public EXCEPTION::VcdErrorGeneric -{ - /// @todo Maybe we need a class for it as the code is duplicate. - public: - /// The constructor of the exception. - /// - /// @param rFileName The file name. - CannotOpenFile(const std::string &rFileName) : - VcdErrorGeneric(EXCEPTION::Error::CANNOT_OPEN_FILE, - "Opening file '" + rFileName + "' failed, it either doesn't exist or is inaccessible.") - { - } -}; +#include "VcdException.h" PARSER::LogParser::LogParser(const std::string &rFilename, const std::string &rTimeBase, @@ -57,7 +42,8 @@ PARSER::LogParser::LogParser(const std::string &rFilename, { if (!m_LogFile.is_open()) { - throw CannotOpenFile(m_FileName); + throw EXCEPTION::VcdException(EXCEPTION::Error::CANNOT_OPEN_FILE, + "Opening file '" + m_FileName + "' failed, it either doesn't exist or is inaccessible."); } } diff --git a/sources/common/src/Logger.cpp b/sources/common/src/Logger.cpp new file mode 100644 index 0000000..fac45c6 --- /dev/null +++ b/sources/common/src/Logger.cpp @@ -0,0 +1,57 @@ +/// @file Logger.cpp +/// +/// An error and warning logger. +/// +/// @par Full Description +/// This is a simple module for printing error and warning messages. +/// +/// @ingroup Logger +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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 +#include +#include + +#include "Logger.h" + +void LOGGER::Logger::LogWarning(uint32_t number, const std::string &rMessage) +{ + Log(std::cout, "Warning", number, rMessage); +} + +void LOGGER::Logger::Log(const EXCEPTION::VcdException &rException) +{ + Log(std::cerr, "Error", rException.GetId(), rException.what()); +} + +const std::string LOGGER::Logger::FormatNumber(uint32_t number) const +{ + std::ostringstream exceptionValue; + + exceptionValue << std::setfill('0') << std::setw(4) << number; + return exceptionValue.str(); +} + +void LOGGER::Logger::Log(std::ostream &rOs, const std::string &rType, uint32_t number, const std::string &rMessage) +{ + rOs << "[" << rType << " " << FormatNumber(number) << "]: " << rMessage << '\n'; +} diff --git a/sources/common/src/SignalDb.cpp b/sources/common/src/SignalDb.cpp index 5f6a514..866530f 100644 --- a/sources/common/src/SignalDb.cpp +++ b/sources/common/src/SignalDb.cpp @@ -28,100 +28,10 @@ /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS /// IN THE SOFTWARE. -#include -#include - #include "SignalDb.h" -#include "VcdError.h" +#include "VcdException.h" #include "SourceRegistry.h" -/// The invalid signal source exception. -class InvalidSignalSource : public EXCEPTION::VcdErrorGeneric -{ - public: - /// The invalid signal source exception constructor. - InvalidSignalSource() : VcdErrorGeneric(EXCEPTION::Error::INVALID_SIGNAL_SOURCE, - "Invalid signal source.") - { - } -}; - -/// The conflicting name exception. -class ConflictingNames : public EXCEPTION::VcdError -{ - public: - - /// The exception constructor. - /// - /// The conflicting name exception might occur while merging - /// signals from different sources. The signals do not have to - /// originate from different logs. These could be a log signal - /// and a line couning signal (created for this log) having the - /// same name. - /// - /// @param rSignalName The name of the conflicting signal. - /// @param sourceA The first source of the signal. - /// @param sourceB The second source of the signal. - ConflictingNames(const std::string &rSignalName, - SIGNAL::SourceRegistry::HandleT sourceA, - SIGNAL::SourceRegistry::HandleT sourceB) : - VcdError(EXCEPTION::Error::CONFLICTING_SIGNAL_NAMES), - m_SignalName(rSignalName), - m_SourceA(sourceA), - m_SourceB(sourceB) - {} - - /// Returns the conflicting signal's name. - /// - /// The method is used while providing the detailed information - /// about the conflicting signal name. - const std::string &GetName() const - { - return m_SignalName; - } - - /// Returns the handle to the first source providing - /// the conflicting signal. - /// - /// The method is used while providing the detailed information - /// about the sources of the conflicting signal. - SIGNAL::SourceRegistry::HandleT GetSourceA() const - { - return m_SourceA; - } - - /// Returns the handle to the second source providing - /// the conflicting signal. - /// - /// The method is used while providing the detailed information - /// about the sources of the conflicting signal. - SIGNAL::SourceRegistry::HandleT GetSourceB() const - { - return m_SourceB; - } - - protected: - const std::string GetInfo() const - { - return std::string("Conflicting signal names! " + - this->GetName() + - " in the sources: " + - SIGNAL::SourceRegistry::GetInstance().GetSourceName(this->GetSourceA()) + - " and " + - SIGNAL::SourceRegistry::GetInstance().GetSourceName(this->GetSourceB()) ); - } - - private: - /// The duplicated signal's name. - const std::string m_SignalName; - - /// The first source of the signal. - const SIGNAL::SourceRegistry::HandleT m_SourceA; - - /// The second source of the signal. - const SIGNAL::SourceRegistry::HandleT m_SourceB; -}; - SIGNAL::SignalDb::SignalDb(const std::string &rTimeUnit) : m_TimeUnit(rTimeUnit) { @@ -140,7 +50,8 @@ void SIGNAL::SignalDb::Add(const SIGNAL::Signal *pSignal) // A signal shall have a valid source once added to the database. if (pSignal->GetSource() == SourceRegistry::BAD_HANDLE) { - throw InvalidSignalSource(); + throw EXCEPTION::VcdException(EXCEPTION::Error::INVALID_SIGNAL_SOURCE, + "Invalid signal source."); } const auto it = m_AddedSignals.find(pSignal->GetName()); @@ -156,9 +67,13 @@ void SIGNAL::SignalDb::Add(const SIGNAL::Signal *pSignal) (it->second->GetSource() != pSignal->GetSource()) ) { // There are duplicated signal names in different sources. - throw ConflictingNames(pSignal->GetName(), - it->second->GetSource(), - pSignal->GetSource()); + throw EXCEPTION::VcdException(EXCEPTION::Error::CONFLICTING_SIGNAL_NAMES, + "Conflicting signal names! " + + pSignal->GetName() + + " in the sources: " + + SIGNAL::SourceRegistry::GetInstance().GetSourceName(it->second->GetSource()) + + " and " + + SIGNAL::SourceRegistry::GetInstance().GetSourceName(pSignal->GetSource())); } } diff --git a/sources/common/src/SourceRegistry.cpp b/sources/common/src/SourceRegistry.cpp index cdf6a20..35a215c 100644 --- a/sources/common/src/SourceRegistry.cpp +++ b/sources/common/src/SourceRegistry.cpp @@ -29,31 +29,7 @@ /// IN THE SOFTWARE. #include "SourceRegistry.h" -#include "VcdError.h" - -/// Logic error. Cannot find source signal name. -class CannotFindSourceSignalName : public EXCEPTION::VcdErrorLogic -{ - public: - /// The cannot find source signal name exception constructor. - CannotFindSourceSignalName() : - VcdErrorLogic(EXCEPTION::Error::CANNOT_FIND_SOURCE_SIGNAL_NAME, - "Couldn't find source signal name!") - { - } -}; - -/// Logic error. Too many signal sources. -class TooManySignalSources : public EXCEPTION::VcdErrorLogic -{ - public: - /// Too many signal sources exception constructor. - TooManySignalSources() : - VcdErrorLogic(EXCEPTION::Error::TOO_MANY_SIGNAL_SOURCES, - "Too many signal sources!") - { - } -}; +#include "VcdException.h" SIGNAL::SourceRegistry::HandleT SIGNAL::SourceRegistry::Register(const std::string &rSourceName) { @@ -82,7 +58,8 @@ std::string SIGNAL::SourceRegistry::GetSourceName(const HandleT sourceHandle) co } } - throw CannotFindSourceSignalName(); + throw EXCEPTION::VcdLogicException(EXCEPTION::Error::CANNOT_FIND_SOURCE_SIGNAL_NAME, + "Couldn't find source signal name!"); } SIGNAL::SourceRegistry::HandleT SIGNAL::SourceRegistry::GetHandleForSource(const std::string &rSourceName) @@ -109,6 +86,7 @@ SIGNAL::SourceRegistry::HandleT SIGNAL::SourceRegistry::GetNewHandle() } else { - throw TooManySignalSources(); + throw EXCEPTION::VcdLogicException(EXCEPTION::Error::TOO_MANY_SIGNAL_SOURCES, + "Too many signal sources!"); } } diff --git a/sources/common/src/Utils.cpp b/sources/common/src/Utils.cpp index 205c8f4..19bb186 100644 --- a/sources/common/src/Utils.cpp +++ b/sources/common/src/Utils.cpp @@ -33,6 +33,7 @@ #include "Utils.h" #include "Signal.h" +#include "VcdException.h" std::vector UTILS::Split(const std::string &rInString, const char delimiter) @@ -64,7 +65,8 @@ size_t UTILS::GetTimeUnitIndex(const std::string &rUnit) if (index == SIGNAL::Signal::TIME_UNITS.size()) { - throw InvalidTimeUnit(rUnit); + throw EXCEPTION::VcdException(EXCEPTION::Error::INVALID_TIME_UNIT, + "Invalid time unit: " + rUnit); } else { diff --git a/sources/vcdMaker/src/vcdMaker.cpp b/sources/vcdMaker/src/vcdMaker.cpp index 68cd690..b5a0a87 100644 --- a/sources/vcdMaker/src/vcdMaker.cpp +++ b/sources/vcdMaker/src/vcdMaker.cpp @@ -22,8 +22,6 @@ /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS /// IN THE SOFTWARE. -#include -#include #include #include "VCDTracer.h" @@ -32,6 +30,7 @@ #include "SourceRegistry.h" #include "LineCounter.h" #include "VcdException.h" +#include "Logger.h" /// The vcdMaker main function. /// @@ -40,6 +39,9 @@ /// @return The execution status. int main(int argc, const char *argv[]) { + // The application execution status. + int32_t executionStatus = EXECUTION::APP_OK; + // Parse input parameters CLI::CliMaker cli; cli.Parse(argc, argv); @@ -75,7 +77,10 @@ int main(int argc, const char *argv[]) } catch (const EXCEPTION::VcdException &rException) { - std::cerr << rException.GetMessage(); + LOGGER::Logger logger; + logger.Log(rException); + executionStatus = EXECUTION::APP_ERROR; } -} + return executionStatus; +} diff --git a/sources/vcdMerge/inc/Merge.h b/sources/vcdMerge/inc/Merge.h index 3627977..e3b6e55 100644 --- a/sources/vcdMerge/inc/Merge.h +++ b/sources/vcdMerge/inc/Merge.h @@ -41,10 +41,8 @@ /// The merging engine. namespace MERGE { - /// The merging unit class. Allows for merging different - /// signal sources. - /// The merging unit class. + /// Allows for merging different signal sources. class Merge { public: diff --git a/sources/vcdMerge/inc/SignalSource.h b/sources/vcdMerge/inc/SignalSource.h index d9d8abc..772cd3a 100644 --- a/sources/vcdMerge/inc/SignalSource.h +++ b/sources/vcdMerge/inc/SignalSource.h @@ -34,9 +34,8 @@ namespace MERGE { - /// The objects of this class describe the source and holds source data. - /// The signal source base class. + /// The objects of this class describe the source and holds source data. class SignalSource { public: diff --git a/sources/vcdMerge/src/Merge.cpp b/sources/vcdMerge/src/Merge.cpp index 3ca5de6..e20ca4a 100644 --- a/sources/vcdMerge/src/Merge.cpp +++ b/sources/vcdMerge/src/Merge.cpp @@ -30,57 +30,11 @@ #include #include #include -#include #include "Merge.h" #include "Utils.h" -#include "VcdWarning.h" - -/// The synchronization time out of bounds. -class SynchronizationTimeOutOfBounds : public EXCEPTION::VcdWarning -{ - public: - /// The warning constructor. - /// - /// @param rSource The full source description. - SynchronizationTimeOutOfBounds(const std::string &rSource) : - VcdWarning(EXCEPTION::Warning::SYNCHRONIZATION_TIME_OUT_OF_BOUNDS, - "Synchronization time out of bounds. Cannot merge " + rSource + ".") - { - } -}; - -/// The timestamp out of bounds. -class TimestampOutOfBounds : public EXCEPTION::VcdWarning -{ - public: - /// The warning constructor. - /// - /// @param rSignalName The name of the troublesome signal. - /// @param timestamp The timestamp of the signal. - /// @param rTimeUnit The time unit of the signal. - TimestampOutOfBounds(const std::string &rSignalName, uint64_t timestamp, const std::string &rTimeUnit) : - VcdWarning(EXCEPTION::Warning::TIMESTAMP_OUT_OF_BOUNDS, - std::string("Timestamp out of bounds. Cannot merge " + - rSignalName + - " at " + - std::to_string(timestamp) + " " + - rTimeUnit)) - { - } -}; - -/// The leading time out of bounds. -class LeadingTimeOutOfBounds : public EXCEPTION::VcdErrorGeneric -{ - public: - /// The error constructor. - LeadingTimeOutOfBounds() : - VcdErrorGeneric(EXCEPTION::Error::LEADING_TIME_OUT_OF_BOUNDS, - "Leading time out of bounds.") - { - } -}; +#include "VcdException.h" +#include "Logger.h" const uint64_t MERGE::Merge::TEN_POWER[] = { @@ -115,14 +69,15 @@ void MERGE::Merge::Run() catch (std::runtime_error &) { // Sources cannot be merged. - throw LeadingTimeOutOfBounds(); + throw EXCEPTION::VcdException(EXCEPTION::Error::LEADING_TIME_OUT_OF_BOUNDS, + "Leading time out of bounds."); } // Merge Sources. - for (const SignalSource *source : m_Sources) + for (const SignalSource *pSource : m_Sources) { // Get the source's time unit. - const std::string source_time_unit = source->GetTimeUnit(); + const std::string source_time_unit = pSource->GetTimeUnit(); // Source sync time in the target unit. uint64_t transformed_source_sync = 0; @@ -130,40 +85,48 @@ void MERGE::Merge::Run() try { transformed_source_sync = - TransformTimestamp(source->GetSyncPoint(), m_MinTimeUnit, source_time_unit); + TransformTimestamp(pSource->GetSyncPoint(), m_MinTimeUnit, source_time_unit); } catch (std::runtime_error &) { - SynchronizationTimeOutOfBounds warning(source->GetDescription()); + LOGGER::Logger logger; + logger.LogWarning(EXCEPTION::Warning::SYNCHRONIZATION_TIME_OUT_OF_BOUNDS, + "Synchronization time out of bounds. Cannot merge " + pSource->GetDescription() + "."); continue; } // Merge signals here. - for (auto current_signal : source->Get()->GetSignals()) + for (auto current_signal : pSource->Get()->GetSignals()) { - SIGNAL::Signal *signal = current_signal->Clone(); + SIGNAL::Signal *pSignal = current_signal->Clone(); try { // Set the signal's new timestamp. - signal->SetTimestamp(CalculateNewTime(TransformTimestamp(signal->GetTimestamp(), + pSignal->SetTimestamp(CalculateNewTime(TransformTimestamp(pSignal->GetTimestamp(), m_MinTimeUnit, source_time_unit), transformed_source_sync)); } catch (std::runtime_error &) { - TimestampOutOfBounds warning(signal->GetName(), signal->GetTimestamp(), source->GetTimeUnit()); - - delete signal; + LOGGER::Logger logger; + logger.LogWarning(EXCEPTION::Warning::TIMESTAMP_OUT_OF_BOUNDS, + std::string("Timestamp out of bounds. Cannot merge " + + pSignal->GetName() + + " at " + + std::to_string(pSignal->GetTimestamp()) + " " + + pSource->GetTimeUnit())); + + delete pSignal; continue; } // Update its name. - signal->SetName(source->GetPrefix() + signal->GetName()); + pSignal->SetName(pSource->GetPrefix() + pSignal->GetName()); // Add to the output signals database. - m_pMerged->Add(signal); + m_pMerged->Add(pSignal); } } } diff --git a/sources/vcdMerge/src/SignalSource.cpp b/sources/vcdMerge/src/SignalSource.cpp index d679cb2..26908c5 100644 --- a/sources/vcdMerge/src/SignalSource.cpp +++ b/sources/vcdMerge/src/SignalSource.cpp @@ -8,7 +8,7 @@ /// /// @ingroup Merge /// -/// @par Copyright (c) 2016 vcdMaker team +/// @par Copyright (c) 2017 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -35,80 +35,7 @@ #include "SignalSource.h" #include "LineCounter.h" #include "Utils.h" -#include "VcdError.h" - -/// The synchronization point out of bounds exception. -class SynchronizationPointOutOfBounds : public EXCEPTION::VcdErrorGeneric -{ - public: - /// The error exception constructor. - /// - /// @param synchronizationPoint the value of the synchronization point. - SynchronizationPointOutOfBounds(uint64_t synchronizationPoint) : - VcdErrorGeneric(EXCEPTION::Error::SYNCHRONIZATION_POINT_OUT_OF_BOUNDS, - "Synchronization point value out of bounds: " + synchronizationPoint) - { - } -}; - -/// The invalid log file fomat error. -class InvalidLogFileFormat : public EXCEPTION::VcdErrorGeneric -{ - public: - /// The error exception constructor. - /// - /// @param rFormat The format of the invalid log file. - InvalidLogFileFormat(const std::string &rFormat) : - VcdErrorGeneric(EXCEPTION::Error::INVALID_LOG_FILE_FORMAT, - "Invalid log file format: " + rFormat) - { - } -}; - -/// Invalid synchronization point value error. -class InvalidSynchronizationPointValue : public EXCEPTION::VcdErrorGeneric -{ - public: - /// The error exception constructor. - /// - /// @param rValue The value of the invalid synchronization point. - InvalidSynchronizationPointValue(const std::string &rValue) : - VcdErrorGeneric(EXCEPTION::Error::INVALID_SYNCHRONIZATION_POINT_VALUE, - "Invalid synchronization point value: " + rValue) - { - } -}; - -/// Cannot open file error. -class CannotOpenFile : public EXCEPTION::VcdErrorGeneric -{ - /// @todo Duplicate. Maybe a common file class is needed. - public: - /// The error exception constructor. - /// - /// @param rFileName The name of the missing file. - CannotOpenFile(const std::string &rFileName) : - VcdErrorGeneric(EXCEPTION::Error::CANNOT_OPEN_FILE, - "Opening file '" + - rFileName + - "' failed, it either doesn't exist or is inaccessible.") - { - } -}; - -/// Invalid number of source parameters error. -class InvalidNumberOfSourceParameters : public EXCEPTION::VcdErrorGeneric -{ - public: - /// The error exception constructor. - /// - /// @param rSourceDescription The source description. - InvalidNumberOfSourceParameters(const std::string &rSourceDescription) : - VcdErrorGeneric(EXCEPTION::Error::INVALID_NUMBER_OF_SOURCE_PARAMS, - "Invalid number of source parameters: " + rSourceDescription) - { - } -}; +#include "VcdException.h" MERGE::SignalSource::SignalSource(const std::string &rDescription, SIGNAL::SourceRegistry &rSignalRegistry, @@ -134,7 +61,8 @@ uint64_t MERGE::SignalSource::GetLeadingTime() const // The sync point value is out of bounds. if ((t0 > m_SyncPoint) && (m_SyncPoint > 0)) { - throw SynchronizationPointOutOfBounds(m_SyncPoint); + throw EXCEPTION::VcdException(EXCEPTION::Error::SYNCHRONIZATION_POINT_OUT_OF_BOUNDS, + "Synchronization point value out of bounds: " + m_SyncPoint); } return (m_SyncPoint - t0); @@ -171,7 +99,8 @@ void MERGE::SignalSource::SetFormat(const std::string &rFormat) { if (rFormat != "T") { - throw InvalidLogFileFormat(rFormat); + throw EXCEPTION::VcdException(EXCEPTION::Error::INVALID_LOG_FILE_FORMAT, + "Invalid log file format: " + rFormat); } } @@ -183,7 +112,8 @@ void MERGE::SignalSource::SetSyncPoint(const std::string &rSyncPoint) } catch (std::logic_error &) { - throw InvalidSynchronizationPointValue(rSyncPoint); + throw EXCEPTION::VcdException(EXCEPTION::Error::INVALID_SYNCHRONIZATION_POINT_VALUE, + "Invalid synchronization point value: " + rSyncPoint); } } @@ -195,7 +125,8 @@ void MERGE::SignalSource::SetTimeUnit(const std::string &rTimeUnit) } else { - throw UTILS::InvalidTimeUnit(rTimeUnit); + throw EXCEPTION::VcdException(EXCEPTION::Error::INVALID_TIME_UNIT, + "Invalid time unit: " + rTimeUnit); } } @@ -228,7 +159,10 @@ void MERGE::SignalSource::SetFilename(const std::string &rFilename) } else { - throw CannotOpenFile(rFilename); + throw EXCEPTION::VcdException(EXCEPTION::Error::CANNOT_OPEN_FILE, + "Opening file '" + + rFilename + + "' failed, it either doesn't exist or is inaccessible."); } } @@ -238,7 +172,8 @@ void MERGE::SignalSource::ParseParameters() if (params.size() != Parameters::SOURCE_PARAM_N) { - throw InvalidNumberOfSourceParameters(m_SourceDescription); + throw EXCEPTION::VcdException(EXCEPTION::Error::INVALID_NUMBER_OF_SOURCE_PARAMS, + "Invalid number of source parameters: " + m_SourceDescription); } else { diff --git a/sources/vcdMerge/src/vcdMerge.cpp b/sources/vcdMerge/src/vcdMerge.cpp index 2d15952..ac75d73 100644 --- a/sources/vcdMerge/src/vcdMerge.cpp +++ b/sources/vcdMerge/src/vcdMerge.cpp @@ -25,20 +25,10 @@ #include "CliMerge.h" #include "VCDTracer.h" #include "SourceRegistry.h" -#include "VcdError.h" +#include "VcdException.h" #include "SignalSource.h" #include "Merge.h" - -/// The invalid number of sources. -class InvalidNoOfSources : public EXCEPTION::VcdErrorGeneric -{ - public: - /// The invalid signal source exception constructor. - InvalidNoOfSources() : VcdErrorGeneric(EXCEPTION::Error::INVALID_NO_OF_SOURCES, - "There are at least two signal sources required.") - { - } -}; +#include "Logger.h" /// The vcdMerge main function. /// @@ -47,6 +37,9 @@ class InvalidNoOfSources : public EXCEPTION::VcdErrorGeneric /// @return The execution status. int main(int argc, const char *argv[]) { + // The application execution status. + int32_t executionStatus = EXECUTION::APP_OK; + // Parse input parameters CLI::CliMerge cli; cli.Parse(argc, argv); @@ -66,7 +59,8 @@ int main(int argc, const char *argv[]) // There must be at least 2 files to be merged. if (in_parameters.size() < 2) { - throw InvalidNoOfSources(); + throw EXCEPTION::VcdException(EXCEPTION::Error::INVALID_NO_OF_SOURCES, + "There are at least two signal sources required."); } for (const std::string &source : in_parameters) @@ -93,10 +87,11 @@ int main(int argc, const char *argv[]) std::cout << '\n' << "Dumping " << cli.GetOutputFileName() << '\n'; vcd_trace.Dump(); } - catch (const EXCEPTION::VcdException &exception) + catch (const EXCEPTION::VcdException &rException) { - std::cerr << exception.GetMessage(); + LOGGER::Logger logger; + logger.Log(rException); + executionStatus = EXECUTION::APP_ERROR; } + return executionStatus; } - - diff --git a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj index c6f13fa..0123b80 100644 --- a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj +++ b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj @@ -147,6 +147,7 @@ + @@ -157,11 +158,9 @@ - - @@ -171,6 +170,7 @@ + diff --git a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj.filters b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj.filters index a5514fb..be86b04 100644 --- a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj.filters +++ b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj.filters @@ -65,9 +65,6 @@ Header Files - - Header Files - Header Files @@ -77,6 +74,15 @@ Header Files + + Header Files + + + Header Files + + + Header Files + @@ -127,5 +133,8 @@ Source Files + + Source Files + \ No newline at end of file From 27836b904fcd5ee10ce62f9792e824104526eec4 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Thu, 18 May 2017 21:20:53 +0200 Subject: [PATCH 021/143] #18 Fixed warning --- sources/common/inc/VcdException.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/common/inc/VcdException.h b/sources/common/inc/VcdException.h index 0f6065d..59cabdc 100644 --- a/sources/common/inc/VcdException.h +++ b/sources/common/inc/VcdException.h @@ -68,7 +68,7 @@ namespace EXCEPTION virtual ~VcdException(); /// Returns the ID of the exception. - const uint32_t GetId() const + uint32_t GetId() const { return m_ExceptionId; } From b49382521525840ee3b58fb2f0fe79a0c74b0e09 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Wed, 24 May 2017 22:15:23 +0200 Subject: [PATCH 022/143] #18 Final fixes --- sources/common/inc/Logger.h | 32 ++++++++++++++++++--------- sources/common/inc/VcdException.h | 14 ++++-------- sources/common/inc/VcdExceptionList.h | 2 +- sources/common/src/Logger.cpp | 20 ++++++++++++----- sources/vcdMaker/src/vcdMaker.cpp | 3 +-- sources/vcdMerge/src/Merge.cpp | 20 ++++++++--------- sources/vcdMerge/src/vcdMerge.cpp | 3 +-- 7 files changed, 53 insertions(+), 41 deletions(-) diff --git a/sources/common/inc/Logger.h b/sources/common/inc/Logger.h index c4fc32e..174bcd4 100644 --- a/sources/common/inc/Logger.h +++ b/sources/common/inc/Logger.h @@ -46,20 +46,29 @@ namespace LOGGER class Logger { public: - /// The logger constructor. - Logger() - {} - - /// The destructor. - ~Logger(); - /// The warning logging method. void LogWarning(uint32_t number, const std::string &rMessage); /// The error logging method. - void Log(const EXCEPTION::VcdException &rException); + void LogError(const EXCEPTION::VcdException &rException); + + /// Let the logger be a singleton. + static Logger &GetInstance() + { + static Logger instance; + return instance; + } + + /// Sets the output stream. + /// The method is supposed for unit testing. + /// + /// @param pOutputStream The default outputstream for warnings and errors. + void SetOutput(std::ostream *pOutputStream); private: + /// Let it be a singleton. + Logger(); + /// Returns the formatted exception number. /// /// @param number The numeric value to be converted and formatted. @@ -67,11 +76,12 @@ namespace LOGGER /// Logging method. /// - /// @param rOs The output stream. Could be std::cout or std::cerr. /// @param rType The string representing the type of the logged message (error, warning). /// @param number The catalogued number of the warnning or error message. /// @param rMessage The message to be logged. - void Log(std::ostream &rOs, const std::string &rType, uint32_t number, const std::string &rMessage); + void Log(const std::string &rType, uint32_t number, const std::string &rMessage); + + /// The logger output. + std::ostream *m_pOutput; }; - inline Logger::~Logger() = default; } diff --git a/sources/common/inc/VcdException.h b/sources/common/inc/VcdException.h index 59cabdc..57e25af 100644 --- a/sources/common/inc/VcdException.h +++ b/sources/common/inc/VcdException.h @@ -64,16 +64,12 @@ namespace EXCEPTION { } - /// The destructor. - virtual ~VcdException(); - /// Returns the ID of the exception. uint32_t GetId() const { return m_ExceptionId; } }; - inline VcdException::~VcdException() = default; /// @brief The logic exception base class. /// The logic exception class shall be used @@ -86,12 +82,10 @@ namespace EXCEPTION /// @param id The error ID. /// @param rMessage The error message. VcdLogicException(uint32_t id, const std::string &rMessage) : - VcdException(id, rMessage + - " Please e-mail your application version, parameters and input files to vcdmaker@mail.com for analysis.") + VcdException(id, + rMessage + + " Please log an issue on https://github.com/WojciechRynczuk/vcdMaker." + + " Provide the application version, parameters and input files if possible.") {} - - /// The default destructor. - ~VcdLogicException(); }; - inline VcdLogicException::~VcdLogicException() = default; } diff --git a/sources/common/inc/VcdExceptionList.h b/sources/common/inc/VcdExceptionList.h index d636d56..adec80e 100644 --- a/sources/common/inc/VcdExceptionList.h +++ b/sources/common/inc/VcdExceptionList.h @@ -93,4 +93,4 @@ namespace EXCEPTION /// Too many signal sources. const uint32_t TOO_MANY_SIGNAL_SOURCES = 9002U; } -} \ No newline at end of file +} diff --git a/sources/common/src/Logger.cpp b/sources/common/src/Logger.cpp index fac45c6..ef7c022 100644 --- a/sources/common/src/Logger.cpp +++ b/sources/common/src/Logger.cpp @@ -30,17 +30,27 @@ #include #include #include +#include #include "Logger.h" +LOGGER::Logger::Logger() : + m_pOutput(&std::cerr) +{} + void LOGGER::Logger::LogWarning(uint32_t number, const std::string &rMessage) { - Log(std::cout, "Warning", number, rMessage); + Log("Warning", number, rMessage); +} + +void LOGGER::Logger::LogError(const EXCEPTION::VcdException &rException) +{ + Log("Error", rException.GetId(), rException.what()); } -void LOGGER::Logger::Log(const EXCEPTION::VcdException &rException) +void LOGGER::Logger::SetOutput(std::ostream *pOutputStream) { - Log(std::cerr, "Error", rException.GetId(), rException.what()); + m_pOutput = pOutputStream; } const std::string LOGGER::Logger::FormatNumber(uint32_t number) const @@ -51,7 +61,7 @@ const std::string LOGGER::Logger::FormatNumber(uint32_t number) const return exceptionValue.str(); } -void LOGGER::Logger::Log(std::ostream &rOs, const std::string &rType, uint32_t number, const std::string &rMessage) +void LOGGER::Logger::Log(const std::string &rType, uint32_t number, const std::string &rMessage) { - rOs << "[" << rType << " " << FormatNumber(number) << "]: " << rMessage << '\n'; + *m_pOutput << "[" << rType << " " << FormatNumber(number) << "]: " << rMessage << '\n'; } diff --git a/sources/vcdMaker/src/vcdMaker.cpp b/sources/vcdMaker/src/vcdMaker.cpp index b5a0a87..34359e7 100644 --- a/sources/vcdMaker/src/vcdMaker.cpp +++ b/sources/vcdMaker/src/vcdMaker.cpp @@ -77,8 +77,7 @@ int main(int argc, const char *argv[]) } catch (const EXCEPTION::VcdException &rException) { - LOGGER::Logger logger; - logger.Log(rException); + LOGGER::Logger::GetInstance().LogError(rException); executionStatus = EXECUTION::APP_ERROR; } diff --git a/sources/vcdMerge/src/Merge.cpp b/sources/vcdMerge/src/Merge.cpp index e20ca4a..289e295 100644 --- a/sources/vcdMerge/src/Merge.cpp +++ b/sources/vcdMerge/src/Merge.cpp @@ -89,9 +89,10 @@ void MERGE::Merge::Run() } catch (std::runtime_error &) { - LOGGER::Logger logger; - logger.LogWarning(EXCEPTION::Warning::SYNCHRONIZATION_TIME_OUT_OF_BOUNDS, - "Synchronization time out of bounds. Cannot merge " + pSource->GetDescription() + "."); + LOGGER::Logger::GetInstance().LogWarning(EXCEPTION::Warning::SYNCHRONIZATION_TIME_OUT_OF_BOUNDS, + "Synchronization time out of bounds. Cannot merge " + + pSource->GetDescription() + + "."); continue; } @@ -110,13 +111,12 @@ void MERGE::Merge::Run() } catch (std::runtime_error &) { - LOGGER::Logger logger; - logger.LogWarning(EXCEPTION::Warning::TIMESTAMP_OUT_OF_BOUNDS, - std::string("Timestamp out of bounds. Cannot merge " + - pSignal->GetName() + - " at " + - std::to_string(pSignal->GetTimestamp()) + " " + - pSource->GetTimeUnit())); + LOGGER::Logger::GetInstance().LogWarning(EXCEPTION::Warning::TIMESTAMP_OUT_OF_BOUNDS, + "Timestamp out of bounds. Cannot merge " + + pSignal->GetName() + + " at " + + std::to_string(pSignal->GetTimestamp()) + " " + + pSource->GetTimeUnit()); delete pSignal; continue; diff --git a/sources/vcdMerge/src/vcdMerge.cpp b/sources/vcdMerge/src/vcdMerge.cpp index ac75d73..69e4120 100644 --- a/sources/vcdMerge/src/vcdMerge.cpp +++ b/sources/vcdMerge/src/vcdMerge.cpp @@ -89,8 +89,7 @@ int main(int argc, const char *argv[]) } catch (const EXCEPTION::VcdException &rException) { - LOGGER::Logger logger; - logger.Log(rException); + LOGGER::Logger::GetInstance().LogError(rException); executionStatus = EXECUTION::APP_ERROR; } return executionStatus; From b7a554de9660c1f6bd6552565f1e4ab0015af15f Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Tue, 30 May 2017 22:55:19 +0200 Subject: [PATCH 023/143] #22 Support different line endings --- sources/common/inc/EventSignalCreator.h | 2 +- sources/common/inc/FSignalCreator.h | 2 +- sources/common/inc/ISignalCreator.h | 2 +- sources/common/inc/SignalCreator.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sources/common/inc/EventSignalCreator.h b/sources/common/inc/EventSignalCreator.h index 72d2af9..3d7c220 100644 --- a/sources/common/inc/EventSignalCreator.h +++ b/sources/common/inc/EventSignalCreator.h @@ -38,7 +38,7 @@ namespace PARSER /// The event signal creator constructor. EventSignalCreator() : - SignalCreator("^#([[:d:]]+) ([[:graph:]]+) e") + SignalCreator("^#([[:d:]]+) ([[:graph:]]+) e .*") { } diff --git a/sources/common/inc/FSignalCreator.h b/sources/common/inc/FSignalCreator.h index d2c011e..c5eb5c1 100644 --- a/sources/common/inc/FSignalCreator.h +++ b/sources/common/inc/FSignalCreator.h @@ -40,7 +40,7 @@ namespace PARSER /// The real signal creator constructor. FSignalCreator() : - SignalCreator("^#([[:d:]]+) ([[:graph:]]+) ([[:d:][:punct:]]+) f.*$") + SignalCreator("^#([[:d:]]+) ([[:graph:]]+) ([[:d:][:punct:]]+) f .*") { } diff --git a/sources/common/inc/ISignalCreator.h b/sources/common/inc/ISignalCreator.h index d602f8d..faa6df5 100644 --- a/sources/common/inc/ISignalCreator.h +++ b/sources/common/inc/ISignalCreator.h @@ -38,7 +38,7 @@ namespace PARSER public: /// The integer signal creator constructor. ISignalCreator() : - SignalCreator("^#([[:d:]]+) ([[:graph:]]+) ([[:d:]]+) ([[:d:]]+).*$") + SignalCreator("^#([[:d:]]+) ([[:graph:]]+) ([[:d:]]+) ([[:d:]]+) .*") { } diff --git a/sources/common/inc/SignalCreator.h b/sources/common/inc/SignalCreator.h index db0613a..e927531 100644 --- a/sources/common/inc/SignalCreator.h +++ b/sources/common/inc/SignalCreator.h @@ -49,7 +49,7 @@ namespace PARSER /// which will be matched against the log line. /// @param signalRegEx The regular expression to be matech against the log line. SignalCreator(const std::string &signalRegEx) : - m_SignalRegEx(signalRegEx) + m_SignalRegEx(signalRegEx + "\r?\n") { } From 1bbebfc52da3d79e751629d97724eb81f55a33e8 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Wed, 31 May 2017 22:16:27 +0200 Subject: [PATCH 024/143] #22 Regex fixes --- sources/common/inc/EventSignalCreator.h | 6 +++--- sources/common/inc/FSignalCreator.h | 6 +++--- sources/common/inc/ISignalCreator.h | 6 +++--- sources/common/inc/SignalCreator.h | 12 ++++++------ sources/common/src/EventSignalCreator.cpp | 6 +++--- sources/common/src/FSignalCreator.cpp | 6 +++--- sources/common/src/ISignalCreator.cpp | 6 +++--- 7 files changed, 24 insertions(+), 24 deletions(-) diff --git a/sources/common/inc/EventSignalCreator.h b/sources/common/inc/EventSignalCreator.h index 3d7c220..62c2a89 100644 --- a/sources/common/inc/EventSignalCreator.h +++ b/sources/common/inc/EventSignalCreator.h @@ -4,7 +4,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2016 vcdMaker team +/// @par Copyright (c) 2017 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -38,12 +38,12 @@ namespace PARSER /// The event signal creator constructor. EventSignalCreator() : - SignalCreator("^#([[:d:]]+) ([[:graph:]]+) e .*") + SignalCreator("^#([[:d:]]+) ([[:graph:]]+) e *.*") { } /// @copydoc SignalCreator::Create() - virtual SIGNAL::Signal *Create(const std::string &logLine, + virtual SIGNAL::Signal *Create(const std::string &rLogLine, SIGNAL::SourceRegistry::HandleT sourceHandle) const; }; diff --git a/sources/common/inc/FSignalCreator.h b/sources/common/inc/FSignalCreator.h index c5eb5c1..f0dccdd 100644 --- a/sources/common/inc/FSignalCreator.h +++ b/sources/common/inc/FSignalCreator.h @@ -4,7 +4,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2016 vcdMaker team +/// @par Copyright (c) 2017 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -40,12 +40,12 @@ namespace PARSER /// The real signal creator constructor. FSignalCreator() : - SignalCreator("^#([[:d:]]+) ([[:graph:]]+) ([[:d:][:punct:]]+) f .*") + SignalCreator("^#([[:d:]]+) ([[:graph:]]+) ([[:d:][:punct:]]+) f *.*") { } /// @copydoc SignalCreator::Create() - virtual SIGNAL::Signal *Create(const std::string &logLine, + virtual SIGNAL::Signal *Create(const std::string &rLogLine, SIGNAL::SourceRegistry::HandleT sourceHandle) const; }; diff --git a/sources/common/inc/ISignalCreator.h b/sources/common/inc/ISignalCreator.h index faa6df5..706308d 100644 --- a/sources/common/inc/ISignalCreator.h +++ b/sources/common/inc/ISignalCreator.h @@ -4,7 +4,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2016 vcdMaker team +/// @par Copyright (c) 2017 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -38,12 +38,12 @@ namespace PARSER public: /// The integer signal creator constructor. ISignalCreator() : - SignalCreator("^#([[:d:]]+) ([[:graph:]]+) ([[:d:]]+) ([[:d:]]+) .*") + SignalCreator("^#([[:d:]]+) ([[:graph:]]+) ([[:d:]]+) ([[:d:]]+) *.*") { } /// @copydoc SignalCreator::Create() - virtual SIGNAL::Signal *Create(const std::string &logLine, + virtual SIGNAL::Signal *Create(const std::string &rLogLine, SIGNAL::SourceRegistry::HandleT sourceHandle) const; }; diff --git a/sources/common/inc/SignalCreator.h b/sources/common/inc/SignalCreator.h index e927531..35619ba 100644 --- a/sources/common/inc/SignalCreator.h +++ b/sources/common/inc/SignalCreator.h @@ -8,7 +8,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2016 vcdMaker team +/// @par Copyright (c) 2017 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -47,9 +47,9 @@ namespace PARSER /// /// The constructor initializes the regular expression member variable /// which will be matched against the log line. - /// @param signalRegEx The regular expression to be matech against the log line. - SignalCreator(const std::string &signalRegEx) : - m_SignalRegEx(signalRegEx + "\r?\n") + /// @param rSignalRegEx The regular expression to be matech against the log line. + SignalCreator(const std::string &rSignalRegEx) : + m_SignalRegEx(rSignalRegEx + "\r?$") { } @@ -63,10 +63,10 @@ namespace PARSER /// If the log line is not matching the integer object specification /// then nullptr is returned. /// - /// @param logLine The log line serving as the creation specification. + /// @param rLogLine The log line serving as the creation specification. /// @param sourceHandle Signal source handle. /// @return Signal pointer if the object has been created or nullptr. - virtual SIGNAL::Signal *Create(const std::string &logLine, + virtual SIGNAL::Signal *Create(const std::string &rLogLine, SIGNAL::SourceRegistry::HandleT sourceHandle) const = 0; protected: diff --git a/sources/common/src/EventSignalCreator.cpp b/sources/common/src/EventSignalCreator.cpp index 34354ca..2d9863b 100644 --- a/sources/common/src/EventSignalCreator.cpp +++ b/sources/common/src/EventSignalCreator.cpp @@ -4,7 +4,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2016 vcdMaker team +/// @par Copyright (c) 2017 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -27,12 +27,12 @@ #include "EventSignalCreator.h" #include "EventSignal.h" -SIGNAL::Signal *PARSER::EventSignalCreator::Create(const std::string &logLine, +SIGNAL::Signal *PARSER::EventSignalCreator::Create(const std::string &rLogLine, SIGNAL::SourceRegistry::HandleT sourceHandle) const { std::smatch result; - if (true == std::regex_search(logLine, result, m_SignalRegEx)) + if (true == std::regex_search(rLogLine, result, m_SignalRegEx)) { return new SIGNAL::EventSignal(result[2].str(), std::stoll(result[1].str()), diff --git a/sources/common/src/FSignalCreator.cpp b/sources/common/src/FSignalCreator.cpp index 88ee75d..e77352c 100644 --- a/sources/common/src/FSignalCreator.cpp +++ b/sources/common/src/FSignalCreator.cpp @@ -4,7 +4,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2016 vcdMaker team +/// @par Copyright (c) 2017 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -27,12 +27,12 @@ #include "FSignalCreator.h" #include "FSignal.h" -SIGNAL::Signal *PARSER::FSignalCreator::Create(const std::string &logLine, +SIGNAL::Signal *PARSER::FSignalCreator::Create(const std::string &rLogLine, SIGNAL::SourceRegistry::HandleT sourceHandle) const { std::smatch result; - if (true == std::regex_search(logLine, result, m_SignalRegEx)) + if (true == std::regex_search(rLogLine, result, m_SignalRegEx)) { return new SIGNAL::FSignal(result[2].str(), std::stoll(result[1].str()), diff --git a/sources/common/src/ISignalCreator.cpp b/sources/common/src/ISignalCreator.cpp index db7de9f..87bb577 100644 --- a/sources/common/src/ISignalCreator.cpp +++ b/sources/common/src/ISignalCreator.cpp @@ -4,7 +4,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2016 vcdMaker team +/// @par Copyright (c) 2017 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -27,12 +27,12 @@ #include "ISignalCreator.h" #include "ISignal.h" -SIGNAL::Signal *PARSER::ISignalCreator::Create(const std::string &logLine, +SIGNAL::Signal *PARSER::ISignalCreator::Create(const std::string &rLogLine, SIGNAL::SourceRegistry::HandleT sourceHandle) const { std::smatch result; - if (true == std::regex_search(logLine, result, m_SignalRegEx)) + if (true == std::regex_search(rLogLine, result, m_SignalRegEx)) { return new SIGNAL::ISignal(result[2].str(), std::stoi(result[4].str()), From efb58d042bf4d1e03a99cc8b78829059a947c034 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Tue, 6 Jun 2017 17:13:08 +0200 Subject: [PATCH 025/143] #22 Regex fix --- sources/common/inc/EventSignalCreator.h | 2 +- sources/common/inc/FSignalCreator.h | 2 +- sources/common/inc/ISignalCreator.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sources/common/inc/EventSignalCreator.h b/sources/common/inc/EventSignalCreator.h index 62c2a89..a7dfd29 100644 --- a/sources/common/inc/EventSignalCreator.h +++ b/sources/common/inc/EventSignalCreator.h @@ -38,7 +38,7 @@ namespace PARSER /// The event signal creator constructor. EventSignalCreator() : - SignalCreator("^#([[:d:]]+) ([[:graph:]]+) e *.*") + SignalCreator("^#([[:d:]]+) ([[:graph:]]+) e[(?: .*)?[:space:]*]") { } diff --git a/sources/common/inc/FSignalCreator.h b/sources/common/inc/FSignalCreator.h index f0dccdd..0f74fe1 100644 --- a/sources/common/inc/FSignalCreator.h +++ b/sources/common/inc/FSignalCreator.h @@ -40,7 +40,7 @@ namespace PARSER /// The real signal creator constructor. FSignalCreator() : - SignalCreator("^#([[:d:]]+) ([[:graph:]]+) ([[:d:][:punct:]]+) f *.*") + SignalCreator("^#([[:d:]]+) ([[:graph:]]+) ([[:d:][:punct:]]+) f[(?: .*)?[:space:]*]") { } diff --git a/sources/common/inc/ISignalCreator.h b/sources/common/inc/ISignalCreator.h index 706308d..ead66c5 100644 --- a/sources/common/inc/ISignalCreator.h +++ b/sources/common/inc/ISignalCreator.h @@ -38,7 +38,7 @@ namespace PARSER public: /// The integer signal creator constructor. ISignalCreator() : - SignalCreator("^#([[:d:]]+) ([[:graph:]]+) ([[:d:]]+) ([[:d:]]+) *.*") + SignalCreator("^#([[:d:]]+) ([[:graph:]]+) ([[:d:]]+) ([[:d:]]+)[(?: .*)?[:space:]*]") { } From 3cf0a5a3416e6dbde7995a4b38b1630bfc6bdef0 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Tue, 6 Jun 2017 17:47:32 +0200 Subject: [PATCH 026/143] #22 Regex fix 2 --- sources/common/inc/EventSignalCreator.h | 2 +- sources/common/inc/FSignalCreator.h | 2 +- sources/common/inc/ISignalCreator.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sources/common/inc/EventSignalCreator.h b/sources/common/inc/EventSignalCreator.h index a7dfd29..fba8bf1 100644 --- a/sources/common/inc/EventSignalCreator.h +++ b/sources/common/inc/EventSignalCreator.h @@ -38,7 +38,7 @@ namespace PARSER /// The event signal creator constructor. EventSignalCreator() : - SignalCreator("^#([[:d:]]+) ([[:graph:]]+) e[(?: .*)?[:space:]*]") + SignalCreator("^#([[:digit:]]+) ([[:graph:]]+) e(?:[:space:]+.*)?") { } diff --git a/sources/common/inc/FSignalCreator.h b/sources/common/inc/FSignalCreator.h index 0f74fe1..40cf679 100644 --- a/sources/common/inc/FSignalCreator.h +++ b/sources/common/inc/FSignalCreator.h @@ -40,7 +40,7 @@ namespace PARSER /// The real signal creator constructor. FSignalCreator() : - SignalCreator("^#([[:d:]]+) ([[:graph:]]+) ([[:d:][:punct:]]+) f[(?: .*)?[:space:]*]") + SignalCreator("^#([[:digit:]]+) ([[:graph:]]+) ([[:d:][:punct:]]+) f(?:[:space:]+.*)?") { } diff --git a/sources/common/inc/ISignalCreator.h b/sources/common/inc/ISignalCreator.h index ead66c5..98ee9f2 100644 --- a/sources/common/inc/ISignalCreator.h +++ b/sources/common/inc/ISignalCreator.h @@ -38,7 +38,7 @@ namespace PARSER public: /// The integer signal creator constructor. ISignalCreator() : - SignalCreator("^#([[:d:]]+) ([[:graph:]]+) ([[:d:]]+) ([[:d:]]+)[(?: .*)?[:space:]*]") + SignalCreator("^#([[:digit:]]+) ([[:graph:]]+) ([[:digit:]]+) ([[:digit:]]+)(?:[:space:]+.*)?") { } From a9191854f8661cf2eb5a8e3d01a7a73cb75f1796 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Tue, 6 Jun 2017 22:15:58 +0200 Subject: [PATCH 027/143] #22 Regex fix. Removed non-capturing group. --- sources/common/inc/EventSignalCreator.h | 2 +- sources/common/inc/FSignalCreator.h | 2 +- sources/common/inc/ISignalCreator.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sources/common/inc/EventSignalCreator.h b/sources/common/inc/EventSignalCreator.h index fba8bf1..578fd77 100644 --- a/sources/common/inc/EventSignalCreator.h +++ b/sources/common/inc/EventSignalCreator.h @@ -38,7 +38,7 @@ namespace PARSER /// The event signal creator constructor. EventSignalCreator() : - SignalCreator("^#([[:digit:]]+) ([[:graph:]]+) e(?:[:space:]+.*)?") + SignalCreator("^#([[:digit:]]+) ([[:graph:]]+) e( +.*)?") { } diff --git a/sources/common/inc/FSignalCreator.h b/sources/common/inc/FSignalCreator.h index 40cf679..a49b3bd 100644 --- a/sources/common/inc/FSignalCreator.h +++ b/sources/common/inc/FSignalCreator.h @@ -40,7 +40,7 @@ namespace PARSER /// The real signal creator constructor. FSignalCreator() : - SignalCreator("^#([[:digit:]]+) ([[:graph:]]+) ([[:d:][:punct:]]+) f(?:[:space:]+.*)?") + SignalCreator("^#([[:digit:]]+) ([[:graph:]]+) ([[:d:][:punct:]]+) f( +.*)?") { } diff --git a/sources/common/inc/ISignalCreator.h b/sources/common/inc/ISignalCreator.h index 98ee9f2..5a4df2e 100644 --- a/sources/common/inc/ISignalCreator.h +++ b/sources/common/inc/ISignalCreator.h @@ -38,7 +38,7 @@ namespace PARSER public: /// The integer signal creator constructor. ISignalCreator() : - SignalCreator("^#([[:digit:]]+) ([[:graph:]]+) ([[:digit:]]+) ([[:digit:]]+)(?:[:space:]+.*)?") + SignalCreator("^#([[:digit:]]+) ([[:graph:]]+) ([[:digit:]]+) ([[:digit:]]+)( +.*)?") { } From d3b4a5cd5c2cf920276162a4e8520924dd1889d5 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Sat, 10 Jun 2017 12:24:06 +0200 Subject: [PATCH 028/143] #20 Tclap exceptions handling --- sources/vcdMaker/src/vcdMaker.cpp | 12 ++++++++---- sources/vcdMerge/src/vcdMerge.cpp | 13 +++++++++---- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/sources/vcdMaker/src/vcdMaker.cpp b/sources/vcdMaker/src/vcdMaker.cpp index 34359e7..70e7cc8 100644 --- a/sources/vcdMaker/src/vcdMaker.cpp +++ b/sources/vcdMaker/src/vcdMaker.cpp @@ -42,12 +42,12 @@ int main(int argc, const char *argv[]) // The application execution status. int32_t executionStatus = EXECUTION::APP_OK; - // Parse input parameters - CLI::CliMaker cli; - cli.Parse(argc, argv); - try { + // Parse input parameters + CLI::CliMaker cli; + cli.Parse(argc, argv); + // Create the log parser. PARSER::TxtParser txtLog(cli.GetInputFileName(), cli.GetTimebase(), @@ -80,6 +80,10 @@ int main(int argc, const char *argv[]) LOGGER::Logger::GetInstance().LogError(rException); executionStatus = EXECUTION::APP_ERROR; } + catch (TCLAP::CmdLineParseException &) + { + executionStatus = EXECUTION::APP_ERROR; + } return executionStatus; } diff --git a/sources/vcdMerge/src/vcdMerge.cpp b/sources/vcdMerge/src/vcdMerge.cpp index 69e4120..8a80b26 100644 --- a/sources/vcdMerge/src/vcdMerge.cpp +++ b/sources/vcdMerge/src/vcdMerge.cpp @@ -40,12 +40,12 @@ int main(int argc, const char *argv[]) // The application execution status. int32_t executionStatus = EXECUTION::APP_OK; - // Parse input parameters - CLI::CliMerge cli; - cli.Parse(argc, argv); - try { + // Parse input parameters + CLI::CliMerge cli; + cli.Parse(argc, argv); + // Get input sources. const std::vector &in_parameters = cli.GetInputSources(); @@ -92,5 +92,10 @@ int main(int argc, const char *argv[]) LOGGER::Logger::GetInstance().LogError(rException); executionStatus = EXECUTION::APP_ERROR; } + catch (TCLAP::CmdLineParseException &) + { + executionStatus = EXECUTION::APP_ERROR; + } + return executionStatus; } From 2f3a17c8b203ec7475a0a6b3450a429b5f6f8ca3 Mon Sep 17 00:00:00 2001 From: Endrju Date: Tue, 20 Jun 2017 20:31:26 +0200 Subject: [PATCH 029/143] Use getISignal more --- sources/common/test/unitTest/ISignal.cpp | 42 +++++++++++------------- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/sources/common/test/unitTest/ISignal.cpp b/sources/common/test/unitTest/ISignal.cpp index 33b1d27..5b4a91f 100644 --- a/sources/common/test/unitTest/ISignal.cpp +++ b/sources/common/test/unitTest/ISignal.cpp @@ -32,11 +32,23 @@ #include "stub/DummySignal.h" /// Create valid VCD line for ISignal. -static inline std::string getSignalPrint(const std::string &value) +static inline std::string getISignalPrint(const std::string &value) { return ('b' + value + ' ' + DummySignal::DUMMY_NAME); } +/// Create ISignal with given value and size (dummy by default). +/// Other parameters are dummies. +static inline SIGNAL::ISignal getISignal(uint64_t value, + size_t size = DummySignal::DUMMY_SIZE) +{ + return {DummySignal::DUMMY_NAME, + size, + DummySignal::DUMMY_TIMESTAMP, + value, + DummySignal::DUMMY_HANDLE}; +} + /// Structure describing expected signal value. class SignalValueTest { @@ -69,13 +81,10 @@ TEST_CASE("ISignal::Print") { for (const auto &testCase : SIGNAL_VALUE_TESTS) { - SIGNAL::ISignal signal(DummySignal::DUMMY_NAME, - testCase.m_Size, - DummySignal::DUMMY_TIMESTAMP, - testCase.m_Value, - DummySignal::DUMMY_HANDLE); + const SIGNAL::ISignal signal = + getISignal(testCase.m_Value, testCase.m_Size); - const std::string expectedPrint = getSignalPrint(testCase.m_ValueString); + const std::string expectedPrint = getISignalPrint(testCase.m_ValueString); REQUIRE(signal.Print() == expectedPrint); } @@ -105,28 +114,15 @@ TEST_CASE("ISignal::Footprint") { for (const auto &testCase : SIGNAL_SIZE_TESTS) { - SIGNAL::ISignal signal(DummySignal::DUMMY_NAME, - testCase.m_Size, - DummySignal::DUMMY_TIMESTAMP, - 0, - DummySignal::DUMMY_HANDLE); + const SIGNAL::ISignal signal = + getISignal(0, testCase.m_Size); - const std::string expectedFootprint = getSignalPrint(testCase.m_Footprint); + const std::string expectedFootprint = getISignalPrint(testCase.m_Footprint); REQUIRE(signal.Footprint() == expectedFootprint); } } -/// Create ISignal with given value. Other parameters are dummies. -static inline SIGNAL::ISignal getISignal(uint64_t value) -{ - return {DummySignal::DUMMY_NAME, - DummySignal::DUMMY_SIZE, - DummySignal::DUMMY_TIMESTAMP, - value, - DummySignal::DUMMY_HANDLE}; -} - TEST_CASE("ISignal::EqualTo") { SIGNAL::ISignal signal1 = getISignal(1); From ec2638edfd339ba330ea70a032b65a03a50c326f Mon Sep 17 00:00:00 2001 From: Endrju Date: Tue, 20 Jun 2017 20:31:45 +0200 Subject: [PATCH 030/143] FSignal UT --- sources/CMakeLists.txt | 6 ++ sources/common/test/unitTest/FSignal.cpp | 104 +++++++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 sources/common/test/unitTest/FSignal.cpp diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt index bcbe7bf..8b1e1e7 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -328,6 +328,12 @@ set(UT_ISIGNAL_SOURCES add_vcdtools_ut(utISignal "${UT_ISIGNAL_SOURCES}") +set(UT_FSIGNAL_SOURCES + ${COMMON_UT_DIR}/FSignal.cpp + ${COMMON_SOURCES_DIR}/FSignal.cpp) + +add_vcdtools_ut(utFSignal "${UT_FSIGNAL_SOURCES}") + set(UT_SOURCE_REGISTRY_SOURCES ${COMMON_UT_DIR}/SourceRegistry.cpp ${COMMON_SOURCES_DIR}/SourceRegistry.cpp) diff --git a/sources/common/test/unitTest/FSignal.cpp b/sources/common/test/unitTest/FSignal.cpp new file mode 100644 index 0000000..ce32898 --- /dev/null +++ b/sources/common/test/unitTest/FSignal.cpp @@ -0,0 +1,104 @@ +/// @file FSignal.cpp +/// +/// Unit test for FSignal class. +/// +/// @ingroup UnitTest +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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 "catch.hpp" + +#include "FSignal.h" +#include "stub/DummySignal.h" + +/// Create valid VCD line for FSignal. +static inline std::string getFSignalPrint(const std::string &value) +{ + return ('r' + value + ' ' + DummySignal::DUMMY_NAME); +} + +/// Create FSignal with given value. +/// Other parameters are dummies. +static inline SIGNAL::FSignal getFSignal(const std::string &value) +{ + return {DummySignal::DUMMY_NAME, + DummySignal::DUMMY_TIMESTAMP, + value, + DummySignal::DUMMY_HANDLE}; +} + +TEST_CASE("FSignal::Print") +{ + const std::string test_value = "123456789.10111213141516"; + + const SIGNAL::FSignal signal = + getFSignal(test_value); + + const std::string expectedPrint = getFSignalPrint(test_value); + + REQUIRE(signal.Print() == expectedPrint); +} + +TEST_CASE("FSignal::Footprint") +{ + const SIGNAL::FSignal signal = + getFSignal("0.0"); + + const std::string expectedFootprint = getFSignalPrint("0.0"); + + REQUIRE(signal.Footprint() == expectedFootprint); +} + +TEST_CASE("FSignal::EqualTo") +{ + SIGNAL::FSignal signal1 = getFSignal("1.1"); + SIGNAL::Signal &rSignal1 = signal1; + + SIGNAL::FSignal signal2 = getFSignal("2.2"); + SIGNAL::Signal &rSignal2 = signal2; + + SIGNAL::FSignal signal3 = getFSignal("2.2"); + SIGNAL::Signal &rSignal3 = signal3; + + DummySignal dummySignal(DummySignal::DUMMY_NAME, + DummySignal::DUMMY_TIMESTAMP); + SIGNAL::Signal &rDummySignal = dummySignal; + + SECTION("operator==") + { + REQUIRE(rSignal1 == rSignal1); + REQUIRE(rSignal2 == rSignal3); + REQUIRE_FALSE(rSignal1 == rSignal2); + + REQUIRE_FALSE(rSignal1 == rDummySignal); + REQUIRE_FALSE(rDummySignal == rSignal1); + } + SECTION("operator!=") + { + REQUIRE_FALSE(rSignal1 != rSignal1); + REQUIRE_FALSE(rSignal2 != rSignal3); + REQUIRE(rSignal1 != rSignal2); + + REQUIRE(rSignal1 != rDummySignal); + REQUIRE(rDummySignal != rSignal1); + } +} + From 25f9d840e37da6ec223740d679f9d4e716b84c40 Mon Sep 17 00:00:00 2001 From: Endrju Date: Tue, 20 Jun 2017 20:31:58 +0200 Subject: [PATCH 031/143] EventSignal UT --- sources/CMakeLists.txt | 5 ++ sources/common/test/unitTest/EventSignal.cpp | 91 ++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 sources/common/test/unitTest/EventSignal.cpp diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt index 8b1e1e7..ccbdefc 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -334,6 +334,11 @@ set(UT_FSIGNAL_SOURCES add_vcdtools_ut(utFSignal "${UT_FSIGNAL_SOURCES}") +set(UT_EVENTSIGNAL_SOURCES + ${COMMON_UT_DIR}/EventSignal.cpp) + +add_vcdtools_ut(utEventSignal "${UT_EVENTSIGNAL_SOURCES}") + set(UT_SOURCE_REGISTRY_SOURCES ${COMMON_UT_DIR}/SourceRegistry.cpp ${COMMON_SOURCES_DIR}/SourceRegistry.cpp) diff --git a/sources/common/test/unitTest/EventSignal.cpp b/sources/common/test/unitTest/EventSignal.cpp new file mode 100644 index 0000000..2a0b0db --- /dev/null +++ b/sources/common/test/unitTest/EventSignal.cpp @@ -0,0 +1,91 @@ +/// @file EventSignal.cpp +/// +/// Unit test for EventSignal class. +/// +/// @ingroup UnitTest +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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 "catch.hpp" + +#include "EventSignal.h" +#include "stub/DummySignal.h" + +/// Create valid VCD line for EventSignal. +static inline std::string getEventSignalPrint() +{ + return ('1' + std::string(DummySignal::DUMMY_NAME)); +} + +/// Create EventSignal. +static inline SIGNAL::EventSignal getEventSignal() +{ + return {DummySignal::DUMMY_NAME, + DummySignal::DUMMY_TIMESTAMP, + DummySignal::DUMMY_HANDLE}; +} + +TEST_CASE("EventSignal::Print") +{ + const SIGNAL::EventSignal signal = getEventSignal(); + + const std::string expectedPrint = getEventSignalPrint(); + + REQUIRE(signal.Print() == expectedPrint); +} + +TEST_CASE("EventSignal::Footprint") +{ + const SIGNAL::EventSignal signal = getEventSignal(); + + REQUIRE(signal.Footprint().empty()); +} + +TEST_CASE("EventSignal::EqualTo") +{ + SIGNAL::EventSignal signal1 = getEventSignal(); + SIGNAL::Signal &rSignal1 = signal1; + + SIGNAL::EventSignal signal2 = getEventSignal(); + SIGNAL::Signal &rSignal2 = signal2; + + DummySignal dummySignal(DummySignal::DUMMY_NAME, + DummySignal::DUMMY_TIMESTAMP); + SIGNAL::Signal &rDummySignal = dummySignal; + + SECTION("operator==") + { + REQUIRE_FALSE(rSignal1 == rSignal1); + REQUIRE_FALSE(rSignal1 == rSignal2); + + REQUIRE_FALSE(rSignal1 == rDummySignal); + REQUIRE_FALSE(rDummySignal == rSignal1); + } + SECTION("operator!=") + { + REQUIRE(rSignal1 != rSignal1); + REQUIRE(rSignal1 != rSignal2); + + REQUIRE(rSignal1 != rDummySignal); + REQUIRE(rDummySignal != rSignal1); + } +} + From cf45c952e4e9e19a53d3e722d5999d1ae3e3840b Mon Sep 17 00:00:00 2001 From: Endrju Date: Tue, 20 Jun 2017 21:04:41 +0200 Subject: [PATCH 032/143] Add more parameters to dummy signal --- sources/common/test/unitTest/Signal.cpp | 6 +++--- .../common/test/unitTest/stub/DummySignal.h | 19 ++++++++++++++----- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/sources/common/test/unitTest/Signal.cpp b/sources/common/test/unitTest/Signal.cpp index 6bd7cf7..e2e8e05 100644 --- a/sources/common/test/unitTest/Signal.cpp +++ b/sources/common/test/unitTest/Signal.cpp @@ -31,9 +31,9 @@ TEST_CASE("Signal") { - DummySignal dummySignal1("dummy1", 1); - DummySignal dummySignal2("dummy2", 2); - DummySignal dummySignal3("dummy2", 2); + DummySignal dummySignal1("dummy1", 1, "1"); + DummySignal dummySignal2("dummy2", 2, "2"); + DummySignal dummySignal3("dummy2", 2, "2"); SIGNAL::Signal &rSignal1 = dummySignal1; SIGNAL::Signal &rSignal2 = dummySignal2; diff --git a/sources/common/test/unitTest/stub/DummySignal.h b/sources/common/test/unitTest/stub/DummySignal.h index 3591bcc..1cb4ce0 100644 --- a/sources/common/test/unitTest/stub/DummySignal.h +++ b/sources/common/test/unitTest/stub/DummySignal.h @@ -42,22 +42,26 @@ class DummySignal : public SIGNAL::Signal static constexpr const char *DUMMY_NAME = "signal"; static const size_t DUMMY_SIZE = 32; static const uint64_t DUMMY_TIMESTAMP = 0; + static constexpr const char *DUMMY_VALUE = "0"; static constexpr const char *DUMMY_TYPE = "dummy"; static const SIGNAL::SourceRegistry::HandleT DUMMY_HANDLE = 1; /// @} /// Dumy signal signal constructor. DummySignal(const std::string &name, - uint64_t timestamp) : + uint64_t timestamp, + const std::string &value = DUMMY_VALUE, + SIGNAL::SourceRegistry::HandleT source = DUMMY_HANDLE) : Signal(name, DUMMY_SIZE, timestamp, DUMMY_TYPE, - DUMMY_HANDLE) + source), + m_Value(value) { } - /// Dumy signal signal cloning method. + /// Dummy signal signal cloning method. virtual Signal *Clone() const { return new DummySignal(*this); @@ -66,7 +70,7 @@ class DummySignal : public SIGNAL::Signal /// @copydoc Signal::Print() virtual std::string Print() const { - return "PRINT " + GetName(); + return "PRINT " + m_Value + " " + GetName(); } /// @copydoc Signal::Footprint() @@ -82,11 +86,16 @@ class DummySignal : public SIGNAL::Signal { if (DummySignal const *p = dynamic_cast(&other)) { - return (m_Name == p->m_Name); + return (m_Value == p->m_Value); } else { return false; } } + + private: + + /// Some dummy value. + std::string m_Value; }; From c0a76ddaf550316f652a616cb5c865515d594f23 Mon Sep 17 00:00:00 2001 From: Endrju Date: Thu, 22 Jun 2017 23:41:42 +0200 Subject: [PATCH 033/143] Some doxygen fixes --- sources/common/test/unitTest/EventSignal.cpp | 4 ++++ sources/common/test/unitTest/FSignal.cpp | 3 +++ sources/common/test/unitTest/ISignal.cpp | 7 +++++-- sources/common/test/unitTest/Signal.cpp | 3 +++ sources/common/test/unitTest/SourceRegistry.cpp | 1 + sources/common/test/unitTest/Utils.cpp | 3 +++ sources/common/test/unitTest/stub/DummySignal.h | 8 ++++---- sources/common/test/unitTest/stub/UtilsEmpty.cpp | 2 +- 8 files changed, 24 insertions(+), 7 deletions(-) diff --git a/sources/common/test/unitTest/EventSignal.cpp b/sources/common/test/unitTest/EventSignal.cpp index 2a0b0db..1c224a3 100644 --- a/sources/common/test/unitTest/EventSignal.cpp +++ b/sources/common/test/unitTest/EventSignal.cpp @@ -43,6 +43,7 @@ static inline SIGNAL::EventSignal getEventSignal() DummySignal::DUMMY_HANDLE}; } +/// Unit test for EventSignal::Print(). TEST_CASE("EventSignal::Print") { const SIGNAL::EventSignal signal = getEventSignal(); @@ -52,6 +53,7 @@ TEST_CASE("EventSignal::Print") REQUIRE(signal.Print() == expectedPrint); } +/// Unit test for EventSignal::Footprint(). TEST_CASE("EventSignal::Footprint") { const SIGNAL::EventSignal signal = getEventSignal(); @@ -59,6 +61,8 @@ TEST_CASE("EventSignal::Footprint") REQUIRE(signal.Footprint().empty()); } +/// Unit test for EventSignal::EqualTo(). +/// Note that EventSignal compares false to everything. TEST_CASE("EventSignal::EqualTo") { SIGNAL::EventSignal signal1 = getEventSignal(); diff --git a/sources/common/test/unitTest/FSignal.cpp b/sources/common/test/unitTest/FSignal.cpp index ce32898..d785cff 100644 --- a/sources/common/test/unitTest/FSignal.cpp +++ b/sources/common/test/unitTest/FSignal.cpp @@ -45,6 +45,7 @@ static inline SIGNAL::FSignal getFSignal(const std::string &value) DummySignal::DUMMY_HANDLE}; } +/// Unit test for FSignal::Print(). TEST_CASE("FSignal::Print") { const std::string test_value = "123456789.10111213141516"; @@ -57,6 +58,7 @@ TEST_CASE("FSignal::Print") REQUIRE(signal.Print() == expectedPrint); } +/// Unit test for FSignal::Footprint(). TEST_CASE("FSignal::Footprint") { const SIGNAL::FSignal signal = @@ -67,6 +69,7 @@ TEST_CASE("FSignal::Footprint") REQUIRE(signal.Footprint() == expectedFootprint); } +/// Unit test for FSignal::EqualTo(). TEST_CASE("FSignal::EqualTo") { SIGNAL::FSignal signal1 = getFSignal("1.1"); diff --git a/sources/common/test/unitTest/ISignal.cpp b/sources/common/test/unitTest/ISignal.cpp index 5b4a91f..171a5de 100644 --- a/sources/common/test/unitTest/ISignal.cpp +++ b/sources/common/test/unitTest/ISignal.cpp @@ -63,7 +63,7 @@ class SignalValueTest std::string m_ValueString; }; -/// Signal::Print() test vector. +/// ISignal::Print() test vector. SignalValueTest SIGNAL_VALUE_TESTS[] = { { 1, 0, "0" }, @@ -77,6 +77,7 @@ SignalValueTest SIGNAL_VALUE_TESTS[] = { 64, UINT64_C(2548849195707703904), "0010001101011111010101001101011011010000001100101010001001100000" } }; +/// Unit test for ISignal::Print(). TEST_CASE("ISignal::Print") { for (const auto &testCase : SIGNAL_VALUE_TESTS) @@ -101,7 +102,7 @@ class SignalSizeTest std::string m_Footprint; }; -/// Signal::Footprint() test vector. +/// ISignal::Footprint() test vector. SignalSizeTest SIGNAL_SIZE_TESTS[] = { { 1, "x" }, @@ -110,6 +111,7 @@ SignalSizeTest SIGNAL_SIZE_TESTS[] = { 64, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" } }; +/// Unit test for ISignal::Footprint(). TEST_CASE("ISignal::Footprint") { for (const auto &testCase : SIGNAL_SIZE_TESTS) @@ -123,6 +125,7 @@ TEST_CASE("ISignal::Footprint") } } +/// Unit test for ISignal::EqualTo(). TEST_CASE("ISignal::EqualTo") { SIGNAL::ISignal signal1 = getISignal(1); diff --git a/sources/common/test/unitTest/Signal.cpp b/sources/common/test/unitTest/Signal.cpp index e2e8e05..94cd0d4 100644 --- a/sources/common/test/unitTest/Signal.cpp +++ b/sources/common/test/unitTest/Signal.cpp @@ -29,6 +29,9 @@ #include "Signal.h" #include "stub/DummySignal.h" +/// Unit test for Signal class. +/// Since Signal class is an interface Dummy signal is used to test +/// operators and comparator. TEST_CASE("Signal") { DummySignal dummySignal1("dummy1", 1, "1"); diff --git a/sources/common/test/unitTest/SourceRegistry.cpp b/sources/common/test/unitTest/SourceRegistry.cpp index 12f382e..1af52d9 100644 --- a/sources/common/test/unitTest/SourceRegistry.cpp +++ b/sources/common/test/unitTest/SourceRegistry.cpp @@ -30,6 +30,7 @@ constexpr SIGNAL::SourceRegistry::HandleT SIGNAL::SourceRegistry::BAD_HANDLE; +/// Unit test for SourceRegistry class. TEST_CASE("SourceRegistry") { const std::string name1 = "abcd"; diff --git a/sources/common/test/unitTest/Utils.cpp b/sources/common/test/unitTest/Utils.cpp index 244cb59..cef1049 100644 --- a/sources/common/test/unitTest/Utils.cpp +++ b/sources/common/test/unitTest/Utils.cpp @@ -32,6 +32,7 @@ using namespace std::string_literals; using StringVector = std::vector; +/// Unit test for Split(). TEST_CASE("UTILS::Split") { REQUIRE((UTILS::Split(""s, '\0')) == (StringVector{})); @@ -43,6 +44,7 @@ TEST_CASE("UTILS::Split") REQUIRE((UTILS::Split("a b c d"s, ' ')) == (StringVector{"a"s, "b"s, "c"s, "d"s})); } +/// Unit test for IsTimeUnitValid(). TEST_CASE("UTILS::IsTimeUnitValid") { REQUIRE(UTILS::IsTimeUnitValid("a"s)); @@ -53,6 +55,7 @@ TEST_CASE("UTILS::IsTimeUnitValid") REQUIRE_FALSE(UTILS::IsTimeUnitValid("e"s)); } +/// Unit test for GetTimeUnitIndex(). TEST_CASE("UTILS::GetTimeUnitIndex") { REQUIRE(UTILS::GetTimeUnitIndex("a"s) == 0); diff --git a/sources/common/test/unitTest/stub/DummySignal.h b/sources/common/test/unitTest/stub/DummySignal.h index 1cb4ce0..8323fce 100644 --- a/sources/common/test/unitTest/stub/DummySignal.h +++ b/sources/common/test/unitTest/stub/DummySignal.h @@ -47,7 +47,7 @@ class DummySignal : public SIGNAL::Signal static const SIGNAL::SourceRegistry::HandleT DUMMY_HANDLE = 1; /// @} - /// Dumy signal signal constructor. + /// Dummy signal signal constructor. DummySignal(const std::string &name, uint64_t timestamp, const std::string &value = DUMMY_VALUE, @@ -67,13 +67,13 @@ class DummySignal : public SIGNAL::Signal return new DummySignal(*this); } - /// @copydoc Signal::Print() + /// @copydoc SIGNAL::Signal::Print() virtual std::string Print() const { return "PRINT " + m_Value + " " + GetName(); } - /// @copydoc Signal::Footprint() + /// @copydoc SIGNAL::Signal::Footprint() virtual std::string Footprint() const { return "FOOTPRINT " + GetName(); @@ -81,7 +81,7 @@ class DummySignal : public SIGNAL::Signal protected: - /// @copydoc Signal::EqualTo() + /// @copydoc SIGNAL::Signal::EqualTo() virtual bool EqualTo(Signal const &other) const { if (DummySignal const *p = dynamic_cast(&other)) diff --git a/sources/common/test/unitTest/stub/UtilsEmpty.cpp b/sources/common/test/unitTest/stub/UtilsEmpty.cpp index a9e2a02..8ae5894 100644 --- a/sources/common/test/unitTest/stub/UtilsEmpty.cpp +++ b/sources/common/test/unitTest/stub/UtilsEmpty.cpp @@ -3,7 +3,7 @@ /// Utilities stub for unit tests. /// /// @par Full Description -/// To make compliation possible. Contains dummy empty functions. +/// To make compilation possible. Contains dummy empty functions. /// /// @ingroup UnitTest /// From 4617d33c7b6d019ff72b9cc04c19f1aa54b77d29 Mon Sep 17 00:00:00 2001 From: Endrju Date: Thu, 22 Jun 2017 23:47:30 +0200 Subject: [PATCH 034/143] Missing doxygen comment --- sources/common/test/unitTest/Utils.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/sources/common/test/unitTest/Utils.cpp b/sources/common/test/unitTest/Utils.cpp index cef1049..4381803 100644 --- a/sources/common/test/unitTest/Utils.cpp +++ b/sources/common/test/unitTest/Utils.cpp @@ -30,6 +30,7 @@ using namespace std::string_literals; +/// Vector of strings. using StringVector = std::vector; /// Unit test for Split(). From 608611fd8d60033293d997ac23552a4a00bc1c76 Mon Sep 17 00:00:00 2001 From: Endrju Date: Thu, 22 Jun 2017 23:47:42 +0200 Subject: [PATCH 035/143] Use full paths so that doxygen is not confused --- sources/common/test/unitTest/EventSignal.cpp | 2 +- sources/common/test/unitTest/FSignal.cpp | 2 +- sources/common/test/unitTest/ISignal.cpp | 2 +- sources/common/test/unitTest/Signal.cpp | 2 +- sources/common/test/unitTest/SourceRegistry.cpp | 2 +- sources/common/test/unitTest/UtMain.cpp | 2 +- sources/common/test/unitTest/Utils.cpp | 2 +- sources/common/test/unitTest/stub/DummySignal.h | 2 +- sources/common/test/unitTest/stub/Signal.cpp | 2 +- sources/common/test/unitTest/stub/UtilsEmpty.cpp | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/sources/common/test/unitTest/EventSignal.cpp b/sources/common/test/unitTest/EventSignal.cpp index 1c224a3..8744b4b 100644 --- a/sources/common/test/unitTest/EventSignal.cpp +++ b/sources/common/test/unitTest/EventSignal.cpp @@ -1,4 +1,4 @@ -/// @file EventSignal.cpp +/// @file common/test/unitTest/EventSignal.cpp /// /// Unit test for EventSignal class. /// diff --git a/sources/common/test/unitTest/FSignal.cpp b/sources/common/test/unitTest/FSignal.cpp index d785cff..8dd04d8 100644 --- a/sources/common/test/unitTest/FSignal.cpp +++ b/sources/common/test/unitTest/FSignal.cpp @@ -1,4 +1,4 @@ -/// @file FSignal.cpp +/// @file common/test/unitTest/FSignal.cpp /// /// Unit test for FSignal class. /// diff --git a/sources/common/test/unitTest/ISignal.cpp b/sources/common/test/unitTest/ISignal.cpp index 171a5de..45fb444 100644 --- a/sources/common/test/unitTest/ISignal.cpp +++ b/sources/common/test/unitTest/ISignal.cpp @@ -1,4 +1,4 @@ -/// @file ISignal.cpp +/// @file common/test/unitTest/ISignal.cpp /// /// Unit test for ISignal class. /// diff --git a/sources/common/test/unitTest/Signal.cpp b/sources/common/test/unitTest/Signal.cpp index 94cd0d4..33ea078 100644 --- a/sources/common/test/unitTest/Signal.cpp +++ b/sources/common/test/unitTest/Signal.cpp @@ -1,4 +1,4 @@ -/// @file Signal.cpp +/// @file common/test/unitTest/Signal.cpp /// /// Unit test for Signal class. /// diff --git a/sources/common/test/unitTest/SourceRegistry.cpp b/sources/common/test/unitTest/SourceRegistry.cpp index 1af52d9..a30c400 100644 --- a/sources/common/test/unitTest/SourceRegistry.cpp +++ b/sources/common/test/unitTest/SourceRegistry.cpp @@ -1,4 +1,4 @@ -/// @file SourceRegistry.cpp +/// @file common/test/unitTest/SourceRegistry.cpp /// /// Unit test for SourceRegistry class. /// diff --git a/sources/common/test/unitTest/UtMain.cpp b/sources/common/test/unitTest/UtMain.cpp index ccb475b..2954e10 100644 --- a/sources/common/test/unitTest/UtMain.cpp +++ b/sources/common/test/unitTest/UtMain.cpp @@ -1,4 +1,4 @@ -/// @file UtMain.cpp +/// @file common/test/unitTest/UtMain.cpp /// /// Unit tests main source file. /// diff --git a/sources/common/test/unitTest/Utils.cpp b/sources/common/test/unitTest/Utils.cpp index 4381803..289d2ba 100644 --- a/sources/common/test/unitTest/Utils.cpp +++ b/sources/common/test/unitTest/Utils.cpp @@ -1,4 +1,4 @@ -/// @file Utils.cpp +/// @file common/test/unitTest/Utils.cpp /// /// The utilities unit test. /// diff --git a/sources/common/test/unitTest/stub/DummySignal.h b/sources/common/test/unitTest/stub/DummySignal.h index 8323fce..aeaca38 100644 --- a/sources/common/test/unitTest/stub/DummySignal.h +++ b/sources/common/test/unitTest/stub/DummySignal.h @@ -1,4 +1,4 @@ -/// @file DummySignal.h +/// @file common/test/unitTest/stub/DummySignal.h /// /// The dummy signal class. /// diff --git a/sources/common/test/unitTest/stub/Signal.cpp b/sources/common/test/unitTest/stub/Signal.cpp index 6670e9e..0293c15 100644 --- a/sources/common/test/unitTest/stub/Signal.cpp +++ b/sources/common/test/unitTest/stub/Signal.cpp @@ -1,4 +1,4 @@ -/// @file Signal.cpp +/// @file common/test/unitTest/stub/Signal.cpp /// /// Signal class stub for unit tests. /// diff --git a/sources/common/test/unitTest/stub/UtilsEmpty.cpp b/sources/common/test/unitTest/stub/UtilsEmpty.cpp index 8ae5894..9964833 100644 --- a/sources/common/test/unitTest/stub/UtilsEmpty.cpp +++ b/sources/common/test/unitTest/stub/UtilsEmpty.cpp @@ -1,4 +1,4 @@ -/// @file UtilsEmpty.cpp +/// @file common/test/unitTest/stub/UtilsEmpty.cpp /// /// Utilities stub for unit tests. /// From 10cec41c9e41b9312bc99d433d596d459dfaee3f Mon Sep 17 00:00:00 2001 From: Endrju Date: Tue, 27 Jun 2017 22:14:01 +0200 Subject: [PATCH 036/143] Renamed Doxyfile -> Doxyfile.in --- development/config/{Doxyfile => Doxyfile.in} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename development/config/{Doxyfile => Doxyfile.in} (100%) diff --git a/development/config/Doxyfile b/development/config/Doxyfile.in similarity index 100% rename from development/config/Doxyfile rename to development/config/Doxyfile.in From 40c30eb3395d53e7042b4d7dcc7bfefbc79b1979 Mon Sep 17 00:00:00 2001 From: Endrju Date: Tue, 27 Jun 2017 22:35:00 +0200 Subject: [PATCH 037/143] Fix doxygen make target --- development/config/Doxyfile.in | 6 +++--- sources/CMakeLists.txt | 8 +++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/development/config/Doxyfile.in b/development/config/Doxyfile.in index 965f2ae..c50d8d3 100644 --- a/development/config/Doxyfile.in +++ b/development/config/Doxyfile.in @@ -58,7 +58,7 @@ PROJECT_LOGO = # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. -OUTPUT_DIRECTORY = doxygen +OUTPUT_DIRECTORY = ${OUTPUT_DIR_ABSOLUE}/doxygen # 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 @@ -790,7 +790,7 @@ WARN_LOGFILE = # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = ../../sources +INPUT = ${PROJECT_SOURCE_DIR} # 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 @@ -861,7 +861,7 @@ RECURSIVE = YES # Note that relative paths are relative to the directory from which doxygen is # run. -EXCLUDE = ../../sources/3rdParty +EXCLUDE = ${PROJECT_SOURCE_DIR}/3rdParty # 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 diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt index 25f6d71..632e5a1 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -360,11 +360,13 @@ add_vcdtools_ut(utUtils "${UT_UTILS_SOURCES}") find_package(Doxygen) if (DOXYGEN_FOUND) - set(DOXYFILE ${DEVEL_SUPPORT_DIR}/config/Doxyfile) + set(DOXYFILE_IN ${DEVEL_SUPPORT_DIR}/config/Doxyfile.in) + set(DOXYFILE_OUT Doxyfile.out) + + configure_file(${DOXYFILE_IN} ${DOXYFILE_OUT}) add_custom_target(doxygen - COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYFILE} - WORKING_DIRECTORY ${OUTPUT_DIR} + COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYFILE_OUT} COMMENT "Generate doxygen documentation" VERBATIM) endif() From 39c9864cda1cc2be9047532da59a6b0b85313621 Mon Sep 17 00:00:00 2001 From: Endrju Date: Tue, 27 Jun 2017 22:36:22 +0200 Subject: [PATCH 038/143] Use full paths in @file tag --- sources/common/inc/CliParser.h | 2 +- sources/common/inc/EventSignal.h | 2 +- sources/common/inc/EventSignalCreator.h | 2 +- sources/common/inc/FSignal.h | 2 +- sources/common/inc/FSignalCreator.h | 2 +- sources/common/inc/ISignal.h | 2 +- sources/common/inc/ISignalCreator.h | 2 +- sources/common/inc/Instrument.h | 2 +- sources/common/inc/LineCounter.h | 2 +- sources/common/inc/LogParser.h | 2 +- sources/common/inc/Logger.h | 2 +- sources/common/inc/Signal.h | 2 +- sources/common/inc/SignalCreator.h | 2 +- sources/common/inc/SignalDb.h | 2 +- sources/common/inc/SignalFactory.h | 2 +- sources/common/inc/SignalStructureBuilder.h | 2 +- sources/common/inc/SourceRegistry.h | 2 +- sources/common/inc/TimeFrame.h | 2 +- sources/common/inc/TxtParser.h | 2 +- sources/common/inc/Utils.h | 2 +- sources/common/inc/VCDTracer.h | 2 +- sources/common/inc/VcdException.h | 2 +- sources/common/inc/VcdExceptionList.h | 2 +- sources/common/inc/Version.h | 2 +- sources/common/src/EventSignalCreator.cpp | 2 +- sources/common/src/FSignal.cpp | 2 +- sources/common/src/FSignalCreator.cpp | 2 +- sources/common/src/ISignal.cpp | 2 +- sources/common/src/ISignalCreator.cpp | 2 +- sources/common/src/LineCounter.cpp | 2 +- sources/common/src/LogParser.cpp | 2 +- sources/common/src/Logger.cpp | 2 +- sources/common/src/Signal.cpp | 2 +- sources/common/src/SignalDb.cpp | 2 +- sources/common/src/SignalFactory.cpp | 2 +- sources/common/src/SignalStructureBuilder.cpp | 2 +- sources/common/src/SourceRegistry.cpp | 2 +- sources/common/src/TimeFrame.cpp | 2 +- sources/common/src/TxtParser.cpp | 2 +- sources/common/src/Utils.cpp | 2 +- sources/common/src/VCDTracer.cpp | 2 +- sources/vcdMaker/inc/CliMaker.h | 2 +- sources/vcdMaker/src/vcdMaker.cpp | 2 +- sources/vcdMerge/inc/CliMerge.h | 2 +- sources/vcdMerge/inc/Merge.h | 2 +- sources/vcdMerge/inc/SignalSource.h | 2 +- sources/vcdMerge/src/Merge.cpp | 2 +- sources/vcdMerge/src/SignalSource.cpp | 2 +- sources/vcdMerge/src/vcdMerge.cpp | 2 +- 49 files changed, 49 insertions(+), 49 deletions(-) diff --git a/sources/common/inc/CliParser.h b/sources/common/inc/CliParser.h index 6bdb998..b7973d8 100644 --- a/sources/common/inc/CliParser.h +++ b/sources/common/inc/CliParser.h @@ -1,4 +1,4 @@ -/// @file CliParser.h +/// @file common/inc/CliParser.h /// /// The CLI facade class. /// diff --git a/sources/common/inc/EventSignal.h b/sources/common/inc/EventSignal.h index 6e164d5..cc85ab6 100644 --- a/sources/common/inc/EventSignal.h +++ b/sources/common/inc/EventSignal.h @@ -1,4 +1,4 @@ -/// @file EventSignal.h +/// @file common/inc/EventSignal.h /// /// The signal class supporting events /// diff --git a/sources/common/inc/EventSignalCreator.h b/sources/common/inc/EventSignalCreator.h index 578fd77..291febe 100644 --- a/sources/common/inc/EventSignalCreator.h +++ b/sources/common/inc/EventSignalCreator.h @@ -1,4 +1,4 @@ -/// @file EventSignalCreator.h +/// @file common/inc/EventSignalCreator.h /// /// The event signal creator. /// diff --git a/sources/common/inc/FSignal.h b/sources/common/inc/FSignal.h index 75bcdce..4098f8b 100644 --- a/sources/common/inc/FSignal.h +++ b/sources/common/inc/FSignal.h @@ -1,4 +1,4 @@ -/// @file FSignal.h +/// @file common/inc/FSignal.h /// /// The signal class supporting real numbers. /// diff --git a/sources/common/inc/FSignalCreator.h b/sources/common/inc/FSignalCreator.h index a49b3bd..9884929 100644 --- a/sources/common/inc/FSignalCreator.h +++ b/sources/common/inc/FSignalCreator.h @@ -1,4 +1,4 @@ -/// @file FSignalCreator.h +/// @file common/inc/FSignalCreator.h /// /// The real signal creator. /// diff --git a/sources/common/inc/ISignal.h b/sources/common/inc/ISignal.h index 00b8aa0..f33c8f4 100644 --- a/sources/common/inc/ISignal.h +++ b/sources/common/inc/ISignal.h @@ -1,4 +1,4 @@ -/// @file ISignal.h +/// @file common/inc/ISignal.h /// /// The signal class supporting integer numbers. /// diff --git a/sources/common/inc/ISignalCreator.h b/sources/common/inc/ISignalCreator.h index 5a4df2e..441ce04 100644 --- a/sources/common/inc/ISignalCreator.h +++ b/sources/common/inc/ISignalCreator.h @@ -1,4 +1,4 @@ -/// @file ISignalCreator.h +/// @file common/inc/ISignalCreator.h /// /// The integer signal creator. /// diff --git a/sources/common/inc/Instrument.h b/sources/common/inc/Instrument.h index dc33ff7..a548e92 100644 --- a/sources/common/inc/Instrument.h +++ b/sources/common/inc/Instrument.h @@ -1,4 +1,4 @@ -/// @file Instrument.h +/// @file common/inc/Instrument.h /// /// The instrument interface class. /// diff --git a/sources/common/inc/LineCounter.h b/sources/common/inc/LineCounter.h index fc99bd5..93c4748 100644 --- a/sources/common/inc/LineCounter.h +++ b/sources/common/inc/LineCounter.h @@ -1,4 +1,4 @@ -/// @file LineCounter.h +/// @file common/inc/LineCounter.h /// /// The line counting class. /// diff --git a/sources/common/inc/LogParser.h b/sources/common/inc/LogParser.h index b5849d6..03f0180 100644 --- a/sources/common/inc/LogParser.h +++ b/sources/common/inc/LogParser.h @@ -1,4 +1,4 @@ -/// @file LogParser.h +/// @file common/inc/LogParser.h /// /// The log parser interface class. /// diff --git a/sources/common/inc/Logger.h b/sources/common/inc/Logger.h index 174bcd4..b983cae 100644 --- a/sources/common/inc/Logger.h +++ b/sources/common/inc/Logger.h @@ -1,4 +1,4 @@ -/// @file Logger.h +/// @file common/inc/Logger.h /// /// An error and warning logger. /// diff --git a/sources/common/inc/Signal.h b/sources/common/inc/Signal.h index 8543e11..7c21500 100644 --- a/sources/common/inc/Signal.h +++ b/sources/common/inc/Signal.h @@ -1,4 +1,4 @@ -/// @file Signal.h +/// @file common/inc/Signal.h /// /// The base VCD signal class. /// diff --git a/sources/common/inc/SignalCreator.h b/sources/common/inc/SignalCreator.h index 35619ba..97140af 100644 --- a/sources/common/inc/SignalCreator.h +++ b/sources/common/inc/SignalCreator.h @@ -1,4 +1,4 @@ -/// @file SignalCreator.h +/// @file common/inc/SignalCreator.h /// /// The signal creator interface class. /// diff --git a/sources/common/inc/SignalDb.h b/sources/common/inc/SignalDb.h index 252c61e..bd2baf4 100644 --- a/sources/common/inc/SignalDb.h +++ b/sources/common/inc/SignalDb.h @@ -1,4 +1,4 @@ -/// @file SignalDb.h +/// @file common/inc/SignalDb.h /// /// Signal database class. /// diff --git a/sources/common/inc/SignalFactory.h b/sources/common/inc/SignalFactory.h index a906b7e..362451f 100644 --- a/sources/common/inc/SignalFactory.h +++ b/sources/common/inc/SignalFactory.h @@ -1,4 +1,4 @@ -/// @file SignalFactory.h +/// @file common/inc/SignalFactory.h /// /// The signal factory class. /// diff --git a/sources/common/inc/SignalStructureBuilder.h b/sources/common/inc/SignalStructureBuilder.h index 6b69ee2..0f635ea 100644 --- a/sources/common/inc/SignalStructureBuilder.h +++ b/sources/common/inc/SignalStructureBuilder.h @@ -1,4 +1,4 @@ -/// @file SignalStructureBuilder.h +/// @file common/inc/SignalStructureBuilder.h /// /// VCD signal structure builder class. /// diff --git a/sources/common/inc/SourceRegistry.h b/sources/common/inc/SourceRegistry.h index 2cdb533..f1d71f7 100644 --- a/sources/common/inc/SourceRegistry.h +++ b/sources/common/inc/SourceRegistry.h @@ -1,4 +1,4 @@ -/// @file SourceRegistry.h +/// @file common/inc/SourceRegistry.h /// /// The signal source registry. /// diff --git a/sources/common/inc/TimeFrame.h b/sources/common/inc/TimeFrame.h index 13d2e96..32a4c4b 100644 --- a/sources/common/inc/TimeFrame.h +++ b/sources/common/inc/TimeFrame.h @@ -1,4 +1,4 @@ -/// @file TimeFrame.h +/// @file common/inc/TimeFrame.h /// /// The time frame class. /// diff --git a/sources/common/inc/TxtParser.h b/sources/common/inc/TxtParser.h index 246f12f..567703d 100644 --- a/sources/common/inc/TxtParser.h +++ b/sources/common/inc/TxtParser.h @@ -1,4 +1,4 @@ -/// @file TxtParser.h +/// @file common/inc/TxtParser.h /// /// The text log parser. /// diff --git a/sources/common/inc/Utils.h b/sources/common/inc/Utils.h index 19c294a..d6530ed 100644 --- a/sources/common/inc/Utils.h +++ b/sources/common/inc/Utils.h @@ -1,4 +1,4 @@ -/// @file Utils.h +/// @file common/inc/Utils.h /// /// The utilities. /// diff --git a/sources/common/inc/VCDTracer.h b/sources/common/inc/VCDTracer.h index 0017049..80efaf0 100644 --- a/sources/common/inc/VCDTracer.h +++ b/sources/common/inc/VCDTracer.h @@ -1,4 +1,4 @@ -/// @file VCDTracer.h +/// @file common/inc/VCDTracer.h /// /// The VCD generation module. /// diff --git a/sources/common/inc/VcdException.h b/sources/common/inc/VcdException.h index 57e25af..4248949 100644 --- a/sources/common/inc/VcdException.h +++ b/sources/common/inc/VcdException.h @@ -1,4 +1,4 @@ -/// @file VcdException.h +/// @file common/inc/VcdException.h /// /// The VCD exception base class. /// diff --git a/sources/common/inc/VcdExceptionList.h b/sources/common/inc/VcdExceptionList.h index adec80e..969a566 100644 --- a/sources/common/inc/VcdExceptionList.h +++ b/sources/common/inc/VcdExceptionList.h @@ -1,4 +1,4 @@ -/// @file VcdExceptionList.h +/// @file common/inc/VcdExceptionList.h /// /// The file lists errors and warnings which might occur within vcdMaker /// applications. diff --git a/sources/common/inc/Version.h b/sources/common/inc/Version.h index fa8d98a..9135cad 100644 --- a/sources/common/inc/Version.h +++ b/sources/common/inc/Version.h @@ -1,4 +1,4 @@ -/// @file Version.h +/// @file common/inc/Version.h /// /// Version information header. /// diff --git a/sources/common/src/EventSignalCreator.cpp b/sources/common/src/EventSignalCreator.cpp index 2d9863b..f0d107f 100644 --- a/sources/common/src/EventSignalCreator.cpp +++ b/sources/common/src/EventSignalCreator.cpp @@ -1,4 +1,4 @@ -/// @file EventSignalCreator.h +/// @file common/src/EventSignalCreator.cpp /// /// The event signal creator. /// diff --git a/sources/common/src/FSignal.cpp b/sources/common/src/FSignal.cpp index 5b333ac..1f97795 100644 --- a/sources/common/src/FSignal.cpp +++ b/sources/common/src/FSignal.cpp @@ -1,4 +1,4 @@ -/// @file FSignal.h +/// @file common/src/FSignal.cpp /// /// The signal class supporting real numbers. /// diff --git a/sources/common/src/FSignalCreator.cpp b/sources/common/src/FSignalCreator.cpp index e77352c..6bd0af5 100644 --- a/sources/common/src/FSignalCreator.cpp +++ b/sources/common/src/FSignalCreator.cpp @@ -1,4 +1,4 @@ -/// @file FSignalCreator.h +/// @file common/src/FSignalCreator.cpp /// /// The real signal creator. /// diff --git a/sources/common/src/ISignal.cpp b/sources/common/src/ISignal.cpp index c08a8ab..636a9d7 100644 --- a/sources/common/src/ISignal.cpp +++ b/sources/common/src/ISignal.cpp @@ -1,4 +1,4 @@ -/// @file ISignal.h +/// @file common/src/ISignal.cpp /// /// The signal class supporting integer numbers. /// diff --git a/sources/common/src/ISignalCreator.cpp b/sources/common/src/ISignalCreator.cpp index 87bb577..aae6046 100644 --- a/sources/common/src/ISignalCreator.cpp +++ b/sources/common/src/ISignalCreator.cpp @@ -1,4 +1,4 @@ -/// @file ISignalCreator.h +/// @file common/src/ISignalCreator.cpp /// /// The integer signal creator. /// diff --git a/sources/common/src/LineCounter.cpp b/sources/common/src/LineCounter.cpp index cd87bea..862348b 100644 --- a/sources/common/src/LineCounter.cpp +++ b/sources/common/src/LineCounter.cpp @@ -1,4 +1,4 @@ -/// @file LineCounter.cpp +/// @file common/src/LineCounter.cpp /// /// The line counting class. /// diff --git a/sources/common/src/LogParser.cpp b/sources/common/src/LogParser.cpp index 8aec063..5266494 100644 --- a/sources/common/src/LogParser.cpp +++ b/sources/common/src/LogParser.cpp @@ -1,4 +1,4 @@ -/// @file LogParser.cpp +/// @file common/src/LogParser.cpp /// /// The log parser interface class. /// diff --git a/sources/common/src/Logger.cpp b/sources/common/src/Logger.cpp index ef7c022..9e2591a 100644 --- a/sources/common/src/Logger.cpp +++ b/sources/common/src/Logger.cpp @@ -1,4 +1,4 @@ -/// @file Logger.cpp +/// @file common/src/Logger.cpp /// /// An error and warning logger. /// diff --git a/sources/common/src/Signal.cpp b/sources/common/src/Signal.cpp index 3b5a748..4f91e3d 100644 --- a/sources/common/src/Signal.cpp +++ b/sources/common/src/Signal.cpp @@ -1,4 +1,4 @@ -/// @file Signal.cpp +/// @file common/src/Signal.cpp /// /// The base VCD signal class. /// diff --git a/sources/common/src/SignalDb.cpp b/sources/common/src/SignalDb.cpp index 866530f..ff6a993 100644 --- a/sources/common/src/SignalDb.cpp +++ b/sources/common/src/SignalDb.cpp @@ -1,4 +1,4 @@ -/// @file SignalDb.cpp +/// @file common/src/SignalDb.cpp /// /// Signal database class. /// diff --git a/sources/common/src/SignalFactory.cpp b/sources/common/src/SignalFactory.cpp index afb838b..68bab02 100644 --- a/sources/common/src/SignalFactory.cpp +++ b/sources/common/src/SignalFactory.cpp @@ -1,4 +1,4 @@ -/// @file SignalFactory.h +/// @file common/src/SignalFactory.cpp /// /// The signal factory class. /// diff --git a/sources/common/src/SignalStructureBuilder.cpp b/sources/common/src/SignalStructureBuilder.cpp index a979702..238e300 100644 --- a/sources/common/src/SignalStructureBuilder.cpp +++ b/sources/common/src/SignalStructureBuilder.cpp @@ -1,4 +1,4 @@ -/// @file SignalStructureBuilder.cpp +/// @file common/src/SignalStructureBuilder.cpp /// /// VCD signal structure builder class. /// diff --git a/sources/common/src/SourceRegistry.cpp b/sources/common/src/SourceRegistry.cpp index 35a215c..443bfd1 100644 --- a/sources/common/src/SourceRegistry.cpp +++ b/sources/common/src/SourceRegistry.cpp @@ -1,4 +1,4 @@ -/// @file SourceRegistry.cpp +/// @file common/src/SourceRegistry.cpp /// /// The signal source registry. /// diff --git a/sources/common/src/TimeFrame.cpp b/sources/common/src/TimeFrame.cpp index d2a1306..5d24804 100644 --- a/sources/common/src/TimeFrame.cpp +++ b/sources/common/src/TimeFrame.cpp @@ -1,4 +1,4 @@ -/// @file TimeFrame.cpp +/// @file common/src/TimeFrame.cpp /// /// The time frame class. /// diff --git a/sources/common/src/TxtParser.cpp b/sources/common/src/TxtParser.cpp index 9327a50..5825e41 100644 --- a/sources/common/src/TxtParser.cpp +++ b/sources/common/src/TxtParser.cpp @@ -1,4 +1,4 @@ -/// @file TxtParser.cpp +/// @file common/src/TxtParser.cpp /// /// The text log parser. /// diff --git a/sources/common/src/Utils.cpp b/sources/common/src/Utils.cpp index 8c5db9b..384cc92 100644 --- a/sources/common/src/Utils.cpp +++ b/sources/common/src/Utils.cpp @@ -1,4 +1,4 @@ -/// @file Utils.h +/// @file common/src/Utils.cpp /// /// The utilities. /// diff --git a/sources/common/src/VCDTracer.cpp b/sources/common/src/VCDTracer.cpp index efc2c0e..a1d2351 100644 --- a/sources/common/src/VCDTracer.cpp +++ b/sources/common/src/VCDTracer.cpp @@ -1,4 +1,4 @@ -/// @file VCDTracer.h +/// @file common/src/VCDTracer.cpp /// /// The VCD generation module. /// diff --git a/sources/vcdMaker/inc/CliMaker.h b/sources/vcdMaker/inc/CliMaker.h index 795ec87..4e268ff 100644 --- a/sources/vcdMaker/inc/CliMaker.h +++ b/sources/vcdMaker/inc/CliMaker.h @@ -1,4 +1,4 @@ -/// @file CliMaker.h +/// @file vcdMaker/inc/CliMaker.h /// /// The vcdMaker CLI implemantation. /// diff --git a/sources/vcdMaker/src/vcdMaker.cpp b/sources/vcdMaker/src/vcdMaker.cpp index 70e7cc8..0b4739e 100644 --- a/sources/vcdMaker/src/vcdMaker.cpp +++ b/sources/vcdMaker/src/vcdMaker.cpp @@ -1,4 +1,4 @@ -/// @file vcdMaker.cpp +/// @file vcdMaker/src/vcdMaker.cpp /// /// The main module of the vcdMaker application. /// diff --git a/sources/vcdMerge/inc/CliMerge.h b/sources/vcdMerge/inc/CliMerge.h index 2b8d6a5..09524d6 100644 --- a/sources/vcdMerge/inc/CliMerge.h +++ b/sources/vcdMerge/inc/CliMerge.h @@ -1,4 +1,4 @@ -/// @file CliMerge.h +/// @file vcdMerge/inc/CliMerge.h /// /// The vcdMerge CLI implemantation. /// diff --git a/sources/vcdMerge/inc/Merge.h b/sources/vcdMerge/inc/Merge.h index e3b6e55..f2e7d26 100644 --- a/sources/vcdMerge/inc/Merge.h +++ b/sources/vcdMerge/inc/Merge.h @@ -1,4 +1,4 @@ -/// @file Merge.h +/// @file vcdMerge/inc/Merge.h /// /// The merging unit. /// diff --git a/sources/vcdMerge/inc/SignalSource.h b/sources/vcdMerge/inc/SignalSource.h index 772cd3a..ca9651b 100644 --- a/sources/vcdMerge/inc/SignalSource.h +++ b/sources/vcdMerge/inc/SignalSource.h @@ -1,4 +1,4 @@ -/// @file SignalSource.h +/// @file vcdMerge/inc/SignalSource.h /// /// The signal source class. /// diff --git a/sources/vcdMerge/src/Merge.cpp b/sources/vcdMerge/src/Merge.cpp index 289e295..17ccc1d 100644 --- a/sources/vcdMerge/src/Merge.cpp +++ b/sources/vcdMerge/src/Merge.cpp @@ -1,4 +1,4 @@ -/// @file Merge.cpp +/// @file vcdMerge/src/Merge.cpp /// /// The merging unit. /// diff --git a/sources/vcdMerge/src/SignalSource.cpp b/sources/vcdMerge/src/SignalSource.cpp index 26908c5..294257a 100644 --- a/sources/vcdMerge/src/SignalSource.cpp +++ b/sources/vcdMerge/src/SignalSource.cpp @@ -1,4 +1,4 @@ -/// @file SignalSource.cpp +/// @file vcdMerge/src/SignalSource.cpp /// /// The signal source class. /// diff --git a/sources/vcdMerge/src/vcdMerge.cpp b/sources/vcdMerge/src/vcdMerge.cpp index 8a80b26..e2ecbaa 100644 --- a/sources/vcdMerge/src/vcdMerge.cpp +++ b/sources/vcdMerge/src/vcdMerge.cpp @@ -1,4 +1,4 @@ -/// @file vcdMerge.cpp +/// @file vcdMerge/src/vcdMerge.cpp /// /// The main module of the vcdMerge application. /// From 8fd706e1e48c1064dceca49c68370b56b8c2af24 Mon Sep 17 00:00:00 2001 From: Endrju Date: Sat, 1 Jul 2017 15:57:00 +0200 Subject: [PATCH 039/143] SourceRegistry is now singleton --- sources/common/test/unitTest/SourceRegistry.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/common/test/unitTest/SourceRegistry.cpp b/sources/common/test/unitTest/SourceRegistry.cpp index a30c400..66e0f46 100644 --- a/sources/common/test/unitTest/SourceRegistry.cpp +++ b/sources/common/test/unitTest/SourceRegistry.cpp @@ -36,7 +36,7 @@ TEST_CASE("SourceRegistry") const std::string name1 = "abcd"; const std::string name2 = "efgh"; - SIGNAL::SourceRegistry registry; + SIGNAL::SourceRegistry ®istry = SIGNAL::SourceRegistry::GetInstance(); const SIGNAL::SourceRegistry::HandleT handle1 = registry.Register(name1); From b6e2472c15cecd6579b7f16c6570476b4ec8770a Mon Sep 17 00:00:00 2001 From: Endrju Date: Sat, 1 Jul 2017 16:16:10 +0200 Subject: [PATCH 040/143] Use ctest instead of custom target for comparison tests --- sources/CMakeLists.txt | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt index 632e5a1..7d813fe 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -278,12 +278,18 @@ if (PYTHONINTERP_FOUND) set(MAKER_COMPARISON_TEST_DIR ${PROJECT_SOURCE_DIR}/vcdMaker/test/functional) set(MERGE_COMPARISON_TEST_DIR ${PROJECT_SOURCE_DIR}/vcdMerge/test/functional) - add_custom_target(comparisonTest - COMMAND ${PYTHON_EXECUTABLE} ${COMPARISON_TEST_SCRIPT} -e ./vcdMaker -t ${MAKER_COMPARISON_TEST_DIR} - COMMAND ${PYTHON_EXECUTABLE} ${COMPARISON_TEST_SCRIPT} -e ./vcdMerge -t ${MERGE_COMPARISON_TEST_DIR} - WORKING_DIRECTORY ${OUTPUT_DIR} - COMMENT "vcdMaker commparison test" - VERBATIM) + add_test(NAME vcdMakerComparisonTest + COMMAND ${PYTHON_EXECUTABLE} ${COMPARISON_TEST_SCRIPT} -e ./vcdMaker -t ${MAKER_COMPARISON_TEST_DIR} + WORKING_DIRECTORY ${OUTPUT_DIR_ABSOLUE}) + + add_dependencies(check vcdMaker) + + add_test(NAME vcdMergeComparisonTest + COMMAND ${PYTHON_EXECUTABLE} ${COMPARISON_TEST_SCRIPT} -e ./vcdMerge -t ${MERGE_COMPARISON_TEST_DIR} + WORKING_DIRECTORY ${OUTPUT_DIR_ABSOLUE}) + + add_dependencies(check vcdMerge) + endif() # Unit tests From 3db370bae0e82e0ccfbd35709a32f98eff825b36 Mon Sep 17 00:00:00 2001 From: Endrju Date: Sat, 1 Jul 2017 16:16:31 +0200 Subject: [PATCH 041/143] Execute check target as a part of build --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 59adda7..b962ad1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -58,4 +58,4 @@ before_script: script: - cmake . - make - - make comparisonTest + - make check From e45febc6542a0c2d3ff09248e0a16e709dfeb6aa Mon Sep 17 00:00:00 2001 From: Endrju Date: Wed, 19 Jul 2017 19:07:31 +0200 Subject: [PATCH 042/143] Split CMakeLists.txt into several files. --- sources/CMakeLists.txt | 358 ++--------------------------- sources/cmake/check.cmake | 31 +++ sources/cmake/commonSources.cmake | 82 +++++++ sources/cmake/commonTarget.cmake | 64 ++++++ sources/cmake/commonUtTarget.cmake | 55 +++++ sources/cmake/comparisonTest.cmake | 45 ++++ sources/cmake/doxygen.cmake | 39 ++++ sources/cmake/install.cmake | 39 ++++ sources/cmake/installCpack.cmake | 56 +++++ sources/cmake/manPages.cmake | 63 +++++ sources/cmake/unitTests.cmake | 62 +++++ sources/cmake/vcdMaker.cmake | 38 +++ sources/cmake/vcdMerge.cmake | 42 ++++ sources/cmake/version.cmake | 33 +++ 14 files changed, 673 insertions(+), 334 deletions(-) create mode 100644 sources/cmake/check.cmake create mode 100644 sources/cmake/commonSources.cmake create mode 100644 sources/cmake/commonTarget.cmake create mode 100644 sources/cmake/commonUtTarget.cmake create mode 100644 sources/cmake/comparisonTest.cmake create mode 100644 sources/cmake/doxygen.cmake create mode 100644 sources/cmake/install.cmake create mode 100644 sources/cmake/installCpack.cmake create mode 100644 sources/cmake/manPages.cmake create mode 100644 sources/cmake/unitTests.cmake create mode 100644 sources/cmake/vcdMaker.cmake create mode 100644 sources/cmake/vcdMerge.cmake create mode 100644 sources/cmake/version.cmake diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt index 7d813fe..0c6be20 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -2,6 +2,16 @@ # # vcdMaker and vcdMerge CMake file. # +# This file is split into several other files that include majority +# of CMake code. Those files are dependent on each other through +# the use of variables. Because of that they can't really be treated +# like stand-alone modules. +# +# Most interesting cmake files are: +# - commonSources.cmake: list of all common sources and dirs. +# - vcdMaker.cmake, vcdMerge.cmake: executable targets with source list. +# - unitTests.cmake: list of unit tests. +# # Copyright (c) 2017 vcdMaker team # # Permission is hereby granted, free of charge, to any person obtaining a @@ -24,355 +34,35 @@ cmake_minimum_required(VERSION 3.0) -# Extract version information -set(VERSION_HEADER common/inc/Version.h) - -file(STRINGS ${VERSION_HEADER} VERSION_LINE REGEX "#define D_VERSION_") -string(REGEX MATCHALL "[0-9]+" VERSION_COMPONENTS ${VERSION_LINE}) +set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) -list(GET VERSION_COMPONENTS 0 VERSION_MAJOR) -list(GET VERSION_COMPONENTS 1 VERSION_MINOR) -list(GET VERSION_COMPONENTS 2 VERSION_PATCH) +include(version) # Setup project. project(vcdMakerTools VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}) -# Set common source files. -set(COMMON_SOURCES_DIR common/src) - -set(COMMON_SOURCES - ${COMMON_SOURCES_DIR}/EventSignalCreator.cpp - ${COMMON_SOURCES_DIR}/FSignal.cpp - ${COMMON_SOURCES_DIR}/FSignalCreator.cpp - ${COMMON_SOURCES_DIR}/ISignal.cpp - ${COMMON_SOURCES_DIR}/ISignalCreator.cpp - ${COMMON_SOURCES_DIR}/SignalFactory.cpp - ${COMMON_SOURCES_DIR}/SignalStructureBuilder.cpp - ${COMMON_SOURCES_DIR}/Signal.cpp - ${COMMON_SOURCES_DIR}/SignalDb.cpp - ${COMMON_SOURCES_DIR}/SourceRegistry.cpp - ${COMMON_SOURCES_DIR}/TxtParser.cpp - ${COMMON_SOURCES_DIR}/LogParser.cpp - ${COMMON_SOURCES_DIR}/LineCounter.cpp - ${COMMON_SOURCES_DIR}/TimeFrame.cpp - ${COMMON_SOURCES_DIR}/Utils.cpp - ${COMMON_SOURCES_DIR}/Logger.cpp - ${COMMON_SOURCES_DIR}/VCDTracer.cpp) - -# Set common header files. -# This shouldn't be needed, but helps IDE project generators. -set(COMMON_HEADERS_DIR common/inc) - -set(COMMON_HEADERS - ${COMMON_HEADERS_DIR}/CliParser.h - ${COMMON_HEADERS_DIR}/LogParser.h - ${COMMON_HEADERS_DIR}/LineCounter.h - ${COMMON_HEADERS_DIR}/TxtParser.h - ${COMMON_HEADERS_DIR}/EventSignalCreator.h - ${COMMON_HEADERS_DIR}/EventSignal.h - ${COMMON_HEADERS_DIR}/FSignalCreator.h - ${COMMON_HEADERS_DIR}/FSignal.h - ${COMMON_HEADERS_DIR}/ISignalCreator.h - ${COMMON_HEADERS_DIR}/ISignal.h - ${COMMON_HEADERS_DIR}/SignalCreator.h - ${COMMON_HEADERS_DIR}/SignalFactory.h - ${COMMON_HEADERS_DIR}/SignalStructureBuilder.h - ${COMMON_HEADERS_DIR}/Signal.h - ${COMMON_HEADERS_DIR}/SourceRegistry.h - ${COMMON_HEADERS_DIR}/SignalDb.h - ${COMMON_HEADERS_DIR}/VcdException.h - ${COMMON_HEADERS_DIR}/VcdExceptionList.h - ${COMMON_HEADERS_DIR}/Logger.h - ${COMMON_HEADERS_DIR}/TimeFrame.h - ${COMMON_HEADERS_DIR}/Utils.h - ${COMMON_HEADERS_DIR}/Instrument.h - ${COMMON_HEADERS_DIR}/VCDTracer.h - ${VERSION_HEADER}) - -# 3rd party directories. -set(TCLAP_HEADERS_DIR 3rdParty/tclap/include) - -# Output directory -set(OUTPUT_DIR output) -set(OUTPUT_DIR_ABSOLUE ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_DIR}) - -# Common sources target name. -set(COMMON_LIB_TARGET vcdToolsCommon) - -# Function for setting general target properties. -function(add_common_vcdtools_target_props TARGET_NAME) - # Set C++14 support. - set_target_properties(${TARGET_NAME} PROPERTIES CXX_STANDARD 14) - set_target_properties(${TARGET_NAME} PROPERTIES CXX_EXTENSIONS OFF) - set_target_properties(${TARGET_NAME} PROPERTIES CXX_STANDARD_REQUIRED ON) - - # Set warning flags. - if (${CMAKE_CXX_COMPILER_ID} STREQUAL GNU) - target_compile_options(${TARGET_NAME} PUBLIC -Wall -Wextra -pedantic) - elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC) - target_compile_options(${TARGET_NAME} PUBLIC /W4) - endif() -endfunction(add_common_vcdtools_target_props) - -# Function for target creation. -function(add_vcdtools_target TARGET_NAME TARGET_SOURCES TARGET_HEADERS TARGET_HEADERS_DIR) - add_executable(${TARGET_NAME} $ ${TARGET_SOURCES} ${COMMON_HEADERS} ${TARGET_HEADERS}) - - target_include_directories(${TARGET_NAME} PUBLIC ${COMMON_HEADERS_DIR} ${TARGET_HEADERS_DIR} ${TCLAP_HEADERS_DIR}) - - add_common_vcdtools_target_props(${TARGET_NAME}) - - set_target_properties(${TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_DIR}) -endfunction(add_vcdtools_target) - -# Set common sources build - -add_library(${COMMON_LIB_TARGET} OBJECT ${COMMON_SOURCES} ${COMMON_HEADERS}) - -target_include_directories(${COMMON_LIB_TARGET} PUBLIC ${COMMON_HEADERS_DIR} ${TCLAP_HEADERS_DIR}) - -add_common_vcdtools_target_props(${COMMON_LIB_TARGET}) - -# Set vcdMaker build. +include(commonSources) -set(VMAKER_SOURCES_DIR vcdMaker/src) -set(VMAKER_SOURCES - ${VMAKER_SOURCES_DIR}/vcdMaker.cpp) +include(commonTarget) -set(VMAKER_HEADERS_DIR vcdMaker/inc) -set(VMAKER_HEADERS - ${VMAKER_HEADERS_DIR}/CliMaker.h) +include(vcdMaker) -add_vcdtools_target(vcdMaker - "${VMAKER_SOURCES}" - "${VMAKER_HEADERS}" - ${VMAKER_HEADERS_DIR}) - -# Set vcdMerge build. - -set(VMERGE_SOURCES_DIR vcdMerge/src) -set(VMERGE_SOURCES - ${VMERGE_SOURCES_DIR}/vcdMerge.cpp - ${VMERGE_SOURCES_DIR}/Merge.cpp - ${VMERGE_SOURCES_DIR}/SignalSource.cpp) - -set(VMERGE_HEADERS_DIR vcdMerge/inc) -set(VMERGE_HEADERS - ${VMERGE_HEADERS_DIR}/CliMerge.h - ${VMERGE_HEADERS_DIR}/Merge.h - ${VMERGE_HEADERS_DIR}/SignalSource.h) - -add_vcdtools_target(vcdMerge - "${VMERGE_SOURCES}" - "${VMERGE_HEADERS}" - ${VMERGE_HEADERS_DIR}) +include(vcdMerge) if (UNIX) - # Set man pages generation. - - find_program(TXT2MAN_EXECUTABLE - NAME txt2man - PATHS ENV PATH - DOC "txt2man man pages generation tool") - - if (NOT TXT2MAN_EXECUTABLE) - message(FATAL_ERROR "txt2man executable not found") - endif() - - find_program(GZIP_EXECUTABLE - NAME gzip - PATHS ENV PATH - DOC "gzip tool") - - if (NOT GZIP_EXECUTABLE) - message(FATAL_ERROR "gzip executable not found") - endif() - - set(MAN_SOURCE_DIR ${PROJECT_SOURCE_DIR}/common/doc/man) - set(MAN_COMMON_OPTIONS -r ${PROJECT_VERSION} -s 1 -v "vcdMaker manual") - set(MAN_PAGES - vcdMaker - vcdMerge) - - foreach(MAN_PAGE IN LISTS MAN_PAGES) - add_custom_command(OUTPUT ${OUTPUT_DIR_ABSOLUE}/${MAN_PAGE}.1.gz - COMMAND ${TXT2MAN_EXECUTABLE} -t ${MAN_PAGE} ${MAN_COMMON_OPTIONS} ${MAN_SOURCE_DIR}/${MAN_PAGE}.txt > ${MAN_PAGE}.1 - COMMAND ${GZIP_EXECUTABLE} ${MAN_PAGE}.1 - WORKING_DIRECTORY ${OUTPUT_DIR_ABSOLUE} - VERBATIM) - - list(APPEND MAN_PAGES_GENERATED ${OUTPUT_DIR_ABSOLUE}/${MAN_PAGE}.1.gz) - endforeach(MAN_PAGE) - - add_custom_target(manPages - ALL - DEPENDS ${MAN_PAGES_GENERATED}) - - # Set installation. - - install(TARGETS vcdMaker vcdMerge - RUNTIME DESTINATION bin - COMPONENT runtime) - - install(FILES ${MAN_PAGES_GENERATED} - DESTINATION share/man/man1 - COMPONENT documentation) - - install(DIRECTORY common/doc/ - DESTINATION share/doc/${CMAKE_PROJECT_NAME} - COMPONENT documentation - PATTERN "*.odt" EXCLUDE - PATTERN "man" EXCLUDE) - - # Set Cpack. - - set(AUTHOR "vcdMaker team") - set(WEBSITE "http://vcdmaker.org") - set(DESCRIPTION "Commandline tools that can generate VCD files from text logs") - - set(CPACK_PACKAGE_VENDOR ${AUTHOR}) - set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Generates VCD files from text logs") - set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) - set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR}) - set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH}) - set(CPACK_PACKAGE_DIRECTORY ${OUTPUT_DIR_ABSOLUE}) - set(CPACK_STRIP_FILES ON) - set(CPACK_GENERATOR "RPM" "DEB" "ZIP") - - set(CPACK_SYSTEM_NAME ${CMAKE_SYSTEM_PROCESSOR}) - if (CPACK_SYSTEM_NAME STREQUAL "x86_64") - set(CPACK_SYSTEM_NAME "amd64") - endif() + include(manPages) - set(CPACK_RPM_PACKAGE_RELEASE 1) - set(CPACK_RPM_PACKAGE_LICENSE "MIT") - set(CPACK_RPM_PACKAGE_URL ${WEBSITE}) - set(CPACK_RPM_PACKAGE_DESCRIPTION ${DESCRIPTION}) - - set(CPACK_DEBIAN_PACKAGE_RELEASE 1) - set(CPACK_DEBIAN_PACKAGE_MAINTAINER ${AUTHOR}) - set(CPACK_DEBIAN_PACKAGE_DESCRIPTION ${DESCRIPTION}) - set(CPACK_DEBIAN_PACKAGE_SECTION "electronics") - set(CPACK_DEBIAN_PACKAGE_HOMEPAGE ${WEBSITE}) - - include(CPack) -endif() - -get_filename_component(DEVEL_SUPPORT_DIR ${PROJECT_SOURCE_DIR}/../development ABSOLUTE) -get_filename_component(ROOT_DIR ${PROJECT_SOURCE_DIR}/.. ABSOLUTE) - -# Add test targets - -enable_testing() - -add_custom_target(check - COMMAND ${CMAKE_CTEST_COMMAND} -V - COMMENT "vcdMaker test suite") - -# Functional tests - -find_package(PythonInterp 3.5) - -if (PYTHONINTERP_FOUND) - set(COMPARISON_TEST_SCRIPT ${ROOT_DIR}/test/functional/comparison_test.py) - set(MAKER_COMPARISON_TEST_DIR ${PROJECT_SOURCE_DIR}/vcdMaker/test/functional) - set(MERGE_COMPARISON_TEST_DIR ${PROJECT_SOURCE_DIR}/vcdMerge/test/functional) - - add_test(NAME vcdMakerComparisonTest - COMMAND ${PYTHON_EXECUTABLE} ${COMPARISON_TEST_SCRIPT} -e ./vcdMaker -t ${MAKER_COMPARISON_TEST_DIR} - WORKING_DIRECTORY ${OUTPUT_DIR_ABSOLUE}) - - add_dependencies(check vcdMaker) - - add_test(NAME vcdMergeComparisonTest - COMMAND ${PYTHON_EXECUTABLE} ${COMPARISON_TEST_SCRIPT} -e ./vcdMerge -t ${MERGE_COMPARISON_TEST_DIR} - WORKING_DIRECTORY ${OUTPUT_DIR_ABSOLUE}) - - add_dependencies(check vcdMerge) + include(install) + include(installCpack) endif() -# Unit tests - -set(COMMON_UT_DIR common/test/unitTest) -set(COMMON_UT_STUB_DIR common/test/unitTest/stub) - -set(CATCH_HEADERS_DIR 3rdParty/catch/single_include) - -set(OUTPUT_UT_DIR output/ut) - -set(COMMON_UT_TARGET utCommon) - -# Function for unit test creation. -function(add_vcdtools_ut UT_NAME UT_SOURCES) - add_executable(${UT_NAME} EXCLUDE_FROM_ALL $ ${UT_SOURCES}) - - target_include_directories(${UT_NAME} PUBLIC ${COMMON_HEADERS_DIR} ${VMAKER_HEADERS_DIR} ${VMERGE_HEADERS_DIR} ${CATCH_HEADERS_DIR}) +include(check) - add_common_vcdtools_target_props(${UT_NAME}) +include(comparisonTest) - set_target_properties(${UT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_UT_DIR}) +include(commonUtTarget) - add_test(NAME ${UT_NAME} - COMMAND ${UT_NAME} --use-colour yes) - add_dependencies(check ${UT_NAME}) -endfunction(add_vcdtools_ut) +include(unitTests) -add_library(${COMMON_UT_TARGET} EXCLUDE_FROM_ALL OBJECT ${COMMON_UT_DIR}/UtMain.cpp) - -target_include_directories(${COMMON_UT_TARGET} PUBLIC ${CATCH_HEADERS_DIR}) - -add_common_vcdtools_target_props(${COMMON_UT_TARGET}) - -set(UT_SIGNAL_SOURCES - ${COMMON_UT_DIR}/Signal.cpp - ${COMMON_UT_STUB_DIR}/UtilsEmpty.cpp - ${COMMON_SOURCES_DIR}/Signal.cpp) - -add_vcdtools_ut(utSignal "${UT_SIGNAL_SOURCES}") - -set(UT_ISIGNAL_SOURCES - ${COMMON_UT_DIR}/ISignal.cpp - ${COMMON_SOURCES_DIR}/ISignal.cpp) - -add_vcdtools_ut(utISignal "${UT_ISIGNAL_SOURCES}") - -set(UT_FSIGNAL_SOURCES - ${COMMON_UT_DIR}/FSignal.cpp - ${COMMON_SOURCES_DIR}/FSignal.cpp) - -add_vcdtools_ut(utFSignal "${UT_FSIGNAL_SOURCES}") - -set(UT_EVENTSIGNAL_SOURCES - ${COMMON_UT_DIR}/EventSignal.cpp) - -add_vcdtools_ut(utEventSignal "${UT_EVENTSIGNAL_SOURCES}") - -set(UT_SOURCE_REGISTRY_SOURCES - ${COMMON_UT_DIR}/SourceRegistry.cpp - ${COMMON_SOURCES_DIR}/SourceRegistry.cpp) - -add_vcdtools_ut(utSourceRegistry "${UT_SOURCE_REGISTRY_SOURCES}") - -set(UT_UTILS_SOURCES - ${COMMON_UT_DIR}/Utils.cpp - ${COMMON_UT_STUB_DIR}/Signal.cpp - ${COMMON_SOURCES_DIR}/Utils.cpp) - -add_vcdtools_ut(utUtils "${UT_UTILS_SOURCES}") - -# Add Doxygen target - -find_package(Doxygen) - -if (DOXYGEN_FOUND) - set(DOXYFILE_IN ${DEVEL_SUPPORT_DIR}/config/Doxyfile.in) - set(DOXYFILE_OUT Doxyfile.out) - - configure_file(${DOXYFILE_IN} ${DOXYFILE_OUT}) - - add_custom_target(doxygen - COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYFILE_OUT} - COMMENT "Generate doxygen documentation" - VERBATIM) -endif() +include(doxygen) diff --git a/sources/cmake/check.cmake b/sources/cmake/check.cmake new file mode 100644 index 0000000..832d662 --- /dev/null +++ b/sources/cmake/check.cmake @@ -0,0 +1,31 @@ +# check.cmake +# +# Check target. +# +# Copyright (c) 2017 vcdMaker team +# +# 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. + +# Add master testing target. + +enable_testing() + +add_custom_target(check + COMMAND ${CMAKE_CTEST_COMMAND} -V + COMMENT "vcdMaker test suite") diff --git a/sources/cmake/commonSources.cmake b/sources/cmake/commonSources.cmake new file mode 100644 index 0000000..cd2c258 --- /dev/null +++ b/sources/cmake/commonSources.cmake @@ -0,0 +1,82 @@ +# commonSources.cmake +# +# List of common source files and directories. +# +# Copyright (c) 2017 vcdMaker team +# +# 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. + +# Set common source files. +set(COMMON_SOURCES_DIR common/src) + +set(COMMON_SOURCES + ${COMMON_SOURCES_DIR}/EventSignalCreator.cpp + ${COMMON_SOURCES_DIR}/FSignal.cpp + ${COMMON_SOURCES_DIR}/FSignalCreator.cpp + ${COMMON_SOURCES_DIR}/ISignal.cpp + ${COMMON_SOURCES_DIR}/ISignalCreator.cpp + ${COMMON_SOURCES_DIR}/SignalFactory.cpp + ${COMMON_SOURCES_DIR}/SignalStructureBuilder.cpp + ${COMMON_SOURCES_DIR}/Signal.cpp + ${COMMON_SOURCES_DIR}/SignalDb.cpp + ${COMMON_SOURCES_DIR}/SourceRegistry.cpp + ${COMMON_SOURCES_DIR}/TxtParser.cpp + ${COMMON_SOURCES_DIR}/LogParser.cpp + ${COMMON_SOURCES_DIR}/LineCounter.cpp + ${COMMON_SOURCES_DIR}/TimeFrame.cpp + ${COMMON_SOURCES_DIR}/Utils.cpp + ${COMMON_SOURCES_DIR}/Logger.cpp + ${COMMON_SOURCES_DIR}/VCDTracer.cpp) + +# Set common header files. +# This shouldn't be needed, but helps IDE project generators. +set(COMMON_HEADERS_DIR common/inc) + +set(COMMON_HEADERS + ${COMMON_HEADERS_DIR}/CliParser.h + ${COMMON_HEADERS_DIR}/LogParser.h + ${COMMON_HEADERS_DIR}/LineCounter.h + ${COMMON_HEADERS_DIR}/TxtParser.h + ${COMMON_HEADERS_DIR}/EventSignalCreator.h + ${COMMON_HEADERS_DIR}/EventSignal.h + ${COMMON_HEADERS_DIR}/FSignalCreator.h + ${COMMON_HEADERS_DIR}/FSignal.h + ${COMMON_HEADERS_DIR}/ISignalCreator.h + ${COMMON_HEADERS_DIR}/ISignal.h + ${COMMON_HEADERS_DIR}/SignalCreator.h + ${COMMON_HEADERS_DIR}/SignalFactory.h + ${COMMON_HEADERS_DIR}/SignalStructureBuilder.h + ${COMMON_HEADERS_DIR}/Signal.h + ${COMMON_HEADERS_DIR}/SourceRegistry.h + ${COMMON_HEADERS_DIR}/SignalDb.h + ${COMMON_HEADERS_DIR}/VcdException.h + ${COMMON_HEADERS_DIR}/VcdExceptionList.h + ${COMMON_HEADERS_DIR}/Logger.h + ${COMMON_HEADERS_DIR}/TimeFrame.h + ${COMMON_HEADERS_DIR}/Utils.h + ${COMMON_HEADERS_DIR}/Instrument.h + ${COMMON_HEADERS_DIR}/VCDTracer.h + ${VERSION_HEADER}) + +# 3rd party directories. +set(TCLAP_HEADERS_DIR 3rdParty/tclap/include) + +# Other directories. +get_filename_component(DEVEL_SUPPORT_DIR ${PROJECT_SOURCE_DIR}/../development ABSOLUTE) +get_filename_component(ROOT_DIR ${PROJECT_SOURCE_DIR}/.. ABSOLUTE) diff --git a/sources/cmake/commonTarget.cmake b/sources/cmake/commonTarget.cmake new file mode 100644 index 0000000..b93ef93 --- /dev/null +++ b/sources/cmake/commonTarget.cmake @@ -0,0 +1,64 @@ +# commonTarget.cmake +# +# vcdMaker and vcdMerge common build target functions. +# +# Copyright (c) 2017 vcdMaker team +# +# 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. + +# Output directory +set(OUTPUT_DIR output) +set(OUTPUT_DIR_ABSOLUE ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_DIR}) + +# Common sources target name. +set(COMMON_LIB_TARGET vcdToolsCommon) + +# Function for setting general target properties. +function(add_common_vcdtools_target_props TARGET_NAME) + # Set C++14 support. + set_target_properties(${TARGET_NAME} PROPERTIES CXX_STANDARD 14) + set_target_properties(${TARGET_NAME} PROPERTIES CXX_EXTENSIONS OFF) + set_target_properties(${TARGET_NAME} PROPERTIES CXX_STANDARD_REQUIRED ON) + + # Set warning flags. + if (${CMAKE_CXX_COMPILER_ID} STREQUAL GNU) + target_compile_options(${TARGET_NAME} PUBLIC -Wall -Wextra -pedantic) + elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC) + target_compile_options(${TARGET_NAME} PUBLIC /W4) + endif() +endfunction(add_common_vcdtools_target_props) + +# Function for target creation. +function(add_vcdtools_target TARGET_NAME TARGET_SOURCES TARGET_HEADERS TARGET_HEADERS_DIR) + add_executable(${TARGET_NAME} $ ${TARGET_SOURCES} ${COMMON_HEADERS} ${TARGET_HEADERS}) + + target_include_directories(${TARGET_NAME} PUBLIC ${COMMON_HEADERS_DIR} ${TARGET_HEADERS_DIR} ${TCLAP_HEADERS_DIR}) + + add_common_vcdtools_target_props(${TARGET_NAME}) + + set_target_properties(${TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_DIR}) +endfunction(add_vcdtools_target) + +# Set common sources build + +add_library(${COMMON_LIB_TARGET} OBJECT ${COMMON_SOURCES} ${COMMON_HEADERS}) + +target_include_directories(${COMMON_LIB_TARGET} PUBLIC ${COMMON_HEADERS_DIR} ${TCLAP_HEADERS_DIR}) + +add_common_vcdtools_target_props(${COMMON_LIB_TARGET}) diff --git a/sources/cmake/commonUtTarget.cmake b/sources/cmake/commonUtTarget.cmake new file mode 100644 index 0000000..2b0d67d --- /dev/null +++ b/sources/cmake/commonUtTarget.cmake @@ -0,0 +1,55 @@ +# commonUtTarget.cmake +# +# Common unit test target functions. +# +# Copyright (c) 2017 vcdMaker team +# +# 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. + +# Unit tests + +set(COMMON_UT_DIR common/test/unitTest) +set(COMMON_UT_STUB_DIR common/test/unitTest/stub) + +set(CATCH_HEADERS_DIR 3rdParty/catch/single_include) + +set(OUTPUT_UT_DIR output/ut) + +set(COMMON_UT_TARGET utCommon) + +# Function for unit test creation. +function(add_vcdtools_ut UT_NAME UT_SOURCES) + add_executable(${UT_NAME} EXCLUDE_FROM_ALL $ ${UT_SOURCES}) + + target_include_directories(${UT_NAME} PUBLIC ${COMMON_HEADERS_DIR} ${VMAKER_HEADERS_DIR} ${VMERGE_HEADERS_DIR} ${CATCH_HEADERS_DIR}) + + add_common_vcdtools_target_props(${UT_NAME}) + + set_target_properties(${UT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_UT_DIR}) + + add_test(NAME ${UT_NAME} + COMMAND ${UT_NAME} --use-colour yes) + add_dependencies(check ${UT_NAME}) +endfunction(add_vcdtools_ut) + +add_library(${COMMON_UT_TARGET} EXCLUDE_FROM_ALL OBJECT ${COMMON_UT_DIR}/UtMain.cpp) + +target_include_directories(${COMMON_UT_TARGET} PUBLIC ${CATCH_HEADERS_DIR}) + +add_common_vcdtools_target_props(${COMMON_UT_TARGET}) diff --git a/sources/cmake/comparisonTest.cmake b/sources/cmake/comparisonTest.cmake new file mode 100644 index 0000000..73086bf --- /dev/null +++ b/sources/cmake/comparisonTest.cmake @@ -0,0 +1,45 @@ +# comparisonTest.cmake +# +# Comparison test targets. +# +# Copyright (c) 2017 vcdMaker team +# +# 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. + +# Comparison functional test. + +find_package(PythonInterp 3.5) + +if (PYTHONINTERP_FOUND) + set(COMPARISON_TEST_SCRIPT ${ROOT_DIR}/test/functional/comparison_test.py) + set(MAKER_COMPARISON_TEST_DIR ${PROJECT_SOURCE_DIR}/vcdMaker/test/functional) + set(MERGE_COMPARISON_TEST_DIR ${PROJECT_SOURCE_DIR}/vcdMerge/test/functional) + + add_test(NAME vcdMakerComparisonTest + COMMAND ${PYTHON_EXECUTABLE} ${COMPARISON_TEST_SCRIPT} -e ./vcdMaker -t ${MAKER_COMPARISON_TEST_DIR} + WORKING_DIRECTORY ${OUTPUT_DIR_ABSOLUE}) + + add_dependencies(check vcdMaker) + + add_test(NAME vcdMergeComparisonTest + COMMAND ${PYTHON_EXECUTABLE} ${COMPARISON_TEST_SCRIPT} -e ./vcdMerge -t ${MERGE_COMPARISON_TEST_DIR} + WORKING_DIRECTORY ${OUTPUT_DIR_ABSOLUE}) + + add_dependencies(check vcdMerge) +endif() diff --git a/sources/cmake/doxygen.cmake b/sources/cmake/doxygen.cmake new file mode 100644 index 0000000..b1b5e79 --- /dev/null +++ b/sources/cmake/doxygen.cmake @@ -0,0 +1,39 @@ +# version.cmake +# +# Doxygen target. +# +# Copyright (c) 2017 vcdMaker team +# +# 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. + +# Add Doxygen target. + +find_package(Doxygen) + +if (DOXYGEN_FOUND) + set(DOXYFILE_IN ${DEVEL_SUPPORT_DIR}/config/Doxyfile.in) + set(DOXYFILE_OUT Doxyfile.out) + + configure_file(${DOXYFILE_IN} ${DOXYFILE_OUT}) + + add_custom_target(doxygen + COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYFILE_OUT} + COMMENT "Generate doxygen documentation" + VERBATIM) +endif() diff --git a/sources/cmake/install.cmake b/sources/cmake/install.cmake new file mode 100644 index 0000000..78316c9 --- /dev/null +++ b/sources/cmake/install.cmake @@ -0,0 +1,39 @@ +# install.cmake +# +# Install target. +# +# Copyright (c) 2017 vcdMaker team +# +# 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. + +# Set installation. + +install(TARGETS vcdMaker vcdMerge + RUNTIME DESTINATION bin + COMPONENT runtime) + +install(FILES ${MAN_PAGES_GENERATED} + DESTINATION share/man/man1 + COMPONENT documentation) + +install(DIRECTORY common/doc/ + DESTINATION share/doc/${CMAKE_PROJECT_NAME} + COMPONENT documentation + PATTERN "*.odt" EXCLUDE + PATTERN "man" EXCLUDE) diff --git a/sources/cmake/installCpack.cmake b/sources/cmake/installCpack.cmake new file mode 100644 index 0000000..2db8ac9 --- /dev/null +++ b/sources/cmake/installCpack.cmake @@ -0,0 +1,56 @@ +# installCpack.cmake +# +# CPack settings. +# +# Copyright (c) 2017 vcdMaker team +# +# 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. + +# Set Cpack. + +set(AUTHOR "vcdMaker team") +set(WEBSITE "http://vcdmaker.org") +set(DESCRIPTION "Commandline tools that can generate VCD files from text logs") + +set(CPACK_PACKAGE_VENDOR ${AUTHOR}) +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Generates VCD files from text logs") +set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) +set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR}) +set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH}) +set(CPACK_PACKAGE_DIRECTORY ${OUTPUT_DIR_ABSOLUE}) +set(CPACK_STRIP_FILES ON) +set(CPACK_GENERATOR "RPM" "DEB" "ZIP") + +set(CPACK_SYSTEM_NAME ${CMAKE_SYSTEM_PROCESSOR}) +if (CPACK_SYSTEM_NAME STREQUAL "x86_64") + set(CPACK_SYSTEM_NAME "amd64") +endif() + +set(CPACK_RPM_PACKAGE_RELEASE 1) +set(CPACK_RPM_PACKAGE_LICENSE "MIT") +set(CPACK_RPM_PACKAGE_URL ${WEBSITE}) +set(CPACK_RPM_PACKAGE_DESCRIPTION ${DESCRIPTION}) + +set(CPACK_DEBIAN_PACKAGE_RELEASE 1) +set(CPACK_DEBIAN_PACKAGE_MAINTAINER ${AUTHOR}) +set(CPACK_DEBIAN_PACKAGE_DESCRIPTION ${DESCRIPTION}) +set(CPACK_DEBIAN_PACKAGE_SECTION "electronics") +set(CPACK_DEBIAN_PACKAGE_HOMEPAGE ${WEBSITE}) + +include(CPack) diff --git a/sources/cmake/manPages.cmake b/sources/cmake/manPages.cmake new file mode 100644 index 0000000..ebfc92a --- /dev/null +++ b/sources/cmake/manPages.cmake @@ -0,0 +1,63 @@ +# manPages.cmake +# +# Man page generation. +# +# Copyright (c) 2017 vcdMaker team +# +# 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. + +# Set man pages generation. + +find_program(TXT2MAN_EXECUTABLE + NAME txt2man + PATHS ENV PATH + DOC "txt2man man pages generation tool") + +if (NOT TXT2MAN_EXECUTABLE) + message(FATAL_ERROR "txt2man executable not found") +endif() + +find_program(GZIP_EXECUTABLE + NAME gzip + PATHS ENV PATH + DOC "gzip tool") + +if (NOT GZIP_EXECUTABLE) + message(FATAL_ERROR "gzip executable not found") +endif() + +set(MAN_SOURCE_DIR ${PROJECT_SOURCE_DIR}/common/doc/man) +set(MAN_COMMON_OPTIONS -r ${PROJECT_VERSION} -s 1 -v "vcdMaker manual") +set(MAN_PAGES + vcdMaker + vcdMerge) + +foreach(MAN_PAGE IN LISTS MAN_PAGES) + add_custom_command(OUTPUT ${OUTPUT_DIR_ABSOLUE}/${MAN_PAGE}.1.gz + COMMAND ${TXT2MAN_EXECUTABLE} -t ${MAN_PAGE} ${MAN_COMMON_OPTIONS} ${MAN_SOURCE_DIR}/${MAN_PAGE}.txt > ${MAN_PAGE}.1 + COMMAND ${GZIP_EXECUTABLE} ${MAN_PAGE}.1 + WORKING_DIRECTORY ${OUTPUT_DIR_ABSOLUE} + VERBATIM) + + list(APPEND MAN_PAGES_GENERATED ${OUTPUT_DIR_ABSOLUE}/${MAN_PAGE}.1.gz) +endforeach(MAN_PAGE) + +add_custom_target(manPages + ALL + DEPENDS ${MAN_PAGES_GENERATED}) diff --git a/sources/cmake/unitTests.cmake b/sources/cmake/unitTests.cmake new file mode 100644 index 0000000..18b8758 --- /dev/null +++ b/sources/cmake/unitTests.cmake @@ -0,0 +1,62 @@ +# unitTests.cmake +# +# Unit test targets. +# +# Copyright (c) 2017 vcdMaker team +# +# 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. + +# List of unit tests. + +set(UT_SIGNAL_SOURCES + ${COMMON_UT_DIR}/Signal.cpp + ${COMMON_UT_STUB_DIR}/UtilsEmpty.cpp + ${COMMON_SOURCES_DIR}/Signal.cpp) + +add_vcdtools_ut(utSignal "${UT_SIGNAL_SOURCES}") + +set(UT_ISIGNAL_SOURCES + ${COMMON_UT_DIR}/ISignal.cpp + ${COMMON_SOURCES_DIR}/ISignal.cpp) + +add_vcdtools_ut(utISignal "${UT_ISIGNAL_SOURCES}") + +set(UT_FSIGNAL_SOURCES + ${COMMON_UT_DIR}/FSignal.cpp + ${COMMON_SOURCES_DIR}/FSignal.cpp) + +add_vcdtools_ut(utFSignal "${UT_FSIGNAL_SOURCES}") + +set(UT_EVENTSIGNAL_SOURCES + ${COMMON_UT_DIR}/EventSignal.cpp) + +add_vcdtools_ut(utEventSignal "${UT_EVENTSIGNAL_SOURCES}") + +set(UT_SOURCE_REGISTRY_SOURCES + ${COMMON_UT_DIR}/SourceRegistry.cpp + ${COMMON_SOURCES_DIR}/SourceRegistry.cpp) + +add_vcdtools_ut(utSourceRegistry "${UT_SOURCE_REGISTRY_SOURCES}") + +set(UT_UTILS_SOURCES + ${COMMON_UT_DIR}/Utils.cpp + ${COMMON_UT_STUB_DIR}/Signal.cpp + ${COMMON_SOURCES_DIR}/Utils.cpp) + +add_vcdtools_ut(utUtils "${UT_UTILS_SOURCES}") diff --git a/sources/cmake/vcdMaker.cmake b/sources/cmake/vcdMaker.cmake new file mode 100644 index 0000000..e24450d --- /dev/null +++ b/sources/cmake/vcdMaker.cmake @@ -0,0 +1,38 @@ +# vcdMaker.cmake +# +# vcdMaker target. +# +# Copyright (c) 2017 vcdMaker team +# +# 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. + +# Set vcdMaker build. + +set(VMAKER_SOURCES_DIR vcdMaker/src) +set(VMAKER_SOURCES + ${VMAKER_SOURCES_DIR}/vcdMaker.cpp) + +set(VMAKER_HEADERS_DIR vcdMaker/inc) +set(VMAKER_HEADERS + ${VMAKER_HEADERS_DIR}/CliMaker.h) + +add_vcdtools_target(vcdMaker + "${VMAKER_SOURCES}" + "${VMAKER_HEADERS}" + ${VMAKER_HEADERS_DIR}) diff --git a/sources/cmake/vcdMerge.cmake b/sources/cmake/vcdMerge.cmake new file mode 100644 index 0000000..20b5122 --- /dev/null +++ b/sources/cmake/vcdMerge.cmake @@ -0,0 +1,42 @@ +# vcdMerge.cmake +# +# vcdMerge target. +# +# Copyright (c) 2017 vcdMaker team +# +# 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. + +# Set vcdMerge build. + +set(VMERGE_SOURCES_DIR vcdMerge/src) +set(VMERGE_SOURCES + ${VMERGE_SOURCES_DIR}/vcdMerge.cpp + ${VMERGE_SOURCES_DIR}/Merge.cpp + ${VMERGE_SOURCES_DIR}/SignalSource.cpp) + +set(VMERGE_HEADERS_DIR vcdMerge/inc) +set(VMERGE_HEADERS + ${VMERGE_HEADERS_DIR}/CliMerge.h + ${VMERGE_HEADERS_DIR}/Merge.h + ${VMERGE_HEADERS_DIR}/SignalSource.h) + +add_vcdtools_target(vcdMerge + "${VMERGE_SOURCES}" + "${VMERGE_HEADERS}" + ${VMERGE_HEADERS_DIR}) diff --git a/sources/cmake/version.cmake b/sources/cmake/version.cmake new file mode 100644 index 0000000..cab5479 --- /dev/null +++ b/sources/cmake/version.cmake @@ -0,0 +1,33 @@ +# version.cmake +# +# Version header handling. +# +# Copyright (c) 2017 vcdMaker team +# +# 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. + +# Extract version information +set(VERSION_HEADER common/inc/Version.h) + +file(STRINGS ${VERSION_HEADER} VERSION_LINE REGEX "#define D_VERSION_") +string(REGEX MATCHALL "[0-9]+" VERSION_COMPONENTS ${VERSION_LINE}) + +list(GET VERSION_COMPONENTS 0 VERSION_MAJOR) +list(GET VERSION_COMPONENTS 1 VERSION_MINOR) +list(GET VERSION_COMPONENTS 2 VERSION_PATCH) From 26153112761b594395f4edf2ee169af250757d51 Mon Sep 17 00:00:00 2001 From: Endrju Date: Mon, 24 Jul 2017 22:00:45 +0200 Subject: [PATCH 043/143] Added pugixml submodule. --- .gitmodules | 3 +++ sources/3rdParty/pugixml | 1 + 2 files changed, 4 insertions(+) create mode 160000 sources/3rdParty/pugixml diff --git a/.gitmodules b/.gitmodules index ae80783..79f60a7 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "sources/3rdParty/catch"] path = sources/3rdParty/catch url = https://github.com/philsquared/Catch +[submodule "sources/3rdParty/pugixml"] + path = sources/3rdParty/pugixml + url = https://github.com/zeux/pugixml diff --git a/sources/3rdParty/pugixml b/sources/3rdParty/pugixml new file mode 160000 index 0000000..77d7e60 --- /dev/null +++ b/sources/3rdParty/pugixml @@ -0,0 +1 @@ +Subproject commit 77d7e603792756da519ae2b7b3de1131fd0e6819 From 0ddbf6f0c1c514a409f93c04d465c3ef7c9e7522 Mon Sep 17 00:00:00 2001 From: Endrju Date: Wed, 2 Aug 2017 21:55:17 +0200 Subject: [PATCH 044/143] Use automatic install directories --- sources/cmake/install.cmake | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/sources/cmake/install.cmake b/sources/cmake/install.cmake index 78316c9..58a2cc4 100644 --- a/sources/cmake/install.cmake +++ b/sources/cmake/install.cmake @@ -24,16 +24,18 @@ # Set installation. +include(GNUInstallDirs) + install(TARGETS vcdMaker vcdMerge - RUNTIME DESTINATION bin + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime) install(FILES ${MAN_PAGES_GENERATED} - DESTINATION share/man/man1 + DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 COMPONENT documentation) install(DIRECTORY common/doc/ - DESTINATION share/doc/${CMAKE_PROJECT_NAME} + DESTINATION ${CMAKE_INSTALL_DOCDIR} COMPONENT documentation PATTERN "*.odt" EXCLUDE PATTERN "man" EXCLUDE) From 3f6fdff28a39406e264d987cce72110de4bb4974 Mon Sep 17 00:00:00 2001 From: Endrju Date: Wed, 2 Aug 2017 23:25:37 +0200 Subject: [PATCH 045/143] Pugixml library support in cmake. --- sources/CMakeLists.txt | 2 ++ sources/cmake/pugixml.cmake | 66 +++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 sources/cmake/pugixml.cmake diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt index 0c6be20..b6f06b6 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -66,3 +66,5 @@ include(commonUtTarget) include(unitTests) include(doxygen) + +include(pugixml) diff --git a/sources/cmake/pugixml.cmake b/sources/cmake/pugixml.cmake new file mode 100644 index 0000000..f98a5f7 --- /dev/null +++ b/sources/cmake/pugixml.cmake @@ -0,0 +1,66 @@ +# pugixml.cmake +# +# Pugixml library support. +# +# Copyright (c) 2017 vcdMaker team +# +# 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. + +option(USE_STATIC_PUGIXML "Set to ON to build and static link pugixml library, set to OFF to use system library" OFF) + +if (USE_STATIC_PUGIXML) + set(PUGIXML_OUTPUT_DIR ${OUTPUT_DIR_ABSOLUE}/pugixml) + set(PUGIXML_INSTALL_DIR ${PUGIXML_OUTPUT_DIR}/install) + + include(ExternalProject) + ExternalProject_Add(pugixml_project + SOURCE_DIR ${PROJECT_SOURCE_DIR}/3rdParty/pugixml + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${PUGIXML_INSTALL_DIR} -DCMAKE_BUILD_TYPE=Release + BUILD_IN_SOURCE OFF + BINARY_DIR ${PUGIXML_OUTPUT_DIR} + INSTALL_DIR ${PUGIXML_INSTALL_DIR} + TMP_DIR ${PUGIXML_OUTPUT_DIR}/tmp + STAMP_DIR ${PUGIXML_OUTPUT_DIR}/stamp) + + add_dependencies(vcdMaker pugixml_project) + add_dependencies(vcdMerge pugixml_project) + + add_library(pugixml STATIC IMPORTED) + + if(WIN32) + set(LIB_PREFIX "") + set(LIB_SUFFIX ".lib") + else() + set(LIB_PREFIX "lib") + set(LIB_SUFFIX ".a") + endif() + + set(PUGIXML_LIB_FILE ${PUGIXML_OUTPUT_DIR}/${LIB_PREFIX}pugixml${LIB_SUFFIX}) + + set_target_properties(pugixml PROPERTIES + IMPORTED_LOCATION ${PUGIXML_LIB_FILE} + INTERFACE_INCLUDE_DIRECTORIES ${PROJECT_SOURCE_DIR}/3rdParty/pugixml/src) + + set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${PUGIXML_LIB_FILE}) +else() + find_package(pugixml REQUIRED) +endif() + +target_link_libraries(vcdMaker pugixml) +target_link_libraries(vcdMerge pugixml) From a6bc9c70bb7a6d54448793b69fb84436a33aa98c Mon Sep 17 00:00:00 2001 From: Endrju Date: Wed, 2 Aug 2017 23:41:38 +0200 Subject: [PATCH 046/143] Use fancy FeatureSummary cmake module. --- sources/CMakeLists.txt | 4 ++++ sources/cmake/comparisonTest.cmake | 5 +++++ sources/cmake/doxygen.cmake | 5 +++++ sources/cmake/pugixml.cmake | 8 +++++++- 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt index b6f06b6..7bf3059 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -34,6 +34,8 @@ cmake_minimum_required(VERSION 3.0) +include(FeatureSummary) + set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) include(version) @@ -68,3 +70,5 @@ include(unitTests) include(doxygen) include(pugixml) + +feature_summary(WHAT ALL) diff --git a/sources/cmake/comparisonTest.cmake b/sources/cmake/comparisonTest.cmake index 73086bf..5494bc0 100644 --- a/sources/cmake/comparisonTest.cmake +++ b/sources/cmake/comparisonTest.cmake @@ -25,6 +25,11 @@ # Comparison functional test. find_package(PythonInterp 3.5) +set_package_properties(PythonInterp PROPERTIES + URL "http://python.org" + DESCRIPTION "Python programming language interpretter" + TYPE OPTIONAL + PURPOSE "Enables comparison test.") if (PYTHONINTERP_FOUND) set(COMPARISON_TEST_SCRIPT ${ROOT_DIR}/test/functional/comparison_test.py) diff --git a/sources/cmake/doxygen.cmake b/sources/cmake/doxygen.cmake index b1b5e79..67fd25f 100644 --- a/sources/cmake/doxygen.cmake +++ b/sources/cmake/doxygen.cmake @@ -25,6 +25,11 @@ # Add Doxygen target. find_package(Doxygen) +set_package_properties(Doxygen PROPERTIES + URL "http://doxygen.org" + DESCRIPTION "Tool for generating documentation from annotated C++ sources" + TYPE OPTIONAL + PURPOSE "Enables generation of code documentation.") if (DOXYGEN_FOUND) set(DOXYFILE_IN ${DEVEL_SUPPORT_DIR}/config/Doxyfile.in) diff --git a/sources/cmake/pugixml.cmake b/sources/cmake/pugixml.cmake index f98a5f7..af0172c 100644 --- a/sources/cmake/pugixml.cmake +++ b/sources/cmake/pugixml.cmake @@ -22,7 +22,8 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. -option(USE_STATIC_PUGIXML "Set to ON to build and static link pugixml library, set to OFF to use system library" OFF) +option(USE_STATIC_PUGIXML "Set to ON to build and static link pugixml library, set to OFF to use system library." OFF) +add_feature_info(StaticPugixml USE_STATIC_PUGIXML "Enables usage of source based, bundled pugixml library.") if (USE_STATIC_PUGIXML) set(PUGIXML_OUTPUT_DIR ${OUTPUT_DIR_ABSOLUE}/pugixml) @@ -60,6 +61,11 @@ if (USE_STATIC_PUGIXML) set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${PUGIXML_LIB_FILE}) else() find_package(pugixml REQUIRED) + set_package_properties(pugixml PROPERTIES + URL "http://pugixml.org" + DESCRIPTION "Light-weight C++ XML processing library." + TYPE REQUIRED + PURPOSE "Enables parsing of XML files.") endif() target_link_libraries(vcdMaker pugixml) From 631addb0d582e33bd1375d52478ffb857e90dcd5 Mon Sep 17 00:00:00 2001 From: Endrju Date: Fri, 15 Sep 2017 14:49:48 +0200 Subject: [PATCH 047/143] Use static pugixml for Travis --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index b962ad1..14deaf1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -56,6 +56,6 @@ before_script: - cd ./sources script: - - cmake . + - cmake -DUSE_STATIC_PUGIXML=ON -DCMAKE_BUILD_TYPE=Release . - make - make check From d4510b214a9b2e30a33b7f81dd24893a96fbed05 Mon Sep 17 00:00:00 2001 From: Endrju Date: Fri, 15 Sep 2017 17:00:34 +0200 Subject: [PATCH 048/143] Typo fix --- sources/cmake/comparisonTest.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/cmake/comparisonTest.cmake b/sources/cmake/comparisonTest.cmake index 5494bc0..7accb1b 100644 --- a/sources/cmake/comparisonTest.cmake +++ b/sources/cmake/comparisonTest.cmake @@ -27,7 +27,7 @@ find_package(PythonInterp 3.5) set_package_properties(PythonInterp PROPERTIES URL "http://python.org" - DESCRIPTION "Python programming language interpretter" + DESCRIPTION "Python programming language interpreter" TYPE OPTIONAL PURPOSE "Enables comparison test.") From 895ce8f7931a0adc0f1e798b5dd8d252b024965c Mon Sep 17 00:00:00 2001 From: Endrju Date: Sun, 17 Sep 2017 20:35:59 +0200 Subject: [PATCH 049/143] Use verbose make. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 14deaf1..919ec6c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -57,5 +57,5 @@ before_script: script: - cmake -DUSE_STATIC_PUGIXML=ON -DCMAKE_BUILD_TYPE=Release . - - make + - VERBOSE=1 make - make check From 120ed56af825d5d68fd0c805b8d19ff0c8a3fdc8 Mon Sep 17 00:00:00 2001 From: Endrju Date: Sun, 17 Sep 2017 20:36:32 +0200 Subject: [PATCH 050/143] Add include directory for common target when static pugixml is used --- sources/cmake/pugixml.cmake | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sources/cmake/pugixml.cmake b/sources/cmake/pugixml.cmake index af0172c..4cc4a90 100644 --- a/sources/cmake/pugixml.cmake +++ b/sources/cmake/pugixml.cmake @@ -54,11 +54,15 @@ if (USE_STATIC_PUGIXML) set(PUGIXML_LIB_FILE ${PUGIXML_OUTPUT_DIR}/${LIB_PREFIX}pugixml${LIB_SUFFIX}) + set(PUGIXML_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/3rdParty/pugixml/src) + set_target_properties(pugixml PROPERTIES IMPORTED_LOCATION ${PUGIXML_LIB_FILE} - INTERFACE_INCLUDE_DIRECTORIES ${PROJECT_SOURCE_DIR}/3rdParty/pugixml/src) + INTERFACE_INCLUDE_DIRECTORIES ${PUGIXML_INCLUDE_DIR}) + + target_include_directories(${COMMON_LIB_TARGET} PUBLIC ${PUGIXML_INCLUDE_DIR}) - set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${PUGIXML_LIB_FILE}) + set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${PUGIXML_LIB_FILE}) else() find_package(pugixml REQUIRED) set_package_properties(pugixml PROPERTIES From 58cd30c63a7b0cbd0bd4336c5c01c06186f53df1 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Thu, 24 Aug 2017 19:26:26 +0200 Subject: [PATCH 051/143] #25 Updated VS projects --- windows/vcdMaker/vcdMaker.sln | 12 ++++++++++++ windows/vcdMaker/vcdMaker/vcdMaker.vcxproj | 10 +++++----- windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj | 4 ++-- windows/vcdMaker/vcdMerge/vcdMerge.vcxproj | 8 ++++---- 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/windows/vcdMaker/vcdMaker.sln b/windows/vcdMaker/vcdMaker.sln index 706fbac..18c7fc2 100644 --- a/windows/vcdMaker/vcdMaker.sln +++ b/windows/vcdMaker/vcdMaker.sln @@ -5,16 +5,20 @@ VisualStudioVersion = 14.0.24720.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdMaker", "vcdMaker\vcdMaker.vcxproj", "{39CE447A-C072-4E08-9042-2208DF3A25D6}" ProjectSection(ProjectDependencies) = postProject + {07CF01C0-B887-499D-AD9C-799CB6A9FE64} = {07CF01C0-B887-499D-AD9C-799CB6A9FE64} {DBC389FC-FB63-430B-9443-F4DE90F1AB0E} = {DBC389FC-FB63-430B-9443-F4DE90F1AB0E} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdMerge", "vcdMerge\vcdMerge.vcxproj", "{F2A67A23-8D8D-44FE-9F00-7C59DAD8A954}" ProjectSection(ProjectDependencies) = postProject + {07CF01C0-B887-499D-AD9C-799CB6A9FE64} = {07CF01C0-B887-499D-AD9C-799CB6A9FE64} {DBC389FC-FB63-430B-9443-F4DE90F1AB0E} = {DBC389FC-FB63-430B-9443-F4DE90F1AB0E} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdMakerCore", "vcdMakerCore\vcdMakerCore.vcxproj", "{DBC389FC-FB63-430B-9443-F4DE90F1AB0E}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pugixml_vs2015", "..\..\sources\3rdParty\pugixml\scripts\pugixml_vs2015.vcxproj", "{07CF01C0-B887-499D-AD9C-799CB6A9FE64}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -43,6 +47,14 @@ Global {DBC389FC-FB63-430B-9443-F4DE90F1AB0E}.Release|Win32.Build.0 = Release|Win32 {DBC389FC-FB63-430B-9443-F4DE90F1AB0E}.Release|x64.ActiveCfg = Release|x64 {DBC389FC-FB63-430B-9443-F4DE90F1AB0E}.Release|x64.Build.0 = Release|x64 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Debug|Win32.ActiveCfg = Debug|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Debug|Win32.Build.0 = Debug|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Debug|x64.ActiveCfg = Debug|x64 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Debug|x64.Build.0 = Debug|x64 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|Win32.ActiveCfg = Release|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|Win32.Build.0 = Release|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|x64.ActiveCfg = Release|x64 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/windows/vcdMaker/vcdMaker/vcdMaker.vcxproj b/windows/vcdMaker/vcdMaker/vcdMaker.vcxproj index 1be2dfb..6be2c66 100644 --- a/windows/vcdMaker/vcdMaker/vcdMaker.vcxproj +++ b/windows/vcdMaker/vcdMaker/vcdMaker.vcxproj @@ -52,13 +52,13 @@ Disabled WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true - $(ProjectDir)..\..\..\sources\common\inc;$(ProjectDir)..\..\..\sources\vcdMaker\inc;$(ProjectDir)..\..\..\sources\3rdParty\tclap\include%(AdditionalIncludeDirectories) + $(ProjectDir)..\..\..\sources\common\inc;$(ProjectDir)..\..\..\sources\vcdMaker\inc;$(ProjectDir)..\..\..\sources\3rdParty\tclap\include;%(AdditionalIncludeDirectories) Console true - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;vcdMakerCore.lib;%(AdditionalDependencies) - $(SolutionDir)$(Configuration)\ + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;vcdMakerCore.lib;pugixml.lib;%(AdditionalDependencies) + $(SolutionDir)\..\..\sources\3rdParty\pugixml\scripts\vs2015\Win32_Debug\;$(SolutionDir)$(Configuration)\ @@ -77,8 +77,8 @@ true true true - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;vcdMakerCore.lib;%(AdditionalDependencies) - $(SolutionDir)$(Configuration)\ + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;vcdMakerCore.lib;pugixml.lib;%(AdditionalDependencies) + $(SolutionDir)\..\..\sources\3rdParty\pugixml\scripts\vs2015\Win32_Release\;$(SolutionDir)$(Configuration)\ diff --git a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj index 0123b80..ba42653 100644 --- a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj +++ b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj @@ -83,7 +83,7 @@ Disabled WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) true - $(ProjectDir)..\..\..\sources\common\inc;$(ProjectDir)..\..\..\sources\3rdParty\tclap\include;%(AdditionalIncludeDirectories) + $(ProjectDir)..\..\..\sources\common\inc;$(ProjectDir)..\..\..\sources\3rdParty\tclap\include;$(ProjectDir)..\..\..\sources\3rdParty\pugixml\src;%(AdditionalIncludeDirectories) Windows @@ -112,7 +112,7 @@ true WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) true - $(ProjectDir)..\..\..\sources\common\inc;$(ProjectDir)..\..\..\sources\3rdParty\tclap\include%(AdditionalIncludeDirectories) + $(ProjectDir)..\..\..\sources\common\inc;$(ProjectDir)..\..\..\sources\3rdParty\tclap\include;;$(ProjectDir)..\..\..\sources\3rdParty\pugixml\src;%(AdditionalIncludeDirectories) Windows diff --git a/windows/vcdMaker/vcdMerge/vcdMerge.vcxproj b/windows/vcdMaker/vcdMerge/vcdMerge.vcxproj index 86c4c94..c7b7a9d 100644 --- a/windows/vcdMaker/vcdMerge/vcdMerge.vcxproj +++ b/windows/vcdMaker/vcdMerge/vcdMerge.vcxproj @@ -57,8 +57,8 @@ Console true - $(SolutionDir)$(Configuration)\ - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;vcdMakerCore.lib;%(AdditionalDependencies) + $(SolutionDir)\..\..\sources\3rdParty\pugixml\scripts\vs2015\Win32_Debug\;$(SolutionDir)$(Configuration)\ + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;vcdMakerCore.lib;pugixml.lib;%(AdditionalDependencies) @@ -77,8 +77,8 @@ true true true - $(SolutionDir)$(Configuration)\ - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;vcdMakerCore.lib;%(AdditionalDependencies) + $(SolutionDir)\..\..\sources\3rdParty\pugixml\scripts\vs2015\Win32_Release\;$(SolutionDir)$(Configuration)\ + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;vcdMakerCore.lib;pugixml.lib;%(AdditionalDependencies) From 3039e52fe149f3b3ff77b9203a40e1d8f01ddf11 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Thu, 24 Aug 2017 19:29:30 +0200 Subject: [PATCH 052/143] #25 XML and DTD sample files --- sources/common/doc/examples/vcdMaker.dtd | 23 ++++++++++++++ sources/common/doc/examples/vcdMaker.xml | 40 ++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 sources/common/doc/examples/vcdMaker.dtd create mode 100644 sources/common/doc/examples/vcdMaker.xml diff --git a/sources/common/doc/examples/vcdMaker.dtd b/sources/common/doc/examples/vcdMaker.dtd new file mode 100644 index 0000000..e641c80 --- /dev/null +++ b/sources/common/doc/examples/vcdMaker.dtd @@ -0,0 +1,23 @@ + + + + + + + + + + + diff --git a/sources/common/doc/examples/vcdMaker.xml b/sources/common/doc/examples/vcdMaker.xml new file mode 100644 index 0000000..ffd8031 --- /dev/null +++ b/sources/common/doc/examples/vcdMaker.xml @@ -0,0 +1,40 @@ + + + + + + ^#([[:d:]]+) ([[:graph:]]+) ([[:d:]]+) ([[:d:]]+)( +.*)? + 1 + 2 + 3 + 4 + + + + ^#([[:d:]]+) ([[:graph:]]+) ([[:d:][:punct:]]+) f( +.*)? + 1 + 2 + 3 + + + + ^#([[:d:]]+) ([[:graph:]]+) e( +.*)? + 1 + 2 + + + + test1 + 1 + 2 + + + + test2 + 1 + 2 + 3 + 4 + + + From b4a08bf36d8db70e97fc7a8dd080a7905543e729 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Mon, 28 Aug 2017 23:00:24 +0200 Subject: [PATCH 053/143] #25 Basic parsing functionality --- sources/common/doc/man/vcdMaker.txt | 23 ++- sources/common/doc/man/vcdMerge.txt | 4 +- sources/common/inc/SignalFactory.h | 6 +- sources/common/inc/TxtParser.h | 6 + sources/common/inc/VcdExceptionList.h | 18 ++ sources/common/inc/XmlEventSignalCreator.h | 55 ++++++ sources/common/inc/XmlFSignalCreator.h | 57 ++++++ sources/common/inc/XmlISignalCreator.h | 54 ++++++ sources/common/inc/XmlSignalCreator.h | 92 +++++++++ sources/common/inc/XmlSignalFactory.h | 100 ++++++++++ sources/common/src/SignalFactory.cpp | 11 +- sources/common/src/TxtParser.cpp | 9 +- sources/common/src/XmlEventSignalCreator.cpp | 45 +++++ sources/common/src/XmlFSignalCreator.cpp | 46 +++++ sources/common/src/XmlISignalCreator.cpp | 47 +++++ sources/common/src/XmlSignalCreator.cpp | 47 +++++ sources/common/src/XmlSignalFactory.cpp | 175 ++++++++++++++++++ sources/vcdMaker/inc/CliMaker.h | 17 +- sources/vcdMaker/src/vcdMaker.cpp | 13 ++ sources/vcdMerge/inc/CliMerge.h | 2 +- sources/vcdMerge/inc/SignalSource.h | 4 + sources/vcdMerge/src/SignalSource.cpp | 29 ++- windows/vcdMaker/vcdMaker/vcdMaker.vcxproj | 4 +- .../vcdMakerCore/vcdMakerCore.vcxproj | 12 +- .../vcdMakerCore/vcdMakerCore.vcxproj.filters | 30 +++ windows/vcdMaker/vcdMerge/vcdMerge.vcxproj | 4 +- 26 files changed, 876 insertions(+), 34 deletions(-) create mode 100644 sources/common/inc/XmlEventSignalCreator.h create mode 100644 sources/common/inc/XmlFSignalCreator.h create mode 100644 sources/common/inc/XmlISignalCreator.h create mode 100644 sources/common/inc/XmlSignalCreator.h create mode 100644 sources/common/inc/XmlSignalFactory.h create mode 100644 sources/common/src/XmlEventSignalCreator.cpp create mode 100644 sources/common/src/XmlFSignalCreator.cpp create mode 100644 sources/common/src/XmlISignalCreator.cpp create mode 100644 sources/common/src/XmlSignalCreator.cpp create mode 100644 sources/common/src/XmlSignalFactory.cpp diff --git a/sources/common/doc/man/vcdMaker.txt b/sources/common/doc/man/vcdMaker.txt index 3d95ef5..96d231e 100644 --- a/sources/common/doc/man/vcdMaker.txt +++ b/sources/common/doc/man/vcdMaker.txt @@ -1,28 +1,33 @@ NAME vcdMaker - log file to VCD converter SYNOPSIS - vcdMaker [-c line-counter-signal-name] -t s|ms|us|ns|ps|fs [-v] -o output-file + vcdMaker [-c line-counter-signal-name] [-u user-log-format] -t s|ms|us|ns|ps|fs [-v] -o output-file [--] [--version] [-h] input-file DESCRIPTION vcdMaker is a tool that converts textual log files to VCD trace files. - The expected log format is as follows: + The inherent vcdMaker log format is as follows: #Timestamp TopModule.Module1...ModuleN.SignalName SignalValue Comment - The first field is a timestamp in some time unit. Please note that log lines need not to be sorted. + The first field is a timestamp in some time unit. Please note that log lines need not to be sorted. - The second field is a signal name. VCD uses hierarchical signal naming, this structure should be reflected in the log line. + The second field is a signal name. VCD uses hierarchical signal naming, this structure should be reflected in the log line. - The third field is a signal value. The value is empty for event signals. + The third field is a signal value. The value is empty for event signals. - The fourth field is a signal size/type. For integer signals the signal-size should be a signal size in bits, for real number type code 'f' should be used and for event signals type code 'e' should be used. + The fourth field is a signal size/type. For integer signals the signal-size should be a signal size in bits, for real number type code 'f' should be used and for event signals type code 'e' should be used. - The last field is a comment, which is ignored. + The last field is a comment, which is ignored. - The generated log that consists of lines in the above format can be transformed into a VCD trace and later viewed using any graphical tool, eg. GTKWave. + + User defined log format + The tool can parse any user log format. Its syntax must be defined by an XML file and passed via the '-u' option. See the full documentation for details. + + The generated VCD trace can be viewed using any graphical tool, eg. GTKWave. OPTIONS - -c, --lineCounter line-counter-signal-name If given, adds a line counter signal with the given name. The line counter signal is a signal that binds the timestamp in the VCD trace to the line number in original log file. + -c, --line_counter line-counter-signal-name If given, adds a line counter signal with the given name. The line counter signal is a signal that binds the timestamp in the VCD trace to the line number in original log file. + -u, --user_format user-log-format The user defined log format. -t, --timebase s|ms|us|ns|ps|fs A log timebase specification (required). -v, --verbose Enables verbose mode. -o, --file_out output-file An ouput VCD filename (required). diff --git a/sources/common/doc/man/vcdMerge.txt b/sources/common/doc/man/vcdMerge.txt index a7d1dd4..ce946bd 100644 --- a/sources/common/doc/man/vcdMerge.txt +++ b/sources/common/doc/man/vcdMerge.txt @@ -20,7 +20,7 @@ OPTIONS format,timestamp,unit,prefix,counter,filename - format The format of the input file. Currently only 'T' is supported. + format The format of the input file. 'T' for the inherent vcdMaker format. 'U()' for the user defined log format. See the full documentation for details. timestamp The synchronisation time for the input log. unit The unit of the timestamp. prefix The prefix to be added to all the signals within the unit. It can be left empty. Then, no prefix is added. @@ -29,7 +29,7 @@ OPTIONS EXAMPLE All source options used: - vcdMerge -o out.vcd -v T,71050601,us,Prefix1,Counter1,log1.txt T,234256037,us,Prefix2,Counter2,log2.txt + vcdMerge -o out.vcd -v T,71050601,us,Prefix1,Counter1,log1.txt U(vcdMaker.xml),234256037,us,Prefix2,Counter2,log2.txt No signal counters: diff --git a/sources/common/inc/SignalFactory.h b/sources/common/inc/SignalFactory.h index 362451f..8ff28da 100644 --- a/sources/common/inc/SignalFactory.h +++ b/sources/common/inc/SignalFactory.h @@ -44,7 +44,9 @@ namespace PARSER public: /// The signal factory default constructor. - SignalFactory(); + /// + /// @param default_creators Defines if the default vcdMaker signal creatos shall be used. + SignalFactory(bool default_creators = true); /// Creates the appropriate signal object. /// @@ -56,7 +58,7 @@ namespace PARSER SIGNAL::Signal *Create(std::string &logLine, SIGNAL::SourceRegistry::HandleT sourceHandle) const; - private: + protected: /// The table of pointers to signal creators. std::vector> m_vpSignalCreators; diff --git a/sources/common/inc/TxtParser.h b/sources/common/inc/TxtParser.h index 567703d..6f21d87 100644 --- a/sources/common/inc/TxtParser.h +++ b/sources/common/inc/TxtParser.h @@ -30,6 +30,7 @@ #pragma once #include "LogParser.h" +#include "SignalFactory.h" /// Log parser. namespace PARSER @@ -47,10 +48,12 @@ namespace PARSER /// @param rFilename The name of the log file to be open. /// @param rTimeBase The time base used in the log. /// @param rSourceRegistry Signal sources registry. + /// @param rSignalFactory The signal factory. /// @param verboseMode Value 'true' enables the verbose mode. TxtParser(const std::string &rFilename, const std::string &rTimeBase, SIGNAL::SourceRegistry &rSourceRegistry, + const SignalFactory &rSignalFactory, bool verboseMode); /// The destructor. @@ -72,6 +75,9 @@ namespace PARSER /// The signal source handle. SIGNAL::SourceRegistry::HandleT m_SourceHandle; + + /// The signal factory. + const SignalFactory &m_rSignalFactory; }; } diff --git a/sources/common/inc/VcdExceptionList.h b/sources/common/inc/VcdExceptionList.h index 969a566..1b68b28 100644 --- a/sources/common/inc/VcdExceptionList.h +++ b/sources/common/inc/VcdExceptionList.h @@ -81,6 +81,24 @@ namespace EXCEPTION /// Invalid number of sources. const uint32_t INVALID_NO_OF_SOURCES = 9U; + /// No parsing regular expression. + const uint32_t NO_REGEX_EXPRESSION = 10U; + + /// No timestamp expression. + const uint32_t NO_TIMESTAMP_EXPRESSION = 11U; + + /// No name expression. + const uint32_t NO_NAME_EXPRESSION = 12U; + + /// No value expression. + const uint32_t NO_VALUE_EXPRESSION = 13U; + + /// No size expression. + const uint32_t NO_SIZE_EXPRESSION = 14U; + + /// Unexpected tag. + const uint32_t UNEXPECTED_TAG = 15U; + // Logic errors below shall never happen. // They are enumerated from 9000. diff --git a/sources/common/inc/XmlEventSignalCreator.h b/sources/common/inc/XmlEventSignalCreator.h new file mode 100644 index 0000000..6762869 --- /dev/null +++ b/sources/common/inc/XmlEventSignalCreator.h @@ -0,0 +1,55 @@ +/// @file common/inc/XmlEventSignalCreator.h +/// +/// The XML event signal creator. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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. + +#pragma once + +#include "XmlSignalCreator.h" + +namespace PARSER +{ + + /// The class provides means to create teh XML event signal objects. + class XmlEventSignalCreator : public XmlSignalCreator + { + public: + + /// @copydoc XmlSignalCreator::XmlSignalCreator() + XmlEventSignalCreator(const std::string &rRegEx, + const std::string &rTimestamp, + const std::string &rName, + const std::string &rValue, + const std::string &rSize) : + XmlSignalCreator(rRegEx, rTimestamp, rName, rValue, rSize) + { + } + + /// @copydoc SignalCreator::Create() + virtual SIGNAL::Signal *Create(const std::string &rLogLine, + SIGNAL::SourceRegistry::HandleT sourceHandle) const; + + }; + +} diff --git a/sources/common/inc/XmlFSignalCreator.h b/sources/common/inc/XmlFSignalCreator.h new file mode 100644 index 0000000..f80f628 --- /dev/null +++ b/sources/common/inc/XmlFSignalCreator.h @@ -0,0 +1,57 @@ +/// @file common/inc/XmlFSignalCreator.h +/// +/// The XML real signal creator. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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. + +#pragma once + +#include "XmlSignalCreator.h" + +namespace PARSER +{ + + /// The class provides means to create XML real signal objects. + + /// The XML real signal creator class. + class XmlFSignalCreator : public XmlSignalCreator + { + public: + + /// @copydoc XmlSignalCreator::XmlSignalCreator() + XmlFSignalCreator(const std::string &rRegEx, + const std::string &rTimestamp, + const std::string &rName, + const std::string &rValue, + const std::string &rSize) : + XmlSignalCreator(rRegEx, rTimestamp, rName, rValue, rSize) + { + } + + /// @copydoc SignalCreator::Create() + virtual SIGNAL::Signal *Create(const std::string &rLogLine, + SIGNAL::SourceRegistry::HandleT sourceHandle) const; + + }; + +} diff --git a/sources/common/inc/XmlISignalCreator.h b/sources/common/inc/XmlISignalCreator.h new file mode 100644 index 0000000..9e4cc8c --- /dev/null +++ b/sources/common/inc/XmlISignalCreator.h @@ -0,0 +1,54 @@ +/// @file common/inc/XmlISignalCreator.h +/// +/// The XML integer signal creator. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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. + +#pragma once + +#include "XmlSignalCreator.h" + +namespace PARSER +{ + /// The class provides means to create XML integer signal objects. + + /// The XML integer signal creator class. + class XmlISignalCreator : public XmlSignalCreator + { + public: + /// @copydoc XmlSignalCreator::XmlSignalCreator() + XmlISignalCreator(const std::string &rRegEx, + const std::string &rTimestamp, + const std::string &rName, + const std::string &rValue, + const std::string &rSize) : + XmlSignalCreator(rRegEx, rTimestamp, rName, rValue, rSize) + { + } + + /// @copydoc SignalCreator::Create() + virtual SIGNAL::Signal *Create(const std::string &rLogLine, + SIGNAL::SourceRegistry::HandleT sourceHandle) const; + }; + +} diff --git a/sources/common/inc/XmlSignalCreator.h b/sources/common/inc/XmlSignalCreator.h new file mode 100644 index 0000000..578834c --- /dev/null +++ b/sources/common/inc/XmlSignalCreator.h @@ -0,0 +1,92 @@ +/// @file common/inc/XmlSignalCreator.h +/// +/// The generic XML signal creator. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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. + +#pragma once + +#include "SignalCreator.h" + +namespace PARSER +{ + /// The class provides means to create XML signal objects. + + /// An XML signal creator class. + class XmlSignalCreator : public SignalCreator + { + public: + /// The XML signal creator constructor. + /// + /// @param rRegEx The regular expression matching the log line. + /// @param rTimestamp The expression to create the timestamp of the signal. + /// @param rName The expression to create the name of the signal. + /// @param rValue The expression to create the value of the signal. + /// @param rSize The expression to create the size of the signal. + XmlSignalCreator(const std::string &rRegEx, + const std::string &rTimestamp, + const std::string &rName, + const std::string &rValue, + const std::string &rSize) : + SignalCreator(rRegEx), + m_Timestamp(rTimestamp), + m_Name(rName), + m_Value(rValue), + m_Size(rSize) + { + } + + protected: + /// Returns the timestamp of the signal. + /// + /// @param rMatch The regular expression groups. + uint64_t GetTimestamp(const std::smatch &rMatch) const; + + /// Returns the name of the signal. + /// + /// @param rMatch The regular expression groups. + std::string GetName(const std::smatch &rMatch) const; + + /// Returns the value of the signal. + /// + /// @param rMatch The regular expression groups. + std::string GetValue(const std::smatch &rMatch) const; + + /// Returns the size of the signal. + /// + /// @param rMatch The regular expression groups. + size_t GetSize(const std::smatch &rMatch) const; + + /// The expression to create the timestamp of the signal. + const std::string m_Timestamp; + + /// The expression to create the name of the signal. + const std::string m_Name; + + /// The expression to create the value of the signal. + const std::string m_Value; + + /// The expression to create the size of the signal. + const std::string m_Size; + }; +} diff --git a/sources/common/inc/XmlSignalFactory.h b/sources/common/inc/XmlSignalFactory.h new file mode 100644 index 0000000..0cd7c91 --- /dev/null +++ b/sources/common/inc/XmlSignalFactory.h @@ -0,0 +1,100 @@ +/// @file common/inc/XmlSignalFactory.h +/// +/// The user defined signal factory class. +/// +/// @par Full Description +/// The signal factory object to create the appropriate signal objects upon +/// the XML description. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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. + +#pragma once + +#include + +#include "SignalFactory.h" +#include "pugixml.hpp" + +namespace PARSER +{ + /// The class stores XML signal creation parameters. + + /// The XML description class. + class XmlDescription + { + public: + /// The XML signal class constructor. + /// + /// Creates the XML signal. + /// + /// @param rNode The main XML node. + XmlDescription(const pugi::xml_node &rNode); + + /// Returns the regular expression used to create the signal. + const std::string & GetRegex() const; + + /// Returns the timestamp tag value. + const std::string & GetTimestamp() const; + + /// Returns the name tag value. + const std::string & GetName() const; + + /// Returns the value tag value. + const std::string & GetValue() const; + + /// Returns the size tag value. + const std::string & GetSize() const; + + private: + + /// Stores the regular expression needed to create the signal. + /// The XML line tag value. + std::string m_RegexLine; + + /// Stores the XML timestamp tag value. + std::string m_Timestamp; + + /// Stores the XML name tag value. + std::string m_Name; + + /// Stores the XML value tag value. + std::string m_Value; + + /// Stores the XML size tag value. + std::string m_Size; + }; + + /// The class implements the factory method design pattern to build + /// different types of signals based on the provided XML description. + + /// The XML factory class. + class XmlSignalFactory : public SignalFactory + { + public: + + /// The XML signal factory default constructor. + /// + /// @param rXmlFileName The name of the XML file specifying the user log syntax. + XmlSignalFactory(const std::string& rXmlFileName); + }; +} diff --git a/sources/common/src/SignalFactory.cpp b/sources/common/src/SignalFactory.cpp index 68bab02..d31975c 100644 --- a/sources/common/src/SignalFactory.cpp +++ b/sources/common/src/SignalFactory.cpp @@ -32,13 +32,16 @@ #include "ISignalCreator.h" #include "FSignalCreator.h" -PARSER::SignalFactory::SignalFactory() : +PARSER::SignalFactory::SignalFactory(bool default_creators) : m_vpSignalCreators() { // Register creators - m_vpSignalCreators.push_back(std::make_unique()); - m_vpSignalCreators.push_back(std::make_unique()); - m_vpSignalCreators.push_back(std::make_unique()); + if (default_creators) + { + m_vpSignalCreators.push_back(std::make_unique()); + m_vpSignalCreators.push_back(std::make_unique()); + m_vpSignalCreators.push_back(std::make_unique()); + } } SIGNAL::Signal *PARSER::SignalFactory::Create(std::string &logLine, diff --git a/sources/common/src/TxtParser.cpp b/sources/common/src/TxtParser.cpp index 5825e41..4dd40fb 100644 --- a/sources/common/src/TxtParser.cpp +++ b/sources/common/src/TxtParser.cpp @@ -35,11 +35,13 @@ PARSER::TxtParser::TxtParser(const std::string &rFilename, const std::string &rTimeBase, SIGNAL::SourceRegistry &rSourceRegistry, + const PARSER::SignalFactory &rSignalFactory, bool verboseMode) : LogParser(rFilename, rTimeBase, rSourceRegistry, verboseMode), m_ValidLines(0), m_InvalidLines(0), - m_SourceHandle(rSourceRegistry.Register(rFilename)) + m_SourceHandle(rSourceRegistry.Register(rFilename)), + m_rSignalFactory(rSignalFactory) { } @@ -53,9 +55,6 @@ PARSER::TxtParser::~TxtParser() void PARSER::TxtParser::Parse() { - // Create the signal factory. - const SignalFactory signal_factory; - // Line counter. INSTRUMENT::Instrument::LineNumberT line_number = 1; @@ -64,7 +63,7 @@ void PARSER::TxtParser::Parse() while (std::getline(m_LogFile, input_line)) { const SIGNAL::Signal *signal = - signal_factory.Create(input_line, m_SourceHandle); + m_rSignalFactory.Create(input_line, m_SourceHandle); if (signal) { diff --git a/sources/common/src/XmlEventSignalCreator.cpp b/sources/common/src/XmlEventSignalCreator.cpp new file mode 100644 index 0000000..fb089dc --- /dev/null +++ b/sources/common/src/XmlEventSignalCreator.cpp @@ -0,0 +1,45 @@ +/// @file common/src/XmlEventSignalCreator.cpp +/// +/// The XML event signal creator. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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 "XmlEventSignalCreator.h" +#include "EventSignal.h" + +SIGNAL::Signal *PARSER::XmlEventSignalCreator::Create(const std::string &rLogLine, + SIGNAL::SourceRegistry::HandleT sourceHandle) const +{ + std::smatch result; + + if (true == std::regex_search(rLogLine, result, m_SignalRegEx)) + { + return new SIGNAL::EventSignal(GetName(result), + GetTimestamp(result), + sourceHandle); + } + else + { + return nullptr; + } +} diff --git a/sources/common/src/XmlFSignalCreator.cpp b/sources/common/src/XmlFSignalCreator.cpp new file mode 100644 index 0000000..9846aba --- /dev/null +++ b/sources/common/src/XmlFSignalCreator.cpp @@ -0,0 +1,46 @@ +/// @file common/src/XmlFSignalCreator.cpp +/// +/// The XML real signal creator. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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 "XmlFSignalCreator.h" +#include "FSignal.h" + +SIGNAL::Signal *PARSER::XmlFSignalCreator::Create(const std::string &rLogLine, + SIGNAL::SourceRegistry::HandleT sourceHandle) const +{ + std::smatch result; + + if (true == std::regex_search(rLogLine, result, m_SignalRegEx)) + { + return new SIGNAL::FSignal(GetName(result), + GetTimestamp(result), + GetValue(result), + sourceHandle); + } + else + { + return nullptr; + } +} diff --git a/sources/common/src/XmlISignalCreator.cpp b/sources/common/src/XmlISignalCreator.cpp new file mode 100644 index 0000000..98331a3 --- /dev/null +++ b/sources/common/src/XmlISignalCreator.cpp @@ -0,0 +1,47 @@ +/// @file common/src/XmlISignalCreator.cpp +/// +/// The XML integer signal creator. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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 "XmlISignalCreator.h" +#include "ISignal.h" + +SIGNAL::Signal *PARSER::XmlISignalCreator::Create(const std::string &rLogLine, + SIGNAL::SourceRegistry::HandleT sourceHandle) const +{ + std::smatch result; + + if (true == std::regex_search(rLogLine, result, m_SignalRegEx)) + { + return new SIGNAL::ISignal(GetName(result), + GetSize(result), + GetTimestamp(result), + std::stoll(GetValue(result)), + sourceHandle); + } + else + { + return nullptr; + } +} diff --git a/sources/common/src/XmlSignalCreator.cpp b/sources/common/src/XmlSignalCreator.cpp new file mode 100644 index 0000000..a0ea11c --- /dev/null +++ b/sources/common/src/XmlSignalCreator.cpp @@ -0,0 +1,47 @@ +/// @file common/src/XmlSignalCreator.cpp +/// +/// The XML signal creator. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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 "XmlSignalCreator.h" + +uint64_t PARSER::XmlSignalCreator::GetTimestamp(const std::smatch &rMatch) const +{ + return std::stoll(rMatch[std::stoi(m_Timestamp.c_str())].str()); +} + +std::string PARSER::XmlSignalCreator::GetName(const std::smatch &rMatch) const +{ + return rMatch[std::stoi(m_Name.c_str())].str(); +} + +std::string PARSER::XmlSignalCreator::GetValue(const std::smatch &rMatch) const +{ + return rMatch[std::stoi(m_Value.c_str())].str(); +} + +size_t PARSER::XmlSignalCreator::GetSize(const std::smatch &rMatch) const +{ + return std::stoi(rMatch[std::stoi(m_Size.c_str())].str()); +} \ No newline at end of file diff --git a/sources/common/src/XmlSignalFactory.cpp b/sources/common/src/XmlSignalFactory.cpp new file mode 100644 index 0000000..1fd4889 --- /dev/null +++ b/sources/common/src/XmlSignalFactory.cpp @@ -0,0 +1,175 @@ +/// @file common/src/XmlSignalFactory.cpp +/// +/// The user defined signal factory class. +/// +/// @par Full Description +/// The signal factory object to create the appropriate signal objects upon +/// the XML description. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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 "XmlSignalFactory.h" +#include "XmlEventSignalCreator.h" +#include "XmlFSignalCreator.h" +#include "XmlISignalCreator.h" +#include "VcdException.h" + +PARSER::XmlDescription::XmlDescription(const pugi::xml_node &rNode) : + m_RegexLine(), + m_Timestamp(), + m_Name(), + m_Value(), + m_Size() +{ + for (pugi::xml_node tag : rNode.children()) + { + if (!std::strcmp("line", tag.name())) + { + m_RegexLine = tag.child_value(); + } + + if (!std::strcmp("timestamp", tag.name())) + { + m_Timestamp = tag.child_value(); + } + + if (!std::strcmp("name", tag.name())) + { + m_Name = tag.child_value(); + } + + if (!std::strcmp("value", tag.name())) + { + m_Value = tag.child_value(); + } + + if (!std::strcmp("size", tag.name())) + { + m_Size = tag.child_value(); + } + } +} + +const std::string & PARSER::XmlDescription::GetRegex() const +{ + if (m_RegexLine.length()) + { + return m_RegexLine; + } + throw EXCEPTION::VcdException(EXCEPTION::Error::NO_REGEX_EXPRESSION, + "XML - No parsing regular expression."); +} + +const std::string & PARSER::XmlDescription::GetTimestamp() const +{ + if (m_Timestamp.length()) + { + return m_Timestamp; + } + throw EXCEPTION::VcdException(EXCEPTION::Error::NO_TIMESTAMP_EXPRESSION, + "XML - No timestamp expression."); +} + +const std::string & PARSER::XmlDescription::GetName() const +{ + if (m_Name.length()) + { + return m_Name; + } + throw EXCEPTION::VcdException(EXCEPTION::Error::NO_NAME_EXPRESSION, + "XML - No name expression."); +} + +const std::string & PARSER::XmlDescription::GetValue() const +{ + if (m_Value.length()) + { + return m_Value; + } + throw EXCEPTION::VcdException(EXCEPTION::Error::NO_VALUE_EXPRESSION, + "XML - No value expression."); +} + +const std::string & PARSER::XmlDescription::GetSize() const +{ + if (m_Size.length()) + { + return m_Size; + } + throw EXCEPTION::VcdException(EXCEPTION::Error::NO_SIZE_EXPRESSION, + "XML - No size expression."); +} + +PARSER::XmlSignalFactory::XmlSignalFactory(const std::string& rXmlFileName) : SignalFactory(false) +{ + // Parse the XML and add signal creators. + // pugi test + pugi::xml_document doc; + if (!doc.load_file(rXmlFileName.c_str())) throw (1); /// @todo Fix filename and error + + pugi::xml_node signals = doc.child("signals"); + + // Traverse the XML. + for (pugi::xml_node signal : signals.children()) + { + if (!std::strcmp("vector", signal.name())) + { + std::unique_ptr description = std::make_unique(signal); + m_vpSignalCreators.push_back(std::make_unique( + description->GetRegex(), + description->GetTimestamp(), + description->GetName(), + description->GetValue(), + description->GetSize())); + continue; + } + + if (!std::strcmp("real", signal.name())) + { + std::unique_ptr description = std::make_unique(signal); + m_vpSignalCreators.push_back(std::make_unique( + description->GetRegex(), + description->GetTimestamp(), + description->GetName(), + description->GetValue(), + "")); + continue; + } + + if (!std::strcmp("event", signal.name())) + { + std::unique_ptr description = std::make_unique(signal); + m_vpSignalCreators.push_back(std::make_unique( + description->GetRegex(), + description->GetTimestamp(), + description->GetName(), + "", + "")); + continue; + } + + throw EXCEPTION::VcdException(EXCEPTION::Error::UNEXPECTED_TAG, + "XML - Unexpected tag: " + std::string(signal.name())); + } +} + diff --git a/sources/vcdMaker/inc/CliMaker.h b/sources/vcdMaker/inc/CliMaker.h index 4e268ff..c0b57c2 100644 --- a/sources/vcdMaker/inc/CliMaker.h +++ b/sources/vcdMaker/inc/CliMaker.h @@ -46,24 +46,31 @@ namespace CLI CliParser("Log file to VCD converter.", VERSION::STRING) { m_Cli.add(m_Timebase); + m_Cli.add(m_UserLogFormat); m_Cli.add(m_FileIn); m_Cli.add(m_LineCounter); } /// Returns the timebase parameter. - const std::string& GetTimebase() + const std::string &GetTimebase() { return m_Timebase.getValue(); } + /// Returns the user log format parameter. + const std::string &GetUserLogFormat() + { + return m_UserLogFormat.getValue(); + } + /// Returns the input filename. - const std::string& GetInputFileName() + const std::string &GetInputFileName() { return m_FileIn.getValue(); } /// Returns the line counter signal name. - const std::string& GetLineCounterName() + const std::string &GetLineCounterName() { return m_LineCounter.getValue(); } @@ -77,6 +84,10 @@ namespace CLI TCLAP::ValueArg m_Timebase {"t", "timebase", "Log timebase specification", true, "ms", &m_AllowedTimebases}; + /// User log format parameter. + TCLAP::ValueArg m_UserLogFormat + { "u", "user_format", "The user log format XML description", false, "", "user-log-format" }; + /// Input filename parameter. TCLAP::UnlabeledValueArg m_FileIn { "file_in", "Input log filename", true, "log.txt", "input-file" }; diff --git a/sources/vcdMaker/src/vcdMaker.cpp b/sources/vcdMaker/src/vcdMaker.cpp index 0b4739e..9cac71b 100644 --- a/sources/vcdMaker/src/vcdMaker.cpp +++ b/sources/vcdMaker/src/vcdMaker.cpp @@ -31,6 +31,7 @@ #include "LineCounter.h" #include "VcdException.h" #include "Logger.h" +#include "XmlSignalFactory.h" /// The vcdMaker main function. /// @@ -48,10 +49,22 @@ int main(int argc, const char *argv[]) CLI::CliMaker cli; cli.Parse(argc, argv); + // Build the signal factory. + std::unique_ptr pSignalFactory = NULL; + if (cli.GetUserLogFormat().length()) + { + pSignalFactory = std::make_unique(cli.GetUserLogFormat()); + } + else + { + pSignalFactory = std::make_unique(); + } + // Create the log parser. PARSER::TxtParser txtLog(cli.GetInputFileName(), cli.GetTimebase(), SIGNAL::SourceRegistry::GetInstance(), + *pSignalFactory, cli.IsVerboseMode()); // Line counter. diff --git a/sources/vcdMerge/inc/CliMerge.h b/sources/vcdMerge/inc/CliMerge.h index 09524d6..7a6322c 100644 --- a/sources/vcdMerge/inc/CliMerge.h +++ b/sources/vcdMerge/inc/CliMerge.h @@ -74,7 +74,7 @@ namespace CLI /// Input sources. TCLAP::UnlabeledMultiArg m_SourcesIn - { "source_in", "Input sources. At least two sources must be provided. Format: T,syncTime,unit,prefix,counter,filename", true, "sources" }; + { "source_in", "Input sources. At least two sources must be provided. Format: log_format,syncTime,unit,prefix,counter,filename", true, "sources" }; }; } diff --git a/sources/vcdMerge/inc/SignalSource.h b/sources/vcdMerge/inc/SignalSource.h index ca9651b..8fe11c4 100644 --- a/sources/vcdMerge/inc/SignalSource.h +++ b/sources/vcdMerge/inc/SignalSource.h @@ -31,6 +31,7 @@ #pragma once #include "TxtParser.h" +#include "XmlSignalFactory.h" namespace MERGE { @@ -134,6 +135,9 @@ namespace MERGE /// The signals database. std::unique_ptr m_pSignalDb; + /// The signal factory. + std::unique_ptr m_pSignalFactory; + /// The source synchronization point. uint64_t m_SyncPoint; diff --git a/sources/vcdMerge/src/SignalSource.cpp b/sources/vcdMerge/src/SignalSource.cpp index 294257a..225df50 100644 --- a/sources/vcdMerge/src/SignalSource.cpp +++ b/sources/vcdMerge/src/SignalSource.cpp @@ -43,6 +43,7 @@ MERGE::SignalSource::SignalSource(const std::string &rDescription, m_SourceDescription(rDescription), m_rSignalRegistry(rSignalRegistry), m_pSignalDb(), + m_pSignalFactory(), m_SyncPoint(), m_TimeUnit(), m_Prefix(), @@ -74,6 +75,7 @@ void MERGE::SignalSource::Create() PARSER::TxtParser parser(m_Filename, m_TimeUnit, m_rSignalRegistry, + *m_pSignalFactory, m_VerboseMode); // Line counter. @@ -97,11 +99,32 @@ void MERGE::SignalSource::Create() void MERGE::SignalSource::SetFormat(const std::string &rFormat) { - if (rFormat != "T") + if (rFormat == "T") { - throw EXCEPTION::VcdException(EXCEPTION::Error::INVALID_LOG_FILE_FORMAT, - "Invalid log file format: " + rFormat); + m_pSignalFactory = std::make_unique(); + return; } + + if ((rFormat[0] == 'U') && + (rFormat[1] == '(') && + (rFormat[rFormat.length() - 1] == ')')) + { + const std::string filename(rFormat.substr(2, rFormat.length() - 3)); + std::ifstream infile(filename); + + if (!infile.good()) + { + throw EXCEPTION::VcdException(EXCEPTION::Error::CANNOT_OPEN_FILE, + "Opening file '" + + filename + + "' failed, it either doesn't exist or is inaccessible."); + } + m_pSignalFactory = std::make_unique(filename); + return; + } + + throw EXCEPTION::VcdException(EXCEPTION::Error::INVALID_LOG_FILE_FORMAT, + "Invalid log file format: " + rFormat); } void MERGE::SignalSource::SetSyncPoint(const std::string &rSyncPoint) diff --git a/windows/vcdMaker/vcdMaker/vcdMaker.vcxproj b/windows/vcdMaker/vcdMaker/vcdMaker.vcxproj index 6be2c66..60e95d6 100644 --- a/windows/vcdMaker/vcdMaker/vcdMaker.vcxproj +++ b/windows/vcdMaker/vcdMaker/vcdMaker.vcxproj @@ -52,7 +52,7 @@ Disabled WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true - $(ProjectDir)..\..\..\sources\common\inc;$(ProjectDir)..\..\..\sources\vcdMaker\inc;$(ProjectDir)..\..\..\sources\3rdParty\tclap\include;%(AdditionalIncludeDirectories) + $(ProjectDir)..\..\..\sources\common\inc;$(ProjectDir)..\..\..\sources\vcdMaker\inc;$(ProjectDir)..\..\..\sources\3rdParty\tclap\include;$(ProjectDir)..\..\..\sources\3rdParty\pugixml\src;%(AdditionalIncludeDirectories) Console @@ -70,7 +70,7 @@ true WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true - $(ProjectDir)..\..\..\sources\common\inc;$(ProjectDir)..\..\..\sources\vcdMaker\inc;$(ProjectDir)..\..\..\sources\3rdParty\tclap\include%(AdditionalIncludeDirectories) + $(ProjectDir)..\..\..\sources\common\inc;$(ProjectDir)..\..\..\sources\vcdMaker\inc;$(ProjectDir)..\..\..\sources\3rdParty\tclap\include;$(ProjectDir)..\..\..\sources\3rdParty\pugixml\src;%(AdditionalIncludeDirectories) Console diff --git a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj index ba42653..ba44861 100644 --- a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj +++ b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj @@ -112,7 +112,7 @@ true WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) true - $(ProjectDir)..\..\..\sources\common\inc;$(ProjectDir)..\..\..\sources\3rdParty\tclap\include;;$(ProjectDir)..\..\..\sources\3rdParty\pugixml\src;%(AdditionalIncludeDirectories) + $(ProjectDir)..\..\..\sources\common\inc;$(ProjectDir)..\..\..\sources\3rdParty\tclap\include;$(ProjectDir)..\..\..\sources\3rdParty\pugixml\src;%(AdditionalIncludeDirectories) Windows @@ -162,6 +162,11 @@ + + + + + @@ -181,6 +186,11 @@ + + + + + diff --git a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj.filters b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj.filters index be86b04..ade38df 100644 --- a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj.filters +++ b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj.filters @@ -83,6 +83,21 @@ Header Files + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + @@ -136,5 +151,20 @@ Source Files + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + \ No newline at end of file diff --git a/windows/vcdMaker/vcdMerge/vcdMerge.vcxproj b/windows/vcdMaker/vcdMerge/vcdMerge.vcxproj index c7b7a9d..9b410a0 100644 --- a/windows/vcdMaker/vcdMerge/vcdMerge.vcxproj +++ b/windows/vcdMaker/vcdMerge/vcdMerge.vcxproj @@ -52,7 +52,7 @@ Disabled WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true - $(ProjectDir)..\..\..\sources\common\inc;$(ProjectDir)..\..\..\sources\vcdMerge\inc;$(ProjectDir)..\..\..\sources\3rdParty\tclap\include%(AdditionalIncludeDirectories) + $(ProjectDir)..\..\..\sources\common\inc;$(ProjectDir)..\..\..\sources\vcdMerge\inc;$(ProjectDir)..\..\..\sources\3rdParty\tclap\include;$(ProjectDir)..\..\..\sources\3rdParty\pugixml\src;%(AdditionalIncludeDirectories) Console @@ -70,7 +70,7 @@ true WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true - $(ProjectDir)..\..\..\sources\common\inc;$(ProjectDir)..\..\..\sources\vcdMerge\inc;$(ProjectDir)..\..\..\sources\3rdParty\tclap\include%(AdditionalIncludeDirectories) + $(ProjectDir)..\..\..\sources\common\inc;$(ProjectDir)..\..\..\sources\vcdMerge\inc;$(ProjectDir)..\..\..\sources\3rdParty\tclap\include;$(ProjectDir)..\..\..\sources\3rdParty\pugixml\src;%(AdditionalIncludeDirectories) Console From a69685b077759004679030e7aab1a952b2c43cc5 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Tue, 29 Aug 2017 21:40:36 +0200 Subject: [PATCH 054/143] #25 cmake update --- sources/cmake/commonSources.cmake | 19 +++++++++++++++++++ sources/cmake/commonTarget.cmake | 10 +++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/sources/cmake/commonSources.cmake b/sources/cmake/commonSources.cmake index cd2c258..c45cd46 100644 --- a/sources/cmake/commonSources.cmake +++ b/sources/cmake/commonSources.cmake @@ -32,6 +32,11 @@ set(COMMON_SOURCES ${COMMON_SOURCES_DIR}/ISignal.cpp ${COMMON_SOURCES_DIR}/ISignalCreator.cpp ${COMMON_SOURCES_DIR}/SignalFactory.cpp + ${COMMON_SOURCES_DIR}/XmlEventSignalCreator.cpp + ${COMMON_SOURCES_DIR}/XmlFSignalCreator.cpp + ${COMMON_SOURCES_DIR}/XmlISignalCreator.cpp + ${COMMON_SOURCES_DIR}/XmlSignalCreator.cpp + ${COMMON_SOURCES_DIR}/XmlSignalFactory.cpp ${COMMON_SOURCES_DIR}/SignalStructureBuilder.cpp ${COMMON_SOURCES_DIR}/Signal.cpp ${COMMON_SOURCES_DIR}/SignalDb.cpp @@ -61,6 +66,11 @@ set(COMMON_HEADERS ${COMMON_HEADERS_DIR}/ISignal.h ${COMMON_HEADERS_DIR}/SignalCreator.h ${COMMON_HEADERS_DIR}/SignalFactory.h + ${COMMON_HEADERS_DIR}/XmlEventSignalCreator.h + ${COMMON_HEADERS_DIR}/XmlFSignalCreator.h + ${COMMON_HEADERS_DIR}/XmlISignalCreator.h + ${COMMON_HEADERS_DIR}/XmlSignalCreator.h + ${COMMON_HEADERS_DIR}/XmlSignalFactory.h ${COMMON_HEADERS_DIR}/SignalStructureBuilder.h ${COMMON_HEADERS_DIR}/Signal.h ${COMMON_HEADERS_DIR}/SourceRegistry.h @@ -76,6 +86,15 @@ set(COMMON_HEADERS # 3rd party directories. set(TCLAP_HEADERS_DIR 3rdParty/tclap/include) +set(PUGIXML_HEADERS_DIR 3rdParty/pugixml/src) + +# Set PugiXml source files. +set(PUGIXML_SOURCES + ${PUGIXML_HEADERS_DIR}/pugixml.cpp) + +set(PUGIXML_HEADERS + ${PUGIXML_HEADERS_DIR}/pugixml.hpp + ${PUGIXML_HEADERS_DIR}/pugiconfig.hpp) # Other directories. get_filename_component(DEVEL_SUPPORT_DIR ${PROJECT_SOURCE_DIR}/../development ABSOLUTE) diff --git a/sources/cmake/commonTarget.cmake b/sources/cmake/commonTarget.cmake index b93ef93..132358c 100644 --- a/sources/cmake/commonTarget.cmake +++ b/sources/cmake/commonTarget.cmake @@ -28,6 +28,7 @@ set(OUTPUT_DIR_ABSOLUE ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_DIR}) # Common sources target name. set(COMMON_LIB_TARGET vcdToolsCommon) +set(PUGIXML_LIB_TARGET pugiXml) # Function for setting general target properties. function(add_common_vcdtools_target_props TARGET_NAME) @@ -46,9 +47,9 @@ endfunction(add_common_vcdtools_target_props) # Function for target creation. function(add_vcdtools_target TARGET_NAME TARGET_SOURCES TARGET_HEADERS TARGET_HEADERS_DIR) - add_executable(${TARGET_NAME} $ ${TARGET_SOURCES} ${COMMON_HEADERS} ${TARGET_HEADERS}) + add_executable(${TARGET_NAME} $ $ ${TARGET_SOURCES} ${COMMON_HEADERS} ${PUGIXML_HEADERS} ${TARGET_HEADERS}) - target_include_directories(${TARGET_NAME} PUBLIC ${COMMON_HEADERS_DIR} ${TARGET_HEADERS_DIR} ${TCLAP_HEADERS_DIR}) + target_include_directories(${TARGET_NAME} PUBLIC ${COMMON_HEADERS_DIR} ${TARGET_HEADERS_DIR} ${TCLAP_HEADERS_DIR} ${PUGIXML_HEADERS_DIR}) add_common_vcdtools_target_props(${TARGET_NAME}) @@ -58,7 +59,10 @@ endfunction(add_vcdtools_target) # Set common sources build add_library(${COMMON_LIB_TARGET} OBJECT ${COMMON_SOURCES} ${COMMON_HEADERS}) +add_library(${PUGIXML_LIB_TARGET} OBJECT ${PUGIXML_SOURCES} ${PUGIXML_HEADERS}) -target_include_directories(${COMMON_LIB_TARGET} PUBLIC ${COMMON_HEADERS_DIR} ${TCLAP_HEADERS_DIR}) +target_include_directories(${COMMON_LIB_TARGET} PUBLIC ${COMMON_HEADERS_DIR} ${TCLAP_HEADERS_DIR} ${PUGIXML_HEADERS_DIR}) +target_include_directories(${PUGIXML_LIB_TARGET} PUBLIC ${PUGIXML_HEADERS_DIR}) add_common_vcdtools_target_props(${COMMON_LIB_TARGET}) +add_common_vcdtools_target_props(${PUGIXML_LIB_TARGET}) From dadf7420676a262e4378189d78a61019fa3dd424 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Tue, 29 Aug 2017 21:41:36 +0200 Subject: [PATCH 055/143] #25 Tests update --- sources/vcdMerge/test/functional/test.xml | 197 ++++++++++++++++++++++ test/functional/maker.py | 7 +- 2 files changed, 203 insertions(+), 1 deletion(-) diff --git a/sources/vcdMerge/test/functional/test.xml b/sources/vcdMerge/test/functional/test.xml index 8d740a4..2b55f06 100644 --- a/sources/vcdMerge/test/functional/test.xml +++ b/sources/vcdMerge/test/functional/test.xml @@ -234,5 +234,202 @@ A sample test definition (containing all tags): + + + + + Smoke test 6 + A test with the output in the default time units. Not synchronized sources. User log format. + + + False + ul_test0_us.output + test0_us.vcd + + + + + U(./common/doc/examples/vcdMaker.xml) + 71050601 + us + System1 + Counter + system1_time1.txt + + + T + 234256037 + us + System2 + Counter + system2_time2.txt + + + + + + + + Smoke test 7 + A test with the output in 'ns'. Not synchronized sources. User log format. + + + False + ul_test0_ns.output + test0_ns.vcd + + + ns + + + T + 71050601 + us + System1 + Counter + system1_time1.txt + + + U(./common/doc/examples/vcdMaker.xml) + 234256037 + us + System2 + Counter + system2_time2.txt + + + + + + + + Smoke test 8 + A test with the output in 'ms'. Not synchronized sources. User log format. + + + False + ul_test0_ms.output + test0_ms.vcd + + + ms + + + U(./common/doc/examples/vcdMaker.xml) + 71050601 + us + System1 + Counter + system1_time1.txt + + + U(./common/doc/examples/vcdMaker.xml) + 234256037 + us + System2 + Counter + system2_time2.txt + + + + + + + + Smoke test 9 + A test with the output in the default time units. Synchronized sources. User log format. + + + False + ul_test1_us.output + test1_us.vcd + + + + + U(./common/doc/examples/vcdMaker.xml) + 0 + us + System1 + Counter + system1_time1.txt + + + T + 0 + us + System2 + Counter + system2_time1.txt + + + + + + + + Smoke test 10 + A test with the output in 'ns'. Synchronized sources. User log format. + + + False + ul_test1_ns.output + test1_ns.vcd + + + ns + + + T + 0 + us + System1 + Counter + system1_time1.txt + + + U(./common/doc/examples/vcdMaker.xml) + 0 + us + System2 + Counter + system2_time1.txt + + + + + + + + Smoke test 11 + A test with the output in 'ms'. Synchronized sources. User log format. + + + False + ul_test1_ms.output + test1_ms.vcd + + + ms + + + U(./common/doc/examples/vcdMaker.xml) + 0 + us + System1 + Counter + system1_time1.txt + + + U(./common/doc/examples/vcdMaker.xml) + 0 + us + System2 + Counter + system2_time1.txt + + + + diff --git a/test/functional/maker.py b/test/functional/maker.py index 9e55ccf..c64b58f 100644 --- a/test/functional/maker.py +++ b/test/functional/maker.py @@ -44,7 +44,8 @@ def __init__(self, node, test_directory): self.command = [] self.unique_params = {'input_file': ['', 'Missing input file'], 'time_unit': ['', 'Missing time unit'], - 'line_counter': ['', '']} + 'line_counter': ['', ''], + 'user_format': ['', '']} for element in node.iter(tag='unique'): self.unique = Flat(element, self.unique_params) @@ -60,6 +61,10 @@ def create_command(self, test_directory): if self.unique.get_parameter('line_counter'): self.command.append('-c') self.command.append(self.unique.get_parameter('line_counter')) + + if self.unique.get_parameter('user_format'): + self.command.append('-u') + self.command.append(self.unique.get_parameter('user_format')) self.command.append('-o') self.command.append(os.path.join(test_directory, From 36b5f6f83297068c3d42259574606aac221cfae4 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Tue, 29 Aug 2017 22:16:10 +0200 Subject: [PATCH 056/143] #25 Format CLI update --- sources/common/doc/man/vcdMerge.txt | 4 +- sources/vcdMaker/test/functional/test.xml | 58 +++++++++++++++++++++++ sources/vcdMerge/src/SignalSource.cpp | 4 +- sources/vcdMerge/test/functional/test.xml | 16 +++---- 4 files changed, 70 insertions(+), 12 deletions(-) diff --git a/sources/common/doc/man/vcdMerge.txt b/sources/common/doc/man/vcdMerge.txt index ce946bd..03a6d89 100644 --- a/sources/common/doc/man/vcdMerge.txt +++ b/sources/common/doc/man/vcdMerge.txt @@ -20,7 +20,7 @@ OPTIONS format,timestamp,unit,prefix,counter,filename - format The format of the input file. 'T' for the inherent vcdMaker format. 'U()' for the user defined log format. See the full documentation for details. + format The format of the input file. 'T' for the inherent vcdMaker format. 'U{description_xml}' for the user defined log format. See the full documentation for details. timestamp The synchronisation time for the input log. unit The unit of the timestamp. prefix The prefix to be added to all the signals within the unit. It can be left empty. Then, no prefix is added. @@ -29,7 +29,7 @@ OPTIONS EXAMPLE All source options used: - vcdMerge -o out.vcd -v T,71050601,us,Prefix1,Counter1,log1.txt U(vcdMaker.xml),234256037,us,Prefix2,Counter2,log2.txt + vcdMerge -o out.vcd -v T,71050601,us,Prefix1,Counter1,log1.txt U{vcdMaker.xml},234256037,us,Prefix2,Counter2,log2.txt No signal counters: diff --git a/sources/vcdMaker/test/functional/test.xml b/sources/vcdMaker/test/functional/test.xml index 6695d41..48473ed 100644 --- a/sources/vcdMaker/test/functional/test.xml +++ b/sources/vcdMaker/test/functional/test.xml @@ -16,6 +16,7 @@ A sample test definition (containing all tags): input_filename us counter + format.xml @@ -35,6 +36,7 @@ A sample test definition (containing all tags): test_001.txt us Counter + @@ -52,6 +54,7 @@ A sample test definition (containing all tags): test_002.txt us + @@ -68,6 +71,61 @@ A sample test definition (containing all tags): test_003.txt us Cnt + + + + + + + + + Smoke test 4 + It tests the line counter. User log format. + + + ul_test_001.output + test_001.vcd + + + test_001.txt + us + Counter + ./common/doc/examples/vcdMaker.xml + + + + + + Smoke test 5 + A larger set of signals. User log format. + + + + ul_test_002.output + test_002.vcd + + + test_002.txt + us + + ./common/doc/examples/vcdMaker.xml + + + + + + Smoke test 6 + Tests events. User log format. + + + ul_test_003.output + test_003.vcd + + + test_003.txt + us + Cnt + ./common/doc/examples/vcdMaker.xml diff --git a/sources/vcdMerge/src/SignalSource.cpp b/sources/vcdMerge/src/SignalSource.cpp index 225df50..1acf9f8 100644 --- a/sources/vcdMerge/src/SignalSource.cpp +++ b/sources/vcdMerge/src/SignalSource.cpp @@ -106,8 +106,8 @@ void MERGE::SignalSource::SetFormat(const std::string &rFormat) } if ((rFormat[0] == 'U') && - (rFormat[1] == '(') && - (rFormat[rFormat.length() - 1] == ')')) + (rFormat[1] == '{') && + (rFormat[rFormat.length() - 1] == '}')) { const std::string filename(rFormat.substr(2, rFormat.length() - 3)); std::ifstream infile(filename); diff --git a/sources/vcdMerge/test/functional/test.xml b/sources/vcdMerge/test/functional/test.xml index 2b55f06..7cf26e5 100644 --- a/sources/vcdMerge/test/functional/test.xml +++ b/sources/vcdMerge/test/functional/test.xml @@ -249,7 +249,7 @@ A sample test definition (containing all tags): - U(./common/doc/examples/vcdMaker.xml) + U{./common/doc/examples/vcdMaker.xml} 71050601 us System1 @@ -290,7 +290,7 @@ A sample test definition (containing all tags): system1_time1.txt - U(./common/doc/examples/vcdMaker.xml) + U{./common/doc/examples/vcdMaker.xml} 234256037 us System2 @@ -315,7 +315,7 @@ A sample test definition (containing all tags): ms - U(./common/doc/examples/vcdMaker.xml) + U{./common/doc/examples/vcdMaker.xml} 71050601 us System1 @@ -323,7 +323,7 @@ A sample test definition (containing all tags): system1_time1.txt - U(./common/doc/examples/vcdMaker.xml) + U{./common/doc/examples/vcdMaker.xml} 234256037 us System2 @@ -347,7 +347,7 @@ A sample test definition (containing all tags): - U(./common/doc/examples/vcdMaker.xml) + U{./common/doc/examples/vcdMaker.xml} 0 us System1 @@ -388,7 +388,7 @@ A sample test definition (containing all tags): system1_time1.txt - U(./common/doc/examples/vcdMaker.xml) + U{./common/doc/examples/vcdMaker.xml} 0 us System2 @@ -413,7 +413,7 @@ A sample test definition (containing all tags): ms - U(./common/doc/examples/vcdMaker.xml) + U{./common/doc/examples/vcdMaker.xml} 0 us System1 @@ -421,7 +421,7 @@ A sample test definition (containing all tags): system1_time1.txt - U(./common/doc/examples/vcdMaker.xml) + U{./common/doc/examples/vcdMaker.xml} 0 us System2 From 7dcf9866fa8e048fe8076593d06ee3e75119084e Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Tue, 29 Aug 2017 22:34:22 +0200 Subject: [PATCH 057/143] #25 Fixed xml paths --- sources/vcdMaker/test/functional/test.xml | 6 +++--- sources/vcdMerge/test/functional/test.xml | 16 ++++++++-------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/sources/vcdMaker/test/functional/test.xml b/sources/vcdMaker/test/functional/test.xml index 48473ed..ac5b386 100644 --- a/sources/vcdMaker/test/functional/test.xml +++ b/sources/vcdMaker/test/functional/test.xml @@ -90,7 +90,7 @@ A sample test definition (containing all tags): test_001.txt us Counter - ./common/doc/examples/vcdMaker.xml + ../common/doc/examples/vcdMaker.xml @@ -108,7 +108,7 @@ A sample test definition (containing all tags): test_002.txt us - ./common/doc/examples/vcdMaker.xml + ../common/doc/examples/vcdMaker.xml @@ -125,7 +125,7 @@ A sample test definition (containing all tags): test_003.txt us Cnt - ./common/doc/examples/vcdMaker.xml + ../common/doc/examples/vcdMaker.xml diff --git a/sources/vcdMerge/test/functional/test.xml b/sources/vcdMerge/test/functional/test.xml index 7cf26e5..642dd9d 100644 --- a/sources/vcdMerge/test/functional/test.xml +++ b/sources/vcdMerge/test/functional/test.xml @@ -249,7 +249,7 @@ A sample test definition (containing all tags): - U{./common/doc/examples/vcdMaker.xml} + U{../common/doc/examples/vcdMaker.xml} 71050601 us System1 @@ -290,7 +290,7 @@ A sample test definition (containing all tags): system1_time1.txt - U{./common/doc/examples/vcdMaker.xml} + U{../common/doc/examples/vcdMaker.xml} 234256037 us System2 @@ -315,7 +315,7 @@ A sample test definition (containing all tags): ms - U{./common/doc/examples/vcdMaker.xml} + U{../common/doc/examples/vcdMaker.xml} 71050601 us System1 @@ -323,7 +323,7 @@ A sample test definition (containing all tags): system1_time1.txt - U{./common/doc/examples/vcdMaker.xml} + U{../common/doc/examples/vcdMaker.xml} 234256037 us System2 @@ -347,7 +347,7 @@ A sample test definition (containing all tags): - U{./common/doc/examples/vcdMaker.xml} + U{../common/doc/examples/vcdMaker.xml} 0 us System1 @@ -388,7 +388,7 @@ A sample test definition (containing all tags): system1_time1.txt - U{./common/doc/examples/vcdMaker.xml} + U{../common/doc/examples/vcdMaker.xml} 0 us System2 @@ -413,7 +413,7 @@ A sample test definition (containing all tags): ms - U{./common/doc/examples/vcdMaker.xml} + U{../common/doc/examples/vcdMaker.xml} 0 us System1 @@ -421,7 +421,7 @@ A sample test definition (containing all tags): system1_time1.txt - U{./common/doc/examples/vcdMaker.xml} + U{../common/doc/examples/vcdMaker.xml} 0 us System2 From 5f751a258ec1e769e47d15235a7f851c971cf312 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Wed, 30 Aug 2017 21:10:05 +0200 Subject: [PATCH 058/143] #25 File check --- sources/vcdMerge/inc/SignalSource.h | 18 ++++++++----- sources/vcdMerge/src/SignalSource.cpp | 38 +++++++++++---------------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/sources/vcdMerge/inc/SignalSource.h b/sources/vcdMerge/inc/SignalSource.h index 8fe11c4..409d4c9 100644 --- a/sources/vcdMerge/inc/SignalSource.h +++ b/sources/vcdMerge/inc/SignalSource.h @@ -119,7 +119,7 @@ namespace MERGE /// Returns the distance between the first logged signal and /// the synchronization point. /// - /// @throws VcdError if the first source timestamp is greater than the synchronization point. + /// @throws VcdException if the first source timestamp is greater than the synchronization point. uint64_t GetLeadingTime() const; private: @@ -158,17 +158,17 @@ namespace MERGE /// Sets the format of the source log file. /// - /// @throws VcdError for a invalid format. + /// @throws VcdException for a invalid format. void SetFormat(const std::string &rFormat); /// Sets the synchronization point of the source. /// - /// @throws VcdError if the format of the synchronization point is invalid. + /// @throws VcdException if the format of the synchronization point is invalid. void SetSyncPoint(const std::string &rSyncPoint); /// Sets the time unit of the source. /// - /// @throws VcdError for an invalid time unit. + /// @throws VcdException for an invalid time unit. void SetTimeUnit(const std::string &rTimeUnit); /// Sets the prefix added to the source signals. @@ -179,15 +179,21 @@ namespace MERGE /// Sets the source log filename. /// - /// @throws VcdError if the file does not exist. + /// @throws VcdException if the file does not exist. void SetFilename(const std::string &rFilename); /// Parses user provided parameters. /// - /// @throws VcdError for an invalid number of source parameters. + /// @throws VcdException for an invalid number of source parameters. void ParseParameters(); /// Divides the aggregated user parameter into fields. SourceParametersT GetSourceParameters() const; + + /// Checks if the file is accessible. + /// + /// @param rFilename The name of the file to be accessed. + /// @throws VcdException when the file is inaccessible. + void IsAccessible(const std::string &rFilename) const; }; } diff --git a/sources/vcdMerge/src/SignalSource.cpp b/sources/vcdMerge/src/SignalSource.cpp index 1acf9f8..be37a79 100644 --- a/sources/vcdMerge/src/SignalSource.cpp +++ b/sources/vcdMerge/src/SignalSource.cpp @@ -110,15 +110,8 @@ void MERGE::SignalSource::SetFormat(const std::string &rFormat) (rFormat[rFormat.length() - 1] == '}')) { const std::string filename(rFormat.substr(2, rFormat.length() - 3)); - std::ifstream infile(filename); - - if (!infile.good()) - { - throw EXCEPTION::VcdException(EXCEPTION::Error::CANNOT_OPEN_FILE, - "Opening file '" + - filename + - "' failed, it either doesn't exist or is inaccessible."); - } + IsAccessible(filename); + m_pSignalFactory = std::make_unique(filename); return; } @@ -174,19 +167,7 @@ void MERGE::SignalSource::SetCounterName(const std::string &rLineCounter) void MERGE::SignalSource::SetFilename(const std::string &rFilename) { - std::ifstream infile(rFilename); - - if (infile.good()) - { - m_Filename = rFilename; - } - else - { - throw EXCEPTION::VcdException(EXCEPTION::Error::CANNOT_OPEN_FILE, - "Opening file '" + - rFilename + - "' failed, it either doesn't exist or is inaccessible."); - } + IsAccessible(rFilename); } void MERGE::SignalSource::ParseParameters() @@ -213,3 +194,16 @@ MERGE::SignalSource::SourceParametersT MERGE::SignalSource::GetSourceParameters( { return UTILS::Split(m_SourceDescription, SOURCE_PARAM_DELIM); } + +void MERGE::SignalSource::IsAccessible(const std::string& rFilename) const +{ + std::ifstream infile(rFilename); + + if (!infile.good()) + { + throw EXCEPTION::VcdException(EXCEPTION::Error::CANNOT_OPEN_FILE, + "Opening file '" + + rFilename + + "' failed, it either doesn't exist or is inaccessible."); + } +} From f29f905bb0b0df5c56810c1648b3f09c1078417f Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Wed, 30 Aug 2017 21:10:49 +0200 Subject: [PATCH 059/143] #25 Doc update --- sources/common/doc/manual.odt | Bin 554620 -> 557140 bytes sources/common/doc/manual.pdf | Bin 803709 -> 835745 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/sources/common/doc/manual.odt b/sources/common/doc/manual.odt index 15bf459b0d54d3ed06211d29a5e2a18606a15c91..a777b63324a213835a94ea119ebfa8dee051277d 100644 GIT binary patch delta 24727 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 YbsUB;6rjVt;expx3f#t9alJzR4=7u(fB*mh diff --git a/sources/common/doc/manual.pdf b/sources/common/doc/manual.pdf index 464a389bab5ab9c674e3aaa4ae9736897ea0c418..1d96c078f701b3c34251b2f1f12dd8d9557bf896 100644 GIT binary patch delta 232998 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%0Dy{q1>%p?pu-0+)`UdHlX261-LzAa!M>Rm zBt*l5yvt$?pbeglEn4MSW((kf`DYoP1h&XoY(^%5IbhKdJR%^W-#MYDncp%2Ao^%< zmOd0Bl{FEQL3hFGIsisyi)QfTAKmtw$&UhHGZu5qG6R-btg{8uAut;&F@eI`Y63jA zpaKP$%<2&+jGZ5iN@Z=bD4>C7^>+Yciva-phgt?I539!D$qK6l0WB4M2+vYxz!z>< z+zIR>!06YRW|)jWxnyjg5&$U}J=cGt|c$80Zs>C`J^rAsJ6xWkl8G{r@QFzO_++o1v$>n@>on zA4U_c24omd)F;CR`ueb;5z)xNn7j%^IvHnZL?IcX-wz1c?h?G6zVkx?k0r?@UL~bf I>x_B-2jJD^Bme*a delta 202484 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πMDrL{kp(=i|EkWS&5t+d8oxpmyd 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�c!JmWm%I_!R?{OQz?Fr<85J?uQ5 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%0D1Q{a@9)Glv1@06*rT?d$+pKV2wKMn`i6? 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 From e8cc02abeff50d17567bdec417eecdae833ce4d6 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Wed, 30 Aug 2017 21:11:24 +0200 Subject: [PATCH 060/143] #25 Installer update --- windows/Bootstrapper/Bootstrapper.sln | 20 ++++++++++++++++++++ windows/Installer/Installer.sln | 20 ++++++++++++++++++++ windows/Installer/Product.wxs | 2 ++ 3 files changed, 42 insertions(+) diff --git a/windows/Bootstrapper/Bootstrapper.sln b/windows/Bootstrapper/Bootstrapper.sln index 6facd08..41364c9 100644 --- a/windows/Bootstrapper/Bootstrapper.sln +++ b/windows/Bootstrapper/Bootstrapper.sln @@ -11,11 +11,13 @@ Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Installer", "..\Installer\I EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdMerge", "..\vcdMaker\vcdMerge\vcdMerge.vcxproj", "{F2A67A23-8D8D-44FE-9F00-7C59DAD8A954}" ProjectSection(ProjectDependencies) = postProject + {07CF01C0-B887-499D-AD9C-799CB6A9FE64} = {07CF01C0-B887-499D-AD9C-799CB6A9FE64} {DBC389FC-FB63-430B-9443-F4DE90F1AB0E} = {DBC389FC-FB63-430B-9443-F4DE90F1AB0E} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdMaker", "..\vcdMaker\vcdMaker\vcdMaker.vcxproj", "{39CE447A-C072-4E08-9042-2208DF3A25D6}" ProjectSection(ProjectDependencies) = postProject + {07CF01C0-B887-499D-AD9C-799CB6A9FE64} = {07CF01C0-B887-499D-AD9C-799CB6A9FE64} {DBC389FC-FB63-430B-9443-F4DE90F1AB0E} = {DBC389FC-FB63-430B-9443-F4DE90F1AB0E} EndProjectSection EndProject @@ -23,6 +25,8 @@ Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Bootstrapper", "Bootstrappe EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdMakerCore", "..\vcdMaker\vcdMakerCore\vcdMakerCore.vcxproj", "{DBC389FC-FB63-430B-9443-F4DE90F1AB0E}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pugixml_vs2015", "..\..\sources\3rdParty\pugixml\scripts\pugixml_vs2015.vcxproj", "{07CF01C0-B887-499D-AD9C-799CB6A9FE64}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Mixed Platforms = Debug|Mixed Platforms @@ -107,6 +111,22 @@ Global {DBC389FC-FB63-430B-9443-F4DE90F1AB0E}.Release|x64.Build.0 = Release|x64 {DBC389FC-FB63-430B-9443-F4DE90F1AB0E}.Release|x86.ActiveCfg = Release|Win32 {DBC389FC-FB63-430B-9443-F4DE90F1AB0E}.Release|x86.Build.0 = Release|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Debug|Win32.ActiveCfg = Debug|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Debug|Win32.Build.0 = Debug|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Debug|x64.ActiveCfg = Debug|x64 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Debug|x64.Build.0 = Debug|x64 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Debug|x86.ActiveCfg = Debug|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Debug|x86.Build.0 = Debug|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|Mixed Platforms.Build.0 = Release|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|Win32.ActiveCfg = Release|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|Win32.Build.0 = Release|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|x64.ActiveCfg = Release|x64 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|x64.Build.0 = Release|x64 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|x86.ActiveCfg = Release|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/windows/Installer/Installer.sln b/windows/Installer/Installer.sln index d1a2bb1..18715a5 100644 --- a/windows/Installer/Installer.sln +++ b/windows/Installer/Installer.sln @@ -11,16 +11,20 @@ Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Installer", "Installer.wixp EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdMerge", "..\vcdMaker\vcdMerge\vcdMerge.vcxproj", "{F2A67A23-8D8D-44FE-9F00-7C59DAD8A954}" ProjectSection(ProjectDependencies) = postProject + {07CF01C0-B887-499D-AD9C-799CB6A9FE64} = {07CF01C0-B887-499D-AD9C-799CB6A9FE64} {DBC389FC-FB63-430B-9443-F4DE90F1AB0E} = {DBC389FC-FB63-430B-9443-F4DE90F1AB0E} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdMaker", "..\vcdMaker\vcdMaker\vcdMaker.vcxproj", "{39CE447A-C072-4E08-9042-2208DF3A25D6}" ProjectSection(ProjectDependencies) = postProject + {07CF01C0-B887-499D-AD9C-799CB6A9FE64} = {07CF01C0-B887-499D-AD9C-799CB6A9FE64} {DBC389FC-FB63-430B-9443-F4DE90F1AB0E} = {DBC389FC-FB63-430B-9443-F4DE90F1AB0E} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdMakerCore", "..\vcdMaker\vcdMakerCore\vcdMakerCore.vcxproj", "{DBC389FC-FB63-430B-9443-F4DE90F1AB0E}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pugixml_vs2015", "..\..\sources\3rdParty\pugixml\scripts\pugixml_vs2015.vcxproj", "{07CF01C0-B887-499D-AD9C-799CB6A9FE64}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Mixed Platforms = Debug|Mixed Platforms @@ -91,6 +95,22 @@ Global {DBC389FC-FB63-430B-9443-F4DE90F1AB0E}.Release|x64.Build.0 = Release|x64 {DBC389FC-FB63-430B-9443-F4DE90F1AB0E}.Release|x86.ActiveCfg = Release|Win32 {DBC389FC-FB63-430B-9443-F4DE90F1AB0E}.Release|x86.Build.0 = Release|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Debug|Win32.ActiveCfg = Debug|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Debug|Win32.Build.0 = Debug|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Debug|x64.ActiveCfg = Debug|x64 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Debug|x64.Build.0 = Debug|x64 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Debug|x86.ActiveCfg = Debug|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Debug|x86.Build.0 = Debug|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|Mixed Platforms.Build.0 = Release|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|Win32.ActiveCfg = Release|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|Win32.Build.0 = Release|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|x64.ActiveCfg = Release|x64 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|x64.Build.0 = Release|x64 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|x86.ActiveCfg = Release|Win32 + {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/windows/Installer/Product.wxs b/windows/Installer/Product.wxs index c669194..1068a00 100644 --- a/windows/Installer/Product.wxs +++ b/windows/Installer/Product.wxs @@ -54,6 +54,8 @@ + + From 675713bcc1cce9db651e7b1711e125a09f72b9e3 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Wed, 30 Aug 2017 22:37:14 +0200 Subject: [PATCH 061/143] #25 Merge fix --- sources/vcdMerge/src/SignalSource.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/sources/vcdMerge/src/SignalSource.cpp b/sources/vcdMerge/src/SignalSource.cpp index be37a79..58ab695 100644 --- a/sources/vcdMerge/src/SignalSource.cpp +++ b/sources/vcdMerge/src/SignalSource.cpp @@ -105,15 +105,18 @@ void MERGE::SignalSource::SetFormat(const std::string &rFormat) return; } - if ((rFormat[0] == 'U') && - (rFormat[1] == '{') && - (rFormat[rFormat.length() - 1] == '}')) + if (rFormat.length() > 3) { - const std::string filename(rFormat.substr(2, rFormat.length() - 3)); - IsAccessible(filename); - - m_pSignalFactory = std::make_unique(filename); - return; + if ((rFormat[0] == 'U') && + (rFormat[1] == '{') && + (rFormat[rFormat.length() - 1] == '}')) + { + const std::string filename(rFormat.substr(2, rFormat.length() - 3)); + IsAccessible(filename); + + m_pSignalFactory = std::make_unique(filename); + return; + } } throw EXCEPTION::VcdException(EXCEPTION::Error::INVALID_LOG_FILE_FORMAT, @@ -168,6 +171,7 @@ void MERGE::SignalSource::SetCounterName(const std::string &rLineCounter) void MERGE::SignalSource::SetFilename(const std::string &rFilename) { IsAccessible(rFilename); + m_Filename = rFilename; } void MERGE::SignalSource::ParseParameters() @@ -195,7 +199,7 @@ MERGE::SignalSource::SourceParametersT MERGE::SignalSource::GetSourceParameters( return UTILS::Split(m_SourceDescription, SOURCE_PARAM_DELIM); } -void MERGE::SignalSource::IsAccessible(const std::string& rFilename) const +void MERGE::SignalSource::IsAccessible(const std::string &rFilename) const { std::ifstream infile(rFilename); From cf534f768a3c51dd988d140d53a6c08a192be93a Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Sun, 17 Sep 2017 09:48:08 +0200 Subject: [PATCH 062/143] #025 cmake roll-back --- sources/cmake/commonSources.cmake | 9 --------- sources/cmake/commonTarget.cmake | 10 +++------- 2 files changed, 3 insertions(+), 16 deletions(-) diff --git a/sources/cmake/commonSources.cmake b/sources/cmake/commonSources.cmake index c45cd46..d556c5d 100644 --- a/sources/cmake/commonSources.cmake +++ b/sources/cmake/commonSources.cmake @@ -86,15 +86,6 @@ set(COMMON_HEADERS # 3rd party directories. set(TCLAP_HEADERS_DIR 3rdParty/tclap/include) -set(PUGIXML_HEADERS_DIR 3rdParty/pugixml/src) - -# Set PugiXml source files. -set(PUGIXML_SOURCES - ${PUGIXML_HEADERS_DIR}/pugixml.cpp) - -set(PUGIXML_HEADERS - ${PUGIXML_HEADERS_DIR}/pugixml.hpp - ${PUGIXML_HEADERS_DIR}/pugiconfig.hpp) # Other directories. get_filename_component(DEVEL_SUPPORT_DIR ${PROJECT_SOURCE_DIR}/../development ABSOLUTE) diff --git a/sources/cmake/commonTarget.cmake b/sources/cmake/commonTarget.cmake index 132358c..b93ef93 100644 --- a/sources/cmake/commonTarget.cmake +++ b/sources/cmake/commonTarget.cmake @@ -28,7 +28,6 @@ set(OUTPUT_DIR_ABSOLUE ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_DIR}) # Common sources target name. set(COMMON_LIB_TARGET vcdToolsCommon) -set(PUGIXML_LIB_TARGET pugiXml) # Function for setting general target properties. function(add_common_vcdtools_target_props TARGET_NAME) @@ -47,9 +46,9 @@ endfunction(add_common_vcdtools_target_props) # Function for target creation. function(add_vcdtools_target TARGET_NAME TARGET_SOURCES TARGET_HEADERS TARGET_HEADERS_DIR) - add_executable(${TARGET_NAME} $ $ ${TARGET_SOURCES} ${COMMON_HEADERS} ${PUGIXML_HEADERS} ${TARGET_HEADERS}) + add_executable(${TARGET_NAME} $ ${TARGET_SOURCES} ${COMMON_HEADERS} ${TARGET_HEADERS}) - target_include_directories(${TARGET_NAME} PUBLIC ${COMMON_HEADERS_DIR} ${TARGET_HEADERS_DIR} ${TCLAP_HEADERS_DIR} ${PUGIXML_HEADERS_DIR}) + target_include_directories(${TARGET_NAME} PUBLIC ${COMMON_HEADERS_DIR} ${TARGET_HEADERS_DIR} ${TCLAP_HEADERS_DIR}) add_common_vcdtools_target_props(${TARGET_NAME}) @@ -59,10 +58,7 @@ endfunction(add_vcdtools_target) # Set common sources build add_library(${COMMON_LIB_TARGET} OBJECT ${COMMON_SOURCES} ${COMMON_HEADERS}) -add_library(${PUGIXML_LIB_TARGET} OBJECT ${PUGIXML_SOURCES} ${PUGIXML_HEADERS}) -target_include_directories(${COMMON_LIB_TARGET} PUBLIC ${COMMON_HEADERS_DIR} ${TCLAP_HEADERS_DIR} ${PUGIXML_HEADERS_DIR}) -target_include_directories(${PUGIXML_LIB_TARGET} PUBLIC ${PUGIXML_HEADERS_DIR}) +target_include_directories(${COMMON_LIB_TARGET} PUBLIC ${COMMON_HEADERS_DIR} ${TCLAP_HEADERS_DIR}) add_common_vcdtools_target_props(${COMMON_LIB_TARGET}) -add_common_vcdtools_target_props(${PUGIXML_LIB_TARGET}) From 1e98bb360c3a9e6c19d3b74cb33026e393ac6bcc Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Sun, 17 Sep 2017 10:11:29 +0200 Subject: [PATCH 063/143] #025 make pugixml a system library --- sources/common/inc/XmlSignalFactory.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/common/inc/XmlSignalFactory.h b/sources/common/inc/XmlSignalFactory.h index 0cd7c91..8d0e051 100644 --- a/sources/common/inc/XmlSignalFactory.h +++ b/sources/common/inc/XmlSignalFactory.h @@ -31,9 +31,9 @@ #pragma once #include +#include #include "SignalFactory.h" -#include "pugixml.hpp" namespace PARSER { From 07cf5720471c4e37edc2340194f625efd880cb11 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Sun, 17 Sep 2017 22:38:09 +0200 Subject: [PATCH 064/143] #25 Man date update --- sources/common/doc/man/vcdMaker.txt | 2 +- sources/common/doc/man/vcdMerge.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/common/doc/man/vcdMaker.txt b/sources/common/doc/man/vcdMaker.txt index 96d231e..77e499e 100644 --- a/sources/common/doc/man/vcdMaker.txt +++ b/sources/common/doc/man/vcdMaker.txt @@ -42,7 +42,7 @@ AUTHORS https://github.com/WojciechRynczuk/vcdMaker COPYRIGHTS - Copyright (c) 2016 vcdMaker team + Copyright (c) 2017 vcdMaker team vcdMaker is licensed under MIT license. SEE ALSO diff --git a/sources/common/doc/man/vcdMerge.txt b/sources/common/doc/man/vcdMerge.txt index 03a6d89..496ace6 100644 --- a/sources/common/doc/man/vcdMerge.txt +++ b/sources/common/doc/man/vcdMerge.txt @@ -46,7 +46,7 @@ AUTHORS https://github.com/WojciechRynczuk/vcdMaker COPYRIGHTS - Copyright (c) 2016 vcdMaker team + Copyright (c) 2017 vcdMaker team vcdMaker is licensed under MIT license. SEE ALSO From 97010eabe06f88e9fff90f2f51b96fac15fb225f Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Wed, 20 Sep 2017 20:58:13 +0200 Subject: [PATCH 065/143] #25 Peer review fixes --- sources/cmake/commonSources.cmake | 2 + sources/common/doc/examples/vcdMaker.xml | 14 ---- sources/common/doc/manual.odt | Bin 557140 -> 557460 bytes sources/common/doc/manual.pdf | Bin 835745 -> 851451 bytes sources/common/inc/DefaultSignalFactory.h | 47 +++++++++++ sources/common/inc/SignalFactory.h | 4 +- sources/common/inc/VcdExceptionList.h | 6 ++ sources/common/inc/XmlEventSignalCreator.h | 14 ++-- sources/common/inc/XmlFSignalCreator.h | 16 ++-- sources/common/inc/XmlISignalCreator.h | 8 +- sources/common/inc/XmlSignalCreator.h | 8 +- sources/common/inc/XmlSignalFactory.h | 57 +++++++------ sources/common/src/DefaultSignalFactory.cpp | 42 ++++++++++ sources/common/src/SignalFactory.cpp | 16 ++-- sources/common/src/XmlEventSignalCreator.cpp | 4 +- sources/common/src/XmlFSignalCreator.cpp | 2 +- sources/common/src/XmlISignalCreator.cpp | 2 +- sources/common/src/XmlSignalCreator.cpp | 10 +-- sources/common/src/XmlSignalFactory.cpp | 78 +++++++++--------- sources/common/test/functional/vcdMaker.xml | 26 ++++++ sources/vcdMaker/src/vcdMaker.cpp | 3 +- sources/vcdMaker/test/functional/test.xml | 6 +- sources/vcdMerge/inc/SignalSource.h | 27 ++++-- sources/vcdMerge/src/SignalSource.cpp | 71 +++++++++++----- sources/vcdMerge/test/functional/test.xml | 16 ++-- .../vcdMakerCore/vcdMakerCore.vcxproj | 2 + .../vcdMakerCore/vcdMakerCore.vcxproj.filters | 6 ++ 27 files changed, 328 insertions(+), 159 deletions(-) create mode 100644 sources/common/inc/DefaultSignalFactory.h create mode 100644 sources/common/src/DefaultSignalFactory.cpp create mode 100644 sources/common/test/functional/vcdMaker.xml diff --git a/sources/cmake/commonSources.cmake b/sources/cmake/commonSources.cmake index d556c5d..17e1eb6 100644 --- a/sources/cmake/commonSources.cmake +++ b/sources/cmake/commonSources.cmake @@ -37,6 +37,7 @@ set(COMMON_SOURCES ${COMMON_SOURCES_DIR}/XmlISignalCreator.cpp ${COMMON_SOURCES_DIR}/XmlSignalCreator.cpp ${COMMON_SOURCES_DIR}/XmlSignalFactory.cpp + ${COMMON_SOURCES_DIR}/DefaultSignalFactory.cpp ${COMMON_SOURCES_DIR}/SignalStructureBuilder.cpp ${COMMON_SOURCES_DIR}/Signal.cpp ${COMMON_SOURCES_DIR}/SignalDb.cpp @@ -71,6 +72,7 @@ set(COMMON_HEADERS ${COMMON_HEADERS_DIR}/XmlISignalCreator.h ${COMMON_HEADERS_DIR}/XmlSignalCreator.h ${COMMON_HEADERS_DIR}/XmlSignalFactory.h + ${COMMON_HEADERS_DIR}/DefaultSignalFactory.h ${COMMON_HEADERS_DIR}/SignalStructureBuilder.h ${COMMON_HEADERS_DIR}/Signal.h ${COMMON_HEADERS_DIR}/SourceRegistry.h diff --git a/sources/common/doc/examples/vcdMaker.xml b/sources/common/doc/examples/vcdMaker.xml index ffd8031..6e17964 100644 --- a/sources/common/doc/examples/vcdMaker.xml +++ b/sources/common/doc/examples/vcdMaker.xml @@ -23,18 +23,4 @@ 2 - - test1 - 1 - 2 - - - - test2 - 1 - 2 - 3 - 4 - - diff --git a/sources/common/doc/manual.odt b/sources/common/doc/manual.odt index a777b63324a213835a94ea119ebfa8dee051277d..2bb0fa4a6cb8511a76ab44bbf0bc09034ddca712 100644 GIT binary patch delta 24832 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 VLcpZ(E50!M5HJJs2mjxU{{z8bTwwqJ diff --git a/sources/common/doc/manual.pdf b/sources/common/doc/manual.pdf index 1d96c078f701b3c34251b2f1f12dd8d9557bf896..2b577d87852451bbeead4ddbf6469abfa1355233 100644 GIT binary patch delta 92644 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È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 delta 77072 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 YF~Hq#(`j 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�$ZBJW#_}|Anej^Kkt~fudXNfB~0cIYw`tM z99eGF=!DigxwuiUSwrSA3ywzy-`(V(e`s|1V0vOu=3bE{8e&Vvm3IzfJ4*XHBDcGj zQWW$m`-`&N9QW2Y&ReEwH0D|#QJ#CbE&TF!(`w4!E-uto^~Gsto^90BI;{5XTY}gn zg^Q6N(eVY8WQ^c!~mvF7_5pZqbQD(!5j*x7u+8SUZB;N;ha<0-A9ifzNUlx{2hEIiuW z-PMXWAC*FcV~B>yB=ddcsID4Ch@CUYtU3kR_40BKv7!o;+&$` zxiL47s_f2(^p`~WQcqLcO_T9-RKUnyplxSI`zgMc?YD*7d3F6pwXO*s#rSi|Ej{@& z>&gY@t{7N8rlb?rmnc-=s&=}j`s9XzkD^K@x`SHnK1%xDNyKNZo}btEwX7@&NnaP*_c^%rdG~UL+`rdlo%-5Z zwXe4am6o@zEW&T%0uKMHu1{HsMUv73_H9xaep))(x`2wx3ca%*Bjt!@NX7dx<*IJU zO8@(A;E<=qULoCkZ}eWw$t-%de%~Gb8c|)p?$-XIm`@Tp=hsGm8$Ii|(3UEjm~~+6 z`VNz&^ZNvIthcGHp1)h9k#zO=(a3pnMQX$RvCUT`Um9fEr*66R@^41U?)vra*wxqd z=k&?3MsmTYS8A+ty(f99t9zk>Lc|`yhjBs5ugfwjWkP?cq+a)K$R6L=)v&znz4w@C zS3{8ZFHtXXr_o1i(QaoSXgl3am2N)Y8_#OdsozMgeCu6^AIo~{J(2I9ojK9&RG+)P zd!pRLPwY!(|F55==%NFA_xdnwp2c9s=M)Z|XtWwiucmw1C0+UQ{fB1r8ZVCtuW|pe z%wyS~5*nK|{gV%VcyslIb#mbQV^>YYg+ErPpU$GVDcY}l|LuZszv?dC?a6cRB`VC1 z+#8}~axal0d#x$CZf~{8;{}Q`Q0RG+mPeZm6H^YL|Z7eDkgU2$Q83Xl=B{ zwnhs_?yZ)ME;g~0OkVd&PlVPrPvylrcgVx^o<_#kiRCm|+u<_R-A^7JLu&q45*zli4;?{9bNJ~%9G)( zZ%?ee#8ofkDL|{E7n%NV^}m#TeV5!n*rew+R2nx*6@HEPV4pa55>tn7ph4<5Y^*#RrlQvKa6E~%*AV`jM2)*Ckq#- zj-}gVd8qG~W?n0DC@j+d(C~PjbWBsTW>@o1uV1kvu?j=waSJ|fTv#dE(K4KK&+kgt zuMH-?bq|v5HU!4n?|F}mCY(3mJ$`&hInEMuI&E2IdDF7nGA2F4{*lKr=KeZ|eed(T?=q?j3cVs{zaEI!;AjikCXSXkkTr2P->&Wmzi3wh( zt-Dw5UU{c2DRQ&4)eH066+#C!T$Tn3pHym4-OjIaXcxbLui@PXOkL{EDxsAW!AFfr ziOGS2&)!=II-1W}$-kawVX%IfcC(Q-9XcX+L|>3PXEa)h59hHV{e>UeCL%0ALntgd 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 auY=nU9OOI)LczaaAWV|HyuO(M>Hh%pw~E*R diff --git a/sources/common/inc/DefaultSignalFactory.h b/sources/common/inc/DefaultSignalFactory.h new file mode 100644 index 0000000..7614c73 --- /dev/null +++ b/sources/common/inc/DefaultSignalFactory.h @@ -0,0 +1,47 @@ +/// @file common/inc/DefaultSignalFactory.h +/// +/// The default signal factory class. +/// +/// @par Full Description +/// The standard vcdMaker signal factory. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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. + +#pragma once + +#include "SignalFactory.h" + +namespace PARSER +{ + /// The class implements the factory method design pattern to build + /// different types of signals. + + /// The standard signal factory class. + class DefaultSignalFactory : public SignalFactory + { + public: + + /// @copydoc SignalFactory::SignalFactory() + DefaultSignalFactory(); + }; +} diff --git a/sources/common/inc/SignalFactory.h b/sources/common/inc/SignalFactory.h index 8ff28da..476ce6d 100644 --- a/sources/common/inc/SignalFactory.h +++ b/sources/common/inc/SignalFactory.h @@ -44,9 +44,7 @@ namespace PARSER public: /// The signal factory default constructor. - /// - /// @param default_creators Defines if the default vcdMaker signal creatos shall be used. - SignalFactory(bool default_creators = true); + SignalFactory(); /// Creates the appropriate signal object. /// diff --git a/sources/common/inc/VcdExceptionList.h b/sources/common/inc/VcdExceptionList.h index 1b68b28..3d03b4a 100644 --- a/sources/common/inc/VcdExceptionList.h +++ b/sources/common/inc/VcdExceptionList.h @@ -99,6 +99,12 @@ namespace EXCEPTION /// Unexpected tag. const uint32_t UNEXPECTED_TAG = 15U; + /// XML file read error. + const uint32_t XML_READ_ERROR = 16U; + + /// No signals creators. + const uint32_t NO_SIGNALS_CREATORS = 17U; + // Logic errors below shall never happen. // They are enumerated from 9000. diff --git a/sources/common/inc/XmlEventSignalCreator.h b/sources/common/inc/XmlEventSignalCreator.h index 6762869..cf0b53e 100644 --- a/sources/common/inc/XmlEventSignalCreator.h +++ b/sources/common/inc/XmlEventSignalCreator.h @@ -36,13 +36,15 @@ namespace PARSER { public: - /// @copydoc XmlSignalCreator::XmlSignalCreator() + /// The XML event signal creator constructor. + /// + /// @param rRegEx The regular expression matching the log line. + /// @param rTimestamp The expression to create the timestamp of the signal. + /// @param rName The expression to create the name of the signal. XmlEventSignalCreator(const std::string &rRegEx, - const std::string &rTimestamp, - const std::string &rName, - const std::string &rValue, - const std::string &rSize) : - XmlSignalCreator(rRegEx, rTimestamp, rName, rValue, rSize) + const std::string &rTimestamp, + const std::string &rName) : + XmlSignalCreator(rRegEx, rTimestamp, rName, "", "") { } diff --git a/sources/common/inc/XmlFSignalCreator.h b/sources/common/inc/XmlFSignalCreator.h index f80f628..4e6d09b 100644 --- a/sources/common/inc/XmlFSignalCreator.h +++ b/sources/common/inc/XmlFSignalCreator.h @@ -38,13 +38,17 @@ namespace PARSER { public: - /// @copydoc XmlSignalCreator::XmlSignalCreator() + /// The XML real signal creator constructor. + /// + /// @param rRegEx The regular expression matching the log line. + /// @param rTimestamp The expression to create the timestamp of the signal. + /// @param rName The expression to create the name of the signal. + /// @param rValue The expression to create the value of the signal. XmlFSignalCreator(const std::string &rRegEx, - const std::string &rTimestamp, - const std::string &rName, - const std::string &rValue, - const std::string &rSize) : - XmlSignalCreator(rRegEx, rTimestamp, rName, rValue, rSize) + const std::string &rTimestamp, + const std::string &rName, + const std::string &rValue) : + XmlSignalCreator(rRegEx, rTimestamp, rName, rValue, "") { } diff --git a/sources/common/inc/XmlISignalCreator.h b/sources/common/inc/XmlISignalCreator.h index 9e4cc8c..8d0ebc74 100644 --- a/sources/common/inc/XmlISignalCreator.h +++ b/sources/common/inc/XmlISignalCreator.h @@ -38,10 +38,10 @@ namespace PARSER public: /// @copydoc XmlSignalCreator::XmlSignalCreator() XmlISignalCreator(const std::string &rRegEx, - const std::string &rTimestamp, - const std::string &rName, - const std::string &rValue, - const std::string &rSize) : + const std::string &rTimestamp, + const std::string &rName, + const std::string &rValue, + const std::string &rSize) : XmlSignalCreator(rRegEx, rTimestamp, rName, rValue, rSize) { } diff --git a/sources/common/inc/XmlSignalCreator.h b/sources/common/inc/XmlSignalCreator.h index 578834c..96c49ff 100644 --- a/sources/common/inc/XmlSignalCreator.h +++ b/sources/common/inc/XmlSignalCreator.h @@ -44,10 +44,10 @@ namespace PARSER /// @param rValue The expression to create the value of the signal. /// @param rSize The expression to create the size of the signal. XmlSignalCreator(const std::string &rRegEx, - const std::string &rTimestamp, - const std::string &rName, - const std::string &rValue, - const std::string &rSize) : + const std::string &rTimestamp, + const std::string &rName, + const std::string &rValue, + const std::string &rSize) : SignalCreator(rRegEx), m_Timestamp(rTimestamp), m_Name(rName), diff --git a/sources/common/inc/XmlSignalFactory.h b/sources/common/inc/XmlSignalFactory.h index 8d0e051..fb4d407 100644 --- a/sources/common/inc/XmlSignalFactory.h +++ b/sources/common/inc/XmlSignalFactory.h @@ -43,45 +43,44 @@ namespace PARSER class XmlDescription { public: - /// The XML signal class constructor. - /// - /// Creates the XML signal. - /// - /// @param rNode The main XML node. - XmlDescription(const pugi::xml_node &rNode); + /// The XML signal class constructor. + /// + /// Creates the XML signal. + /// + /// @param rNode The main XML node. + XmlDescription(const pugi::xml_node &rNode); - /// Returns the regular expression used to create the signal. - const std::string & GetRegex() const; + /// Returns the regular expression used to create the signal. + const std::string &GetRegex() const; - /// Returns the timestamp tag value. - const std::string & GetTimestamp() const; + /// Returns the timestamp tag value. + const std::string &GetTimestamp() const; - /// Returns the name tag value. - const std::string & GetName() const; + /// Returns the name tag value. + const std::string &GetName() const; - /// Returns the value tag value. - const std::string & GetValue() const; + /// Returns the value tag value. + const std::string &GetValue() const; - /// Returns the size tag value. - const std::string & GetSize() const; + /// Returns the size tag value. + const std::string &GetSize() const; private: + /// Stores the regular expression needed to create the signal. + /// The XML line tag value. + std::string m_RegexLine; - /// Stores the regular expression needed to create the signal. - /// The XML line tag value. - std::string m_RegexLine; - - /// Stores the XML timestamp tag value. - std::string m_Timestamp; + /// Stores the XML timestamp tag value. + std::string m_Timestamp; - /// Stores the XML name tag value. - std::string m_Name; + /// Stores the XML name tag value. + std::string m_Name; - /// Stores the XML value tag value. - std::string m_Value; + /// Stores the XML value tag value. + std::string m_Value; - /// Stores the XML size tag value. - std::string m_Size; + /// Stores the XML size tag value. + std::string m_Size; }; /// The class implements the factory method design pattern to build @@ -95,6 +94,6 @@ namespace PARSER /// The XML signal factory default constructor. /// /// @param rXmlFileName The name of the XML file specifying the user log syntax. - XmlSignalFactory(const std::string& rXmlFileName); + XmlSignalFactory(const std::string &rXmlFileName); }; } diff --git a/sources/common/src/DefaultSignalFactory.cpp b/sources/common/src/DefaultSignalFactory.cpp new file mode 100644 index 0000000..93ad63c --- /dev/null +++ b/sources/common/src/DefaultSignalFactory.cpp @@ -0,0 +1,42 @@ +/// @file common/src/DefaultSignalFactory.cpp +/// +/// The default signal factory class. +/// +/// @par Full Description +/// The standard vcdMaker signal factory. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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 "DefaultSignalFactory.h" +#include "EventSignalCreator.h" +#include "FSignalCreator.h" +#include "ISignalCreator.h" + +PARSER::DefaultSignalFactory::DefaultSignalFactory() : + SignalFactory() +{ + m_vpSignalCreators.push_back(std::make_unique()); + m_vpSignalCreators.push_back(std::make_unique()); + m_vpSignalCreators.push_back(std::make_unique()); +} + diff --git a/sources/common/src/SignalFactory.cpp b/sources/common/src/SignalFactory.cpp index d31975c..78fff21 100644 --- a/sources/common/src/SignalFactory.cpp +++ b/sources/common/src/SignalFactory.cpp @@ -31,22 +31,22 @@ #include "EventSignalCreator.h" #include "ISignalCreator.h" #include "FSignalCreator.h" +#include "VcdException.h" +#include "VcdExceptionList.h" -PARSER::SignalFactory::SignalFactory(bool default_creators) : +PARSER::SignalFactory::SignalFactory() : m_vpSignalCreators() { - // Register creators - if (default_creators) - { - m_vpSignalCreators.push_back(std::make_unique()); - m_vpSignalCreators.push_back(std::make_unique()); - m_vpSignalCreators.push_back(std::make_unique()); - } } SIGNAL::Signal *PARSER::SignalFactory::Create(std::string &logLine, SIGNAL::SourceRegistry::HandleT sourceHandle) const { + if (m_vpSignalCreators.empty()) + { + throw EXCEPTION::VcdException(EXCEPTION::Error::NO_SIGNALS_CREATORS, + "No signals creators. Hint: Verify the correctness of the XML file specifying the user log format."); + } for (const auto &creator : m_vpSignalCreators) { // Try to use creator. diff --git a/sources/common/src/XmlEventSignalCreator.cpp b/sources/common/src/XmlEventSignalCreator.cpp index fb089dc..abefac4 100644 --- a/sources/common/src/XmlEventSignalCreator.cpp +++ b/sources/common/src/XmlEventSignalCreator.cpp @@ -28,11 +28,11 @@ #include "EventSignal.h" SIGNAL::Signal *PARSER::XmlEventSignalCreator::Create(const std::string &rLogLine, - SIGNAL::SourceRegistry::HandleT sourceHandle) const + SIGNAL::SourceRegistry::HandleT sourceHandle) const { std::smatch result; - if (true == std::regex_search(rLogLine, result, m_SignalRegEx)) + if (std::regex_search(rLogLine, result, m_SignalRegEx)) { return new SIGNAL::EventSignal(GetName(result), GetTimestamp(result), diff --git a/sources/common/src/XmlFSignalCreator.cpp b/sources/common/src/XmlFSignalCreator.cpp index 9846aba..1b9d1ed 100644 --- a/sources/common/src/XmlFSignalCreator.cpp +++ b/sources/common/src/XmlFSignalCreator.cpp @@ -28,7 +28,7 @@ #include "FSignal.h" SIGNAL::Signal *PARSER::XmlFSignalCreator::Create(const std::string &rLogLine, - SIGNAL::SourceRegistry::HandleT sourceHandle) const + SIGNAL::SourceRegistry::HandleT sourceHandle) const { std::smatch result; diff --git a/sources/common/src/XmlISignalCreator.cpp b/sources/common/src/XmlISignalCreator.cpp index 98331a3..c7ab21e 100644 --- a/sources/common/src/XmlISignalCreator.cpp +++ b/sources/common/src/XmlISignalCreator.cpp @@ -28,7 +28,7 @@ #include "ISignal.h" SIGNAL::Signal *PARSER::XmlISignalCreator::Create(const std::string &rLogLine, - SIGNAL::SourceRegistry::HandleT sourceHandle) const + SIGNAL::SourceRegistry::HandleT sourceHandle) const { std::smatch result; diff --git a/sources/common/src/XmlSignalCreator.cpp b/sources/common/src/XmlSignalCreator.cpp index a0ea11c..92b8717 100644 --- a/sources/common/src/XmlSignalCreator.cpp +++ b/sources/common/src/XmlSignalCreator.cpp @@ -28,20 +28,20 @@ uint64_t PARSER::XmlSignalCreator::GetTimestamp(const std::smatch &rMatch) const { - return std::stoll(rMatch[std::stoi(m_Timestamp.c_str())].str()); + return std::stoull(rMatch[std::stoi(m_Timestamp)].str()); } std::string PARSER::XmlSignalCreator::GetName(const std::smatch &rMatch) const { - return rMatch[std::stoi(m_Name.c_str())].str(); + return rMatch[std::stoi(m_Name)].str(); } std::string PARSER::XmlSignalCreator::GetValue(const std::smatch &rMatch) const { - return rMatch[std::stoi(m_Value.c_str())].str(); + return rMatch[std::stoi(m_Value)].str(); } size_t PARSER::XmlSignalCreator::GetSize(const std::smatch &rMatch) const { - return std::stoi(rMatch[std::stoi(m_Size.c_str())].str()); -} \ No newline at end of file + return std::stoi(rMatch[std::stoi(m_Size)].str()); +} diff --git a/sources/common/src/XmlSignalFactory.cpp b/sources/common/src/XmlSignalFactory.cpp index 1fd4889..546dbc8 100644 --- a/sources/common/src/XmlSignalFactory.cpp +++ b/sources/common/src/XmlSignalFactory.cpp @@ -35,13 +35,13 @@ #include "VcdException.h" PARSER::XmlDescription::XmlDescription(const pugi::xml_node &rNode) : - m_RegexLine(), - m_Timestamp(), - m_Name(), - m_Value(), - m_Size() + m_RegexLine(), + m_Timestamp(), + m_Name(), + m_Value(), + m_Size() { - for (pugi::xml_node tag : rNode.children()) + for (pugi::xml_node &tag : rNode.children()) { if (!std::strcmp("line", tag.name())) { @@ -70,106 +70,104 @@ PARSER::XmlDescription::XmlDescription(const pugi::xml_node &rNode) : } } -const std::string & PARSER::XmlDescription::GetRegex() const +const std::string &PARSER::XmlDescription::GetRegex() const { - if (m_RegexLine.length()) + if (!m_RegexLine.empty()) { return m_RegexLine; } throw EXCEPTION::VcdException(EXCEPTION::Error::NO_REGEX_EXPRESSION, - "XML - No parsing regular expression."); + "XML - No parsing regular expression."); } -const std::string & PARSER::XmlDescription::GetTimestamp() const +const std::string &PARSER::XmlDescription::GetTimestamp() const { if (m_Timestamp.length()) { return m_Timestamp; } throw EXCEPTION::VcdException(EXCEPTION::Error::NO_TIMESTAMP_EXPRESSION, - "XML - No timestamp expression."); + "XML - No timestamp expression."); } -const std::string & PARSER::XmlDescription::GetName() const +const std::string &PARSER::XmlDescription::GetName() const { if (m_Name.length()) { return m_Name; } throw EXCEPTION::VcdException(EXCEPTION::Error::NO_NAME_EXPRESSION, - "XML - No name expression."); + "XML - No name expression."); } -const std::string & PARSER::XmlDescription::GetValue() const +const std::string &PARSER::XmlDescription::GetValue() const { if (m_Value.length()) { return m_Value; } throw EXCEPTION::VcdException(EXCEPTION::Error::NO_VALUE_EXPRESSION, - "XML - No value expression."); + "XML - No value expression."); } -const std::string & PARSER::XmlDescription::GetSize() const +const std::string &PARSER::XmlDescription::GetSize() const { if (m_Size.length()) { return m_Size; } throw EXCEPTION::VcdException(EXCEPTION::Error::NO_SIZE_EXPRESSION, - "XML - No size expression."); + "XML - No size expression."); } -PARSER::XmlSignalFactory::XmlSignalFactory(const std::string& rXmlFileName) : SignalFactory(false) +PARSER::XmlSignalFactory::XmlSignalFactory(const std::string &rXmlFileName) : + SignalFactory() { // Parse the XML and add signal creators. - // pugi test pugi::xml_document doc; - if (!doc.load_file(rXmlFileName.c_str())) throw (1); /// @todo Fix filename and error + if (!doc.load_file(rXmlFileName.c_str())) + { + throw EXCEPTION::VcdException(EXCEPTION::Error::XML_READ_ERROR, + "Opening XML file '" + rXmlFileName + "' failed. The XML file might be incorrect."); + } pugi::xml_node signals = doc.child("signals"); // Traverse the XML. - for (pugi::xml_node signal : signals.children()) + for (const pugi::xml_node &signal : signals.children()) { if (!std::strcmp("vector", signal.name())) { std::unique_ptr description = std::make_unique(signal); - m_vpSignalCreators.push_back(std::make_unique( - description->GetRegex(), - description->GetTimestamp(), - description->GetName(), - description->GetValue(), - description->GetSize())); + m_vpSignalCreators.push_back(std::make_unique(description->GetRegex(), + description->GetTimestamp(), + description->GetName(), + description->GetValue(), + description->GetSize())); continue; } if (!std::strcmp("real", signal.name())) { std::unique_ptr description = std::make_unique(signal); - m_vpSignalCreators.push_back(std::make_unique( - description->GetRegex(), - description->GetTimestamp(), - description->GetName(), - description->GetValue(), - "")); + m_vpSignalCreators.push_back(std::make_unique(description->GetRegex(), + description->GetTimestamp(), + description->GetName(), + description->GetValue())); continue; } if (!std::strcmp("event", signal.name())) { std::unique_ptr description = std::make_unique(signal); - m_vpSignalCreators.push_back(std::make_unique( - description->GetRegex(), - description->GetTimestamp(), - description->GetName(), - "", - "")); + m_vpSignalCreators.push_back(std::make_unique(description->GetRegex(), + description->GetTimestamp(), + description->GetName())); continue; } throw EXCEPTION::VcdException(EXCEPTION::Error::UNEXPECTED_TAG, - "XML - Unexpected tag: " + std::string(signal.name())); + "XML - Unexpected tag: " + std::string(signal.name())); } } diff --git a/sources/common/test/functional/vcdMaker.xml b/sources/common/test/functional/vcdMaker.xml new file mode 100644 index 0000000..6e17964 --- /dev/null +++ b/sources/common/test/functional/vcdMaker.xml @@ -0,0 +1,26 @@ + + + + + + ^#([[:d:]]+) ([[:graph:]]+) ([[:d:]]+) ([[:d:]]+)( +.*)? + 1 + 2 + 3 + 4 + + + + ^#([[:d:]]+) ([[:graph:]]+) ([[:d:][:punct:]]+) f( +.*)? + 1 + 2 + 3 + + + + ^#([[:d:]]+) ([[:graph:]]+) e( +.*)? + 1 + 2 + + + diff --git a/sources/vcdMaker/src/vcdMaker.cpp b/sources/vcdMaker/src/vcdMaker.cpp index 9cac71b..f91e404 100644 --- a/sources/vcdMaker/src/vcdMaker.cpp +++ b/sources/vcdMaker/src/vcdMaker.cpp @@ -32,6 +32,7 @@ #include "VcdException.h" #include "Logger.h" #include "XmlSignalFactory.h" +#include "DefaultSignalFactory.h" /// The vcdMaker main function. /// @@ -57,7 +58,7 @@ int main(int argc, const char *argv[]) } else { - pSignalFactory = std::make_unique(); + pSignalFactory = std::make_unique(); } // Create the log parser. diff --git a/sources/vcdMaker/test/functional/test.xml b/sources/vcdMaker/test/functional/test.xml index ac5b386..1b2341f 100644 --- a/sources/vcdMaker/test/functional/test.xml +++ b/sources/vcdMaker/test/functional/test.xml @@ -90,7 +90,7 @@ A sample test definition (containing all tags): test_001.txt us Counter - ../common/doc/examples/vcdMaker.xml + ../common/test/functional/vcdMaker.xml @@ -108,7 +108,7 @@ A sample test definition (containing all tags): test_002.txt us - ../common/doc/examples/vcdMaker.xml + ../common/test/functional/vcdMaker.xml @@ -125,7 +125,7 @@ A sample test definition (containing all tags): test_003.txt us Cnt - ../common/doc/examples/vcdMaker.xml + ../common/test/functional/vcdMaker.xml diff --git a/sources/vcdMerge/inc/SignalSource.h b/sources/vcdMerge/inc/SignalSource.h index 409d4c9..de9556c 100644 --- a/sources/vcdMerge/inc/SignalSource.h +++ b/sources/vcdMerge/inc/SignalSource.h @@ -31,7 +31,6 @@ #pragma once #include "TxtParser.h" -#include "XmlSignalFactory.h" namespace MERGE { @@ -70,6 +69,18 @@ namespace MERGE static constexpr size_t SOURCE_PARAM_N = 6; }; + /// Source formats. + class Formats + { + public: + + /// Original vcdMaker text format. + static const char VCD_TEXT_FORMAT; + + /// The user provided XML format. + static const char USER_XML_FORMAT; + }; + /// The source constructor. /// /// It is only configuring the source. Before all source data @@ -190,10 +201,16 @@ namespace MERGE /// Divides the aggregated user parameter into fields. SourceParametersT GetSourceParameters() const; - /// Checks if the file is accessible. + /// Throws the exception. /// - /// @param rFilename The name of the file to be accessed. - /// @throws VcdException when the file is inaccessible. - void IsAccessible(const std::string &rFilename) const; + /// @param rFilename The name of the inaccessible file. + /// @throws VcdException + void ThrowFileInaccessibleException(const std::string &rFilename) const; + + /// Checks if the format of the given source is the original VCD format. + bool IsVcdFormat(const std::string &rFormat) const; + + /// Checks if the format of the given source is the user XML format. + bool IsUserXmlFormat(const std::string &rFormat) const; }; } diff --git a/sources/vcdMerge/src/SignalSource.cpp b/sources/vcdMerge/src/SignalSource.cpp index 58ab695..15277a5 100644 --- a/sources/vcdMerge/src/SignalSource.cpp +++ b/sources/vcdMerge/src/SignalSource.cpp @@ -36,6 +36,11 @@ #include "LineCounter.h" #include "Utils.h" #include "VcdException.h" +#include "XmlSignalFactory.h" +#include "DefaultSignalFactory.h" + +const char MERGE::SignalSource::Formats::VCD_TEXT_FORMAT = 'T'; +const char MERGE::SignalSource::Formats::USER_XML_FORMAT = 'U'; MERGE::SignalSource::SignalSource(const std::string &rDescription, SIGNAL::SourceRegistry &rSignalRegistry, @@ -99,24 +104,27 @@ void MERGE::SignalSource::Create() void MERGE::SignalSource::SetFormat(const std::string &rFormat) { - if (rFormat == "T") + if (IsVcdFormat(rFormat)) { - m_pSignalFactory = std::make_unique(); + m_pSignalFactory = std::make_unique(); return; } - if (rFormat.length() > 3) + if (IsUserXmlFormat(rFormat)) { - if ((rFormat[0] == 'U') && - (rFormat[1] == '{') && - (rFormat[rFormat.length() - 1] == '}')) - { - const std::string filename(rFormat.substr(2, rFormat.length() - 3)); - IsAccessible(filename); + // Extract the file name from the source description. + // E.g. from 'U{file_name}' the 'file_name' will be extracted. + // The first two characters must be skipped and the name's length does not include 'U{}' + const std::string filename(rFormat, 2, rFormat.length() - 3); + const std::ifstream infile(filename); - m_pSignalFactory = std::make_unique(filename); - return; + if (!infile.good()) + { + ThrowFileInaccessibleException(filename); } + + m_pSignalFactory = std::make_unique(filename); + return; } throw EXCEPTION::VcdException(EXCEPTION::Error::INVALID_LOG_FILE_FORMAT, @@ -170,7 +178,12 @@ void MERGE::SignalSource::SetCounterName(const std::string &rLineCounter) void MERGE::SignalSource::SetFilename(const std::string &rFilename) { - IsAccessible(rFilename); + const std::ifstream infile(rFilename); + + if (!infile.good()) + { + ThrowFileInaccessibleException(rFilename); + } m_Filename = rFilename; } @@ -199,15 +212,35 @@ MERGE::SignalSource::SourceParametersT MERGE::SignalSource::GetSourceParameters( return UTILS::Split(m_SourceDescription, SOURCE_PARAM_DELIM); } -void MERGE::SignalSource::IsAccessible(const std::string &rFilename) const +void MERGE::SignalSource::ThrowFileInaccessibleException(const std::string &rFilename) const { - std::ifstream infile(rFilename); + throw EXCEPTION::VcdException(EXCEPTION::Error::CANNOT_OPEN_FILE, + "Opening file '" + + rFilename + + "' failed, it either doesn't exist or is inaccessible."); +} - if (!infile.good()) +bool MERGE::SignalSource::IsVcdFormat(const std::string &rFormat) const +{ + if (rFormat == std::string(1,'T')) + { + return true; + } + return false; +} + +bool MERGE::SignalSource::IsUserXmlFormat(const std::string &rFormat) const +{ + // It means there will be at list a single character in the brackets. + // E.g. U{a} + if (rFormat.length() > 3) { - throw EXCEPTION::VcdException(EXCEPTION::Error::CANNOT_OPEN_FILE, - "Opening file '" + - rFilename + - "' failed, it either doesn't exist or is inaccessible."); + if ((rFormat[0] == Formats::USER_XML_FORMAT) && + (rFormat[1] == '{') && + (rFormat[rFormat.length() - 1] == '}')) + { + return true; + } } + return false; } diff --git a/sources/vcdMerge/test/functional/test.xml b/sources/vcdMerge/test/functional/test.xml index 642dd9d..702c652 100644 --- a/sources/vcdMerge/test/functional/test.xml +++ b/sources/vcdMerge/test/functional/test.xml @@ -249,7 +249,7 @@ A sample test definition (containing all tags): - U{../common/doc/examples/vcdMaker.xml} + U{../common/test/functional/vcdMaker.xml} 71050601 us System1 @@ -290,7 +290,7 @@ A sample test definition (containing all tags): system1_time1.txt - U{../common/doc/examples/vcdMaker.xml} + U{../common/test/functional/vcdMaker.xml} 234256037 us System2 @@ -315,7 +315,7 @@ A sample test definition (containing all tags): ms - U{../common/doc/examples/vcdMaker.xml} + U{../common/test/functional/vcdMaker.xml} 71050601 us System1 @@ -323,7 +323,7 @@ A sample test definition (containing all tags): system1_time1.txt - U{../common/doc/examples/vcdMaker.xml} + U{../common/test/functional/vcdMaker.xml} 234256037 us System2 @@ -347,7 +347,7 @@ A sample test definition (containing all tags): - U{../common/doc/examples/vcdMaker.xml} + U{../common/test/functional/vcdMaker.xml} 0 us System1 @@ -388,7 +388,7 @@ A sample test definition (containing all tags): system1_time1.txt - U{../common/doc/examples/vcdMaker.xml} + U{../common/test/functional/vcdMaker.xml} 0 us System2 @@ -413,7 +413,7 @@ A sample test definition (containing all tags): ms - U{../common/doc/examples/vcdMaker.xml} + U{../common/test/functional/vcdMaker.xml} 0 us System1 @@ -421,7 +421,7 @@ A sample test definition (containing all tags): system1_time1.txt - U{../common/doc/examples/vcdMaker.xml} + U{../common/test/functional/vcdMaker.xml} 0 us System2 diff --git a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj index ba44861..f7ca9c6 100644 --- a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj +++ b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj @@ -139,6 +139,7 @@ + @@ -169,6 +170,7 @@ + diff --git a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj.filters b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj.filters index ade38df..a8df1b2 100644 --- a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj.filters +++ b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj.filters @@ -98,6 +98,9 @@ Header Files + + Header Files + @@ -166,5 +169,8 @@ Source Files + + Source Files + \ No newline at end of file From e810c8ddc7ac61432f89939f5acc9c254981e267 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Sat, 23 Sep 2017 17:50:46 +0200 Subject: [PATCH 066/143] #25 Peer review fixes 2 --- sources/common/inc/LogParser.h | 1 - sources/common/src/XmlSignalFactory.cpp | 28 +++++++++++-------------- sources/vcdMaker/src/vcdMaker.cpp | 2 +- sources/vcdMerge/src/Merge.cpp | 2 -- sources/vcdMerge/src/SignalSource.cpp | 3 +-- 5 files changed, 14 insertions(+), 22 deletions(-) diff --git a/sources/common/inc/LogParser.h b/sources/common/inc/LogParser.h index 03f0180..9b8908a 100644 --- a/sources/common/inc/LogParser.h +++ b/sources/common/inc/LogParser.h @@ -39,7 +39,6 @@ #include #include #include -#include #include "SignalDb.h" #include "Instrument.h" diff --git a/sources/common/src/XmlSignalFactory.cpp b/sources/common/src/XmlSignalFactory.cpp index 546dbc8..03001f8 100644 --- a/sources/common/src/XmlSignalFactory.cpp +++ b/sources/common/src/XmlSignalFactory.cpp @@ -41,7 +41,7 @@ PARSER::XmlDescription::XmlDescription(const pugi::xml_node &rNode) : m_Value(), m_Size() { - for (pugi::xml_node &tag : rNode.children()) + for (const pugi::xml_node &tag : rNode.children()) { if (!std::strcmp("line", tag.name())) { @@ -82,7 +82,7 @@ const std::string &PARSER::XmlDescription::GetRegex() const const std::string &PARSER::XmlDescription::GetTimestamp() const { - if (m_Timestamp.length()) + if (!m_Timestamp.empty()) { return m_Timestamp; } @@ -92,7 +92,7 @@ const std::string &PARSER::XmlDescription::GetTimestamp() const const std::string &PARSER::XmlDescription::GetName() const { - if (m_Name.length()) + if (!m_Name.empty()) { return m_Name; } @@ -102,7 +102,7 @@ const std::string &PARSER::XmlDescription::GetName() const const std::string &PARSER::XmlDescription::GetValue() const { - if (m_Value.length()) + if (!m_Value.empty()) { return m_Value; } @@ -112,7 +112,7 @@ const std::string &PARSER::XmlDescription::GetValue() const const std::string &PARSER::XmlDescription::GetSize() const { - if (m_Size.length()) + if (!m_Size.empty()) { return m_Size; } @@ -144,30 +144,26 @@ PARSER::XmlSignalFactory::XmlSignalFactory(const std::string &rXmlFileName) : description->GetName(), description->GetValue(), description->GetSize())); - continue; } - - if (!std::strcmp("real", signal.name())) + else if (!std::strcmp("real", signal.name())) { std::unique_ptr description = std::make_unique(signal); m_vpSignalCreators.push_back(std::make_unique(description->GetRegex(), description->GetTimestamp(), description->GetName(), description->GetValue())); - continue; } - - if (!std::strcmp("event", signal.name())) + else if (!std::strcmp("event", signal.name())) { std::unique_ptr description = std::make_unique(signal); m_vpSignalCreators.push_back(std::make_unique(description->GetRegex(), description->GetTimestamp(), description->GetName())); - continue; } - - throw EXCEPTION::VcdException(EXCEPTION::Error::UNEXPECTED_TAG, - "XML - Unexpected tag: " + std::string(signal.name())); + else + { + throw EXCEPTION::VcdException(EXCEPTION::Error::UNEXPECTED_TAG, + "XML - Unexpected tag: " + std::string(signal.name())); + } } } - diff --git a/sources/vcdMaker/src/vcdMaker.cpp b/sources/vcdMaker/src/vcdMaker.cpp index f91e404..263d2dc 100644 --- a/sources/vcdMaker/src/vcdMaker.cpp +++ b/sources/vcdMaker/src/vcdMaker.cpp @@ -52,7 +52,7 @@ int main(int argc, const char *argv[]) // Build the signal factory. std::unique_ptr pSignalFactory = NULL; - if (cli.GetUserLogFormat().length()) + if (!cli.GetUserLogFormat().empty()) { pSignalFactory = std::make_unique(cli.GetUserLogFormat()); } diff --git a/sources/vcdMerge/src/Merge.cpp b/sources/vcdMerge/src/Merge.cpp index 17ccc1d..0e96ce0 100644 --- a/sources/vcdMerge/src/Merge.cpp +++ b/sources/vcdMerge/src/Merge.cpp @@ -29,11 +29,9 @@ #include #include -#include #include "Merge.h" #include "Utils.h" -#include "VcdException.h" #include "Logger.h" const uint64_t MERGE::Merge::TEN_POWER[] = diff --git a/sources/vcdMerge/src/SignalSource.cpp b/sources/vcdMerge/src/SignalSource.cpp index 15277a5..fc1fcb1 100644 --- a/sources/vcdMerge/src/SignalSource.cpp +++ b/sources/vcdMerge/src/SignalSource.cpp @@ -30,7 +30,6 @@ #include #include -#include #include "SignalSource.h" #include "LineCounter.h" @@ -222,7 +221,7 @@ void MERGE::SignalSource::ThrowFileInaccessibleException(const std::string &rFil bool MERGE::SignalSource::IsVcdFormat(const std::string &rFormat) const { - if (rFormat == std::string(1,'T')) + if ((1 == rFormat.length()) && (Formats::VCD_TEXT_FORMAT == rFormat[0])) { return true; } From 34dce4a50533cfcbb581605567b4ad1342a889df Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Fri, 29 Sep 2017 17:50:17 -0500 Subject: [PATCH 067/143] Coverity fix --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 919ec6c..757b8a1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,7 +35,7 @@ addons: version: v3.0 description: Coverity Scan by Travis CI notification_email: vcdmaker@mail.com - build_command_prepend: "cov-configure --comptype gcc --compiler g++-6 --template && cmake ." + build_command_prepend: "cov-configure --comptype gcc --compiler g++-6 --template && cmake -DUSE_STATIC_PUGIXML=ON -DCMAKE_BUILD_TYPE=Release ." build_command: "make" branch_pattern: coverity_scan From 25e5ee397668f6eef983d36aff61ef0d8ed02a15 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Thu, 2 Nov 2017 21:18:45 +0100 Subject: [PATCH 068/143] #2 Timestamp class added --- sources/cmake/commonSources.cmake | 5 +- sources/common/inc/EventSignal.h | 4 +- sources/common/inc/FSignal.h | 4 +- sources/common/inc/ISignal.h | 4 +- sources/common/inc/LineCounter.h | 2 +- sources/common/inc/LogParser.h | 1 - sources/common/inc/SafeUInt.h | 204 ++++++++++++++++++ sources/common/inc/Signal.h | 16 +- sources/common/inc/TimeFrame.h | 10 +- sources/common/inc/Timestamp.h | 45 ++++ sources/common/inc/XmlSignalCreator.h | 2 +- sources/common/src/LineCounter.cpp | 2 +- sources/common/src/SafeUInt.cpp | 47 ++++ sources/common/src/SignalFactory.cpp | 1 - sources/common/src/TimeFrame.cpp | 2 +- sources/common/src/TxtParser.cpp | 2 - sources/common/src/VCDTracer.cpp | 4 +- sources/common/src/XmlSignalCreator.cpp | 2 +- sources/vcdMerge/inc/Merge.h | 22 +- sources/vcdMerge/inc/SignalSource.h | 6 +- sources/vcdMerge/src/Merge.cpp | 82 +++---- sources/vcdMerge/src/SignalSource.cpp | 6 +- .../vcdMakerCore/vcdMakerCore.vcxproj | 3 + .../vcdMakerCore/vcdMakerCore.vcxproj.filters | 9 + 24 files changed, 386 insertions(+), 99 deletions(-) create mode 100644 sources/common/inc/SafeUInt.h create mode 100644 sources/common/inc/Timestamp.h create mode 100644 sources/common/src/SafeUInt.cpp diff --git a/sources/cmake/commonSources.cmake b/sources/cmake/commonSources.cmake index 17e1eb6..392c3b9 100644 --- a/sources/cmake/commonSources.cmake +++ b/sources/cmake/commonSources.cmake @@ -48,7 +48,8 @@ set(COMMON_SOURCES ${COMMON_SOURCES_DIR}/TimeFrame.cpp ${COMMON_SOURCES_DIR}/Utils.cpp ${COMMON_SOURCES_DIR}/Logger.cpp - ${COMMON_SOURCES_DIR}/VCDTracer.cpp) + ${COMMON_SOURCES_DIR}/VCDTracer.cpp + ${COMMON_SOURCES_DIR}/SafeUInt.cpp) # Set common header files. # This shouldn't be needed, but helps IDE project generators. @@ -84,6 +85,8 @@ set(COMMON_HEADERS ${COMMON_HEADERS_DIR}/Utils.h ${COMMON_HEADERS_DIR}/Instrument.h ${COMMON_HEADERS_DIR}/VCDTracer.h + ${COMMON_HEADERS_DIR}/SafeUInt.h + ${COMMON_HEADERS_DIR}/Timestamp.h ${VERSION_HEADER}) # 3rd party directories. diff --git a/sources/common/inc/EventSignal.h b/sources/common/inc/EventSignal.h index cc85ab6..b6fea09 100644 --- a/sources/common/inc/EventSignal.h +++ b/sources/common/inc/EventSignal.h @@ -46,9 +46,9 @@ namespace SIGNAL /// levels are separated with '.'. /// E.g. Module1.Level3.Variable6 EventSignal(const std::string &name, - uint64_t timestamp, + const TIME::Timestamp &rTimestamp, SourceRegistry::HandleT sourceHandle) : - Signal(name, 0, timestamp, "event", sourceHandle) + Signal(name, 0, rTimestamp, "event", sourceHandle) { } diff --git a/sources/common/inc/FSignal.h b/sources/common/inc/FSignal.h index 4098f8b..65229f4 100644 --- a/sources/common/inc/FSignal.h +++ b/sources/common/inc/FSignal.h @@ -51,10 +51,10 @@ namespace SIGNAL /// levels are separated with '.'. /// E.g. Module1.Level3.Variable6 FSignal(const std::string &name, - uint64_t timestamp, + const TIME::Timestamp &rTimestamp, const std::string &value, SourceRegistry::HandleT sourceHandle) : - Signal(name, 64, timestamp, "real", sourceHandle), + Signal(name, 64, rTimestamp, "real", sourceHandle), m_Value(value) { } diff --git a/sources/common/inc/ISignal.h b/sources/common/inc/ISignal.h index f33c8f4..027eeb4 100644 --- a/sources/common/inc/ISignal.h +++ b/sources/common/inc/ISignal.h @@ -52,10 +52,10 @@ namespace SIGNAL /// E.g. Module1.Level3.Variable6 ISignal(const std::string &name, size_t size, - uint64_t timestamp, + const TIME::Timestamp &rTimestamp, uint64_t value, SourceRegistry::HandleT sourceHandle) : - Signal(name, size, timestamp, "wire", sourceHandle), + Signal(name, size, rTimestamp, "wire", sourceHandle), m_Value(value) { } diff --git a/sources/common/inc/LineCounter.h b/sources/common/inc/LineCounter.h index 93c4748..5efc03a 100644 --- a/sources/common/inc/LineCounter.h +++ b/sources/common/inc/LineCounter.h @@ -73,7 +73,7 @@ namespace INSTRUMENT }; /// The counter signal map. - using CounterSignalT = std::map; + using CounterSignalT = std::map; /// Creates counter name based on desired name. std::string CreateCounterName(const std::string &rDesiredName); diff --git a/sources/common/inc/LogParser.h b/sources/common/inc/LogParser.h index 9b8908a..9332ec2 100644 --- a/sources/common/inc/LogParser.h +++ b/sources/common/inc/LogParser.h @@ -40,7 +40,6 @@ #include #include -#include "SignalDb.h" #include "Instrument.h" namespace PARSER diff --git a/sources/common/inc/SafeUInt.h b/sources/common/inc/SafeUInt.h new file mode 100644 index 0000000..10eea9b --- /dev/null +++ b/sources/common/inc/SafeUInt.h @@ -0,0 +1,204 @@ +/// @file common/inc/SafeUInt.h +/// +/// Safe integer class template. +/// +/// @par Full Description +/// Safe integer class overrides arthmetic operators throwing +/// exceptions on the overflow. +/// +/// @ingroup Generic +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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. + +#pragma once + +/// @defgroup Generic Generic +/// +/// @brief Generic classes. +/// +/// @par Full Description +/// The group contains classes which could be used anywhere else. + +#include +#include +#include + +/// A safe unsigned integer class. +/// The overridden arthmetic operators throw exceptions on the overflow. +template class SafeUInt +{ + public: + /// The safe integer constructor. + /// + /// @param value The value of the integer. + SafeUInt(T value) : + m_Value(value) + { + } + + /// The default constructor. + /// + /// By default the integer is set to 0. + SafeUInt() : + m_Value(0) + { + } + + /// Returns the integer value. + T GetValue() const + { + return m_Value; + } + + /// Overrides 'equal to' operator. + bool operator==(const SafeUInt &rhs) const + { + return m_Value == rhs.GetValue(); + } + + /// Overrides 'not equal to' operator. + bool operator!=(const SafeUInt &rhs) const + { + return !(*this == rhs); + } + + /// Overrides 'greater than' operator. + bool operator>(const SafeUInt &rhs) const + { + return (m_Value > rhs.GetValue()); + } + + /// Overrides 'less than' operator. + bool operator<(const SafeUInt &rhs) const + { + return (m_Value < rhs.GetValue()); + } + + /// Overrides the addition operator '+'. + SafeUInt operator+(const SafeUInt &rhs) const + { + if ( (std::numeric_limits::max() - m_Value) < rhs.GetValue()) + { + throw std::out_of_range(""); + } + return SafeUInt(m_Value + rhs.GetValue()); + } + + /// Overrides the addition operator '+='. + SafeUInt &operator+=(const SafeUInt &rhs) + { + if ((std::numeric_limits::max() - m_Value) < rhs.GetValue()) + { + throw std::out_of_range(""); + } + m_Value += rhs.GetValue(); + return *this; + } + + /// Overrides the substraction operator '-'. + SafeUInt operator-(const SafeUInt &rhs) const + { + if (m_Value < rhs.GetValue()) + { + throw std::out_of_range(""); + } + return SafeUInt(m_Value - rhs.GetValue()); + } + + /// Overrides the substraction operator '-='. + SafeUInt &operator-=(const SafeUInt &rhs) + { + if (m_Value < rhs.GetValue()) + { + throw std::out_of_range(""); + } + m_Value -= rhs.GetValue(); + return *this; + } + + /// Overrides the multiplication operator '*'. + SafeUInt operator*(uint64_t rhs) const + { + if ((std::numeric_limits::max() / m_Value) > rhs) + { + throw std::out_of_range(""); + } + return SafeUInt(m_Value * rhs); + } + + /// Overrides the multiplication operator '*= uint64_t'. + SafeUInt &operator*=(uint64_t rhs) + { + if ((std::numeric_limits::max() / m_Value) > rhs) + { + throw std::out_of_range(""); + } + m_Value *= rhs; + return *this; + } + + /// Overrides the multiplication operator '* double'. + SafeUInt operator*(double rhs) const + { + if ((std::numeric_limits::max() / m_Value) > rhs) + { + throw std::out_of_range(""); + } + return SafeUInt(static_cast(m_Value * rhs)); + } + + /// Overrides the multiplication operator '*= double'. + SafeUInt &operator*=(double rhs) + { + m_Value *= rhs; + return *this; + } + + /// Overrides the division operator '/'. + SafeUInt operator/(uint64_t rhs) const + { + return SafeUInt(m_Value / rhs); + } + + /// Overrides the division operator '=/'. + SafeUInt &operator/=(uint64_t rhs) + { + m_Value /= rhs; + return *this; + } + + /// Returns the maximum type value. + static SafeUInt max() + { + return SafeUInt(std::numeric_limits::max()); + } + + /// Overrides the output stream operator. + friend std::ostream &operator<<(std::ostream &out, SafeUInt &ts); + + /// Overrides the multiplication operator. + friend SafeUInt operator*(uint64_t lhs, const SafeUInt &rhs); + + private: + + /// The unsigned integer value. + T m_Value; +}; diff --git a/sources/common/inc/Signal.h b/sources/common/inc/Signal.h index 7c21500..121278a 100644 --- a/sources/common/inc/Signal.h +++ b/sources/common/inc/Signal.h @@ -38,12 +38,12 @@ /// The group consists of the base class defining the common behaviours as /// well as of the inheriting signal classes specifying concrete signals. -#include #include #include #include #include "SourceRegistry.h" +#include "Timestamp.h" /// Signal handling. namespace SIGNAL @@ -83,13 +83,13 @@ namespace SIGNAL /// the type of the signal and shall equal to "wire" or "real". Signal(const std::string &name, size_t size, - uint64_t timestamp, + const TIME::Timestamp &rTimestamp, const std::string &type, SourceRegistry::HandleT sourceHandle) : m_Name(name), m_Type(type), m_Size(size), - m_Timestamp(timestamp), + m_Timestamp(rTimestamp), m_SourceHandle(sourceHandle) { } @@ -139,17 +139,17 @@ namespace SIGNAL /// Returns the signal's timestamp in time units. /// /// The method is used while generating the body of the VCD file. - uint64_t GetTimestamp() const + const TIME::Timestamp& GetTimestamp() const { return m_Timestamp; } /// Sets the timestamp. /// - /// @param timestamp The new timestamp value. - void SetTimestamp(uint64_t timestamp) + /// @param rTimestamp The new timestamp value. + void SetTimestamp(const TIME::Timestamp &rTimestamp) { - m_Timestamp = timestamp; + m_Timestamp = rTimestamp; } /// Returns the signal's type. @@ -196,7 +196,7 @@ namespace SIGNAL const size_t m_Size = 0; /// The signal's timestamp. - uint64_t m_Timestamp = 0; + TIME::Timestamp m_Timestamp; /// The signal's source. const SourceRegistry::HandleT m_SourceHandle = diff --git a/sources/common/inc/TimeFrame.h b/sources/common/inc/TimeFrame.h index 32a4c4b..1762318 100644 --- a/sources/common/inc/TimeFrame.h +++ b/sources/common/inc/TimeFrame.h @@ -42,10 +42,10 @@ namespace TRACER public: /// The time frame constructor. /// - /// @param timestamp The initial timestamp. + /// @param rTimestamp The initial timestamp. /// @param rFile The output stream. - TimeFrame(const uint64_t timestamp, std::ofstream &rFile) : - m_Timestamp(timestamp), + TimeFrame(const TIME::Timestamp &rTimestamp, std::ofstream &rFile) : + m_Timestamp(rTimestamp), m_rFile(rFile), m_FrameSignals(), m_Signals() @@ -55,7 +55,7 @@ namespace TRACER /// Sets the beginning of the frame. /// /// @param frameStart New timestamp characterizing a frame. - void SetTime(uint64_t frameStart) + void SetTime(TIME::Timestamp frameStart) { m_Timestamp = frameStart; } @@ -86,7 +86,7 @@ namespace TRACER bool WasSignalValueAdded(const SIGNAL::Signal *pSignal); /// The timestamp of the time frame. - uint64_t m_Timestamp; + TIME::Timestamp m_Timestamp; /// The output stream. std::ofstream &m_rFile; diff --git a/sources/common/inc/Timestamp.h b/sources/common/inc/Timestamp.h new file mode 100644 index 0000000..a1a51a6 --- /dev/null +++ b/sources/common/inc/Timestamp.h @@ -0,0 +1,45 @@ +/// @file common/inc/Timestamp.h +/// +/// The signal timestamp class. +/// +/// @par Full Description +/// The signal time stamp class. +/// +/// @ingroup Time +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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. + +#pragma once +#include "SafeUInt.h" + +/// @defgroup Time Time +/// +/// @brief The group defines entities for time operations. +/// +/// @par Full Description +/// The group defines the time stamp class. It also provides means to make time +/// unit conversions. + +namespace TIME +{ + /// This type serves as signals time stamps. + using Timestamp = SafeUInt; +} diff --git a/sources/common/inc/XmlSignalCreator.h b/sources/common/inc/XmlSignalCreator.h index 96c49ff..d6d329e 100644 --- a/sources/common/inc/XmlSignalCreator.h +++ b/sources/common/inc/XmlSignalCreator.h @@ -60,7 +60,7 @@ namespace PARSER /// Returns the timestamp of the signal. /// /// @param rMatch The regular expression groups. - uint64_t GetTimestamp(const std::smatch &rMatch) const; + TIME::Timestamp GetTimestamp(const std::smatch &rMatch) const; /// Returns the name of the signal. /// diff --git a/sources/common/src/LineCounter.cpp b/sources/common/src/LineCounter.cpp index 862348b..e5d001c 100644 --- a/sources/common/src/LineCounter.cpp +++ b/sources/common/src/LineCounter.cpp @@ -49,7 +49,7 @@ INSTRUMENT::LineCounter::LineCounter(const std::string &rFilename, void INSTRUMENT::LineCounter::Notify(LineNumberT lineNumber, const SIGNAL::Signal &rSignal) { - uint64_t timestamp = rSignal.GetTimestamp(); + TIME::Timestamp timestamp = rSignal.GetTimestamp(); // Check if the source has been already registered. const CounterSignalT::iterator it = m_Counter.find(timestamp); diff --git a/sources/common/src/SafeUInt.cpp b/sources/common/src/SafeUInt.cpp new file mode 100644 index 0000000..5fff99c --- /dev/null +++ b/sources/common/src/SafeUInt.cpp @@ -0,0 +1,47 @@ +/// @file common/src/SafeUInt.cpp +/// +/// The safe integer implementations. +/// +/// @par Full Description +/// The basic safe integer implementations. +/// +/// @ingroup Generic +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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 "SafeUInt.h" + +/// Overrides the output stream operator. +std::ostream &operator<<(std::ostream &out, SafeUInt &ts) +{ + out << ts.GetValue(); + return out; +} + +/// Overrides the multiplication operator. +SafeUInt operator*(uint64_t lhs, const SafeUInt &rhs) +{ + if ((std::numeric_limits::max() / lhs) < rhs.GetValue()) + { + throw std::out_of_range(""); + } + return SafeUInt(lhs * rhs.GetValue()); +} diff --git a/sources/common/src/SignalFactory.cpp b/sources/common/src/SignalFactory.cpp index 78fff21..c6e48c7 100644 --- a/sources/common/src/SignalFactory.cpp +++ b/sources/common/src/SignalFactory.cpp @@ -32,7 +32,6 @@ #include "ISignalCreator.h" #include "FSignalCreator.h" #include "VcdException.h" -#include "VcdExceptionList.h" PARSER::SignalFactory::SignalFactory() : m_vpSignalCreators() diff --git a/sources/common/src/TimeFrame.cpp b/sources/common/src/TimeFrame.cpp index 5d24804..47089a9 100644 --- a/sources/common/src/TimeFrame.cpp +++ b/sources/common/src/TimeFrame.cpp @@ -43,7 +43,7 @@ void TRACER::TimeFrame::DumpAndClear() { if (!m_FrameSignals.empty()) { - DumpLine('#' + std::to_string(m_Timestamp)); + DumpLine('#' + std::to_string(m_Timestamp.GetValue())); for (const auto &signal : m_FrameSignals) { diff --git a/sources/common/src/TxtParser.cpp b/sources/common/src/TxtParser.cpp index 4dd40fb..fad817e 100644 --- a/sources/common/src/TxtParser.cpp +++ b/sources/common/src/TxtParser.cpp @@ -27,8 +27,6 @@ /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS /// IN THE SOFTWARE. -#include - #include "TxtParser.h" #include "SignalFactory.h" diff --git a/sources/common/src/VCDTracer.cpp b/sources/common/src/VCDTracer.cpp index a1d2351..40c7166 100644 --- a/sources/common/src/VCDTracer.cpp +++ b/sources/common/src/VCDTracer.cpp @@ -92,11 +92,11 @@ void TRACER::VCDTracer::GenerateSignalDefaults() void TRACER::VCDTracer::GenerateBody() { TimeFrame frame(0, m_File); - uint64_t previous_timestamp = 0; + TIME::Timestamp previous_timestamp = 0; for (const SIGNAL::Signal *current_signal : m_rSignalDb.GetSignals()) { - const uint64_t current_timestamp = current_signal->GetTimestamp(); + const TIME::Timestamp current_timestamp = current_signal->GetTimestamp(); if (current_timestamp != previous_timestamp) { diff --git a/sources/common/src/XmlSignalCreator.cpp b/sources/common/src/XmlSignalCreator.cpp index 92b8717..7e57c03 100644 --- a/sources/common/src/XmlSignalCreator.cpp +++ b/sources/common/src/XmlSignalCreator.cpp @@ -26,7 +26,7 @@ #include "XmlSignalCreator.h" -uint64_t PARSER::XmlSignalCreator::GetTimestamp(const std::smatch &rMatch) const +TIME::Timestamp PARSER::XmlSignalCreator::GetTimestamp(const std::smatch &rMatch) const { return std::stoull(rMatch[std::stoi(m_Timestamp)].str()); } diff --git a/sources/vcdMerge/inc/Merge.h b/sources/vcdMerge/inc/Merge.h index f2e7d26..c2afadc 100644 --- a/sources/vcdMerge/inc/Merge.h +++ b/sources/vcdMerge/inc/Merge.h @@ -80,29 +80,29 @@ namespace MERGE /// Returns the minimal unit. /// /// @param The result time unit. - std::string FindMinUnit(); + std::string FindMinUnit() const; /// Returns the max leading time - the time between the first /// event and the synchronization point. - uint64_t FindMaxLeadingTime(); + TIME::Timestamp FindMaxLeadingTime() const; /// Returns the time value represented in the target time unit. /// /// @throws std::runtime_error() if the new time value is out of bounds. - /// @param time A time value to be transformed. + /// @param rTime A time value to be transformed. /// @param rTargetTimeUnit The target time unit. /// @param rSourceTimeUnit The source time unit. - uint64_t TransformTimestamp(uint64_t time, - const std::string &rTargetTimeUnit, - const std::string &rSourceTimeUnit); + TIME::Timestamp TransformTimestamp(const TIME::Timestamp &rTime, + const std::string &rTargetTimeUnit, + const std::string &rSourceTimeUnit) const; /// Returns the new signal's time. /// /// @throws std::runtime_error() is the new time value is out of bounds. - /// @param time The original signal's timestamp. - /// @param sync The source's sync point. - uint64_t CalculateNewTime(uint64_t time, - uint64_t syncPoint); + /// @param rTime The original signal's timestamp. + /// @param rSync The source's sync point. + TIME::Timestamp CalculateNewTime(const TIME::Timestamp &rTime, + const TIME::Timestamp &rSyncPoint) const; /// A type defining a container for signal sources. using SignalSourcesT = std::vector; @@ -124,7 +124,7 @@ namespace MERGE /// The greatest leading time among sources. /// Expressed in the time output unit. - uint64_t m_MaxLeadingTime; + TIME::Timestamp m_MaxLeadingTime; /// The output database. std::unique_ptr m_pMerged; diff --git a/sources/vcdMerge/inc/SignalSource.h b/sources/vcdMerge/inc/SignalSource.h index de9556c..a5d72d6 100644 --- a/sources/vcdMerge/inc/SignalSource.h +++ b/sources/vcdMerge/inc/SignalSource.h @@ -122,7 +122,7 @@ namespace MERGE } /// Returns the source synchronization point. - uint64_t GetSyncPoint() const + const TIME::Timestamp& GetSyncPoint() const { return m_SyncPoint; } @@ -131,7 +131,7 @@ namespace MERGE /// the synchronization point. /// /// @throws VcdException if the first source timestamp is greater than the synchronization point. - uint64_t GetLeadingTime() const; + TIME::Timestamp GetLeadingTime() const; private: /// A type for split source parameters. @@ -150,7 +150,7 @@ namespace MERGE std::unique_ptr m_pSignalFactory; /// The source synchronization point. - uint64_t m_SyncPoint; + TIME::Timestamp m_SyncPoint; /// The time unit. std::string m_TimeUnit; diff --git a/sources/vcdMerge/src/Merge.cpp b/sources/vcdMerge/src/Merge.cpp index 0e96ce0..308c23f 100644 --- a/sources/vcdMerge/src/Merge.cpp +++ b/sources/vcdMerge/src/Merge.cpp @@ -64,7 +64,7 @@ void MERGE::Merge::Run() { m_MaxLeadingTime = FindMaxLeadingTime(); } - catch (std::runtime_error &) + catch (std::out_of_range &) { // Sources cannot be merged. throw EXCEPTION::VcdException(EXCEPTION::Error::LEADING_TIME_OUT_OF_BOUNDS, @@ -78,14 +78,14 @@ void MERGE::Merge::Run() const std::string source_time_unit = pSource->GetTimeUnit(); // Source sync time in the target unit. - uint64_t transformed_source_sync = 0; + TIME::Timestamp transformed_source_sync = 0; try { transformed_source_sync = TransformTimestamp(pSource->GetSyncPoint(), m_MinTimeUnit, source_time_unit); } - catch (std::runtime_error &) + catch (std::out_of_range &) { LOGGER::Logger::GetInstance().LogWarning(EXCEPTION::Warning::SYNCHRONIZATION_TIME_OUT_OF_BOUNDS, "Synchronization time out of bounds. Cannot merge " @@ -105,15 +105,15 @@ void MERGE::Merge::Run() pSignal->SetTimestamp(CalculateNewTime(TransformTimestamp(pSignal->GetTimestamp(), m_MinTimeUnit, source_time_unit), - transformed_source_sync)); + transformed_source_sync)); } - catch (std::runtime_error &) + catch (std::out_of_range &) { LOGGER::Logger::GetInstance().LogWarning(EXCEPTION::Warning::TIMESTAMP_OUT_OF_BOUNDS, "Timestamp out of bounds. Cannot merge " + pSignal->GetName() + " at " + - std::to_string(pSignal->GetTimestamp()) + " " + + std::to_string(pSignal->GetTimestamp().GetValue()) + " " + pSource->GetTimeUnit()); delete pSignal; @@ -129,7 +129,7 @@ void MERGE::Merge::Run() } } -std::string MERGE::Merge::FindMinUnit() +std::string MERGE::Merge::FindMinUnit() const { size_t max_index = 0; @@ -142,30 +142,30 @@ std::string MERGE::Merge::FindMinUnit() return SIGNAL::Signal::TIME_UNITS[max_index]; } -uint64_t MERGE::Merge::FindMaxLeadingTime() +TIME::Timestamp MERGE::Merge::FindMaxLeadingTime() const { - uint64_t max_leading_time = 0; + TIME::Timestamp max_leading_time = 0; for (const SignalSource *const source : m_Sources) { - const uint64_t log_leading_time = TransformTimestamp(source->GetLeadingTime(), - m_MinTimeUnit, - source->GetTimeUnit()); - const uint64_t user_leading_time = TransformTimestamp(source->GetSyncPoint(), - m_MinTimeUnit, - source->GetTimeUnit()); - const uint64_t leading_time = std::min(log_leading_time, user_leading_time); + const TIME::Timestamp log_leading_time = TransformTimestamp(source->GetLeadingTime(), + m_MinTimeUnit, + source->GetTimeUnit()); + const TIME::Timestamp user_leading_time = TransformTimestamp(source->GetSyncPoint(), + m_MinTimeUnit, + source->GetTimeUnit()); + const TIME::Timestamp leading_time = std::min(log_leading_time, user_leading_time); max_leading_time = std::max(leading_time, max_leading_time); } return max_leading_time; } -uint64_t MERGE::Merge::TransformTimestamp(uint64_t time, - const std::string &rTargetTimeUnit, - const std::string &rSourceTimeUnit) +TIME::Timestamp MERGE::Merge::TransformTimestamp(const TIME::Timestamp &rTime, + const std::string &rTargetTimeUnit, + const std::string &rSourceTimeUnit) const { - uint64_t new_time = time; + TIME::Timestamp new_time = rTime; uint32_t nominator = 0; uint32_t denominator = 0; @@ -179,52 +179,32 @@ uint64_t MERGE::Merge::TransformTimestamp(uint64_t time, else if (target_power < source_power) { denominator = (source_power - target_power); - const uint64_t rounding = TEN_POWER[denominator] / 2; + const TIME::Timestamp rounding(TEN_POWER[denominator] / 2); - if ((std::numeric_limits::max() - time) < rounding) - { - throw std::runtime_error(""); - } - new_time = time + rounding; - } - - if (nominator > 0) - { - if ((std::numeric_limits::max() / TEN_POWER[nominator]) < new_time) - { - throw std::runtime_error(""); - } + new_time = rTime + rounding; } const double units_ratio = static_cast(TEN_POWER[nominator]) / TEN_POWER[denominator]; - return static_cast(new_time * units_ratio); + return (new_time * units_ratio); } -uint64_t MERGE::Merge::CalculateNewTime(uint64_t time, - uint64_t syncPoint) +TIME::Timestamp MERGE::Merge::CalculateNewTime(const TIME::Timestamp &rTime, + const TIME::Timestamp &rSyncPoint) const { - const uint64_t max = std::max(time, m_MaxLeadingTime); - const uint64_t min = std::min(time, m_MaxLeadingTime); - uint64_t temp_time = 0; + const TIME::Timestamp max = std::max(rTime, m_MaxLeadingTime); + const TIME::Timestamp min = std::min(rTime, m_MaxLeadingTime); + TIME::Timestamp temp_time = 0; - if (max < syncPoint) + if (max < rSyncPoint) { - if ((std::numeric_limits::max() - min) < max) - { - throw std::runtime_error(""); - } temp_time = max + min; - temp_time -= syncPoint; + temp_time -= rSyncPoint; } else { - temp_time = max - syncPoint; - if ((std::numeric_limits::max() - min) < temp_time) - { - throw std::runtime_error(""); - } + temp_time = max - rSyncPoint; temp_time += min; } return (TransformTimestamp(temp_time, m_TimeUnit, m_MinTimeUnit)); diff --git a/sources/vcdMerge/src/SignalSource.cpp b/sources/vcdMerge/src/SignalSource.cpp index fc1fcb1..c719d60 100644 --- a/sources/vcdMerge/src/SignalSource.cpp +++ b/sources/vcdMerge/src/SignalSource.cpp @@ -58,16 +58,16 @@ MERGE::SignalSource::SignalSource(const std::string &rDescription, ParseParameters(); } -uint64_t MERGE::SignalSource::GetLeadingTime() const +TIME::Timestamp MERGE::SignalSource::GetLeadingTime() const { // Get the timestamp of the first signal in the set. - const uint64_t t0 = (*(m_pSignalDb->GetSignals().cbegin()))->GetTimestamp(); + const TIME::Timestamp t0 = (*(m_pSignalDb->GetSignals().cbegin()))->GetTimestamp(); // The sync point value is out of bounds. if ((t0 > m_SyncPoint) && (m_SyncPoint > 0)) { throw EXCEPTION::VcdException(EXCEPTION::Error::SYNCHRONIZATION_POINT_OUT_OF_BOUNDS, - "Synchronization point value out of bounds: " + m_SyncPoint); + "Synchronization point value out of bounds: " + m_SyncPoint.GetValue()); } return (m_SyncPoint - t0); diff --git a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj index f7ca9c6..b8941d6 100644 --- a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj +++ b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj @@ -150,6 +150,7 @@ + @@ -157,6 +158,7 @@ + @@ -179,6 +181,7 @@ + diff --git a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj.filters b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj.filters index a8df1b2..2883ff7 100644 --- a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj.filters +++ b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj.filters @@ -101,6 +101,12 @@ Header Files + + Header Files + + + Header Files + @@ -172,5 +178,8 @@ Source Files + + Source Files + \ No newline at end of file From 6c022acb6a7a45f259dcd00e21735a255a45a393 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Fri, 3 Nov 2017 18:44:51 +0100 Subject: [PATCH 069/143] #2 Time handling class fixes --- sources/common/inc/SafeUInt.h | 33 +++++++++++++++++++++++++-------- sources/common/src/SafeUInt.cpp | 7 +++++-- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/sources/common/inc/SafeUInt.h b/sources/common/inc/SafeUInt.h index 10eea9b..283521a 100644 --- a/sources/common/inc/SafeUInt.h +++ b/sources/common/inc/SafeUInt.h @@ -38,6 +38,7 @@ /// The group contains classes which could be used anywhere else. #include +#include #include #include @@ -137,9 +138,12 @@ template class SafeUInt /// Overrides the multiplication operator '*'. SafeUInt operator*(uint64_t rhs) const { - if ((std::numeric_limits::max() / m_Value) > rhs) + if (m_Value) { - throw std::out_of_range(""); + if ((std::numeric_limits::max() / m_Value) < rhs) + { + throw std::out_of_range(""); + } } return SafeUInt(m_Value * rhs); } @@ -147,9 +151,12 @@ template class SafeUInt /// Overrides the multiplication operator '*= uint64_t'. SafeUInt &operator*=(uint64_t rhs) { - if ((std::numeric_limits::max() / m_Value) > rhs) + if (m_Value) { - throw std::out_of_range(""); + if ((std::numeric_limits::max() / m_Value) < rhs) + { + throw std::out_of_range(""); + } } m_Value *= rhs; return *this; @@ -158,9 +165,12 @@ template class SafeUInt /// Overrides the multiplication operator '* double'. SafeUInt operator*(double rhs) const { - if ((std::numeric_limits::max() / m_Value) > rhs) + if (m_Value) { - throw std::out_of_range(""); + if ((std::numeric_limits::max() / m_Value) < rhs) + { + throw std::out_of_range(""); + } } return SafeUInt(static_cast(m_Value * rhs)); } @@ -168,6 +178,13 @@ template class SafeUInt /// Overrides the multiplication operator '*= double'. SafeUInt &operator*=(double rhs) { + if (m_Value) + { + if ((std::numeric_limits::max() / m_Value) < rhs) + { + throw std::out_of_range(""); + } + } m_Value *= rhs; return *this; } @@ -192,10 +209,10 @@ template class SafeUInt } /// Overrides the output stream operator. - friend std::ostream &operator<<(std::ostream &out, SafeUInt &ts); + template friend std::ostream &operator<<(std::ostream &out, SafeUInt &ts); /// Overrides the multiplication operator. - friend SafeUInt operator*(uint64_t lhs, const SafeUInt &rhs); + template friend SafeUInt operator*(uint64_t lhs, const SafeUInt &rhs); private: diff --git a/sources/common/src/SafeUInt.cpp b/sources/common/src/SafeUInt.cpp index 5fff99c..98460ec 100644 --- a/sources/common/src/SafeUInt.cpp +++ b/sources/common/src/SafeUInt.cpp @@ -39,9 +39,12 @@ std::ostream &operator<<(std::ostream &out, SafeUInt &ts) /// Overrides the multiplication operator. SafeUInt operator*(uint64_t lhs, const SafeUInt &rhs) { - if ((std::numeric_limits::max() / lhs) < rhs.GetValue()) + if (lhs) { - throw std::out_of_range(""); + if ((std::numeric_limits::max() / lhs) < rhs.GetValue()) + { + throw std::out_of_range(""); + } } return SafeUInt(lhs * rhs.GetValue()); } From 7aff327864cfbeca2d03a27e60c35bb3ea3e9712 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Sun, 24 Dec 2017 10:55:44 +0100 Subject: [PATCH 070/143] #2 Fixes after a peer review --- sources/cmake/commonSources.cmake | 3 +- sources/common/inc/SafeUInt.h | 184 +++++++----------- sources/common/src/SafeUInt.cpp | 50 ----- sources/vcdMerge/src/Merge.cpp | 14 +- sources/vcdMerge/src/SignalSource.cpp | 2 +- windows/vcdMaker/vcdMaker/vcdMaker.vcxproj | 7 +- .../vcdMakerCore/vcdMakerCore.vcxproj | 13 +- .../vcdMakerCore/vcdMakerCore.vcxproj.filters | 3 - windows/vcdMaker/vcdMerge/vcdMerge.vcxproj | 7 +- 9 files changed, 95 insertions(+), 188 deletions(-) delete mode 100644 sources/common/src/SafeUInt.cpp diff --git a/sources/cmake/commonSources.cmake b/sources/cmake/commonSources.cmake index 392c3b9..d459b44 100644 --- a/sources/cmake/commonSources.cmake +++ b/sources/cmake/commonSources.cmake @@ -48,8 +48,7 @@ set(COMMON_SOURCES ${COMMON_SOURCES_DIR}/TimeFrame.cpp ${COMMON_SOURCES_DIR}/Utils.cpp ${COMMON_SOURCES_DIR}/Logger.cpp - ${COMMON_SOURCES_DIR}/VCDTracer.cpp - ${COMMON_SOURCES_DIR}/SafeUInt.cpp) + ${COMMON_SOURCES_DIR}/VCDTracer.cpp) # Set common header files. # This shouldn't be needed, but helps IDE project generators. diff --git a/sources/common/inc/SafeUInt.h b/sources/common/inc/SafeUInt.h index 283521a..8a817ba 100644 --- a/sources/common/inc/SafeUInt.h +++ b/sources/common/inc/SafeUInt.h @@ -56,10 +56,7 @@ template class SafeUInt } /// The default constructor. - /// - /// By default the integer is set to 0. - SafeUInt() : - m_Value(0) + SafeUInt() { } @@ -69,153 +66,116 @@ template class SafeUInt return m_Value; } - /// Overrides 'equal to' operator. - bool operator==(const SafeUInt &rhs) const - { - return m_Value == rhs.GetValue(); - } - - /// Overrides 'not equal to' operator. - bool operator!=(const SafeUInt &rhs) const - { - return !(*this == rhs); - } - - /// Overrides 'greater than' operator. - bool operator>(const SafeUInt &rhs) const - { - return (m_Value > rhs.GetValue()); - } - - /// Overrides 'less than' operator. - bool operator<(const SafeUInt &rhs) const - { - return (m_Value < rhs.GetValue()); - } - - /// Overrides the addition operator '+'. - SafeUInt operator+(const SafeUInt &rhs) const - { - if ( (std::numeric_limits::max() - m_Value) < rhs.GetValue()) - { - throw std::out_of_range(""); - } - return SafeUInt(m_Value + rhs.GetValue()); - } - /// Overrides the addition operator '+='. SafeUInt &operator+=(const SafeUInt &rhs) { if ((std::numeric_limits::max() - m_Value) < rhs.GetValue()) { - throw std::out_of_range(""); + throw std::out_of_range("Arthmetic overflow"); } m_Value += rhs.GetValue(); return *this; } - /// Overrides the substraction operator '-'. - SafeUInt operator-(const SafeUInt &rhs) const - { - if (m_Value < rhs.GetValue()) - { - throw std::out_of_range(""); - } - return SafeUInt(m_Value - rhs.GetValue()); - } - /// Overrides the substraction operator '-='. SafeUInt &operator-=(const SafeUInt &rhs) { if (m_Value < rhs.GetValue()) { - throw std::out_of_range(""); + throw std::out_of_range("Arthmetic underflow"); } m_Value -= rhs.GetValue(); return *this; } - /// Overrides the multiplication operator '*'. - SafeUInt operator*(uint64_t rhs) const - { - if (m_Value) - { - if ((std::numeric_limits::max() / m_Value) < rhs) - { - throw std::out_of_range(""); - } - } - return SafeUInt(m_Value * rhs); - } - - /// Overrides the multiplication operator '*= uint64_t'. - SafeUInt &operator*=(uint64_t rhs) - { - if (m_Value) - { - if ((std::numeric_limits::max() / m_Value) < rhs) - { - throw std::out_of_range(""); - } - } - m_Value *= rhs; - return *this; - } - - /// Overrides the multiplication operator '* double'. - SafeUInt operator*(double rhs) const - { - if (m_Value) - { - if ((std::numeric_limits::max() / m_Value) < rhs) - { - throw std::out_of_range(""); - } - } - return SafeUInt(static_cast(m_Value * rhs)); - } - - /// Overrides the multiplication operator '*= double'. - SafeUInt &operator*=(double rhs) + /// Overrides the multiplication operator '*='. + SafeUInt &operator*=(const SafeUInt &rhs) { - if (m_Value) + if ((std::numeric_limits::max() / m_Value) > rhs.m_Value) { - if ((std::numeric_limits::max() / m_Value) < rhs) - { - throw std::out_of_range(""); - } + throw std::out_of_range("Arthmetic overflow"); } - m_Value *= rhs; + m_Value *= rhs.m_Value; return *this; } - /// Overrides the division operator '/'. - SafeUInt operator/(uint64_t rhs) const - { - return SafeUInt(m_Value / rhs); - } - /// Overrides the division operator '=/'. - SafeUInt &operator/=(uint64_t rhs) + SafeUInt &operator/=(const SafeUInt &rhs) { - m_Value /= rhs; + m_Value /= rhs.m_Value; return *this; } /// Returns the maximum type value. - static SafeUInt max() + static constexpr SafeUInt max() { return SafeUInt(std::numeric_limits::max()); } /// Overrides the output stream operator. - template friend std::ostream &operator<<(std::ostream &out, SafeUInt &ts); - - /// Overrides the multiplication operator. - template friend SafeUInt operator*(uint64_t lhs, const SafeUInt &rhs); + friend std::ostream &operator<<(std::ostream &out, SafeUInt &ts); private: /// The unsigned integer value. - T m_Value; + T m_Value = 0; }; + +/// Overrides 'equal to' operator. +template bool operator==(const SafeUInt &lhs, const SafeUInt &rhs) +{ + return lhs.GetValue() == rhs.GetValue(); +} + +/// Overrides 'not equal to' operator. +template bool operator!=(const SafeUInt &lhs, const SafeUInt &rhs) +{ + return !(lhs == rhs); +} + +/// Overrides 'greater than' operator. +template bool operator>(const SafeUInt &lhs, const SafeUInt &rhs) +{ + return (lhs.GetValue() > rhs.GetValue()); +} + +/// Overrides 'less than' operator. +template bool operator<(const SafeUInt &lhs, const SafeUInt &rhs) +{ + return (lhs.GetValue() < rhs.GetValue()); +} + +/// Overrides the addition operator '+'. +template SafeUInt operator+(SafeUInt lhs, const SafeUInt &rhs) +{ + lhs += rhs; + return lhs; +} + +/// Overrides the substraction operator '-'. +template SafeUInt operator-(SafeUInt lhs, const SafeUInt &rhs) +{ + lhs -= rhs; + return lhs; +} + +/// Overrides the multiplication operator '*'. +template SafeUInt operator*(SafeUInt lhs, const SafeUInt &rhs) +{ + lhs *= rhs; + return lhs; +} + +/// Overrides the multiplication operator '/'. +template SafeUInt operator/(SafeUInt lhs, const SafeUInt &rhs) +{ + lhs /= rhs; + return lhs; +} + +/// Overrides the output stream operator. +template std::ostream &operator<<(std::ostream &out, SafeUInt &ts) +{ + out << ts.m_Value; + return out; +} diff --git a/sources/common/src/SafeUInt.cpp b/sources/common/src/SafeUInt.cpp deleted file mode 100644 index 98460ec..0000000 --- a/sources/common/src/SafeUInt.cpp +++ /dev/null @@ -1,50 +0,0 @@ -/// @file common/src/SafeUInt.cpp -/// -/// The safe integer implementations. -/// -/// @par Full Description -/// The basic safe integer implementations. -/// -/// @ingroup Generic -/// -/// @par Copyright (c) 2017 vcdMaker team -/// -/// 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 "SafeUInt.h" - -/// Overrides the output stream operator. -std::ostream &operator<<(std::ostream &out, SafeUInt &ts) -{ - out << ts.GetValue(); - return out; -} - -/// Overrides the multiplication operator. -SafeUInt operator*(uint64_t lhs, const SafeUInt &rhs) -{ - if (lhs) - { - if ((std::numeric_limits::max() / lhs) < rhs.GetValue()) - { - throw std::out_of_range(""); - } - } - return SafeUInt(lhs * rhs.GetValue()); -} diff --git a/sources/vcdMerge/src/Merge.cpp b/sources/vcdMerge/src/Merge.cpp index 308c23f..5f9d6d9 100644 --- a/sources/vcdMerge/src/Merge.cpp +++ b/sources/vcdMerge/src/Merge.cpp @@ -103,8 +103,8 @@ void MERGE::Merge::Run() { // Set the signal's new timestamp. pSignal->SetTimestamp(CalculateNewTime(TransformTimestamp(pSignal->GetTimestamp(), - m_MinTimeUnit, - source_time_unit), + m_MinTimeUnit, + source_time_unit), transformed_source_sync)); } catch (std::out_of_range &) @@ -149,11 +149,11 @@ TIME::Timestamp MERGE::Merge::FindMaxLeadingTime() const for (const SignalSource *const source : m_Sources) { const TIME::Timestamp log_leading_time = TransformTimestamp(source->GetLeadingTime(), - m_MinTimeUnit, - source->GetTimeUnit()); + m_MinTimeUnit, + source->GetTimeUnit()); const TIME::Timestamp user_leading_time = TransformTimestamp(source->GetSyncPoint(), - m_MinTimeUnit, - source->GetTimeUnit()); + m_MinTimeUnit, + source->GetTimeUnit()); const TIME::Timestamp leading_time = std::min(log_leading_time, user_leading_time); max_leading_time = std::max(leading_time, max_leading_time); } @@ -187,7 +187,7 @@ TIME::Timestamp MERGE::Merge::TransformTimestamp(const TIME::Timestamp &rTime, const double units_ratio = static_cast(TEN_POWER[nominator]) / TEN_POWER[denominator]; - return (new_time * units_ratio); + return TIME::Timestamp(static_cast(new_time.GetValue() * units_ratio)); } TIME::Timestamp MERGE::Merge::CalculateNewTime(const TIME::Timestamp &rTime, diff --git a/sources/vcdMerge/src/SignalSource.cpp b/sources/vcdMerge/src/SignalSource.cpp index c719d60..f68a507 100644 --- a/sources/vcdMerge/src/SignalSource.cpp +++ b/sources/vcdMerge/src/SignalSource.cpp @@ -64,7 +64,7 @@ TIME::Timestamp MERGE::SignalSource::GetLeadingTime() const const TIME::Timestamp t0 = (*(m_pSignalDb->GetSignals().cbegin()))->GetTimestamp(); // The sync point value is out of bounds. - if ((t0 > m_SyncPoint) && (m_SyncPoint > 0)) + if ((t0 > m_SyncPoint) && (m_SyncPoint > TIME::Timestamp(0))) { throw EXCEPTION::VcdException(EXCEPTION::Error::SYNCHRONIZATION_POINT_OUT_OF_BOUNDS, "Synchronization point value out of bounds: " + m_SyncPoint.GetValue()); diff --git a/windows/vcdMaker/vcdMaker/vcdMaker.vcxproj b/windows/vcdMaker/vcdMaker/vcdMaker.vcxproj index 60e95d6..a644a2d 100644 --- a/windows/vcdMaker/vcdMaker/vcdMaker.vcxproj +++ b/windows/vcdMaker/vcdMaker/vcdMaker.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -14,18 +14,19 @@ {39CE447A-C072-4E08-9042-2208DF3A25D6} Win32Proj vcdMaker + 10.0.16299.0 Application true - v140 + v141 Unicode Application false - v140 + v141 true Unicode diff --git a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj index b8941d6..3558584 100644 --- a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj +++ b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -22,32 +22,32 @@ {DBC389FC-FB63-430B-9443-F4DE90F1AB0E} Win32Proj vcdMakerCore - 8.1 + 10.0.16299.0 StaticLibrary true - v140 + v141 Unicode StaticLibrary false - v140 + v141 true Unicode StaticLibrary true - v140 + v141 Unicode StaticLibrary false - v140 + v141 true Unicode @@ -181,7 +181,6 @@ - diff --git a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj.filters b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj.filters index 2883ff7..51ca82d 100644 --- a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj.filters +++ b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj.filters @@ -178,8 +178,5 @@ Source Files - - Source Files - \ No newline at end of file diff --git a/windows/vcdMaker/vcdMerge/vcdMerge.vcxproj b/windows/vcdMaker/vcdMerge/vcdMerge.vcxproj index 9b410a0..12afe7e 100644 --- a/windows/vcdMaker/vcdMerge/vcdMerge.vcxproj +++ b/windows/vcdMaker/vcdMerge/vcdMerge.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -14,18 +14,19 @@ {F2A67A23-8D8D-44FE-9F00-7C59DAD8A954} Win32Proj vcdMerge + 10.0.16299.0 Application true - v140 + v141 Unicode Application false - v140 + v141 true Unicode From 114fc436edb9b47d2d087cd013eccc21aba60c82 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Sun, 24 Dec 2017 11:24:19 +0100 Subject: [PATCH 071/143] #2 Template warning fix --- sources/common/inc/SafeUInt.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/common/inc/SafeUInt.h b/sources/common/inc/SafeUInt.h index 8a817ba..5bd7a93 100644 --- a/sources/common/inc/SafeUInt.h +++ b/sources/common/inc/SafeUInt.h @@ -113,7 +113,7 @@ template class SafeUInt } /// Overrides the output stream operator. - friend std::ostream &operator<<(std::ostream &out, SafeUInt &ts); + template friend std::ostream &operator<<(std::ostream &out, SafeUInt &ts); private: @@ -174,7 +174,7 @@ template SafeUInt operator/(SafeUInt lhs, const SafeUInt &rhs } /// Overrides the output stream operator. -template std::ostream &operator<<(std::ostream &out, SafeUInt &ts) +template std::ostream &operator<<(std::ostream &out, SafeUInt &ts) { out << ts.m_Value; return out; From 16d47e739d3fe02af872f8e25c3c74490479eca0 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Sun, 21 Jan 2018 20:40:58 +0100 Subject: [PATCH 072/143] #2 SafeUInt() default constructor --- sources/common/inc/SafeUInt.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/sources/common/inc/SafeUInt.h b/sources/common/inc/SafeUInt.h index 5bd7a93..e687d84 100644 --- a/sources/common/inc/SafeUInt.h +++ b/sources/common/inc/SafeUInt.h @@ -56,9 +56,7 @@ template class SafeUInt } /// The default constructor. - SafeUInt() - { - } + SafeUInt() = default; /// Returns the integer value. T GetValue() const From ae3a96fa0bf51732bbb10dc61b955666abca2d1d Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Wed, 14 Feb 2018 20:11:26 +0100 Subject: [PATCH 073/143] #2 Time unit added --- sources/cmake/commonSources.cmake | 2 + sources/cmake/unitTests.cmake | 6 ++ sources/common/inc/Signal.h | 8 +- sources/common/inc/TimeUnit.h | 87 ++++++++++++++++++ sources/common/inc/Utils.h | 10 -- sources/common/inc/VcdExceptionList.h | 3 + sources/common/src/DefaultSignalFactory.cpp | 15 ++- sources/common/src/Signal.cpp | 3 - sources/common/src/TimeUnit.cpp | 84 +++++++++++++++++ sources/common/src/Utils.cpp | 32 +------ sources/common/test/unitTest/TimeUnit.cpp | 92 +++++++++++++++++++ sources/common/test/unitTest/Utils.cpp | 21 ----- .../vcdMakerCore/vcdMakerCore.vcxproj | 2 + 13 files changed, 290 insertions(+), 75 deletions(-) create mode 100644 sources/common/inc/TimeUnit.h create mode 100644 sources/common/src/TimeUnit.cpp create mode 100644 sources/common/test/unitTest/TimeUnit.cpp diff --git a/sources/cmake/commonSources.cmake b/sources/cmake/commonSources.cmake index d459b44..a60d017 100644 --- a/sources/cmake/commonSources.cmake +++ b/sources/cmake/commonSources.cmake @@ -47,6 +47,7 @@ set(COMMON_SOURCES ${COMMON_SOURCES_DIR}/LineCounter.cpp ${COMMON_SOURCES_DIR}/TimeFrame.cpp ${COMMON_SOURCES_DIR}/Utils.cpp + ${COMMON_SOURCES_DIR}/TimeUnit.cpp ${COMMON_SOURCES_DIR}/Logger.cpp ${COMMON_SOURCES_DIR}/VCDTracer.cpp) @@ -82,6 +83,7 @@ set(COMMON_HEADERS ${COMMON_HEADERS_DIR}/Logger.h ${COMMON_HEADERS_DIR}/TimeFrame.h ${COMMON_HEADERS_DIR}/Utils.h + ${COMMON_HEADERS_DIR}/TimeUnit.h ${COMMON_HEADERS_DIR}/Instrument.h ${COMMON_HEADERS_DIR}/VCDTracer.h ${COMMON_HEADERS_DIR}/SafeUInt.h diff --git a/sources/cmake/unitTests.cmake b/sources/cmake/unitTests.cmake index 18b8758..fef5f96 100644 --- a/sources/cmake/unitTests.cmake +++ b/sources/cmake/unitTests.cmake @@ -60,3 +60,9 @@ set(UT_UTILS_SOURCES ${COMMON_SOURCES_DIR}/Utils.cpp) add_vcdtools_ut(utUtils "${UT_UTILS_SOURCES}") + +set(UT_TIMEUNIT_SOURCES + ${COMMON_UT_DIR}/TimeUnit.cpp + ${COMMON_SOURCES_DIR}/TimeUnit.cpp) + +add_vcdtools_ut(utUtils "${UT_TIMEUNIT_SOURCES}") diff --git a/sources/common/inc/Signal.h b/sources/common/inc/Signal.h index 121278a..cf6be5f 100644 --- a/sources/common/inc/Signal.h +++ b/sources/common/inc/Signal.h @@ -60,12 +60,6 @@ namespace SIGNAL /// Signal name components delimeter. static const char SIGNAL_NAME_DELIM = '.'; - /// List of allowed time units. - /// @note This can't be const because of TCLAP's stupidity - - /// TCLAP::ValuesConstraint constructor doesn't take its - /// argument using constant reference like it should. - static std::vector TIME_UNITS; - /// The signal constructor. /// /// This constructor shall be used by the iheriting classes. @@ -139,7 +133,7 @@ namespace SIGNAL /// Returns the signal's timestamp in time units. /// /// The method is used while generating the body of the VCD file. - const TIME::Timestamp& GetTimestamp() const + const TIME::Timestamp &GetTimestamp() const { return m_Timestamp; } diff --git a/sources/common/inc/TimeUnit.h b/sources/common/inc/TimeUnit.h new file mode 100644 index 0000000..37e9338 --- /dev/null +++ b/sources/common/inc/TimeUnit.h @@ -0,0 +1,87 @@ +/// @file common/inc/TimeUnit.h +/// +/// The time unit library. +/// +/// @par Full Description +/// The functions for handling time units. +/// +/// @ingroup Time +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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. + +#pragma once + +#include +#include + +namespace TIME +{ + /// The time unit class. + class Unit + { + public: + /// Unit is a singleton class. + static Unit &GetInstance() + { + static Unit instance; + return instance; + } + + /// Checks if given time unit is supported. + bool IsTimeUnitValid(const std::string &rUnit) const; + + /// Returns given time unit index in supported units list. + /// + /// @throws VcdError if the time unit is out of spec. + /// @param rUnit The time unit string. + size_t GetTimeUnitIndex(const std::string &rUnit) const; + + /// Returns the literal of the time unit. + /// + /// @param index The time unit index. + const std::string &GetTimeUnit(size_t index) const; + + /// Returns the list of available time units. + constexpr const std::vector &GetTimeUnits() const + { + return TIME_UNITS; + } + + /// Returns the 10^N value according to the given unit index. + /// + /// @param index The index of the unit. + uint64_t GetTenPower(size_t index) const; + + private: + /// The default constructor. + Unit(); + + /// Number of units. + static const uint32_t UNITS_N = 6; + + /// Available time units. + static const std::vector TIME_UNITS; + + /// A table containing integer values of 10^(3*n) where n equals position in the table. + static const uint64_t TEN_POWER[UNITS_N]; + }; + inline Unit::Unit() = default; +} diff --git a/sources/common/inc/Utils.h b/sources/common/inc/Utils.h index d6530ed..86a9bb6 100644 --- a/sources/common/inc/Utils.h +++ b/sources/common/inc/Utils.h @@ -48,14 +48,4 @@ namespace UTILS /// @param delimiter The delimiter. std::vector Split(const std::string &rInString, const char delimiter); - - /// Checks if given time unit is supported. - bool IsTimeUnitValid(const std::string &rUnit); - - /// Returns given time unit index in supported units list. - /// - /// @throws VcdError if the time unit is out of spec. - /// @param rUnit The time unit string. - size_t GetTimeUnitIndex(const std::string &rUnit); - } diff --git a/sources/common/inc/VcdExceptionList.h b/sources/common/inc/VcdExceptionList.h index 3d03b4a..2352e55 100644 --- a/sources/common/inc/VcdExceptionList.h +++ b/sources/common/inc/VcdExceptionList.h @@ -116,5 +116,8 @@ namespace EXCEPTION /// Too many signal sources. const uint32_t TOO_MANY_SIGNAL_SOURCES = 9002U; + + /// Invalid regex. + const uint32_t INVALID_REGEX = 9003U; } } diff --git a/sources/common/src/DefaultSignalFactory.cpp b/sources/common/src/DefaultSignalFactory.cpp index 93ad63c..eabbecf 100644 --- a/sources/common/src/DefaultSignalFactory.cpp +++ b/sources/common/src/DefaultSignalFactory.cpp @@ -31,12 +31,21 @@ #include "EventSignalCreator.h" #include "FSignalCreator.h" #include "ISignalCreator.h" +#include "VcdException.h" PARSER::DefaultSignalFactory::DefaultSignalFactory() : SignalFactory() { - m_vpSignalCreators.push_back(std::make_unique()); - m_vpSignalCreators.push_back(std::make_unique()); - m_vpSignalCreators.push_back(std::make_unique()); + try + { + m_vpSignalCreators.push_back(std::make_unique()); + m_vpSignalCreators.push_back(std::make_unique()); + m_vpSignalCreators.push_back(std::make_unique()); + } + catch (std::regex_error &) + { + throw EXCEPTION::VcdException(EXCEPTION::Error::INVALID_REGEX, + "Invalid regex."); + } } diff --git a/sources/common/src/Signal.cpp b/sources/common/src/Signal.cpp index 4f91e3d..243be4e 100644 --- a/sources/common/src/Signal.cpp +++ b/sources/common/src/Signal.cpp @@ -31,9 +31,6 @@ #include "Signal.h" #include "Utils.h" -std::vector SIGNAL::Signal::TIME_UNITS = - { "s", "ms", "us", "ns", "ps", "fs" }; - SIGNAL::Signal::SignalNameFieldsT SIGNAL::Signal::GetNameFields() const { return UTILS::Split(m_Name, SIGNAL_NAME_DELIM); diff --git a/sources/common/src/TimeUnit.cpp b/sources/common/src/TimeUnit.cpp new file mode 100644 index 0000000..a8e7574 --- /dev/null +++ b/sources/common/src/TimeUnit.cpp @@ -0,0 +1,84 @@ +/// @file common/src/TimeUnit.cpp +/// +/// The utilities. +/// +/// The time unit library. +/// +/// @par Full Description +/// The functions for handling time units. +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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 +#include +#include +#include +#include + +#include "TimeUnit.h" +#include "VcdException.h" + +const std::vector TIME::Unit::TIME_UNITS = +{ "s", "ms", "us", "ns", "ps", "fs" }; + +const uint64_t TIME::Unit::TEN_POWER[] = +{ + 1ull, + static_cast(std::kilo::num), + static_cast(std::mega::num), + static_cast(std::giga::num), + static_cast(std::tera::num), + static_cast(std::peta::num) +}; + +bool TIME::Unit::IsTimeUnitValid(const std::string &rUnit) const +{ + return (std::find(TIME_UNITS.cbegin(), + TIME_UNITS.cend(), + rUnit) != TIME_UNITS.cend()); +} + +size_t TIME::Unit::GetTimeUnitIndex(const std::string &rUnit) const +{ + const size_t index = (std::find(TIME_UNITS.cbegin(), + TIME_UNITS.cend(), + rUnit) - TIME_UNITS.cbegin()); + + if (index == TIME_UNITS.size()) + { + throw EXCEPTION::VcdException(EXCEPTION::Error::INVALID_TIME_UNIT, + "Invalid time unit: " + rUnit); + } + else + { + return index; + } +} + +const std::string &TIME::Unit::GetTimeUnit(size_t index) const +{ + return TIME_UNITS[index]; +} + +uint64_t TIME::Unit::GetTenPower(size_t index) const +{ + return TEN_POWER[index]; +} diff --git a/sources/common/src/Utils.cpp b/sources/common/src/Utils.cpp index 384cc92..5f8761d 100644 --- a/sources/common/src/Utils.cpp +++ b/sources/common/src/Utils.cpp @@ -29,11 +29,8 @@ #include #include -#include #include "Utils.h" -#include "Signal.h" -#include "VcdException.h" std::vector UTILS::Split(const std::string &rInString, const char delimiter) @@ -44,35 +41,8 @@ std::vector UTILS::Split(const std::string &rInString, while (std::getline(inStream, outField, delimiter)) { - if (!outField.empty()) - { - outStrings.push_back(outField); - } + outStrings.push_back(outField); } return outStrings; } - -bool UTILS::IsTimeUnitValid(const std::string &rUnit) -{ - return (std::find(SIGNAL::Signal::TIME_UNITS.cbegin(), - SIGNAL::Signal::TIME_UNITS.cend(), - rUnit) != SIGNAL::Signal::TIME_UNITS.cend()); -} - -size_t UTILS::GetTimeUnitIndex(const std::string &rUnit) -{ - const size_t index = (std::find(SIGNAL::Signal::TIME_UNITS.cbegin(), - SIGNAL::Signal::TIME_UNITS.cend(), - rUnit) - SIGNAL::Signal::TIME_UNITS.cbegin()); - - if (index == SIGNAL::Signal::TIME_UNITS.size()) - { - throw EXCEPTION::VcdException(EXCEPTION::Error::INVALID_TIME_UNIT, - "Invalid time unit: " + rUnit); - } - else - { - return index; - } -} diff --git a/sources/common/test/unitTest/TimeUnit.cpp b/sources/common/test/unitTest/TimeUnit.cpp new file mode 100644 index 0000000..655453e --- /dev/null +++ b/sources/common/test/unitTest/TimeUnit.cpp @@ -0,0 +1,92 @@ +/// @file common/test/unitTest/TimeUnit.cpp +/// +/// The 'time unit' unit test. +/// +/// @ingroup UnitTest +/// +/// @par Copyright (c) 2017 vcdMaker team +/// +/// 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 + +#include "catch.hpp" + +#include "TimeUnit.h" + +using namespace std::string_literals; + +/// Vector of strings. +using StringVector = std::vector; + +/// Unit test for Split(). +TEST_CASE("Unit::GetTimeUnits") +{ + REQUIRE(TIME::Unit::GetInstance().GetTimeUnits() == (StringVector{"s"s, "ms"s, "us"s, "ns"s, "ps"s, "fs"s})); +} + +/// Unit test for IsTimeUnitValid(). +TEST_CASE("Unit::IsTimeUnitValid") +{ + REQUIRE(TIME::Unit::GetInstance().IsTimeUnitValid("s"s)); + REQUIRE(TIME::Unit::GetInstance().IsTimeUnitValid("ms"s)); + REQUIRE(TIME::Unit::GetInstance().IsTimeUnitValid("us"s)); + REQUIRE(TIME::Unit::GetInstance().IsTimeUnitValid("ns"s)); + REQUIRE(TIME::Unit::GetInstance().IsTimeUnitValid("ps"s)); + REQUIRE(TIME::Unit::GetInstance().IsTimeUnitValid("fs"s)); + + REQUIRE_FALSE(TIME::Unit::GetInstance().IsTimeUnitValid("ks"s)); +} + +/// Unit test for GetTimeUnitIndex(). +TEST_CASE("Unit::GetTimeUnitIndex") +{ + REQUIRE(TIME::Unit::GetInstance().GetTimeUnitIndex("s"s) == 0); + REQUIRE(TIME::Unit::GetInstance().GetTimeUnitIndex("ms"s) == 1); + REQUIRE(TIME::Unit::GetInstance().GetTimeUnitIndex("us"s) == 2); + REQUIRE(TIME::Unit::GetInstance().GetTimeUnitIndex("ns"s) == 3); + REQUIRE(TIME::Unit::GetInstance().GetTimeUnitIndex("ps"s) == 4); + REQUIRE(TIME::Unit::GetInstance().GetTimeUnitIndex("fs"s) == 5); + + REQUIRE_THROWS(TIME::Unit::GetInstance().GetTimeUnitIndex("ks"s)); +} + +/// Unit test for GetTimeUnit(). +TEST_CASE("Unit::IsTimeUnitValid") +{ + REQUIRE(TIME::Unit::GetInstance().GetTimeUnit(0) == "s"s); + REQUIRE(TIME::Unit::GetInstance().GetTimeUnit(1) == "ms"s); + REQUIRE(TIME::Unit::GetInstance().GetTimeUnit(2) == "us"s); + REQUIRE(TIME::Unit::GetInstance().GetTimeUnit(3) == "ns"s); + REQUIRE(TIME::Unit::GetInstance().GetTimeUnit(4) == "ps"s); + REQUIRE(TIME::Unit::GetInstance().GetTimeUnit(5) == "fs"s); + + REQUIRE_THROWS(TIME::Unit::GetInstance().GetTimeUnit(6)); +} + +/// Unit test for GetTenPower() +TEST_CASE("Unit::GetTenPower") +{ + for (uint32_t i = 0; i < 5; i++) + { + REQUIRE(TIME::Unit::GetInstance().GetTenPower(i) == std::pow(1000, i + 1)); + } + + REQUIRE_THROWS(TIME::Unit::GetInstance().GetTenPower(5)); +} diff --git a/sources/common/test/unitTest/Utils.cpp b/sources/common/test/unitTest/Utils.cpp index 289d2ba..4ac220a 100644 --- a/sources/common/test/unitTest/Utils.cpp +++ b/sources/common/test/unitTest/Utils.cpp @@ -45,24 +45,3 @@ TEST_CASE("UTILS::Split") REQUIRE((UTILS::Split("a b c d"s, ' ')) == (StringVector{"a"s, "b"s, "c"s, "d"s})); } -/// Unit test for IsTimeUnitValid(). -TEST_CASE("UTILS::IsTimeUnitValid") -{ - REQUIRE(UTILS::IsTimeUnitValid("a"s)); - REQUIRE(UTILS::IsTimeUnitValid("b"s)); - REQUIRE(UTILS::IsTimeUnitValid("c"s)); - REQUIRE(UTILS::IsTimeUnitValid("d"s)); - - REQUIRE_FALSE(UTILS::IsTimeUnitValid("e"s)); -} - -/// Unit test for GetTimeUnitIndex(). -TEST_CASE("UTILS::GetTimeUnitIndex") -{ - REQUIRE(UTILS::GetTimeUnitIndex("a"s) == 0); - REQUIRE(UTILS::GetTimeUnitIndex("b"s) == 1); - REQUIRE(UTILS::GetTimeUnitIndex("c"s) == 2); - REQUIRE(UTILS::GetTimeUnitIndex("d"s) == 3); - - REQUIRE_THROWS(UTILS::GetTimeUnitIndex("e"s)); -} diff --git a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj index 3558584..7a8501a 100644 --- a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj +++ b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj @@ -159,6 +159,7 @@ + @@ -187,6 +188,7 @@ + From 313881d5977e229bb6603332d8c792d3983ea167 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Wed, 14 Feb 2018 20:19:32 +0100 Subject: [PATCH 074/143] #2 Time unit UT --- sources/cmake/unitTests.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/cmake/unitTests.cmake b/sources/cmake/unitTests.cmake index fef5f96..752c4b2 100644 --- a/sources/cmake/unitTests.cmake +++ b/sources/cmake/unitTests.cmake @@ -65,4 +65,4 @@ set(UT_TIMEUNIT_SOURCES ${COMMON_UT_DIR}/TimeUnit.cpp ${COMMON_SOURCES_DIR}/TimeUnit.cpp) -add_vcdtools_ut(utUtils "${UT_TIMEUNIT_SOURCES}") +add_vcdtools_ut(utTimeUnit "${UT_TIMEUNIT_SOURCES}") From c08b52a1899dd8741d89c2e5d27015dc35855496 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Wed, 14 Feb 2018 22:19:38 +0100 Subject: [PATCH 075/143] #2 Time Unit fixes --- sources/common/inc/TimeUnit.h | 2 +- sources/vcdMaker/inc/CliMaker.h | 3 ++- sources/vcdMaker/src/vcdMaker.cpp | 4 ++++ sources/vcdMerge/inc/Merge.h | 6 ------ sources/vcdMerge/src/Merge.cpp | 24 +++++++----------------- sources/vcdMerge/src/SignalSource.cpp | 3 ++- sources/vcdMerge/src/vcdMerge.cpp | 4 ++++ 7 files changed, 20 insertions(+), 26 deletions(-) diff --git a/sources/common/inc/TimeUnit.h b/sources/common/inc/TimeUnit.h index 37e9338..3645424 100644 --- a/sources/common/inc/TimeUnit.h +++ b/sources/common/inc/TimeUnit.h @@ -60,7 +60,7 @@ namespace TIME const std::string &GetTimeUnit(size_t index) const; /// Returns the list of available time units. - constexpr const std::vector &GetTimeUnits() const + const std::vector &GetTimeUnits() const { return TIME_UNITS; } diff --git a/sources/vcdMaker/inc/CliMaker.h b/sources/vcdMaker/inc/CliMaker.h index c0b57c2..388b476 100644 --- a/sources/vcdMaker/inc/CliMaker.h +++ b/sources/vcdMaker/inc/CliMaker.h @@ -32,6 +32,7 @@ #include "CliParser.h" #include "Signal.h" #include "Version.h" +#include "TimeUnit.h" namespace CLI { @@ -78,7 +79,7 @@ namespace CLI private: /// Valid timebases constraint. - TCLAP::ValuesConstraint m_AllowedTimebases{SIGNAL::Signal::TIME_UNITS}; + TCLAP::ValuesConstraint m_AllowedTimebases{TIME::Unit::GetInstance().GetTimeUnits()}; /// Timebase parameter. TCLAP::ValueArg m_Timebase diff --git a/sources/vcdMaker/src/vcdMaker.cpp b/sources/vcdMaker/src/vcdMaker.cpp index 263d2dc..ebd3547 100644 --- a/sources/vcdMaker/src/vcdMaker.cpp +++ b/sources/vcdMaker/src/vcdMaker.cpp @@ -98,6 +98,10 @@ int main(int argc, const char *argv[]) { executionStatus = EXECUTION::APP_ERROR; } + catch (TCLAP::SpecificationException &) + { + executionStatus = EXECUTION::APP_ERROR; + } return executionStatus; } diff --git a/sources/vcdMerge/inc/Merge.h b/sources/vcdMerge/inc/Merge.h index c2afadc..abef7a0 100644 --- a/sources/vcdMerge/inc/Merge.h +++ b/sources/vcdMerge/inc/Merge.h @@ -107,12 +107,6 @@ namespace MERGE /// A type defining a container for signal sources. using SignalSourcesT = std::vector; - /// Number of units. - static const uint32_t UNITS_N = 6; - - /// A table containing integer values of 10^(3*n) where n equals position in the table. - static const uint64_t TEN_POWER[UNITS_N]; - /// The set of sources. SignalSourcesT m_Sources; diff --git a/sources/vcdMerge/src/Merge.cpp b/sources/vcdMerge/src/Merge.cpp index 5f9d6d9..c2e74e3 100644 --- a/sources/vcdMerge/src/Merge.cpp +++ b/sources/vcdMerge/src/Merge.cpp @@ -28,22 +28,12 @@ /// IN THE SOFTWARE. #include -#include #include "Merge.h" #include "Utils.h" +#include "TimeUnit.h" #include "Logger.h" -const uint64_t MERGE::Merge::TEN_POWER[] = -{ - 1ull, - static_cast(std::kilo::num), - static_cast(std::mega::num), - static_cast(std::giga::num), - static_cast(std::tera::num), - static_cast(std::peta::num) -}; - void MERGE::Merge::Run() { // Find the minimum merging unit. @@ -135,11 +125,11 @@ std::string MERGE::Merge::FindMinUnit() const for (const SignalSource *const source : m_Sources) { - const size_t index = UTILS::GetTimeUnitIndex(source->GetTimeUnit()); + const size_t index = TIME::Unit::GetInstance().GetTimeUnitIndex(source->GetTimeUnit()); max_index = std::max(index, max_index); } - return SIGNAL::Signal::TIME_UNITS[max_index]; + return TIME::Unit::GetInstance().GetTimeUnit(max_index); } TIME::Timestamp MERGE::Merge::FindMaxLeadingTime() const @@ -169,8 +159,8 @@ TIME::Timestamp MERGE::Merge::TransformTimestamp(const TIME::Timestamp &rTime, uint32_t nominator = 0; uint32_t denominator = 0; - const uint32_t target_power = UTILS::GetTimeUnitIndex(rTargetTimeUnit); - const uint32_t source_power = UTILS::GetTimeUnitIndex(rSourceTimeUnit); + const uint32_t target_power = TIME::Unit::GetInstance().GetTimeUnitIndex(rTargetTimeUnit); + const uint32_t source_power = TIME::Unit::GetInstance().GetTimeUnitIndex(rSourceTimeUnit); if (target_power > source_power) { @@ -179,13 +169,13 @@ TIME::Timestamp MERGE::Merge::TransformTimestamp(const TIME::Timestamp &rTime, else if (target_power < source_power) { denominator = (source_power - target_power); - const TIME::Timestamp rounding(TEN_POWER[denominator] / 2); + const TIME::Timestamp rounding(TIME::Unit::GetInstance().GetTenPower(denominator) / 2); new_time = rTime + rounding; } const double units_ratio = - static_cast(TEN_POWER[nominator]) / TEN_POWER[denominator]; + static_cast(TIME::Unit::GetInstance().GetTenPower(nominator) / TIME::Unit::GetInstance().GetTenPower(denominator)); return TIME::Timestamp(static_cast(new_time.GetValue() * units_ratio)); } diff --git a/sources/vcdMerge/src/SignalSource.cpp b/sources/vcdMerge/src/SignalSource.cpp index f68a507..7b64f4d 100644 --- a/sources/vcdMerge/src/SignalSource.cpp +++ b/sources/vcdMerge/src/SignalSource.cpp @@ -34,6 +34,7 @@ #include "SignalSource.h" #include "LineCounter.h" #include "Utils.h" +#include "TimeUnit.h" #include "VcdException.h" #include "XmlSignalFactory.h" #include "DefaultSignalFactory.h" @@ -145,7 +146,7 @@ void MERGE::SignalSource::SetSyncPoint(const std::string &rSyncPoint) void MERGE::SignalSource::SetTimeUnit(const std::string &rTimeUnit) { - if (UTILS::IsTimeUnitValid(rTimeUnit)) + if (TIME::Unit::GetInstance().IsTimeUnitValid(rTimeUnit)) { m_TimeUnit = rTimeUnit; } diff --git a/sources/vcdMerge/src/vcdMerge.cpp b/sources/vcdMerge/src/vcdMerge.cpp index e2ecbaa..d6dc573 100644 --- a/sources/vcdMerge/src/vcdMerge.cpp +++ b/sources/vcdMerge/src/vcdMerge.cpp @@ -96,6 +96,10 @@ int main(int argc, const char *argv[]) { executionStatus = EXECUTION::APP_ERROR; } + catch (TCLAP::SpecificationException &) + { + executionStatus = EXECUTION::APP_ERROR; + } return executionStatus; } From a361d4ef0efddeb146b9a925f849421014df9805 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Thu, 15 Feb 2018 17:19:48 +0100 Subject: [PATCH 076/143] #2 Time unit clean-up --- sources/common/src/Utils.cpp | 5 ++++- sources/common/test/unitTest/TimeUnit.cpp | 8 ++++---- sources/common/test/unitTest/stub/Signal.cpp | 3 --- sources/common/test/unitTest/stub/UtilsEmpty.cpp | 11 ----------- sources/vcdMaker/inc/CliMaker.h | 2 +- sources/vcdMerge/src/Merge.cpp | 4 ++-- sources/vcdMerge/src/SignalSource.cpp | 7 ++++++- .../vcdMakerCore/vcdMakerCore.vcxproj.filters | 6 ++++++ 8 files changed, 23 insertions(+), 23 deletions(-) diff --git a/sources/common/src/Utils.cpp b/sources/common/src/Utils.cpp index 5f8761d..568996e 100644 --- a/sources/common/src/Utils.cpp +++ b/sources/common/src/Utils.cpp @@ -41,7 +41,10 @@ std::vector UTILS::Split(const std::string &rInString, while (std::getline(inStream, outField, delimiter)) { - outStrings.push_back(outField); + if (!outField.empty()) + { + outStrings.push_back(outField); + } } return outStrings; diff --git a/sources/common/test/unitTest/TimeUnit.cpp b/sources/common/test/unitTest/TimeUnit.cpp index 655453e..109d74d 100644 --- a/sources/common/test/unitTest/TimeUnit.cpp +++ b/sources/common/test/unitTest/TimeUnit.cpp @@ -68,7 +68,7 @@ TEST_CASE("Unit::GetTimeUnitIndex") } /// Unit test for GetTimeUnit(). -TEST_CASE("Unit::IsTimeUnitValid") +TEST_CASE("Unit::GetTimeUnit") { REQUIRE(TIME::Unit::GetInstance().GetTimeUnit(0) == "s"s); REQUIRE(TIME::Unit::GetInstance().GetTimeUnit(1) == "ms"s); @@ -83,10 +83,10 @@ TEST_CASE("Unit::IsTimeUnitValid") /// Unit test for GetTenPower() TEST_CASE("Unit::GetTenPower") { - for (uint32_t i = 0; i < 5; i++) + for (uint32_t i = 0; i < 6; i++) { - REQUIRE(TIME::Unit::GetInstance().GetTenPower(i) == std::pow(1000, i + 1)); + REQUIRE(TIME::Unit::GetInstance().GetTenPower(i) == std::pow(1000, i)); } - REQUIRE_THROWS(TIME::Unit::GetInstance().GetTenPower(5)); + REQUIRE_THROWS(TIME::Unit::GetInstance().GetTenPower(6)); } diff --git a/sources/common/test/unitTest/stub/Signal.cpp b/sources/common/test/unitTest/stub/Signal.cpp index 0293c15..c7ea460 100644 --- a/sources/common/test/unitTest/stub/Signal.cpp +++ b/sources/common/test/unitTest/stub/Signal.cpp @@ -25,6 +25,3 @@ /// IN THE SOFTWARE. #include "Signal.h" - -std::vector SIGNAL::Signal::TIME_UNITS = - { "a", "b", "c", "d" }; diff --git a/sources/common/test/unitTest/stub/UtilsEmpty.cpp b/sources/common/test/unitTest/stub/UtilsEmpty.cpp index 9964833..f56720b 100644 --- a/sources/common/test/unitTest/stub/UtilsEmpty.cpp +++ b/sources/common/test/unitTest/stub/UtilsEmpty.cpp @@ -34,14 +34,3 @@ std::vector UTILS::Split(const std::string &, { return {}; } - -bool UTILS::IsTimeUnitValid(const std::string &) -{ - return false; -} - -size_t UTILS::GetTimeUnitIndex(const std::string &) -{ - return 0; -} - diff --git a/sources/vcdMaker/inc/CliMaker.h b/sources/vcdMaker/inc/CliMaker.h index 388b476..8837423 100644 --- a/sources/vcdMaker/inc/CliMaker.h +++ b/sources/vcdMaker/inc/CliMaker.h @@ -79,7 +79,7 @@ namespace CLI private: /// Valid timebases constraint. - TCLAP::ValuesConstraint m_AllowedTimebases{TIME::Unit::GetInstance().GetTimeUnits()}; + TCLAP::ValuesConstraint m_AllowedTimebases{const_cast&>(TIME::Unit::GetInstance().GetTimeUnits())}; /// Timebase parameter. TCLAP::ValueArg m_Timebase diff --git a/sources/vcdMerge/src/Merge.cpp b/sources/vcdMerge/src/Merge.cpp index c2e74e3..a50f24a 100644 --- a/sources/vcdMerge/src/Merge.cpp +++ b/sources/vcdMerge/src/Merge.cpp @@ -175,13 +175,13 @@ TIME::Timestamp MERGE::Merge::TransformTimestamp(const TIME::Timestamp &rTime, } const double units_ratio = - static_cast(TIME::Unit::GetInstance().GetTenPower(nominator) / TIME::Unit::GetInstance().GetTenPower(denominator)); + static_cast(TIME::Unit::GetInstance().GetTenPower(nominator)) / TIME::Unit::GetInstance().GetTenPower(denominator); return TIME::Timestamp(static_cast(new_time.GetValue() * units_ratio)); } TIME::Timestamp MERGE::Merge::CalculateNewTime(const TIME::Timestamp &rTime, - const TIME::Timestamp &rSyncPoint) const + const TIME::Timestamp &rSyncPoint) const { const TIME::Timestamp max = std::max(rTime, m_MaxLeadingTime); const TIME::Timestamp min = std::min(rTime, m_MaxLeadingTime); diff --git a/sources/vcdMerge/src/SignalSource.cpp b/sources/vcdMerge/src/SignalSource.cpp index 7b64f4d..83d69c1 100644 --- a/sources/vcdMerge/src/SignalSource.cpp +++ b/sources/vcdMerge/src/SignalSource.cpp @@ -64,8 +64,13 @@ TIME::Timestamp MERGE::SignalSource::GetLeadingTime() const // Get the timestamp of the first signal in the set. const TIME::Timestamp t0 = (*(m_pSignalDb->GetSignals().cbegin()))->GetTimestamp(); + if (TIME::Timestamp(0) == m_SyncPoint) + { + return t0; + } + // The sync point value is out of bounds. - if ((t0 > m_SyncPoint) && (m_SyncPoint > TIME::Timestamp(0))) + if (t0 > m_SyncPoint) { throw EXCEPTION::VcdException(EXCEPTION::Error::SYNCHRONIZATION_POINT_OUT_OF_BOUNDS, "Synchronization point value out of bounds: " + m_SyncPoint.GetValue()); diff --git a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj.filters b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj.filters index 51ca82d..266da69 100644 --- a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj.filters +++ b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj.filters @@ -107,6 +107,9 @@ Header Files + + Header Files + @@ -178,5 +181,8 @@ Source Files + + Source Files + \ No newline at end of file From 85624318179726f15c49ee2062497fbd8265f3f6 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Thu, 15 Feb 2018 18:14:18 +0100 Subject: [PATCH 077/143] #2 Time unit boundary check --- sources/common/inc/TimeUnit.h | 5 +---- sources/common/inc/VcdExceptionList.h | 7 +++++-- sources/common/src/TimeUnit.cpp | 12 +++++++++++- sources/common/src/Utils.cpp | 4 ++++ sources/common/test/unitTest/Utils.cpp | 6 +++--- sources/vcdMerge/src/Merge.cpp | 1 - 6 files changed, 24 insertions(+), 11 deletions(-) diff --git a/sources/common/inc/TimeUnit.h b/sources/common/inc/TimeUnit.h index 3645424..68382c0 100644 --- a/sources/common/inc/TimeUnit.h +++ b/sources/common/inc/TimeUnit.h @@ -74,14 +74,11 @@ namespace TIME /// The default constructor. Unit(); - /// Number of units. - static const uint32_t UNITS_N = 6; - /// Available time units. static const std::vector TIME_UNITS; /// A table containing integer values of 10^(3*n) where n equals position in the table. - static const uint64_t TEN_POWER[UNITS_N]; + static const std::vector TEN_POWER; }; inline Unit::Unit() = default; } diff --git a/sources/common/inc/VcdExceptionList.h b/sources/common/inc/VcdExceptionList.h index 2352e55..ad91044 100644 --- a/sources/common/inc/VcdExceptionList.h +++ b/sources/common/inc/VcdExceptionList.h @@ -117,7 +117,10 @@ namespace EXCEPTION /// Too many signal sources. const uint32_t TOO_MANY_SIGNAL_SOURCES = 9002U; - /// Invalid regex. - const uint32_t INVALID_REGEX = 9003U; + /// Invalid regex. + const uint32_t INVALID_REGEX = 9003U; + + /// Time unit index out of bounds. + const uint32_t TIME_UNIT_INDEX_OUT_OF_BOUNDS = 9004U; } } diff --git a/sources/common/src/TimeUnit.cpp b/sources/common/src/TimeUnit.cpp index a8e7574..f75c6ee 100644 --- a/sources/common/src/TimeUnit.cpp +++ b/sources/common/src/TimeUnit.cpp @@ -39,7 +39,7 @@ const std::vector TIME::Unit::TIME_UNITS = { "s", "ms", "us", "ns", "ps", "fs" }; -const uint64_t TIME::Unit::TEN_POWER[] = +const std::vector TIME::Unit::TEN_POWER = { 1ull, static_cast(std::kilo::num), @@ -75,10 +75,20 @@ size_t TIME::Unit::GetTimeUnitIndex(const std::string &rUnit) const const std::string &TIME::Unit::GetTimeUnit(size_t index) const { + if (index >= TIME_UNITS.size()) + { + throw EXCEPTION::VcdException(EXCEPTION::Error::TIME_UNIT_INDEX_OUT_OF_BOUNDS, + "Time unit index out of bounds."); + } return TIME_UNITS[index]; } uint64_t TIME::Unit::GetTenPower(size_t index) const { + if (index >= TEN_POWER.size()) + { + throw EXCEPTION::VcdException(EXCEPTION::Error::TIME_UNIT_INDEX_OUT_OF_BOUNDS, + "Time unit index out of bounds."); + } return TEN_POWER[index]; } diff --git a/sources/common/src/Utils.cpp b/sources/common/src/Utils.cpp index 568996e..b31078e 100644 --- a/sources/common/src/Utils.cpp +++ b/sources/common/src/Utils.cpp @@ -45,6 +45,10 @@ std::vector UTILS::Split(const std::string &rInString, { outStrings.push_back(outField); } + else + { + outStrings.push_back(""); + } } return outStrings; diff --git a/sources/common/test/unitTest/Utils.cpp b/sources/common/test/unitTest/Utils.cpp index 4ac220a..e7c0821 100644 --- a/sources/common/test/unitTest/Utils.cpp +++ b/sources/common/test/unitTest/Utils.cpp @@ -39,9 +39,9 @@ TEST_CASE("UTILS::Split") REQUIRE((UTILS::Split(""s, '\0')) == (StringVector{})); REQUIRE((UTILS::Split("abcd"s, '\0')) == (StringVector{"abcd"s})); REQUIRE((UTILS::Split("a b c d"s, ' ')) == (StringVector{"a"s, "b"s, "c"s, "d"s})); - REQUIRE((UTILS::Split(" a b c d"s, ' ')) == (StringVector{"a"s, "b"s, "c"s, "d"s})); + REQUIRE((UTILS::Split(" a b c d"s, ' ')) == (StringVector{""s, "a"s, "b"s, "c"s, "d"s})); REQUIRE((UTILS::Split("a b c d "s, ' ')) == (StringVector{"a"s, "b"s, "c"s, "d"s})); - REQUIRE((UTILS::Split(" a b c d "s, ' ')) == (StringVector{"a"s, "b"s, "c"s, "d"s})); - REQUIRE((UTILS::Split("a b c d"s, ' ')) == (StringVector{"a"s, "b"s, "c"s, "d"s})); + REQUIRE((UTILS::Split(" a b c d "s, ' ')) == (StringVector{""s, "a"s, "b"s, "c"s, "d"s})); + REQUIRE((UTILS::Split("a b c d"s, ' ')) == (StringVector{"a"s, "b"s, ""s, ""s, "c"s, ""s, "d"s})); } diff --git a/sources/vcdMerge/src/Merge.cpp b/sources/vcdMerge/src/Merge.cpp index a50f24a..c4d7f30 100644 --- a/sources/vcdMerge/src/Merge.cpp +++ b/sources/vcdMerge/src/Merge.cpp @@ -30,7 +30,6 @@ #include #include "Merge.h" -#include "Utils.h" #include "TimeUnit.h" #include "Logger.h" From 3a21b4b0d97b605beebd6acb4e688b9818382ade Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Sun, 4 Mar 2018 21:40:54 +0100 Subject: [PATCH 078/143] #25 User log examples --- sources/common/doc/examples/example_user.txt | 2338 ++++++ .../doc/examples/system1_time1_user.txt | 7255 +++++++++++++++++ sources/common/doc/examples/user1.xml | 36 + sources/common/doc/examples/user2.xml | 26 + sources/common/doc/examples/vcdMaker.xml | 24 +- sources/common/doc/manual.odt | Bin 557460 -> 558916 bytes sources/common/doc/manual.pdf | Bin 851451 -> 861794 bytes 7 files changed, 9667 insertions(+), 12 deletions(-) create mode 100644 sources/common/doc/examples/example_user.txt create mode 100644 sources/common/doc/examples/system1_time1_user.txt create mode 100644 sources/common/doc/examples/user1.xml create mode 100644 sources/common/doc/examples/user2.xml diff --git a/sources/common/doc/examples/example_user.txt b/sources/common/doc/examples/example_user.txt new file mode 100644 index 0000000..1676b02 --- /dev/null +++ b/sources/common/doc/examples/example_user.txt @@ -0,0 +1,2338 @@ +49:325.499 Sensors-Accelerometer.AccX 0.260742 +49:325.499 Sensors-Accelerometer.AccY 0.0258789 +49:325.499 Sensors-Accelerometer.AccZ 0.879395 +49:365.497 Sensors-Accelerometer.AccX 0.230469 +49:365.497 Sensors-Accelerometer.AccY -0.0222168 +49:365.497 Sensors-Accelerometer.AccZ 1.09863 +49:407.985 Sensors-Accelerometer.AccX 0.0498047 +49:407.985 Sensors-Accelerometer.AccY -0.0895996 +49:407.985 Sensors-Accelerometer.AccZ 0.866211 +49:444.817 Sensors-Accelerometer.AccX 0.150391 +49:444.817 Sensors-Accelerometer.AccY -0.112061 +49:444.817 Sensors-Accelerometer.AccZ 1.03564 +49:503.227 Sensors-Light 0.673686 +49:807.919 Sensors-Accelerometer.AccX 0.208008 +49:807.919 Sensors-Accelerometer.AccY -0.010498 +49:807.919 Sensors-Accelerometer.AccZ 0.979004 +50:003.227 Sensors-Light 0.562127 +50:044.817 Sensors-Accelerometer.AccX 0.220703 +50:044.817 Sensors-Accelerometer.AccY -0.128662 +50:044.817 Sensors-Accelerometer.AccZ 0.946289 +50:165.495 Sensors-Accelerometer.AccX 0.350586 +50:165.495 Sensors-Accelerometer.AccY -0.0065918 +50:165.495 Sensors-Accelerometer.AccZ 0.82666 +50:205.587 Sensors-Magnetometer.MagX 0xfe00 +50:205.709 Sensors-Magnetometer.MagY 0x303 +50:205.829 Sensors-Magnetometer.MagZ 0xc8a +50:208.278 Sensors-Accelerometer.AccX 0.353516 +50:208.278 Sensors-Accelerometer.AccY 0.0722656 +50:208.278 Sensors-Accelerometer.AccZ 1.0459 +50:285.494 Sensors-Accelerometer.AccX 0.463867 +50:285.494 Sensors-Accelerometer.AccY 0.0615234 +50:285.494 Sensors-Accelerometer.AccZ 0.817871 +50:325.498 Sensors-Accelerometer.AccX 0.41748 +50:325.498 Sensors-Accelerometer.AccY 0.123047 +50:325.498 Sensors-Accelerometer.AccZ 0.969238 +50:365.497 Sensors-Accelerometer.AccX 0.374512 +50:365.497 Sensors-Accelerometer.AccY 0.0390625 +50:365.497 Sensors-Accelerometer.AccZ 0.815918 +50:407.989 Sensors-Accelerometer.AccX 0.393066 +50:407.989 Sensors-Accelerometer.AccY 0.117676 +50:407.989 Sensors-Accelerometer.AccZ 0.959473 +50:485.498 Sensors-Accelerometer.AccX 0.321289 +50:485.498 Sensors-Accelerometer.AccY 0.0810547 +50:485.498 Sensors-Accelerometer.AccZ 0.844727 +50:525.499 Sensors-Accelerometer.AccX 0.303711 +50:525.499 Sensors-Accelerometer.AccY 0.111328 +50:525.499 Sensors-Accelerometer.AccZ 0.947266 +50:925.495 Sensors-Accelerometer.AccX 0.41748 +50:925.495 Sensors-Accelerometer.AccY 0.107422 +50:925.495 Sensors-Accelerometer.AccZ 0.934082 +51:043.184 Sensors-Slider 0x0 +51:525.498 Sensors-Accelerometer.AccX 0.44043 +51:525.498 Sensors-Accelerometer.AccY 0.09375 +51:525.498 Sensors-Accelerometer.AccZ 0.792969 +51:565.496 Sensors-Accelerometer.AccX 0.489258 +51:565.496 Sensors-Accelerometer.AccY 0.0581055 +51:565.496 Sensors-Accelerometer.AccZ 0.92041 +51:925.495 Sensors-Accelerometer.AccX 0.37793 +51:925.495 Sensors-Accelerometer.AccY 0.0371094 +51:925.495 Sensors-Accelerometer.AccZ 0.927734 +52:007.990 Sensors-Accelerometer.AccX 0.178711 +52:007.990 Sensors-Accelerometer.AccY 0.0126953 +52:007.990 Sensors-Accelerometer.AccZ 0.997559 +52:044.816 Sensors-Accelerometer.AccX 0.0126953 +52:044.816 Sensors-Accelerometer.AccY 0.0185547 +52:044.816 Sensors-Accelerometer.AccZ 1.0332 +52:055.613 Sensors-Magnetometer.MagX 0xfdf8 +52:055.736 Sensors-Magnetometer.MagY 0x2b0 +52:055.855 Sensors-Magnetometer.MagZ 0xcc8 +52:085.498 Sensors-Accelerometer.AccX -0.0124512 +52:085.498 Sensors-Accelerometer.AccY 0.107422 +52:085.498 Sensors-Accelerometer.AccZ 0.910645 +52:105.548 Sensors-Magnetometer.MagX 0xfdec +52:105.671 Sensors-Magnetometer.MagY 0x277 +52:105.790 Sensors-Magnetometer.MagZ 0xcf0 +52:125.494 Sensors-Accelerometer.AccX -0.161377 +52:125.494 Sensors-Accelerometer.AccY 0.110352 +52:125.494 Sensors-Accelerometer.AccZ 1.00293 +52:155.585 Sensors-Magnetometer.MagX 0xfdd7 +52:155.708 Sensors-Magnetometer.MagY 0x22d +52:155.827 Sensors-Magnetometer.MagZ 0xd00 +52:165.494 Sensors-Accelerometer.AccX -0.286865 +52:165.494 Sensors-Accelerometer.AccY 0.202637 +52:165.494 Sensors-Accelerometer.AccZ 0.882324 +52:205.583 Sensors-Magnetometer.MagX 0xfdb4 +52:205.706 Sensors-Magnetometer.MagY 0x1e9 +52:205.825 Sensors-Magnetometer.MagZ 0xd0c +52:208.272 Sensors-Accelerometer.AccX -0.454346 +52:208.272 Sensors-Accelerometer.AccY 0.291992 +52:208.272 Sensors-Accelerometer.AccZ 0.920898 +52:244.820 Sensors-Accelerometer.AccX -0.440186 +52:244.820 Sensors-Accelerometer.AccY 0.336914 +52:244.820 Sensors-Accelerometer.AccZ 0.803711 +52:255.578 Sensors-Magnetometer.MagX 0xfd89 +52:255.700 Sensors-Magnetometer.MagY 0x1b3 +52:255.820 Sensors-Magnetometer.MagZ 0xd13 +52:285.495 Sensors-Accelerometer.AccX -0.597412 +52:285.495 Sensors-Accelerometer.AccY 0.411133 +52:285.495 Sensors-Accelerometer.AccZ 0.723633 +52:305.659 Sensors-Magnetometer.MagX 0xfd65 +52:305.782 Sensors-Magnetometer.MagY 0x16c +52:305.901 Sensors-Magnetometer.MagZ 0xd03 +52:365.498 Sensors-Accelerometer.AccX -0.668701 +52:365.498 Sensors-Accelerometer.AccY 0.491211 +52:365.498 Sensors-Accelerometer.AccZ 0.488281 +52:403.226 Sensors-Light 0.691646 +52:405.929 Sensors-Magnetometer.MagX 0xfd20 +52:406.052 Sensors-Magnetometer.MagY 0x11a +52:406.171 Sensors-Magnetometer.MagZ 0xcd8 +52:444.817 Sensors-Accelerometer.AccX -0.738037 +52:444.817 Sensors-Accelerometer.AccY 0.595703 +52:444.817 Sensors-Accelerometer.AccZ 0.428223 +52:485.498 Sensors-Accelerometer.AccX -0.804443 +52:485.498 Sensors-Accelerometer.AccY 0.624023 +52:485.498 Sensors-Accelerometer.AccZ 0.305664 +52:505.549 Sensors-Magnetometer.MagX 0xfcf2 +52:505.672 Sensors-Magnetometer.MagY 0xec +52:505.791 Sensors-Magnetometer.MagZ 0xc9c +52:605.583 Sensors-Magnetometer.MagX 0xfd15 +52:605.706 Sensors-Magnetometer.MagY 0xb9 +52:605.825 Sensors-Magnetometer.MagZ 0xc74 +52:608.273 Sensors-Accelerometer.AccX -0.845459 +52:608.273 Sensors-Accelerometer.AccY 0.479492 +52:608.273 Sensors-Accelerometer.AccZ 0.143555 +52:685.496 Sensors-Accelerometer.AccX -0.757568 +52:685.496 Sensors-Accelerometer.AccY 0.325195 +52:685.496 Sensors-Accelerometer.AccZ 0.113281 +52:705.656 Sensors-Magnetometer.MagX 0xfd73 +52:705.779 Sensors-Magnetometer.MagY 0x7a +52:705.898 Sensors-Magnetometer.MagZ 0xc54 +52:725.494 Sensors-Accelerometer.AccX -0.919678 +52:725.494 Sensors-Accelerometer.AccY 0.267578 +52:725.494 Sensors-Accelerometer.AccZ 0.0805664 +52:753.226 Sensors-Light 0.802014 +52:755.874 Sensors-Magnetometer.MagX 0xfdaa +52:755.997 Sensors-Magnetometer.MagY 0x64 +52:756.116 Sensors-Magnetometer.MagZ 0xc31 +52:805.557 Sensors-Magnetometer.MagX 0xfde4 +52:805.680 Sensors-Magnetometer.MagY 0x58 +52:805.798 Sensors-Magnetometer.MagZ 0xc23 +52:808.245 Sensors-Accelerometer.AccX -0.780029 +52:808.245 Sensors-Accelerometer.AccY 0.0605469 +52:808.245 Sensors-Accelerometer.AccZ 0.0869141 +52:844.816 Sensors-Accelerometer.AccX -1.10034 +52:844.816 Sensors-Accelerometer.AccY 0.0839844 +52:844.816 Sensors-Accelerometer.AccZ -0.041748 +52:885.495 Sensors-Accelerometer.AccX -0.928467 +52:885.495 Sensors-Accelerometer.AccY -0.0378418 +52:885.495 Sensors-Accelerometer.AccZ -0.0803223 +52:905.613 Sensors-Magnetometer.MagX 0xfe4b +52:905.736 Sensors-Magnetometer.MagY 0x5a +52:905.854 Sensors-Magnetometer.MagZ 0xc03 +52:925.497 Sensors-Accelerometer.AccX -0.892822 +52:925.497 Sensors-Accelerometer.AccY -0.0441895 +52:925.497 Sensors-Accelerometer.AccZ 0.0454102 +52:965.495 Sensors-Accelerometer.AccX -1.04663 +52:965.495 Sensors-Accelerometer.AccY -0.115479 +52:965.495 Sensors-Accelerometer.AccZ 0.0498047 +53:005.642 Sensors-Magnetometer.MagX 0xfe8a +53:005.765 Sensors-Magnetometer.MagY 0x76 +53:005.885 Sensors-Magnetometer.MagZ 0xc0e +53:006.020 Sensors-Slider 0x0 +53:008.432 Sensors-Accelerometer.AccX -1.00073 +53:008.432 Sensors-Accelerometer.AccY -0.2229 +53:008.432 Sensors-Accelerometer.AccZ 0.100586 +53:085.496 Sensors-Accelerometer.AccX -1.00903 +53:085.496 Sensors-Accelerometer.AccY -0.335693 +53:085.496 Sensors-Accelerometer.AccZ 0.211914 +53:105.668 Sensors-Magnetometer.MagX 0xfec9 +53:105.791 Sensors-Magnetometer.MagY 0x97 +53:105.911 Sensors-Magnetometer.MagZ 0xc0d +53:125.495 Sensors-Accelerometer.AccX -0.814697 +53:125.495 Sensors-Accelerometer.AccY -0.332764 +53:125.495 Sensors-Accelerometer.AccZ 0.184082 +53:207.937 Sensors-Accelerometer.AccX -0.931396 +53:207.937 Sensors-Accelerometer.AccY -0.469482 +53:207.937 Sensors-Accelerometer.AccZ 0.256836 +53:244.816 Sensors-Accelerometer.AccX -0.80835 +53:244.816 Sensors-Accelerometer.AccY -0.510986 +53:244.816 Sensors-Accelerometer.AccZ 0.308105 +53:255.530 Sensors-Magnetometer.MagX 0xff0e +53:255.652 Sensors-Magnetometer.MagY 0xd1 +53:255.772 Sensors-Magnetometer.MagZ 0xc15 +53:325.495 Sensors-Accelerometer.AccX -0.67749 +53:325.495 Sensors-Accelerometer.AccY -0.645264 +53:325.495 Sensors-Accelerometer.AccZ 0.320801 +53:355.610 Sensors-Magnetometer.MagX 0xff41 +53:355.733 Sensors-Magnetometer.MagY 0x127 +53:355.852 Sensors-Magnetometer.MagZ 0xc02 +53:407.879 Sensors-Accelerometer.AccX -0.480225 +53:407.879 Sensors-Accelerometer.AccY -0.715088 +53:407.879 Sensors-Accelerometer.AccZ 0.344238 +53:455.675 Sensors-Magnetometer.MagX 0xff5c +53:455.798 Sensors-Magnetometer.MagY 0x18f +53:455.917 Sensors-Magnetometer.MagZ 0xbe4 +53:485.497 Sensors-Accelerometer.AccX -0.425537 +53:485.497 Sensors-Accelerometer.AccY -0.868896 +53:485.497 Sensors-Accelerometer.AccZ 0.386719 +53:555.562 Sensors-Magnetometer.MagX 0xff61 +53:555.685 Sensors-Magnetometer.MagY 0x1e2 +53:555.804 Sensors-Magnetometer.MagZ 0xbbd +53:565.495 Sensors-Accelerometer.AccX -0.0251465 +53:565.495 Sensors-Accelerometer.AccY -0.908447 +53:565.495 Sensors-Accelerometer.AccZ 0.362305 +53:605.690 Sensors-Magnetometer.MagX 0xff54 +53:605.812 Sensors-Magnetometer.MagY 0x223 +53:605.932 Sensors-Magnetometer.MagZ 0xbac +53:685.494 Sensors-Accelerometer.AccX 0.0947266 +53:685.494 Sensors-Accelerometer.AccY -0.910889 +53:685.494 Sensors-Accelerometer.AccZ 0.446289 +53:705.585 Sensors-Magnetometer.MagX 0xff3c +53:705.707 Sensors-Magnetometer.MagY 0x268 +53:705.827 Sensors-Magnetometer.MagZ 0xbaa +53:725.493 Sensors-Accelerometer.AccX 0.248047 +53:725.493 Sensors-Accelerometer.AccY -0.835693 +53:725.493 Sensors-Accelerometer.AccZ 0.386719 +53:807.920 Sensors-Accelerometer.AccX 0.241699 +53:807.920 Sensors-Accelerometer.AccY -0.809326 +53:807.920 Sensors-Accelerometer.AccZ 0.538574 +53:855.578 Sensors-Magnetometer.MagX 0xff15 +53:855.700 Sensors-Magnetometer.MagY 0x29d +53:855.820 Sensors-Magnetometer.MagZ 0xbc9 +53:885.496 Sensors-Accelerometer.AccX 0.21582 +53:885.496 Sensors-Accelerometer.AccY -0.698486 +53:885.496 Sensors-Accelerometer.AccZ 0.618164 +53:925.495 Sensors-Accelerometer.AccX 0.350586 +53:925.495 Sensors-Accelerometer.AccY -0.692139 +53:925.495 Sensors-Accelerometer.AccZ 0.674316 +53:953.226 Sensors-Light 0.697978 +53:965.494 Sensors-Accelerometer.AccX 0.243164 +53:965.494 Sensors-Accelerometer.AccY -0.641846 +53:965.494 Sensors-Accelerometer.AccZ 0.839355 +54:005.566 Sensors-Magnetometer.MagX 0xfee3 +54:005.689 Sensors-Magnetometer.MagY 0x2c2 +54:005.808 Sensors-Magnetometer.MagZ 0xc10 +54:008.257 Sensors-Accelerometer.AccX 0.276367 +54:008.257 Sensors-Accelerometer.AccY -0.510986 +54:008.257 Sensors-Accelerometer.AccZ 0.61377 +54:044.816 Sensors-Accelerometer.AccX 0.420898 +54:044.816 Sensors-Accelerometer.AccY -0.547607 +54:044.816 Sensors-Accelerometer.AccZ 0.782227 +54:053.226 Sensors-Light 0.588586 +54:085.496 Sensors-Accelerometer.AccX 0.418945 +54:085.496 Sensors-Accelerometer.AccY -0.415771 +54:085.496 Sensors-Accelerometer.AccZ 0.828613 +54:105.612 Sensors-Magnetometer.MagX 0xfeb0 +54:105.735 Sensors-Magnetometer.MagY 0x2e0 +54:105.855 Sensors-Magnetometer.MagZ 0xc32 +54:125.497 Sensors-Accelerometer.AccX 0.397949 +54:125.497 Sensors-Accelerometer.AccY -0.30835 +54:125.497 Sensors-Accelerometer.AccZ 0.732422 +54:153.226 Sensors-Light 0.470024 +54:165.494 Sensors-Accelerometer.AccX 0.561523 +54:165.494 Sensors-Accelerometer.AccY -0.264404 +54:165.494 Sensors-Accelerometer.AccZ 0.808594 +54:205.614 Sensors-Magnetometer.MagX 0xfe78 +54:205.736 Sensors-Magnetometer.MagY 0x306 +54:205.856 Sensors-Magnetometer.MagZ 0xc3e +54:244.816 Sensors-Accelerometer.AccX 0.394531 +54:244.816 Sensors-Accelerometer.AccY -0.113037 +54:244.816 Sensors-Accelerometer.AccZ 0.736816 +54:253.226 Sensors-Light 0.353552 +54:285.494 Sensors-Accelerometer.AccX 0.680664 +54:285.494 Sensors-Accelerometer.AccY -0.0944824 +54:285.494 Sensors-Accelerometer.AccZ 0.76123 +54:305.661 Sensors-Magnetometer.MagX 0xfe3e +54:305.784 Sensors-Magnetometer.MagY 0x33e +54:305.904 Sensors-Magnetometer.MagZ 0xc1d +54:325.495 Sensors-Accelerometer.AccX 0.823242 +54:325.495 Sensors-Accelerometer.AccY 0.0166016 +54:325.495 Sensors-Accelerometer.AccZ 0.470215 +54:403.226 Sensors-Light 0.246571 +54:408.265 Sensors-Accelerometer.AccX 0.794434 +54:408.265 Sensors-Accelerometer.AccY 0.134766 +54:408.265 Sensors-Accelerometer.AccZ 0.501953 +54:444.815 Sensors-Accelerometer.AccX 0.89502 +54:444.815 Sensors-Accelerometer.AccY 0.100586 +54:444.815 Sensors-Accelerometer.AccZ 0.530273 +54:485.493 Sensors-Accelerometer.AccX 0.787109 +54:485.493 Sensors-Accelerometer.AccY 0.142578 +54:485.493 Sensors-Accelerometer.AccZ 0.470215 +54:505.583 Sensors-Magnetometer.MagX 0xfe03 +54:505.706 Sensors-Magnetometer.MagY 0x36b +54:505.826 Sensors-Magnetometer.MagZ 0xbe7 +54:525.495 Sensors-Accelerometer.AccX 0.910156 +54:525.495 Sensors-Accelerometer.AccY 0.220215 +54:525.495 Sensors-Accelerometer.AccZ 0.417969 +54:565.499 Sensors-Accelerometer.AccX 0.844727 +54:565.499 Sensors-Accelerometer.AccY 0.280762 +54:565.499 Sensors-Accelerometer.AccZ 0.518066 +54:607.883 Sensors-Accelerometer.AccX 0.807617 +54:607.883 Sensors-Accelerometer.AccY 0.305664 +54:607.883 Sensors-Accelerometer.AccZ 0.398438 +54:644.820 Sensors-Accelerometer.AccX 0.810547 +54:644.820 Sensors-Accelerometer.AccY 0.397461 +54:644.820 Sensors-Accelerometer.AccZ 0.578613 +54:655.671 Sensors-Magnetometer.MagX 0xfdaf +54:655.793 Sensors-Magnetometer.MagY 0x371 +54:655.913 Sensors-Magnetometer.MagZ 0xc0e +54:703.226 Sensors-Light 0.145663 +54:725.497 Sensors-Accelerometer.AccX 0.786133 +54:725.497 Sensors-Accelerometer.AccY 0.435547 +54:725.497 Sensors-Accelerometer.AccZ 0.412598 +54:755.675 Sensors-Magnetometer.MagX 0xfd77 +54:755.797 Sensors-Magnetometer.MagY 0x377 +54:755.917 Sensors-Magnetometer.MagZ 0xc08 +54:885.497 Sensors-Accelerometer.AccX 0.830566 +54:885.497 Sensors-Accelerometer.AccY 0.429688 +54:885.497 Sensors-Accelerometer.AccZ 0.302734 +54:963.184 Sensors-Slider 0x0 +55:355.580 Sensors-Magnetometer.MagX 0xfd8f +55:355.703 Sensors-Magnetometer.MagY 0x382 +55:355.822 Sensors-Magnetometer.MagZ 0xbd5 +55:955.652 Sensors-Magnetometer.MagX 0xfd5a +55:955.775 Sensors-Magnetometer.MagY 0x37a +55:955.894 Sensors-Magnetometer.MagZ 0xbfb +56:007.981 Sensors-Accelerometer.AccX 0.738281 +56:007.981 Sensors-Accelerometer.AccY 0.540039 +56:007.981 Sensors-Accelerometer.AccZ 0.376953 +56:325.497 Sensors-Accelerometer.AccX 0.668945 +56:325.497 Sensors-Accelerometer.AccY 0.549805 +56:325.497 Sensors-Accelerometer.AccZ 0.5 +56:405.683 Sensors-Magnetometer.MagX 0xfd60 +56:405.806 Sensors-Magnetometer.MagY 0x353 +56:405.925 Sensors-Magnetometer.MagZ 0xc4c +56:408.375 Sensors-Accelerometer.AccX 0.630371 +56:408.375 Sensors-Accelerometer.AccY 0.45459 +56:408.375 Sensors-Accelerometer.AccZ 0.655762 +56:444.816 Sensors-Accelerometer.AccX 0.460938 +56:444.816 Sensors-Accelerometer.AccY 0.438965 +56:444.816 Sensors-Accelerometer.AccZ 0.619629 +56:455.615 Sensors-Magnetometer.MagX 0xfd76 +56:455.738 Sensors-Magnetometer.MagY 0x324 +56:455.857 Sensors-Magnetometer.MagZ 0xc8d +56:485.497 Sensors-Accelerometer.AccX 0.477539 +56:485.497 Sensors-Accelerometer.AccY 0.417969 +56:485.497 Sensors-Accelerometer.AccZ 0.760254 +56:525.499 Sensors-Accelerometer.AccX 0.477051 +56:525.499 Sensors-Accelerometer.AccY 0.397461 +56:525.499 Sensors-Accelerometer.AccZ 0.875488 +56:603.226 Sensors-Light 0.253788 +56:605.915 Sensors-Magnetometer.MagX 0xfda6 +56:606.038 Sensors-Magnetometer.MagY 0x2dc +56:606.157 Sensors-Magnetometer.MagZ 0xcca +56:608.602 Sensors-Accelerometer.AccX 0.311523 +56:608.602 Sensors-Accelerometer.AccY 0.313477 +56:608.602 Sensors-Accelerometer.AccZ 0.844727 +56:725.497 Sensors-Accelerometer.AccX 0.22168 +56:725.497 Sensors-Accelerometer.AccY 0.224609 +56:725.497 Sensors-Accelerometer.AccZ 0.948242 +56:753.226 Sensors-Light 0.360037 +56:755.939 Sensors-Magnetometer.MagX 0xfdda +56:756.061 Sensors-Magnetometer.MagY 0x29c +56:756.181 Sensors-Magnetometer.MagZ 0xce5 +56:844.816 Sensors-Accelerometer.AccX 0.0810547 +56:844.816 Sensors-Accelerometer.AccY 0.15918 +56:844.816 Sensors-Accelerometer.AccZ 0.959961 +56:903.226 Sensors-Light 0.472572 +56:905.925 Sensors-Magnetometer.MagX 0xfdf7 +56:906.048 Sensors-Magnetometer.MagY 0x245 +56:906.168 Sensors-Magnetometer.MagZ 0xd0c +56:923.183 Sensors-Slider 0x0 +56:965.494 Sensors-Accelerometer.AccX -0.0617676 +56:965.494 Sensors-Accelerometer.AccY 0.116211 +56:965.494 Sensors-Accelerometer.AccZ 0.952637 +57:055.676 Sensors-Magnetometer.MagX 0xfe13 +57:055.799 Sensors-Magnetometer.MagY 0x20c +57:055.918 Sensors-Magnetometer.MagZ 0xd08 +58:807.949 Sensors-Accelerometer.AccX -0.101318 +58:807.949 Sensors-Accelerometer.AccY 0.0756836 +58:807.949 Sensors-Accelerometer.AccZ 1.09961 +58:853.226 Sensors-Light 0.596124 +58:883.184 Sensors-Slider 0x0 +58:885.593 Sensors-Accelerometer.AccX -0.265381 +58:885.593 Sensors-Accelerometer.AccY 0.0263672 +58:885.593 Sensors-Accelerometer.AccZ 0.908203 +58:905.627 Sensors-Magnetometer.MagX 0xfe37 +58:905.749 Sensors-Magnetometer.MagY 0x1ca +58:905.869 Sensors-Magnetometer.MagZ 0xd01 +58:953.227 Sensors-Light 0.7084 +59:005.578 Sensors-Magnetometer.MagX 0xfe51 +59:005.700 Sensors-Magnetometer.MagY 0x191 +59:005.820 Sensors-Magnetometer.MagZ 0xcf9 +59:008.266 Sensors-Accelerometer.AccX -0.395752 +59:008.266 Sensors-Accelerometer.AccY -0.00463867 +59:008.266 Sensors-Accelerometer.AccZ 0.970703 +59:755.548 Sensors-Magnetometer.MagX 0xfe3f +59:755.671 Sensors-Magnetometer.MagY 0x1c4 +59:755.790 Sensors-Magnetometer.MagZ 0xd01 +59:765.494 Sensors-Accelerometer.AccX -0.21167 +59:765.494 Sensors-Accelerometer.AccY 0.0146484 +59:765.494 Sensors-Accelerometer.AccZ 0.909668 +59:803.226 Sensors-Light 0.577478 +59:808.316 Sensors-Accelerometer.AccX -0.111084 +59:808.316 Sensors-Accelerometer.AccY 0.0151367 +59:808.316 Sensors-Accelerometer.AccZ 0.938965 +59:844.818 Sensors-Accelerometer.AccX -0.136475 +59:844.818 Sensors-Accelerometer.AccY 0.0610352 +59:844.818 Sensors-Accelerometer.AccZ 1.10498 +59:855.590 Sensors-Magnetometer.MagX 0xfe2d +59:855.712 Sensors-Magnetometer.MagY 0x21b +59:855.832 Sensors-Magnetometer.MagZ 0xd02 +59:885.495 Sensors-Accelerometer.AccX -0.00854492 +59:885.495 Sensors-Accelerometer.AccY 0.0537109 +59:885.495 Sensors-Accelerometer.AccZ 0.999023 +60:685.496 Sensors-Accelerometer.AccX 0.00244141 +60:685.496 Sensors-Accelerometer.AccY -0.0808105 +60:685.496 Sensors-Accelerometer.AccZ 0.980957 +60:755.547 Sensors-Magnetometer.MagX 0xfe6d +60:755.670 Sensors-Magnetometer.MagY 0x24c +60:755.789 Sensors-Magnetometer.MagZ 0xcdd +60:765.495 Sensors-Accelerometer.AccX 0.0878906 +60:765.495 Sensors-Accelerometer.AccY -0.193115 +60:765.495 Sensors-Accelerometer.AccZ 0.970703 +60:843.184 Sensors-Slider 0x0 +60:855.589 Sensors-Magnetometer.MagX 0xfea5 +60:855.711 Sensors-Magnetometer.MagY 0x240 +60:855.831 Sensors-Magnetometer.MagZ 0xcae +60:885.496 Sensors-Accelerometer.AccX 0.0244141 +60:885.496 Sensors-Accelerometer.AccY -0.306396 +60:885.496 Sensors-Accelerometer.AccZ 0.987793 +61:485.496 Sensors-Accelerometer.AccX 0.0576172 +61:485.496 Sensors-Accelerometer.AccY -0.202393 +61:485.496 Sensors-Accelerometer.AccZ 0.989258 +61:555.681 Sensors-Magnetometer.MagX 0xfe71 +61:555.803 Sensors-Magnetometer.MagY 0x23c +61:555.923 Sensors-Magnetometer.MagZ 0xcd9 +61:565.495 Sensors-Accelerometer.AccX 0.0205078 +61:565.495 Sensors-Accelerometer.AccY -0.0163574 +61:565.495 Sensors-Accelerometer.AccZ 0.95459 +61:644.818 Sensors-Accelerometer.AccX -0.000732422 +61:644.818 Sensors-Accelerometer.AccY 0.124023 +61:644.818 Sensors-Accelerometer.AccZ 1.02295 +61:655.584 Sensors-Magnetometer.MagX 0xfe11 +61:655.706 Sensors-Magnetometer.MagY 0x23d +61:655.826 Sensors-Magnetometer.MagZ 0xd00 +61:703.227 Sensors-Light 0.471458 +61:755.611 Sensors-Magnetometer.MagX 0xfdcf +61:755.734 Sensors-Magnetometer.MagY 0x23d +61:755.853 Sensors-Magnetometer.MagZ 0xd07 +61:765.495 Sensors-Accelerometer.AccX -0.0319824 +61:765.495 Sensors-Accelerometer.AccY 0.255859 +61:765.495 Sensors-Accelerometer.AccZ 1.02686 +62:285.495 Sensors-Accelerometer.AccX -0.0739746 +62:285.495 Sensors-Accelerometer.AccY 0.101562 +62:285.495 Sensors-Accelerometer.AccZ 1.01611 +62:355.530 Sensors-Magnetometer.MagX 0xfe0d +62:355.652 Sensors-Magnetometer.MagY 0x247 +62:355.772 Sensors-Magnetometer.MagZ 0xcfe +62:365.495 Sensors-Accelerometer.AccX 0.0610352 +62:365.495 Sensors-Accelerometer.AccY -0.013916 +62:365.495 Sensors-Accelerometer.AccZ 0.96582 +62:405.532 Sensors-Magnetometer.MagX 0xfe4b +62:405.655 Sensors-Magnetometer.MagY 0x251 +62:405.774 Sensors-Magnetometer.MagZ 0xce1 +62:408.221 Sensors-Accelerometer.AccX 0.145508 +62:408.221 Sensors-Accelerometer.AccY -0.153076 +62:408.221 Sensors-Accelerometer.AccZ 0.981934 +62:453.226 Sensors-Light 0.579492 +62:485.496 Sensors-Accelerometer.AccX 0.103516 +62:485.496 Sensors-Accelerometer.AccY -0.288818 +62:485.496 Sensors-Accelerometer.AccZ 0.982422 +62:505.610 Sensors-Magnetometer.MagX 0xfea0 +62:505.733 Sensors-Magnetometer.MagY 0x24d +62:505.852 Sensors-Magnetometer.MagZ 0xcb3 +62:805.571 Sensors-Slider 0x0 +63:207.948 Sensors-Accelerometer.AccX 0.0595703 +63:207.948 Sensors-Accelerometer.AccY -0.185303 +63:207.948 Sensors-Accelerometer.AccZ 0.978027 +64:155.531 Sensors-Magnetometer.MagX 0xfe6b +64:155.653 Sensors-Magnetometer.MagY 0x24c +64:155.773 Sensors-Magnetometer.MagZ 0xcd8 +64:763.184 Sensors-Slider 0x0 +64:903.224 Sensors-Light 0.52462 +65:165.492 Sensors-Accelerometer.AccX 0.0488281 +65:165.492 Sensors-Accelerometer.AccY -0.113525 +65:165.492 Sensors-Accelerometer.AccZ 0.977539 +65:605.580 Sensors-Magnetometer.MagX 0xfe3a +65:605.702 Sensors-Magnetometer.MagY 0x286 +65:605.822 Sensors-Magnetometer.MagZ 0xccf +65:608.268 Sensors-Accelerometer.AccX 0.232422 +65:608.268 Sensors-Accelerometer.AccY -0.026123 +65:608.268 Sensors-Accelerometer.AccZ 0.924805 +65:653.227 Sensors-Light 0.411139 +65:685.495 Sensors-Accelerometer.AccX 0.349609 +65:685.495 Sensors-Accelerometer.AccY 0.0151367 +65:685.495 Sensors-Accelerometer.AccZ 0.967285 +65:705.624 Sensors-Magnetometer.MagX 0xfe2d +65:705.747 Sensors-Magnetometer.MagY 0x2c9 +65:705.866 Sensors-Magnetometer.MagZ 0xcb0 +65:765.495 Sensors-Accelerometer.AccX 0.501465 +65:765.495 Sensors-Accelerometer.AccY 0.0737305 +65:765.495 Sensors-Accelerometer.AccZ 0.84375 +65:803.226 Sensors-Light 0.305913 +65:805.933 Sensors-Magnetometer.MagX 0xfe14 +65:806.056 Sensors-Magnetometer.MagY 0x30e +65:806.175 Sensors-Magnetometer.MagZ 0xc80 +65:844.817 Sensors-Accelerometer.AccX 0.638184 +65:844.817 Sensors-Accelerometer.AccY 0.146973 +65:844.817 Sensors-Accelerometer.AccZ 0.787109 +65:925.496 Sensors-Accelerometer.AccX 0.6875 +65:925.496 Sensors-Accelerometer.AccY 0.231934 +65:925.496 Sensors-Accelerometer.AccZ 0.641113 +65:955.584 Sensors-Magnetometer.MagX 0xfdd1 +65:955.706 Sensors-Magnetometer.MagY 0x34c +65:955.826 Sensors-Magnetometer.MagZ 0xc4d +66:103.226 Sensors-Light 0.205585 +66:165.495 Sensors-Accelerometer.AccX 0.804688 +66:165.495 Sensors-Accelerometer.AccY 0.347656 +66:165.495 Sensors-Accelerometer.AccZ 0.506836 +66:255.585 Sensors-Magnetometer.MagX 0xfda2 +66:255.708 Sensors-Magnetometer.MagY 0x375 +66:255.827 Sensors-Magnetometer.MagZ 0xc0b +66:285.495 Sensors-Accelerometer.AccX 0.933105 +66:285.495 Sensors-Accelerometer.AccY 0.378906 +66:285.495 Sensors-Accelerometer.AccZ 0.445801 +66:325.495 Sensors-Accelerometer.AccX 0.77832 +66:325.495 Sensors-Accelerometer.AccY 0.355469 +66:325.495 Sensors-Accelerometer.AccZ 0.408203 +66:407.996 Sensors-Accelerometer.AccX 0.828125 +66:407.996 Sensors-Accelerometer.AccY 0.364258 +66:407.996 Sensors-Accelerometer.AccZ 0.302734 +66:505.646 Sensors-Magnetometer.MagX 0xfdaa +66:505.769 Sensors-Magnetometer.MagY 0x38f +66:505.888 Sensors-Magnetometer.MagZ 0xbd1 +66:525.495 Sensors-Accelerometer.AccX 0.689453 +66:525.495 Sensors-Accelerometer.AccY 0.325195 +66:525.495 Sensors-Accelerometer.AccZ 0.30957 +66:565.495 Sensors-Accelerometer.AccX 0.90918 +66:565.495 Sensors-Accelerometer.AccY 0.311035 +66:565.495 Sensors-Accelerometer.AccZ 0.240723 +66:723.184 Sensors-Slider 0x0 +66:807.937 Sensors-Accelerometer.AccX 0.770996 +66:807.937 Sensors-Accelerometer.AccY 0.245605 +66:807.937 Sensors-Accelerometer.AccZ 0.196777 +66:885.495 Sensors-Accelerometer.AccX 0.920898 +66:885.495 Sensors-Accelerometer.AccY 0.257812 +66:885.495 Sensors-Accelerometer.AccZ 0.291992 +66:965.495 Sensors-Accelerometer.AccX 0.808594 +66:965.495 Sensors-Accelerometer.AccY 0.237305 +66:965.495 Sensors-Accelerometer.AccZ 0.293945 +67:007.919 Sensors-Accelerometer.AccX 0.95459 +67:007.919 Sensors-Accelerometer.AccY 0.286133 +67:007.919 Sensors-Accelerometer.AccZ 0.285156 +67:053.227 Sensors-Light 0.488258 +67:103.226 Sensors-Light 0.750942 +67:165.495 Sensors-Accelerometer.AccX 0.853027 +67:165.495 Sensors-Accelerometer.AccY 0.286133 +67:165.495 Sensors-Accelerometer.AccZ 0.230957 +67:203.226 Sensors-Light 0.64033 +67:253.226 Sensors-Light 0.520088 +67:303.226 Sensors-Light 0.376349 +67:503.226 Sensors-Light 0.497627 +67:653.226 Sensors-Light 0.644862 +67:803.227 Sensors-Light 0.748791 +68:003.226 Sensors-Light 0.465141 +68:053.226 Sensors-Light 0.223102 +68:683.184 Sensors-Slider 0x0 +68:953.226 Sensors-Light 0.47303 +68:955.989 Sensors-Magnetometer.MagX 0xfdba +68:956.112 Sensors-Magnetometer.MagY 0x389 +68:956.231 Sensors-Magnetometer.MagZ 0xb9f +69:003.225 Sensors-Light 0.731655 +69:103.226 Sensors-Light 0.429664 +69:125.493 Sensors-Accelerometer.AccX 0.862305 +69:125.493 Sensors-Accelerometer.AccY 0.307129 +69:125.493 Sensors-Accelerometer.AccZ 0.243164 +69:153.226 Sensors-Light 0.236774 +69:753.226 Sensors-Light 0.348501 +69:853.226 Sensors-Light 0.55198 +69:903.226 Sensors-Light 0.688655 +69:953.226 Sensors-Light 0.791226 +70:053.225 Sensors-Light 0.48333 +70:103.226 Sensors-Light 0.187915 +70:643.183 Sensors-Slider 0x0 +70:753.226 Sensors-Light 0.524895 +70:803.226 Sensors-Light 0.746777 +70:953.226 Sensors-Light 0.567834 +71:085.492 Sensors-Accelerometer.AccX 0.922852 +71:085.492 Sensors-Accelerometer.AccY 0.291992 +71:085.492 Sensors-Accelerometer.AccZ 0.232422 +71:405.583 Sensors-Magnetometer.MagX 0xfdc0 +71:405.705 Sensors-Magnetometer.MagY 0x38f +71:405.825 Sensors-Magnetometer.MagZ 0xba8 +71:453.226 Sensors-Light 0.676951 +71:603.226 Sensors-Light 0.834699 +71:703.226 Sensors-Light 0.480552 +71:753.226 Sensors-Light 0.15993 +72:605.607 Sensors-Slider 0x0 +73:044.813 Sensors-Accelerometer.AccX 0.873535 +73:044.813 Sensors-Accelerometer.AccY 0.242188 +73:044.813 Sensors-Accelerometer.AccZ 0.214844 +73:125.496 Sensors-Accelerometer.AccX 0.910645 +73:125.496 Sensors-Accelerometer.AccY 0.233398 +73:125.496 Sensors-Accelerometer.AccZ 0.36084 +73:365.497 Sensors-Accelerometer.AccX 0.917969 +73:365.497 Sensors-Accelerometer.AccY 0.258789 +73:365.497 Sensors-Accelerometer.AccZ 0.260742 +73:407.945 Sensors-Accelerometer.AccX 0.817871 +73:407.945 Sensors-Accelerometer.AccY 0.223633 +73:407.945 Sensors-Accelerometer.AccZ 0.353027 +73:485.494 Sensors-Accelerometer.AccX 0.9375 +73:485.494 Sensors-Accelerometer.AccY 0.239258 +73:485.494 Sensors-Accelerometer.AccZ 0.34082 +73:525.494 Sensors-Accelerometer.AccX 0.782227 +73:525.494 Sensors-Accelerometer.AccY 0.217773 +73:525.494 Sensors-Accelerometer.AccZ 0.413086 +73:607.880 Sensors-Accelerometer.AccX 0.901367 +73:607.880 Sensors-Accelerometer.AccY 0.291992 +73:607.880 Sensors-Accelerometer.AccZ 0.356934 +73:644.816 Sensors-Accelerometer.AccX 1.19336 +73:644.816 Sensors-Accelerometer.AccY 0.114258 +73:644.816 Sensors-Accelerometer.AccZ 0.589844 +73:685.495 Sensors-Accelerometer.AccX 0.759766 +73:685.495 Sensors-Accelerometer.AccY 0.26123 +73:685.495 Sensors-Accelerometer.AccZ 0.335938 +73:725.499 Sensors-Accelerometer.AccX 0.811523 +73:725.499 Sensors-Accelerometer.AccY 0.190918 +73:725.499 Sensors-Accelerometer.AccZ 0.212891 +73:765.498 Sensors-Accelerometer.AccX 0.763672 +73:765.498 Sensors-Accelerometer.AccY 0.202148 +73:765.498 Sensors-Accelerometer.AccZ 0.44873 +73:855.609 Sensors-Magnetometer.MagX 0xfdb8 +73:855.731 Sensors-Magnetometer.MagY 0x388 +73:855.851 Sensors-Magnetometer.MagZ 0xbd4 +73:965.495 Sensors-Accelerometer.AccX 0.87793 +73:965.495 Sensors-Accelerometer.AccY 0.300781 +73:965.495 Sensors-Accelerometer.AccZ 0.379395 +74:043.194 Sensors-Slider 0x24 +74:083.194 Sensors-Slider 0x20 +74:123.194 Sensors-Slider 0x25 +74:163.193 Sensors-Slider 0x2b +74:203.225 Sensors-Light 0.231998 +74:206.019 Sensors-Slider 0x2f +74:243.194 Sensors-Slider 0x31 +74:244.930 Sensors-Accelerometer.AccX 0.844727 +74:244.930 Sensors-Accelerometer.AccY 0.200195 +74:244.930 Sensors-Accelerometer.AccZ 0.429199 +74:283.194 Sensors-Slider 0x32 +74:323.194 Sensors-Slider 0x34 +74:405.610 Sensors-Slider 0x37 +74:408.025 Sensors-Accelerometer.AccX 0.793457 +74:408.025 Sensors-Accelerometer.AccY 0.133789 +74:408.025 Sensors-Accelerometer.AccZ 0.556152 +74:443.194 Sensors-Slider 0x3a +74:523.194 Sensors-Slider 0x3c +74:555.584 Sensors-Magnetometer.MagX 0xfdeb +74:555.706 Sensors-Magnetometer.MagY 0x37d +74:555.826 Sensors-Magnetometer.MagZ 0xbeb +74:643.193 Sensors-Slider 0x3d +74:644.928 Sensors-Accelerometer.AccX 0.769043 +74:644.928 Sensors-Accelerometer.AccY 0.0292969 +74:644.928 Sensors-Accelerometer.AccZ 0.563965 +74:683.193 Sensors-Slider 0x3f +74:723.193 Sensors-Slider 0x40 +74:763.193 Sensors-Slider 0x41 +74:805.704 Sensors-Slider 0x45 +74:843.193 Sensors-Slider 0x4d +74:853.226 Sensors-Light 0.366888 +74:883.193 Sensors-Slider 0x52 +74:903.226 Sensors-Light 0.478981 +74:923.194 Sensors-Slider 0x51 +75:005.708 Sensors-Slider 0x52 +75:123.194 Sensors-Slider 0x51 +75:163.194 Sensors-Slider 0x50 +75:165.608 Sensors-Accelerometer.AccX 0.762695 +75:165.608 Sensors-Accelerometer.AccY 0.0766602 +75:165.608 Sensors-Accelerometer.AccZ 0.671875 +75:205.613 Sensors-Magnetometer.MagX 0xfde2 +75:205.736 Sensors-Magnetometer.MagY 0x369 +75:205.855 Sensors-Magnetometer.MagZ 0xc20 +75:206.000 Sensors-Slider 0x4f +75:243.193 Sensors-Slider 0x4d +75:244.927 Sensors-Accelerometer.AccX 0.639648 +75:244.927 Sensors-Accelerometer.AccY 0.0654297 +75:244.927 Sensors-Accelerometer.AccZ 0.689941 +75:283.193 Sensors-Slider 0x4c +75:323.193 Sensors-Slider 0x4b +75:363.194 Sensors-Slider 0x49 +75:365.609 Sensors-Accelerometer.AccX 0.647461 +75:365.609 Sensors-Accelerometer.AccY 0.0893555 +75:365.609 Sensors-Accelerometer.AccZ 0.794922 +75:403.226 Sensors-Light 0.366583 +75:405.944 Sensors-Slider 0x48 +75:443.194 Sensors-Slider 0x46 +75:483.194 Sensors-Slider 0x45 +75:523.193 Sensors-Slider 0x43 +75:563.193 Sensors-Slider 0x41 +75:605.649 Sensors-Slider 0x40 +75:608.065 Sensors-Accelerometer.AccX 0.650391 +75:608.065 Sensors-Accelerometer.AccY 0.132324 +75:608.065 Sensors-Accelerometer.AccZ 0.682617 +75:643.194 Sensors-Slider 0x3f +75:683.193 Sensors-Slider 0x3d +75:723.194 Sensors-Slider 0x3a +75:763.194 Sensors-Slider 0x36 +75:805.596 Sensors-Slider 0x34 +75:843.194 Sensors-Slider 0x32 +75:883.194 Sensors-Slider 0x31 +75:923.194 Sensors-Slider 0x2f +75:963.194 Sensors-Slider 0x2e +76:005.667 Sensors-Slider 0x2d +76:083.194 Sensors-Slider 0x2e +76:123.194 Sensors-Slider 0x30 +76:125.606 Sensors-Accelerometer.AccX 0.773438 +76:125.606 Sensors-Accelerometer.AccY 0.160645 +76:125.606 Sensors-Accelerometer.AccZ 0.597168 +76:163.194 Sensors-Slider 0x33 +76:205.589 Sensors-Slider 0x37 +76:243.194 Sensors-Slider 0x39 +76:283.194 Sensors-Slider 0x3a +76:323.193 Sensors-Slider 0x3c +76:363.193 Sensors-Slider 0x3e +76:405.674 Sensors-Slider 0x3f +76:443.193 Sensors-Slider 0x41 +76:483.193 Sensors-Slider 0x42 +76:523.194 Sensors-Slider 0x45 +76:563.193 Sensors-Slider 0x48 +76:605.704 Sensors-Slider 0x4f +76:643.193 Sensors-Slider 0x54 +76:683.192 Sensors-Slider 0x5f +76:725.504 Sensors-Accelerometer.AccX 0.740234 +76:725.504 Sensors-Accelerometer.AccY 0.0546875 +76:725.504 Sensors-Accelerometer.AccZ 0.638672 +76:843.193 Sensors-Slider 0x5d +76:883.193 Sensors-Slider 0x5c +76:923.192 Sensors-Slider 0x5e +76:963.185 Sensors-Slider 0x0 +77:007.912 Sensors-Accelerometer.AccX 0.45459 +77:007.912 Sensors-Accelerometer.AccY 0.0683594 +77:007.912 Sensors-Accelerometer.AccZ 0.64502 +77:044.814 Sensors-Accelerometer.AccX 0.749023 +77:044.814 Sensors-Accelerometer.AccY 0.103027 +77:044.814 Sensors-Accelerometer.AccZ 0.696289 +77:207.878 Sensors-Accelerometer.AccX 0.595215 +77:207.878 Sensors-Accelerometer.AccY 0.136719 +77:207.878 Sensors-Accelerometer.AccZ 0.672852 +77:285.495 Sensors-Accelerometer.AccX 0.700195 +77:285.495 Sensors-Accelerometer.AccY 0.196289 +77:285.495 Sensors-Accelerometer.AccZ 0.679199 +77:353.226 Sensors-Light 0.484276 +77:403.226 Sensors-Light 0.594293 +77:453.226 Sensors-Light 0.479927 +77:655.576 Sensors-Magnetometer.MagX 0xfdb9 +77:655.698 Sensors-Magnetometer.MagY 0x369 +77:655.817 Sensors-Magnetometer.MagZ 0xc36 +77:756.251 Buttons-SW1 0x1 +77:805.674 Sensors-Magnetometer.MagX 0xfdbb +77:805.797 Sensors-Magnetometer.MagY 0x355 +77:805.916 Sensors-Magnetometer.MagZ 0xc77 +77:806.061 Sensors-Slider 0x63 +77:808.473 Sensors-Accelerometer.AccX 0.538574 +77:808.473 Sensors-Accelerometer.AccY 0.172852 +77:808.473 Sensors-Accelerometer.AccZ 0.706543 +77:883.184 Sensors-Slider 0x0 +77:885.597 Sensors-Accelerometer.AccX 0.59082 +77:885.597 Sensors-Accelerometer.AccY 0.125 +77:885.597 Sensors-Accelerometer.AccZ 0.813477 +77:914.423 Buttons-SW1 0x0 +77:965.494 Sensors-Accelerometer.AccX 0.754883 +77:965.494 Sensors-Accelerometer.AccY 0.239258 +77:965.494 Sensors-Accelerometer.AccZ 0.692383 +78:007.919 Sensors-Accelerometer.AccX 0.938477 +78:007.919 Sensors-Accelerometer.AccY 0.186035 +78:007.919 Sensors-Accelerometer.AccZ 0.822266 +78:044.816 Sensors-Accelerometer.AccX 0.569336 +78:044.816 Sensors-Accelerometer.AccY 0.18457 +78:044.816 Sensors-Accelerometer.AccZ 0.738281 +78:103.226 Sensors-Light 0.268879 +78:165.498 Sensors-Accelerometer.AccX 0.637207 +78:165.498 Sensors-Accelerometer.AccY 0.138672 +78:165.498 Sensors-Accelerometer.AccZ 0.636719 +78:244.819 Sensors-Accelerometer.AccX 0.614746 +78:244.819 Sensors-Accelerometer.AccY 0.251465 +78:244.819 Sensors-Accelerometer.AccZ 1.29053 +78:255.586 Sensors-Magnetometer.MagX 0xfdc5 +78:255.709 Sensors-Magnetometer.MagY 0x35a +78:255.828 Sensors-Magnetometer.MagZ 0xc3b +78:285.498 Sensors-Accelerometer.AccX 0.62207 +78:285.498 Sensors-Accelerometer.AccY 0.264648 +78:285.498 Sensors-Accelerometer.AccZ 0.680664 +78:325.495 Sensors-Accelerometer.AccX 0.657227 +78:325.495 Sensors-Accelerometer.AccY 0.155273 +78:325.495 Sensors-Accelerometer.AccZ 0.55957 +78:365.497 Sensors-Accelerometer.AccX 0.609375 +78:365.497 Sensors-Accelerometer.AccY 0.181641 +78:365.497 Sensors-Accelerometer.AccZ 0.685547 +78:525.494 Sensors-Accelerometer.AccX 0.762695 +78:525.494 Sensors-Accelerometer.AccY 0.202148 +78:525.494 Sensors-Accelerometer.AccZ 0.727539 +78:644.819 Sensors-Accelerometer.AccX 0.786133 +78:644.819 Sensors-Accelerometer.AccY 0.172852 +78:644.819 Sensors-Accelerometer.AccZ 0.595703 +78:685.494 Sensors-Accelerometer.AccX 0.661133 +78:685.494 Sensors-Accelerometer.AccY 0.159668 +78:685.494 Sensors-Accelerometer.AccZ 0.540527 +78:725.495 Sensors-Accelerometer.AccX 0.789062 +78:725.495 Sensors-Accelerometer.AccY 0.131348 +78:725.495 Sensors-Accelerometer.AccZ 0.556152 +78:739.447 Buttons-SW3 0x1 +78:755.673 Sensors-Magnetometer.MagX 0xfdfc +78:755.796 Sensors-Magnetometer.MagY 0x34e +78:755.915 Sensors-Magnetometer.MagZ 0xc0c +78:965.493 Sensors-Accelerometer.AccX 0.665039 +78:965.493 Sensors-Accelerometer.AccY 0.0732422 +78:965.493 Sensors-Accelerometer.AccZ 0.562012 +79:044.817 Sensors-Accelerometer.AccX 0.757812 +79:044.817 Sensors-Accelerometer.AccY -0.0378418 +79:044.817 Sensors-Accelerometer.AccZ 0.802246 +79:085.494 Sensors-Accelerometer.AccX 0.654297 +79:085.494 Sensors-Accelerometer.AccY 0.0317383 +79:085.494 Sensors-Accelerometer.AccZ 0.638672 +79:125.498 Sensors-Accelerometer.AccX 0.655762 +79:125.498 Sensors-Accelerometer.AccY -0.0305176 +79:125.498 Sensors-Accelerometer.AccZ 0.75293 +79:150.553 Buttons-SW3 0x0 +79:155.596 Sensors-Magnetometer.MagX 0xfe32 +79:155.718 Sensors-Magnetometer.MagY 0x334 +79:155.838 Sensors-Magnetometer.MagZ 0xc35 +79:207.880 Sensors-Accelerometer.AccX 0.543457 +79:207.880 Sensors-Accelerometer.AccY -0.0534668 +79:207.880 Sensors-Accelerometer.AccZ 0.860352 +79:244.816 Sensors-Accelerometer.AccX 0.664062 +79:244.816 Sensors-Accelerometer.AccY -0.0065918 +79:244.816 Sensors-Accelerometer.AccZ 0.720703 +79:345.094 Buttons-SW3 0x1 +79:485.497 Sensors-Accelerometer.AccX 0.603027 +79:485.497 Sensors-Accelerometer.AccY 0.00244141 +79:485.497 Sensors-Accelerometer.AccZ 0.511719 +79:487.806 Buttons-SW3 0x0 +79:525.498 Sensors-Accelerometer.AccX 0.553711 +79:525.498 Sensors-Accelerometer.AccY -0.095459 +79:525.498 Sensors-Accelerometer.AccZ 0.749512 +79:598.547 Buttons-SW3 0x1 +79:644.816 Sensors-Accelerometer.AccX 0.667969 +79:644.816 Sensors-Accelerometer.AccY -0.0319824 +79:644.816 Sensors-Accelerometer.AccZ 0.787109 +79:725.494 Sensors-Accelerometer.AccX 0.521973 +79:725.494 Sensors-Accelerometer.AccY -0.0310059 +79:725.494 Sensors-Accelerometer.AccZ 0.747559 +79:727.682 Buttons-SW3 0x0 +79:807.919 Sensors-Accelerometer.AccX 0.645508 +79:807.919 Sensors-Accelerometer.AccY -0.0661621 +79:807.919 Sensors-Accelerometer.AccZ 0.686523 +79:825.219 Buttons-SW3 0x1 +79:843.184 Sensors-Slider 0x0 +79:844.918 Sensors-Accelerometer.AccX 0.572754 +79:844.918 Sensors-Accelerometer.AccY -0.057373 +79:844.918 Sensors-Accelerometer.AccZ 0.798828 +79:950.589 Buttons-SW3 0x0 +80:007.983 Sensors-Accelerometer.AccX 0.677734 +80:007.983 Sensors-Accelerometer.AccY -0.0358887 +80:007.983 Sensors-Accelerometer.AccZ 0.680176 +80:021.640 Buttons-SW3 0x1 +80:085.500 Sensors-Accelerometer.AccX 0.706055 +80:085.500 Sensors-Accelerometer.AccY 0.0322266 +80:085.500 Sensors-Accelerometer.AccZ 0.82959 +80:125.498 Sensors-Accelerometer.AccX 0.643555 +80:125.498 Sensors-Accelerometer.AccY 0.000488281 +80:125.498 Sensors-Accelerometer.AccZ 0.671875 +80:156.069 Buttons-SW3 0x0 +80:244.816 Sensors-Accelerometer.AccX 0.473633 +80:244.816 Sensors-Accelerometer.AccY 0.0151367 +80:244.816 Sensors-Accelerometer.AccZ 0.779297 +80:285.495 Sensors-Accelerometer.AccX 0.77832 +80:285.495 Sensors-Accelerometer.AccY 0.0537109 +80:285.495 Sensors-Accelerometer.AccZ 0.636719 +80:325.495 Sensors-Accelerometer.AccX 0.641602 +80:325.495 Sensors-Accelerometer.AccY 0.0898438 +80:325.495 Sensors-Accelerometer.AccZ 0.793457 +80:355.577 Sensors-Magnetometer.MagX 0xfdfe +80:355.700 Sensors-Magnetometer.MagY 0x347 +80:355.820 Sensors-Magnetometer.MagZ 0xc3f +80:407.988 Sensors-Accelerometer.AccX 0.564453 +80:407.988 Sensors-Accelerometer.AccY 0.125977 +80:407.988 Sensors-Accelerometer.AccZ 0.901367 +80:485.497 Sensors-Accelerometer.AccX 0.641602 +80:485.497 Sensors-Accelerometer.AccY 0.132324 +80:485.497 Sensors-Accelerometer.AccZ 0.652344 +80:553.224 Sensors-Light 0.461479 +80:603.226 Sensors-Light 0.571557 +80:703.226 Sensors-Light 0.458045 +80:965.499 Sensors-Accelerometer.AccX 0.700195 +80:965.499 Sensors-Accelerometer.AccY 0.121094 +80:965.499 Sensors-Accelerometer.AccZ 0.781738 +81:007.922 Sensors-Accelerometer.AccX 0.679688 +81:007.922 Sensors-Accelerometer.AccY 0.125977 +81:007.922 Sensors-Accelerometer.AccZ 0.65918 +81:053.227 Sensors-Light 0.564675 +81:085.497 Sensors-Accelerometer.AccX 0.697266 +81:085.497 Sensors-Accelerometer.AccY 0.125977 +81:085.497 Sensors-Accelerometer.AccZ 0.762695 +81:193.813 Buttons-SW1 0x1 +81:207.995 Sensors-Accelerometer.AccX 0.589844 +81:207.995 Sensors-Accelerometer.AccY 0.113281 +81:207.995 Sensors-Accelerometer.AccZ 0.783691 +81:243.193 Sensors-Slider 0x63 +81:253.226 Sensors-Light 0.6701 +81:305.592 Sensors-Magnetometer.MagX 0xfdec +81:305.715 Sensors-Magnetometer.MagY 0x32b +81:305.834 Sensors-Magnetometer.MagZ 0xc72 +81:323.185 Sensors-Slider 0x0 +81:341.032 Buttons-SW1 0x0 +81:444.816 Sensors-Accelerometer.AccX 0.692871 +81:444.816 Sensors-Accelerometer.AccY 0.0537109 +81:444.816 Sensors-Accelerometer.AccZ 0.90918 +81:485.493 Sensors-Accelerometer.AccX 0.507812 +81:485.493 Sensors-Accelerometer.AccY 0.132812 +81:485.493 Sensors-Accelerometer.AccZ 0.758301 +81:493.310 Buttons-SW1 0x1 +81:607.879 Sensors-Accelerometer.AccX 0.611816 +81:607.879 Sensors-Accelerometer.AccY 0.0751953 +81:607.879 Sensors-Accelerometer.AccZ 0.910156 +81:624.919 Buttons-SW1 0x0 +81:644.820 Sensors-Accelerometer.AccX 0.515137 +81:644.820 Sensors-Accelerometer.AccY 0.0810547 +81:644.820 Sensors-Accelerometer.AccZ 0.751465 +81:725.498 Sensors-Accelerometer.AccX 0.585938 +81:725.498 Sensors-Accelerometer.AccY 0.0844727 +81:725.498 Sensors-Accelerometer.AccZ 0.950195 +81:748.563 Buttons-SW1 0x1 +81:765.500 Sensors-Accelerometer.AccX 0.496582 +81:765.500 Sensors-Accelerometer.AccY 0.0634766 +81:765.500 Sensors-Accelerometer.AccZ 0.768066 +81:808.015 Sensors-Accelerometer.AccX 0.503906 +81:808.015 Sensors-Accelerometer.AccY 0.059082 +81:808.015 Sensors-Accelerometer.AccZ 0.939941 +81:885.498 Sensors-Accelerometer.AccX 0.40918 +81:885.498 Sensors-Accelerometer.AccY 0.115723 +81:885.498 Sensors-Accelerometer.AccZ 0.625488 +81:900.016 Buttons-SW1 0x0 +81:925.498 Sensors-Accelerometer.AccX 0.499512 +81:925.498 Sensors-Accelerometer.AccY 0.0966797 +81:925.498 Sensors-Accelerometer.AccZ 0.896973 +82:085.493 Sensors-Accelerometer.AccX 0.753418 +82:085.493 Sensors-Accelerometer.AccY 0.120117 +82:085.493 Sensors-Accelerometer.AccZ 0.855957 +82:103.225 Sensors-Light 0.365667 +82:125.493 Sensors-Accelerometer.AccX 0.334961 +82:125.493 Sensors-Accelerometer.AccY 0.0830078 +82:125.493 Sensors-Accelerometer.AccZ 0.8125 +82:165.495 Sensors-Accelerometer.AccX 0.479492 +82:165.495 Sensors-Accelerometer.AccY 0.046875 +82:165.495 Sensors-Accelerometer.AccZ 0.835938 +82:244.817 Sensors-Accelerometer.AccX 0.709961 +82:244.817 Sensors-Accelerometer.AccY 0.0483398 +82:244.817 Sensors-Accelerometer.AccZ 0.491699 +82:285.493 Sensors-Accelerometer.AccX 0.547852 +82:285.493 Sensors-Accelerometer.AccY 0.106445 +82:285.493 Sensors-Accelerometer.AccZ 0.784668 +82:365.494 Sensors-Accelerometer.AccX 0.658203 +82:365.494 Sensors-Accelerometer.AccY 0.0214844 +82:365.494 Sensors-Accelerometer.AccZ 1.0249 +82:407.972 Sensors-Accelerometer.AccX 0.559082 +82:407.972 Sensors-Accelerometer.AccY 0.0473633 +82:407.972 Sensors-Accelerometer.AccZ 0.878418 +82:444.820 Sensors-Accelerometer.AccX 0.584961 +82:444.820 Sensors-Accelerometer.AccY 0.046875 +82:444.820 Sensors-Accelerometer.AccZ 0.765625 +83:012.582 Buttons-SW3 0x1 +83:174.587 Buttons-SW3 0x0 +83:283.184 Sensors-Slider 0x0 +83:714.585 Buttons-SW3 0x1 +83:755.544 Sensors-Magnetometer.MagX 0xfe09 +83:755.666 Sensors-Magnetometer.MagY 0x32f +83:755.786 Sensors-Magnetometer.MagZ 0xc59 +83:841.020 Buttons-SW3 0x0 +84:217.536 Buttons-SW3 0x1 +84:318.240 Buttons-SW3 0x0 +84:407.862 Sensors-Accelerometer.AccX 0.602539 +84:407.862 Sensors-Accelerometer.AccY 0.0317383 +84:407.862 Sensors-Accelerometer.AccZ 0.773438 +84:553.225 Sensors-Light 0.371649 +84:603.088 Buttons-SW3 0x1 +84:677.101 Buttons-SW3 0x0 +85:030.842 Buttons-SW3 0x1 +85:120.657 Buttons-SW3 0x0 +85:243.184 Sensors-Slider 0x0 +85:603.227 Sensors-Light 0.473671 +85:653.226 Sensors-Light 0.603006 +85:885.499 Sensors-Accelerometer.AccX 0.669922 +85:885.499 Sensors-Accelerometer.AccY 0.043457 +85:885.499 Sensors-Accelerometer.AccZ 0.900879 +85:925.499 Sensors-Accelerometer.AccX 0.668945 +85:925.499 Sensors-Accelerometer.AccY 0.0307617 +85:925.499 Sensors-Accelerometer.AccZ 0.708984 +86:205.598 Sensors-Magnetometer.MagX 0xfe19 +86:205.720 Sensors-Magnetometer.MagY 0x328 +86:205.840 Sensors-Magnetometer.MagZ 0xc4e +86:353.226 Sensors-Light 0.703151 +86:365.494 Sensors-Accelerometer.AccX 0.541992 +86:365.494 Sensors-Accelerometer.AccY 0.0727539 +86:365.494 Sensors-Accelerometer.AccZ 0.800781 +86:565.494 Sensors-Accelerometer.AccX 0.662598 +86:565.494 Sensors-Accelerometer.AccY 0.0415039 +86:565.494 Sensors-Accelerometer.AccZ 0.867188 +86:607.918 Sensors-Accelerometer.AccX 0.494629 +86:607.918 Sensors-Accelerometer.AccY 0.0380859 +86:607.918 Sensors-Accelerometer.AccZ 0.794434 +86:685.496 Sensors-Accelerometer.AccX 0.579102 +86:685.496 Sensors-Accelerometer.AccY 0.0966797 +86:685.496 Sensors-Accelerometer.AccZ 0.894531 +86:725.497 Sensors-Accelerometer.AccX 0.550781 +86:725.497 Sensors-Accelerometer.AccY 0.0517578 +86:725.497 Sensors-Accelerometer.AccZ 0.79248 +87:205.673 Sensors-Slider 0x0 +87:523.193 Sensors-Slider 0x64 +87:563.193 Sensors-Slider 0x63 +87:683.185 Sensors-Slider 0x0 +87:923.192 Sensors-Slider 0x63 +87:939.000 Buttons-SW1 0x1 +88:230.416 Buttons-SW1 0x0 +88:243.185 Sensors-Slider 0x0 +88:563.193 Sensors-Slider 0x64 +88:605.693 Sensors-Slider 0x63 +88:655.607 Sensors-Magnetometer.MagX 0xfe07 +88:655.730 Sensors-Magnetometer.MagY 0x32e +88:655.849 Sensors-Magnetometer.MagZ 0xc55 +88:685.500 Sensors-Accelerometer.AccX 0.588867 +88:685.500 Sensors-Accelerometer.AccY 0.0400391 +88:685.500 Sensors-Accelerometer.AccZ 0.792969 +88:707.985 Buttons-SW1 0x1 +88:803.225 Sensors-Light 0.681895 +88:843.193 Sensors-Slider 0x61 +88:883.193 Sensors-Slider 0x63 +89:043.185 Sensors-Slider 0x0 +89:051.359 Buttons-SW1 0x0 +89:323.193 Sensors-Slider 0x63 +89:531.225 Buttons-SW1 0x1 +89:913.368 Buttons-SW1 0x0 +89:923.185 Sensors-Slider 0x0 +89:963.193 Sensors-Slider 0x63 +90:281.728 Buttons-SW1 0x1 +90:283.192 Sensors-Slider 0x61 +90:323.193 Sensors-Slider 0x63 +90:443.193 Sensors-Slider 0x62 +90:483.193 Sensors-Slider 0x63 +90:644.823 Sensors-Accelerometer.AccX 0.576172 +90:644.823 Sensors-Accelerometer.AccY 0.0546875 +90:644.823 Sensors-Accelerometer.AccZ 0.811523 +90:697.091 Buttons-SW1 0x0 +90:723.185 Sensors-Slider 0x0 +90:853.226 Sensors-Light 0.788525 +90:923.193 Sensors-Slider 0x63 +91:090.808 Buttons-SW1 0x1 +91:105.544 Sensors-Magnetometer.MagX 0xfe05 +91:105.666 Sensors-Magnetometer.MagY 0x32a +91:105.786 Sensors-Magnetometer.MagZ 0xc61 +91:163.193 Sensors-Slider 0x62 +91:483.193 Sensors-Slider 0x63 +91:543.046 Buttons-SW1 0x0 +91:553.227 Sensors-Light 0.688182 +91:563.185 Sensors-Slider 0x0 +91:963.193 Sensors-Slider 0x63 +91:996.254 Buttons-SW1 0x1 +92:083.193 Sensors-Slider 0x62 +92:123.192 Sensors-Slider 0x63 +92:205.633 Sensors-Slider 0x62 +92:283.193 Sensors-Slider 0x63 +92:363.193 Sensors-Slider 0x62 +92:405.579 Sensors-Slider 0x61 +92:443.193 Sensors-Slider 0x63 +92:607.987 Sensors-Accelerometer.AccX 0.563477 +92:607.987 Sensors-Accelerometer.AccY 0.0454102 +92:607.987 Sensors-Accelerometer.AccZ 0.816406 +92:653.227 Sensors-Light 0.789639 +92:952.441 Buttons-SW1 0x0 +92:963.184 Sensors-Slider 0x0 +93:523.193 Sensors-Slider 0x63 +93:555.611 Sensors-Magnetometer.MagX 0xfe06 +93:555.734 Sensors-Magnetometer.MagY 0x32a +93:555.853 Sensors-Magnetometer.MagZ 0xc57 +93:591.892 Buttons-SW1 0x1 +93:605.636 Sensors-Slider 0x62 +94:283.192 Sensors-Slider 0x61 +94:323.193 Sensors-Slider 0x62 +94:565.501 Sensors-Accelerometer.AccX 0.583984 +94:565.501 Sensors-Accelerometer.AccY 0.0444336 +94:565.501 Sensors-Accelerometer.AccZ 0.807617 +94:723.185 Sensors-Slider 0x0 +94:765.497 Sensors-Accelerometer.AccX 0.606445 +94:765.497 Sensors-Accelerometer.AccY 0.0571289 +94:765.497 Sensors-Accelerometer.AccZ 0.913086 +94:779.710 Buttons-SW1 0x0 +94:803.226 Sensors-Light 0.628473 +94:808.242 Sensors-Accelerometer.AccX 0.625 +94:808.242 Sensors-Accelerometer.AccY 0.0786133 +94:808.242 Sensors-Accelerometer.AccZ 0.726074 +94:844.819 Sensors-Accelerometer.AccX 0.561523 +94:844.819 Sensors-Accelerometer.AccY 0.0473633 +94:844.819 Sensors-Accelerometer.AccZ 0.832031 +95:125.498 Sensors-Accelerometer.AccX 0.448242 +95:125.498 Sensors-Accelerometer.AccY 0.043457 +95:125.498 Sensors-Accelerometer.AccZ 0.875488 +95:153.226 Sensors-Light 0.401831 +95:163.193 Sensors-Slider 0x61 +95:165.605 Sensors-Accelerometer.AccX 0.584961 +95:165.605 Sensors-Accelerometer.AccY 0.0761719 +95:165.605 Sensors-Accelerometer.AccZ 0.790527 +95:205.611 Sensors-Slider 0x60 +95:243.193 Sensors-Slider 0x5f +95:283.193 Sensors-Slider 0x59 +95:323.193 Sensors-Slider 0x55 +95:363.193 Sensors-Slider 0x51 +95:405.564 Sensors-Slider 0x4b +95:443.193 Sensors-Slider 0x46 +95:483.193 Sensors-Slider 0x43 +95:523.193 Sensors-Slider 0x40 +95:563.193 Sensors-Slider 0x3e +95:605.646 Sensors-Slider 0x3a +95:643.194 Sensors-Slider 0x37 +95:683.194 Sensors-Slider 0x34 +95:723.194 Sensors-Slider 0x2f +95:763.194 Sensors-Slider 0x2b +95:843.194 Sensors-Slider 0x2e +95:883.194 Sensors-Slider 0x34 +95:923.193 Sensors-Slider 0x37 +95:963.194 Sensors-Slider 0x3a +96:005.546 Sensors-Magnetometer.MagX 0xfdfc +96:005.669 Sensors-Magnetometer.MagY 0x32f +96:005.788 Sensors-Magnetometer.MagZ 0xc44 +96:043.193 Sensors-Slider 0x45 +96:044.925 Sensors-Accelerometer.AccX 0.79541 +96:044.925 Sensors-Accelerometer.AccY 0.0727539 +96:044.925 Sensors-Accelerometer.AccZ 0.760254 +96:083.193 Sensors-Slider 0x46 +96:085.606 Sensors-Accelerometer.AccX 0.612793 +96:085.606 Sensors-Accelerometer.AccY 0.0703125 +96:085.606 Sensors-Accelerometer.AccZ 0.748047 +96:123.194 Sensors-Slider 0x45 +96:163.194 Sensors-Slider 0x44 +96:205.694 Sensors-Slider 0x42 +96:243.193 Sensors-Slider 0x3f +96:283.193 Sensors-Slider 0x3d +96:323.194 Sensors-Slider 0x39 +96:363.194 Sensors-Slider 0x34 +96:405.581 Sensors-Slider 0x33 +96:443.194 Sensors-Slider 0x36 +96:483.194 Sensors-Slider 0x39 +96:523.193 Sensors-Slider 0x3d +96:563.194 Sensors-Slider 0x41 +96:605.703 Sensors-Slider 0x44 +96:643.194 Sensors-Slider 0x47 +96:683.194 Sensors-Slider 0x4a +96:723.193 Sensors-Slider 0x4c +96:805.617 Sensors-Slider 0x4b +96:843.193 Sensors-Slider 0x48 +96:883.194 Sensors-Slider 0x41 +96:923.194 Sensors-Slider 0x3a +96:953.226 Sensors-Light 0.503319 +96:965.503 Sensors-Accelerometer.AccX 0.481445 +96:965.503 Sensors-Accelerometer.AccY 0.0693359 +96:965.503 Sensors-Accelerometer.AccZ 0.566406 +97:005.687 Sensors-Slider 0x3c +97:043.193 Sensors-Slider 0x3e +97:044.925 Sensors-Accelerometer.AccX 0.355469 +97:044.925 Sensors-Accelerometer.AccY 0 +97:044.925 Sensors-Accelerometer.AccZ 0.558105 +97:083.193 Sensors-Slider 0x3d +97:085.607 Sensors-Accelerometer.AccX 0.318359 +97:085.607 Sensors-Accelerometer.AccY 0.0341797 +97:085.607 Sensors-Accelerometer.AccZ 0.731445 +97:103.227 Sensors-Light 0.651118 +97:106.014 Sensors-Magnetometer.MagX 0xfe1a +97:106.136 Sensors-Magnetometer.MagY 0x2f7 +97:106.256 Sensors-Magnetometer.MagZ 0xc7e +97:125.503 Sensors-Accelerometer.AccX 0.387695 +97:125.503 Sensors-Accelerometer.AccY 0.165039 +97:125.503 Sensors-Accelerometer.AccZ 0.830566 +97:165.505 Sensors-Accelerometer.AccX 0.344727 +97:165.505 Sensors-Accelerometer.AccY 0.0615234 +97:165.505 Sensors-Accelerometer.AccZ 1.03516 +97:203.227 Sensors-Light 0.768582 +97:208.358 Sensors-Accelerometer.AccX 0.431152 +97:208.358 Sensors-Accelerometer.AccY 0.129395 +97:208.358 Sensors-Accelerometer.AccZ 1.18799 +97:255.583 Sensors-Magnetometer.MagX 0xfe23 +97:255.705 Sensors-Magnetometer.MagY 0x2b1 +97:255.825 Sensors-Magnetometer.MagZ 0xc9b +97:283.194 Sensors-Slider 0x3c +97:285.606 Sensors-Accelerometer.AccX 0.315918 +97:285.606 Sensors-Accelerometer.AccY -0.0349121 +97:285.606 Sensors-Accelerometer.AccZ 1.09521 +97:323.194 Sensors-Slider 0x3a +97:325.606 Sensors-Accelerometer.AccX 0.288086 +97:325.606 Sensors-Accelerometer.AccY 0.142578 +97:325.606 Sensors-Accelerometer.AccZ 0.900879 +97:355.531 Sensors-Magnetometer.MagX 0xfe3a +97:355.654 Sensors-Magnetometer.MagY 0x26c +97:355.773 Sensors-Magnetometer.MagZ 0xcbb +97:365.507 Sensors-Accelerometer.AccX 0.225586 +97:365.507 Sensors-Accelerometer.AccY 0.0727539 +97:365.507 Sensors-Accelerometer.AccZ 1.13232 +97:443.193 Sensors-Slider 0x3f +97:444.926 Sensors-Accelerometer.AccX 0.0839844 +97:444.926 Sensors-Accelerometer.AccY 0.0708008 +97:444.926 Sensors-Accelerometer.AccZ 0.956543 +97:483.185 Sensors-Slider 0x0 +97:485.595 Sensors-Accelerometer.AccX 0.178223 +97:485.595 Sensors-Accelerometer.AccY -0.0490723 +97:485.595 Sensors-Accelerometer.AccZ 1.06348 +97:565.497 Sensors-Accelerometer.AccX 0.120605 +97:565.497 Sensors-Accelerometer.AccY 0.0561523 +97:565.497 Sensors-Accelerometer.AccZ 0.949707 +97:607.946 Sensors-Accelerometer.AccX 0.118652 +97:607.946 Sensors-Accelerometer.AccY 0.0463867 +97:607.946 Sensors-Accelerometer.AccZ 1.08057 +97:765.494 Sensors-Accelerometer.AccX 0.23877 +97:765.494 Sensors-Accelerometer.AccY 0.0527344 +97:765.494 Sensors-Accelerometer.AccZ 0.992188 +97:807.880 Sensors-Accelerometer.AccX 0.0786133 +97:807.880 Sensors-Accelerometer.AccY -0.0192871 +97:807.880 Sensors-Accelerometer.AccZ 0.921387 +97:855.585 Sensors-Magnetometer.MagX 0xfe2c +97:855.708 Sensors-Magnetometer.MagY 0x234 +97:855.827 Sensors-Magnetometer.MagZ 0xcc1 +97:885.496 Sensors-Accelerometer.AccX 0.140137 +97:885.496 Sensors-Accelerometer.AccY -0.0285645 +97:885.496 Sensors-Accelerometer.AccZ 0.585938 +97:925.498 Sensors-Accelerometer.AccX 0.0688477 +97:925.498 Sensors-Accelerometer.AccY 0.0126953 +97:925.498 Sensors-Accelerometer.AccZ 1.521 +97:965.496 Sensors-Accelerometer.AccX 0.074707 +97:965.496 Sensors-Accelerometer.AccY 0.000488281 +97:965.496 Sensors-Accelerometer.AccZ 1.00684 +99:083.194 Sensors-Slider 0x2f +99:123.194 Sensors-Slider 0x28 +99:163.194 Sensors-Slider 0x20 +99:205.601 Sensors-Slider 0x1e +99:243.193 Sensors-Slider 0x1c +99:283.194 Sensors-Slider 0x18 +99:323.194 Sensors-Slider 0x14 +99:363.194 Sensors-Slider 0x11 +99:405.642 Sensors-Slider 0x10 +99:443.194 Sensors-Slider 0x11 +99:483.193 Sensors-Slider 0x12 +99:523.193 Sensors-Slider 0x13 +99:563.193 Sensors-Slider 0x14 +99:605.644 Sensors-Slider 0x15 +99:653.224 Sensors-Light 0.786954 +99:683.193 Sensors-Slider 0x16 +99:805.581 Sensors-Slider 0x17 +99:843.185 Sensors-Slider 0x0 +99:923.194 Sensors-Slider 0x33 +99:925.603 Sensors-Accelerometer.AccX 0.00292969 +99:925.603 Sensors-Accelerometer.AccY 0.00683594 +99:925.603 Sensors-Accelerometer.AccZ 1.01074 +99:963.193 Sensors-Slider 0x32 +100:005.697 Sensors-Slider 0x0 +100:305.602 Sensors-Magnetometer.MagX 0xfe25 +100:305.727 Sensors-Magnetometer.MagY 0x21e +100:305.848 Sensors-Magnetometer.MagZ 0xccf +101:885.492 Sensors-Accelerometer.AccX 0.0126953 +101:885.492 Sensors-Accelerometer.AccY 0.00390625 +101:885.492 Sensors-Accelerometer.AccZ 0.999023 +101:925.495 Sensors-Accelerometer.AccX -0.117432 +101:925.495 Sensors-Accelerometer.AccY 0.0625 +101:925.495 Sensors-Accelerometer.AccZ 1.0249 +101:963.184 Sensors-Slider 0x0 +101:965.595 Sensors-Accelerometer.AccX 0.00976562 +101:965.595 Sensors-Accelerometer.AccY 0.00878906 +101:965.595 Sensors-Accelerometer.AccZ 1.00488 +102:103.225 Sensors-Light 0.807767 +102:303.226 Sensors-Light 0.669718 +102:453.226 Sensors-Light 0.568551 +102:755.594 Sensors-Magnetometer.MagX 0xfe20 +102:755.718 Sensors-Magnetometer.MagY 0x213 +102:755.839 Sensors-Magnetometer.MagZ 0xce0 +103:753.226 Sensors-Light 0.698955 +103:923.183 Sensors-Slider 0x0 +103:925.593 Sensors-Accelerometer.AccX 0.0107422 +103:925.593 Sensors-Accelerometer.AccY 0.00488281 +103:925.593 Sensors-Accelerometer.AccZ 1.00098 +104:803.226 Sensors-Light 0.807919 +104:903.226 Sensors-Light 0.69543 +104:953.227 Sensors-Light 0.579599 +105:205.643 Sensors-Magnetometer.MagX 0xfe27 +105:205.768 Sensors-Magnetometer.MagY 0x21f +105:205.889 Sensors-Magnetometer.MagZ 0xcc4 +105:883.184 Sensors-Slider 0x0 +105:885.592 Sensors-Accelerometer.AccX 0.00976562 +105:885.592 Sensors-Accelerometer.AccY 0.00683594 +105:885.592 Sensors-Accelerometer.AccZ 1.00146 +106:153.227 Sensors-Light 0.69102 +106:203.226 Sensors-Light 0.802258 +107:103.227 Sensors-Light 0.660014 +107:203.226 Sensors-Light 0.536812 +107:655.639 Sensors-Magnetometer.MagX 0xfe29 +107:655.763 Sensors-Magnetometer.MagY 0x215 +107:655.884 Sensors-Magnetometer.MagZ 0xccd +107:843.184 Sensors-Slider 0x0 +107:844.915 Sensors-Accelerometer.AccX 0.00878906 +107:844.915 Sensors-Accelerometer.AccY 0.0117188 +107:844.915 Sensors-Accelerometer.AccZ 1.00293 +108:525.494 Sensors-Accelerometer.AccX -0.260498 +108:525.494 Sensors-Accelerometer.AccY -0.0270996 +108:525.494 Sensors-Accelerometer.AccZ 0.836426 +108:565.495 Sensors-Accelerometer.AccX -0.0134277 +108:565.495 Sensors-Accelerometer.AccY 0.0717773 +108:565.495 Sensors-Accelerometer.AccZ 1.02686 +108:685.495 Sensors-Accelerometer.AccX -0.00756836 +108:685.495 Sensors-Accelerometer.AccY 0.180176 +108:685.495 Sensors-Accelerometer.AccZ 0.952148 +108:755.547 Sensors-Magnetometer.MagX 0xfdef +108:755.672 Sensors-Magnetometer.MagY 0x1df +108:755.793 Sensors-Magnetometer.MagZ 0xce5 +108:765.493 Sensors-Accelerometer.AccX -0.19751 +108:765.493 Sensors-Accelerometer.AccY 0.260742 +108:765.493 Sensors-Accelerometer.AccZ 1.15039 +108:885.498 Sensors-Accelerometer.AccX -0.25708 +108:885.498 Sensors-Accelerometer.AccY 0.202637 +108:885.498 Sensors-Accelerometer.AccZ 0.952148 +108:905.579 Sensors-Magnetometer.MagX 0xfe02 +108:905.704 Sensors-Magnetometer.MagY 0x1ab +108:905.825 Sensors-Magnetometer.MagZ 0xce4 +108:925.495 Sensors-Accelerometer.AccX -0.362061 +108:925.495 Sensors-Accelerometer.AccY 0.133789 +108:925.495 Sensors-Accelerometer.AccZ 0.959961 +108:953.227 Sensors-Light 0.731701 +108:965.495 Sensors-Accelerometer.AccX -0.463623 +108:965.495 Sensors-Accelerometer.AccY 0.0625 +108:965.495 Sensors-Accelerometer.AccZ 0.887207 +109:005.602 Sensors-Magnetometer.MagX 0xfe54 +109:005.726 Sensors-Magnetometer.MagY 0x13c +109:005.847 Sensors-Magnetometer.MagZ 0xccc +109:008.295 Sensors-Accelerometer.AccX -0.596924 +109:008.295 Sensors-Accelerometer.AccY -0.00317383 +109:008.295 Sensors-Accelerometer.AccZ 0.797363 +109:044.819 Sensors-Accelerometer.AccX -0.677002 +109:044.819 Sensors-Accelerometer.AccY -0.0524902 +109:044.819 Sensors-Accelerometer.AccZ 0.575195 +109:055.554 Sensors-Magnetometer.MagX 0xfe81 +109:055.679 Sensors-Magnetometer.MagY 0xf0 +109:055.800 Sensors-Magnetometer.MagZ 0xc9f +109:085.495 Sensors-Accelerometer.AccX -0.804443 +109:085.495 Sensors-Accelerometer.AccY -0.0915527 +109:085.495 Sensors-Accelerometer.AccZ 0.301758 +109:105.685 Sensors-Magnetometer.MagX 0xfea2 +109:105.809 Sensors-Magnetometer.MagY 0x93 +109:105.930 Sensors-Magnetometer.MagZ 0xc32 +109:125.494 Sensors-Accelerometer.AccX -0.907959 +109:125.494 Sensors-Accelerometer.AccY -0.13208 +109:125.494 Sensors-Accelerometer.AccZ 0.101074 +109:155.614 Sensors-Magnetometer.MagX 0xfeb2 +109:155.739 Sensors-Magnetometer.MagY 0x67 +109:155.860 Sensors-Magnetometer.MagZ 0xbbf +109:165.498 Sensors-Accelerometer.AccX -0.941162 +109:165.498 Sensors-Accelerometer.AccY -0.166748 +109:165.498 Sensors-Accelerometer.AccZ -0.0793457 +109:205.586 Sensors-Magnetometer.MagX 0xfec1 +109:205.711 Sensors-Magnetometer.MagY 0x60 +109:205.830 Sensors-Magnetometer.MagZ 0xb4b +109:208.281 Sensors-Accelerometer.AccX -0.844482 +109:208.281 Sensors-Accelerometer.AccY -0.195068 +109:208.281 Sensors-Accelerometer.AccZ -0.417725 +109:255.586 Sensors-Magnetometer.MagX 0xfeca +109:255.710 Sensors-Magnetometer.MagY 0x6e +109:255.831 Sensors-Magnetometer.MagZ 0xb16 +109:285.499 Sensors-Accelerometer.AccX -0.77417 +109:285.499 Sensors-Accelerometer.AccY -0.241943 +109:285.499 Sensors-Accelerometer.AccZ -0.549561 +109:325.499 Sensors-Accelerometer.AccX -0.845459 +109:325.499 Sensors-Accelerometer.AccY -0.217041 +109:325.499 Sensors-Accelerometer.AccZ -0.31958 +109:485.498 Sensors-Accelerometer.AccX -0.818115 +109:485.498 Sensors-Accelerometer.AccY -0.243896 +109:485.498 Sensors-Accelerometer.AccZ -0.459717 +109:565.498 Sensors-Accelerometer.AccX -0.89917 +109:565.498 Sensors-Accelerometer.AccY -0.217529 +109:565.498 Sensors-Accelerometer.AccZ -0.359131 +109:725.498 Sensors-Accelerometer.AccX -0.876709 +109:725.498 Sensors-Accelerometer.AccY -0.176025 +109:725.498 Sensors-Accelerometer.AccZ -0.470947 +109:755.548 Sensors-Magnetometer.MagX 0xfed1 +109:755.672 Sensors-Magnetometer.MagY 0x7f +109:755.793 Sensors-Magnetometer.MagZ 0xadb +109:765.498 Sensors-Accelerometer.AccX -0.800537 +109:765.498 Sensors-Accelerometer.AccY -0.195068 +109:765.498 Sensors-Accelerometer.AccZ -0.761475 +109:805.682 Sensors-Slider 0x0 +109:855.601 Sensors-Magnetometer.MagX 0xfed8 +109:855.725 Sensors-Magnetometer.MagY 0xc5 +109:855.846 Sensors-Magnetometer.MagZ 0xa8e +109:885.495 Sensors-Accelerometer.AccX -0.652588 +109:885.495 Sensors-Accelerometer.AccY -0.296631 +109:885.495 Sensors-Accelerometer.AccZ -1.00024 +109:925.495 Sensors-Accelerometer.AccX -0.549561 +109:925.495 Sensors-Accelerometer.AccY -0.317627 +109:925.495 Sensors-Accelerometer.AccZ -0.953857 +109:955.650 Sensors-Magnetometer.MagX 0xff0f +109:955.774 Sensors-Magnetometer.MagY 0x108 +109:955.895 Sensors-Magnetometer.MagZ 0xa8c +109:965.494 Sensors-Accelerometer.AccX -0.447998 +109:965.494 Sensors-Accelerometer.AccY -0.364502 +109:965.494 Sensors-Accelerometer.AccZ -0.511475 +110:007.883 Sensors-Accelerometer.AccX -0.431396 +110:007.883 Sensors-Accelerometer.AccY -0.511963 +110:007.883 Sensors-Accelerometer.AccZ -0.96167 +110:044.819 Sensors-Accelerometer.AccX -0.473877 +110:044.819 Sensors-Accelerometer.AccY -0.569092 +110:044.819 Sensors-Accelerometer.AccZ -0.634033 +110:055.583 Sensors-Magnetometer.MagX 0xff4a +110:055.707 Sensors-Magnetometer.MagY 0x100 +110:055.828 Sensors-Magnetometer.MagZ 0xaf6 +110:085.495 Sensors-Accelerometer.AccX -0.965088 +110:085.495 Sensors-Accelerometer.AccY -0.575928 +110:085.495 Sensors-Accelerometer.AccZ 0.0600586 +110:103.226 Sensors-Light 0.838468 +110:105.910 Sensors-Magnetometer.MagX 0xff5d +110:106.034 Sensors-Magnetometer.MagY 0xf3 +110:106.155 Sensors-Magnetometer.MagZ 0xb51 +110:125.498 Sensors-Accelerometer.AccX -0.931885 +110:125.498 Sensors-Accelerometer.AccY -0.595947 +110:125.498 Sensors-Accelerometer.AccZ -0.149658 +110:165.495 Sensors-Accelerometer.AccX -0.250732 +110:165.495 Sensors-Accelerometer.AccY -0.858154 +110:165.495 Sensors-Accelerometer.AccZ -0.0183105 +110:205.549 Sensors-Magnetometer.MagX 0xff70 +110:205.673 Sensors-Magnetometer.MagY 0x155 +110:205.794 Sensors-Magnetometer.MagZ 0xb6f +110:208.241 Sensors-Accelerometer.AccX -0.612549 +110:208.241 Sensors-Accelerometer.AccY -0.948975 +110:208.241 Sensors-Accelerometer.AccZ -0.0183105 +110:244.816 Sensors-Accelerometer.AccX -0.780029 +110:244.816 Sensors-Accelerometer.AccY -0.621826 +110:244.816 Sensors-Accelerometer.AccZ 0.0112305 +110:285.495 Sensors-Accelerometer.AccX -0.354736 +110:285.495 Sensors-Accelerometer.AccY -0.979736 +110:285.495 Sensors-Accelerometer.AccZ 0.161621 +110:305.585 Sensors-Magnetometer.MagX 0xff7c +110:305.709 Sensors-Magnetometer.MagY 0x1c8 +110:305.830 Sensors-Magnetometer.MagZ 0xb64 +110:325.495 Sensors-Accelerometer.AccX -0.133545 +110:325.495 Sensors-Accelerometer.AccY -1.01978 +110:325.495 Sensors-Accelerometer.AccZ -0.267334 +110:355.612 Sensors-Magnetometer.MagX 0xff65 +110:355.736 Sensors-Magnetometer.MagY 0x223 +110:355.857 Sensors-Magnetometer.MagZ 0xb73 +110:365.495 Sensors-Accelerometer.AccX 0.0625 +110:365.495 Sensors-Accelerometer.AccY -0.809326 +110:365.495 Sensors-Accelerometer.AccZ -0.041748 +110:405.546 Sensors-Magnetometer.MagX 0xff45 +110:405.670 Sensors-Magnetometer.MagY 0x271 +110:405.791 Sensors-Magnetometer.MagZ 0xb68 +110:408.238 Sensors-Accelerometer.AccX 0.236328 +110:408.238 Sensors-Accelerometer.AccY -0.815186 +110:408.238 Sensors-Accelerometer.AccZ -0.0856934 +110:444.816 Sensors-Accelerometer.AccX 0.368164 +110:444.816 Sensors-Accelerometer.AccY -0.822998 +110:444.816 Sensors-Accelerometer.AccZ -0.0700684 +110:455.679 Sensors-Magnetometer.MagX 0xff24 +110:455.803 Sensors-Magnetometer.MagY 0x2b1 +110:455.924 Sensors-Magnetometer.MagZ 0xb76 +110:485.495 Sensors-Accelerometer.AccX 0.258301 +110:485.495 Sensors-Accelerometer.AccY -0.82251 +110:485.495 Sensors-Accelerometer.AccZ -0.0632324 +110:525.495 Sensors-Accelerometer.AccX 0.46875 +110:525.495 Sensors-Accelerometer.AccY -0.765869 +110:525.495 Sensors-Accelerometer.AccZ -0.0700684 +110:555.567 Sensors-Magnetometer.MagX 0xfee7 +110:555.691 Sensors-Magnetometer.MagY 0x2fa +110:555.812 Sensors-Magnetometer.MagZ 0xb7d +110:607.987 Sensors-Accelerometer.AccX 0.462891 +110:607.987 Sensors-Accelerometer.AccY -0.874756 +110:607.987 Sensors-Accelerometer.AccZ -0.000732422 +110:685.497 Sensors-Accelerometer.AccX 0.410156 +110:685.497 Sensors-Accelerometer.AccY -0.817139 +110:685.497 Sensors-Accelerometer.AccZ 0.124023 +110:705.584 Sensors-Magnetometer.MagX 0xfeae +110:705.708 Sensors-Magnetometer.MagY 0x32c +110:705.829 Sensors-Magnetometer.MagZ 0xb78 +110:725.495 Sensors-Accelerometer.AccX 0.580078 +110:725.495 Sensors-Accelerometer.AccY -0.858154 +110:725.495 Sensors-Accelerometer.AccZ -0.017334 +110:807.947 Sensors-Accelerometer.AccX 0.481445 +110:807.947 Sensors-Accelerometer.AccY -0.737061 +110:807.947 Sensors-Accelerometer.AccZ -0.0148926 +110:844.816 Sensors-Accelerometer.AccX 0.694336 +110:844.816 Sensors-Accelerometer.AccY -0.864502 +110:844.816 Sensors-Accelerometer.AccZ -0.179443 +110:885.495 Sensors-Accelerometer.AccX 0.522461 +110:885.495 Sensors-Accelerometer.AccY -0.736084 +110:885.495 Sensors-Accelerometer.AccZ -0.218506 +110:905.668 Sensors-Magnetometer.MagX 0xfea0 +110:905.792 Sensors-Magnetometer.MagY 0x330 +110:905.913 Sensors-Magnetometer.MagZ 0xb2f +110:925.495 Sensors-Accelerometer.AccX 0.642578 +110:925.495 Sensors-Accelerometer.AccY -0.684326 +110:925.495 Sensors-Accelerometer.AccZ 0.0791016 +110:955.602 Sensors-Magnetometer.MagX 0xfeae +110:955.727 Sensors-Magnetometer.MagY 0x30a +110:955.848 Sensors-Magnetometer.MagZ 0xade +110:965.496 Sensors-Accelerometer.AccX 0.56543 +110:965.496 Sensors-Accelerometer.AccY -0.801025 +110:965.496 Sensors-Accelerometer.AccZ 0.0415039 +111:008.019 Sensors-Accelerometer.AccX 0.418457 +111:008.019 Sensors-Accelerometer.AccY -0.493896 +111:008.019 Sensors-Accelerometer.AccZ -0.786865 +111:044.817 Sensors-Accelerometer.AccX 0.377441 +111:044.817 Sensors-Accelerometer.AccY -0.915771 +111:044.817 Sensors-Accelerometer.AccZ 0.512695 +111:055.613 Sensors-Magnetometer.MagX 0xfecc +111:055.737 Sensors-Magnetometer.MagY 0x2d6 +111:055.858 Sensors-Magnetometer.MagZ 0xab8 +111:085.494 Sensors-Accelerometer.AccX 0.806641 +111:085.494 Sensors-Accelerometer.AccY -0.339111 +111:085.494 Sensors-Accelerometer.AccZ -0.498779 +111:125.495 Sensors-Accelerometer.AccX 0.640625 +111:125.495 Sensors-Accelerometer.AccY -0.749268 +111:125.495 Sensors-Accelerometer.AccZ -0.0065918 +111:165.496 Sensors-Accelerometer.AccX 0.71875 +111:165.496 Sensors-Accelerometer.AccY -0.159424 +111:165.496 Sensors-Accelerometer.AccZ -0.107666 +111:203.226 Sensors-Light 0.72752 +111:205.920 Sensors-Magnetometer.MagX 0xfe72 +111:206.044 Sensors-Magnetometer.MagY 0x2fd +111:206.165 Sensors-Magnetometer.MagZ 0xa89 +111:208.614 Sensors-Accelerometer.AccX 1.06055 +111:208.614 Sensors-Accelerometer.AccY -0.0905762 +111:208.614 Sensors-Accelerometer.AccZ -0.251221 +111:244.816 Sensors-Accelerometer.AccX 1.08936 +111:244.816 Sensors-Accelerometer.AccY 0.0898438 +111:244.816 Sensors-Accelerometer.AccZ -0.456299 +111:255.577 Sensors-Magnetometer.MagX 0xfe30 +111:255.701 Sensors-Magnetometer.MagY 0x2f1 +111:255.822 Sensors-Magnetometer.MagZ 0xa4d +111:285.494 Sensors-Accelerometer.AccX 0.896484 +111:285.494 Sensors-Accelerometer.AccY 0.220215 +111:285.494 Sensors-Accelerometer.AccZ -0.716064 +111:325.499 Sensors-Accelerometer.AccX 0.80957 +111:325.499 Sensors-Accelerometer.AccY 0.274414 +111:325.499 Sensors-Accelerometer.AccZ -0.887939 +111:355.596 Sensors-Magnetometer.MagX 0xfdd8 +111:355.720 Sensors-Magnetometer.MagY 0x28f +111:355.841 Sensors-Magnetometer.MagZ 0x9ff +111:365.495 Sensors-Accelerometer.AccX 0.594727 +111:365.495 Sensors-Accelerometer.AccY 0.0673828 +111:365.495 Sensors-Accelerometer.AccZ -0.52124 +111:408.010 Sensors-Accelerometer.AccX 0.339844 +111:408.010 Sensors-Accelerometer.AccY 0.506836 +111:408.010 Sensors-Accelerometer.AccZ -0.737549 +111:444.816 Sensors-Accelerometer.AccX 0.538086 +111:444.816 Sensors-Accelerometer.AccY 0.609863 +111:444.816 Sensors-Accelerometer.AccZ -0.812256 +111:485.497 Sensors-Accelerometer.AccX 0.604492 +111:485.497 Sensors-Accelerometer.AccY 0.416992 +111:485.497 Sensors-Accelerometer.AccZ -0.566162 +111:505.583 Sensors-Magnetometer.MagX 0xfd89 +111:505.707 Sensors-Magnetometer.MagY 0x2ac +111:505.828 Sensors-Magnetometer.MagZ 0xa08 +111:525.495 Sensors-Accelerometer.AccX 0.40625 +111:525.495 Sensors-Accelerometer.AccY 0.566895 +111:525.495 Sensors-Accelerometer.AccZ -0.655518 +111:553.226 Sensors-Light 0.513603 +111:555.973 Sensors-Magnetometer.MagX 0xfd68 +111:556.097 Sensors-Magnetometer.MagY 0x2e9 +111:556.218 Sensors-Magnetometer.MagZ 0xa2b +111:565.497 Sensors-Accelerometer.AccX 0.464844 +111:565.497 Sensors-Accelerometer.AccY 0.666992 +111:565.497 Sensors-Accelerometer.AccZ -0.608643 +111:605.610 Sensors-Magnetometer.MagX 0xfd41 +111:605.734 Sensors-Magnetometer.MagY 0x31f +111:605.855 Sensors-Magnetometer.MagZ 0xa61 +111:608.306 Sensors-Accelerometer.AccX 0.550781 +111:608.306 Sensors-Accelerometer.AccY 0.65332 +111:608.306 Sensors-Accelerometer.AccZ -0.33667 +111:644.819 Sensors-Accelerometer.AccX 0.499023 +111:644.819 Sensors-Accelerometer.AccY 0.759277 +111:644.819 Sensors-Accelerometer.AccZ -0.25415 +111:653.226 Sensors-Light 0.392065 +111:656.010 Sensors-Magnetometer.MagX 0xfd01 +111:656.135 Sensors-Magnetometer.MagY 0x324 +111:656.256 Sensors-Magnetometer.MagZ 0xa78 +111:685.495 Sensors-Accelerometer.AccX 0.664062 +111:685.495 Sensors-Accelerometer.AccY 1.10205 +111:685.495 Sensors-Accelerometer.AccZ -0.581787 +111:705.620 Sensors-Magnetometer.MagX 0xfcc5 +111:705.744 Sensors-Magnetometer.MagY 0x34b +111:705.865 Sensors-Magnetometer.MagZ 0xacf +111:725.494 Sensors-Accelerometer.AccX 0.478516 +111:725.494 Sensors-Accelerometer.AccY 0.831055 +111:725.494 Sensors-Accelerometer.AccZ -0.174072 +111:755.550 Sensors-Magnetometer.MagX 0xfca5 +111:755.674 Sensors-Magnetometer.MagY 0x358 +111:755.795 Sensors-Magnetometer.MagZ 0xb0f +111:763.184 Sensors-Slider 0x0 +111:765.595 Sensors-Accelerometer.AccX 0.355469 +111:765.595 Sensors-Accelerometer.AccY 0.90332 +111:765.595 Sensors-Accelerometer.AccZ 0.0581055 +111:805.670 Sensors-Magnetometer.MagX 0xfc84 +111:805.794 Sensors-Magnetometer.MagY 0x353 +111:805.915 Sensors-Magnetometer.MagZ 0xb64 +111:808.366 Sensors-Accelerometer.AccX 0.317871 +111:808.366 Sensors-Accelerometer.AccY 0.865234 +111:808.366 Sensors-Accelerometer.AccZ 0.166016 +111:844.818 Sensors-Accelerometer.AccX 0.324219 +111:844.818 Sensors-Accelerometer.AccY 1.03955 +111:844.818 Sensors-Accelerometer.AccZ 0.229004 +111:853.226 Sensors-Light 0.289708 +111:856.001 Sensors-Magnetometer.MagX 0xfc59 +111:856.125 Sensors-Magnetometer.MagY 0x330 +111:856.246 Sensors-Magnetometer.MagZ 0xba6 +111:885.497 Sensors-Accelerometer.AccX 0.29541 +111:885.497 Sensors-Accelerometer.AccY 0.890625 +111:885.497 Sensors-Accelerometer.AccZ 0.155273 +111:905.592 Sensors-Magnetometer.MagX 0xfc35 +111:905.716 Sensors-Magnetometer.MagY 0x2fc +111:905.837 Sensors-Magnetometer.MagZ 0xbe1 +111:925.495 Sensors-Accelerometer.AccX 0.0527344 +111:925.495 Sensors-Accelerometer.AccY 1.00488 +111:925.495 Sensors-Accelerometer.AccZ 0.400879 +111:965.496 Sensors-Accelerometer.AccX 0.0566406 +111:965.496 Sensors-Accelerometer.AccY 1.14062 +111:965.496 Sensors-Accelerometer.AccZ 0.121094 +112:005.559 Sensors-Magnetometer.MagX 0xfc21 +112:005.684 Sensors-Magnetometer.MagY 0x2b0 +112:005.805 Sensors-Magnetometer.MagZ 0xc29 +112:008.255 Sensors-Accelerometer.AccX -0.0178223 +112:008.255 Sensors-Accelerometer.AccY 0.98291 +112:008.255 Sensors-Accelerometer.AccZ 0.154297 +112:044.816 Sensors-Accelerometer.AccX -0.24585 +112:044.816 Sensors-Accelerometer.AccY 1.10303 +112:044.816 Sensors-Accelerometer.AccZ 0.241699 +112:085.495 Sensors-Accelerometer.AccX 0.00195312 +112:085.495 Sensors-Accelerometer.AccY 1.06738 +112:085.495 Sensors-Accelerometer.AccZ 0.253418 +112:105.585 Sensors-Magnetometer.MagX 0xfc1d +112:105.709 Sensors-Magnetometer.MagY 0x257 +112:105.830 Sensors-Magnetometer.MagZ 0xc61 +112:125.494 Sensors-Accelerometer.AccX -0.11499 +112:125.494 Sensors-Accelerometer.AccY 0.938965 +112:125.494 Sensors-Accelerometer.AccZ 0.274414 +112:155.611 Sensors-Magnetometer.MagX 0xfc28 +112:155.736 Sensors-Magnetometer.MagY 0x21f +112:155.856 Sensors-Magnetometer.MagZ 0xc5d +112:165.493 Sensors-Accelerometer.AccX -0.422607 +112:165.493 Sensors-Accelerometer.AccY 0.980957 +112:165.493 Sensors-Accelerometer.AccZ 0.220703 +112:207.880 Sensors-Accelerometer.AccX -0.20874 +112:207.880 Sensors-Accelerometer.AccY 0.932617 +112:207.880 Sensors-Accelerometer.AccZ 0.218262 +112:255.675 Sensors-Magnetometer.MagX 0xfc29 +112:255.799 Sensors-Magnetometer.MagY 0x1d2 +112:255.920 Sensors-Magnetometer.MagZ 0xc68 +112:285.494 Sensors-Accelerometer.AccX -0.546631 +112:285.494 Sensors-Accelerometer.AccY 0.928711 +112:285.494 Sensors-Accelerometer.AccZ 0.519043 +112:325.499 Sensors-Accelerometer.AccX -0.593994 +112:325.499 Sensors-Accelerometer.AccY 0.957031 +112:325.499 Sensors-Accelerometer.AccZ 0.758301 +112:365.494 Sensors-Accelerometer.AccX -0.307373 +112:365.494 Sensors-Accelerometer.AccY 0.90332 +112:365.494 Sensors-Accelerometer.AccZ 0.367676 +112:405.684 Sensors-Magnetometer.MagX 0xfc39 +112:405.808 Sensors-Magnetometer.MagY 0x18f +112:405.929 Sensors-Magnetometer.MagZ 0xc76 +112:408.377 Sensors-Accelerometer.AccX -0.493896 +112:408.377 Sensors-Accelerometer.AccY 0.696289 +112:408.377 Sensors-Accelerometer.AccZ 0.213867 +112:444.815 Sensors-Accelerometer.AccX -0.783936 +112:444.815 Sensors-Accelerometer.AccY 0.707031 +112:444.815 Sensors-Accelerometer.AccZ 0.354492 +112:485.498 Sensors-Accelerometer.AccX -0.773193 +112:485.498 Sensors-Accelerometer.AccY 0.652344 +112:485.498 Sensors-Accelerometer.AccZ 0.632324 +112:505.584 Sensors-Magnetometer.MagX 0xfc6e +112:505.708 Sensors-Magnetometer.MagY 0x16d +112:505.829 Sensors-Magnetometer.MagZ 0xcaa +112:565.497 Sensors-Accelerometer.AccX -0.758545 +112:565.497 Sensors-Accelerometer.AccY 0.464844 +112:565.497 Sensors-Accelerometer.AccZ 0.212891 +112:605.613 Sensors-Magnetometer.MagX 0xfcc2 +112:605.737 Sensors-Magnetometer.MagY 0x11c +112:605.858 Sensors-Magnetometer.MagZ 0xcc3 +112:608.305 Sensors-Accelerometer.AccX -0.609131 +112:608.305 Sensors-Accelerometer.AccY 0.555176 +112:608.305 Sensors-Accelerometer.AccZ 0.751953 +112:644.816 Sensors-Accelerometer.AccX -0.865967 +112:644.816 Sensors-Accelerometer.AccY 0.320312 +112:644.816 Sensors-Accelerometer.AccZ 0.592773 +112:653.226 Sensors-Light 0.40647 +112:685.498 Sensors-Accelerometer.AccX -0.782959 +112:685.498 Sensors-Accelerometer.AccY 0.233398 +112:685.498 Sensors-Accelerometer.AccZ 0.130859 +112:705.622 Sensors-Magnetometer.MagX 0xfd22 +112:705.746 Sensors-Magnetometer.MagY 0xd2 +112:705.867 Sensors-Magnetometer.MagZ 0xcba +112:725.495 Sensors-Accelerometer.AccX -0.674561 +112:725.495 Sensors-Accelerometer.AccY 0.385742 +112:725.495 Sensors-Accelerometer.AccZ 1.05176 +112:765.495 Sensors-Accelerometer.AccX -0.778564 +112:765.495 Sensors-Accelerometer.AccY 0.0839844 +112:765.495 Sensors-Accelerometer.AccZ -0.181396 +112:805.683 Sensors-Magnetometer.MagX 0xfd8c +112:805.807 Sensors-Magnetometer.MagY 0xc4 +112:805.928 Sensors-Magnetometer.MagZ 0xcd3 +112:808.379 Sensors-Accelerometer.AccX -0.798096 +112:808.379 Sensors-Accelerometer.AccY 0.142578 +112:808.379 Sensors-Accelerometer.AccZ 0.779297 +112:844.816 Sensors-Accelerometer.AccX -1.04565 +112:844.816 Sensors-Accelerometer.AccY 0.0712891 +112:844.816 Sensors-Accelerometer.AccZ 1.10596 +112:885.495 Sensors-Accelerometer.AccX -0.868896 +112:885.495 Sensors-Accelerometer.AccY 0.123047 +112:885.495 Sensors-Accelerometer.AccZ 0.187988 +112:903.227 Sensors-Light 0.587259 +112:905.995 Sensors-Magnetometer.MagX 0xfde1 +112:906.119 Sensors-Magnetometer.MagY 0xa7 +112:906.240 Sensors-Magnetometer.MagZ 0xcc7 +112:925.494 Sensors-Accelerometer.AccX -0.584717 +112:925.494 Sensors-Accelerometer.AccY -0.0578613 +112:925.494 Sensors-Accelerometer.AccZ 0.973633 +112:955.610 Sensors-Magnetometer.MagX 0xfe34 +112:955.734 Sensors-Magnetometer.MagY 0x8c +112:955.856 Sensors-Magnetometer.MagZ 0xca7 +112:965.494 Sensors-Accelerometer.AccX -0.847412 +112:965.494 Sensors-Accelerometer.AccY -0.349365 +112:965.494 Sensors-Accelerometer.AccZ -0.213623 +113:003.226 Sensors-Light 0.759396 +113:006.006 Sensors-Magnetometer.MagX 0xfe8b +113:006.131 Sensors-Magnetometer.MagY 0x9d +113:006.252 Sensors-Magnetometer.MagZ 0xc89 +113:008.699 Sensors-Accelerometer.AccX -1.11255 +113:008.699 Sensors-Accelerometer.AccY -0.433838 +113:008.699 Sensors-Accelerometer.AccZ 0.330566 +113:044.816 Sensors-Accelerometer.AccX -0.619385 +113:044.816 Sensors-Accelerometer.AccY -0.578857 +113:044.816 Sensors-Accelerometer.AccZ 0.0883789 +113:055.664 Sensors-Magnetometer.MagX 0xfece +113:055.788 Sensors-Magnetometer.MagY 0xa4 +113:055.909 Sensors-Magnetometer.MagZ 0xc61 +113:085.494 Sensors-Accelerometer.AccX -0.836182 +113:085.494 Sensors-Accelerometer.AccY -0.455322 +113:085.494 Sensors-Accelerometer.AccZ 0.081543 +113:105.600 Sensors-Magnetometer.MagX 0xff13 +113:105.725 Sensors-Magnetometer.MagY 0xb4 +113:105.846 Sensors-Magnetometer.MagZ 0xc20 +113:125.495 Sensors-Accelerometer.AccX -0.64917 +113:125.495 Sensors-Accelerometer.AccY -0.349365 +113:125.495 Sensors-Accelerometer.AccZ 0.168945 +113:155.643 Sensors-Magnetometer.MagX 0xff47 +113:155.767 Sensors-Magnetometer.MagY 0xce +113:155.888 Sensors-Magnetometer.MagZ 0xbcb +113:165.495 Sensors-Accelerometer.AccX -0.188232 +113:165.495 Sensors-Accelerometer.AccY -0.573975 +113:165.495 Sensors-Accelerometer.AccZ -0.395264 +113:205.655 Sensors-Magnetometer.MagX 0xff75 +113:205.779 Sensors-Magnetometer.MagY 0x11e +113:205.900 Sensors-Magnetometer.MagZ 0xb4b +113:208.347 Sensors-Accelerometer.AccX 0.275879 +113:208.347 Sensors-Accelerometer.AccY -0.605225 +113:208.347 Sensors-Accelerometer.AccZ -0.629639 +113:244.819 Sensors-Accelerometer.AccX 0.196777 +113:244.819 Sensors-Accelerometer.AccY -0.703369 +113:244.819 Sensors-Accelerometer.AccZ -0.746338 +113:255.585 Sensors-Magnetometer.MagX 0xff77 +113:255.709 Sensors-Magnetometer.MagY 0x15a +113:255.830 Sensors-Magnetometer.MagZ 0xb1f +113:285.495 Sensors-Accelerometer.AccX -0.351318 +113:285.495 Sensors-Accelerometer.AccY -0.630615 +113:285.495 Sensors-Accelerometer.AccZ -0.563232 +113:325.494 Sensors-Accelerometer.AccX -0.562256 +113:325.494 Sensors-Accelerometer.AccY -0.480225 +113:325.494 Sensors-Accelerometer.AccZ -0.828369 +113:355.579 Sensors-Magnetometer.MagX 0xff4e +113:355.703 Sensors-Magnetometer.MagY 0x12b +113:355.824 Sensors-Magnetometer.MagZ 0xacc +113:405.692 Sensors-Magnetometer.MagX 0xff34 +113:405.816 Sensors-Magnetometer.MagY 0x138 +113:405.937 Sensors-Magnetometer.MagZ 0xa95 +113:408.385 Sensors-Accelerometer.AccX -0.438721 +113:408.385 Sensors-Accelerometer.AccY -0.474365 +113:408.385 Sensors-Accelerometer.AccZ -1.13013 +113:444.819 Sensors-Accelerometer.AccX -0.37085 +113:444.819 Sensors-Accelerometer.AccY -0.383545 +113:444.819 Sensors-Accelerometer.AccZ -1.32837 +113:485.494 Sensors-Accelerometer.AccX -0.80835 +113:485.494 Sensors-Accelerometer.AccY -0.450439 +113:485.494 Sensors-Accelerometer.AccZ -0.871826 +113:525.494 Sensors-Accelerometer.AccX -0.452881 +113:525.494 Sensors-Accelerometer.AccY -0.582275 +113:525.494 Sensors-Accelerometer.AccZ -0.821045 +113:555.647 Sensors-Magnetometer.MagX 0xff34 +113:555.771 Sensors-Magnetometer.MagY 0xde +113:555.892 Sensors-Magnetometer.MagZ 0xac5 +113:565.495 Sensors-Accelerometer.AccX -0.846436 +113:565.495 Sensors-Accelerometer.AccY -0.536865 +113:565.495 Sensors-Accelerometer.AccZ -0.504639 +113:607.920 Sensors-Accelerometer.AccX -0.909424 +113:607.920 Sensors-Accelerometer.AccY -0.367432 +113:607.920 Sensors-Accelerometer.AccZ -0.705811 +113:644.816 Sensors-Accelerometer.AccX -0.463623 +113:644.816 Sensors-Accelerometer.AccY -0.426025 +113:644.816 Sensors-Accelerometer.AccZ -0.195068 +113:655.639 Sensors-Magnetometer.MagX 0xff35 +113:655.763 Sensors-Magnetometer.MagY 0xa2 +113:655.884 Sensors-Magnetometer.MagZ 0xb8d +113:685.494 Sensors-Accelerometer.AccX -0.847412 +113:685.494 Sensors-Accelerometer.AccY -0.390381 +113:685.494 Sensors-Accelerometer.AccZ 1.26074 +113:705.611 Sensors-Magnetometer.MagX 0xff10 +113:705.735 Sensors-Magnetometer.MagY 0xd4 +113:705.856 Sensors-Magnetometer.MagZ 0xc3d +113:723.184 Sensors-Slider 0x0 +113:725.599 Sensors-Accelerometer.AccX -0.868896 +113:725.599 Sensors-Accelerometer.AccY -0.404053 +113:725.599 Sensors-Accelerometer.AccZ 0.952148 +113:765.494 Sensors-Accelerometer.AccX -0.261475 +113:765.494 Sensors-Accelerometer.AccY -0.486572 +113:765.494 Sensors-Accelerometer.AccZ 0.236328 +113:807.939 Sensors-Accelerometer.AccX -0.516846 +113:807.939 Sensors-Accelerometer.AccY -0.457764 +113:807.939 Sensors-Accelerometer.AccZ 0.528809 +113:844.816 Sensors-Accelerometer.AccX -0.673584 +113:844.816 Sensors-Accelerometer.AccY -0.424072 +113:844.816 Sensors-Accelerometer.AccZ 1.02148 +113:885.495 Sensors-Accelerometer.AccX -0.454346 +113:885.495 Sensors-Accelerometer.AccY -0.422119 +113:885.495 Sensors-Accelerometer.AccZ 1.08984 +113:905.607 Sensors-Magnetometer.MagX 0xff18 +113:905.732 Sensors-Magnetometer.MagY 0x148 +113:905.853 Sensors-Magnetometer.MagZ 0xc8b +113:925.498 Sensors-Accelerometer.AccX -0.369873 +113:925.498 Sensors-Accelerometer.AccY -0.510498 +113:925.498 Sensors-Accelerometer.AccZ 0.780762 +113:965.494 Sensors-Accelerometer.AccX -0.18335 +113:965.494 Sensors-Accelerometer.AccY -0.54126 +113:965.494 Sensors-Accelerometer.AccZ 1.11426 +114:003.226 Sensors-Light 0.624933 +114:006.011 Sensors-Magnetometer.MagX 0xff1c +114:006.135 Sensors-Magnetometer.MagY 0x1c6 +114:006.257 Sensors-Magnetometer.MagZ 0xc7c +114:008.706 Sensors-Accelerometer.AccX -0.127686 +114:008.706 Sensors-Accelerometer.AccY -0.431396 +114:008.706 Sensors-Accelerometer.AccZ 1.03223 +114:044.817 Sensors-Accelerometer.AccX 0.249023 +114:044.817 Sensors-Accelerometer.AccY -0.409424 +114:044.817 Sensors-Accelerometer.AccZ 0.929688 +114:055.598 Sensors-Magnetometer.MagX 0xff18 +114:055.722 Sensors-Magnetometer.MagY 0x203 +114:055.843 Sensors-Magnetometer.MagZ 0xc69 +114:085.498 Sensors-Accelerometer.AccX 0.299805 +114:085.498 Sensors-Accelerometer.AccY -0.475342 +114:085.498 Sensors-Accelerometer.AccZ 0.619629 +114:125.494 Sensors-Accelerometer.AccX 0.0737305 +114:125.494 Sensors-Accelerometer.AccY -0.377197 +114:125.494 Sensors-Accelerometer.AccZ 0.19043 +114:153.226 Sensors-Light 0.524666 +114:155.909 Sensors-Magnetometer.MagX 0xff27 +114:156.033 Sensors-Magnetometer.MagY 0x247 +114:156.154 Sensors-Magnetometer.MagZ 0xc3c +114:165.495 Sensors-Accelerometer.AccX 0.0253906 +114:165.495 Sensors-Accelerometer.AccY -0.212646 +114:165.495 Sensors-Accelerometer.AccZ -0.599854 +114:205.550 Sensors-Magnetometer.MagX 0xff33 +114:205.674 Sensors-Magnetometer.MagY 0x261 +114:205.795 Sensors-Magnetometer.MagZ 0xc05 +114:208.242 Sensors-Accelerometer.AccX -0.133545 +114:208.242 Sensors-Accelerometer.AccY -0.12915 +114:208.242 Sensors-Accelerometer.AccZ -0.263428 +114:244.817 Sensors-Accelerometer.AccX 0.24707 +114:244.817 Sensors-Accelerometer.AccY -0.098877 +114:244.817 Sensors-Accelerometer.AccZ -0.0109863 +114:285.493 Sensors-Accelerometer.AccX 0.63623 +114:285.493 Sensors-Accelerometer.AccY -0.181396 +114:285.493 Sensors-Accelerometer.AccZ 1.04639 +114:305.610 Sensors-Magnetometer.MagX 0xfef8 +114:305.735 Sensors-Magnetometer.MagY 0x26c +114:305.856 Sensors-Magnetometer.MagZ 0xc5d +114:325.497 Sensors-Accelerometer.AccX 0.607422 +114:325.497 Sensors-Accelerometer.AccY -0.369873 +114:325.497 Sensors-Accelerometer.AccZ 1.99976 +114:355.580 Sensors-Magnetometer.MagX 0xfecd +114:355.704 Sensors-Magnetometer.MagY 0x24c +114:355.825 Sensors-Magnetometer.MagZ 0xc98 +114:365.495 Sensors-Accelerometer.AccX 0.484375 +114:365.495 Sensors-Accelerometer.AccY -0.386475 +114:365.495 Sensors-Accelerometer.AccZ 1.99976 +114:407.990 Sensors-Accelerometer.AccX 0.104492 +114:407.990 Sensors-Accelerometer.AccY -0.37085 +114:407.990 Sensors-Accelerometer.AccZ 1.99976 +114:444.816 Sensors-Accelerometer.AccX -0.139893 +114:444.816 Sensors-Accelerometer.AccY -0.238525 +114:444.816 Sensors-Accelerometer.AccZ 1.93311 +114:485.498 Sensors-Accelerometer.AccX -0.11499 +114:485.498 Sensors-Accelerometer.AccY -0.149658 +114:485.498 Sensors-Accelerometer.AccZ 0.719238 +114:525.495 Sensors-Accelerometer.AccX 0.100586 +114:525.495 Sensors-Accelerometer.AccY -0.105225 +114:525.495 Sensors-Accelerometer.AccZ 0.26709 +114:565.498 Sensors-Accelerometer.AccX 0.0180664 +114:565.498 Sensors-Accelerometer.AccY -0.0925293 +114:565.498 Sensors-Accelerometer.AccZ -0.357666 +114:605.550 Sensors-Magnetometer.MagX 0xfef9 +114:605.674 Sensors-Magnetometer.MagY 0x278 +114:605.795 Sensors-Magnetometer.MagZ 0xc4d +114:608.242 Sensors-Accelerometer.AccX -0.140869 +114:608.242 Sensors-Accelerometer.AccY 0.0390625 +114:608.242 Sensors-Accelerometer.AccZ -1.12817 +114:644.816 Sensors-Accelerometer.AccX 0.15332 +114:644.816 Sensors-Accelerometer.AccY 0.090332 +114:644.816 Sensors-Accelerometer.AccZ -0.486572 +114:685.493 Sensors-Accelerometer.AccX 0.383301 +114:685.493 Sensors-Accelerometer.AccY 0.0078125 +114:685.493 Sensors-Accelerometer.AccZ 0.95166 +114:705.612 Sensors-Magnetometer.MagX 0xfecd +114:705.736 Sensors-Magnetometer.MagY 0x27d +114:705.858 Sensors-Magnetometer.MagZ 0xc82 +114:725.496 Sensors-Accelerometer.AccX 0.418457 +114:725.496 Sensors-Accelerometer.AccY -0.169678 +114:725.496 Sensors-Accelerometer.AccZ 1.70654 +114:765.494 Sensors-Accelerometer.AccX 0.0693359 +114:765.494 Sensors-Accelerometer.AccY -0.338135 +114:765.494 Sensors-Accelerometer.AccZ 1.78955 +114:805.633 Sensors-Magnetometer.MagX 0xfe9b +114:805.758 Sensors-Magnetometer.MagY 0x248 +114:805.879 Sensors-Magnetometer.MagZ 0xcbe +114:808.326 Sensors-Accelerometer.AccX 0.45459 +114:808.326 Sensors-Accelerometer.AccY -0.371826 +114:808.326 Sensors-Accelerometer.AccZ 1.99976 +114:844.816 Sensors-Accelerometer.AccX 0.246582 +114:844.816 Sensors-Accelerometer.AccY -0.290283 +114:844.816 Sensors-Accelerometer.AccZ 1.99976 +114:885.498 Sensors-Accelerometer.AccX 0.204102 +114:885.498 Sensors-Accelerometer.AccY -0.210693 +114:885.498 Sensors-Accelerometer.AccZ 1.63232 +114:925.493 Sensors-Accelerometer.AccX 0.0791016 +114:925.493 Sensors-Accelerometer.AccY -0.064209 +114:925.493 Sensors-Accelerometer.AccZ 1.28418 +114:965.494 Sensors-Accelerometer.AccX -0.0554199 +114:965.494 Sensors-Accelerometer.AccY -0.0979004 +114:965.494 Sensors-Accelerometer.AccZ 0.632324 +115:005.587 Sensors-Magnetometer.MagX 0xfec6 +115:005.711 Sensors-Magnetometer.MagY 0x277 +115:005.832 Sensors-Magnetometer.MagZ 0xc86 +115:008.280 Sensors-Accelerometer.AccX -0.18335 +115:008.280 Sensors-Accelerometer.AccY -0.048584 +115:008.280 Sensors-Accelerometer.AccZ -0.418701 +115:044.817 Sensors-Accelerometer.AccX 0.00146484 +115:044.817 Sensors-Accelerometer.AccY 0.0131836 +115:044.817 Sensors-Accelerometer.AccZ -0.929443 +115:085.496 Sensors-Accelerometer.AccX -0.0549316 +115:085.496 Sensors-Accelerometer.AccY 0.059082 +115:085.496 Sensors-Accelerometer.AccZ -0.369385 +115:125.495 Sensors-Accelerometer.AccX 0.573242 +115:125.495 Sensors-Accelerometer.AccY 0.0820312 +115:125.495 Sensors-Accelerometer.AccZ 0.590332 +115:165.496 Sensors-Accelerometer.AccX 0.561035 +115:165.496 Sensors-Accelerometer.AccY -0.153076 +115:165.496 Sensors-Accelerometer.AccZ 1.10156 +115:207.980 Sensors-Accelerometer.AccX -0.106201 +115:207.980 Sensors-Accelerometer.AccY -0.280518 +115:207.980 Sensors-Accelerometer.AccZ 1.4707 +115:244.816 Sensors-Accelerometer.AccX 0.0917969 +115:244.816 Sensors-Accelerometer.AccY -0.303467 +115:244.816 Sensors-Accelerometer.AccZ 1.99976 +115:255.586 Sensors-Magnetometer.MagX 0xfe92 +115:255.710 Sensors-Magnetometer.MagY 0x23d +115:255.831 Sensors-Magnetometer.MagZ 0xccb +115:285.494 Sensors-Accelerometer.AccX 0.295898 +115:285.494 Sensors-Accelerometer.AccY -0.205811 +115:285.494 Sensors-Accelerometer.AccZ 1.99976 +115:365.494 Sensors-Accelerometer.AccX 0.0371094 +115:365.494 Sensors-Accelerometer.AccY -0.168701 +115:365.494 Sensors-Accelerometer.AccZ 1.42334 +115:407.922 Sensors-Accelerometer.AccX -0.0319824 +115:407.922 Sensors-Accelerometer.AccY -0.115479 +115:407.922 Sensors-Accelerometer.AccZ 0.777344 +115:444.818 Sensors-Accelerometer.AccX -0.114014 +115:444.818 Sensors-Accelerometer.AccY -0.0627441 +115:444.818 Sensors-Accelerometer.AccZ 0.324219 +115:485.495 Sensors-Accelerometer.AccX -0.00561523 +115:485.495 Sensors-Accelerometer.AccY -0.116455 +115:485.495 Sensors-Accelerometer.AccZ -0.153076 +115:505.577 Sensors-Magnetometer.MagX 0xfec5 +115:505.701 Sensors-Magnetometer.MagY 0x272 +115:505.822 Sensors-Magnetometer.MagZ 0xc9a +115:525.496 Sensors-Accelerometer.AccX -0.000244141 +115:525.496 Sensors-Accelerometer.AccY -0.0349121 +115:525.496 Sensors-Accelerometer.AccZ -0.824951 +115:565.494 Sensors-Accelerometer.AccX 0.150391 +115:565.494 Sensors-Accelerometer.AccY 0.043457 +115:565.494 Sensors-Accelerometer.AccZ 0.162109 +115:608.012 Sensors-Accelerometer.AccX 0.619141 +115:608.012 Sensors-Accelerometer.AccY 0.0263672 +115:608.012 Sensors-Accelerometer.AccZ 1.01172 +115:644.816 Sensors-Accelerometer.AccX 0.304688 +115:644.816 Sensors-Accelerometer.AccY -0.106201 +115:644.816 Sensors-Accelerometer.AccZ 1.44531 +115:655.576 Sensors-Magnetometer.MagX 0xfe92 +115:655.700 Sensors-Magnetometer.MagY 0x260 +115:655.822 Sensors-Magnetometer.MagZ 0xcc3 +115:683.183 Sensors-Slider 0x0 +115:685.594 Sensors-Accelerometer.AccX -0.203369 +115:685.594 Sensors-Accelerometer.AccY -0.270264 +115:685.594 Sensors-Accelerometer.AccZ 1.29932 +115:725.495 Sensors-Accelerometer.AccX 0.161133 +115:725.495 Sensors-Accelerometer.AccY -0.232666 +115:725.495 Sensors-Accelerometer.AccZ 1.52832 +115:765.497 Sensors-Accelerometer.AccX 0.123535 +115:765.497 Sensors-Accelerometer.AccY -0.114502 +115:765.497 Sensors-Accelerometer.AccZ 1.48779 +115:805.599 Sensors-Magnetometer.MagX 0xfe8a +115:805.723 Sensors-Magnetometer.MagY 0x22d +115:805.844 Sensors-Magnetometer.MagZ 0xce4 +115:808.296 Sensors-Accelerometer.AccX 0.107422 +115:808.296 Sensors-Accelerometer.AccY -0.202393 +115:808.296 Sensors-Accelerometer.AccZ 1.00244 +115:885.497 Sensors-Accelerometer.AccX 0.0371094 +115:885.497 Sensors-Accelerometer.AccY -0.173584 +115:885.497 Sensors-Accelerometer.AccZ 1.12402 +115:965.497 Sensors-Accelerometer.AccX 0.0966797 +115:965.497 Sensors-Accelerometer.AccY -0.145752 +115:965.497 Sensors-Accelerometer.AccZ 0.978516 +116:603.225 Sensors-Light 0.5579 +117:207.964 Sensors-Accelerometer.AccX -0.017334 +117:207.964 Sensors-Accelerometer.AccY -0.150146 +117:207.964 Sensors-Accelerometer.AccZ 0.933105 +117:365.495 Sensors-Accelerometer.AccX 0.0898438 +117:365.495 Sensors-Accelerometer.AccY -0.120361 +117:365.495 Sensors-Accelerometer.AccZ 0.973633 +117:407.970 Sensors-Accelerometer.AccX 0.0996094 +117:407.970 Sensors-Accelerometer.AccY -0.0964355 +117:407.970 Sensors-Accelerometer.AccZ 1.0752 +117:444.818 Sensors-Accelerometer.AccX 0.0410156 +117:444.818 Sensors-Accelerometer.AccY -0.098877 +117:444.818 Sensors-Accelerometer.AccZ 0.936035 +117:607.866 Sensors-Accelerometer.AccX 0.146484 +117:607.866 Sensors-Accelerometer.AccY -0.0808105 +117:607.866 Sensors-Accelerometer.AccZ 1.00977 +117:643.184 Sensors-Slider 0x0 +117:685.498 Sensors-Accelerometer.AccX 0.0551758 +117:685.498 Sensors-Accelerometer.AccY -0.0612793 +117:685.498 Sensors-Accelerometer.AccZ 0.870117 +117:725.498 Sensors-Accelerometer.AccX 0.0786133 +117:725.498 Sensors-Accelerometer.AccY -0.0983887 +117:725.498 Sensors-Accelerometer.AccZ 0.993164 +117:925.499 Sensors-Accelerometer.AccX 0.0839844 +117:925.499 Sensors-Accelerometer.AccY -0.0876465 +117:925.499 Sensors-Accelerometer.AccZ 1.09766 +117:965.495 Sensors-Accelerometer.AccX 0.19043 +117:965.495 Sensors-Accelerometer.AccY -0.194092 +117:965.495 Sensors-Accelerometer.AccZ 1.23633 +118:007.880 Sensors-Accelerometer.AccX 0.0200195 +118:007.880 Sensors-Accelerometer.AccY -0.0866699 +118:007.880 Sensors-Accelerometer.AccZ 1.58594 +118:085.494 Sensors-Accelerometer.AccX 0.125977 +118:085.494 Sensors-Accelerometer.AccY -0.154053 +118:085.494 Sensors-Accelerometer.AccZ 1.20996 +118:105.611 Sensors-Magnetometer.MagX 0xfe76 +118:105.735 Sensors-Magnetometer.MagY 0x261 +118:105.857 Sensors-Magnetometer.MagZ 0xcc6 +118:125.499 Sensors-Accelerometer.AccX 0.134766 +118:125.499 Sensors-Accelerometer.AccY -0.135986 +118:125.499 Sensors-Accelerometer.AccZ 0.92334 +118:165.497 Sensors-Accelerometer.AccX 0.0927734 +118:165.497 Sensors-Accelerometer.AccY -0.102295 +118:165.497 Sensors-Accelerometer.AccZ 0.501953 +118:205.660 Sensors-Magnetometer.MagX 0xfe79 +118:205.784 Sensors-Magnetometer.MagY 0x298 +118:205.905 Sensors-Magnetometer.MagZ 0xcaf +118:208.356 Sensors-Accelerometer.AccX -0.000732422 +118:208.356 Sensors-Accelerometer.AccY -0.0349121 +118:208.356 Sensors-Accelerometer.AccZ -0.151611 +118:244.819 Sensors-Accelerometer.AccX -0.00561523 +118:244.819 Sensors-Accelerometer.AccY 0.0439453 +118:244.819 Sensors-Accelerometer.AccZ -0.531494 +118:285.495 Sensors-Accelerometer.AccX -0.0231934 +118:285.495 Sensors-Accelerometer.AccY 0.171875 +118:285.495 Sensors-Accelerometer.AccZ 0.000976562 +118:325.497 Sensors-Accelerometer.AccX 0.0693359 +118:325.497 Sensors-Accelerometer.AccY 0.0957031 +118:325.497 Sensors-Accelerometer.AccZ 1.11475 +118:355.685 Sensors-Magnetometer.MagX 0xfe41 +118:355.809 Sensors-Magnetometer.MagY 0x26b +118:355.930 Sensors-Magnetometer.MagZ 0xcdb +118:365.496 Sensors-Accelerometer.AccX 0.00341797 +118:365.496 Sensors-Accelerometer.AccY 0.0507812 +118:365.496 Sensors-Accelerometer.AccZ 1.94238 +118:407.947 Sensors-Accelerometer.AccX 0.173828 +118:407.947 Sensors-Accelerometer.AccY 0.145996 +118:407.947 Sensors-Accelerometer.AccZ 1.76514 +118:444.815 Sensors-Accelerometer.AccX 0.0585938 +118:444.815 Sensors-Accelerometer.AccY 0.146973 +118:444.815 Sensors-Accelerometer.AccZ 1.59766 +118:485.497 Sensors-Accelerometer.AccX 0.0107422 +118:485.497 Sensors-Accelerometer.AccY 0.115723 +118:485.497 Sensors-Accelerometer.AccZ 1.21924 +118:525.498 Sensors-Accelerometer.AccX 0.0375977 +118:525.498 Sensors-Accelerometer.AccY 0.104492 +118:525.498 Sensors-Accelerometer.AccZ 1.104 +118:565.498 Sensors-Accelerometer.AccX 0.0405273 +118:565.498 Sensors-Accelerometer.AccY 0.0600586 +118:565.498 Sensors-Accelerometer.AccZ 0.930664 +118:807.994 Sensors-Accelerometer.AccX 0.0703125 +118:807.994 Sensors-Accelerometer.AccY -0.0495605 +118:807.994 Sensors-Accelerometer.AccZ 0.841309 +118:844.818 Sensors-Accelerometer.AccX 0.046875 +118:844.818 Sensors-Accelerometer.AccY -0.18335 +118:844.818 Sensors-Accelerometer.AccZ 1.02686 +118:885.496 Sensors-Accelerometer.AccX 0.0839844 +118:885.496 Sensors-Accelerometer.AccY -0.0612793 +118:885.496 Sensors-Accelerometer.AccZ 0.968262 +118:925.494 Sensors-Accelerometer.AccX -0.0217285 +118:925.494 Sensors-Accelerometer.AccY 0.00927734 +118:925.494 Sensors-Accelerometer.AccZ 1.02148 +118:965.493 Sensors-Accelerometer.AccX 0.0927734 +118:965.493 Sensors-Accelerometer.AccY 0.0166016 +118:965.493 Sensors-Accelerometer.AccZ 1.19336 +119:005.647 Sensors-Magnetometer.MagX 0xfe40 +119:005.771 Sensors-Magnetometer.MagY 0x235 +119:005.893 Sensors-Magnetometer.MagZ 0xcd8 +119:044.818 Sensors-Accelerometer.AccX 0.0361328 +119:044.818 Sensors-Accelerometer.AccY 0.0283203 +119:044.818 Sensors-Accelerometer.AccZ 0.866699 +119:053.226 Sensors-Light 0.604364 +119:085.494 Sensors-Accelerometer.AccX -0.0681152 +119:085.494 Sensors-Accelerometer.AccY -0.0383301 +119:085.494 Sensors-Accelerometer.AccZ 0.939453 +119:125.498 Sensors-Accelerometer.AccX 0.0136719 +119:125.498 Sensors-Accelerometer.AccY 0.0263672 +119:125.498 Sensors-Accelerometer.AccZ 1.18896 +119:165.497 Sensors-Accelerometer.AccX 0.0234375 +119:165.497 Sensors-Accelerometer.AccY -0.0603027 +119:165.497 Sensors-Accelerometer.AccZ 0.943359 +119:207.948 Sensors-Accelerometer.AccX 0.0117188 +119:207.948 Sensors-Accelerometer.AccY -0.0461426 +119:207.948 Sensors-Accelerometer.AccZ 1.06348 +119:244.820 Sensors-Accelerometer.AccX -0.0236816 +119:244.820 Sensors-Accelerometer.AccY 0.0107422 +119:244.820 Sensors-Accelerometer.AccZ 0.865723 +119:285.495 Sensors-Accelerometer.AccX -0.0065918 +119:285.495 Sensors-Accelerometer.AccY -0.0969238 +119:285.495 Sensors-Accelerometer.AccZ 1.0752 +119:303.226 Sensors-Light 0.709484 +119:444.817 Sensors-Accelerometer.AccX 0.0703125 +119:444.817 Sensors-Accelerometer.AccY 0.0146484 +119:444.817 Sensors-Accelerometer.AccZ 1.04395 +119:605.608 Sensors-Slider 0x0 +119:685.497 Sensors-Accelerometer.AccX 0.0844727 +119:685.497 Sensors-Accelerometer.AccY 0.0332031 +119:685.497 Sensors-Accelerometer.AccZ 1.28955 +119:725.498 Sensors-Accelerometer.AccX 0.00683594 +119:725.498 Sensors-Accelerometer.AccY 0.00976562 +119:725.498 Sensors-Accelerometer.AccZ 1.00146 +119:807.891 Sensors-Accelerometer.AccX 0.0566406 +119:807.891 Sensors-Accelerometer.AccY 0.000488281 +119:807.891 Sensors-Accelerometer.AccZ 0.853027 +119:844.818 Sensors-Accelerometer.AccX 0.015625 +119:844.818 Sensors-Accelerometer.AccY 0.00292969 +119:844.818 Sensors-Accelerometer.AccZ 1.02979 +119:953.226 Sensors-Light 0.810987 +120:603.226 Sensors-Light 0.690105 +121:455.577 Sensors-Magnetometer.MagX 0xfe3b +121:455.701 Sensors-Magnetometer.MagY 0x20e +121:455.822 Sensors-Magnetometer.MagZ 0xce4 +121:503.227 Sensors-Light 0.580713 +121:563.184 Sensors-Slider 0x0 +121:807.916 Sensors-Accelerometer.AccX -0.020752 +121:807.916 Sensors-Accelerometer.AccY 0.0419922 +121:807.916 Sensors-Accelerometer.AccZ 0.999512 +121:903.227 Sensors-Light 0.699062 +122:203.226 Sensors-Light 0.57998 +122:903.226 Sensors-Light 0.696406 +123:253.227 Sensors-Light 0.591012 +123:523.184 Sensors-Slider 0x0 +123:765.495 Sensors-Accelerometer.AccX -0.0114746 +123:765.495 Sensors-Accelerometer.AccY 0.0390625 +123:765.495 Sensors-Accelerometer.AccZ 1.00439 +123:903.226 Sensors-Light 0.724758 +123:905.913 Sensors-Magnetometer.MagX 0xfe3b +123:906.037 Sensors-Magnetometer.MagY 0x20c +123:906.158 Sensors-Magnetometer.MagZ 0xcd9 +124:053.228 Sensors-Light 0.607569 +124:853.228 Sensors-Light 0.751293 +125:003.227 Sensors-Light 0.617304 +125:483.183 Sensors-Slider 0x0 +125:725.493 Sensors-Accelerometer.AccX -0.0144043 +125:725.493 Sensors-Accelerometer.AccY 0.0390625 +125:725.493 Sensors-Accelerometer.AccZ 1.00293 +125:803.227 Sensors-Light 0.727642 +125:953.226 Sensors-Light 0.610193 +126:355.637 Sensors-Magnetometer.MagX 0xfe41 +126:355.761 Sensors-Magnetometer.MagY 0x20d +126:355.882 Sensors-Magnetometer.MagZ 0xcdc +126:853.226 Sensors-Light 0.739483 +127:103.227 Sensors-Light 0.627115 +127:443.184 Sensors-Slider 0x0 +127:685.492 Sensors-Accelerometer.AccX -0.0144043 +127:685.492 Sensors-Accelerometer.AccY 0.0371094 +127:685.492 Sensors-Accelerometer.AccZ 1.00244 +128:805.544 Sensors-Magnetometer.MagX 0xfe38 +128:805.668 Sensors-Magnetometer.MagY 0x209 +128:805.789 Sensors-Magnetometer.MagZ 0xcdb +128:903.226 Sensors-Light 0.758358 +129:053.226 Sensors-Light 0.629831 +129:405.588 Sensors-Slider 0x0 +129:644.815 Sensors-Accelerometer.AccX -0.017334 +129:644.815 Sensors-Accelerometer.AccY 0.0351562 +129:644.815 Sensors-Accelerometer.AccZ 0.998047 +130:003.226 Sensors-Light 0.7337 +130:253.227 Sensors-Light 0.622644 +131:255.620 Sensors-Magnetometer.MagX 0xfe3c +131:255.744 Sensors-Magnetometer.MagY 0x20e +131:255.865 Sensors-Magnetometer.MagZ 0xce3 +131:363.184 Sensors-Slider 0x0 +131:608.024 Sensors-Accelerometer.AccX -0.020752 +131:608.024 Sensors-Accelerometer.AccY 0.0400391 +131:608.024 Sensors-Accelerometer.AccZ 0.998047 +132:653.226 Sensors-Light 0.747478 +132:903.227 Sensors-Light 0.617975 +133:323.183 Sensors-Slider 0x0 +133:565.492 Sensors-Accelerometer.AccX -0.017334 +133:565.492 Sensors-Accelerometer.AccY 0.0400391 +133:565.492 Sensors-Accelerometer.AccZ 1.00391 +133:705.595 Sensors-Magnetometer.MagX 0xfe3c +133:705.719 Sensors-Magnetometer.MagY 0x20f +133:705.840 Sensors-Magnetometer.MagZ 0xce5 +134:353.227 Sensors-Light 0.725536 +135:003.226 Sensors-Light 0.62208 +135:283.183 Sensors-Slider 0x0 +135:525.493 Sensors-Accelerometer.AccX -0.0183105 +135:525.493 Sensors-Accelerometer.AccY 0.0341797 +135:525.493 Sensors-Accelerometer.AccZ 1.00098 +136:155.619 Sensors-Magnetometer.MagX 0xfe3d +136:155.743 Sensors-Magnetometer.MagY 0x210 +136:155.864 Sensors-Magnetometer.MagZ 0xcde +137:243.183 Sensors-Slider 0x0 +137:453.225 Sensors-Light 0.673152 +137:485.493 Sensors-Accelerometer.AccX -0.017334 +137:485.493 Sensors-Accelerometer.AccY 0.0390625 +137:485.493 Sensors-Accelerometer.AccZ 1.00293 +138:605.568 Sensors-Magnetometer.MagX 0xfe38 +138:605.693 Sensors-Magnetometer.MagY 0x20b +138:605.814 Sensors-Magnetometer.MagZ 0xce1 +139:205.607 Sensors-Slider 0x0 +139:444.813 Sensors-Accelerometer.AccX -0.0134277 +139:444.813 Sensors-Accelerometer.AccY 0.0361328 +139:444.813 Sensors-Accelerometer.AccZ 1.00586 +139:903.224 Sensors-Light 0.635645 +141:055.582 Sensors-Magnetometer.MagX 0xfe3b +141:055.706 Sensors-Magnetometer.MagY 0x20c +141:055.827 Sensors-Magnetometer.MagZ 0xcdc +141:163.184 Sensors-Slider 0x0 +141:407.916 Sensors-Accelerometer.AccX -0.0197754 +141:407.916 Sensors-Accelerometer.AccY 0.0390625 +141:407.916 Sensors-Accelerometer.AccZ 1.00586 +142:153.227 Sensors-Light 0.513893 +143:123.184 Sensors-Slider 0x0 +143:365.493 Sensors-Accelerometer.AccX -0.0153809 +143:365.493 Sensors-Accelerometer.AccY 0.0351562 +143:365.493 Sensors-Accelerometer.AccZ 1.00293 +143:505.544 Sensors-Magnetometer.MagX 0xfe3b +143:505.668 Sensors-Magnetometer.MagY 0x210 +143:505.789 Sensors-Magnetometer.MagZ 0xce3 +143:953.227 Sensors-Light 0.637903 +144:125.495 Sensors-Accelerometer.AccX 0.129883 +144:125.495 Sensors-Accelerometer.AccY 0.297852 +144:125.495 Sensors-Accelerometer.AccZ 0.915039 +144:165.495 Sensors-Accelerometer.AccX -0.00463867 +144:165.495 Sensors-Accelerometer.AccY 0.0390625 +144:165.495 Sensors-Accelerometer.AccZ 1.04248 +144:400.337 Buttons-SW3 0x1 +144:560.018 Buttons-SW3 0x0 +144:646.766 Buttons-SW3 0x1 +144:747.948 Buttons-SW3 0x0 +144:833.053 Buttons-SW3 0x1 +144:977.570 Buttons-SW3 0x0 +145:007.961 Sensors-Accelerometer.AccX -0.0476074 +145:007.961 Sensors-Accelerometer.AccY 0.0380859 +145:007.961 Sensors-Accelerometer.AccZ 0.84668 +145:044.820 Sensors-Accelerometer.AccX -0.00854492 +145:044.820 Sensors-Accelerometer.AccY 0.0244141 +145:044.820 Sensors-Accelerometer.AccZ 1.00342 +145:053.226 Sensors-Light 0.758038 +145:083.184 Sensors-Slider 0x0 +145:408.152 Buttons-SW1 0x1 +145:515.450 Buttons-SW1 0x0 +145:602.600 Buttons-SW1 0x1 +145:677.789 Buttons-SW1 0x0 +145:757.112 Buttons-SW1 0x1 +145:835.672 Buttons-SW1 0x0 +145:878.089 Buttons-SW1 0x1 +145:955.608 Sensors-Magnetometer.MagX 0xfe36 +145:955.733 Sensors-Magnetometer.MagY 0x218 +145:955.854 Sensors-Magnetometer.MagZ 0xcdf +145:956.412 Buttons-SW1 0x0 +146:103.227 Sensors-Light 0.618402 +146:165.498 Sensors-Accelerometer.AccX 0.00488281 +146:165.498 Sensors-Accelerometer.AccY -0.00952148 +146:165.498 Sensors-Accelerometer.AccZ 0.89502 +146:207.920 Sensors-Accelerometer.AccX -0.00317383 +146:207.920 Sensors-Accelerometer.AccY -0.013916 +146:207.920 Sensors-Accelerometer.AccZ 1.20215 +146:244.820 Sensors-Accelerometer.AccX -0.00366211 +146:244.820 Sensors-Accelerometer.AccY 0.0258789 +146:244.820 Sensors-Accelerometer.AccZ 1.01221 +146:253.226 Sensors-Light 0.491035 +147:043.183 Sensors-Slider 0x0 +147:965.494 Sensors-Accelerometer.AccX -0.239502 +147:965.494 Sensors-Accelerometer.AccY -0.000244141 +147:965.494 Sensors-Accelerometer.AccZ -0.083252 +148:008.013 Sensors-Accelerometer.AccX 0.0454102 +148:008.013 Sensors-Accelerometer.AccY 0.00146484 +148:008.013 Sensors-Accelerometer.AccZ 1.06152 +148:044.820 Sensors-Accelerometer.AccX -0.0373535 +148:044.820 Sensors-Accelerometer.AccY -0.0065918 +148:044.820 Sensors-Accelerometer.AccZ 0.858398 +148:085.497 Sensors-Accelerometer.AccX -0.020752 +148:085.497 Sensors-Accelerometer.AccY 0.0195312 +148:085.497 Sensors-Accelerometer.AccZ 1.03516 +148:405.680 Sensors-Magnetometer.MagX 0xfe3e +148:405.804 Sensors-Magnetometer.MagY 0x215 +148:405.925 Sensors-Magnetometer.MagZ 0xcdd +148:703.224 Sensors-Light 0.475715 +149:005.632 Sensors-Slider 0x0 +149:305.611 Sensors-Magnetometer.MagX 0xfe0f +149:305.735 Sensors-Magnetometer.MagY 0x256 +149:305.856 Sensors-Magnetometer.MagZ 0xce1 +149:339.968 Buttons-SW1 0x1 +149:605.614 Sensors-Magnetometer.MagX 0xfde3 +149:605.738 Sensors-Magnetometer.MagY 0x291 +149:605.859 Sensors-Magnetometer.MagZ 0xcdc +150:044.814 Sensors-Accelerometer.AccX -0.00854492 +150:044.814 Sensors-Accelerometer.AccY 0.0175781 +150:044.814 Sensors-Accelerometer.AccZ 1.00439 +150:963.184 Sensors-Slider 0x0 +151:153.224 Sensors-Light 0.530449 +152:007.997 Sensors-Accelerometer.AccX -0.0124512 +152:007.997 Sensors-Accelerometer.AccY 0.0224609 +152:007.997 Sensors-Accelerometer.AccZ 0.99707 +152:055.582 Sensors-Magnetometer.MagX 0xfde3 +152:055.706 Sensors-Magnetometer.MagY 0x292 +152:055.827 Sensors-Magnetometer.MagZ 0xcd1 +152:485.494 Sensors-Accelerometer.AccX -0.14624 +152:485.494 Sensors-Accelerometer.AccY -0.00268555 +152:485.494 Sensors-Accelerometer.AccZ 0.810547 +152:486.538 Buttons-SW1 0x0 diff --git a/sources/common/doc/examples/system1_time1_user.txt b/sources/common/doc/examples/system1_time1_user.txt new file mode 100644 index 0000000..291cca9 --- /dev/null +++ b/sources/common/doc/examples/system1_time1_user.txt @@ -0,0 +1,7255 @@ +22:800.725 Sensors-Accelerometer.AccX -15106.000000 +22:801.269 Sensors-Accelerometer.AccY -465.000000 +22:801.758 Sensors-Accelerometer.AccZ 2590.000000 +22:840.690 Sensors-Accelerometer.AccX -15184.000000 +22:841.231 Sensors-Accelerometer.AccY -852.000000 +22:841.716 Sensors-Accelerometer.AccZ 4198.000000 +22:880.690 Sensors-Accelerometer.AccX -15314.000000 +22:881.237 Sensors-Accelerometer.AccY -135.000000 +22:881.729 Sensors-Accelerometer.AccZ 3034.000000 +22:920.690 Sensors-Accelerometer.AccX -15142.000000 +22:921.239 Sensors-Accelerometer.AccY -851.000000 +22:921.734 Sensors-Accelerometer.AccZ 2757.000000 +22:960.690 Sensors-Accelerometer.AccX -14551.000000 +22:961.236 Sensors-Accelerometer.AccY -151.000000 +22:961.727 Sensors-Accelerometer.AccZ 3209.000000 +23:000.725 Sensors-Accelerometer.AccX -15155.000000 +23:001.277 Sensors-Accelerometer.AccY -498.000000 +23:001.772 Sensors-Accelerometer.AccZ 2645.000000 +23:040.690 Sensors-Accelerometer.AccX -14795.000000 +23:041.230 Sensors-Accelerometer.AccY -373.000000 +23:041.717 Sensors-Accelerometer.AccZ 3017.000000 +23:120.690 Sensors-Accelerometer.AccX -14751.000000 +23:121.234 Sensors-Accelerometer.AccY -323.000000 +23:121.727 Sensors-Accelerometer.AccZ 3451.000000 +23:200.725 Sensors-Accelerometer.AccX -14839.000000 +23:201.268 Sensors-Accelerometer.AccY -463.000000 +23:201.760 Sensors-Accelerometer.AccZ 3248.000000 +23:240.690 Sensors-Accelerometer.AccX -15115.000000 +23:241.238 Sensors-Accelerometer.AccY -65.000000 +23:241.704 Sensors-Accelerometer.AccZ 3181.000000 +23:280.690 Sensors-Accelerometer.AccX -15087.000000 +23:281.240 Sensors-Accelerometer.AccY -367.000000 +23:281.738 Sensors-Accelerometer.AccZ 3227.000000 +23:320.690 Sensors-Accelerometer.AccX -14984.000000 +23:321.233 Sensors-Accelerometer.AccY -597.000000 +23:321.728 Sensors-Accelerometer.AccZ 3418.000000 +23:400.725 Sensors-Accelerometer.AccX -14952.000000 +23:401.267 Sensors-Accelerometer.AccY -570.000000 +23:401.758 Sensors-Accelerometer.AccZ 3164.000000 +23:440.690 Sensors-Accelerometer.AccX -14590.000000 +23:441.235 Sensors-Accelerometer.AccY 259.000000 +23:441.726 Sensors-Accelerometer.AccZ 3400.000000 +23:480.690 Sensors-Accelerometer.AccX -15286.000000 +23:481.239 Sensors-Accelerometer.AccY -93.000000 +23:481.705 Sensors-Accelerometer.AccZ 3053.000000 +23:520.690 Sensors-Accelerometer.AccX -15057.000000 +23:521.237 Sensors-Accelerometer.AccY -269.000000 +23:521.727 Sensors-Accelerometer.AccZ 3083.000000 +23:560.690 Sensors-Accelerometer.AccX -15113.000000 +23:561.236 Sensors-Accelerometer.AccY 128.000000 +23:561.716 Sensors-Accelerometer.AccZ 2973.000000 +23:600.725 Sensors-Accelerometer.AccX -14919.000000 +23:601.270 Sensors-Accelerometer.AccY 325.000000 +23:601.763 Sensors-Accelerometer.AccZ 2966.000000 +23:680.690 Sensors-Accelerometer.AccX -15103.000000 +23:681.234 Sensors-Accelerometer.AccY 95.000000 +23:681.701 Sensors-Accelerometer.AccZ 2759.000000 +23:760.690 Sensors-Accelerometer.AccX -14975.000000 +23:761.232 Sensors-Accelerometer.AccY 434.000000 +23:761.720 Sensors-Accelerometer.AccZ 2791.000000 +23:800.725 Sensors-Accelerometer.AccX -15485.000000 +23:801.270 Sensors-Accelerometer.AccY 518.000000 +23:801.764 Sensors-Accelerometer.AccZ 2774.000000 +23:840.690 Sensors-Accelerometer.AccX -14871.000000 +23:841.235 Sensors-Accelerometer.AccY 172.000000 +23:841.723 Sensors-Accelerometer.AccZ 2716.000000 +23:880.690 Sensors-Accelerometer.AccX -14999.000000 +23:881.239 Sensors-Accelerometer.AccY -257.000000 +23:881.728 Sensors-Accelerometer.AccZ 2772.000000 +23:920.690 Sensors-Accelerometer.AccX -15182.000000 +23:921.237 Sensors-Accelerometer.AccY -175.000000 +23:921.729 Sensors-Accelerometer.AccZ 3160.000000 +23:960.690 Sensors-Accelerometer.AccX -15029.000000 +23:961.242 Sensors-Accelerometer.AccY 48.000000 +23:961.706 Sensors-Accelerometer.AccZ 2829.000000 +24:000.725 Sensors-Accelerometer.AccX -15410.000000 +24:001.269 Sensors-Accelerometer.AccY -158.000000 +24:001.758 Sensors-Accelerometer.AccZ 2355.000000 +24:040.690 Sensors-Accelerometer.AccX -15519.000000 +24:041.237 Sensors-Accelerometer.AccY -111.000000 +24:041.729 Sensors-Accelerometer.AccZ 2596.000000 +24:080.690 Sensors-Accelerometer.AccX -14520.000000 +24:081.232 Sensors-Accelerometer.AccY -217.000000 +24:081.722 Sensors-Accelerometer.AccZ 3399.000000 +24:120.690 Sensors-Accelerometer.AccX -15493.000000 +24:121.236 Sensors-Accelerometer.AccY -430.000000 +24:121.728 Sensors-Accelerometer.AccZ 2957.000000 +24:160.690 Sensors-Accelerometer.AccX -15287.000000 +24:161.239 Sensors-Accelerometer.AccY 71.000000 +24:161.708 Sensors-Accelerometer.AccZ 2867.000000 +24:200.684 Sensors-Magnetometer.MagX 395.000000 +24:201.176 Sensors-Magnetometer.MagY -290.000000 +24:201.663 Sensors-Magnetometer.MagZ -106.000000 +24:202.184 Sensors-Accelerometer.AccX -14720.000000 +24:202.724 Sensors-Accelerometer.AccY 252.000000 +24:203.212 Sensors-Accelerometer.AccZ 1110.000000 +24:240.690 Sensors-Accelerometer.AccX -15923.000000 +24:241.243 Sensors-Accelerometer.AccY -178.000000 +24:241.733 Sensors-Accelerometer.AccZ 858.000000 +24:280.690 Sensors-Accelerometer.AccX -15666.000000 +24:281.238 Sensors-Accelerometer.AccY 188.000000 +24:281.730 Sensors-Accelerometer.AccZ 2362.000000 +24:320.690 Sensors-Accelerometer.AccX -15476.000000 +24:321.231 Sensors-Accelerometer.AccY -155.000000 +24:321.721 Sensors-Accelerometer.AccZ 1935.000000 +24:360.690 Sensors-Accelerometer.AccX -15491.000000 +24:361.241 Sensors-Accelerometer.AccY -464.000000 +24:361.725 Sensors-Accelerometer.AccZ 1905.000000 +24:400.725 Sensors-Accelerometer.AccX -15418.000000 +24:401.267 Sensors-Accelerometer.AccY -11.000000 +24:401.730 Sensors-Accelerometer.AccZ 1573.000000 +24:440.690 Sensors-Accelerometer.AccX -14622.000000 +24:441.240 Sensors-Accelerometer.AccY -283.000000 +24:441.734 Sensors-Accelerometer.AccZ 1162.000000 +24:480.690 Sensors-Accelerometer.AccX -14593.000000 +24:481.235 Sensors-Accelerometer.AccY -853.000000 +24:481.724 Sensors-Accelerometer.AccZ 732.000000 +24:520.690 Sensors-Accelerometer.AccX -15600.000000 +24:521.236 Sensors-Accelerometer.AccY -544.000000 +24:521.723 Sensors-Accelerometer.AccZ 309.000000 +24:550.684 Sensors-Magnetometer.MagX 432.000000 +24:551.172 Sensors-Magnetometer.MagY -279.000000 +24:551.667 Sensors-Magnetometer.MagZ -53.000000 +24:560.690 Sensors-Accelerometer.AccX -15296.000000 +24:561.236 Sensors-Accelerometer.AccY -149.000000 +24:561.728 Sensors-Accelerometer.AccZ -301.000000 +24:600.683 Sensors-Magnetometer.MagX 432.000000 +24:601.167 Sensors-Magnetometer.MagY -276.000000 +24:601.652 Sensors-Magnetometer.MagZ -45.000000 +24:602.149 Sensors-Accelerometer.AccX -15327.000000 +24:602.699 Sensors-Accelerometer.AccY -359.000000 +24:603.189 Sensors-Accelerometer.AccZ -544.000000 +24:640.690 Sensors-Accelerometer.AccX -15589.000000 +24:641.235 Sensors-Accelerometer.AccY -122.000000 +24:641.721 Sensors-Accelerometer.AccZ -1162.000000 +24:680.690 Sensors-Accelerometer.AccX -15290.000000 +24:681.233 Sensors-Accelerometer.AccY -428.000000 +24:681.719 Sensors-Accelerometer.AccZ -614.000000 +24:720.690 Sensors-Accelerometer.AccX -14866.000000 +24:721.234 Sensors-Accelerometer.AccY -879.000000 +24:721.731 Sensors-Accelerometer.AccZ 640.000000 +24:760.690 Sensors-Accelerometer.AccX -14947.000000 +24:761.239 Sensors-Accelerometer.AccY -366.000000 +24:761.733 Sensors-Accelerometer.AccZ 955.000000 +24:800.725 Sensors-Accelerometer.AccX -15417.000000 +24:801.270 Sensors-Accelerometer.AccY -795.000000 +24:801.766 Sensors-Accelerometer.AccZ 739.000000 +24:840.690 Sensors-Accelerometer.AccX -14655.000000 +24:841.239 Sensors-Accelerometer.AccY -1298.000000 +24:841.754 Sensors-Accelerometer.AccZ 879.000000 +24:880.690 Sensors-Accelerometer.AccX -15830.000000 +24:881.241 Sensors-Accelerometer.AccY -1358.000000 +24:881.757 Sensors-Accelerometer.AccZ 1980.000000 +24:900.684 Sensors-Magnetometer.MagX 423.000000 +24:901.174 Sensors-Magnetometer.MagY -254.000000 +24:901.665 Sensors-Magnetometer.MagZ -133.000000 +24:920.690 Sensors-Accelerometer.AccX -14570.000000 +24:921.234 Sensors-Accelerometer.AccY -2156.000000 +24:921.752 Sensors-Accelerometer.AccZ 3063.000000 +24:960.690 Sensors-Accelerometer.AccX -14617.000000 +24:961.234 Sensors-Accelerometer.AccY -1535.000000 +24:961.755 Sensors-Accelerometer.AccZ 3577.000000 +25:000.725 Sensors-Accelerometer.AccX -13680.000000 +25:001.264 Sensors-Accelerometer.AccY -2402.000000 +25:001.778 Sensors-Accelerometer.AccZ 3848.000000 +25:040.690 Sensors-Accelerometer.AccX -13921.000000 +25:041.234 Sensors-Accelerometer.AccY -1907.000000 +25:041.757 Sensors-Accelerometer.AccZ 3523.000000 +25:080.690 Sensors-Accelerometer.AccX -14104.000000 +25:081.232 Sensors-Accelerometer.AccY -751.000000 +25:081.733 Sensors-Accelerometer.AccZ 3890.000000 +25:100.684 Sensors-Magnetometer.MagX 428.000000 +25:101.173 Sensors-Magnetometer.MagY -228.000000 +25:101.661 Sensors-Magnetometer.MagZ -193.000000 +25:120.690 Sensors-Accelerometer.AccX -13869.000000 +25:121.233 Sensors-Accelerometer.AccY -1303.000000 +25:121.753 Sensors-Accelerometer.AccZ 4937.000000 +25:160.690 Sensors-Accelerometer.AccX -14348.000000 +25:161.235 Sensors-Accelerometer.AccY -1129.000000 +25:161.751 Sensors-Accelerometer.AccZ 5911.000000 +25:200.725 Sensors-Accelerometer.AccX -14689.000000 +25:201.269 Sensors-Accelerometer.AccY -872.000000 +25:201.757 Sensors-Accelerometer.AccZ 5023.000000 +25:240.690 Sensors-Accelerometer.AccX -14454.000000 +25:241.234 Sensors-Accelerometer.AccY -1279.000000 +25:241.758 Sensors-Accelerometer.AccZ 6383.000000 +25:280.690 Sensors-Accelerometer.AccX -13933.000000 +25:281.229 Sensors-Accelerometer.AccY -1988.000000 +25:281.745 Sensors-Accelerometer.AccZ 6768.000000 +25:300.683 Sensors-Magnetometer.MagX 377.000000 +25:301.174 Sensors-Magnetometer.MagY -237.000000 +25:301.665 Sensors-Magnetometer.MagZ -245.000000 +25:320.690 Sensors-Accelerometer.AccX -13570.000000 +25:321.233 Sensors-Accelerometer.AccY -2752.000000 +25:321.747 Sensors-Accelerometer.AccZ 7900.000000 +25:360.690 Sensors-Accelerometer.AccX -13815.000000 +25:361.234 Sensors-Accelerometer.AccY -754.000000 +25:361.728 Sensors-Accelerometer.AccZ 7007.000000 +25:400.725 Sensors-Accelerometer.AccX -12959.000000 +25:401.274 Sensors-Accelerometer.AccY -1131.000000 +25:401.794 Sensors-Accelerometer.AccZ 6774.000000 +25:440.690 Sensors-Accelerometer.AccX -12768.000000 +25:441.234 Sensors-Accelerometer.AccY -1789.000000 +25:441.754 Sensors-Accelerometer.AccZ 6533.000000 +25:480.690 Sensors-Accelerometer.AccX -12517.000000 +25:481.241 Sensors-Accelerometer.AccY -2160.000000 +25:481.757 Sensors-Accelerometer.AccZ 6919.000000 +25:520.690 Sensors-Accelerometer.AccX -13462.000000 +25:521.234 Sensors-Accelerometer.AccY -1153.000000 +25:521.755 Sensors-Accelerometer.AccZ 7125.000000 +25:550.684 Sensors-Magnetometer.MagX 367.000000 +25:551.186 Sensors-Magnetometer.MagY -222.000000 +25:551.683 Sensors-Magnetometer.MagZ -296.000000 +25:560.690 Sensors-Accelerometer.AccX -13680.000000 +25:561.232 Sensors-Accelerometer.AccY -2341.000000 +25:561.753 Sensors-Accelerometer.AccZ 7124.000000 +25:600.725 Sensors-Accelerometer.AccX -12790.000000 +25:601.268 Sensors-Accelerometer.AccY -2208.000000 +25:601.773 Sensors-Accelerometer.AccZ 7324.000000 +25:640.690 Sensors-Accelerometer.AccX -13275.000000 +25:641.233 Sensors-Accelerometer.AccY -1779.000000 +25:641.749 Sensors-Accelerometer.AccZ 7034.000000 +25:680.690 Sensors-Accelerometer.AccX -13130.000000 +25:681.227 Sensors-Accelerometer.AccY -1739.000000 +25:681.743 Sensors-Accelerometer.AccZ 7552.000000 +25:720.690 Sensors-Accelerometer.AccX -11453.000000 +25:721.236 Sensors-Accelerometer.AccY -1459.000000 +25:721.754 Sensors-Accelerometer.AccZ 8700.000000 +25:760.690 Sensors-Accelerometer.AccX -11702.000000 +25:761.236 Sensors-Accelerometer.AccY -764.000000 +25:761.727 Sensors-Accelerometer.AccZ 8640.000000 +25:800.725 Sensors-Accelerometer.AccX -12351.000000 +25:801.273 Sensors-Accelerometer.AccY -1893.000000 +25:801.792 Sensors-Accelerometer.AccZ 8862.000000 +25:840.690 Sensors-Accelerometer.AccX -12919.000000 +25:841.233 Sensors-Accelerometer.AccY -1923.000000 +25:841.753 Sensors-Accelerometer.AccZ 8307.000000 +25:880.690 Sensors-Accelerometer.AccX -13646.000000 +25:881.231 Sensors-Accelerometer.AccY -1989.000000 +25:881.753 Sensors-Accelerometer.AccZ 7923.000000 +25:920.690 Sensors-Accelerometer.AccX -13455.000000 +25:921.230 Sensors-Accelerometer.AccY -1528.000000 +25:921.744 Sensors-Accelerometer.AccZ 7507.000000 +25:960.690 Sensors-Accelerometer.AccX -13119.000000 +25:961.233 Sensors-Accelerometer.AccY -815.000000 +25:961.731 Sensors-Accelerometer.AccZ 6920.000000 +26:000.725 Sensors-Accelerometer.AccX -13372.000000 +26:001.267 Sensors-Accelerometer.AccY -1024.000000 +26:001.771 Sensors-Accelerometer.AccZ 7037.000000 +26:040.690 Sensors-Accelerometer.AccX -13711.000000 +26:041.237 Sensors-Accelerometer.AccY -39.000000 +26:041.704 Sensors-Accelerometer.AccZ 4915.000000 +26:080.690 Sensors-Accelerometer.AccX -12720.000000 +26:081.232 Sensors-Accelerometer.AccY -1651.000000 +26:081.752 Sensors-Accelerometer.AccZ 8156.000000 +26:120.690 Sensors-Accelerometer.AccX -13766.000000 +26:121.232 Sensors-Accelerometer.AccY -2350.000000 +26:121.753 Sensors-Accelerometer.AccZ 8091.000000 +26:160.690 Sensors-Accelerometer.AccX -13383.000000 +26:161.237 Sensors-Accelerometer.AccY -2784.000000 +26:161.752 Sensors-Accelerometer.AccZ 8413.000000 +26:200.725 Sensors-Accelerometer.AccX -12733.000000 +26:201.275 Sensors-Accelerometer.AccY -2859.000000 +26:201.803 Sensors-Accelerometer.AccZ 8242.000000 +26:240.690 Sensors-Accelerometer.AccX -11610.000000 +26:241.226 Sensors-Accelerometer.AccY -1951.000000 +26:241.741 Sensors-Accelerometer.AccZ 8549.000000 +26:250.684 Sensors-Magnetometer.MagX 323.000000 +26:251.172 Sensors-Magnetometer.MagY -197.000000 +26:251.657 Sensors-Magnetometer.MagZ -367.000000 +26:320.690 Sensors-Accelerometer.AccX -11940.000000 +26:321.229 Sensors-Accelerometer.AccY -2537.000000 +26:321.746 Sensors-Accelerometer.AccZ 8440.000000 +26:360.690 Sensors-Accelerometer.AccX -12990.000000 +26:361.236 Sensors-Accelerometer.AccY -3529.000000 +26:361.753 Sensors-Accelerometer.AccZ 7690.000000 +26:400.725 Sensors-Accelerometer.AccX -11802.000000 +26:401.260 Sensors-Accelerometer.AccY -3464.000000 +26:401.769 Sensors-Accelerometer.AccZ 9069.000000 +26:440.690 Sensors-Accelerometer.AccX -13558.000000 +26:441.230 Sensors-Accelerometer.AccY -4903.000000 +26:441.750 Sensors-Accelerometer.AccZ 8084.000000 +26:480.690 Sensors-Accelerometer.AccX -13718.000000 +26:481.230 Sensors-Accelerometer.AccY -4202.000000 +26:481.741 Sensors-Accelerometer.AccZ 8475.000000 +26:520.690 Sensors-Accelerometer.AccX -10700.000000 +26:521.234 Sensors-Accelerometer.AccY -2788.000000 +26:521.749 Sensors-Accelerometer.AccZ 7453.000000 +26:560.690 Sensors-Accelerometer.AccX -13936.000000 +26:561.225 Sensors-Accelerometer.AccY -5408.000000 +26:561.734 Sensors-Accelerometer.AccZ 7461.000000 +26:600.683 Sensors-Magnetometer.MagX 369.000000 +26:601.169 Sensors-Magnetometer.MagY -137.000000 +26:601.655 Sensors-Magnetometer.MagZ -339.000000 +26:602.180 Sensors-Accelerometer.AccX -12159.000000 +26:602.729 Sensors-Accelerometer.AccY -3326.000000 +26:603.246 Sensors-Accelerometer.AccZ 6021.000000 +26:640.690 Sensors-Accelerometer.AccX -13824.000000 +26:641.219 Sensors-Accelerometer.AccY -4462.000000 +26:641.735 Sensors-Accelerometer.AccZ 5711.000000 +26:680.690 Sensors-Accelerometer.AccX -11814.000000 +26:681.232 Sensors-Accelerometer.AccY -2593.000000 +26:681.748 Sensors-Accelerometer.AccZ 6329.000000 +26:700.684 Sensors-Magnetometer.MagX 416.000000 +26:701.169 Sensors-Magnetometer.MagY -102.000000 +26:701.656 Sensors-Magnetometer.MagZ -284.000000 +26:720.690 Sensors-Accelerometer.AccX -14856.000000 +26:721.228 Sensors-Accelerometer.AccY -4169.000000 +26:721.744 Sensors-Accelerometer.AccZ 5349.000000 +26:760.690 Sensors-Accelerometer.AccX -13497.000000 +26:761.231 Sensors-Accelerometer.AccY -4039.000000 +26:761.749 Sensors-Accelerometer.AccZ 4385.000000 +26:800.725 Sensors-Accelerometer.AccX -15369.000000 +26:801.267 Sensors-Accelerometer.AccY -5024.000000 +26:801.782 Sensors-Accelerometer.AccZ 3912.000000 +26:840.690 Sensors-Accelerometer.AccX -13012.000000 +26:841.232 Sensors-Accelerometer.AccY -4408.000000 +26:841.746 Sensors-Accelerometer.AccZ 2470.000000 +26:850.684 Sensors-Magnetometer.MagX 454.000000 +26:851.175 Sensors-Magnetometer.MagY -62.000000 +26:851.642 Sensors-Magnetometer.MagZ -229.000000 +26:880.690 Sensors-Accelerometer.AccX -13600.000000 +26:881.219 Sensors-Accelerometer.AccY -4765.000000 +26:881.732 Sensors-Accelerometer.AccZ 1582.000000 +26:920.690 Sensors-Accelerometer.AccX -12222.000000 +26:921.236 Sensors-Accelerometer.AccY -5381.000000 +26:921.749 Sensors-Accelerometer.AccZ 1381.000000 +26:960.690 Sensors-Accelerometer.AccX -13408.000000 +26:961.230 Sensors-Accelerometer.AccY -5647.000000 +26:961.750 Sensors-Accelerometer.AccZ 734.000000 +27:000.725 Sensors-Accelerometer.AccX -14240.000000 +27:001.263 Sensors-Accelerometer.AccY -5648.000000 +27:001.778 Sensors-Accelerometer.AccZ 1293.000000 +27:040.690 Sensors-Accelerometer.AccX -13403.000000 +27:041.233 Sensors-Accelerometer.AccY -6231.000000 +27:041.755 Sensors-Accelerometer.AccZ 1273.000000 +27:050.683 Sensors-Magnetometer.MagX 478.000000 +27:051.176 Sensors-Magnetometer.MagY -48.000000 +27:051.636 Sensors-Magnetometer.MagZ -171.000000 +27:080.690 Sensors-Accelerometer.AccX -13895.000000 +27:081.233 Sensors-Accelerometer.AccY -5239.000000 +27:081.756 Sensors-Accelerometer.AccZ 1247.000000 +27:120.690 Sensors-Accelerometer.AccX -14345.000000 +27:121.233 Sensors-Accelerometer.AccY -5947.000000 +27:121.756 Sensors-Accelerometer.AccZ 1727.000000 +27:160.690 Sensors-Accelerometer.AccX -14451.000000 +27:161.234 Sensors-Accelerometer.AccY -5577.000000 +27:161.756 Sensors-Accelerometer.AccZ 1205.000000 +27:200.725 Sensors-Accelerometer.AccX -13715.000000 +27:201.269 Sensors-Accelerometer.AccY -5710.000000 +27:201.785 Sensors-Accelerometer.AccZ 1717.000000 +27:240.690 Sensors-Accelerometer.AccX -13567.000000 +27:241.233 Sensors-Accelerometer.AccY -5635.000000 +27:241.752 Sensors-Accelerometer.AccZ 1363.000000 +27:280.690 Sensors-Accelerometer.AccX -13483.000000 +27:281.232 Sensors-Accelerometer.AccY -6281.000000 +27:281.753 Sensors-Accelerometer.AccZ 1040.000000 +27:320.690 Sensors-Accelerometer.AccX -13593.000000 +27:321.232 Sensors-Accelerometer.AccY -5623.000000 +27:321.751 Sensors-Accelerometer.AccZ 370.000000 +27:360.690 Sensors-Accelerometer.AccX -13361.000000 +27:361.235 Sensors-Accelerometer.AccY -5167.000000 +27:361.760 Sensors-Accelerometer.AccZ 422.000000 +27:400.684 Sensors-Magnetometer.MagX 493.000000 +27:401.172 Sensors-Magnetometer.MagY -37.000000 +27:401.634 Sensors-Magnetometer.MagZ -119.000000 +27:402.160 Sensors-Accelerometer.AccX -13658.000000 +27:402.701 Sensors-Accelerometer.AccY -5679.000000 +27:403.224 Sensors-Accelerometer.AccZ 1121.000000 +27:440.690 Sensors-Accelerometer.AccX -13996.000000 +27:441.237 Sensors-Accelerometer.AccY -5580.000000 +27:441.758 Sensors-Accelerometer.AccZ -952.000000 +27:480.690 Sensors-Accelerometer.AccX -14312.000000 +27:481.235 Sensors-Accelerometer.AccY -6445.000000 +27:481.758 Sensors-Accelerometer.AccZ -800.000000 +27:520.690 Sensors-Accelerometer.AccX -14279.000000 +27:521.235 Sensors-Accelerometer.AccY -6461.000000 +27:521.755 Sensors-Accelerometer.AccZ 470.000000 +27:560.690 Sensors-Accelerometer.AccX -13578.000000 +27:561.234 Sensors-Accelerometer.AccY -6042.000000 +27:561.751 Sensors-Accelerometer.AccZ 1199.000000 +27:600.725 Sensors-Accelerometer.AccX -14256.000000 +27:601.266 Sensors-Accelerometer.AccY -6529.000000 +27:601.789 Sensors-Accelerometer.AccZ 1114.000000 +27:640.690 Sensors-Accelerometer.AccX -14381.000000 +27:641.240 Sensors-Accelerometer.AccY -6388.000000 +27:641.763 Sensors-Accelerometer.AccZ 782.000000 +27:680.690 Sensors-Accelerometer.AccX -13953.000000 +27:681.230 Sensors-Accelerometer.AccY -6883.000000 +27:681.748 Sensors-Accelerometer.AccZ 1375.000000 +27:720.690 Sensors-Accelerometer.AccX -12614.000000 +27:721.238 Sensors-Accelerometer.AccY -5419.000000 +27:721.762 Sensors-Accelerometer.AccZ 1490.000000 +27:760.690 Sensors-Accelerometer.AccX -13876.000000 +27:761.230 Sensors-Accelerometer.AccY -4188.000000 +27:761.750 Sensors-Accelerometer.AccZ 1766.000000 +27:800.683 Sensors-Magnetometer.MagX 477.000000 +27:801.176 Sensors-Magnetometer.MagY -92.000000 +27:801.643 Sensors-Magnetometer.MagZ -123.000000 +27:802.167 Sensors-Accelerometer.AccX -14296.000000 +27:802.710 Sensors-Accelerometer.AccY -6801.000000 +27:803.225 Sensors-Accelerometer.AccZ 1289.000000 +27:840.690 Sensors-Accelerometer.AccX -14672.000000 +27:841.233 Sensors-Accelerometer.AccY -3619.000000 +27:841.754 Sensors-Accelerometer.AccZ 656.000000 +27:880.690 Sensors-Accelerometer.AccX -14576.000000 +27:881.231 Sensors-Accelerometer.AccY -2650.000000 +27:881.746 Sensors-Accelerometer.AccZ 279.000000 +27:920.690 Sensors-Accelerometer.AccX -15270.000000 +27:921.233 Sensors-Accelerometer.AccY -2766.000000 +27:921.749 Sensors-Accelerometer.AccZ 1149.000000 +27:950.683 Sensors-Magnetometer.MagX 465.000000 +27:951.174 Sensors-Magnetometer.MagY -174.000000 +27:951.664 Sensors-Magnetometer.MagZ -65.000000 +27:960.690 Sensors-Accelerometer.AccX -14047.000000 +27:961.239 Sensors-Accelerometer.AccY -3863.000000 +27:961.762 Sensors-Accelerometer.AccZ -1251.000000 +28:000.683 Sensors-Magnetometer.MagX 452.000000 +28:001.169 Sensors-Magnetometer.MagY -232.000000 +28:001.653 Sensors-Magnetometer.MagZ -1.000000 +28:002.123 Sensors-Accelerometer.AccX -13528.000000 +28:002.659 Sensors-Accelerometer.AccY -226.000000 +28:003.146 Sensors-Accelerometer.AccZ -1924.000000 +28:040.690 Sensors-Accelerometer.AccX -12942.000000 +28:041.237 Sensors-Accelerometer.AccY -1240.000000 +28:041.751 Sensors-Accelerometer.AccZ -2528.000000 +28:050.684 Sensors-Magnetometer.MagX 415.000000 +28:051.176 Sensors-Magnetometer.MagY -301.000000 +28:051.672 Sensors-Magnetometer.MagZ 53.000000 +28:080.690 Sensors-Accelerometer.AccX -13590.000000 +28:081.233 Sensors-Accelerometer.AccY 3277.000000 +28:081.745 Sensors-Accelerometer.AccZ -4041.000000 +28:100.683 Sensors-Magnetometer.MagX 367.000000 +28:101.181 Sensors-Magnetometer.MagY -366.000000 +28:101.674 Sensors-Magnetometer.MagZ 120.000000 +28:120.690 Sensors-Accelerometer.AccX -12749.000000 +28:121.238 Sensors-Accelerometer.AccY 3777.000000 +28:121.758 Sensors-Accelerometer.AccZ -5051.000000 +28:160.690 Sensors-Accelerometer.AccX -11404.000000 +28:161.230 Sensors-Accelerometer.AccY 1846.000000 +28:161.741 Sensors-Accelerometer.AccZ -4323.000000 +28:200.725 Sensors-Accelerometer.AccX -15574.000000 +28:201.270 Sensors-Accelerometer.AccY 2792.000000 +28:201.779 Sensors-Accelerometer.AccZ -4018.000000 +28:240.690 Sensors-Accelerometer.AccX -16238.000000 +28:241.236 Sensors-Accelerometer.AccY -1702.000000 +28:241.751 Sensors-Accelerometer.AccZ -5398.000000 +28:250.684 Sensors-Magnetometer.MagX 394.000000 +28:251.173 Sensors-Magnetometer.MagY -286.000000 +28:251.666 Sensors-Magnetometer.MagZ 154.000000 +28:280.690 Sensors-Accelerometer.AccX -16523.000000 +28:281.235 Sensors-Accelerometer.AccY -262.000000 +28:281.729 Sensors-Accelerometer.AccZ -4309.000000 +28:300.683 Sensors-Magnetometer.MagX 421.000000 +28:301.172 Sensors-Magnetometer.MagY -235.000000 +28:301.666 Sensors-Magnetometer.MagZ 142.000000 +28:320.690 Sensors-Accelerometer.AccX -21661.000000 +28:321.230 Sensors-Accelerometer.AccY -5788.000000 +28:321.748 Sensors-Accelerometer.AccZ -7189.000000 +28:360.690 Sensors-Accelerometer.AccX -19052.000000 +28:361.236 Sensors-Accelerometer.AccY -3540.000000 +28:361.750 Sensors-Accelerometer.AccZ -4390.000000 +28:400.684 Sensors-Magnetometer.MagX 436.000000 +28:401.168 Sensors-Magnetometer.MagY -230.000000 +28:401.659 Sensors-Magnetometer.MagZ 66.000000 +28:402.156 Sensors-Accelerometer.AccX -22341.000000 +28:402.705 Sensors-Accelerometer.AccY -2510.000000 +28:403.229 Sensors-Accelerometer.AccZ -2688.000000 +28:440.690 Sensors-Accelerometer.AccX -14872.000000 +28:441.235 Sensors-Accelerometer.AccY -2990.000000 +28:441.758 Sensors-Accelerometer.AccZ -3803.000000 +28:480.690 Sensors-Accelerometer.AccX -18038.000000 +28:481.232 Sensors-Accelerometer.AccY -2900.000000 +28:481.743 Sensors-Accelerometer.AccZ 532.000000 +28:500.684 Sensors-Magnetometer.MagX 479.000000 +28:501.179 Sensors-Magnetometer.MagY -196.000000 +28:501.668 Sensors-Magnetometer.MagZ -2.000000 +28:520.690 Sensors-Accelerometer.AccX -15290.000000 +28:521.234 Sensors-Accelerometer.AccY -3669.000000 +28:521.756 Sensors-Accelerometer.AccZ 953.000000 +28:560.690 Sensors-Accelerometer.AccX -14957.000000 +28:561.234 Sensors-Accelerometer.AccY -2620.000000 +28:561.757 Sensors-Accelerometer.AccZ 1948.000000 +28:600.684 Sensors-Magnetometer.MagX 488.000000 +28:601.171 Sensors-Magnetometer.MagY -185.000000 +28:601.661 Sensors-Magnetometer.MagZ -108.000000 +28:602.183 Sensors-Accelerometer.AccX -10096.000000 +28:602.725 Sensors-Accelerometer.AccY -565.000000 +28:603.219 Sensors-Accelerometer.AccZ 2257.000000 +28:640.690 Sensors-Accelerometer.AccX -2192.000000 +28:641.204 Sensors-Accelerometer.AccY 2794.000000 +28:641.721 Sensors-Accelerometer.AccZ 1936.000000 +28:680.690 Sensors-Accelerometer.AccX 1092.000000 +28:681.197 Sensors-Accelerometer.AccY 2525.000000 +28:681.713 Sensors-Accelerometer.AccZ 2185.000000 +28:720.690 Sensors-Accelerometer.AccX -6713.000000 +28:721.207 Sensors-Accelerometer.AccY -1886.000000 +28:721.727 Sensors-Accelerometer.AccZ 295.000000 +28:750.683 Sensors-Magnetometer.MagX 464.000000 +28:751.169 Sensors-Magnetometer.MagY -236.000000 +28:751.659 Sensors-Magnetometer.MagZ -9.000000 +28:760.690 Sensors-Accelerometer.AccX -19611.000000 +28:761.240 Sensors-Accelerometer.AccY -4018.000000 +28:761.761 Sensors-Accelerometer.AccZ -1389.000000 +28:800.684 Sensors-Magnetometer.MagX 433.000000 +28:801.167 Sensors-Magnetometer.MagY -239.000000 +28:801.658 Sensors-Magnetometer.MagZ 43.000000 +28:802.156 Sensors-Accelerometer.AccX -21765.000000 +28:802.697 Sensors-Accelerometer.AccY -4344.000000 +28:803.210 Sensors-Accelerometer.AccZ -1851.000000 +28:840.690 Sensors-Accelerometer.AccX -26626.000000 +28:841.229 Sensors-Accelerometer.AccY -4174.000000 +28:841.743 Sensors-Accelerometer.AccZ -1386.000000 +28:880.690 Sensors-Accelerometer.AccX -28257.000000 +28:881.233 Sensors-Accelerometer.AccY -5582.000000 +28:881.750 Sensors-Accelerometer.AccZ 933.000000 +28:920.690 Sensors-Accelerometer.AccX -29874.000000 +28:921.236 Sensors-Accelerometer.AccY -6854.000000 +28:921.757 Sensors-Accelerometer.AccZ -2469.000000 +28:960.690 Sensors-Accelerometer.AccX -20994.000000 +28:961.226 Sensors-Accelerometer.AccY -4248.000000 +28:961.738 Sensors-Accelerometer.AccZ -961.000000 +29:000.683 Sensors-Magnetometer.MagX 495.000000 +29:001.175 Sensors-Magnetometer.MagY -212.000000 +29:001.659 Sensors-Magnetometer.MagZ -11.000000 +29:002.156 Sensors-Accelerometer.AccX -3977.000000 +29:002.678 Sensors-Accelerometer.AccY 639.000000 +29:003.170 Sensors-Accelerometer.AccZ 194.000000 +29:040.690 Sensors-Accelerometer.AccX 7803.000000 +29:041.210 Sensors-Accelerometer.AccY 5123.000000 +29:041.727 Sensors-Accelerometer.AccZ 65.000000 +29:050.684 Sensors-Magnetometer.MagX 498.000000 +29:051.178 Sensors-Magnetometer.MagY -209.000000 +29:051.667 Sensors-Magnetometer.MagZ -62.000000 +29:080.690 Sensors-Accelerometer.AccX 3623.000000 +29:081.210 Sensors-Accelerometer.AccY 2444.000000 +29:081.732 Sensors-Accelerometer.AccZ 1932.000000 +29:120.690 Sensors-Accelerometer.AccX 3716.000000 +29:121.204 Sensors-Accelerometer.AccY 2090.000000 +29:121.718 Sensors-Accelerometer.AccZ 328.000000 +29:160.690 Sensors-Accelerometer.AccX -7718.000000 +29:161.214 Sensors-Accelerometer.AccY 631.000000 +29:161.708 Sensors-Accelerometer.AccZ -2164.000000 +29:200.684 Sensors-Magnetometer.MagX 466.000000 +29:201.170 Sensors-Magnetometer.MagY -223.000000 +29:201.659 Sensors-Magnetometer.MagZ 12.000000 +29:202.155 Sensors-Accelerometer.AccX -24634.000000 +29:202.700 Sensors-Accelerometer.AccY -7520.000000 +29:203.220 Sensors-Accelerometer.AccZ -3317.000000 +29:240.690 Sensors-Accelerometer.AccX -32764.000000 +29:241.242 Sensors-Accelerometer.AccY -8855.000000 +29:241.766 Sensors-Accelerometer.AccZ -6570.000000 +29:250.684 Sensors-Magnetometer.MagX 444.000000 +29:251.174 Sensors-Magnetometer.MagY -170.000000 +29:251.660 Sensors-Magnetometer.MagZ 22.000000 +29:280.690 Sensors-Accelerometer.AccX -28783.000000 +29:281.244 Sensors-Accelerometer.AccY -8082.000000 +29:281.764 Sensors-Accelerometer.AccZ 2016.000000 +29:320.690 Sensors-Accelerometer.AccX -24637.000000 +29:321.241 Sensors-Accelerometer.AccY -3638.000000 +29:321.761 Sensors-Accelerometer.AccZ -895.000000 +29:360.690 Sensors-Accelerometer.AccX -12192.000000 +29:361.228 Sensors-Accelerometer.AccY -4667.000000 +29:361.751 Sensors-Accelerometer.AccZ -763.000000 +29:400.684 Sensors-Magnetometer.MagX 469.000000 +29:401.175 Sensors-Magnetometer.MagY -185.000000 +29:401.665 Sensors-Magnetometer.MagZ -48.000000 +29:402.163 Sensors-Accelerometer.AccX -2181.000000 +29:402.684 Sensors-Accelerometer.AccY -3698.000000 +29:403.202 Sensors-Accelerometer.AccZ -2327.000000 +29:440.690 Sensors-Accelerometer.AccX -13071.000000 +29:441.238 Sensors-Accelerometer.AccY -5085.000000 +29:441.759 Sensors-Accelerometer.AccZ 5447.000000 +29:480.690 Sensors-Accelerometer.AccX -15951.000000 +29:481.243 Sensors-Accelerometer.AccY -2042.000000 +29:481.763 Sensors-Accelerometer.AccZ 2586.000000 +29:500.683 Sensors-Magnetometer.MagX 509.000000 +29:501.174 Sensors-Magnetometer.MagY -168.000000 +29:501.654 Sensors-Magnetometer.MagZ -88.000000 +29:520.690 Sensors-Accelerometer.AccX -15868.000000 +29:521.234 Sensors-Accelerometer.AccY -3430.000000 +29:521.753 Sensors-Accelerometer.AccZ 1407.000000 +29:560.690 Sensors-Accelerometer.AccX -15119.000000 +29:561.240 Sensors-Accelerometer.AccY -3348.000000 +29:561.759 Sensors-Accelerometer.AccZ 6062.000000 +29:600.725 Sensors-Accelerometer.AccX -15118.000000 +29:601.270 Sensors-Accelerometer.AccY -3631.000000 +29:601.791 Sensors-Accelerometer.AccZ 5451.000000 +29:640.690 Sensors-Accelerometer.AccX -13422.000000 +29:641.230 Sensors-Accelerometer.AccY -3049.000000 +29:641.750 Sensors-Accelerometer.AccZ 5411.000000 +29:650.684 Sensors-Magnetometer.MagX 501.000000 +29:651.177 Sensors-Magnetometer.MagY -156.000000 +29:651.668 Sensors-Magnetometer.MagZ -165.000000 +29:680.690 Sensors-Accelerometer.AccX -10500.000000 +29:681.227 Sensors-Accelerometer.AccY -1300.000000 +29:681.743 Sensors-Accelerometer.AccZ 6653.000000 +29:700.683 Sensors-Magnetometer.MagX 499.000000 +29:701.175 Sensors-Magnetometer.MagY -228.000000 +29:701.661 Sensors-Magnetometer.MagZ -153.000000 +29:720.690 Sensors-Accelerometer.AccX -13355.000000 +29:721.239 Sensors-Accelerometer.AccY 1575.000000 +29:721.757 Sensors-Accelerometer.AccZ 3623.000000 +29:750.683 Sensors-Magnetometer.MagX 468.000000 +29:751.172 Sensors-Magnetometer.MagY -305.000000 +29:751.664 Sensors-Magnetometer.MagZ -104.000000 +29:760.690 Sensors-Accelerometer.AccX -13769.000000 +29:761.229 Sensors-Accelerometer.AccY 2830.000000 +29:761.748 Sensors-Accelerometer.AccZ 2630.000000 +29:800.725 Sensors-Accelerometer.AccX -11949.000000 +29:801.272 Sensors-Accelerometer.AccY 3609.000000 +29:801.789 Sensors-Accelerometer.AccZ 3726.000000 +29:840.690 Sensors-Accelerometer.AccX -11788.000000 +29:841.234 Sensors-Accelerometer.AccY 1686.000000 +29:841.746 Sensors-Accelerometer.AccZ 5279.000000 +29:850.684 Sensors-Magnetometer.MagX 440.000000 +29:851.172 Sensors-Magnetometer.MagY -316.000000 +29:851.664 Sensors-Magnetometer.MagZ -161.000000 +29:880.690 Sensors-Accelerometer.AccX -13035.000000 +29:881.242 Sensors-Accelerometer.AccY -249.000000 +29:881.736 Sensors-Accelerometer.AccZ 7033.000000 +29:920.690 Sensors-Accelerometer.AccX -13763.000000 +29:921.230 Sensors-Accelerometer.AccY -487.000000 +29:921.725 Sensors-Accelerometer.AccZ 8278.000000 +29:950.684 Sensors-Magnetometer.MagX 427.000000 +29:951.179 Sensors-Magnetometer.MagY -278.000000 +29:951.674 Sensors-Magnetometer.MagZ -212.000000 +29:960.690 Sensors-Accelerometer.AccX -15338.000000 +29:961.239 Sensors-Accelerometer.AccY -3918.000000 +29:961.763 Sensors-Accelerometer.AccZ 10020.000000 +30:000.725 Sensors-Accelerometer.AccX -14533.000000 +30:001.273 Sensors-Accelerometer.AccY -1029.000000 +30:001.788 Sensors-Accelerometer.AccZ 7434.000000 +30:040.690 Sensors-Accelerometer.AccX -10739.000000 +30:041.237 Sensors-Accelerometer.AccY 2014.000000 +30:041.759 Sensors-Accelerometer.AccZ 6860.000000 +30:080.690 Sensors-Accelerometer.AccX -14053.000000 +30:081.234 Sensors-Accelerometer.AccY 554.000000 +30:081.724 Sensors-Accelerometer.AccZ 9165.000000 +30:120.690 Sensors-Accelerometer.AccX -14296.000000 +30:121.236 Sensors-Accelerometer.AccY -793.000000 +30:121.731 Sensors-Accelerometer.AccZ 7812.000000 +30:160.690 Sensors-Accelerometer.AccX -14803.000000 +30:161.234 Sensors-Accelerometer.AccY 2748.000000 +30:161.752 Sensors-Accelerometer.AccZ 8215.000000 +30:200.725 Sensors-Accelerometer.AccX -10488.000000 +30:201.264 Sensors-Accelerometer.AccY 6542.000000 +30:201.792 Sensors-Accelerometer.AccZ 13154.000000 +30:240.690 Sensors-Accelerometer.AccX -16250.000000 +30:241.237 Sensors-Accelerometer.AccY 10043.000000 +30:241.785 Sensors-Accelerometer.AccZ 11248.000000 +30:280.690 Sensors-Accelerometer.AccX -14337.000000 +30:281.234 Sensors-Accelerometer.AccY 8478.000000 +30:281.757 Sensors-Accelerometer.AccZ 8501.000000 +30:320.690 Sensors-Accelerometer.AccX -10623.000000 +30:321.235 Sensors-Accelerometer.AccY -1064.000000 +30:321.747 Sensors-Accelerometer.AccZ 7086.000000 +30:350.683 Sensors-Magnetometer.MagX 403.000000 +30:351.182 Sensors-Magnetometer.MagY -211.000000 +30:351.675 Sensors-Magnetometer.MagZ -304.000000 +30:360.691 Sensors-Accelerometer.AccX -10597.000000 +30:361.238 Sensors-Accelerometer.AccY -18163.000000 +30:361.790 Sensors-Accelerometer.AccZ 4896.000000 +30:400.725 Sensors-Accelerometer.AccX -7717.000000 +30:401.247 Sensors-Accelerometer.AccY -31394.000000 +30:401.796 Sensors-Accelerometer.AccZ 6365.000000 +30:440.690 Sensors-Accelerometer.AccX -12589.000000 +30:441.236 Sensors-Accelerometer.AccY -13277.000000 +30:441.781 Sensors-Accelerometer.AccZ 4623.000000 +30:450.684 Sensors-Magnetometer.MagX 371.000000 +30:451.179 Sensors-Magnetometer.MagY -275.000000 +30:451.677 Sensors-Magnetometer.MagZ -294.000000 +30:480.690 Sensors-Accelerometer.AccX -12304.000000 +30:481.230 Sensors-Accelerometer.AccY 8602.000000 +30:481.745 Sensors-Accelerometer.AccZ 5093.000000 +30:500.683 Sensors-Magnetometer.MagX 381.000000 +30:501.175 Sensors-Magnetometer.MagY -341.000000 +30:501.662 Sensors-Magnetometer.MagZ -254.000000 +30:520.690 Sensors-Accelerometer.AccX -7406.000000 +30:521.209 Sensors-Accelerometer.AccY 30184.000000 +30:521.756 Sensors-Accelerometer.AccZ 9149.000000 +30:550.684 Sensors-Magnetometer.MagX 398.000000 +30:551.180 Sensors-Magnetometer.MagY -353.000000 +30:551.675 Sensors-Magnetometer.MagZ -199.000000 +30:560.690 Sensors-Accelerometer.AccX -9032.000000 +30:561.209 Sensors-Accelerometer.AccY 31991.000000 +30:561.762 Sensors-Accelerometer.AccZ 8865.000000 +30:600.725 Sensors-Accelerometer.AccX -10191.000000 +30:601.276 Sensors-Accelerometer.AccY 29219.000000 +30:601.829 Sensors-Accelerometer.AccZ 7154.000000 +30:640.690 Sensors-Accelerometer.AccX -12644.000000 +30:641.235 Sensors-Accelerometer.AccY 9761.000000 +30:641.759 Sensors-Accelerometer.AccZ 5237.000000 +30:650.684 Sensors-Magnetometer.MagX 388.000000 +30:651.175 Sensors-Magnetometer.MagY -265.000000 +30:651.668 Sensors-Magnetometer.MagZ -289.000000 +30:680.690 Sensors-Accelerometer.AccX -12367.000000 +30:681.243 Sensors-Accelerometer.AccY -19071.000000 +30:681.794 Sensors-Accelerometer.AccZ 7423.000000 +30:700.683 Sensors-Magnetometer.MagX 384.000000 +30:701.173 Sensors-Magnetometer.MagY -208.000000 +30:701.662 Sensors-Magnetometer.MagZ -321.000000 +30:720.690 Sensors-Accelerometer.AccX -9745.000000 +30:721.208 Sensors-Accelerometer.AccY -32764.000000 +30:721.757 Sensors-Accelerometer.AccZ 9215.000000 +30:760.690 Sensors-Accelerometer.AccX -8901.000000 +30:761.214 Sensors-Accelerometer.AccY -27327.000000 +30:761.760 Sensors-Accelerometer.AccZ 6858.000000 +30:800.683 Sensors-Magnetometer.MagX 412.000000 +30:801.172 Sensors-Magnetometer.MagY -287.000000 +30:801.665 Sensors-Magnetometer.MagZ -235.000000 +30:802.197 Sensors-Accelerometer.AccX -11726.000000 +30:802.742 Sensors-Accelerometer.AccY 3922.000000 +30:803.260 Sensors-Accelerometer.AccZ 4076.000000 +30:840.690 Sensors-Accelerometer.AccX -8747.000000 +30:841.216 Sensors-Accelerometer.AccY 32764.000000 +30:841.769 Sensors-Accelerometer.AccZ 6900.000000 +30:850.684 Sensors-Magnetometer.MagX 393.000000 +30:851.178 Sensors-Magnetometer.MagY -380.000000 +30:851.670 Sensors-Magnetometer.MagZ -167.000000 +30:880.690 Sensors-Accelerometer.AccX -8908.000000 +30:881.212 Sensors-Accelerometer.AccY 32764.000000 +30:881.764 Sensors-Accelerometer.AccZ 5200.000000 +30:920.690 Sensors-Accelerometer.AccX -11696.000000 +30:921.234 Sensors-Accelerometer.AccY 18579.000000 +30:921.786 Sensors-Accelerometer.AccZ 4705.000000 +30:950.683 Sensors-Magnetometer.MagX 404.000000 +30:951.172 Sensors-Magnetometer.MagY -313.000000 +30:951.667 Sensors-Magnetometer.MagZ -232.000000 +30:960.690 Sensors-Accelerometer.AccX -13620.000000 +30:961.232 Sensors-Accelerometer.AccY -4145.000000 +30:961.753 Sensors-Accelerometer.AccZ 4761.000000 +31:000.683 Sensors-Magnetometer.MagX 398.000000 +31:001.179 Sensors-Magnetometer.MagY -229.000000 +31:001.674 Sensors-Magnetometer.MagZ -288.000000 +31:002.196 Sensors-Accelerometer.AccX -15841.000000 +31:002.746 Sensors-Accelerometer.AccY -30632.000000 +31:003.294 Sensors-Accelerometer.AccZ 8725.000000 +31:040.690 Sensors-Accelerometer.AccX -9338.000000 +31:041.213 Sensors-Accelerometer.AccY -32764.000000 +31:041.766 Sensors-Accelerometer.AccZ 10803.000000 +31:080.690 Sensors-Accelerometer.AccX -9715.000000 +31:081.220 Sensors-Accelerometer.AccY -10719.000000 +31:081.771 Sensors-Accelerometer.AccZ 4961.000000 +31:100.683 Sensors-Magnetometer.MagX 392.000000 +31:101.176 Sensors-Magnetometer.MagY -328.000000 +31:101.664 Sensors-Magnetometer.MagZ -219.000000 +31:120.690 Sensors-Accelerometer.AccX -10357.000000 +31:121.237 Sensors-Accelerometer.AccY 5049.000000 +31:121.759 Sensors-Accelerometer.AccZ 3857.000000 +31:150.683 Sensors-Magnetometer.MagX 366.000000 +31:151.178 Sensors-Magnetometer.MagY -431.000000 +31:151.673 Sensors-Magnetometer.MagZ -124.000000 +31:160.690 Sensors-Accelerometer.AccX -8419.000000 +31:161.212 Sensors-Accelerometer.AccY 31729.000000 +31:161.764 Sensors-Accelerometer.AccZ 5456.000000 +31:200.725 Sensors-Accelerometer.AccX -9651.000000 +31:201.248 Sensors-Accelerometer.AccY 27315.000000 +31:201.799 Sensors-Accelerometer.AccZ 6074.000000 +31:240.690 Sensors-Accelerometer.AccX -14804.000000 +31:241.232 Sensors-Accelerometer.AccY 12913.000000 +31:241.777 Sensors-Accelerometer.AccZ 9493.000000 +31:280.690 Sensors-Accelerometer.AccX -18437.000000 +31:281.235 Sensors-Accelerometer.AccY 5820.000000 +31:281.757 Sensors-Accelerometer.AccZ 11710.000000 +31:300.683 Sensors-Magnetometer.MagX 413.000000 +31:301.173 Sensors-Magnetometer.MagY -355.000000 +31:301.668 Sensors-Magnetometer.MagZ -194.000000 +31:320.690 Sensors-Accelerometer.AccX -18172.000000 +31:321.238 Sensors-Accelerometer.AccY -733.000000 +31:321.737 Sensors-Accelerometer.AccZ 12377.000000 +31:350.683 Sensors-Magnetometer.MagX 400.000000 +31:351.171 Sensors-Magnetometer.MagY -294.000000 +31:351.667 Sensors-Magnetometer.MagZ -275.000000 +31:360.690 Sensors-Accelerometer.AccX -13308.000000 +31:361.234 Sensors-Accelerometer.AccY -179.000000 +31:361.725 Sensors-Accelerometer.AccZ 11602.000000 +31:400.683 Sensors-Magnetometer.MagX 385.000000 +31:401.178 Sensors-Magnetometer.MagY -235.000000 +31:401.674 Sensors-Magnetometer.MagZ -371.000000 +31:402.205 Sensors-Accelerometer.AccX -1632.000000 +31:402.721 Sensors-Accelerometer.AccY 3161.000000 +31:403.243 Sensors-Accelerometer.AccZ 9364.000000 +31:440.690 Sensors-Accelerometer.AccX 10780.000000 +31:441.232 Sensors-Accelerometer.AccY -419.000000 +31:441.731 Sensors-Accelerometer.AccZ 7840.000000 +31:450.684 Sensors-Magnetometer.MagX 395.000000 +31:451.180 Sensors-Magnetometer.MagY -170.000000 +31:451.670 Sensors-Magnetometer.MagZ -398.000000 +31:480.690 Sensors-Accelerometer.AccX 14743.000000 +31:481.240 Sensors-Accelerometer.AccY -597.000000 +31:481.733 Sensors-Accelerometer.AccZ 4644.000000 +31:500.684 Sensors-Magnetometer.MagX 438.000000 +31:501.177 Sensors-Magnetometer.MagY -183.000000 +31:501.669 Sensors-Magnetometer.MagZ -330.000000 +31:520.690 Sensors-Accelerometer.AccX 3729.000000 +31:521.204 Sensors-Accelerometer.AccY -705.000000 +31:521.697 Sensors-Accelerometer.AccZ 1208.000000 +31:550.683 Sensors-Magnetometer.MagX 439.000000 +31:551.179 Sensors-Magnetometer.MagY -322.000000 +31:551.670 Sensors-Magnetometer.MagZ -164.000000 +31:560.690 Sensors-Accelerometer.AccX -15084.000000 +31:561.236 Sensors-Accelerometer.AccY 4802.000000 +31:561.755 Sensors-Accelerometer.AccZ 723.000000 +31:600.683 Sensors-Magnetometer.MagX 380.000000 +31:601.174 Sensors-Magnetometer.MagY -451.000000 +31:601.665 Sensors-Magnetometer.MagZ 25.000000 +31:602.164 Sensors-Accelerometer.AccX -32764.000000 +31:602.717 Sensors-Accelerometer.AccY 19312.000000 +31:603.264 Sensors-Accelerometer.AccZ 8149.000000 +31:640.690 Sensors-Accelerometer.AccX -32764.000000 +31:641.245 Sensors-Accelerometer.AccY 21515.000000 +31:641.793 Sensors-Accelerometer.AccZ 9285.000000 +31:680.690 Sensors-Accelerometer.AccX -32553.000000 +31:681.239 Sensors-Accelerometer.AccY 14345.000000 +31:681.785 Sensors-Accelerometer.AccZ 10314.000000 +31:700.683 Sensors-Magnetometer.MagX 462.000000 +31:701.176 Sensors-Magnetometer.MagY -336.000000 +31:701.660 Sensors-Magnetometer.MagZ -78.000000 +31:720.690 Sensors-Accelerometer.AccX -14675.000000 +31:721.243 Sensors-Accelerometer.AccY 7564.000000 +31:721.767 Sensors-Accelerometer.AccZ 7201.000000 +31:750.683 Sensors-Magnetometer.MagX 494.000000 +31:751.175 Sensors-Magnetometer.MagY -205.000000 +31:751.663 Sensors-Magnetometer.MagZ -227.000000 +31:760.690 Sensors-Accelerometer.AccX 1344.000000 +31:761.195 Sensors-Accelerometer.AccY 2862.000000 +31:761.717 Sensors-Accelerometer.AccZ 3844.000000 +31:800.683 Sensors-Magnetometer.MagX 491.000000 +31:801.181 Sensors-Magnetometer.MagY -112.000000 +31:801.667 Sensors-Magnetometer.MagZ -277.000000 +31:802.192 Sensors-Accelerometer.AccX 12566.000000 +31:802.744 Sensors-Accelerometer.AccY -834.000000 +31:803.236 Sensors-Accelerometer.AccZ 5310.000000 +31:840.690 Sensors-Accelerometer.AccX 10349.000000 +31:841.235 Sensors-Accelerometer.AccY -3466.000000 +31:841.754 Sensors-Accelerometer.AccZ 3259.000000 +31:880.690 Sensors-Accelerometer.AccX 8136.000000 +31:881.211 Sensors-Accelerometer.AccY -428.000000 +31:881.701 Sensors-Accelerometer.AccZ 3047.000000 +31:900.683 Sensors-Magnetometer.MagX 495.000000 +31:901.182 Sensors-Magnetometer.MagY -278.000000 +31:901.676 Sensors-Magnetometer.MagZ -79.000000 +31:920.690 Sensors-Accelerometer.AccX -24984.000000 +31:921.239 Sensors-Accelerometer.AccY 6215.000000 +31:921.767 Sensors-Accelerometer.AccZ 2701.000000 +31:950.683 Sensors-Magnetometer.MagX 417.000000 +31:951.174 Sensors-Magnetometer.MagY -395.000000 +31:951.670 Sensors-Magnetometer.MagZ 42.000000 +31:960.690 Sensors-Accelerometer.AccX -32764.000000 +31:961.245 Sensors-Accelerometer.AccY 14244.000000 +31:961.791 Sensors-Accelerometer.AccZ 10133.000000 +32:000.725 Sensors-Accelerometer.AccX -19744.000000 +32:001.260 Sensors-Accelerometer.AccY 12625.000000 +32:001.798 Sensors-Accelerometer.AccZ 10088.000000 +32:040.690 Sensors-Accelerometer.AccX -9164.000000 +32:041.213 Sensors-Accelerometer.AccY 4844.000000 +32:041.730 Sensors-Accelerometer.AccZ 7342.000000 +32:080.690 Sensors-Accelerometer.AccX -9055.000000 +32:081.212 Sensors-Accelerometer.AccY 635.000000 +32:081.706 Sensors-Accelerometer.AccZ 5360.000000 +32:100.683 Sensors-Magnetometer.MagX 484.000000 +32:101.172 Sensors-Magnetometer.MagY -292.000000 +32:101.660 Sensors-Magnetometer.MagZ 24.000000 +32:120.690 Sensors-Accelerometer.AccX -14180.000000 +32:121.232 Sensors-Accelerometer.AccY -1087.000000 +32:121.749 Sensors-Accelerometer.AccZ 5651.000000 +32:160.690 Sensors-Accelerometer.AccX -15622.000000 +32:161.236 Sensors-Accelerometer.AccY -311.000000 +32:161.729 Sensors-Accelerometer.AccZ 6419.000000 +32:200.725 Sensors-Accelerometer.AccX -18176.000000 +32:201.262 Sensors-Accelerometer.AccY 6106.000000 +32:201.780 Sensors-Accelerometer.AccZ 5608.000000 +32:240.690 Sensors-Accelerometer.AccX -15633.000000 +32:241.233 Sensors-Accelerometer.AccY 16989.000000 +32:241.774 Sensors-Accelerometer.AccZ 4682.000000 +32:280.690 Sensors-Accelerometer.AccX -16528.000000 +32:281.228 Sensors-Accelerometer.AccY 14471.000000 +32:281.772 Sensors-Accelerometer.AccZ 3689.000000 +32:300.684 Sensors-Magnetometer.MagX 478.000000 +32:301.180 Sensors-Magnetometer.MagY -281.000000 +32:301.670 Sensors-Magnetometer.MagZ -33.000000 +32:320.690 Sensors-Accelerometer.AccX -13901.000000 +32:321.233 Sensors-Accelerometer.AccY 2853.000000 +32:321.748 Sensors-Accelerometer.AccZ 4123.000000 +32:350.683 Sensors-Magnetometer.MagX 473.000000 +32:351.179 Sensors-Magnetometer.MagY -218.000000 +32:351.667 Sensors-Magnetometer.MagZ -111.000000 +32:360.690 Sensors-Accelerometer.AccX -9476.000000 +32:361.209 Sensors-Accelerometer.AccY -15334.000000 +32:361.759 Sensors-Accelerometer.AccZ 7123.000000 +32:400.683 Sensors-Magnetometer.MagX 484.000000 +32:401.169 Sensors-Magnetometer.MagY -154.000000 +32:401.657 Sensors-Magnetometer.MagZ -140.000000 +32:402.182 Sensors-Accelerometer.AccX -4489.000000 +32:402.701 Sensors-Accelerometer.AccY -32764.000000 +32:403.253 Sensors-Accelerometer.AccZ 9864.000000 +32:440.690 Sensors-Accelerometer.AccX -4873.000000 +32:441.211 Sensors-Accelerometer.AccY -24407.000000 +32:441.760 Sensors-Accelerometer.AccZ 6418.000000 +32:480.690 Sensors-Accelerometer.AccX -13131.000000 +32:481.232 Sensors-Accelerometer.AccY -5211.000000 +32:481.756 Sensors-Accelerometer.AccZ -29.000000 +32:500.683 Sensors-Magnetometer.MagX 494.000000 +32:501.175 Sensors-Magnetometer.MagY -237.000000 +32:501.667 Sensors-Magnetometer.MagZ -55.000000 +32:520.690 Sensors-Accelerometer.AccX -18771.000000 +32:521.240 Sensors-Accelerometer.AccY 28817.000000 +32:521.784 Sensors-Accelerometer.AccZ 67.000000 +32:550.683 Sensors-Magnetometer.MagX 476.000000 +32:551.175 Sensors-Magnetometer.MagY -326.000000 +32:551.671 Sensors-Magnetometer.MagZ 44.000000 +32:560.690 Sensors-Accelerometer.AccX -16906.000000 +32:561.232 Sensors-Accelerometer.AccY 32764.000000 +32:561.787 Sensors-Accelerometer.AccZ 1037.000000 +32:600.725 Sensors-Accelerometer.AccX -17709.000000 +32:601.273 Sensors-Accelerometer.AccY 23519.000000 +32:601.829 Sensors-Accelerometer.AccZ 2038.000000 +32:640.690 Sensors-Accelerometer.AccX -18588.000000 +32:641.232 Sensors-Accelerometer.AccY -6535.000000 +32:641.758 Sensors-Accelerometer.AccZ 8264.000000 +32:650.684 Sensors-Magnetometer.MagX 487.000000 +32:651.178 Sensors-Magnetometer.MagY -313.000000 +32:651.672 Sensors-Magnetometer.MagZ -59.000000 +32:680.690 Sensors-Accelerometer.AccX -13424.000000 +32:681.230 Sensors-Accelerometer.AccY -14954.000000 +32:681.775 Sensors-Accelerometer.AccZ 8277.000000 +32:700.683 Sensors-Magnetometer.MagX 500.000000 +32:701.176 Sensors-Magnetometer.MagY -183.000000 +32:701.672 Sensors-Magnetometer.MagZ -210.000000 +32:720.690 Sensors-Accelerometer.AccX -6657.000000 +32:721.210 Sensors-Accelerometer.AccY -11445.000000 +32:721.759 Sensors-Accelerometer.AccZ 9572.000000 +32:750.683 Sensors-Magnetometer.MagX 491.000000 +32:751.185 Sensors-Magnetometer.MagY -57.000000 +32:751.656 Sensors-Magnetometer.MagZ -273.000000 +32:760.690 Sensors-Accelerometer.AccX -30.000000 +32:761.160 Sensors-Accelerometer.AccY -1485.000000 +32:761.680 Sensors-Accelerometer.AccZ 10961.000000 +32:800.683 Sensors-Magnetometer.MagX 486.000000 +32:801.168 Sensors-Magnetometer.MagY 41.000000 +32:801.623 Sensors-Magnetometer.MagZ -319.000000 +32:802.147 Sensors-Accelerometer.AccX 2811.000000 +32:802.662 Sensors-Accelerometer.AccY 4472.000000 +32:803.175 Sensors-Accelerometer.AccZ 10502.000000 +32:840.690 Sensors-Accelerometer.AccX 10898.000000 +32:841.226 Sensors-Accelerometer.AccY 10226.000000 +32:841.767 Sensors-Accelerometer.AccZ 11378.000000 +32:850.683 Sensors-Magnetometer.MagX 551.000000 +32:851.169 Sensors-Magnetometer.MagY 85.000000 +32:851.628 Sensors-Magnetometer.MagZ -208.000000 +32:880.690 Sensors-Accelerometer.AccX -17050.000000 +32:881.224 Sensors-Accelerometer.AccY -5451.000000 +32:881.741 Sensors-Accelerometer.AccZ -4911.000000 +32:900.683 Sensors-Magnetometer.MagX 599.000000 +32:901.174 Sensors-Magnetometer.MagY 18.000000 +32:901.631 Sensors-Magnetometer.MagZ 95.000000 +32:920.690 Sensors-Accelerometer.AccX -22382.000000 +32:921.237 Sensors-Accelerometer.AccY -4128.000000 +32:921.750 Sensors-Accelerometer.AccZ 1686.000000 +32:950.683 Sensors-Magnetometer.MagX 506.000000 +32:951.171 Sensors-Magnetometer.MagY -252.000000 +32:951.659 Sensors-Magnetometer.MagZ 217.000000 +32:960.690 Sensors-Accelerometer.AccX -22967.000000 +32:961.235 Sensors-Accelerometer.AccY 11478.000000 +32:961.777 Sensors-Accelerometer.AccZ 2060.000000 +33:000.683 Sensors-Magnetometer.MagX 380.000000 +33:001.172 Sensors-Magnetometer.MagY -422.000000 +33:001.659 Sensors-Magnetometer.MagZ 214.000000 +33:002.181 Sensors-Accelerometer.AccX -25910.000000 +33:002.728 Sensors-Accelerometer.AccY 20194.000000 +33:003.269 Sensors-Accelerometer.AccZ 2562.000000 +33:040.690 Sensors-Accelerometer.AccX -18764.000000 +33:041.234 Sensors-Accelerometer.AccY 15082.000000 +33:041.776 Sensors-Accelerometer.AccZ 5373.000000 +33:050.684 Sensors-Magnetometer.MagX 400.000000 +33:051.166 Sensors-Magnetometer.MagY -412.000000 +33:051.654 Sensors-Magnetometer.MagZ 105.000000 +33:080.690 Sensors-Accelerometer.AccX -9015.000000 +33:081.212 Sensors-Accelerometer.AccY 5096.000000 +33:081.730 Sensors-Accelerometer.AccZ 3353.000000 +33:100.683 Sensors-Magnetometer.MagX 480.000000 +33:101.170 Sensors-Magnetometer.MagY -283.000000 +33:101.659 Sensors-Magnetometer.MagZ -80.000000 +33:120.690 Sensors-Accelerometer.AccX -9392.000000 +33:121.210 Sensors-Accelerometer.AccY -10313.000000 +33:121.753 Sensors-Accelerometer.AccZ -840.000000 +33:150.683 Sensors-Magnetometer.MagX 501.000000 +33:151.178 Sensors-Magnetometer.MagY -120.000000 +33:151.667 Sensors-Magnetometer.MagZ -186.000000 +33:160.690 Sensors-Accelerometer.AccX -5584.000000 +33:161.202 Sensors-Accelerometer.AccY -23152.000000 +33:161.745 Sensors-Accelerometer.AccZ -5657.000000 +33:200.725 Sensors-Accelerometer.AccX -3765.000000 +33:201.245 Sensors-Accelerometer.AccY -22722.000000 +33:201.789 Sensors-Accelerometer.AccZ -4984.000000 +33:240.690 Sensors-Accelerometer.AccX -5793.000000 +33:241.210 Sensors-Accelerometer.AccY -14906.000000 +33:241.754 Sensors-Accelerometer.AccZ -9747.000000 +33:250.683 Sensors-Magnetometer.MagX 560.000000 +33:251.172 Sensors-Magnetometer.MagY -146.000000 +33:251.662 Sensors-Magnetometer.MagZ 41.000000 +33:280.690 Sensors-Accelerometer.AccX -18988.000000 +33:281.230 Sensors-Accelerometer.AccY 14713.000000 +33:281.770 Sensors-Accelerometer.AccZ -4976.000000 +33:300.684 Sensors-Magnetometer.MagX 542.000000 +33:301.171 Sensors-Magnetometer.MagY -182.000000 +33:301.657 Sensors-Magnetometer.MagZ 268.000000 +33:320.690 Sensors-Accelerometer.AccX -26302.000000 +33:321.235 Sensors-Accelerometer.AccY 31686.000000 +33:321.785 Sensors-Accelerometer.AccZ 6106.000000 +33:360.690 Sensors-Accelerometer.AccX -27756.000000 +33:361.234 Sensors-Accelerometer.AccY 29786.000000 +33:361.779 Sensors-Accelerometer.AccZ 12091.000000 +33:400.683 Sensors-Magnetometer.MagX 573.000000 +33:401.177 Sensors-Magnetometer.MagY -113.000000 +33:401.665 Sensors-Magnetometer.MagZ 193.000000 +33:402.190 Sensors-Accelerometer.AccX -17965.000000 +33:402.737 Sensors-Accelerometer.AccY 12147.000000 +33:403.288 Sensors-Accelerometer.AccZ 7207.000000 +33:440.690 Sensors-Accelerometer.AccX -12545.000000 +33:441.232 Sensors-Accelerometer.AccY -3258.000000 +33:441.748 Sensors-Accelerometer.AccZ -5913.000000 +33:450.684 Sensors-Magnetometer.MagX 573.000000 +33:451.176 Sensors-Magnetometer.MagY -82.000000 +33:451.637 Sensors-Magnetometer.MagZ 15.000000 +33:480.690 Sensors-Accelerometer.AccX -5415.000000 +33:481.207 Sensors-Accelerometer.AccY -15178.000000 +33:481.754 Sensors-Accelerometer.AccZ -5916.000000 +33:500.684 Sensors-Magnetometer.MagX 566.000000 +33:501.177 Sensors-Magnetometer.MagY -32.000000 +33:501.634 Sensors-Magnetometer.MagZ -109.000000 +33:520.690 Sensors-Accelerometer.AccX -10099.000000 +33:521.236 Sensors-Accelerometer.AccY -17118.000000 +33:521.785 Sensors-Accelerometer.AccZ -11072.000000 +33:560.690 Sensors-Accelerometer.AccX -15654.000000 +33:561.240 Sensors-Accelerometer.AccY -14580.000000 +33:561.786 Sensors-Accelerometer.AccZ -11043.000000 +33:600.684 Sensors-Magnetometer.MagX 581.000000 +33:601.170 Sensors-Magnetometer.MagY -69.000000 +33:601.630 Sensors-Magnetometer.MagZ 24.000000 +33:602.122 Sensors-Accelerometer.AccX -10958.000000 +33:602.659 Sensors-Accelerometer.AccY -3625.000000 +33:603.171 Sensors-Accelerometer.AccZ -4357.000000 +33:640.690 Sensors-Accelerometer.AccX -18269.000000 +33:641.231 Sensors-Accelerometer.AccY 16047.000000 +33:641.777 Sensors-Accelerometer.AccZ 8321.000000 +33:650.684 Sensors-Magnetometer.MagX 576.000000 +33:651.168 Sensors-Magnetometer.MagY -126.000000 +33:651.656 Sensors-Magnetometer.MagZ 130.000000 +33:680.690 Sensors-Accelerometer.AccX -18952.000000 +33:681.231 Sensors-Accelerometer.AccY 27279.000000 +33:681.776 Sensors-Accelerometer.AccZ 12995.000000 +33:700.684 Sensors-Magnetometer.MagX 573.000000 +33:701.177 Sensors-Magnetometer.MagY -117.000000 +33:701.663 Sensors-Magnetometer.MagZ 197.000000 +33:720.690 Sensors-Accelerometer.AccX -20412.000000 +33:721.239 Sensors-Accelerometer.AccY 22973.000000 +33:721.785 Sensors-Accelerometer.AccZ 13946.000000 +33:750.684 Sensors-Magnetometer.MagX 589.000000 +33:751.179 Sensors-Magnetometer.MagY -71.000000 +33:751.645 Sensors-Magnetometer.MagZ 146.000000 +33:760.690 Sensors-Accelerometer.AccX -17476.000000 +33:761.228 Sensors-Accelerometer.AccY 8747.000000 +33:761.752 Sensors-Accelerometer.AccZ 10389.000000 +33:800.684 Sensors-Magnetometer.MagX 594.000000 +33:801.170 Sensors-Magnetometer.MagY -40.000000 +33:801.627 Sensors-Magnetometer.MagZ 30.000000 +33:802.124 Sensors-Accelerometer.AccX -14267.000000 +33:802.669 Sensors-Accelerometer.AccY 984.000000 +33:803.156 Sensors-Accelerometer.AccZ 6493.000000 +33:840.690 Sensors-Accelerometer.AccX -9010.000000 +33:841.212 Sensors-Accelerometer.AccY -9816.000000 +33:841.733 Sensors-Accelerometer.AccZ 1024.000000 +33:850.684 Sensors-Magnetometer.MagX 562.000000 +33:851.173 Sensors-Magnetometer.MagY -28.000000 +33:851.635 Sensors-Magnetometer.MagZ -96.000000 +33:880.690 Sensors-Accelerometer.AccX -10253.000000 +33:881.232 Sensors-Accelerometer.AccY -14918.000000 +33:881.779 Sensors-Accelerometer.AccZ -5070.000000 +33:900.683 Sensors-Magnetometer.MagX 562.000000 +33:901.175 Sensors-Magnetometer.MagY 36.000000 +33:901.637 Sensors-Magnetometer.MagZ -130.000000 +33:920.690 Sensors-Accelerometer.AccX -11541.000000 +33:921.226 Sensors-Accelerometer.AccY -19906.000000 +33:921.772 Sensors-Accelerometer.AccZ -4852.000000 +33:960.690 Sensors-Accelerometer.AccX -8100.000000 +33:961.210 Sensors-Accelerometer.AccY -7129.000000 +33:961.734 Sensors-Accelerometer.AccZ -2004.000000 +34:000.683 Sensors-Magnetometer.MagX 577.000000 +34:001.170 Sensors-Magnetometer.MagY -71.000000 +34:001.635 Sensors-Magnetometer.MagZ -46.000000 +34:002.133 Sensors-Accelerometer.AccX -11948.000000 +34:002.679 Sensors-Accelerometer.AccY -2787.000000 +34:003.196 Sensors-Accelerometer.AccZ -806.000000 +34:040.690 Sensors-Accelerometer.AccX -16587.000000 +34:041.239 Sensors-Accelerometer.AccY 7842.000000 +34:041.762 Sensors-Accelerometer.AccZ 5024.000000 +34:050.684 Sensors-Magnetometer.MagX 575.000000 +34:051.176 Sensors-Magnetometer.MagY -133.000000 +34:051.664 Sensors-Magnetometer.MagZ 74.000000 +34:080.690 Sensors-Accelerometer.AccX -18445.000000 +34:081.231 Sensors-Accelerometer.AccY 10856.000000 +34:081.766 Sensors-Accelerometer.AccZ 8311.000000 +34:100.684 Sensors-Magnetometer.MagX 564.000000 +34:101.168 Sensors-Magnetometer.MagY -166.000000 +34:101.653 Sensors-Magnetometer.MagZ 127.000000 +34:120.690 Sensors-Accelerometer.AccX -17720.000000 +34:121.231 Sensors-Accelerometer.AccY 14456.000000 +34:121.771 Sensors-Accelerometer.AccZ 12865.000000 +34:160.690 Sensors-Accelerometer.AccX -14890.000000 +34:161.227 Sensors-Accelerometer.AccY 12025.000000 +34:161.773 Sensors-Accelerometer.AccZ 13383.000000 +34:200.683 Sensors-Magnetometer.MagX 588.000000 +34:201.176 Sensors-Magnetometer.MagY -108.000000 +34:201.665 Sensors-Magnetometer.MagZ 94.000000 +34:202.166 Sensors-Accelerometer.AccX -12881.000000 +34:202.707 Sensors-Accelerometer.AccY 7969.000000 +34:203.232 Sensors-Accelerometer.AccZ 11968.000000 +34:240.690 Sensors-Accelerometer.AccX -14019.000000 +34:241.236 Sensors-Accelerometer.AccY 3999.000000 +34:241.759 Sensors-Accelerometer.AccZ 9837.000000 +34:250.684 Sensors-Magnetometer.MagX 577.000000 +34:251.173 Sensors-Magnetometer.MagY -102.000000 +34:251.664 Sensors-Magnetometer.MagZ 4.000000 +34:280.690 Sensors-Accelerometer.AccX -16306.000000 +34:281.237 Sensors-Accelerometer.AccY -5577.000000 +34:281.758 Sensors-Accelerometer.AccZ 4974.000000 +34:300.684 Sensors-Magnetometer.MagX 566.000000 +34:301.179 Sensors-Magnetometer.MagY -76.000000 +34:301.648 Sensors-Magnetometer.MagZ -57.000000 +34:320.690 Sensors-Accelerometer.AccX -11638.000000 +34:321.235 Sensors-Accelerometer.AccY -9033.000000 +34:321.757 Sensors-Accelerometer.AccZ 3960.000000 +34:350.683 Sensors-Magnetometer.MagX 562.000000 +34:351.175 Sensors-Magnetometer.MagY -14.000000 +34:351.640 Sensors-Magnetometer.MagZ -112.000000 +34:360.690 Sensors-Accelerometer.AccX -6232.000000 +34:361.212 Sensors-Accelerometer.AccY -18255.000000 +34:361.763 Sensors-Accelerometer.AccZ 180.000000 +34:400.683 Sensors-Magnetometer.MagX 573.000000 +34:401.177 Sensors-Magnetometer.MagY -15.000000 +34:401.643 Sensors-Magnetometer.MagZ -62.000000 +34:402.145 Sensors-Accelerometer.AccX -10380.000000 +34:402.694 Sensors-Accelerometer.AccY -12066.000000 +34:403.237 Sensors-Accelerometer.AccZ -1488.000000 +34:440.690 Sensors-Accelerometer.AccX -7263.000000 +34:441.213 Sensors-Accelerometer.AccY -3043.000000 +34:441.733 Sensors-Accelerometer.AccZ -889.000000 +34:450.684 Sensors-Magnetometer.MagX 586.000000 +34:451.174 Sensors-Magnetometer.MagY -100.000000 +34:451.659 Sensors-Magnetometer.MagZ 36.000000 +34:480.690 Sensors-Accelerometer.AccX -13958.000000 +34:481.234 Sensors-Accelerometer.AccY 6338.000000 +34:481.755 Sensors-Accelerometer.AccZ 1660.000000 +34:500.683 Sensors-Magnetometer.MagX 570.000000 +34:501.174 Sensors-Magnetometer.MagY -164.000000 +34:501.656 Sensors-Magnetometer.MagZ 156.000000 +34:520.690 Sensors-Accelerometer.AccX -13594.000000 +34:521.233 Sensors-Accelerometer.AccY 13654.000000 +34:521.778 Sensors-Accelerometer.AccZ 6090.000000 +34:550.684 Sensors-Magnetometer.MagX 561.000000 +34:551.175 Sensors-Magnetometer.MagY -172.000000 +34:551.666 Sensors-Magnetometer.MagZ 237.000000 +34:560.690 Sensors-Accelerometer.AccX -17276.000000 +34:561.232 Sensors-Accelerometer.AccY 12144.000000 +34:561.772 Sensors-Accelerometer.AccZ 6468.000000 +34:600.684 Sensors-Magnetometer.MagX 536.000000 +34:601.172 Sensors-Magnetometer.MagY -156.000000 +34:601.659 Sensors-Magnetometer.MagZ 295.000000 +34:602.183 Sensors-Accelerometer.AccX -19534.000000 +34:602.729 Sensors-Accelerometer.AccY 6067.000000 +34:603.250 Sensors-Accelerometer.AccZ 4097.000000 +34:640.690 Sensors-Accelerometer.AccX -18676.000000 +34:641.234 Sensors-Accelerometer.AccY 588.000000 +34:641.727 Sensors-Accelerometer.AccZ 2663.000000 +34:680.690 Sensors-Accelerometer.AccX -17596.000000 +34:681.240 Sensors-Accelerometer.AccY 540.000000 +34:681.734 Sensors-Accelerometer.AccZ 271.000000 +34:700.684 Sensors-Magnetometer.MagX 488.000000 +34:701.173 Sensors-Magnetometer.MagY -193.000000 +34:701.665 Sensors-Magnetometer.MagZ 376.000000 +34:720.690 Sensors-Accelerometer.AccX -13577.000000 +34:721.235 Sensors-Accelerometer.AccY 4824.000000 +34:721.752 Sensors-Accelerometer.AccZ -401.000000 +34:760.690 Sensors-Accelerometer.AccX -13775.000000 +34:761.236 Sensors-Accelerometer.AccY 4430.000000 +34:761.757 Sensors-Accelerometer.AccZ -367.000000 +34:800.683 Sensors-Magnetometer.MagX 417.000000 +34:801.172 Sensors-Magnetometer.MagY -225.000000 +34:801.664 Sensors-Magnetometer.MagZ 449.000000 +34:802.191 Sensors-Accelerometer.AccX -15541.000000 +34:802.741 Sensors-Accelerometer.AccY 1015.000000 +34:803.261 Sensors-Accelerometer.AccZ -1558.000000 +34:840.690 Sensors-Accelerometer.AccX -16698.000000 +34:841.233 Sensors-Accelerometer.AccY 1848.000000 +34:841.747 Sensors-Accelerometer.AccZ -1970.000000 +34:880.690 Sensors-Accelerometer.AccX -13832.000000 +34:881.228 Sensors-Accelerometer.AccY 3752.000000 +34:881.740 Sensors-Accelerometer.AccZ -995.000000 +34:920.690 Sensors-Accelerometer.AccX -14541.000000 +34:921.233 Sensors-Accelerometer.AccY 3929.000000 +34:921.755 Sensors-Accelerometer.AccZ -2533.000000 +34:950.683 Sensors-Magnetometer.MagX 363.000000 +34:951.176 Sensors-Magnetometer.MagY -247.000000 +34:951.667 Sensors-Magnetometer.MagZ 496.000000 +34:960.690 Sensors-Accelerometer.AccX -13768.000000 +34:961.225 Sensors-Accelerometer.AccY 3536.000000 +34:961.738 Sensors-Accelerometer.AccZ -2497.000000 +35:000.725 Sensors-Accelerometer.AccX -14872.000000 +35:001.270 Sensors-Accelerometer.AccY 3554.000000 +35:001.791 Sensors-Accelerometer.AccZ -3551.000000 +35:040.690 Sensors-Accelerometer.AccX -15864.000000 +35:041.236 Sensors-Accelerometer.AccY 6356.000000 +35:041.759 Sensors-Accelerometer.AccZ -3864.000000 +35:080.690 Sensors-Accelerometer.AccX -13594.000000 +35:081.233 Sensors-Accelerometer.AccY 5097.000000 +35:081.756 Sensors-Accelerometer.AccZ -3796.000000 +35:100.683 Sensors-Magnetometer.MagX 309.000000 +35:101.178 Sensors-Magnetometer.MagY -253.000000 +35:101.670 Sensors-Magnetometer.MagZ 545.000000 +35:120.690 Sensors-Accelerometer.AccX -14810.000000 +35:121.235 Sensors-Accelerometer.AccY 4805.000000 +35:121.758 Sensors-Accelerometer.AccZ -5268.000000 +35:160.690 Sensors-Accelerometer.AccX -14751.000000 +35:161.239 Sensors-Accelerometer.AccY 5613.000000 +35:161.762 Sensors-Accelerometer.AccZ -5267.000000 +35:200.683 Sensors-Magnetometer.MagX 235.000000 +35:201.175 Sensors-Magnetometer.MagY -271.000000 +35:201.665 Sensors-Magnetometer.MagZ 582.000000 +35:202.193 Sensors-Accelerometer.AccX -12385.000000 +35:202.740 Sensors-Accelerometer.AccY 4341.000000 +35:203.260 Sensors-Accelerometer.AccZ -6191.000000 +35:240.690 Sensors-Accelerometer.AccX -12814.000000 +35:241.230 Sensors-Accelerometer.AccY 4184.000000 +35:241.746 Sensors-Accelerometer.AccZ -5984.000000 +35:280.690 Sensors-Accelerometer.AccX -12075.000000 +35:281.242 Sensors-Accelerometer.AccY 6538.000000 +35:281.763 Sensors-Accelerometer.AccZ -7156.000000 +35:300.683 Sensors-Magnetometer.MagX 174.000000 +35:301.173 Sensors-Magnetometer.MagY -265.000000 +35:301.663 Sensors-Magnetometer.MagZ 629.000000 +35:320.690 Sensors-Accelerometer.AccX -12879.000000 +35:321.238 Sensors-Accelerometer.AccY 6822.000000 +35:321.758 Sensors-Accelerometer.AccZ -6676.000000 +35:360.690 Sensors-Accelerometer.AccX -11291.000000 +35:361.235 Sensors-Accelerometer.AccY 5339.000000 +35:361.757 Sensors-Accelerometer.AccZ -8502.000000 +35:400.683 Sensors-Magnetometer.MagX 98.000000 +35:401.147 Sensors-Magnetometer.MagY -232.000000 +35:401.630 Sensors-Magnetometer.MagZ 678.000000 +35:402.156 Sensors-Accelerometer.AccX -11675.000000 +35:402.703 Sensors-Accelerometer.AccY 5853.000000 +35:403.224 Sensors-Accelerometer.AccZ -9632.000000 +35:440.690 Sensors-Accelerometer.AccX -10048.000000 +35:441.226 Sensors-Accelerometer.AccY 2309.000000 +35:441.741 Sensors-Accelerometer.AccZ -5804.000000 +35:480.690 Sensors-Accelerometer.AccX -12574.000000 +35:481.242 Sensors-Accelerometer.AccY 3086.000000 +35:481.764 Sensors-Accelerometer.AccZ -11762.000000 +35:500.683 Sensors-Magnetometer.MagX 62.000000 +35:501.152 Sensors-Magnetometer.MagY -130.000000 +35:501.642 Sensors-Magnetometer.MagZ 721.000000 +35:520.690 Sensors-Accelerometer.AccX -12983.000000 +35:521.237 Sensors-Accelerometer.AccY 2044.000000 +35:521.758 Sensors-Accelerometer.AccZ -12174.000000 +35:550.683 Sensors-Magnetometer.MagX 4.000000 +35:551.121 Sensors-Magnetometer.MagY -96.000000 +35:551.586 Sensors-Magnetometer.MagZ 738.000000 +35:560.690 Sensors-Accelerometer.AccX -10358.000000 +35:561.236 Sensors-Accelerometer.AccY 1545.000000 +35:561.756 Sensors-Accelerometer.AccZ -12335.000000 +35:600.725 Sensors-Accelerometer.AccX -10033.000000 +35:601.272 Sensors-Accelerometer.AccY 2914.000000 +35:601.791 Sensors-Accelerometer.AccZ -11955.000000 +35:640.690 Sensors-Accelerometer.AccX -8848.000000 +35:641.204 Sensors-Accelerometer.AccY 1329.000000 +35:641.720 Sensors-Accelerometer.AccZ -12570.000000 +35:650.683 Sensors-Magnetometer.MagX -82.000000 +35:651.144 Sensors-Magnetometer.MagY -51.000000 +35:651.614 Sensors-Magnetometer.MagZ 774.000000 +35:680.690 Sensors-Accelerometer.AccX -7258.000000 +35:681.212 Sensors-Accelerometer.AccY 911.000000 +35:681.709 Sensors-Accelerometer.AccZ -13531.000000 +35:720.690 Sensors-Accelerometer.AccX -9135.000000 +35:721.217 Sensors-Accelerometer.AccY 516.000000 +35:721.708 Sensors-Accelerometer.AccZ -14247.000000 +35:750.683 Sensors-Magnetometer.MagX -170.000000 +35:751.170 Sensors-Magnetometer.MagY 22.000000 +35:751.635 Sensors-Magnetometer.MagZ 779.000000 +35:760.690 Sensors-Accelerometer.AccX -8724.000000 +35:761.211 Sensors-Accelerometer.AccY 338.000000 +35:761.700 Sensors-Accelerometer.AccZ -14011.000000 +35:800.683 Sensors-Magnetometer.MagX -227.000000 +35:801.178 Sensors-Magnetometer.MagY 43.000000 +35:801.647 Sensors-Magnetometer.MagZ 777.000000 +35:802.178 Sensors-Accelerometer.AccX -7353.000000 +35:802.705 Sensors-Accelerometer.AccY -509.000000 +35:803.200 Sensors-Accelerometer.AccZ -14730.000000 +35:840.690 Sensors-Accelerometer.AccX -2765.000000 +35:841.202 Sensors-Accelerometer.AccY -693.000000 +35:841.691 Sensors-Accelerometer.AccZ -15261.000000 +35:850.684 Sensors-Magnetometer.MagX -285.000000 +35:851.172 Sensors-Magnetometer.MagY 68.000000 +35:851.633 Sensors-Magnetometer.MagZ 777.000000 +35:880.690 Sensors-Accelerometer.AccX -3218.000000 +35:881.207 Sensors-Accelerometer.AccY -1022.000000 +35:881.725 Sensors-Accelerometer.AccZ -15825.000000 +35:920.690 Sensors-Accelerometer.AccX -4202.000000 +35:921.204 Sensors-Accelerometer.AccY -1831.000000 +35:921.726 Sensors-Accelerometer.AccZ -16418.000000 +35:960.690 Sensors-Accelerometer.AccX -3145.000000 +35:961.217 Sensors-Accelerometer.AccY -732.000000 +35:961.714 Sensors-Accelerometer.AccZ -16628.000000 +36:000.725 Sensors-Accelerometer.AccX -6162.000000 +36:001.244 Sensors-Accelerometer.AccY -708.000000 +36:001.733 Sensors-Accelerometer.AccZ -15202.000000 +36:040.690 Sensors-Accelerometer.AccX -6308.000000 +36:041.209 Sensors-Accelerometer.AccY -190.000000 +36:041.703 Sensors-Accelerometer.AccZ -15185.000000 +36:080.690 Sensors-Accelerometer.AccX -6454.000000 +36:081.208 Sensors-Accelerometer.AccY 1421.000000 +36:081.722 Sensors-Accelerometer.AccZ -14626.000000 +36:120.690 Sensors-Accelerometer.AccX -6979.000000 +36:121.212 Sensors-Accelerometer.AccY 1127.000000 +36:121.731 Sensors-Accelerometer.AccZ -14311.000000 +36:160.690 Sensors-Accelerometer.AccX -6638.000000 +36:161.207 Sensors-Accelerometer.AccY 1320.000000 +36:161.715 Sensors-Accelerometer.AccZ -13814.000000 +36:200.725 Sensors-Accelerometer.AccX -7355.000000 +36:201.250 Sensors-Accelerometer.AccY 1980.000000 +36:201.769 Sensors-Accelerometer.AccZ -13728.000000 +36:240.690 Sensors-Accelerometer.AccX -6619.000000 +36:241.214 Sensors-Accelerometer.AccY 1034.000000 +36:241.728 Sensors-Accelerometer.AccZ -13496.000000 +36:250.684 Sensors-Magnetometer.MagX -230.000000 +36:251.173 Sensors-Magnetometer.MagY 40.000000 +36:251.632 Sensors-Magnetometer.MagZ 774.000000 +36:280.690 Sensors-Accelerometer.AccX -7445.000000 +36:281.207 Sensors-Accelerometer.AccY 1133.000000 +36:281.722 Sensors-Accelerometer.AccZ -14027.000000 +36:320.690 Sensors-Accelerometer.AccX -7467.000000 +36:321.218 Sensors-Accelerometer.AccY 1541.000000 +36:321.736 Sensors-Accelerometer.AccZ -14540.000000 +36:360.690 Sensors-Accelerometer.AccX -6580.000000 +36:361.205 Sensors-Accelerometer.AccY 1608.000000 +36:361.717 Sensors-Accelerometer.AccZ -14882.000000 +36:400.725 Sensors-Accelerometer.AccX -6868.000000 +36:401.245 Sensors-Accelerometer.AccY 1756.000000 +36:401.764 Sensors-Accelerometer.AccZ -14600.000000 +36:440.690 Sensors-Accelerometer.AccX -6275.000000 +36:441.220 Sensors-Accelerometer.AccY 1951.000000 +36:441.743 Sensors-Accelerometer.AccZ -14585.000000 +36:480.690 Sensors-Accelerometer.AccX -7089.000000 +36:481.206 Sensors-Accelerometer.AccY 1655.000000 +36:481.720 Sensors-Accelerometer.AccZ -13879.000000 +36:520.690 Sensors-Accelerometer.AccX -7312.000000 +36:521.210 Sensors-Accelerometer.AccY 2183.000000 +36:521.728 Sensors-Accelerometer.AccZ -14087.000000 +36:550.683 Sensors-Magnetometer.MagX -216.000000 +36:551.171 Sensors-Magnetometer.MagY -14.000000 +36:551.636 Sensors-Magnetometer.MagZ 778.000000 +36:560.691 Sensors-Accelerometer.AccX -7224.000000 +36:561.208 Sensors-Accelerometer.AccY 2349.000000 +36:561.727 Sensors-Accelerometer.AccZ -13323.000000 +36:600.725 Sensors-Accelerometer.AccX -7156.000000 +36:601.249 Sensors-Accelerometer.AccY 2601.000000 +36:601.768 Sensors-Accelerometer.AccZ -13585.000000 +36:640.690 Sensors-Accelerometer.AccX -6696.000000 +36:641.209 Sensors-Accelerometer.AccY 2494.000000 +36:641.730 Sensors-Accelerometer.AccZ -13927.000000 +36:680.690 Sensors-Accelerometer.AccX -7820.000000 +36:681.216 Sensors-Accelerometer.AccY 2241.000000 +36:681.736 Sensors-Accelerometer.AccZ -14098.000000 +36:720.690 Sensors-Accelerometer.AccX -7109.000000 +36:721.214 Sensors-Accelerometer.AccY 1962.000000 +36:721.731 Sensors-Accelerometer.AccZ -14319.000000 +36:760.690 Sensors-Accelerometer.AccX -6618.000000 +36:761.212 Sensors-Accelerometer.AccY 2401.000000 +36:761.734 Sensors-Accelerometer.AccZ -14095.000000 +36:800.725 Sensors-Accelerometer.AccX -6758.000000 +36:801.245 Sensors-Accelerometer.AccY 2073.000000 +36:801.761 Sensors-Accelerometer.AccZ -14062.000000 +36:840.690 Sensors-Accelerometer.AccX -7305.000000 +36:841.214 Sensors-Accelerometer.AccY 2211.000000 +36:841.738 Sensors-Accelerometer.AccZ -14156.000000 +36:850.683 Sensors-Magnetometer.MagX -210.000000 +36:851.170 Sensors-Magnetometer.MagY -17.000000 +36:851.635 Sensors-Magnetometer.MagZ 775.000000 +36:880.690 Sensors-Accelerometer.AccX -7012.000000 +36:881.208 Sensors-Accelerometer.AccY 2367.000000 +36:881.725 Sensors-Accelerometer.AccZ -14072.000000 +36:920.690 Sensors-Accelerometer.AccX -7273.000000 +36:921.211 Sensors-Accelerometer.AccY 2473.000000 +36:921.730 Sensors-Accelerometer.AccZ -13891.000000 +36:960.690 Sensors-Accelerometer.AccX -7006.000000 +36:961.210 Sensors-Accelerometer.AccY 2420.000000 +36:961.725 Sensors-Accelerometer.AccZ -14339.000000 +37:000.725 Sensors-Accelerometer.AccX -7281.000000 +37:001.247 Sensors-Accelerometer.AccY 2333.000000 +37:001.767 Sensors-Accelerometer.AccZ -14013.000000 +37:040.690 Sensors-Accelerometer.AccX -7046.000000 +37:041.210 Sensors-Accelerometer.AccY 2417.000000 +37:041.725 Sensors-Accelerometer.AccZ -13776.000000 +37:080.690 Sensors-Accelerometer.AccX -6619.000000 +37:081.215 Sensors-Accelerometer.AccY 2233.000000 +37:081.734 Sensors-Accelerometer.AccZ -14183.000000 +37:120.690 Sensors-Accelerometer.AccX -7386.000000 +37:121.203 Sensors-Accelerometer.AccY 2044.000000 +37:121.719 Sensors-Accelerometer.AccZ -13955.000000 +37:160.690 Sensors-Accelerometer.AccX -7496.000000 +37:161.211 Sensors-Accelerometer.AccY 2382.000000 +37:161.729 Sensors-Accelerometer.AccZ -14047.000000 +37:200.725 Sensors-Accelerometer.AccX -7492.000000 +37:201.243 Sensors-Accelerometer.AccY 2725.000000 +37:201.759 Sensors-Accelerometer.AccZ -13884.000000 +37:240.690 Sensors-Accelerometer.AccX -7680.000000 +37:241.203 Sensors-Accelerometer.AccY 2486.000000 +37:241.724 Sensors-Accelerometer.AccZ -13805.000000 +37:320.690 Sensors-Accelerometer.AccX -7261.000000 +37:321.212 Sensors-Accelerometer.AccY 2614.000000 +37:321.734 Sensors-Accelerometer.AccZ -13937.000000 +37:360.690 Sensors-Accelerometer.AccX -7110.000000 +37:361.215 Sensors-Accelerometer.AccY 2344.000000 +37:361.731 Sensors-Accelerometer.AccZ -13945.000000 +37:400.725 Sensors-Accelerometer.AccX -6819.000000 +37:401.247 Sensors-Accelerometer.AccY 2381.000000 +37:401.766 Sensors-Accelerometer.AccZ -13980.000000 +37:440.690 Sensors-Accelerometer.AccX -7201.000000 +37:441.209 Sensors-Accelerometer.AccY 2383.000000 +37:441.729 Sensors-Accelerometer.AccZ -13790.000000 +37:480.690 Sensors-Accelerometer.AccX -7545.000000 +37:481.213 Sensors-Accelerometer.AccY 2412.000000 +37:481.728 Sensors-Accelerometer.AccZ -13909.000000 +37:600.725 Sensors-Accelerometer.AccX -7473.000000 +37:601.248 Sensors-Accelerometer.AccY 2712.000000 +37:601.765 Sensors-Accelerometer.AccZ -13684.000000 +37:640.690 Sensors-Accelerometer.AccX -7718.000000 +37:641.214 Sensors-Accelerometer.AccY 3052.000000 +37:641.735 Sensors-Accelerometer.AccZ -13564.000000 +37:680.690 Sensors-Accelerometer.AccX -7658.000000 +37:681.215 Sensors-Accelerometer.AccY 2461.000000 +37:681.735 Sensors-Accelerometer.AccZ -14142.000000 +37:720.690 Sensors-Accelerometer.AccX -7368.000000 +37:721.210 Sensors-Accelerometer.AccY 2556.000000 +37:721.731 Sensors-Accelerometer.AccZ -14211.000000 +37:760.690 Sensors-Accelerometer.AccX -6817.000000 +37:761.204 Sensors-Accelerometer.AccY 2697.000000 +37:761.720 Sensors-Accelerometer.AccZ -13678.000000 +37:800.725 Sensors-Accelerometer.AccX -7374.000000 +37:801.246 Sensors-Accelerometer.AccY 2609.000000 +37:801.765 Sensors-Accelerometer.AccZ -13926.000000 +37:880.690 Sensors-Accelerometer.AccX -7876.000000 +37:881.212 Sensors-Accelerometer.AccY 2566.000000 +37:881.733 Sensors-Accelerometer.AccZ -13867.000000 +37:920.690 Sensors-Accelerometer.AccX -7657.000000 +37:921.214 Sensors-Accelerometer.AccY 2618.000000 +37:921.735 Sensors-Accelerometer.AccZ -13896.000000 +37:960.690 Sensors-Accelerometer.AccX -7256.000000 +37:961.213 Sensors-Accelerometer.AccY 2870.000000 +37:961.734 Sensors-Accelerometer.AccZ -13718.000000 +38:040.690 Sensors-Accelerometer.AccX -7501.000000 +38:041.215 Sensors-Accelerometer.AccY 2865.000000 +38:041.738 Sensors-Accelerometer.AccZ -13832.000000 +38:080.690 Sensors-Accelerometer.AccX -7774.000000 +38:081.216 Sensors-Accelerometer.AccY 2465.000000 +38:081.733 Sensors-Accelerometer.AccZ -14025.000000 +38:120.690 Sensors-Accelerometer.AccX -7495.000000 +38:121.218 Sensors-Accelerometer.AccY 2769.000000 +38:121.731 Sensors-Accelerometer.AccZ -13879.000000 +38:160.690 Sensors-Accelerometer.AccX -7374.000000 +38:161.211 Sensors-Accelerometer.AccY 2479.000000 +38:161.734 Sensors-Accelerometer.AccZ -13706.000000 +38:240.690 Sensors-Accelerometer.AccX -7916.000000 +38:241.216 Sensors-Accelerometer.AccY 2819.000000 +38:241.738 Sensors-Accelerometer.AccZ -13607.000000 +38:280.690 Sensors-Accelerometer.AccX -7850.000000 +38:281.215 Sensors-Accelerometer.AccY 3057.000000 +38:281.737 Sensors-Accelerometer.AccZ -13821.000000 +38:320.690 Sensors-Accelerometer.AccX -7852.000000 +38:321.219 Sensors-Accelerometer.AccY 2798.000000 +38:321.742 Sensors-Accelerometer.AccZ -14075.000000 +38:360.690 Sensors-Accelerometer.AccX -7645.000000 +38:361.216 Sensors-Accelerometer.AccY 2968.000000 +38:361.736 Sensors-Accelerometer.AccZ -14014.000000 +38:400.725 Sensors-Accelerometer.AccX -7046.000000 +38:401.242 Sensors-Accelerometer.AccY 2727.000000 +38:401.753 Sensors-Accelerometer.AccZ -13786.000000 +38:480.690 Sensors-Accelerometer.AccX -7127.000000 +38:481.219 Sensors-Accelerometer.AccY 2516.000000 +38:481.740 Sensors-Accelerometer.AccZ -13602.000000 +38:520.690 Sensors-Accelerometer.AccX -7371.000000 +38:521.217 Sensors-Accelerometer.AccY 2659.000000 +38:521.738 Sensors-Accelerometer.AccZ -13917.000000 +38:600.725 Sensors-Accelerometer.AccX -7656.000000 +38:601.245 Sensors-Accelerometer.AccY 2758.000000 +38:601.764 Sensors-Accelerometer.AccZ -14015.000000 +38:680.690 Sensors-Accelerometer.AccX -7453.000000 +38:681.213 Sensors-Accelerometer.AccY 2934.000000 +38:681.736 Sensors-Accelerometer.AccZ -13619.000000 +38:720.690 Sensors-Accelerometer.AccX -7712.000000 +38:721.205 Sensors-Accelerometer.AccY 2707.000000 +38:721.722 Sensors-Accelerometer.AccZ -13698.000000 +38:760.690 Sensors-Accelerometer.AccX -7448.000000 +38:761.210 Sensors-Accelerometer.AccY 2699.000000 +38:761.730 Sensors-Accelerometer.AccZ -14125.000000 +38:800.725 Sensors-Accelerometer.AccX -7120.000000 +38:801.242 Sensors-Accelerometer.AccY 2800.000000 +38:801.757 Sensors-Accelerometer.AccZ -13874.000000 +38:920.690 Sensors-Accelerometer.AccX -6916.000000 +38:921.208 Sensors-Accelerometer.AccY 2383.000000 +38:921.729 Sensors-Accelerometer.AccZ -14193.000000 +38:960.690 Sensors-Accelerometer.AccX -7404.000000 +38:961.210 Sensors-Accelerometer.AccY 2648.000000 +38:961.724 Sensors-Accelerometer.AccZ -13779.000000 +39:000.725 Sensors-Accelerometer.AccX -7929.000000 +39:001.252 Sensors-Accelerometer.AccY 2937.000000 +39:001.771 Sensors-Accelerometer.AccZ -13796.000000 +39:040.690 Sensors-Accelerometer.AccX -7671.000000 +39:041.213 Sensors-Accelerometer.AccY 2852.000000 +39:041.730 Sensors-Accelerometer.AccZ -13947.000000 +39:120.690 Sensors-Accelerometer.AccX -7265.000000 +39:121.212 Sensors-Accelerometer.AccY 2765.000000 +39:121.730 Sensors-Accelerometer.AccZ -14009.000000 +39:200.725 Sensors-Accelerometer.AccX -7204.000000 +39:201.245 Sensors-Accelerometer.AccY 2668.000000 +39:201.763 Sensors-Accelerometer.AccZ -13702.000000 +39:240.690 Sensors-Accelerometer.AccX -7509.000000 +39:241.213 Sensors-Accelerometer.AccY 2615.000000 +39:241.736 Sensors-Accelerometer.AccZ -13774.000000 +39:280.690 Sensors-Accelerometer.AccX -7465.000000 +39:281.213 Sensors-Accelerometer.AccY 2765.000000 +39:281.731 Sensors-Accelerometer.AccZ -13840.000000 +39:300.683 Sensors-Magnetometer.MagX -195.000000 +39:301.179 Sensors-Magnetometer.MagY -29.000000 +39:301.643 Sensors-Magnetometer.MagZ 766.000000 +39:400.725 Sensors-Accelerometer.AccX -7631.000000 +39:401.253 Sensors-Accelerometer.AccY 2844.000000 +39:401.773 Sensors-Accelerometer.AccZ -13620.000000 +39:480.690 Sensors-Accelerometer.AccX -7689.000000 +39:481.213 Sensors-Accelerometer.AccY 2785.000000 +39:481.734 Sensors-Accelerometer.AccZ -14216.000000 +39:520.690 Sensors-Accelerometer.AccX -7499.000000 +39:521.214 Sensors-Accelerometer.AccY 2940.000000 +39:521.734 Sensors-Accelerometer.AccZ -13795.000000 +39:560.690 Sensors-Accelerometer.AccX -6926.000000 +39:561.210 Sensors-Accelerometer.AccY 2721.000000 +39:561.728 Sensors-Accelerometer.AccZ -13617.000000 +39:600.725 Sensors-Accelerometer.AccX -7129.000000 +39:601.251 Sensors-Accelerometer.AccY 2427.000000 +39:601.773 Sensors-Accelerometer.AccZ -13673.000000 +39:640.690 Sensors-Accelerometer.AccX -7565.000000 +39:641.214 Sensors-Accelerometer.AccY 2441.000000 +39:641.738 Sensors-Accelerometer.AccZ -13694.000000 +39:680.690 Sensors-Accelerometer.AccX -7605.000000 +39:681.208 Sensors-Accelerometer.AccY 2789.000000 +39:681.724 Sensors-Accelerometer.AccZ -13710.000000 +39:720.690 Sensors-Accelerometer.AccX -7701.000000 +39:721.212 Sensors-Accelerometer.AccY 2726.000000 +39:721.731 Sensors-Accelerometer.AccZ -14007.000000 +39:800.725 Sensors-Accelerometer.AccX -8010.000000 +39:801.248 Sensors-Accelerometer.AccY 2985.000000 +39:801.770 Sensors-Accelerometer.AccZ -13696.000000 +39:840.690 Sensors-Accelerometer.AccX -7266.000000 +39:841.210 Sensors-Accelerometer.AccY 2822.000000 +39:841.729 Sensors-Accelerometer.AccZ -13963.000000 +39:920.690 Sensors-Accelerometer.AccX -7201.000000 +39:921.214 Sensors-Accelerometer.AccY 2511.000000 +39:921.741 Sensors-Accelerometer.AccZ -13848.000000 +40:000.725 Sensors-Accelerometer.AccX -7297.000000 +40:001.245 Sensors-Accelerometer.AccY 2416.000000 +40:001.757 Sensors-Accelerometer.AccZ -14144.000000 +40:040.690 Sensors-Accelerometer.AccX -7230.000000 +40:041.209 Sensors-Accelerometer.AccY 2681.000000 +40:041.725 Sensors-Accelerometer.AccZ -13672.000000 +40:080.690 Sensors-Accelerometer.AccX -8071.000000 +40:081.211 Sensors-Accelerometer.AccY 3022.000000 +40:081.730 Sensors-Accelerometer.AccZ -13608.000000 +40:120.690 Sensors-Accelerometer.AccX -7723.000000 +40:121.216 Sensors-Accelerometer.AccY 2672.000000 +40:121.732 Sensors-Accelerometer.AccZ -14015.000000 +40:160.690 Sensors-Accelerometer.AccX -7240.000000 +40:161.206 Sensors-Accelerometer.AccY 2814.000000 +40:161.725 Sensors-Accelerometer.AccZ -13739.000000 +40:240.690 Sensors-Accelerometer.AccX -7258.000000 +40:241.212 Sensors-Accelerometer.AccY 2574.000000 +40:241.731 Sensors-Accelerometer.AccZ -13781.000000 +40:320.690 Sensors-Accelerometer.AccX -7560.000000 +40:321.206 Sensors-Accelerometer.AccY 2611.000000 +40:321.726 Sensors-Accelerometer.AccZ -14313.000000 +40:440.690 Sensors-Accelerometer.AccX -7281.000000 +40:441.215 Sensors-Accelerometer.AccY 2860.000000 +40:441.735 Sensors-Accelerometer.AccZ -13513.000000 +40:480.690 Sensors-Accelerometer.AccX -7135.000000 +40:481.214 Sensors-Accelerometer.AccY 2917.000000 +40:481.733 Sensors-Accelerometer.AccZ -13041.000000 +40:520.690 Sensors-Accelerometer.AccX -7345.000000 +40:521.212 Sensors-Accelerometer.AccY 2637.000000 +40:521.732 Sensors-Accelerometer.AccZ -13425.000000 +40:560.690 Sensors-Accelerometer.AccX -7460.000000 +40:561.209 Sensors-Accelerometer.AccY 2430.000000 +40:561.730 Sensors-Accelerometer.AccZ -14270.000000 +40:600.725 Sensors-Accelerometer.AccX -7407.000000 +40:601.252 Sensors-Accelerometer.AccY 2224.000000 +40:601.771 Sensors-Accelerometer.AccZ -14531.000000 +40:640.690 Sensors-Accelerometer.AccX -7296.000000 +40:641.203 Sensors-Accelerometer.AccY 2327.000000 +40:641.723 Sensors-Accelerometer.AccZ -14224.000000 +40:680.690 Sensors-Accelerometer.AccX -7270.000000 +40:681.215 Sensors-Accelerometer.AccY 2640.000000 +40:681.727 Sensors-Accelerometer.AccZ -13900.000000 +40:720.690 Sensors-Accelerometer.AccX -7597.000000 +40:721.214 Sensors-Accelerometer.AccY 2894.000000 +40:721.734 Sensors-Accelerometer.AccZ -13526.000000 +40:840.690 Sensors-Accelerometer.AccX -7698.000000 +40:841.214 Sensors-Accelerometer.AccY 2539.000000 +40:841.740 Sensors-Accelerometer.AccZ -13612.000000 +40:880.690 Sensors-Accelerometer.AccX -7168.000000 +40:881.202 Sensors-Accelerometer.AccY 2506.000000 +40:881.724 Sensors-Accelerometer.AccZ -14074.000000 +40:960.690 Sensors-Accelerometer.AccX -7751.000000 +40:961.207 Sensors-Accelerometer.AccY 2874.000000 +40:961.715 Sensors-Accelerometer.AccZ -13691.000000 +41:000.725 Sensors-Accelerometer.AccX -7573.000000 +41:001.246 Sensors-Accelerometer.AccY 2457.000000 +41:001.764 Sensors-Accelerometer.AccZ -13825.000000 +41:040.690 Sensors-Accelerometer.AccX -7660.000000 +41:041.209 Sensors-Accelerometer.AccY 2947.000000 +41:041.728 Sensors-Accelerometer.AccZ -13300.000000 +41:080.690 Sensors-Accelerometer.AccX -7591.000000 +41:081.215 Sensors-Accelerometer.AccY 2418.000000 +41:081.731 Sensors-Accelerometer.AccZ -13955.000000 +41:120.690 Sensors-Accelerometer.AccX -8113.000000 +41:121.211 Sensors-Accelerometer.AccY 2047.000000 +41:121.733 Sensors-Accelerometer.AccZ -13992.000000 +41:160.690 Sensors-Accelerometer.AccX -7268.000000 +41:161.208 Sensors-Accelerometer.AccY 2104.000000 +41:161.719 Sensors-Accelerometer.AccZ -13787.000000 +41:200.725 Sensors-Accelerometer.AccX -7954.000000 +41:201.248 Sensors-Accelerometer.AccY 2556.000000 +41:201.765 Sensors-Accelerometer.AccZ -13402.000000 +41:240.690 Sensors-Accelerometer.AccX -7923.000000 +41:241.216 Sensors-Accelerometer.AccY 2381.000000 +41:241.735 Sensors-Accelerometer.AccZ -13802.000000 +41:280.690 Sensors-Accelerometer.AccX -7811.000000 +41:281.215 Sensors-Accelerometer.AccY 2884.000000 +41:281.723 Sensors-Accelerometer.AccZ -13456.000000 +41:320.690 Sensors-Accelerometer.AccX -7713.000000 +41:321.211 Sensors-Accelerometer.AccY 2561.000000 +41:321.724 Sensors-Accelerometer.AccZ -13976.000000 +41:360.690 Sensors-Accelerometer.AccX -7891.000000 +41:361.211 Sensors-Accelerometer.AccY 1071.000000 +41:361.729 Sensors-Accelerometer.AccZ -15558.000000 +41:400.725 Sensors-Accelerometer.AccX -7015.000000 +41:401.245 Sensors-Accelerometer.AccY 2023.000000 +41:401.766 Sensors-Accelerometer.AccZ -13941.000000 +41:440.690 Sensors-Accelerometer.AccX -7167.000000 +41:441.219 Sensors-Accelerometer.AccY 2554.000000 +41:441.740 Sensors-Accelerometer.AccZ -12908.000000 +41:480.690 Sensors-Accelerometer.AccX -7212.000000 +41:481.208 Sensors-Accelerometer.AccY 3212.000000 +41:481.723 Sensors-Accelerometer.AccZ -12183.000000 +41:520.690 Sensors-Accelerometer.AccX -7944.000000 +41:521.210 Sensors-Accelerometer.AccY 1955.000000 +41:521.733 Sensors-Accelerometer.AccZ -13912.000000 +41:560.690 Sensors-Accelerometer.AccX -8213.000000 +41:561.208 Sensors-Accelerometer.AccY 1655.000000 +41:561.727 Sensors-Accelerometer.AccZ -14564.000000 +41:600.725 Sensors-Accelerometer.AccX -8158.000000 +41:601.247 Sensors-Accelerometer.AccY 2170.000000 +41:601.761 Sensors-Accelerometer.AccZ -13651.000000 +41:640.690 Sensors-Accelerometer.AccX -7181.000000 +41:641.210 Sensors-Accelerometer.AccY 2986.000000 +41:641.724 Sensors-Accelerometer.AccZ -13330.000000 +41:680.690 Sensors-Accelerometer.AccX -8064.000000 +41:681.200 Sensors-Accelerometer.AccY 4031.000000 +41:681.718 Sensors-Accelerometer.AccZ -13205.000000 +41:720.690 Sensors-Accelerometer.AccX -8336.000000 +41:721.209 Sensors-Accelerometer.AccY 2886.000000 +41:721.728 Sensors-Accelerometer.AccZ -13742.000000 +41:750.683 Sensors-Magnetometer.MagX -188.000000 +41:751.175 Sensors-Magnetometer.MagY -14.000000 +41:751.639 Sensors-Magnetometer.MagZ 787.000000 +41:760.691 Sensors-Accelerometer.AccX -8224.000000 +41:761.203 Sensors-Accelerometer.AccY 1288.000000 +41:761.713 Sensors-Accelerometer.AccZ -14962.000000 +41:800.725 Sensors-Accelerometer.AccX -6942.000000 +41:801.245 Sensors-Accelerometer.AccY 1967.000000 +41:801.762 Sensors-Accelerometer.AccZ -14769.000000 +41:840.690 Sensors-Accelerometer.AccX -7339.000000 +41:841.219 Sensors-Accelerometer.AccY 2425.000000 +41:841.735 Sensors-Accelerometer.AccZ -13165.000000 +41:880.690 Sensors-Accelerometer.AccX -7571.000000 +41:881.217 Sensors-Accelerometer.AccY 2056.000000 +41:881.731 Sensors-Accelerometer.AccZ -12122.000000 +41:920.690 Sensors-Accelerometer.AccX -7107.000000 +41:921.214 Sensors-Accelerometer.AccY 2662.000000 +41:921.735 Sensors-Accelerometer.AccZ -12757.000000 +41:960.690 Sensors-Accelerometer.AccX -8460.000000 +41:961.207 Sensors-Accelerometer.AccY 2481.000000 +41:961.722 Sensors-Accelerometer.AccZ -12804.000000 +42:000.725 Sensors-Accelerometer.AccX -7428.000000 +42:001.238 Sensors-Accelerometer.AccY 1728.000000 +42:001.745 Sensors-Accelerometer.AccZ -13589.000000 +42:040.690 Sensors-Accelerometer.AccX -8892.000000 +42:041.207 Sensors-Accelerometer.AccY 1955.000000 +42:041.726 Sensors-Accelerometer.AccZ -14883.000000 +42:080.690 Sensors-Accelerometer.AccX -8186.000000 +42:081.210 Sensors-Accelerometer.AccY 2009.000000 +42:081.727 Sensors-Accelerometer.AccZ -15386.000000 +42:120.690 Sensors-Accelerometer.AccX -7154.000000 +42:121.209 Sensors-Accelerometer.AccY 1352.000000 +42:121.717 Sensors-Accelerometer.AccZ -15008.000000 +42:160.690 Sensors-Accelerometer.AccX -6870.000000 +42:161.210 Sensors-Accelerometer.AccY 2219.000000 +42:161.731 Sensors-Accelerometer.AccZ -13603.000000 +42:200.725 Sensors-Accelerometer.AccX -7141.000000 +42:201.245 Sensors-Accelerometer.AccY 2352.000000 +42:201.760 Sensors-Accelerometer.AccZ -12489.000000 +42:240.690 Sensors-Accelerometer.AccX -7113.000000 +42:241.208 Sensors-Accelerometer.AccY 2560.000000 +42:241.708 Sensors-Accelerometer.AccZ -12105.000000 +42:280.690 Sensors-Accelerometer.AccX -7423.000000 +42:281.212 Sensors-Accelerometer.AccY 1195.000000 +42:281.731 Sensors-Accelerometer.AccZ -14243.000000 +42:320.690 Sensors-Accelerometer.AccX -8004.000000 +42:321.203 Sensors-Accelerometer.AccY 1808.000000 +42:321.712 Sensors-Accelerometer.AccZ -13246.000000 +42:360.690 Sensors-Accelerometer.AccX -8409.000000 +42:361.207 Sensors-Accelerometer.AccY 2153.000000 +42:361.722 Sensors-Accelerometer.AccZ -14044.000000 +42:400.725 Sensors-Accelerometer.AccX -8698.000000 +42:401.242 Sensors-Accelerometer.AccY 3315.000000 +42:401.759 Sensors-Accelerometer.AccZ -14549.000000 +42:440.690 Sensors-Accelerometer.AccX -8248.000000 +42:441.206 Sensors-Accelerometer.AccY 2507.000000 +42:441.724 Sensors-Accelerometer.AccZ -14886.000000 +42:480.690 Sensors-Accelerometer.AccX -7435.000000 +42:481.212 Sensors-Accelerometer.AccY 1966.000000 +42:481.736 Sensors-Accelerometer.AccZ -14547.000000 +42:520.690 Sensors-Accelerometer.AccX -6858.000000 +42:521.208 Sensors-Accelerometer.AccY 707.000000 +42:521.702 Sensors-Accelerometer.AccZ -14460.000000 +42:560.690 Sensors-Accelerometer.AccX -7129.000000 +42:561.213 Sensors-Accelerometer.AccY 2253.000000 +42:561.727 Sensors-Accelerometer.AccZ -12526.000000 +42:600.725 Sensors-Accelerometer.AccX -6486.000000 +42:601.245 Sensors-Accelerometer.AccY 2573.000000 +42:601.755 Sensors-Accelerometer.AccZ -12141.000000 +42:640.690 Sensors-Accelerometer.AccX -7589.000000 +42:641.210 Sensors-Accelerometer.AccY 1463.000000 +42:641.726 Sensors-Accelerometer.AccZ -13806.000000 +42:680.690 Sensors-Accelerometer.AccX -8165.000000 +42:681.211 Sensors-Accelerometer.AccY 2397.000000 +42:681.726 Sensors-Accelerometer.AccZ -13564.000000 +42:720.690 Sensors-Accelerometer.AccX -8473.000000 +42:721.207 Sensors-Accelerometer.AccY 2335.000000 +42:721.726 Sensors-Accelerometer.AccZ -13665.000000 +42:760.690 Sensors-Accelerometer.AccX -8119.000000 +42:761.215 Sensors-Accelerometer.AccY 2326.000000 +42:761.735 Sensors-Accelerometer.AccZ -14802.000000 +42:800.725 Sensors-Accelerometer.AccX -8486.000000 +42:801.245 Sensors-Accelerometer.AccY 1768.000000 +42:801.756 Sensors-Accelerometer.AccZ -15111.000000 +42:840.690 Sensors-Accelerometer.AccX -7406.000000 +42:841.209 Sensors-Accelerometer.AccY 1338.000000 +42:841.722 Sensors-Accelerometer.AccZ -14500.000000 +42:880.690 Sensors-Accelerometer.AccX -6761.000000 +42:881.203 Sensors-Accelerometer.AccY 1285.000000 +42:881.714 Sensors-Accelerometer.AccZ -13234.000000 +42:920.690 Sensors-Accelerometer.AccX -6768.000000 +42:921.205 Sensors-Accelerometer.AccY 2350.000000 +42:921.724 Sensors-Accelerometer.AccZ -12192.000000 +42:960.690 Sensors-Accelerometer.AccX -6593.000000 +42:961.207 Sensors-Accelerometer.AccY 2122.000000 +42:961.721 Sensors-Accelerometer.AccZ -12487.000000 +43:000.725 Sensors-Accelerometer.AccX -6740.000000 +43:001.241 Sensors-Accelerometer.AccY 1930.000000 +43:001.761 Sensors-Accelerometer.AccZ -13062.000000 +43:040.690 Sensors-Accelerometer.AccX -9099.000000 +43:041.213 Sensors-Accelerometer.AccY 2048.000000 +43:041.715 Sensors-Accelerometer.AccZ -13430.000000 +43:080.690 Sensors-Accelerometer.AccX -9030.000000 +43:081.213 Sensors-Accelerometer.AccY 3259.000000 +43:081.735 Sensors-Accelerometer.AccZ -14276.000000 +43:120.690 Sensors-Accelerometer.AccX -9196.000000 +43:121.213 Sensors-Accelerometer.AccY 2981.000000 +43:121.731 Sensors-Accelerometer.AccZ -14446.000000 +43:160.690 Sensors-Accelerometer.AccX -8096.000000 +43:161.206 Sensors-Accelerometer.AccY 1624.000000 +43:161.724 Sensors-Accelerometer.AccZ -15728.000000 +43:200.725 Sensors-Accelerometer.AccX -7898.000000 +43:201.242 Sensors-Accelerometer.AccY 820.000000 +43:201.728 Sensors-Accelerometer.AccZ -14699.000000 +43:240.690 Sensors-Accelerometer.AccX -6495.000000 +43:241.214 Sensors-Accelerometer.AccY 1685.000000 +43:241.726 Sensors-Accelerometer.AccZ -12056.000000 +43:280.690 Sensors-Accelerometer.AccX -6504.000000 +43:281.204 Sensors-Accelerometer.AccY 2550.000000 +43:281.723 Sensors-Accelerometer.AccZ -11355.000000 +43:320.690 Sensors-Accelerometer.AccX -8400.000000 +43:321.199 Sensors-Accelerometer.AccY 2345.000000 +43:321.718 Sensors-Accelerometer.AccZ -12547.000000 +43:360.690 Sensors-Accelerometer.AccX -9511.000000 +43:361.211 Sensors-Accelerometer.AccY 2699.000000 +43:361.731 Sensors-Accelerometer.AccZ -13880.000000 +43:400.725 Sensors-Accelerometer.AccX -9747.000000 +43:401.252 Sensors-Accelerometer.AccY 2643.000000 +43:401.769 Sensors-Accelerometer.AccZ -13766.000000 +43:440.690 Sensors-Accelerometer.AccX -8756.000000 +43:441.205 Sensors-Accelerometer.AccY 3192.000000 +43:441.724 Sensors-Accelerometer.AccZ -13458.000000 +43:480.690 Sensors-Accelerometer.AccX -8509.000000 +43:481.212 Sensors-Accelerometer.AccY 3200.000000 +43:481.720 Sensors-Accelerometer.AccZ -12878.000000 +43:560.690 Sensors-Accelerometer.AccX -8480.000000 +43:561.203 Sensors-Accelerometer.AccY 2853.000000 +43:561.718 Sensors-Accelerometer.AccZ -12875.000000 +43:600.725 Sensors-Accelerometer.AccX -8271.000000 +43:601.245 Sensors-Accelerometer.AccY 2513.000000 +43:601.764 Sensors-Accelerometer.AccZ -12915.000000 +43:640.690 Sensors-Accelerometer.AccX -8450.000000 +43:641.208 Sensors-Accelerometer.AccY 2596.000000 +43:641.723 Sensors-Accelerometer.AccZ -13267.000000 +43:720.690 Sensors-Accelerometer.AccX -8679.000000 +43:721.214 Sensors-Accelerometer.AccY 2623.000000 +43:721.731 Sensors-Accelerometer.AccZ -13456.000000 +43:750.683 Sensors-Magnetometer.MagX -123.000000 +43:751.172 Sensors-Magnetometer.MagY -49.000000 +43:751.638 Sensors-Magnetometer.MagZ 767.000000 +43:760.690 Sensors-Accelerometer.AccX -9054.000000 +43:761.213 Sensors-Accelerometer.AccY 3117.000000 +43:761.735 Sensors-Accelerometer.AccZ -12663.000000 +43:800.725 Sensors-Accelerometer.AccX -8827.000000 +43:801.249 Sensors-Accelerometer.AccY 3572.000000 +43:801.766 Sensors-Accelerometer.AccZ -12183.000000 +43:840.690 Sensors-Accelerometer.AccX -9026.000000 +43:841.206 Sensors-Accelerometer.AccY 3377.000000 +43:841.720 Sensors-Accelerometer.AccZ -12459.000000 +43:880.690 Sensors-Accelerometer.AccX -8196.000000 +43:881.205 Sensors-Accelerometer.AccY 2962.000000 +43:881.722 Sensors-Accelerometer.AccZ -12639.000000 +43:920.690 Sensors-Accelerometer.AccX -9390.000000 +43:921.214 Sensors-Accelerometer.AccY 2901.000000 +43:921.729 Sensors-Accelerometer.AccZ -13180.000000 +43:960.690 Sensors-Accelerometer.AccX -9735.000000 +43:961.215 Sensors-Accelerometer.AccY 2575.000000 +43:961.735 Sensors-Accelerometer.AccZ -14339.000000 +44:000.725 Sensors-Accelerometer.AccX -8814.000000 +44:001.245 Sensors-Accelerometer.AccY 2656.000000 +44:001.757 Sensors-Accelerometer.AccZ -14144.000000 +44:040.690 Sensors-Accelerometer.AccX -9069.000000 +44:041.210 Sensors-Accelerometer.AccY 3001.000000 +44:041.728 Sensors-Accelerometer.AccZ -13532.000000 +44:080.690 Sensors-Accelerometer.AccX -8432.000000 +44:081.203 Sensors-Accelerometer.AccY 3263.000000 +44:081.726 Sensors-Accelerometer.AccZ -11337.000000 +44:120.690 Sensors-Accelerometer.AccX -8161.000000 +44:121.213 Sensors-Accelerometer.AccY 3909.000000 +44:121.736 Sensors-Accelerometer.AccZ -10938.000000 +44:160.690 Sensors-Accelerometer.AccX -9005.000000 +44:161.210 Sensors-Accelerometer.AccY 1866.000000 +44:161.725 Sensors-Accelerometer.AccZ -12543.000000 +44:200.683 Sensors-Magnetometer.MagX -122.000000 +44:201.171 Sensors-Magnetometer.MagY -64.000000 +44:201.629 Sensors-Magnetometer.MagZ 774.000000 +44:202.159 Sensors-Accelerometer.AccX -9006.000000 +44:202.685 Sensors-Accelerometer.AccY 3200.000000 +44:203.193 Sensors-Accelerometer.AccZ -12681.000000 +44:240.690 Sensors-Accelerometer.AccX -8951.000000 +44:241.211 Sensors-Accelerometer.AccY 4021.000000 +44:241.729 Sensors-Accelerometer.AccZ -12536.000000 +44:280.690 Sensors-Accelerometer.AccX -9974.000000 +44:281.214 Sensors-Accelerometer.AccY 3192.000000 +44:281.734 Sensors-Accelerometer.AccZ -13648.000000 +44:320.690 Sensors-Accelerometer.AccX -9433.000000 +44:321.215 Sensors-Accelerometer.AccY 2713.000000 +44:321.734 Sensors-Accelerometer.AccZ -14460.000000 +44:360.690 Sensors-Accelerometer.AccX -8774.000000 +44:361.212 Sensors-Accelerometer.AccY 3348.000000 +44:361.730 Sensors-Accelerometer.AccZ -12317.000000 +44:400.725 Sensors-Accelerometer.AccX -8574.000000 +44:401.245 Sensors-Accelerometer.AccY 3434.000000 +44:401.764 Sensors-Accelerometer.AccZ -11266.000000 +44:440.690 Sensors-Accelerometer.AccX -8698.000000 +44:441.213 Sensors-Accelerometer.AccY 2864.000000 +44:441.732 Sensors-Accelerometer.AccZ -11929.000000 +44:480.690 Sensors-Accelerometer.AccX -9361.000000 +44:481.210 Sensors-Accelerometer.AccY 2720.000000 +44:481.720 Sensors-Accelerometer.AccZ -13096.000000 +44:520.690 Sensors-Accelerometer.AccX -9509.000000 +44:521.215 Sensors-Accelerometer.AccY 3984.000000 +44:521.736 Sensors-Accelerometer.AccZ -12306.000000 +44:560.690 Sensors-Accelerometer.AccX -9572.000000 +44:561.213 Sensors-Accelerometer.AccY 3509.000000 +44:561.734 Sensors-Accelerometer.AccZ -12503.000000 +44:600.725 Sensors-Accelerometer.AccX -9707.000000 +44:601.254 Sensors-Accelerometer.AccY 3040.000000 +44:601.771 Sensors-Accelerometer.AccZ -13236.000000 +44:640.690 Sensors-Accelerometer.AccX -9512.000000 +44:641.210 Sensors-Accelerometer.AccY 3175.000000 +44:641.733 Sensors-Accelerometer.AccZ -12293.000000 +44:680.690 Sensors-Accelerometer.AccX -8902.000000 +44:681.215 Sensors-Accelerometer.AccY 3118.000000 +44:681.738 Sensors-Accelerometer.AccZ -12568.000000 +44:720.690 Sensors-Accelerometer.AccX -9085.000000 +44:721.213 Sensors-Accelerometer.AccY 3270.000000 +44:721.739 Sensors-Accelerometer.AccZ -12873.000000 +44:760.690 Sensors-Accelerometer.AccX -9237.000000 +44:761.212 Sensors-Accelerometer.AccY 2816.000000 +44:761.723 Sensors-Accelerometer.AccZ -12792.000000 +44:800.725 Sensors-Accelerometer.AccX -8790.000000 +44:801.246 Sensors-Accelerometer.AccY 2891.000000 +44:801.762 Sensors-Accelerometer.AccZ -12651.000000 +44:840.690 Sensors-Accelerometer.AccX -8951.000000 +44:841.214 Sensors-Accelerometer.AccY 3119.000000 +44:841.739 Sensors-Accelerometer.AccZ -11701.000000 +44:880.690 Sensors-Accelerometer.AccX -8866.000000 +44:881.207 Sensors-Accelerometer.AccY 2955.000000 +44:881.727 Sensors-Accelerometer.AccZ -12176.000000 +44:920.690 Sensors-Accelerometer.AccX -9548.000000 +44:921.213 Sensors-Accelerometer.AccY 3772.000000 +44:921.735 Sensors-Accelerometer.AccZ -12550.000000 +44:960.690 Sensors-Accelerometer.AccX -9620.000000 +44:961.211 Sensors-Accelerometer.AccY 3280.000000 +44:961.720 Sensors-Accelerometer.AccZ -14018.000000 +45:000.725 Sensors-Accelerometer.AccX -9825.000000 +45:001.253 Sensors-Accelerometer.AccY 2710.000000 +45:001.772 Sensors-Accelerometer.AccZ -13936.000000 +45:040.690 Sensors-Accelerometer.AccX -8736.000000 +45:041.203 Sensors-Accelerometer.AccY 2603.000000 +45:041.727 Sensors-Accelerometer.AccZ -13009.000000 +45:080.690 Sensors-Accelerometer.AccX -8718.000000 +45:081.210 Sensors-Accelerometer.AccY 2826.000000 +45:081.727 Sensors-Accelerometer.AccZ -12166.000000 +45:120.690 Sensors-Accelerometer.AccX -9151.000000 +45:121.213 Sensors-Accelerometer.AccY 4229.000000 +45:121.728 Sensors-Accelerometer.AccZ -9980.000000 +45:160.690 Sensors-Accelerometer.AccX -8879.000000 +45:161.215 Sensors-Accelerometer.AccY 3266.000000 +45:161.733 Sensors-Accelerometer.AccZ -11042.000000 +45:200.725 Sensors-Accelerometer.AccX -9272.000000 +45:201.245 Sensors-Accelerometer.AccY 3645.000000 +45:201.766 Sensors-Accelerometer.AccZ -12154.000000 +45:240.690 Sensors-Accelerometer.AccX -10005.000000 +45:241.232 Sensors-Accelerometer.AccY 2858.000000 +45:241.748 Sensors-Accelerometer.AccZ -13338.000000 +45:280.690 Sensors-Accelerometer.AccX -9905.000000 +45:281.212 Sensors-Accelerometer.AccY 2531.000000 +45:281.736 Sensors-Accelerometer.AccZ -13751.000000 +45:320.690 Sensors-Accelerometer.AccX -9392.000000 +45:321.212 Sensors-Accelerometer.AccY 3052.000000 +45:321.731 Sensors-Accelerometer.AccZ -13066.000000 +45:360.690 Sensors-Accelerometer.AccX -9189.000000 +45:361.213 Sensors-Accelerometer.AccY 2499.000000 +45:361.734 Sensors-Accelerometer.AccZ -13926.000000 +45:400.725 Sensors-Accelerometer.AccX -9702.000000 +45:401.249 Sensors-Accelerometer.AccY 2551.000000 +45:401.773 Sensors-Accelerometer.AccZ -12028.000000 +45:440.690 Sensors-Accelerometer.AccX -9117.000000 +45:441.212 Sensors-Accelerometer.AccY 3306.000000 +45:441.727 Sensors-Accelerometer.AccZ -11280.000000 +45:480.690 Sensors-Accelerometer.AccX -9355.000000 +45:481.217 Sensors-Accelerometer.AccY 3630.000000 +45:481.737 Sensors-Accelerometer.AccZ -11095.000000 +45:520.690 Sensors-Accelerometer.AccX -10173.000000 +45:521.235 Sensors-Accelerometer.AccY 3096.000000 +45:521.755 Sensors-Accelerometer.AccZ -12495.000000 +45:560.690 Sensors-Accelerometer.AccX -10507.000000 +45:561.234 Sensors-Accelerometer.AccY 2916.000000 +45:561.755 Sensors-Accelerometer.AccZ -12975.000000 +45:600.725 Sensors-Accelerometer.AccX -9729.000000 +45:601.245 Sensors-Accelerometer.AccY 3068.000000 +45:601.764 Sensors-Accelerometer.AccZ -12775.000000 +45:640.690 Sensors-Accelerometer.AccX -9377.000000 +45:641.213 Sensors-Accelerometer.AccY 3120.000000 +45:641.730 Sensors-Accelerometer.AccZ -12355.000000 +45:680.690 Sensors-Accelerometer.AccX -9309.000000 +45:681.211 Sensors-Accelerometer.AccY 3080.000000 +45:681.729 Sensors-Accelerometer.AccZ -11871.000000 +45:720.690 Sensors-Accelerometer.AccX -9127.000000 +45:721.216 Sensors-Accelerometer.AccY 2848.000000 +45:721.732 Sensors-Accelerometer.AccZ -12372.000000 +45:760.690 Sensors-Accelerometer.AccX -9337.000000 +45:761.214 Sensors-Accelerometer.AccY 2580.000000 +45:761.731 Sensors-Accelerometer.AccZ -12796.000000 +45:800.725 Sensors-Accelerometer.AccX -9237.000000 +45:801.247 Sensors-Accelerometer.AccY 2887.000000 +45:801.766 Sensors-Accelerometer.AccZ -12751.000000 +45:840.690 Sensors-Accelerometer.AccX -9375.000000 +45:841.216 Sensors-Accelerometer.AccY 3301.000000 +45:841.737 Sensors-Accelerometer.AccZ -11847.000000 +45:880.690 Sensors-Accelerometer.AccX -8723.000000 +45:881.212 Sensors-Accelerometer.AccY 2957.000000 +45:881.727 Sensors-Accelerometer.AccZ -12113.000000 +45:920.690 Sensors-Accelerometer.AccX -9658.000000 +45:921.210 Sensors-Accelerometer.AccY 3077.000000 +45:921.728 Sensors-Accelerometer.AccZ -11796.000000 +45:950.683 Sensors-Magnetometer.MagX -71.000000 +45:951.154 Sensors-Magnetometer.MagY -61.000000 +45:951.624 Sensors-Magnetometer.MagZ 768.000000 +45:960.690 Sensors-Accelerometer.AccX -10181.000000 +45:961.239 Sensors-Accelerometer.AccY 3897.000000 +45:961.759 Sensors-Accelerometer.AccZ -11869.000000 +46:000.725 Sensors-Accelerometer.AccX -10144.000000 +46:001.265 Sensors-Accelerometer.AccY 3106.000000 +46:001.784 Sensors-Accelerometer.AccZ -11925.000000 +46:040.690 Sensors-Accelerometer.AccX -10325.000000 +46:041.233 Sensors-Accelerometer.AccY 2682.000000 +46:041.752 Sensors-Accelerometer.AccZ -12385.000000 +46:080.690 Sensors-Accelerometer.AccX -10188.000000 +46:081.231 Sensors-Accelerometer.AccY 2392.000000 +46:081.746 Sensors-Accelerometer.AccZ -12488.000000 +46:120.690 Sensors-Accelerometer.AccX -11355.000000 +46:121.237 Sensors-Accelerometer.AccY 3168.000000 +46:121.751 Sensors-Accelerometer.AccZ -12135.000000 +46:160.690 Sensors-Accelerometer.AccX -9909.000000 +46:161.216 Sensors-Accelerometer.AccY 3333.000000 +46:161.735 Sensors-Accelerometer.AccZ -14365.000000 +46:200.683 Sensors-Magnetometer.MagX -7.000000 +46:201.123 Sensors-Magnetometer.MagY 7.000000 +46:201.564 Sensors-Magnetometer.MagZ 767.000000 +46:202.099 Sensors-Accelerometer.AccX -7174.000000 +46:202.622 Sensors-Accelerometer.AccY 4140.000000 +46:203.143 Sensors-Accelerometer.AccZ -13941.000000 +46:240.690 Sensors-Accelerometer.AccX -7484.000000 +46:241.212 Sensors-Accelerometer.AccY 3328.000000 +46:241.720 Sensors-Accelerometer.AccZ -8850.000000 +46:250.684 Sensors-Magnetometer.MagX 116.000000 +46:251.167 Sensors-Magnetometer.MagY 37.000000 +46:251.631 Sensors-Magnetometer.MagZ 743.000000 +46:280.690 Sensors-Accelerometer.AccX -16115.000000 +46:281.240 Sensors-Accelerometer.AccY 2992.000000 +46:281.756 Sensors-Accelerometer.AccZ -6112.000000 +46:300.683 Sensors-Magnetometer.MagX 208.000000 +46:301.168 Sensors-Magnetometer.MagY 27.000000 +46:301.632 Sensors-Magnetometer.MagZ 689.000000 +46:320.690 Sensors-Accelerometer.AccX -13909.000000 +46:321.235 Sensors-Accelerometer.AccY 1181.000000 +46:321.749 Sensors-Accelerometer.AccZ -7430.000000 +46:350.683 Sensors-Magnetometer.MagX 299.000000 +46:351.179 Sensors-Magnetometer.MagY -5.000000 +46:351.619 Sensors-Magnetometer.MagZ 633.000000 +46:360.690 Sensors-Accelerometer.AccX -18775.000000 +46:361.244 Sensors-Accelerometer.AccY 3387.000000 +46:361.763 Sensors-Accelerometer.AccZ -3384.000000 +46:400.725 Sensors-Accelerometer.AccX -13312.000000 +46:401.255 Sensors-Accelerometer.AccY 2880.000000 +46:401.764 Sensors-Accelerometer.AccZ -2839.000000 +46:440.690 Sensors-Accelerometer.AccX -16837.000000 +46:441.232 Sensors-Accelerometer.AccY 4602.000000 +46:441.751 Sensors-Accelerometer.AccZ -4381.000000 +46:480.690 Sensors-Accelerometer.AccX -15377.000000 +46:481.233 Sensors-Accelerometer.AccY 1844.000000 +46:481.748 Sensors-Accelerometer.AccZ -2697.000000 +46:500.683 Sensors-Magnetometer.MagX 354.000000 +46:501.170 Sensors-Magnetometer.MagY 5.000000 +46:501.608 Sensors-Magnetometer.MagZ 580.000000 +46:520.690 Sensors-Accelerometer.AccX -15237.000000 +46:521.241 Sensors-Accelerometer.AccY 823.000000 +46:521.736 Sensors-Accelerometer.AccZ -3121.000000 +46:560.690 Sensors-Accelerometer.AccX -14108.000000 +46:561.233 Sensors-Accelerometer.AccY 2122.000000 +46:561.748 Sensors-Accelerometer.AccZ -3466.000000 +46:600.725 Sensors-Accelerometer.AccX -13680.000000 +46:601.265 Sensors-Accelerometer.AccY 3398.000000 +46:601.784 Sensors-Accelerometer.AccZ -2700.000000 +46:640.690 Sensors-Accelerometer.AccX -15847.000000 +46:641.239 Sensors-Accelerometer.AccY 2951.000000 +46:641.760 Sensors-Accelerometer.AccZ -3761.000000 +46:650.683 Sensors-Magnetometer.MagX 379.000000 +46:651.177 Sensors-Magnetometer.MagY 29.000000 +46:651.640 Sensors-Magnetometer.MagZ 550.000000 +46:680.690 Sensors-Accelerometer.AccX -14356.000000 +46:681.235 Sensors-Accelerometer.AccY 3798.000000 +46:681.760 Sensors-Accelerometer.AccZ -2046.000000 +46:720.690 Sensors-Accelerometer.AccX -14954.000000 +46:721.232 Sensors-Accelerometer.AccY 3946.000000 +46:721.748 Sensors-Accelerometer.AccZ -2961.000000 +46:760.690 Sensors-Accelerometer.AccX -15428.000000 +46:761.233 Sensors-Accelerometer.AccY 4745.000000 +46:761.752 Sensors-Accelerometer.AccZ -6041.000000 +46:800.683 Sensors-Magnetometer.MagX 441.000000 +46:801.171 Sensors-Magnetometer.MagY 48.000000 +46:801.632 Sensors-Magnetometer.MagZ 494.000000 +46:802.159 Sensors-Accelerometer.AccX -17863.000000 +46:802.707 Sensors-Accelerometer.AccY 2308.000000 +46:803.221 Sensors-Accelerometer.AccZ -821.000000 +46:840.690 Sensors-Accelerometer.AccX -15417.000000 +46:841.239 Sensors-Accelerometer.AccY 3345.000000 +46:841.758 Sensors-Accelerometer.AccZ 694.000000 +46:880.690 Sensors-Accelerometer.AccX -15000.000000 +46:881.233 Sensors-Accelerometer.AccY 4116.000000 +46:881.747 Sensors-Accelerometer.AccZ -753.000000 +46:900.684 Sensors-Magnetometer.MagX 464.000000 +46:901.167 Sensors-Magnetometer.MagY 5.000000 +46:901.603 Sensors-Magnetometer.MagZ 441.000000 +46:920.690 Sensors-Accelerometer.AccX -13628.000000 +46:921.236 Sensors-Accelerometer.AccY 4068.000000 +46:921.755 Sensors-Accelerometer.AccZ 2649.000000 +46:960.690 Sensors-Accelerometer.AccX -14805.000000 +46:961.233 Sensors-Accelerometer.AccY 3567.000000 +46:961.756 Sensors-Accelerometer.AccZ 3516.000000 +47:000.725 Sensors-Accelerometer.AccX -15835.000000 +47:001.279 Sensors-Accelerometer.AccY 4095.000000 +47:001.811 Sensors-Accelerometer.AccZ 1868.000000 +47:040.690 Sensors-Accelerometer.AccX -14286.000000 +47:041.239 Sensors-Accelerometer.AccY 4111.000000 +47:041.761 Sensors-Accelerometer.AccZ 731.000000 +47:080.690 Sensors-Accelerometer.AccX -13759.000000 +47:081.241 Sensors-Accelerometer.AccY 5549.000000 +47:081.765 Sensors-Accelerometer.AccZ 317.000000 +47:100.684 Sensors-Magnetometer.MagX 502.000000 +47:101.184 Sensors-Magnetometer.MagY -24.000000 +47:101.652 Sensors-Magnetometer.MagZ 381.000000 +47:120.690 Sensors-Accelerometer.AccX -13579.000000 +47:121.238 Sensors-Accelerometer.AccY 4770.000000 +47:121.760 Sensors-Accelerometer.AccZ 477.000000 +47:160.690 Sensors-Accelerometer.AccX -13821.000000 +47:161.238 Sensors-Accelerometer.AccY 4547.000000 +47:161.762 Sensors-Accelerometer.AccZ 1838.000000 +47:200.725 Sensors-Accelerometer.AccX -12738.000000 +47:201.272 Sensors-Accelerometer.AccY 4195.000000 +47:201.789 Sensors-Accelerometer.AccZ 4200.000000 +47:240.690 Sensors-Accelerometer.AccX -14391.000000 +47:241.240 Sensors-Accelerometer.AccY 3858.000000 +47:241.761 Sensors-Accelerometer.AccZ 2338.000000 +47:280.690 Sensors-Accelerometer.AccX -14947.000000 +47:281.239 Sensors-Accelerometer.AccY 3836.000000 +47:281.761 Sensors-Accelerometer.AccZ 2784.000000 +47:320.690 Sensors-Accelerometer.AccX -16644.000000 +47:321.234 Sensors-Accelerometer.AccY 3767.000000 +47:321.762 Sensors-Accelerometer.AccZ 2852.000000 +47:360.690 Sensors-Accelerometer.AccX -14513.000000 +47:361.230 Sensors-Accelerometer.AccY 3852.000000 +47:361.748 Sensors-Accelerometer.AccZ 3094.000000 +47:400.725 Sensors-Accelerometer.AccX -17826.000000 +47:401.264 Sensors-Accelerometer.AccY 3975.000000 +47:401.787 Sensors-Accelerometer.AccZ 1766.000000 +47:440.690 Sensors-Accelerometer.AccX -14025.000000 +47:441.233 Sensors-Accelerometer.AccY 5096.000000 +47:441.754 Sensors-Accelerometer.AccZ 740.000000 +47:480.690 Sensors-Accelerometer.AccX -15398.000000 +47:481.242 Sensors-Accelerometer.AccY 3384.000000 +47:481.758 Sensors-Accelerometer.AccZ 2065.000000 +47:520.690 Sensors-Accelerometer.AccX -14828.000000 +47:521.230 Sensors-Accelerometer.AccY 4374.000000 +47:521.750 Sensors-Accelerometer.AccZ 2119.000000 +47:560.690 Sensors-Accelerometer.AccX -15949.000000 +47:561.238 Sensors-Accelerometer.AccY 4078.000000 +47:561.760 Sensors-Accelerometer.AccZ 825.000000 +47:600.725 Sensors-Accelerometer.AccX -13716.000000 +47:601.267 Sensors-Accelerometer.AccY 3884.000000 +47:601.787 Sensors-Accelerometer.AccZ -482.000000 +47:640.690 Sensors-Accelerometer.AccX -14787.000000 +47:641.234 Sensors-Accelerometer.AccY 4699.000000 +47:641.758 Sensors-Accelerometer.AccZ 2104.000000 +47:650.684 Sensors-Magnetometer.MagX 486.000000 +47:651.177 Sensors-Magnetometer.MagY -40.000000 +47:651.640 Sensors-Magnetometer.MagZ 437.000000 +47:680.690 Sensors-Accelerometer.AccX -15524.000000 +47:681.231 Sensors-Accelerometer.AccY 4145.000000 +47:681.750 Sensors-Accelerometer.AccZ 1354.000000 +47:720.690 Sensors-Accelerometer.AccX -16171.000000 +47:721.242 Sensors-Accelerometer.AccY 3335.000000 +47:721.762 Sensors-Accelerometer.AccZ 6.000000 +47:760.690 Sensors-Accelerometer.AccX -14790.000000 +47:761.236 Sensors-Accelerometer.AccY 4813.000000 +47:761.755 Sensors-Accelerometer.AccZ -682.000000 +47:800.684 Sensors-Magnetometer.MagX 438.000000 +47:801.177 Sensors-Magnetometer.MagY -56.000000 +47:801.641 Sensors-Magnetometer.MagZ 504.000000 +47:802.167 Sensors-Accelerometer.AccX -13993.000000 +47:802.715 Sensors-Accelerometer.AccY 5685.000000 +47:803.240 Sensors-Accelerometer.AccZ -1436.000000 +47:840.690 Sensors-Accelerometer.AccX -14930.000000 +47:841.237 Sensors-Accelerometer.AccY 5389.000000 +47:841.760 Sensors-Accelerometer.AccZ -1663.000000 +47:880.690 Sensors-Accelerometer.AccX -14676.000000 +47:881.238 Sensors-Accelerometer.AccY 4751.000000 +47:881.766 Sensors-Accelerometer.AccZ -2514.000000 +47:920.690 Sensors-Accelerometer.AccX -14305.000000 +47:921.240 Sensors-Accelerometer.AccY 5432.000000 +47:921.761 Sensors-Accelerometer.AccZ -2291.000000 +47:960.690 Sensors-Accelerometer.AccX -14125.000000 +47:961.239 Sensors-Accelerometer.AccY 5637.000000 +47:961.760 Sensors-Accelerometer.AccZ -3010.000000 +48:000.725 Sensors-Accelerometer.AccX -15117.000000 +48:001.269 Sensors-Accelerometer.AccY 5198.000000 +48:001.789 Sensors-Accelerometer.AccZ -2891.000000 +48:040.690 Sensors-Accelerometer.AccX -13794.000000 +48:041.233 Sensors-Accelerometer.AccY 6754.000000 +48:041.749 Sensors-Accelerometer.AccZ -3213.000000 +48:080.690 Sensors-Accelerometer.AccX -14568.000000 +48:081.230 Sensors-Accelerometer.AccY 5963.000000 +48:081.755 Sensors-Accelerometer.AccZ -3165.000000 +48:108.701 Buttons-Down 0x1 +48:120.690 Sensors-Accelerometer.AccX -14919.000000 +48:121.240 Sensors-Accelerometer.AccY 5677.000000 +48:121.765 Sensors-Accelerometer.AccZ -3246.000000 +48:160.690 Sensors-Accelerometer.AccX -13975.000000 +48:161.236 Sensors-Accelerometer.AccY 6629.000000 +48:161.755 Sensors-Accelerometer.AccZ -2710.000000 +48:200.683 Sensors-Magnetometer.MagX 410.000000 +48:201.169 Sensors-Magnetometer.MagY -118.000000 +48:201.656 Sensors-Magnetometer.MagZ 528.000000 +48:202.176 Sensors-Accelerometer.AccX -14518.000000 +48:202.723 Sensors-Accelerometer.AccY 5523.000000 +48:203.246 Sensors-Accelerometer.AccZ -1155.000000 +48:240.690 Sensors-Accelerometer.AccX -14825.000000 +48:241.234 Sensors-Accelerometer.AccY 6078.000000 +48:241.760 Sensors-Accelerometer.AccZ -862.000000 +48:267.475 Buttons-Down 0x0 +48:280.690 Sensors-Accelerometer.AccX -14844.000000 +48:281.235 Sensors-Accelerometer.AccY 5723.000000 +48:281.762 Sensors-Accelerometer.AccZ -1985.000000 +48:320.690 Sensors-Accelerometer.AccX -14002.000000 +48:321.235 Sensors-Accelerometer.AccY 6159.000000 +48:321.763 Sensors-Accelerometer.AccZ -1772.000000 +48:360.690 Sensors-Accelerometer.AccX -14977.000000 +48:361.236 Sensors-Accelerometer.AccY 5887.000000 +48:361.760 Sensors-Accelerometer.AccZ -2288.000000 +48:400.725 Sensors-Accelerometer.AccX -14411.000000 +48:401.273 Sensors-Accelerometer.AccY 6490.000000 +48:401.795 Sensors-Accelerometer.AccZ -2778.000000 +48:440.690 Sensors-Accelerometer.AccX -14123.000000 +48:441.243 Sensors-Accelerometer.AccY 5998.000000 +48:441.766 Sensors-Accelerometer.AccZ -1564.000000 +48:480.690 Sensors-Accelerometer.AccX -14014.000000 +48:481.238 Sensors-Accelerometer.AccY 7012.000000 +48:481.763 Sensors-Accelerometer.AccZ -3324.000000 +48:520.690 Sensors-Accelerometer.AccX -15021.000000 +48:521.237 Sensors-Accelerometer.AccY 5983.000000 +48:521.762 Sensors-Accelerometer.AccZ -1469.000000 +48:560.690 Sensors-Accelerometer.AccX -14934.000000 +48:561.240 Sensors-Accelerometer.AccY 6376.000000 +48:561.758 Sensors-Accelerometer.AccZ -1022.000000 +48:600.725 Sensors-Accelerometer.AccX -13905.000000 +48:601.272 Sensors-Accelerometer.AccY 6615.000000 +48:601.800 Sensors-Accelerometer.AccZ -1784.000000 +48:640.690 Sensors-Accelerometer.AccX -13835.000000 +48:641.233 Sensors-Accelerometer.AccY 7019.000000 +48:641.755 Sensors-Accelerometer.AccZ -1734.000000 +48:680.690 Sensors-Accelerometer.AccX -14591.000000 +48:681.239 Sensors-Accelerometer.AccY 5872.000000 +48:681.762 Sensors-Accelerometer.AccZ 96.000000 +48:720.690 Sensors-Accelerometer.AccX -15739.000000 +48:721.238 Sensors-Accelerometer.AccY 6137.000000 +48:721.764 Sensors-Accelerometer.AccZ -964.000000 +48:760.690 Sensors-Accelerometer.AccX -14614.000000 +48:761.241 Sensors-Accelerometer.AccY 5868.000000 +48:761.765 Sensors-Accelerometer.AccZ -484.000000 +48:800.725 Sensors-Accelerometer.AccX -14754.000000 +48:801.265 Sensors-Accelerometer.AccY 6534.000000 +48:801.788 Sensors-Accelerometer.AccZ -1680.000000 +48:840.690 Sensors-Accelerometer.AccX -13639.000000 +48:841.235 Sensors-Accelerometer.AccY 7600.000000 +48:841.756 Sensors-Accelerometer.AccZ -4030.000000 +48:880.690 Sensors-Accelerometer.AccX -14219.000000 +48:881.239 Sensors-Accelerometer.AccY 6862.000000 +48:881.759 Sensors-Accelerometer.AccZ -768.000000 +48:920.690 Sensors-Accelerometer.AccX -14008.000000 +48:921.238 Sensors-Accelerometer.AccY 7224.000000 +48:921.759 Sensors-Accelerometer.AccZ -3979.000000 +48:960.690 Sensors-Accelerometer.AccX -14795.000000 +48:961.236 Sensors-Accelerometer.AccY 7307.000000 +48:961.763 Sensors-Accelerometer.AccZ -4334.000000 +49:000.725 Sensors-Accelerometer.AccX -14522.000000 +49:001.271 Sensors-Accelerometer.AccY 4587.000000 +49:001.801 Sensors-Accelerometer.AccZ 2282.000000 +49:040.690 Sensors-Accelerometer.AccX -14384.000000 +49:041.236 Sensors-Accelerometer.AccY 6471.000000 +49:041.764 Sensors-Accelerometer.AccZ -500.000000 +49:080.690 Sensors-Accelerometer.AccX -15343.000000 +49:081.246 Sensors-Accelerometer.AccY 5635.000000 +49:081.772 Sensors-Accelerometer.AccZ 110.000000 +49:100.683 Sensors-Magnetometer.MagX 436.000000 +49:101.176 Sensors-Magnetometer.MagY -107.000000 +49:101.667 Sensors-Magnetometer.MagZ 496.000000 +49:120.690 Sensors-Accelerometer.AccX -14197.000000 +49:121.239 Sensors-Accelerometer.AccY 6031.000000 +49:121.768 Sensors-Accelerometer.AccZ -586.000000 +49:160.690 Sensors-Accelerometer.AccX -13346.000000 +49:161.230 Sensors-Accelerometer.AccY 6891.000000 +49:161.750 Sensors-Accelerometer.AccZ -2187.000000 +49:200.725 Sensors-Accelerometer.AccX -13745.000000 +49:201.268 Sensors-Accelerometer.AccY 6833.000000 +49:201.785 Sensors-Accelerometer.AccZ -1021.000000 +49:240.690 Sensors-Accelerometer.AccX -14655.000000 +49:241.240 Sensors-Accelerometer.AccY 6535.000000 +49:241.765 Sensors-Accelerometer.AccZ -2797.000000 +49:280.690 Sensors-Accelerometer.AccX -14502.000000 +49:281.230 Sensors-Accelerometer.AccY 6785.000000 +49:281.746 Sensors-Accelerometer.AccZ -1463.000000 +49:320.690 Sensors-Accelerometer.AccX -15087.000000 +49:321.241 Sensors-Accelerometer.AccY 6782.000000 +49:321.760 Sensors-Accelerometer.AccZ -581.000000 +49:360.690 Sensors-Accelerometer.AccX -14051.000000 +49:361.234 Sensors-Accelerometer.AccY 6493.000000 +49:361.753 Sensors-Accelerometer.AccZ -735.000000 +49:400.642 Buttons-Up 0x1 +49:401.012 Sensors-Accelerometer.AccX -14194.000000 +49:401.557 Sensors-Accelerometer.AccY 7007.000000 +49:402.084 Sensors-Accelerometer.AccZ -1693.000000 +49:440.690 Sensors-Accelerometer.AccX -13378.000000 +49:441.232 Sensors-Accelerometer.AccY 6871.000000 +49:441.756 Sensors-Accelerometer.AccZ -2428.000000 +49:480.690 Sensors-Accelerometer.AccX -14106.000000 +49:481.230 Sensors-Accelerometer.AccY 7510.000000 +49:481.757 Sensors-Accelerometer.AccZ -1654.000000 +49:520.690 Sensors-Accelerometer.AccX -13895.000000 +49:521.234 Sensors-Accelerometer.AccY 6746.000000 +49:521.753 Sensors-Accelerometer.AccZ -2291.000000 +49:542.648 Buttons-Up 0x0 +49:560.690 Sensors-Accelerometer.AccX -14137.000000 +49:561.238 Sensors-Accelerometer.AccY 6936.000000 +49:561.763 Sensors-Accelerometer.AccZ -1461.000000 +49:600.725 Sensors-Accelerometer.AccX -15416.000000 +49:601.268 Sensors-Accelerometer.AccY 5822.000000 +49:601.790 Sensors-Accelerometer.AccZ -810.000000 +49:640.690 Sensors-Accelerometer.AccX -15093.000000 +49:641.240 Sensors-Accelerometer.AccY 5275.000000 +49:641.761 Sensors-Accelerometer.AccZ -1211.000000 +49:680.690 Sensors-Accelerometer.AccX -14508.000000 +49:681.236 Sensors-Accelerometer.AccY 7251.000000 +49:681.757 Sensors-Accelerometer.AccZ -1886.000000 +49:720.690 Sensors-Accelerometer.AccX -13812.000000 +49:721.233 Sensors-Accelerometer.AccY 7010.000000 +49:721.755 Sensors-Accelerometer.AccZ -1536.000000 +49:760.690 Sensors-Accelerometer.AccX -15323.000000 +49:761.241 Sensors-Accelerometer.AccY 6695.000000 +49:761.766 Sensors-Accelerometer.AccZ -2033.000000 +49:800.725 Sensors-Accelerometer.AccX -13241.000000 +49:801.270 Sensors-Accelerometer.AccY 7173.000000 +49:801.792 Sensors-Accelerometer.AccZ -1601.000000 +49:840.690 Sensors-Accelerometer.AccX -15642.000000 +49:841.237 Sensors-Accelerometer.AccY 7010.000000 +49:841.758 Sensors-Accelerometer.AccZ -1442.000000 +49:880.690 Sensors-Accelerometer.AccX -13997.000000 +49:881.240 Sensors-Accelerometer.AccY 6489.000000 +49:881.763 Sensors-Accelerometer.AccZ -330.000000 +49:902.657 Buttons-Right 0x1 +49:920.690 Sensors-Accelerometer.AccX -13351.000000 +49:921.234 Sensors-Accelerometer.AccY 6360.000000 +49:921.753 Sensors-Accelerometer.AccZ -1262.000000 +49:950.684 Sensors-Magnetometer.MagX 409.000000 +49:951.179 Sensors-Magnetometer.MagY -77.000000 +49:951.649 Sensors-Magnetometer.MagZ 557.000000 +49:960.690 Sensors-Accelerometer.AccX -14643.000000 +49:961.244 Sensors-Accelerometer.AccY 6337.000000 +49:961.768 Sensors-Accelerometer.AccZ -2979.000000 +50:000.725 Sensors-Accelerometer.AccX -13733.000000 +50:001.270 Sensors-Accelerometer.AccY 7588.000000 +50:001.790 Sensors-Accelerometer.AccZ -4745.000000 +50:040.690 Sensors-Accelerometer.AccX -14614.000000 +50:041.241 Sensors-Accelerometer.AccY 7188.000000 +50:041.762 Sensors-Accelerometer.AccZ -2772.000000 +50:080.690 Sensors-Accelerometer.AccX -14085.000000 +50:081.233 Sensors-Accelerometer.AccY 7427.000000 +50:081.755 Sensors-Accelerometer.AccZ -3049.000000 +50:099.902 Buttons-Right 0x0 +50:120.690 Sensors-Accelerometer.AccX -14793.000000 +50:121.237 Sensors-Accelerometer.AccY 6887.000000 +50:121.759 Sensors-Accelerometer.AccZ -2628.000000 +50:160.690 Sensors-Accelerometer.AccX -14655.000000 +50:161.241 Sensors-Accelerometer.AccY 4942.000000 +50:161.764 Sensors-Accelerometer.AccZ 466.000000 +50:200.725 Sensors-Accelerometer.AccX -13956.000000 +50:201.268 Sensors-Accelerometer.AccY 7090.000000 +50:201.791 Sensors-Accelerometer.AccZ -1904.000000 +50:240.690 Sensors-Accelerometer.AccX -14031.000000 +50:241.237 Sensors-Accelerometer.AccY 7020.000000 +50:241.760 Sensors-Accelerometer.AccZ -2766.000000 +50:280.690 Sensors-Accelerometer.AccX -14761.000000 +50:281.237 Sensors-Accelerometer.AccY 7671.000000 +50:281.762 Sensors-Accelerometer.AccZ -2293.000000 +50:320.690 Sensors-Accelerometer.AccX -14544.000000 +50:321.231 Sensors-Accelerometer.AccY 6676.000000 +50:321.753 Sensors-Accelerometer.AccZ -3032.000000 +50:360.690 Sensors-Accelerometer.AccX -13026.000000 +50:361.236 Sensors-Accelerometer.AccY 6088.000000 +50:361.756 Sensors-Accelerometer.AccZ -4359.000000 +50:400.725 Sensors-Accelerometer.AccX -15139.000000 +50:401.274 Sensors-Accelerometer.AccY 6643.000000 +50:401.799 Sensors-Accelerometer.AccZ -2953.000000 +50:440.690 Sensors-Accelerometer.AccX -14619.000000 +50:441.240 Sensors-Accelerometer.AccY 6125.000000 +50:441.763 Sensors-Accelerometer.AccZ -2131.000000 +50:480.690 Sensors-Accelerometer.AccX -13720.000000 +50:481.234 Sensors-Accelerometer.AccY 7321.000000 +50:481.761 Sensors-Accelerometer.AccZ -1622.000000 +50:520.690 Sensors-Accelerometer.AccX -14639.000000 +50:521.246 Sensors-Accelerometer.AccY 7485.000000 +50:521.772 Sensors-Accelerometer.AccZ -1942.000000 +50:560.690 Sensors-Accelerometer.AccX -14880.000000 +50:561.227 Sensors-Accelerometer.AccY 6037.000000 +50:561.751 Sensors-Accelerometer.AccZ -1206.000000 +50:600.725 Sensors-Accelerometer.AccX -13313.000000 +50:601.270 Sensors-Accelerometer.AccY 8154.000000 +50:601.793 Sensors-Accelerometer.AccZ -1205.000000 +50:640.690 Sensors-Accelerometer.AccX -13538.000000 +50:641.231 Sensors-Accelerometer.AccY 7014.000000 +50:641.755 Sensors-Accelerometer.AccZ -2509.000000 +50:680.690 Sensors-Accelerometer.AccX -13884.000000 +50:681.238 Sensors-Accelerometer.AccY 7353.000000 +50:681.767 Sensors-Accelerometer.AccZ -1636.000000 +50:720.690 Sensors-Accelerometer.AccX -13802.000000 +50:721.233 Sensors-Accelerometer.AccY 7513.000000 +50:721.761 Sensors-Accelerometer.AccZ -1984.000000 +50:750.683 Sensors-Magnetometer.MagX 418.000000 +50:751.177 Sensors-Magnetometer.MagY -129.000000 +50:751.671 Sensors-Magnetometer.MagZ 522.000000 +50:760.690 Sensors-Accelerometer.AccX -14713.000000 +50:761.239 Sensors-Accelerometer.AccY 6686.000000 +50:761.764 Sensors-Accelerometer.AccZ 275.000000 +50:800.725 Sensors-Accelerometer.AccX -14859.000000 +50:801.271 Sensors-Accelerometer.AccY 7290.000000 +50:801.795 Sensors-Accelerometer.AccZ -1287.000000 +50:840.690 Sensors-Accelerometer.AccX -13578.000000 +50:841.238 Sensors-Accelerometer.AccY 6935.000000 +50:841.765 Sensors-Accelerometer.AccZ -1002.000000 +50:880.690 Sensors-Accelerometer.AccX -14814.000000 +50:881.237 Sensors-Accelerometer.AccY 7778.000000 +50:881.761 Sensors-Accelerometer.AccZ -1550.000000 +50:920.690 Sensors-Accelerometer.AccX -13890.000000 +50:921.237 Sensors-Accelerometer.AccY 7258.000000 +50:921.762 Sensors-Accelerometer.AccZ -1997.000000 +50:922.293 Buttons-Left 0x1 +50:960.690 Sensors-Accelerometer.AccX -14777.000000 +50:961.237 Sensors-Accelerometer.AccY 7355.000000 +50:961.764 Sensors-Accelerometer.AccZ -1533.000000 +51:000.725 Sensors-Accelerometer.AccX -13317.000000 +51:001.269 Sensors-Accelerometer.AccY 8113.000000 +51:001.796 Sensors-Accelerometer.AccZ -1285.000000 +51:040.690 Sensors-Accelerometer.AccX -12347.000000 +51:041.238 Sensors-Accelerometer.AccY 8486.000000 +51:041.763 Sensors-Accelerometer.AccZ -2962.000000 +51:062.427 Buttons-Left 0x0 +51:080.690 Sensors-Accelerometer.AccX -13937.000000 +51:081.237 Sensors-Accelerometer.AccY 7168.000000 +51:081.752 Sensors-Accelerometer.AccZ -420.000000 +51:120.690 Sensors-Accelerometer.AccX -14981.000000 +51:121.241 Sensors-Accelerometer.AccY 6759.000000 +51:121.762 Sensors-Accelerometer.AccZ 74.000000 +51:160.690 Sensors-Accelerometer.AccX -13969.000000 +51:161.235 Sensors-Accelerometer.AccY 7515.000000 +51:161.769 Sensors-Accelerometer.AccZ -728.000000 +51:200.725 Sensors-Accelerometer.AccX -13970.000000 +51:201.261 Sensors-Accelerometer.AccY 7418.000000 +51:201.776 Sensors-Accelerometer.AccZ -513.000000 +51:240.690 Sensors-Accelerometer.AccX -13337.000000 +51:241.233 Sensors-Accelerometer.AccY 8179.000000 +51:241.753 Sensors-Accelerometer.AccZ -1835.000000 +51:280.690 Sensors-Accelerometer.AccX -14661.000000 +51:281.237 Sensors-Accelerometer.AccY 7459.000000 +51:281.759 Sensors-Accelerometer.AccZ 81.000000 +51:301.916 Buttons-Left 0x1 +51:320.690 Sensors-Accelerometer.AccX -15486.000000 +51:321.237 Sensors-Accelerometer.AccY 8031.000000 +51:321.762 Sensors-Accelerometer.AccZ -204.000000 +51:360.690 Sensors-Accelerometer.AccX -13117.000000 +51:361.233 Sensors-Accelerometer.AccY 8366.000000 +51:361.755 Sensors-Accelerometer.AccZ -3319.000000 +51:397.672 Buttons-Left 0x0 +51:400.725 Sensors-Accelerometer.AccX -12375.000000 +51:401.273 Sensors-Accelerometer.AccY 8917.000000 +51:401.792 Sensors-Accelerometer.AccZ -2539.000000 +51:440.690 Sensors-Accelerometer.AccX -15299.000000 +51:441.239 Sensors-Accelerometer.AccY 6486.000000 +51:441.764 Sensors-Accelerometer.AccZ -282.000000 +51:480.690 Sensors-Accelerometer.AccX -14328.000000 +51:481.236 Sensors-Accelerometer.AccY 7801.000000 +51:481.761 Sensors-Accelerometer.AccZ -355.000000 +51:520.690 Sensors-Accelerometer.AccX -12965.000000 +51:521.232 Sensors-Accelerometer.AccY 8132.000000 +51:521.750 Sensors-Accelerometer.AccZ -813.000000 +51:550.683 Sensors-Magnetometer.MagX 417.000000 +51:551.175 Sensors-Magnetometer.MagY -164.000000 +51:551.661 Sensors-Magnetometer.MagZ 514.000000 +51:560.690 Sensors-Accelerometer.AccX -14038.000000 +51:561.238 Sensors-Accelerometer.AccY 7625.000000 +51:561.762 Sensors-Accelerometer.AccZ -1837.000000 +51:600.725 Sensors-Accelerometer.AccX -14415.000000 +51:601.275 Sensors-Accelerometer.AccY 7799.000000 +51:601.800 Sensors-Accelerometer.AccZ -556.000000 +51:640.690 Sensors-Accelerometer.AccX -14772.000000 +51:641.229 Sensors-Accelerometer.AccY 7277.000000 +51:641.751 Sensors-Accelerometer.AccZ -1846.000000 +51:662.631 Buttons-Left 0x1 +51:680.690 Sensors-Accelerometer.AccX -12703.000000 +51:681.239 Sensors-Accelerometer.AccY 9908.000000 +51:681.763 Sensors-Accelerometer.AccZ -4018.000000 +51:720.690 Sensors-Accelerometer.AccX -12482.000000 +51:721.234 Sensors-Accelerometer.AccY 8866.000000 +51:721.752 Sensors-Accelerometer.AccZ -3915.000000 +51:760.690 Sensors-Accelerometer.AccX -15005.000000 +51:761.238 Sensors-Accelerometer.AccY 6514.000000 +51:761.762 Sensors-Accelerometer.AccZ 1120.000000 +51:762.286 Buttons-Left 0x0 +51:800.725 Sensors-Accelerometer.AccX -14627.000000 +51:801.276 Sensors-Accelerometer.AccY 7718.000000 +51:801.801 Sensors-Accelerometer.AccZ -744.000000 +51:840.690 Sensors-Accelerometer.AccX -14425.000000 +51:841.232 Sensors-Accelerometer.AccY 6983.000000 +51:841.753 Sensors-Accelerometer.AccZ -55.000000 +51:880.690 Sensors-Accelerometer.AccX -12751.000000 +51:881.239 Sensors-Accelerometer.AccY 8812.000000 +51:881.756 Sensors-Accelerometer.AccZ -115.000000 +51:920.690 Sensors-Accelerometer.AccX -12120.000000 +51:921.237 Sensors-Accelerometer.AccY 8968.000000 +51:921.755 Sensors-Accelerometer.AccZ -3000.000000 +51:960.690 Sensors-Accelerometer.AccX -11208.000000 +51:961.231 Sensors-Accelerometer.AccY 8793.000000 +51:961.758 Sensors-Accelerometer.AccZ -1422.000000 +52:000.725 Sensors-Accelerometer.AccX -15395.000000 +52:001.274 Sensors-Accelerometer.AccY 5815.000000 +52:001.800 Sensors-Accelerometer.AccZ 1879.000000 +52:040.690 Sensors-Accelerometer.AccX -16274.000000 +52:041.233 Sensors-Accelerometer.AccY 6255.000000 +52:041.759 Sensors-Accelerometer.AccZ 1063.000000 +52:050.683 Sensors-Magnetometer.MagX 468.000000 +52:051.172 Sensors-Magnetometer.MagY -106.000000 +52:051.660 Sensors-Magnetometer.MagZ 467.000000 +52:080.690 Sensors-Accelerometer.AccX -16470.000000 +52:081.235 Sensors-Accelerometer.AccY 4192.000000 +52:081.754 Sensors-Accelerometer.AccZ 1344.000000 +52:120.690 Sensors-Accelerometer.AccX -14865.000000 +52:121.236 Sensors-Accelerometer.AccY 7289.000000 +52:121.761 Sensors-Accelerometer.AccZ -1588.000000 +52:160.690 Sensors-Accelerometer.AccX -14292.000000 +52:161.234 Sensors-Accelerometer.AccY 6815.000000 +52:161.759 Sensors-Accelerometer.AccZ -2036.000000 +52:200.684 Sensors-Magnetometer.MagX 428.000000 +52:201.174 Sensors-Magnetometer.MagY -120.000000 +52:201.663 Sensors-Magnetometer.MagZ 525.000000 +52:202.188 Sensors-Accelerometer.AccX -13090.000000 +52:202.736 Sensors-Accelerometer.AccY 8481.000000 +52:203.256 Sensors-Accelerometer.AccZ -2271.000000 +52:240.690 Sensors-Accelerometer.AccX -13760.000000 +52:241.227 Sensors-Accelerometer.AccY 6361.000000 +52:241.751 Sensors-Accelerometer.AccZ -39.000000 +52:280.690 Sensors-Accelerometer.AccX -15020.000000 +52:281.240 Sensors-Accelerometer.AccY 6219.000000 +52:281.767 Sensors-Accelerometer.AccZ -548.000000 +52:320.690 Sensors-Accelerometer.AccX -14024.000000 +52:321.237 Sensors-Accelerometer.AccY 5943.000000 +52:321.762 Sensors-Accelerometer.AccZ -836.000000 +52:360.690 Sensors-Accelerometer.AccX -15604.000000 +52:361.237 Sensors-Accelerometer.AccY 6930.000000 +52:361.759 Sensors-Accelerometer.AccZ -1344.000000 +52:400.725 Sensors-Accelerometer.AccX -13765.000000 +52:401.269 Sensors-Accelerometer.AccY 6900.000000 +52:401.788 Sensors-Accelerometer.AccZ -1930.000000 +52:440.690 Sensors-Accelerometer.AccX -14658.000000 +52:441.233 Sensors-Accelerometer.AccY 5604.000000 +52:441.747 Sensors-Accelerometer.AccZ -490.000000 +52:480.690 Sensors-Accelerometer.AccX -15657.000000 +52:481.230 Sensors-Accelerometer.AccY 6595.000000 +52:481.744 Sensors-Accelerometer.AccZ -746.000000 +52:520.690 Sensors-Accelerometer.AccX -14169.000000 +52:521.231 Sensors-Accelerometer.AccY 5780.000000 +52:521.745 Sensors-Accelerometer.AccZ -987.000000 +52:560.690 Sensors-Accelerometer.AccX -14907.000000 +52:561.234 Sensors-Accelerometer.AccY 6828.000000 +52:561.751 Sensors-Accelerometer.AccZ -1946.000000 +52:600.725 Sensors-Accelerometer.AccX -13994.000000 +52:601.266 Sensors-Accelerometer.AccY 6123.000000 +52:601.793 Sensors-Accelerometer.AccZ -1060.000000 +52:640.690 Sensors-Accelerometer.AccX -14869.000000 +52:641.228 Sensors-Accelerometer.AccY 6391.000000 +52:641.749 Sensors-Accelerometer.AccZ -912.000000 +52:680.690 Sensors-Accelerometer.AccX -14113.000000 +52:681.233 Sensors-Accelerometer.AccY 5691.000000 +52:681.755 Sensors-Accelerometer.AccZ -902.000000 +52:720.690 Sensors-Accelerometer.AccX -15103.000000 +52:721.237 Sensors-Accelerometer.AccY 6191.000000 +52:721.763 Sensors-Accelerometer.AccZ -1941.000000 +52:745.357 Buttons-Right 0x1 +52:760.690 Sensors-Accelerometer.AccX -14280.000000 +52:761.231 Sensors-Accelerometer.AccY 6979.000000 +52:761.752 Sensors-Accelerometer.AccZ -2363.000000 +52:800.725 Sensors-Accelerometer.AccX -13575.000000 +52:801.265 Sensors-Accelerometer.AccY 7135.000000 +52:801.786 Sensors-Accelerometer.AccZ -4438.000000 +52:840.690 Sensors-Accelerometer.AccX -13870.000000 +52:841.232 Sensors-Accelerometer.AccY 7025.000000 +52:841.751 Sensors-Accelerometer.AccZ -2770.000000 +52:865.370 Buttons-Right 0x0 +52:880.690 Sensors-Accelerometer.AccX -16036.000000 +52:881.229 Sensors-Accelerometer.AccY 6375.000000 +52:881.753 Sensors-Accelerometer.AccZ -1235.000000 +52:920.690 Sensors-Accelerometer.AccX -13970.000000 +52:921.230 Sensors-Accelerometer.AccY 7228.000000 +52:921.748 Sensors-Accelerometer.AccZ 464.000000 +52:960.690 Sensors-Accelerometer.AccX -13772.000000 +52:961.231 Sensors-Accelerometer.AccY 6516.000000 +52:961.749 Sensors-Accelerometer.AccZ -2270.000000 +53:000.725 Sensors-Accelerometer.AccX -13096.000000 +53:001.270 Sensors-Accelerometer.AccY 6152.000000 +53:001.788 Sensors-Accelerometer.AccZ -1386.000000 +53:040.690 Sensors-Accelerometer.AccX -14423.000000 +53:041.236 Sensors-Accelerometer.AccY 6167.000000 +53:041.758 Sensors-Accelerometer.AccZ -1165.000000 +53:049.522 Buttons-Right 0x1 +53:080.690 Sensors-Accelerometer.AccX -14624.000000 +53:081.232 Sensors-Accelerometer.AccY 7487.000000 +53:081.758 Sensors-Accelerometer.AccZ -3178.000000 +53:120.690 Sensors-Accelerometer.AccX -14183.000000 +53:121.231 Sensors-Accelerometer.AccY 7369.000000 +53:121.752 Sensors-Accelerometer.AccZ -3603.000000 +53:153.698 Buttons-Right 0x0 +53:160.690 Sensors-Accelerometer.AccX -15865.000000 +53:161.237 Sensors-Accelerometer.AccY 6273.000000 +53:161.761 Sensors-Accelerometer.AccZ -2228.000000 +53:200.725 Sensors-Accelerometer.AccX -14966.000000 +53:201.270 Sensors-Accelerometer.AccY 6319.000000 +53:201.795 Sensors-Accelerometer.AccZ -25.000000 +53:240.690 Sensors-Accelerometer.AccX -13214.000000 +53:241.235 Sensors-Accelerometer.AccY 5994.000000 +53:241.759 Sensors-Accelerometer.AccZ -1425.000000 +53:280.690 Sensors-Accelerometer.AccX -13719.000000 +53:281.234 Sensors-Accelerometer.AccY 5894.000000 +53:281.753 Sensors-Accelerometer.AccZ -1181.000000 +53:306.286 Buttons-Right 0x1 +53:320.690 Sensors-Accelerometer.AccX -15394.000000 +53:321.233 Sensors-Accelerometer.AccY 5925.000000 +53:321.750 Sensors-Accelerometer.AccZ -1169.000000 +53:360.690 Sensors-Accelerometer.AccX -14218.000000 +53:361.235 Sensors-Accelerometer.AccY 7179.000000 +53:361.757 Sensors-Accelerometer.AccZ -4033.000000 +53:400.683 Sensors-Magnetometer.MagX 403.000000 +53:401.179 Sensors-Magnetometer.MagY -68.000000 +53:401.641 Sensors-Magnetometer.MagZ 550.000000 +53:402.169 Sensors-Accelerometer.AccX -14481.000000 +53:402.708 Sensors-Accelerometer.AccY 7453.000000 +53:403.229 Sensors-Accelerometer.AccZ -4203.000000 +53:440.690 Sensors-Accelerometer.AccX -15723.000000 +53:441.242 Sensors-Accelerometer.AccY 6044.000000 +53:441.760 Sensors-Accelerometer.AccZ -1024.000000 +53:449.887 Buttons-Right 0x0 +53:480.690 Sensors-Accelerometer.AccX -15165.000000 +53:481.238 Sensors-Accelerometer.AccY 6609.000000 +53:481.754 Sensors-Accelerometer.AccZ -1974.000000 +53:520.690 Sensors-Accelerometer.AccX -14258.000000 +53:521.237 Sensors-Accelerometer.AccY 7183.000000 +53:521.759 Sensors-Accelerometer.AccZ 992.000000 +53:560.690 Sensors-Accelerometer.AccX -13195.000000 +53:561.238 Sensors-Accelerometer.AccY 4989.000000 +53:561.759 Sensors-Accelerometer.AccZ -467.000000 +53:600.725 Sensors-Accelerometer.AccX -13315.000000 +53:601.270 Sensors-Accelerometer.AccY 7232.000000 +53:601.784 Sensors-Accelerometer.AccZ -3222.000000 +53:640.690 Sensors-Accelerometer.AccX -15115.000000 +53:641.238 Sensors-Accelerometer.AccY 5791.000000 +53:641.760 Sensors-Accelerometer.AccZ 285.000000 +53:680.690 Sensors-Accelerometer.AccX -14010.000000 +53:681.230 Sensors-Accelerometer.AccY 6648.000000 +53:681.748 Sensors-Accelerometer.AccZ -1672.000000 +53:720.690 Sensors-Accelerometer.AccX -15178.000000 +53:721.240 Sensors-Accelerometer.AccY 6856.000000 +53:721.758 Sensors-Accelerometer.AccZ -884.000000 +53:760.690 Sensors-Accelerometer.AccX -14268.000000 +53:761.230 Sensors-Accelerometer.AccY 6907.000000 +53:761.748 Sensors-Accelerometer.AccZ -1877.000000 +53:800.725 Sensors-Accelerometer.AccX -14099.000000 +53:801.269 Sensors-Accelerometer.AccY 6400.000000 +53:801.774 Sensors-Accelerometer.AccZ -1571.000000 +53:840.690 Sensors-Accelerometer.AccX -15801.000000 +53:841.234 Sensors-Accelerometer.AccY 6519.000000 +53:841.759 Sensors-Accelerometer.AccZ -319.000000 +53:860.348 Buttons-Up 0x1 +53:880.690 Sensors-Accelerometer.AccX -14611.000000 +53:881.240 Sensors-Accelerometer.AccY 5400.000000 +53:881.759 Sensors-Accelerometer.AccZ 1733.000000 +53:920.690 Sensors-Accelerometer.AccX -13275.000000 +53:921.234 Sensors-Accelerometer.AccY 6353.000000 +53:921.755 Sensors-Accelerometer.AccZ -1018.000000 +53:960.690 Sensors-Accelerometer.AccX -13992.000000 +53:961.230 Sensors-Accelerometer.AccY 6634.000000 +53:961.751 Sensors-Accelerometer.AccZ -3719.000000 +54:000.683 Sensors-Magnetometer.MagX 428.000000 +54:001.170 Sensors-Magnetometer.MagY -81.000000 +54:001.636 Sensors-Magnetometer.MagZ 529.000000 +54:002.161 Sensors-Accelerometer.AccX -14522.000000 +54:002.705 Sensors-Accelerometer.AccY 7305.000000 +54:003.230 Sensors-Accelerometer.AccZ -3708.000000 +54:003.757 Buttons-Up 0x0 +54:040.690 Sensors-Accelerometer.AccX -15506.000000 +54:041.237 Sensors-Accelerometer.AccY 5993.000000 +54:041.761 Sensors-Accelerometer.AccZ -934.000000 +54:080.690 Sensors-Accelerometer.AccX -14233.000000 +54:081.236 Sensors-Accelerometer.AccY 6769.000000 +54:081.749 Sensors-Accelerometer.AccZ -1468.000000 +54:120.690 Sensors-Accelerometer.AccX -13412.000000 +54:121.234 Sensors-Accelerometer.AccY 6036.000000 +54:121.752 Sensors-Accelerometer.AccZ -868.000000 +54:160.690 Sensors-Accelerometer.AccX -15200.000000 +54:161.231 Sensors-Accelerometer.AccY 6162.000000 +54:161.751 Sensors-Accelerometer.AccZ -565.000000 +54:184.487 Buttons-Up 0x1 +54:240.690 Sensors-Accelerometer.AccX -13965.000000 +54:241.234 Sensors-Accelerometer.AccY 8448.000000 +54:241.743 Sensors-Accelerometer.AccZ -5987.000000 +54:280.690 Sensors-Accelerometer.AccX -14423.000000 +54:281.234 Sensors-Accelerometer.AccY 7601.000000 +54:281.757 Sensors-Accelerometer.AccZ -2697.000000 +54:300.893 Buttons-Up 0x0 +54:320.690 Sensors-Accelerometer.AccX -14856.000000 +54:321.231 Sensors-Accelerometer.AccY 7672.000000 +54:321.754 Sensors-Accelerometer.AccZ -649.000000 +54:360.690 Sensors-Accelerometer.AccX -14789.000000 +54:361.236 Sensors-Accelerometer.AccY 6037.000000 +54:361.762 Sensors-Accelerometer.AccZ -133.000000 +54:400.725 Sensors-Accelerometer.AccX -15168.000000 +54:401.259 Sensors-Accelerometer.AccY 6625.000000 +54:401.777 Sensors-Accelerometer.AccZ -543.000000 +54:440.690 Sensors-Accelerometer.AccX -13683.000000 +54:441.234 Sensors-Accelerometer.AccY 6215.000000 +54:441.757 Sensors-Accelerometer.AccZ -513.000000 +54:450.684 Sensors-Magnetometer.MagX 490.000000 +54:451.176 Sensors-Magnetometer.MagY -99.000000 +54:451.646 Sensors-Magnetometer.MagZ 430.000000 +54:480.690 Sensors-Accelerometer.AccX -13064.000000 +54:481.230 Sensors-Accelerometer.AccY 4545.000000 +54:481.748 Sensors-Accelerometer.AccZ 4114.000000 +54:520.690 Sensors-Accelerometer.AccX -15679.000000 +54:521.241 Sensors-Accelerometer.AccY 5777.000000 +54:521.756 Sensors-Accelerometer.AccZ 1823.000000 +54:560.690 Sensors-Accelerometer.AccX -13956.000000 +54:561.229 Sensors-Accelerometer.AccY 6583.000000 +54:561.749 Sensors-Accelerometer.AccZ 947.000000 +54:600.725 Sensors-Accelerometer.AccX -15811.000000 +54:601.272 Sensors-Accelerometer.AccY 5812.000000 +54:601.790 Sensors-Accelerometer.AccZ 1710.000000 +54:640.690 Sensors-Accelerometer.AccX -13753.000000 +54:641.235 Sensors-Accelerometer.AccY 5770.000000 +54:641.751 Sensors-Accelerometer.AccZ 1008.000000 +54:680.690 Sensors-Accelerometer.AccX -14281.000000 +54:681.239 Sensors-Accelerometer.AccY 5922.000000 +54:681.759 Sensors-Accelerometer.AccZ 1481.000000 +54:720.690 Sensors-Accelerometer.AccX -14140.000000 +54:721.236 Sensors-Accelerometer.AccY 6260.000000 +54:721.755 Sensors-Accelerometer.AccZ 1212.000000 +54:760.690 Sensors-Accelerometer.AccX -15383.000000 +54:761.239 Sensors-Accelerometer.AccY 6054.000000 +54:761.763 Sensors-Accelerometer.AccZ 1333.000000 +54:800.725 Sensors-Accelerometer.AccX -13941.000000 +54:801.268 Sensors-Accelerometer.AccY 5761.000000 +54:801.788 Sensors-Accelerometer.AccZ 2487.000000 +54:840.690 Sensors-Accelerometer.AccX -15167.000000 +54:841.239 Sensors-Accelerometer.AccY 7008.000000 +54:841.758 Sensors-Accelerometer.AccZ -1389.000000 +54:880.690 Sensors-Accelerometer.AccX -14579.000000 +54:881.241 Sensors-Accelerometer.AccY 5316.000000 +54:881.761 Sensors-Accelerometer.AccZ 2128.000000 +54:904.649 Buttons-Left 0x1 +54:920.690 Sensors-Accelerometer.AccX -15047.000000 +54:921.244 Sensors-Accelerometer.AccY 5762.000000 +54:921.762 Sensors-Accelerometer.AccZ 2024.000000 +54:960.690 Sensors-Accelerometer.AccX -15134.000000 +54:961.239 Sensors-Accelerometer.AccY 6396.000000 +54:961.766 Sensors-Accelerometer.AccZ 876.000000 +55:000.725 Sensors-Accelerometer.AccX -14686.000000 +55:001.274 Sensors-Accelerometer.AccY 6215.000000 +55:001.803 Sensors-Accelerometer.AccZ 1317.000000 +55:040.690 Sensors-Accelerometer.AccX -13979.000000 +55:041.233 Sensors-Accelerometer.AccY 6417.000000 +55:041.752 Sensors-Accelerometer.AccZ -500.000000 +55:058.681 Buttons-Left 0x0 +55:080.690 Sensors-Accelerometer.AccX -14664.000000 +55:081.234 Sensors-Accelerometer.AccY 5635.000000 +55:081.757 Sensors-Accelerometer.AccZ 1444.000000 +55:120.690 Sensors-Accelerometer.AccX -13786.000000 +55:121.232 Sensors-Accelerometer.AccY 5990.000000 +55:121.754 Sensors-Accelerometer.AccZ 1594.000000 +55:160.690 Sensors-Accelerometer.AccX -15355.000000 +55:161.246 Sensors-Accelerometer.AccY 6218.000000 +55:161.771 Sensors-Accelerometer.AccZ 2035.000000 +55:200.725 Sensors-Accelerometer.AccX -14481.000000 +55:201.265 Sensors-Accelerometer.AccY 6234.000000 +55:201.787 Sensors-Accelerometer.AccZ 312.000000 +55:240.690 Sensors-Accelerometer.AccX -15187.000000 +55:241.240 Sensors-Accelerometer.AccY 6396.000000 +55:241.766 Sensors-Accelerometer.AccZ 1691.000000 +55:280.690 Sensors-Accelerometer.AccX -14603.000000 +55:281.238 Sensors-Accelerometer.AccY 6630.000000 +55:281.762 Sensors-Accelerometer.AccZ -1005.000000 +55:320.690 Sensors-Accelerometer.AccX -15143.000000 +55:321.237 Sensors-Accelerometer.AccY 6814.000000 +55:321.761 Sensors-Accelerometer.AccZ -1381.000000 +55:360.690 Sensors-Accelerometer.AccX -14975.000000 +55:361.234 Sensors-Accelerometer.AccY 6329.000000 +55:361.755 Sensors-Accelerometer.AccZ 617.000000 +55:400.725 Sensors-Accelerometer.AccX -13154.000000 +55:401.266 Sensors-Accelerometer.AccY 6233.000000 +55:401.789 Sensors-Accelerometer.AccZ 1365.000000 +55:440.690 Sensors-Accelerometer.AccX -13385.000000 +55:441.236 Sensors-Accelerometer.AccY 6355.000000 +55:441.761 Sensors-Accelerometer.AccZ 211.000000 +55:480.690 Sensors-Accelerometer.AccX -14663.000000 +55:481.244 Sensors-Accelerometer.AccY 5254.000000 +55:481.763 Sensors-Accelerometer.AccZ 2148.000000 +55:520.690 Sensors-Accelerometer.AccX -14626.000000 +55:521.235 Sensors-Accelerometer.AccY 6534.000000 +55:521.760 Sensors-Accelerometer.AccZ 2264.000000 +55:560.690 Sensors-Accelerometer.AccX -14921.000000 +55:561.237 Sensors-Accelerometer.AccY 6051.000000 +55:561.763 Sensors-Accelerometer.AccZ 1558.000000 +55:600.725 Sensors-Accelerometer.AccX -15151.000000 +55:601.281 Sensors-Accelerometer.AccY 5869.000000 +55:601.805 Sensors-Accelerometer.AccZ 468.000000 +55:640.690 Sensors-Accelerometer.AccX -14172.000000 +55:641.239 Sensors-Accelerometer.AccY 6507.000000 +55:641.767 Sensors-Accelerometer.AccZ 1233.000000 +55:680.690 Sensors-Accelerometer.AccX -15067.000000 +55:681.242 Sensors-Accelerometer.AccY 5754.000000 +55:681.765 Sensors-Accelerometer.AccZ 795.000000 +55:720.690 Sensors-Accelerometer.AccX -14383.000000 +55:721.241 Sensors-Accelerometer.AccY 6101.000000 +55:721.761 Sensors-Accelerometer.AccZ 1249.000000 +55:734.579 Buttons-Down 0x1 +55:760.690 Sensors-Accelerometer.AccX -15049.000000 +55:761.237 Sensors-Accelerometer.AccY 6657.000000 +55:761.757 Sensors-Accelerometer.AccZ 513.000000 +55:800.725 Sensors-Accelerometer.AccX -13778.000000 +55:801.269 Sensors-Accelerometer.AccY 6386.000000 +55:801.794 Sensors-Accelerometer.AccZ 2117.000000 +55:840.690 Sensors-Accelerometer.AccX -15158.000000 +55:841.236 Sensors-Accelerometer.AccY 6384.000000 +55:841.757 Sensors-Accelerometer.AccZ 63.000000 +55:880.690 Sensors-Accelerometer.AccX -14199.000000 +55:881.238 Sensors-Accelerometer.AccY 6118.000000 +55:881.764 Sensors-Accelerometer.AccZ 1169.000000 +55:917.278 Buttons-Down 0x0 +55:920.691 Sensors-Accelerometer.AccX -14350.000000 +55:921.237 Sensors-Accelerometer.AccY 5276.000000 +55:921.754 Sensors-Accelerometer.AccZ 1715.000000 +55:960.690 Sensors-Accelerometer.AccX -14517.000000 +55:961.239 Sensors-Accelerometer.AccY 5099.000000 +55:961.769 Sensors-Accelerometer.AccZ 488.000000 +56:000.725 Sensors-Accelerometer.AccX -14863.000000 +56:001.272 Sensors-Accelerometer.AccY 6189.000000 +56:001.795 Sensors-Accelerometer.AccZ 527.000000 +56:040.690 Sensors-Accelerometer.AccX -13391.000000 +56:041.238 Sensors-Accelerometer.AccY 5704.000000 +56:041.757 Sensors-Accelerometer.AccZ 2026.000000 +56:080.690 Sensors-Accelerometer.AccX -14908.000000 +56:081.237 Sensors-Accelerometer.AccY 5403.000000 +56:081.757 Sensors-Accelerometer.AccZ 2348.000000 +56:120.690 Sensors-Accelerometer.AccX -14950.000000 +56:121.239 Sensors-Accelerometer.AccY 6971.000000 +56:121.761 Sensors-Accelerometer.AccZ -1687.000000 +56:150.684 Sensors-Magnetometer.MagX 471.000000 +56:151.184 Sensors-Magnetometer.MagY -81.000000 +56:151.652 Sensors-Magnetometer.MagZ 483.000000 +56:160.690 Sensors-Accelerometer.AccX -14617.000000 +56:161.238 Sensors-Accelerometer.AccY 7217.000000 +56:161.757 Sensors-Accelerometer.AccZ -2104.000000 +56:200.725 Sensors-Accelerometer.AccX -14858.000000 +56:201.269 Sensors-Accelerometer.AccY 6379.000000 +56:201.797 Sensors-Accelerometer.AccZ 1520.000000 +56:240.690 Sensors-Accelerometer.AccX -14438.000000 +56:241.235 Sensors-Accelerometer.AccY 6878.000000 +56:241.763 Sensors-Accelerometer.AccZ -1455.000000 +56:280.690 Sensors-Accelerometer.AccX -14348.000000 +56:281.237 Sensors-Accelerometer.AccY 5719.000000 +56:281.764 Sensors-Accelerometer.AccZ -78.000000 +56:320.690 Sensors-Accelerometer.AccX -15375.000000 +56:321.233 Sensors-Accelerometer.AccY 6154.000000 +56:321.750 Sensors-Accelerometer.AccZ 628.000000 +56:360.690 Sensors-Accelerometer.AccX -15658.000000 +56:361.238 Sensors-Accelerometer.AccY 7119.000000 +56:361.761 Sensors-Accelerometer.AccZ 2364.000000 +56:400.725 Sensors-Accelerometer.AccX -14852.000000 +56:401.265 Sensors-Accelerometer.AccY 6414.000000 +56:401.786 Sensors-Accelerometer.AccZ -836.000000 +56:440.690 Sensors-Accelerometer.AccX -13815.000000 +56:441.234 Sensors-Accelerometer.AccY 6762.000000 +56:441.753 Sensors-Accelerometer.AccZ -3104.000000 +56:450.683 Sensors-Magnetometer.MagX 401.000000 +56:451.171 Sensors-Magnetometer.MagY -109.000000 +56:451.657 Sensors-Magnetometer.MagZ 570.000000 +56:480.690 Sensors-Accelerometer.AccX -14030.000000 +56:481.233 Sensors-Accelerometer.AccY 7089.000000 +56:481.752 Sensors-Accelerometer.AccZ -3982.000000 +56:520.690 Sensors-Accelerometer.AccX -13251.000000 +56:521.240 Sensors-Accelerometer.AccY 7233.000000 +56:521.763 Sensors-Accelerometer.AccZ -4345.000000 +56:550.684 Sensors-Magnetometer.MagX 355.000000 +56:551.177 Sensors-Magnetometer.MagY -97.000000 +56:551.643 Sensors-Magnetometer.MagZ 622.000000 +56:560.691 Sensors-Accelerometer.AccX -13148.000000 +56:561.233 Sensors-Accelerometer.AccY 7791.000000 +56:561.759 Sensors-Accelerometer.AccZ -5461.000000 +56:600.725 Sensors-Accelerometer.AccX -11139.000000 +56:601.276 Sensors-Accelerometer.AccY 7821.000000 +56:601.803 Sensors-Accelerometer.AccZ -4675.000000 +56:640.690 Sensors-Accelerometer.AccX -13431.000000 +56:641.233 Sensors-Accelerometer.AccY 7976.000000 +56:641.751 Sensors-Accelerometer.AccZ -5283.000000 +56:680.690 Sensors-Accelerometer.AccX -12958.000000 +56:681.239 Sensors-Accelerometer.AccY 8565.000000 +56:681.758 Sensors-Accelerometer.AccZ -3794.000000 +56:720.690 Sensors-Accelerometer.AccX -14259.000000 +56:721.239 Sensors-Accelerometer.AccY 7712.000000 +56:721.757 Sensors-Accelerometer.AccZ -3861.000000 +56:760.690 Sensors-Accelerometer.AccX -13487.000000 +56:761.237 Sensors-Accelerometer.AccY 7332.000000 +56:761.761 Sensors-Accelerometer.AccZ -3469.000000 +56:800.725 Sensors-Accelerometer.AccX -13785.000000 +56:801.270 Sensors-Accelerometer.AccY 8516.000000 +56:801.790 Sensors-Accelerometer.AccZ -4741.000000 +56:840.690 Sensors-Accelerometer.AccX -12578.000000 +56:841.236 Sensors-Accelerometer.AccY 8851.000000 +56:841.758 Sensors-Accelerometer.AccZ -3907.000000 +56:880.690 Sensors-Accelerometer.AccX -13781.000000 +56:881.230 Sensors-Accelerometer.AccY 8075.000000 +56:881.755 Sensors-Accelerometer.AccZ -4234.000000 +56:920.690 Sensors-Accelerometer.AccX -13268.000000 +56:921.235 Sensors-Accelerometer.AccY 8151.000000 +56:921.768 Sensors-Accelerometer.AccZ -3446.000000 +56:960.690 Sensors-Accelerometer.AccX -13130.000000 +56:961.229 Sensors-Accelerometer.AccY 7952.000000 +56:961.747 Sensors-Accelerometer.AccZ -3097.000000 +57:000.683 Sensors-Magnetometer.MagX 323.000000 +57:001.178 Sensors-Magnetometer.MagY -151.000000 +57:001.672 Sensors-Magnetometer.MagZ 624.000000 +57:002.200 Sensors-Accelerometer.AccX -12754.000000 +57:002.747 Sensors-Accelerometer.AccY 7923.000000 +57:003.276 Sensors-Accelerometer.AccZ -4639.000000 +57:040.690 Sensors-Accelerometer.AccX -13522.000000 +57:041.230 Sensors-Accelerometer.AccY 7318.000000 +57:041.755 Sensors-Accelerometer.AccZ -2227.000000 +57:080.690 Sensors-Accelerometer.AccX -12706.000000 +57:081.237 Sensors-Accelerometer.AccY 8621.000000 +57:081.762 Sensors-Accelerometer.AccZ -5216.000000 +57:120.690 Sensors-Accelerometer.AccX -11739.000000 +57:121.242 Sensors-Accelerometer.AccY 8410.000000 +57:121.757 Sensors-Accelerometer.AccZ -5922.000000 +57:160.690 Sensors-Accelerometer.AccX -13559.000000 +57:161.237 Sensors-Accelerometer.AccY 9345.000000 +57:161.763 Sensors-Accelerometer.AccZ -5491.000000 +57:196.983 Buttons-Right 0x1 +57:200.725 Sensors-Accelerometer.AccX -13901.000000 +57:201.272 Sensors-Accelerometer.AccY 9269.000000 +57:201.798 Sensors-Accelerometer.AccZ -3779.000000 +57:240.690 Sensors-Accelerometer.AccX -12861.000000 +57:241.240 Sensors-Accelerometer.AccY 8559.000000 +57:241.771 Sensors-Accelerometer.AccZ -3540.000000 +57:280.690 Sensors-Accelerometer.AccX -11878.000000 +57:281.240 Sensors-Accelerometer.AccY 9435.000000 +57:281.771 Sensors-Accelerometer.AccZ -5971.000000 +57:304.178 Buttons-Right 0x0 +57:320.690 Sensors-Accelerometer.AccX -13541.000000 +57:321.239 Sensors-Accelerometer.AccY 8272.000000 +57:321.759 Sensors-Accelerometer.AccZ -4906.000000 +57:360.690 Sensors-Accelerometer.AccX -14030.000000 +57:361.232 Sensors-Accelerometer.AccY 7681.000000 +57:361.749 Sensors-Accelerometer.AccZ -1358.000000 +57:400.725 Sensors-Accelerometer.AccX -12425.000000 +57:401.273 Sensors-Accelerometer.AccY 7988.000000 +57:401.796 Sensors-Accelerometer.AccZ -3663.000000 +57:440.690 Sensors-Accelerometer.AccX -13699.000000 +57:441.235 Sensors-Accelerometer.AccY 7812.000000 +57:441.755 Sensors-Accelerometer.AccZ -2751.000000 +57:480.690 Sensors-Accelerometer.AccX -13453.000000 +57:481.232 Sensors-Accelerometer.AccY 7816.000000 +57:481.751 Sensors-Accelerometer.AccZ -3830.000000 +57:515.654 Buttons-Right 0x1 +57:520.690 Sensors-Accelerometer.AccX -12885.000000 +57:521.234 Sensors-Accelerometer.AccY 9318.000000 +57:521.761 Sensors-Accelerometer.AccZ -5123.000000 +57:560.690 Sensors-Accelerometer.AccX -11514.000000 +57:561.238 Sensors-Accelerometer.AccY 10288.000000 +57:561.782 Sensors-Accelerometer.AccZ -6490.000000 +57:600.725 Sensors-Accelerometer.AccX -12689.000000 +57:601.266 Sensors-Accelerometer.AccY 9579.000000 +57:601.790 Sensors-Accelerometer.AccZ -4857.000000 +57:638.607 Buttons-Right 0x0 +57:640.690 Sensors-Accelerometer.AccX -14352.000000 +57:641.233 Sensors-Accelerometer.AccY 8650.000000 +57:641.754 Sensors-Accelerometer.AccZ -4376.000000 +57:680.690 Sensors-Accelerometer.AccX -13863.000000 +57:681.230 Sensors-Accelerometer.AccY 8690.000000 +57:681.749 Sensors-Accelerometer.AccZ -3553.000000 +57:720.690 Sensors-Accelerometer.AccX -11412.000000 +57:721.231 Sensors-Accelerometer.AccY 8505.000000 +57:721.751 Sensors-Accelerometer.AccZ -2992.000000 +57:760.690 Sensors-Accelerometer.AccX -12765.000000 +57:761.234 Sensors-Accelerometer.AccY 7449.000000 +57:761.753 Sensors-Accelerometer.AccZ -2418.000000 +57:767.371 Buttons-Right 0x1 +57:800.725 Sensors-Accelerometer.AccX -12651.000000 +57:801.274 Sensors-Accelerometer.AccY 8792.000000 +57:801.795 Sensors-Accelerometer.AccZ -4627.000000 +57:840.690 Sensors-Accelerometer.AccX -13546.000000 +57:841.231 Sensors-Accelerometer.AccY 9553.000000 +57:841.753 Sensors-Accelerometer.AccZ -4662.000000 +57:880.690 Sensors-Accelerometer.AccX -12057.000000 +57:881.239 Sensors-Accelerometer.AccY 9690.000000 +57:881.760 Sensors-Accelerometer.AccZ -5525.000000 +57:920.690 Sensors-Accelerometer.AccX -13563.000000 +57:921.235 Sensors-Accelerometer.AccY 9241.000000 +57:921.752 Sensors-Accelerometer.AccZ -5908.000000 +57:960.690 Sensors-Accelerometer.AccX -12635.000000 +57:961.241 Sensors-Accelerometer.AccY 8958.000000 +57:961.764 Sensors-Accelerometer.AccZ -3577.000000 +58:000.725 Sensors-Accelerometer.AccX -11991.000000 +58:001.275 Sensors-Accelerometer.AccY 9363.000000 +58:001.801 Sensors-Accelerometer.AccZ -3697.000000 +58:033.420 Buttons-Right 0x0 +58:040.690 Sensors-Accelerometer.AccX -13808.000000 +58:041.231 Sensors-Accelerometer.AccY 8850.000000 +58:041.748 Sensors-Accelerometer.AccZ -4552.000000 +58:080.690 Sensors-Accelerometer.AccX -14096.000000 +58:081.227 Sensors-Accelerometer.AccY 9235.000000 +58:081.752 Sensors-Accelerometer.AccZ -3345.000000 +58:120.690 Sensors-Accelerometer.AccX -10757.000000 +58:121.232 Sensors-Accelerometer.AccY 8903.000000 +58:121.759 Sensors-Accelerometer.AccZ -1944.000000 +58:160.690 Sensors-Accelerometer.AccX -13094.000000 +58:161.244 Sensors-Accelerometer.AccY 8999.000000 +58:161.769 Sensors-Accelerometer.AccZ -3368.000000 +58:200.725 Sensors-Accelerometer.AccX -12325.000000 +58:201.271 Sensors-Accelerometer.AccY 9021.000000 +58:201.795 Sensors-Accelerometer.AccZ -3613.000000 +58:240.690 Sensors-Accelerometer.AccX -14315.000000 +58:241.240 Sensors-Accelerometer.AccY 9038.000000 +58:241.763 Sensors-Accelerometer.AccZ -3602.000000 +58:280.690 Sensors-Accelerometer.AccX -13511.000000 +58:281.237 Sensors-Accelerometer.AccY 9148.000000 +58:281.763 Sensors-Accelerometer.AccZ -3740.000000 +58:320.690 Sensors-Accelerometer.AccX -13654.000000 +58:321.236 Sensors-Accelerometer.AccY 8133.000000 +58:321.764 Sensors-Accelerometer.AccZ -3863.000000 +58:360.690 Sensors-Accelerometer.AccX -13694.000000 +58:361.238 Sensors-Accelerometer.AccY 7578.000000 +58:361.760 Sensors-Accelerometer.AccZ -2060.000000 +58:400.725 Sensors-Accelerometer.AccX -13355.000000 +58:401.273 Sensors-Accelerometer.AccY 7768.000000 +58:401.793 Sensors-Accelerometer.AccZ -2871.000000 +58:440.690 Sensors-Accelerometer.AccX -12974.000000 +58:441.238 Sensors-Accelerometer.AccY 8874.000000 +58:441.757 Sensors-Accelerometer.AccZ -3501.000000 +58:480.690 Sensors-Accelerometer.AccX -13650.000000 +58:481.230 Sensors-Accelerometer.AccY 9055.000000 +58:481.755 Sensors-Accelerometer.AccZ -2970.000000 +58:520.690 Sensors-Accelerometer.AccX -13243.000000 +58:521.239 Sensors-Accelerometer.AccY 7752.000000 +58:521.762 Sensors-Accelerometer.AccZ -2920.000000 +58:560.690 Sensors-Accelerometer.AccX -13205.000000 +58:561.236 Sensors-Accelerometer.AccY 8448.000000 +58:561.746 Sensors-Accelerometer.AccZ -3433.000000 +58:600.725 Sensors-Accelerometer.AccX -13349.000000 +58:601.272 Sensors-Accelerometer.AccY 8444.000000 +58:601.791 Sensors-Accelerometer.AccZ -4243.000000 +58:613.643 Buttons-Center 0x1 +58:640.690 Sensors-Accelerometer.AccX -12497.000000 +58:641.235 Sensors-Accelerometer.AccY 9198.000000 +58:641.760 Sensors-Accelerometer.AccZ -4966.000000 +58:680.690 Sensors-Accelerometer.AccX -13353.000000 +58:681.234 Sensors-Accelerometer.AccY 9863.000000 +58:681.761 Sensors-Accelerometer.AccZ -6210.000000 +58:720.690 Sensors-Accelerometer.AccX -13796.000000 +58:721.232 Sensors-Accelerometer.AccY 7448.000000 +58:721.755 Sensors-Accelerometer.AccZ -2237.000000 +58:730.666 Buttons-Center 0x0 +58:760.690 Sensors-Accelerometer.AccX -14315.000000 +58:761.244 Sensors-Accelerometer.AccY 7644.000000 +58:761.770 Sensors-Accelerometer.AccZ -2205.000000 +58:800.684 Sensors-Magnetometer.MagX 354.000000 +58:801.172 Sensors-Magnetometer.MagY -157.000000 +58:801.666 Sensors-Magnetometer.MagZ 570.000000 +58:802.197 Sensors-Accelerometer.AccX -12958.000000 +58:802.748 Sensors-Accelerometer.AccY 7861.000000 +58:803.280 Sensors-Accelerometer.AccZ -2286.000000 +58:840.690 Sensors-Accelerometer.AccX -12615.000000 +58:841.243 Sensors-Accelerometer.AccY 8550.000000 +58:841.768 Sensors-Accelerometer.AccZ -2614.000000 +58:880.690 Sensors-Accelerometer.AccX -13301.000000 +58:881.235 Sensors-Accelerometer.AccY 8471.000000 +58:881.756 Sensors-Accelerometer.AccZ -3285.000000 +58:900.683 Sensors-Magnetometer.MagX 348.000000 +58:901.171 Sensors-Magnetometer.MagY -164.000000 +58:901.655 Sensors-Magnetometer.MagZ 582.000000 +58:920.690 Sensors-Accelerometer.AccX -13229.000000 +58:921.239 Sensors-Accelerometer.AccY 8007.000000 +58:921.764 Sensors-Accelerometer.AccZ -2829.000000 +58:945.285 Buttons-Center 0x1 +58:960.690 Sensors-Accelerometer.AccX -13253.000000 +58:961.240 Sensors-Accelerometer.AccY 7560.000000 +58:961.760 Sensors-Accelerometer.AccZ -2124.000000 +58:963.782 Buttons-Right 0x1 +59:000.725 Sensors-Accelerometer.AccX -11858.000000 +59:001.269 Sensors-Accelerometer.AccY 10929.000000 +59:001.810 Sensors-Accelerometer.AccZ -7249.000000 +59:040.690 Sensors-Accelerometer.AccX -13336.000000 +59:041.234 Sensors-Accelerometer.AccY 8949.000000 +59:041.756 Sensors-Accelerometer.AccZ -3904.000000 +59:080.690 Sensors-Accelerometer.AccX -13967.000000 +59:081.240 Sensors-Accelerometer.AccY 8426.000000 +59:081.757 Sensors-Accelerometer.AccZ -2036.000000 +59:120.690 Sensors-Accelerometer.AccX -14209.000000 +59:121.237 Sensors-Accelerometer.AccY 8165.000000 +59:121.762 Sensors-Accelerometer.AccZ -2703.000000 +59:149.388 Buttons-Right 0x0 +59:153.379 Buttons-Center 0x0 +59:160.690 Sensors-Accelerometer.AccX -13766.000000 +59:161.234 Sensors-Accelerometer.AccY 7943.000000 +59:161.761 Sensors-Accelerometer.AccZ -2642.000000 +59:200.725 Sensors-Accelerometer.AccX -12981.000000 +59:201.270 Sensors-Accelerometer.AccY 8063.000000 +59:201.792 Sensors-Accelerometer.AccZ -2274.000000 +59:240.690 Sensors-Accelerometer.AccX -12767.000000 +59:241.240 Sensors-Accelerometer.AccY 7905.000000 +59:241.764 Sensors-Accelerometer.AccZ -1838.000000 +59:280.690 Sensors-Accelerometer.AccX -13584.000000 +59:281.229 Sensors-Accelerometer.AccY 8192.000000 +59:281.734 Sensors-Accelerometer.AccZ -3567.000000 +59:320.690 Sensors-Accelerometer.AccX -14358.000000 +59:321.237 Sensors-Accelerometer.AccY 8882.000000 +59:321.760 Sensors-Accelerometer.AccZ -2578.000000 +59:360.690 Sensors-Accelerometer.AccX -13919.000000 +59:361.243 Sensors-Accelerometer.AccY 8354.000000 +59:361.766 Sensors-Accelerometer.AccZ -2288.000000 +59:400.725 Sensors-Accelerometer.AccX -14959.000000 +59:401.273 Sensors-Accelerometer.AccY 9429.000000 +59:401.794 Sensors-Accelerometer.AccZ -3248.000000 +59:440.690 Sensors-Accelerometer.AccX -12258.000000 +59:441.234 Sensors-Accelerometer.AccY 7454.000000 +59:441.761 Sensors-Accelerometer.AccZ -326.000000 +59:450.683 Sensors-Magnetometer.MagX 408.000000 +59:451.175 Sensors-Magnetometer.MagY -182.000000 +59:451.668 Sensors-Magnetometer.MagZ 520.000000 +59:480.690 Sensors-Accelerometer.AccX -12885.000000 +59:481.234 Sensors-Accelerometer.AccY 7849.000000 +59:481.759 Sensors-Accelerometer.AccZ -712.000000 +59:520.690 Sensors-Accelerometer.AccX -13657.000000 +59:521.233 Sensors-Accelerometer.AccY 7972.000000 +59:521.752 Sensors-Accelerometer.AccZ -1595.000000 +59:560.690 Sensors-Accelerometer.AccX -13118.000000 +59:561.234 Sensors-Accelerometer.AccY 6717.000000 +59:561.755 Sensors-Accelerometer.AccZ 1966.000000 +59:600.725 Sensors-Accelerometer.AccX -13176.000000 +59:601.268 Sensors-Accelerometer.AccY 9742.000000 +59:601.791 Sensors-Accelerometer.AccZ -3072.000000 +59:640.690 Sensors-Accelerometer.AccX -13041.000000 +59:641.240 Sensors-Accelerometer.AccY 8602.000000 +59:641.757 Sensors-Accelerometer.AccZ -1071.000000 +59:680.690 Sensors-Accelerometer.AccX -14305.000000 +59:681.236 Sensors-Accelerometer.AccY 7937.000000 +59:681.760 Sensors-Accelerometer.AccZ -703.000000 +59:720.690 Sensors-Accelerometer.AccX -14722.000000 +59:721.237 Sensors-Accelerometer.AccY 7977.000000 +59:721.762 Sensors-Accelerometer.AccZ -492.000000 +59:760.690 Sensors-Accelerometer.AccX -14628.000000 +59:761.234 Sensors-Accelerometer.AccY 7665.000000 +59:761.761 Sensors-Accelerometer.AccZ -1599.000000 +59:800.725 Sensors-Accelerometer.AccX -13769.000000 +59:801.272 Sensors-Accelerometer.AccY 8278.000000 +59:801.803 Sensors-Accelerometer.AccZ -1252.000000 +59:821.970 Buttons-Up 0x1 +59:840.690 Sensors-Accelerometer.AccX -14417.000000 +59:841.238 Sensors-Accelerometer.AccY 8783.000000 +59:841.764 Sensors-Accelerometer.AccZ -3574.000000 +59:880.690 Sensors-Accelerometer.AccX -14014.000000 +59:881.240 Sensors-Accelerometer.AccY 7368.000000 +59:881.762 Sensors-Accelerometer.AccZ -1245.000000 +59:920.690 Sensors-Accelerometer.AccX -13830.000000 +59:921.237 Sensors-Accelerometer.AccY 7737.000000 +59:921.762 Sensors-Accelerometer.AccZ 204.000000 +59:948.648 Buttons-Up 0x0 +59:960.690 Sensors-Accelerometer.AccX -12636.000000 +59:961.238 Sensors-Accelerometer.AccY 8975.000000 +59:961.768 Sensors-Accelerometer.AccZ -1724.000000 +60:000.725 Sensors-Accelerometer.AccX -13179.000000 +60:001.272 Sensors-Accelerometer.AccY 11343.000000 +60:001.822 Sensors-Accelerometer.AccZ -3026.000000 +60:040.690 Sensors-Accelerometer.AccX -14510.000000 +60:041.238 Sensors-Accelerometer.AccY 5235.000000 +60:041.767 Sensors-Accelerometer.AccZ -1848.000000 +60:050.684 Sensors-Magnetometer.MagX 471.000000 +60:051.183 Sensors-Magnetometer.MagY -134.000000 +60:051.675 Sensors-Magnetometer.MagZ 442.000000 +60:080.690 Sensors-Accelerometer.AccX -13512.000000 +60:081.232 Sensors-Accelerometer.AccY 1278.000000 +60:081.753 Sensors-Accelerometer.AccZ 6164.000000 +60:120.690 Sensors-Accelerometer.AccX -18259.000000 +60:121.241 Sensors-Accelerometer.AccY 1846.000000 +60:121.761 Sensors-Accelerometer.AccZ 5559.000000 +60:160.690 Sensors-Accelerometer.AccX -14669.000000 +60:161.237 Sensors-Accelerometer.AccY 5199.000000 +60:161.763 Sensors-Accelerometer.AccZ 2856.000000 +60:200.725 Sensors-Accelerometer.AccX -14304.000000 +60:201.269 Sensors-Accelerometer.AccY 6861.000000 +60:201.790 Sensors-Accelerometer.AccZ -364.000000 +60:240.690 Sensors-Accelerometer.AccX -13655.000000 +60:241.237 Sensors-Accelerometer.AccY 7107.000000 +60:241.764 Sensors-Accelerometer.AccZ -1219.000000 +60:280.690 Sensors-Accelerometer.AccX -14568.000000 +60:281.235 Sensors-Accelerometer.AccY 5788.000000 +60:281.759 Sensors-Accelerometer.AccZ -287.000000 +60:320.690 Sensors-Accelerometer.AccX -14944.000000 +60:321.230 Sensors-Accelerometer.AccY 5090.000000 +60:321.752 Sensors-Accelerometer.AccZ 1726.000000 +60:360.690 Sensors-Accelerometer.AccX -15047.000000 +60:361.246 Sensors-Accelerometer.AccY 5850.000000 +60:361.768 Sensors-Accelerometer.AccZ 1276.000000 +60:400.725 Sensors-Accelerometer.AccX -14339.000000 +60:401.275 Sensors-Accelerometer.AccY 6210.000000 +60:401.798 Sensors-Accelerometer.AccZ 169.000000 +60:440.690 Sensors-Accelerometer.AccX -15027.000000 +60:441.243 Sensors-Accelerometer.AccY 5570.000000 +60:441.767 Sensors-Accelerometer.AccZ 1294.000000 +60:480.690 Sensors-Accelerometer.AccX -15117.000000 +60:481.236 Sensors-Accelerometer.AccY 5689.000000 +60:481.756 Sensors-Accelerometer.AccZ 991.000000 +60:520.690 Sensors-Accelerometer.AccX -14051.000000 +60:521.238 Sensors-Accelerometer.AccY 6498.000000 +60:521.760 Sensors-Accelerometer.AccZ 630.000000 +60:560.690 Sensors-Accelerometer.AccX -15292.000000 +60:561.241 Sensors-Accelerometer.AccY 5769.000000 +60:561.760 Sensors-Accelerometer.AccZ 385.000000 +60:600.725 Sensors-Accelerometer.AccX -13832.000000 +60:601.270 Sensors-Accelerometer.AccY 6637.000000 +60:601.794 Sensors-Accelerometer.AccZ 162.000000 +60:640.690 Sensors-Accelerometer.AccX -14531.000000 +60:641.238 Sensors-Accelerometer.AccY 6320.000000 +60:641.759 Sensors-Accelerometer.AccZ -283.000000 +60:680.690 Sensors-Accelerometer.AccX -14098.000000 +60:681.235 Sensors-Accelerometer.AccY 6098.000000 +60:681.757 Sensors-Accelerometer.AccZ 237.000000 +60:720.690 Sensors-Accelerometer.AccX -14751.000000 +60:721.239 Sensors-Accelerometer.AccY 6310.000000 +60:721.764 Sensors-Accelerometer.AccZ -19.000000 +60:760.690 Sensors-Accelerometer.AccX -15104.000000 +60:761.231 Sensors-Accelerometer.AccY 6054.000000 +60:761.759 Sensors-Accelerometer.AccZ 263.000000 +60:800.725 Sensors-Accelerometer.AccX -14683.000000 +60:801.271 Sensors-Accelerometer.AccY 5841.000000 +60:801.788 Sensors-Accelerometer.AccZ 342.000000 +60:840.690 Sensors-Accelerometer.AccX -14834.000000 +60:841.237 Sensors-Accelerometer.AccY 6169.000000 +60:841.757 Sensors-Accelerometer.AccZ -14.000000 +60:880.690 Sensors-Accelerometer.AccX -14131.000000 +60:881.240 Sensors-Accelerometer.AccY 5763.000000 +60:881.765 Sensors-Accelerometer.AccZ -393.000000 +60:920.690 Sensors-Accelerometer.AccX -15218.000000 +60:921.238 Sensors-Accelerometer.AccY 5839.000000 +60:921.767 Sensors-Accelerometer.AccZ -444.000000 +60:960.690 Sensors-Accelerometer.AccX -14400.000000 +60:961.227 Sensors-Accelerometer.AccY 5709.000000 +60:961.749 Sensors-Accelerometer.AccZ 544.000000 +61:000.725 Sensors-Accelerometer.AccX -14568.000000 +61:001.269 Sensors-Accelerometer.AccY 6087.000000 +61:001.792 Sensors-Accelerometer.AccZ -337.000000 +61:040.690 Sensors-Accelerometer.AccX -15078.000000 +61:041.240 Sensors-Accelerometer.AccY 6088.000000 +61:041.758 Sensors-Accelerometer.AccZ 502.000000 +61:080.690 Sensors-Accelerometer.AccX -14855.000000 +61:081.240 Sensors-Accelerometer.AccY 5873.000000 +61:081.765 Sensors-Accelerometer.AccZ 77.000000 +61:120.690 Sensors-Accelerometer.AccX -14231.000000 +61:121.242 Sensors-Accelerometer.AccY 5865.000000 +61:121.768 Sensors-Accelerometer.AccZ 559.000000 +61:160.690 Sensors-Accelerometer.AccX -14598.000000 +61:161.241 Sensors-Accelerometer.AccY 5815.000000 +61:161.769 Sensors-Accelerometer.AccZ 579.000000 +61:200.725 Sensors-Accelerometer.AccX -14048.000000 +61:201.270 Sensors-Accelerometer.AccY 5886.000000 +61:201.794 Sensors-Accelerometer.AccZ 603.000000 +61:240.690 Sensors-Accelerometer.AccX -15443.000000 +61:241.239 Sensors-Accelerometer.AccY 5231.000000 +61:241.770 Sensors-Accelerometer.AccZ 869.000000 +61:260.769 Buttons-Center 0x1 +61:280.690 Sensors-Accelerometer.AccX -14682.000000 +61:281.235 Sensors-Accelerometer.AccY 5508.000000 +61:281.755 Sensors-Accelerometer.AccZ 85.000000 +61:300.683 Sensors-Magnetometer.MagX 464.000000 +61:301.172 Sensors-Magnetometer.MagY -83.000000 +61:301.642 Sensors-Magnetometer.MagZ 447.000000 +61:320.690 Sensors-Accelerometer.AccX -14120.000000 +61:321.235 Sensors-Accelerometer.AccY 6857.000000 +61:321.760 Sensors-Accelerometer.AccZ -63.000000 +61:350.683 Sensors-Magnetometer.MagX 478.000000 +61:351.183 Sensors-Magnetometer.MagY -106.000000 +61:351.674 Sensors-Magnetometer.MagZ 438.000000 +61:360.690 Sensors-Accelerometer.AccX -15833.000000 +61:361.246 Sensors-Accelerometer.AccY 5760.000000 +61:361.761 Sensors-Accelerometer.AccZ 2205.000000 +61:394.778 Buttons-Center 0x0 +61:400.725 Sensors-Accelerometer.AccX -14674.000000 +61:401.279 Sensors-Accelerometer.AccY 6228.000000 +61:401.804 Sensors-Accelerometer.AccZ 901.000000 +61:440.690 Sensors-Accelerometer.AccX -13518.000000 +61:441.227 Sensors-Accelerometer.AccY 5364.000000 +61:441.743 Sensors-Accelerometer.AccZ 1169.000000 +61:480.690 Sensors-Accelerometer.AccX -13804.000000 +61:481.233 Sensors-Accelerometer.AccY 3838.000000 +61:481.754 Sensors-Accelerometer.AccZ 4095.000000 +61:520.690 Sensors-Accelerometer.AccX -15221.000000 +61:521.236 Sensors-Accelerometer.AccY 4929.000000 +61:521.756 Sensors-Accelerometer.AccZ 552.000000 +61:560.690 Sensors-Accelerometer.AccX -13790.000000 +61:561.239 Sensors-Accelerometer.AccY 4731.000000 +61:561.764 Sensors-Accelerometer.AccZ 2548.000000 +61:600.684 Sensors-Magnetometer.MagX 501.000000 +61:601.177 Sensors-Magnetometer.MagY -94.000000 +61:601.647 Sensors-Magnetometer.MagZ 362.000000 +61:602.173 Sensors-Accelerometer.AccX -14773.000000 +61:602.719 Sensors-Accelerometer.AccY 5659.000000 +61:603.245 Sensors-Accelerometer.AccZ 1772.000000 +61:640.690 Sensors-Accelerometer.AccX -15665.000000 +61:641.240 Sensors-Accelerometer.AccY 4816.000000 +61:641.757 Sensors-Accelerometer.AccZ 3024.000000 +61:680.690 Sensors-Accelerometer.AccX -15049.000000 +61:681.238 Sensors-Accelerometer.AccY 5091.000000 +61:681.765 Sensors-Accelerometer.AccZ 3952.000000 +61:720.690 Sensors-Accelerometer.AccX -14567.000000 +61:721.241 Sensors-Accelerometer.AccY 4350.000000 +61:721.764 Sensors-Accelerometer.AccZ 3450.000000 +61:760.690 Sensors-Accelerometer.AccX -14636.000000 +61:761.237 Sensors-Accelerometer.AccY 5543.000000 +61:761.759 Sensors-Accelerometer.AccZ 0.000000 +61:800.725 Sensors-Accelerometer.AccX -13585.000000 +61:801.269 Sensors-Accelerometer.AccY 5452.000000 +61:801.790 Sensors-Accelerometer.AccZ 1237.000000 +61:834.892 Buttons-Down 0x1 +61:840.690 Sensors-Accelerometer.AccX -15311.000000 +61:841.241 Sensors-Accelerometer.AccY 5448.000000 +61:841.758 Sensors-Accelerometer.AccZ 3178.000000 +61:842.456 Buttons-Center 0x1 +61:880.690 Sensors-Accelerometer.AccX -14910.000000 +61:881.238 Sensors-Accelerometer.AccY 4874.000000 +61:881.762 Sensors-Accelerometer.AccZ 2116.000000 +61:920.690 Sensors-Accelerometer.AccX -15526.000000 +61:921.239 Sensors-Accelerometer.AccY 4776.000000 +61:921.760 Sensors-Accelerometer.AccZ 3978.000000 +61:960.690 Sensors-Accelerometer.AccX -14297.000000 +61:961.239 Sensors-Accelerometer.AccY 5436.000000 +61:961.762 Sensors-Accelerometer.AccZ 2222.000000 +62:000.725 Sensors-Accelerometer.AccX -14771.000000 +62:001.272 Sensors-Accelerometer.AccY 5791.000000 +62:001.797 Sensors-Accelerometer.AccZ 2187.000000 +62:016.921 Buttons-Center 0x0 +62:021.656 Buttons-Down 0x0 +62:040.690 Sensors-Accelerometer.AccX -13961.000000 +62:041.237 Sensors-Accelerometer.AccY 5999.000000 +62:041.769 Sensors-Accelerometer.AccZ 1579.000000 +62:080.690 Sensors-Accelerometer.AccX -14363.000000 +62:081.237 Sensors-Accelerometer.AccY 5550.000000 +62:081.761 Sensors-Accelerometer.AccZ 4339.000000 +62:120.690 Sensors-Accelerometer.AccX -14915.000000 +62:121.241 Sensors-Accelerometer.AccY 4783.000000 +62:121.768 Sensors-Accelerometer.AccZ 3509.000000 +62:150.684 Sensors-Magnetometer.MagX 524.000000 +62:151.181 Sensors-Magnetometer.MagY -99.000000 +62:151.655 Sensors-Magnetometer.MagZ 311.000000 +62:160.690 Sensors-Accelerometer.AccX -15569.000000 +62:161.236 Sensors-Accelerometer.AccY 4470.000000 +62:161.759 Sensors-Accelerometer.AccZ 2987.000000 +62:200.684 Sensors-Magnetometer.MagX 541.000000 +62:201.176 Sensors-Magnetometer.MagY -78.000000 +62:201.647 Sensors-Magnetometer.MagZ 254.000000 +62:202.177 Sensors-Accelerometer.AccX -15488.000000 +62:202.720 Sensors-Accelerometer.AccY 4164.000000 +62:203.239 Sensors-Accelerometer.AccZ 4191.000000 +62:240.690 Sensors-Accelerometer.AccX -14166.000000 +62:241.240 Sensors-Accelerometer.AccY 4882.000000 +62:241.764 Sensors-Accelerometer.AccZ 5119.000000 +62:250.684 Sensors-Magnetometer.MagX 563.000000 +62:251.184 Sensors-Magnetometer.MagY -67.000000 +62:251.656 Sensors-Magnetometer.MagZ 191.000000 +62:280.690 Sensors-Accelerometer.AccX -14204.000000 +62:281.237 Sensors-Accelerometer.AccY 4026.000000 +62:281.758 Sensors-Accelerometer.AccZ 5959.000000 +62:300.684 Sensors-Magnetometer.MagX 566.000000 +62:301.179 Sensors-Magnetometer.MagY -55.000000 +62:301.648 Sensors-Magnetometer.MagZ 136.000000 +62:320.690 Sensors-Accelerometer.AccX -13940.000000 +62:321.231 Sensors-Accelerometer.AccY 3403.000000 +62:321.751 Sensors-Accelerometer.AccZ 8038.000000 +62:350.684 Sensors-Magnetometer.MagX 568.000000 +62:351.177 Sensors-Magnetometer.MagY -72.000000 +62:351.646 Sensors-Magnetometer.MagZ 85.000000 +62:360.690 Sensors-Accelerometer.AccX -12232.000000 +62:361.238 Sensors-Accelerometer.AccY 2578.000000 +62:361.761 Sensors-Accelerometer.AccZ 9776.000000 +62:400.725 Sensors-Accelerometer.AccX -9750.000000 +62:401.251 Sensors-Accelerometer.AccY 2577.000000 +62:401.768 Sensors-Accelerometer.AccZ 10082.000000 +62:440.690 Sensors-Accelerometer.AccX -10380.000000 +62:441.240 Sensors-Accelerometer.AccY 4445.000000 +62:441.760 Sensors-Accelerometer.AccZ 9585.000000 +62:450.684 Sensors-Magnetometer.MagX 553.000000 +62:451.178 Sensors-Magnetometer.MagY -125.000000 +62:451.672 Sensors-Magnetometer.MagZ 71.000000 +62:480.690 Sensors-Accelerometer.AccX -12321.000000 +62:481.230 Sensors-Accelerometer.AccY 4434.000000 +62:481.749 Sensors-Accelerometer.AccZ 8543.000000 +62:520.690 Sensors-Accelerometer.AccX -11681.000000 +62:521.237 Sensors-Accelerometer.AccY 5186.000000 +62:521.758 Sensors-Accelerometer.AccZ 8383.000000 +62:550.683 Sensors-Magnetometer.MagX 541.000000 +62:551.175 Sensors-Magnetometer.MagY -189.000000 +62:551.668 Sensors-Magnetometer.MagZ 100.000000 +62:560.690 Sensors-Accelerometer.AccX -12082.000000 +62:561.237 Sensors-Accelerometer.AccY 5362.000000 +62:561.760 Sensors-Accelerometer.AccZ 7784.000000 +62:600.683 Sensors-Magnetometer.MagX 518.000000 +62:601.177 Sensors-Magnetometer.MagY -243.000000 +62:601.672 Sensors-Magnetometer.MagZ 141.000000 +62:602.198 Sensors-Accelerometer.AccX -12104.000000 +62:602.744 Sensors-Accelerometer.AccY 8237.000000 +62:603.266 Sensors-Accelerometer.AccZ 8592.000000 +62:640.690 Sensors-Accelerometer.AccX -10532.000000 +62:641.232 Sensors-Accelerometer.AccY 6572.000000 +62:641.753 Sensors-Accelerometer.AccZ 6176.000000 +62:680.690 Sensors-Accelerometer.AccX -9807.000000 +62:681.220 Sensors-Accelerometer.AccY 6966.000000 +62:681.741 Sensors-Accelerometer.AccZ 7834.000000 +62:720.690 Sensors-Accelerometer.AccX -12467.000000 +62:721.238 Sensors-Accelerometer.AccY 8440.000000 +62:721.755 Sensors-Accelerometer.AccZ 8424.000000 +62:750.683 Sensors-Magnetometer.MagX 482.000000 +62:751.179 Sensors-Magnetometer.MagY -308.000000 +62:751.673 Sensors-Magnetometer.MagZ 213.000000 +62:760.690 Sensors-Accelerometer.AccX -10464.000000 +62:761.236 Sensors-Accelerometer.AccY 9146.000000 +62:761.759 Sensors-Accelerometer.AccZ 4200.000000 +62:800.725 Sensors-Accelerometer.AccX -12880.000000 +62:801.264 Sensors-Accelerometer.AccY 8220.000000 +62:801.786 Sensors-Accelerometer.AccZ 5015.000000 +62:840.690 Sensors-Accelerometer.AccX -12240.000000 +62:841.235 Sensors-Accelerometer.AccY 10840.000000 +62:841.780 Sensors-Accelerometer.AccZ 3017.000000 +62:850.684 Sensors-Magnetometer.MagX 454.000000 +62:851.179 Sensors-Magnetometer.MagY -310.000000 +62:851.677 Sensors-Magnetometer.MagZ 298.000000 +62:880.690 Sensors-Accelerometer.AccX -10920.000000 +62:881.227 Sensors-Accelerometer.AccY 9066.000000 +62:881.750 Sensors-Accelerometer.AccZ 2355.000000 +62:920.690 Sensors-Accelerometer.AccX -13301.000000 +62:921.238 Sensors-Accelerometer.AccY 9267.000000 +62:921.763 Sensors-Accelerometer.AccZ 2147.000000 +62:960.690 Sensors-Accelerometer.AccX -12860.000000 +62:961.234 Sensors-Accelerometer.AccY 9166.000000 +62:961.761 Sensors-Accelerometer.AccZ 2248.000000 +63:000.684 Sensors-Magnetometer.MagX 436.000000 +63:001.171 Sensors-Magnetometer.MagY -282.000000 +63:001.662 Sensors-Magnetometer.MagZ 363.000000 +63:002.191 Sensors-Accelerometer.AccX -14304.000000 +63:002.733 Sensors-Accelerometer.AccY 8987.000000 +63:003.256 Sensors-Accelerometer.AccZ 3019.000000 +63:040.690 Sensors-Accelerometer.AccX -13281.000000 +63:041.233 Sensors-Accelerometer.AccY 9316.000000 +63:041.754 Sensors-Accelerometer.AccZ 2782.000000 +63:080.690 Sensors-Accelerometer.AccX -12579.000000 +63:081.241 Sensors-Accelerometer.AccY 9210.000000 +63:081.763 Sensors-Accelerometer.AccZ 1884.000000 +63:120.690 Sensors-Accelerometer.AccX -13374.000000 +63:121.236 Sensors-Accelerometer.AccY 10704.000000 +63:121.775 Sensors-Accelerometer.AccZ 1105.000000 +63:160.690 Sensors-Accelerometer.AccX -13654.000000 +63:161.237 Sensors-Accelerometer.AccY 10019.000000 +63:161.788 Sensors-Accelerometer.AccZ 1954.000000 +63:200.684 Sensors-Magnetometer.MagX 415.000000 +63:201.177 Sensors-Magnetometer.MagY -282.000000 +63:201.668 Sensors-Magnetometer.MagZ 419.000000 +63:202.201 Sensors-Accelerometer.AccX -12279.000000 +63:202.751 Sensors-Accelerometer.AccY 8445.000000 +63:203.271 Sensors-Accelerometer.AccZ 697.000000 +63:240.690 Sensors-Accelerometer.AccX -12482.000000 +63:241.236 Sensors-Accelerometer.AccY 9663.000000 +63:241.764 Sensors-Accelerometer.AccZ 2264.000000 +63:280.690 Sensors-Accelerometer.AccX -12986.000000 +63:281.235 Sensors-Accelerometer.AccY 9678.000000 +63:281.763 Sensors-Accelerometer.AccZ 892.000000 +63:320.690 Sensors-Accelerometer.AccX -12511.000000 +63:321.243 Sensors-Accelerometer.AccY 9444.000000 +63:321.764 Sensors-Accelerometer.AccZ 2324.000000 +63:360.690 Sensors-Accelerometer.AccX -12983.000000 +63:361.239 Sensors-Accelerometer.AccY 8910.000000 +63:361.764 Sensors-Accelerometer.AccZ 1518.000000 +63:400.725 Sensors-Accelerometer.AccX -12560.000000 +63:401.270 Sensors-Accelerometer.AccY 9535.000000 +63:401.800 Sensors-Accelerometer.AccZ 1598.000000 +63:440.690 Sensors-Accelerometer.AccX -12858.000000 +63:441.234 Sensors-Accelerometer.AccY 9663.000000 +63:441.763 Sensors-Accelerometer.AccZ 1995.000000 +63:480.690 Sensors-Accelerometer.AccX -13488.000000 +63:481.233 Sensors-Accelerometer.AccY 8830.000000 +63:481.761 Sensors-Accelerometer.AccZ 2039.000000 +63:520.690 Sensors-Accelerometer.AccX -13142.000000 +63:521.235 Sensors-Accelerometer.AccY 9239.000000 +63:521.760 Sensors-Accelerometer.AccZ 2466.000000 +63:560.690 Sensors-Accelerometer.AccX -13281.000000 +63:561.237 Sensors-Accelerometer.AccY 8859.000000 +63:561.763 Sensors-Accelerometer.AccZ 2210.000000 +63:600.725 Sensors-Accelerometer.AccX -11078.000000 +63:601.271 Sensors-Accelerometer.AccY 9806.000000 +63:601.796 Sensors-Accelerometer.AccZ 1939.000000 +63:640.690 Sensors-Accelerometer.AccX -12059.000000 +63:641.239 Sensors-Accelerometer.AccY 9031.000000 +63:641.766 Sensors-Accelerometer.AccZ 3668.000000 +63:650.683 Sensors-Magnetometer.MagX 467.000000 +63:651.178 Sensors-Magnetometer.MagY -267.000000 +63:651.675 Sensors-Magnetometer.MagZ 353.000000 +63:680.690 Sensors-Accelerometer.AccX -14150.000000 +63:681.240 Sensors-Accelerometer.AccY 7897.000000 +63:681.767 Sensors-Accelerometer.AccZ 4598.000000 +63:720.690 Sensors-Accelerometer.AccX -13971.000000 +63:721.241 Sensors-Accelerometer.AccY 7332.000000 +63:721.765 Sensors-Accelerometer.AccZ 4330.000000 +63:760.690 Sensors-Accelerometer.AccX -14517.000000 +63:761.237 Sensors-Accelerometer.AccY 5778.000000 +63:761.757 Sensors-Accelerometer.AccZ 2377.000000 +63:800.683 Sensors-Magnetometer.MagX 470.000000 +63:801.181 Sensors-Magnetometer.MagY -190.000000 +63:801.677 Sensors-Magnetometer.MagZ 408.000000 +63:802.207 Sensors-Accelerometer.AccX -13639.000000 +63:802.756 Sensors-Accelerometer.AccY 7314.000000 +63:803.281 Sensors-Accelerometer.AccZ 2530.000000 +63:840.690 Sensors-Accelerometer.AccX -14009.000000 +63:841.236 Sensors-Accelerometer.AccY 8170.000000 +63:841.763 Sensors-Accelerometer.AccZ -179.000000 +63:880.690 Sensors-Accelerometer.AccX -16450.000000 +63:881.234 Sensors-Accelerometer.AccY 6384.000000 +63:881.760 Sensors-Accelerometer.AccZ 1178.000000 +63:920.690 Sensors-Accelerometer.AccX -17227.000000 +63:921.238 Sensors-Accelerometer.AccY 7810.000000 +63:921.764 Sensors-Accelerometer.AccZ 399.000000 +63:950.683 Sensors-Magnetometer.MagX 532.000000 +63:951.176 Sensors-Magnetometer.MagY -106.000000 +63:951.667 Sensors-Magnetometer.MagZ 319.000000 +63:960.690 Sensors-Accelerometer.AccX -16538.000000 +63:961.239 Sensors-Accelerometer.AccY 5910.000000 +63:961.768 Sensors-Accelerometer.AccZ 109.000000 +64:000.684 Sensors-Magnetometer.MagX 577.000000 +64:001.167 Sensors-Magnetometer.MagY -77.000000 +64:001.630 Sensors-Magnetometer.MagZ 210.000000 +64:002.145 Sensors-Accelerometer.AccX -13656.000000 +64:002.683 Sensors-Accelerometer.AccY 4795.000000 +64:003.201 Sensors-Accelerometer.AccZ 4841.000000 +64:040.690 Sensors-Accelerometer.AccX -13430.000000 +64:041.231 Sensors-Accelerometer.AccY 3868.000000 +64:041.747 Sensors-Accelerometer.AccZ 7202.000000 +64:050.684 Sensors-Magnetometer.MagX 584.000000 +64:051.172 Sensors-Magnetometer.MagY -71.000000 +64:051.642 Sensors-Magnetometer.MagZ 142.000000 +64:080.690 Sensors-Accelerometer.AccX -12760.000000 +64:081.232 Sensors-Accelerometer.AccY 4017.000000 +64:081.751 Sensors-Accelerometer.AccZ 7408.000000 +64:120.690 Sensors-Accelerometer.AccX -10723.000000 +64:121.239 Sensors-Accelerometer.AccY 2330.000000 +64:121.756 Sensors-Accelerometer.AccZ 8302.000000 +64:150.684 Sensors-Magnetometer.MagX 591.000000 +64:151.178 Sensors-Magnetometer.MagY -58.000000 +64:151.641 Sensors-Magnetometer.MagZ 66.000000 +64:160.690 Sensors-Accelerometer.AccX -10063.000000 +64:161.241 Sensors-Accelerometer.AccY 3481.000000 +64:161.760 Sensors-Accelerometer.AccZ 9929.000000 +64:200.683 Sensors-Magnetometer.MagX 585.000000 +64:201.175 Sensors-Magnetometer.MagY -6.000000 +64:201.615 Sensors-Magnetometer.MagZ -45.000000 +64:202.116 Sensors-Accelerometer.AccX -8874.000000 +64:202.636 Sensors-Accelerometer.AccY 4638.000000 +64:203.158 Sensors-Accelerometer.AccZ 10480.000000 +64:240.690 Sensors-Accelerometer.AccX -9471.000000 +64:241.213 Sensors-Accelerometer.AccY 2281.000000 +64:241.729 Sensors-Accelerometer.AccZ 11128.000000 +64:250.684 Sensors-Magnetometer.MagX 575.000000 +64:251.179 Sensors-Magnetometer.MagY 71.000000 +64:251.647 Sensors-Magnetometer.MagZ -132.000000 +64:280.690 Sensors-Accelerometer.AccX -11701.000000 +64:281.237 Sensors-Accelerometer.AccY -720.000000 +64:281.726 Sensors-Accelerometer.AccZ 14068.000000 +64:320.690 Sensors-Accelerometer.AccX -10458.000000 +64:321.231 Sensors-Accelerometer.AccY 459.000000 +64:321.721 Sensors-Accelerometer.AccZ 13955.000000 +64:360.690 Sensors-Accelerometer.AccX -10345.000000 +64:361.233 Sensors-Accelerometer.AccY 1076.000000 +64:361.744 Sensors-Accelerometer.AccZ 11286.000000 +64:400.725 Sensors-Accelerometer.AccX -11083.000000 +64:401.268 Sensors-Accelerometer.AccY 1973.000000 +64:401.784 Sensors-Accelerometer.AccZ 11228.000000 +64:440.690 Sensors-Accelerometer.AccX -8103.000000 +64:441.212 Sensors-Accelerometer.AccY 884.000000 +64:441.702 Sensors-Accelerometer.AccZ 14173.000000 +64:450.684 Sensors-Magnetometer.MagX 533.000000 +64:451.171 Sensors-Magnetometer.MagY 75.000000 +64:451.640 Sensors-Magnetometer.MagZ -223.000000 +64:480.690 Sensors-Accelerometer.AccX -6320.000000 +64:481.209 Sensors-Accelerometer.AccY 787.000000 +64:481.703 Sensors-Accelerometer.AccZ 16196.000000 +64:500.684 Sensors-Magnetometer.MagX 495.000000 +64:501.180 Sensors-Magnetometer.MagY 96.000000 +64:501.644 Sensors-Magnetometer.MagZ -318.000000 +64:520.690 Sensors-Accelerometer.AccX -3203.000000 +64:521.210 Sensors-Accelerometer.AccY 205.000000 +64:521.696 Sensors-Accelerometer.AccZ 14814.000000 +64:550.684 Sensors-Magnetometer.MagX 448.000000 +64:551.169 Sensors-Magnetometer.MagY 78.000000 +64:551.637 Sensors-Magnetometer.MagZ -374.000000 +64:560.691 Sensors-Accelerometer.AccX -3308.000000 +64:561.207 Sensors-Accelerometer.AccY 2483.000000 +64:561.727 Sensors-Accelerometer.AccZ 14176.000000 +64:600.684 Sensors-Magnetometer.MagX 401.000000 +64:601.173 Sensors-Magnetometer.MagY 81.000000 +64:601.640 Sensors-Magnetometer.MagZ -440.000000 +64:602.165 Sensors-Accelerometer.AccX 1452.000000 +64:602.682 Sensors-Accelerometer.AccY 2252.000000 +64:603.201 Sensors-Accelerometer.AccZ 14248.000000 +64:640.690 Sensors-Accelerometer.AccX -996.000000 +64:641.182 Sensors-Accelerometer.AccY 2520.000000 +64:641.695 Sensors-Accelerometer.AccZ 14497.000000 +64:680.690 Sensors-Accelerometer.AccX -151.000000 +64:681.183 Sensors-Accelerometer.AccY 1277.000000 +64:681.703 Sensors-Accelerometer.AccZ 15627.000000 +64:700.683 Sensors-Magnetometer.MagX 350.000000 +64:701.178 Sensors-Magnetometer.MagY 59.000000 +64:701.645 Sensors-Magnetometer.MagZ -472.000000 +64:720.690 Sensors-Accelerometer.AccX -455.000000 +64:721.182 Sensors-Accelerometer.AccY 1968.000000 +64:721.695 Sensors-Accelerometer.AccZ 15163.000000 +64:760.690 Sensors-Accelerometer.AccX -3389.000000 +64:761.208 Sensors-Accelerometer.AccY 2647.000000 +64:761.728 Sensors-Accelerometer.AccZ 14467.000000 +64:800.683 Sensors-Magnetometer.MagX 461.000000 +64:801.171 Sensors-Magnetometer.MagY -5.000000 +64:801.608 Sensors-Magnetometer.MagZ -362.000000 +64:802.131 Sensors-Accelerometer.AccX -7288.000000 +64:802.649 Sensors-Accelerometer.AccY 3922.000000 +64:803.167 Sensors-Accelerometer.AccZ 10839.000000 +64:840.690 Sensors-Accelerometer.AccX 1707.000000 +64:841.208 Sensors-Accelerometer.AccY 2292.000000 +64:841.725 Sensors-Accelerometer.AccZ 11339.000000 +64:850.683 Sensors-Magnetometer.MagX 516.000000 +64:851.174 Sensors-Magnetometer.MagY -37.000000 +64:851.640 Sensors-Magnetometer.MagZ -259.000000 +64:880.690 Sensors-Accelerometer.AccX -8125.000000 +64:881.213 Sensors-Accelerometer.AccY 2983.000000 +64:881.731 Sensors-Accelerometer.AccZ 12328.000000 +64:900.683 Sensors-Magnetometer.MagX 584.000000 +64:901.173 Sensors-Magnetometer.MagY -77.000000 +64:901.639 Sensors-Magnetometer.MagZ -97.000000 +64:920.690 Sensors-Accelerometer.AccX -9459.000000 +64:921.217 Sensors-Accelerometer.AccY 6774.000000 +64:921.738 Sensors-Accelerometer.AccZ 6557.000000 +64:950.684 Sensors-Magnetometer.MagX 597.000000 +64:951.178 Sensors-Magnetometer.MagY -101.000000 +64:951.670 Sensors-Magnetometer.MagZ 78.000000 +64:960.690 Sensors-Accelerometer.AccX -10253.000000 +64:961.232 Sensors-Accelerometer.AccY 7133.000000 +64:961.752 Sensors-Accelerometer.AccZ 5414.000000 +65:000.684 Sensors-Magnetometer.MagX 600.000000 +65:001.176 Sensors-Magnetometer.MagY -86.000000 +65:001.645 Sensors-Magnetometer.MagZ 191.000000 +65:002.174 Sensors-Accelerometer.AccX -12981.000000 +65:002.724 Sensors-Accelerometer.AccY 5432.000000 +65:003.243 Sensors-Accelerometer.AccZ 5224.000000 +65:040.690 Sensors-Accelerometer.AccX -18059.000000 +65:041.239 Sensors-Accelerometer.AccY 6879.000000 +65:041.763 Sensors-Accelerometer.AccZ 2578.000000 +65:050.684 Sensors-Magnetometer.MagX 568.000000 +65:051.174 Sensors-Magnetometer.MagY -60.000000 +65:051.641 Sensors-Magnetometer.MagZ 300.000000 +65:080.690 Sensors-Accelerometer.AccX -16768.000000 +65:081.233 Sensors-Accelerometer.AccY 1891.000000 +65:081.756 Sensors-Accelerometer.AccZ 978.000000 +65:100.684 Sensors-Magnetometer.MagX 548.000000 +65:101.177 Sensors-Magnetometer.MagY -16.000000 +65:101.636 Sensors-Magnetometer.MagZ 366.000000 +65:120.690 Sensors-Accelerometer.AccX -19699.000000 +65:121.242 Sensors-Accelerometer.AccY 4100.000000 +65:121.759 Sensors-Accelerometer.AccZ 2799.000000 +65:150.684 Sensors-Magnetometer.MagX 502.000000 +65:151.182 Sensors-Magnetometer.MagY 28.000000 +65:151.649 Sensors-Magnetometer.MagZ 425.000000 +65:160.690 Sensors-Accelerometer.AccX -18121.000000 +65:161.236 Sensors-Accelerometer.AccY 5209.000000 +65:161.761 Sensors-Accelerometer.AccZ -74.000000 +65:200.725 Sensors-Accelerometer.AccX -11497.000000 +65:201.272 Sensors-Accelerometer.AccY 4221.000000 +65:201.791 Sensors-Accelerometer.AccZ -84.000000 +65:240.690 Sensors-Accelerometer.AccX -17099.000000 +65:241.239 Sensors-Accelerometer.AccY 5692.000000 +65:241.764 Sensors-Accelerometer.AccZ -4987.000000 +65:250.684 Sensors-Magnetometer.MagX 455.000000 +65:251.179 Sensors-Magnetometer.MagY 67.000000 +65:251.649 Sensors-Magnetometer.MagZ 513.000000 +65:280.690 Sensors-Accelerometer.AccX -16249.000000 +65:281.236 Sensors-Accelerometer.AccY 2856.000000 +65:281.751 Sensors-Accelerometer.AccZ -1479.000000 +65:300.683 Sensors-Magnetometer.MagX 437.000000 +65:301.175 Sensors-Magnetometer.MagY 118.000000 +65:301.663 Sensors-Magnetometer.MagZ 543.000000 +65:320.690 Sensors-Accelerometer.AccX -15818.000000 +65:321.239 Sensors-Accelerometer.AccY 3517.000000 +65:321.762 Sensors-Accelerometer.AccZ -1969.000000 +65:360.690 Sensors-Accelerometer.AccX -16196.000000 +65:361.233 Sensors-Accelerometer.AccY 5072.000000 +65:361.754 Sensors-Accelerometer.AccZ -6605.000000 +65:400.683 Sensors-Magnetometer.MagX 367.000000 +65:401.184 Sensors-Magnetometer.MagY 155.000000 +65:401.680 Sensors-Magnetometer.MagZ 594.000000 +65:402.208 Sensors-Accelerometer.AccX -16208.000000 +65:402.753 Sensors-Accelerometer.AccY 3258.000000 +65:403.276 Sensors-Accelerometer.AccZ -4618.000000 +65:440.690 Sensors-Accelerometer.AccX -14230.000000 +65:441.239 Sensors-Accelerometer.AccY 3485.000000 +65:441.758 Sensors-Accelerometer.AccZ -5023.000000 +65:480.690 Sensors-Accelerometer.AccX -12105.000000 +65:481.239 Sensors-Accelerometer.AccY 3362.000000 +65:481.753 Sensors-Accelerometer.AccZ -5836.000000 +65:500.683 Sensors-Magnetometer.MagX 296.000000 +65:501.174 Sensors-Magnetometer.MagY 182.000000 +65:501.669 Sensors-Magnetometer.MagZ 664.000000 +65:520.690 Sensors-Accelerometer.AccX -13571.000000 +65:521.240 Sensors-Accelerometer.AccY 5377.000000 +65:521.761 Sensors-Accelerometer.AccZ -7632.000000 +65:550.683 Sensors-Magnetometer.MagX 248.000000 +65:551.168 Sensors-Magnetometer.MagY 248.000000 +65:551.654 Sensors-Magnetometer.MagZ 684.000000 +65:560.690 Sensors-Accelerometer.AccX -12834.000000 +65:561.229 Sensors-Accelerometer.AccY 627.000000 +65:561.723 Sensors-Accelerometer.AccZ -6817.000000 +65:600.683 Sensors-Magnetometer.MagX 170.000000 +65:601.161 Sensors-Magnetometer.MagY 321.000000 +65:601.647 Sensors-Magnetometer.MagZ 699.000000 +65:602.169 Sensors-Accelerometer.AccX -11433.000000 +65:602.709 Sensors-Accelerometer.AccY -1930.000000 +65:603.221 Sensors-Accelerometer.AccZ -9165.000000 +65:640.690 Sensors-Accelerometer.AccX -10916.000000 +65:641.223 Sensors-Accelerometer.AccY -3042.000000 +65:641.735 Sensors-Accelerometer.AccZ -10388.000000 +65:650.683 Sensors-Magnetometer.MagX 118.000000 +65:651.167 Sensors-Magnetometer.MagY 384.000000 +65:651.650 Sensors-Magnetometer.MagZ 698.000000 +65:680.690 Sensors-Accelerometer.AccX -10875.000000 +65:681.232 Sensors-Accelerometer.AccY -5009.000000 +65:681.749 Sensors-Accelerometer.AccZ -10327.000000 +65:720.690 Sensors-Accelerometer.AccX -11665.000000 +65:721.233 Sensors-Accelerometer.AccY -4737.000000 +65:721.751 Sensors-Accelerometer.AccZ -10807.000000 +65:760.690 Sensors-Accelerometer.AccX -12085.000000 +65:761.229 Sensors-Accelerometer.AccY -3883.000000 +65:761.753 Sensors-Accelerometer.AccZ -10467.000000 +65:800.683 Sensors-Magnetometer.MagX 67.000000 +65:801.146 Sensors-Magnetometer.MagY 408.000000 +65:801.633 Sensors-Magnetometer.MagZ 705.000000 +65:802.159 Sensors-Accelerometer.AccX -11587.000000 +65:802.702 Sensors-Accelerometer.AccY -2395.000000 +65:803.223 Sensors-Accelerometer.AccZ -10395.000000 +65:840.690 Sensors-Accelerometer.AccX -10433.000000 +65:841.237 Sensors-Accelerometer.AccY -2057.000000 +65:841.753 Sensors-Accelerometer.AccZ -10552.000000 +65:880.690 Sensors-Accelerometer.AccX -11929.000000 +65:881.234 Sensors-Accelerometer.AccY -1375.000000 +65:881.753 Sensors-Accelerometer.AccZ -10289.000000 +65:920.690 Sensors-Accelerometer.AccX -11996.000000 +65:921.233 Sensors-Accelerometer.AccY -1306.000000 +65:921.746 Sensors-Accelerometer.AccZ -9749.000000 +65:960.690 Sensors-Accelerometer.AccX -10014.000000 +65:961.234 Sensors-Accelerometer.AccY -1080.000000 +65:961.746 Sensors-Accelerometer.AccZ -10133.000000 +66:000.683 Sensors-Magnetometer.MagX 77.000000 +66:001.147 Sensors-Magnetometer.MagY 352.000000 +66:001.631 Sensors-Magnetometer.MagZ 725.000000 +66:002.154 Sensors-Accelerometer.AccX -10405.000000 +66:002.694 Sensors-Accelerometer.AccY -94.000000 +66:003.162 Sensors-Accelerometer.AccZ -10797.000000 +66:040.690 Sensors-Accelerometer.AccX -10441.000000 +66:041.236 Sensors-Accelerometer.AccY -366.000000 +66:041.730 Sensors-Accelerometer.AccZ -10570.000000 +66:080.690 Sensors-Accelerometer.AccX -11098.000000 +66:081.231 Sensors-Accelerometer.AccY 704.000000 +66:081.716 Sensors-Accelerometer.AccZ -10882.000000 +66:100.683 Sensors-Magnetometer.MagX 91.000000 +66:101.149 Sensors-Magnetometer.MagY 286.000000 +66:101.640 Sensors-Magnetometer.MagZ 756.000000 +66:120.690 Sensors-Accelerometer.AccX -11562.000000 +66:121.230 Sensors-Accelerometer.AccY 923.000000 +66:121.722 Sensors-Accelerometer.AccZ -11455.000000 +66:160.690 Sensors-Accelerometer.AccX -11540.000000 +66:161.228 Sensors-Accelerometer.AccY 704.000000 +66:161.714 Sensors-Accelerometer.AccZ -10901.000000 +66:200.725 Sensors-Accelerometer.AccX -10264.000000 +66:201.266 Sensors-Accelerometer.AccY 2283.000000 +66:201.789 Sensors-Accelerometer.AccZ -11496.000000 +66:240.690 Sensors-Accelerometer.AccX -10739.000000 +66:241.232 Sensors-Accelerometer.AccY 2191.000000 +66:241.752 Sensors-Accelerometer.AccZ -11820.000000 +66:250.683 Sensors-Magnetometer.MagX 81.000000 +66:251.148 Sensors-Magnetometer.MagY 247.000000 +66:251.640 Sensors-Magnetometer.MagZ 770.000000 +66:280.690 Sensors-Accelerometer.AccX -10191.000000 +66:281.238 Sensors-Accelerometer.AccY 2805.000000 +66:281.753 Sensors-Accelerometer.AccZ -11578.000000 +66:320.690 Sensors-Accelerometer.AccX -10798.000000 +66:321.234 Sensors-Accelerometer.AccY 2649.000000 +66:321.751 Sensors-Accelerometer.AccZ -11267.000000 +66:360.690 Sensors-Accelerometer.AccX -10237.000000 +66:361.236 Sensors-Accelerometer.AccY 2700.000000 +66:361.755 Sensors-Accelerometer.AccZ -11225.000000 +66:400.725 Sensors-Accelerometer.AccX -9679.000000 +66:401.249 Sensors-Accelerometer.AccY 2044.000000 +66:401.767 Sensors-Accelerometer.AccZ -11085.000000 +66:440.690 Sensors-Accelerometer.AccX -8412.000000 +66:441.206 Sensors-Accelerometer.AccY 1429.000000 +66:441.720 Sensors-Accelerometer.AccZ -11428.000000 +66:450.684 Sensors-Magnetometer.MagX 56.000000 +66:451.146 Sensors-Magnetometer.MagY 341.000000 +66:451.633 Sensors-Magnetometer.MagZ 743.000000 +66:480.690 Sensors-Accelerometer.AccX -9332.000000 +66:481.211 Sensors-Accelerometer.AccY -1553.000000 +66:481.728 Sensors-Accelerometer.AccZ -10518.000000 +66:500.683 Sensors-Magnetometer.MagX 26.000000 +66:501.146 Sensors-Magnetometer.MagY 402.000000 +66:501.636 Sensors-Magnetometer.MagZ 726.000000 +66:520.690 Sensors-Accelerometer.AccX -12233.000000 +66:521.237 Sensors-Accelerometer.AccY -2612.000000 +66:521.755 Sensors-Accelerometer.AccZ -11169.000000 +66:560.690 Sensors-Accelerometer.AccX -11920.000000 +66:561.224 Sensors-Accelerometer.AccY -3513.000000 +66:561.737 Sensors-Accelerometer.AccZ -11780.000000 +66:600.683 Sensors-Magnetometer.MagX 13.000000 +66:601.144 Sensors-Magnetometer.MagY 471.000000 +66:601.637 Sensors-Magnetometer.MagZ 686.000000 +66:602.161 Sensors-Accelerometer.AccX -13166.000000 +66:602.704 Sensors-Accelerometer.AccY -3265.000000 +66:603.223 Sensors-Accelerometer.AccZ -11969.000000 +66:640.690 Sensors-Accelerometer.AccX -11118.000000 +66:641.234 Sensors-Accelerometer.AccY -2953.000000 +66:641.752 Sensors-Accelerometer.AccZ -12129.000000 +66:680.690 Sensors-Accelerometer.AccX -11253.000000 +66:681.236 Sensors-Accelerometer.AccY -2100.000000 +66:681.747 Sensors-Accelerometer.AccZ -10943.000000 +66:720.690 Sensors-Accelerometer.AccX -10260.000000 +66:721.228 Sensors-Accelerometer.AccY -1968.000000 +66:721.741 Sensors-Accelerometer.AccZ -11381.000000 +66:760.690 Sensors-Accelerometer.AccX -10201.000000 +66:761.239 Sensors-Accelerometer.AccY -1235.000000 +66:761.760 Sensors-Accelerometer.AccZ -11576.000000 +66:800.725 Sensors-Accelerometer.AccX -8590.000000 +66:801.246 Sensors-Accelerometer.AccY -1115.000000 +66:801.764 Sensors-Accelerometer.AccZ -11603.000000 +66:880.690 Sensors-Accelerometer.AccX -10675.000000 +66:881.231 Sensors-Accelerometer.AccY -424.000000 +66:881.715 Sensors-Accelerometer.AccZ -10657.000000 +66:900.683 Sensors-Magnetometer.MagX -1.000000 +66:901.116 Sensors-Magnetometer.MagY 415.000000 +66:901.609 Sensors-Magnetometer.MagZ 718.000000 +66:920.690 Sensors-Accelerometer.AccX -9889.000000 +66:921.212 Sensors-Accelerometer.AccY -1292.000000 +66:921.727 Sensors-Accelerometer.AccZ -11772.000000 +66:960.690 Sensors-Accelerometer.AccX -11517.000000 +66:961.237 Sensors-Accelerometer.AccY -2509.000000 +66:961.757 Sensors-Accelerometer.AccZ -11789.000000 +67:000.725 Sensors-Accelerometer.AccX -11348.000000 +67:001.267 Sensors-Accelerometer.AccY -1893.000000 +67:001.787 Sensors-Accelerometer.AccZ -12155.000000 +67:040.690 Sensors-Accelerometer.AccX -9330.000000 +67:041.213 Sensors-Accelerometer.AccY -1474.000000 +67:041.731 Sensors-Accelerometer.AccZ -12143.000000 +67:080.690 Sensors-Accelerometer.AccX -10646.000000 +67:081.235 Sensors-Accelerometer.AccY -1443.000000 +67:081.754 Sensors-Accelerometer.AccZ -11547.000000 +67:120.690 Sensors-Accelerometer.AccX -9139.000000 +67:121.216 Sensors-Accelerometer.AccY -1629.000000 +67:121.735 Sensors-Accelerometer.AccZ -11986.000000 +67:160.690 Sensors-Accelerometer.AccX -9659.000000 +67:161.218 Sensors-Accelerometer.AccY -888.000000 +67:161.714 Sensors-Accelerometer.AccZ -11595.000000 +67:200.683 Sensors-Magnetometer.MagX -66.000000 +67:201.139 Sensors-Magnetometer.MagY 431.000000 +67:201.626 Sensors-Magnetometer.MagZ 722.000000 +67:202.147 Sensors-Accelerometer.AccX -8929.000000 +67:202.667 Sensors-Accelerometer.AccY -1387.000000 +67:203.180 Sensors-Accelerometer.AccZ -12377.000000 +67:240.690 Sensors-Accelerometer.AccX -9944.000000 +67:241.211 Sensors-Accelerometer.AccY -1273.000000 +67:241.728 Sensors-Accelerometer.AccZ -12157.000000 +67:280.690 Sensors-Accelerometer.AccX -7783.000000 +67:281.210 Sensors-Accelerometer.AccY -1527.000000 +67:281.726 Sensors-Accelerometer.AccZ -12835.000000 +67:300.683 Sensors-Magnetometer.MagX -128.000000 +67:301.162 Sensors-Magnetometer.MagY 454.000000 +67:301.655 Sensors-Magnetometer.MagZ 714.000000 +67:360.690 Sensors-Accelerometer.AccX -9438.000000 +67:361.210 Sensors-Accelerometer.AccY -3319.000000 +67:361.728 Sensors-Accelerometer.AccZ -12469.000000 +67:400.683 Sensors-Magnetometer.MagX -185.000000 +67:401.170 Sensors-Magnetometer.MagY 484.000000 +67:401.658 Sensors-Magnetometer.MagZ 704.000000 +67:402.180 Sensors-Accelerometer.AccX -7849.000000 +67:402.703 Sensors-Accelerometer.AccY -3365.000000 +67:403.219 Sensors-Accelerometer.AccZ -13253.000000 +67:440.690 Sensors-Accelerometer.AccX -6751.000000 +67:441.210 Sensors-Accelerometer.AccY -3757.000000 +67:441.732 Sensors-Accelerometer.AccZ -13185.000000 +67:480.690 Sensors-Accelerometer.AccX -7165.000000 +67:481.217 Sensors-Accelerometer.AccY -4477.000000 +67:481.741 Sensors-Accelerometer.AccZ -12858.000000 +67:520.690 Sensors-Accelerometer.AccX -7242.000000 +67:521.206 Sensors-Accelerometer.AccY -5330.000000 +67:521.723 Sensors-Accelerometer.AccZ -12929.000000 +67:550.683 Sensors-Magnetometer.MagX -254.000000 +67:551.176 Sensors-Magnetometer.MagY 522.000000 +67:551.670 Sensors-Magnetometer.MagZ 671.000000 +67:560.690 Sensors-Accelerometer.AccX -7015.000000 +67:561.213 Sensors-Accelerometer.AccY -5565.000000 +67:561.735 Sensors-Accelerometer.AccZ -13186.000000 +67:600.725 Sensors-Accelerometer.AccX -5555.000000 +67:601.245 Sensors-Accelerometer.AccY -6304.000000 +67:601.758 Sensors-Accelerometer.AccZ -13493.000000 +67:640.690 Sensors-Accelerometer.AccX -5883.000000 +67:641.212 Sensors-Accelerometer.AccY -6455.000000 +67:641.736 Sensors-Accelerometer.AccZ -13082.000000 +67:680.690 Sensors-Accelerometer.AccX -5484.000000 +67:681.209 Sensors-Accelerometer.AccY -6795.000000 +67:681.730 Sensors-Accelerometer.AccZ -13161.000000 +67:700.683 Sensors-Magnetometer.MagX -308.000000 +67:701.174 Sensors-Magnetometer.MagY 541.000000 +67:701.663 Sensors-Magnetometer.MagZ 661.000000 +67:760.690 Sensors-Accelerometer.AccX -4363.000000 +67:761.210 Sensors-Accelerometer.AccY -6347.000000 +67:761.737 Sensors-Accelerometer.AccZ -13034.000000 +67:800.725 Sensors-Accelerometer.AccX -5549.000000 +67:801.248 Sensors-Accelerometer.AccY -6693.000000 +67:801.770 Sensors-Accelerometer.AccZ -12851.000000 +67:840.690 Sensors-Accelerometer.AccX -5339.000000 +67:841.209 Sensors-Accelerometer.AccY -6630.000000 +67:841.727 Sensors-Accelerometer.AccZ -12849.000000 +67:880.690 Sensors-Accelerometer.AccX -4312.000000 +67:881.209 Sensors-Accelerometer.AccY -6224.000000 +67:881.727 Sensors-Accelerometer.AccZ -13154.000000 +67:920.690 Sensors-Accelerometer.AccX -4920.000000 +67:921.207 Sensors-Accelerometer.AccY -6813.000000 +67:921.727 Sensors-Accelerometer.AccZ -13049.000000 +67:960.690 Sensors-Accelerometer.AccX -4630.000000 +67:961.213 Sensors-Accelerometer.AccY -6595.000000 +67:961.736 Sensors-Accelerometer.AccZ -13106.000000 +68:040.690 Sensors-Accelerometer.AccX -4671.000000 +68:041.213 Sensors-Accelerometer.AccY -6691.000000 +68:041.737 Sensors-Accelerometer.AccZ -13321.000000 +68:080.690 Sensors-Accelerometer.AccX -4750.000000 +68:081.214 Sensors-Accelerometer.AccY -6359.000000 +68:081.739 Sensors-Accelerometer.AccZ -13296.000000 +68:120.690 Sensors-Accelerometer.AccX -4450.000000 +68:121.209 Sensors-Accelerometer.AccY -6392.000000 +68:121.731 Sensors-Accelerometer.AccZ -13452.000000 +68:160.690 Sensors-Accelerometer.AccX -4775.000000 +68:161.208 Sensors-Accelerometer.AccY -6359.000000 +68:161.730 Sensors-Accelerometer.AccZ -13277.000000 +68:200.725 Sensors-Accelerometer.AccX -4429.000000 +68:201.241 Sensors-Accelerometer.AccY -6603.000000 +68:201.760 Sensors-Accelerometer.AccZ -13320.000000 +68:240.690 Sensors-Accelerometer.AccX -4517.000000 +68:241.207 Sensors-Accelerometer.AccY -6703.000000 +68:241.733 Sensors-Accelerometer.AccZ -13013.000000 +68:280.690 Sensors-Accelerometer.AccX -4170.000000 +68:281.207 Sensors-Accelerometer.AccY -6754.000000 +68:281.723 Sensors-Accelerometer.AccZ -13248.000000 +68:320.690 Sensors-Accelerometer.AccX -4429.000000 +68:321.209 Sensors-Accelerometer.AccY -6741.000000 +68:321.727 Sensors-Accelerometer.AccZ -13285.000000 +68:360.690 Sensors-Accelerometer.AccX -4685.000000 +68:361.214 Sensors-Accelerometer.AccY -6894.000000 +68:361.734 Sensors-Accelerometer.AccZ -13311.000000 +68:400.725 Sensors-Accelerometer.AccX -4118.000000 +68:401.245 Sensors-Accelerometer.AccY -6514.000000 +68:401.769 Sensors-Accelerometer.AccZ -13482.000000 +68:480.690 Sensors-Accelerometer.AccX -4376.000000 +68:481.207 Sensors-Accelerometer.AccY -6564.000000 +68:481.721 Sensors-Accelerometer.AccZ -13372.000000 +68:550.683 Sensors-Magnetometer.MagX -361.000000 +68:551.174 Sensors-Magnetometer.MagY 506.000000 +68:551.667 Sensors-Magnetometer.MagZ 681.000000 +68:560.691 Sensors-Accelerometer.AccX -4318.000000 +68:561.214 Sensors-Accelerometer.AccY -6802.000000 +68:561.731 Sensors-Accelerometer.AccZ -13334.000000 +68:600.725 Sensors-Accelerometer.AccX -4112.000000 +68:601.241 Sensors-Accelerometer.AccY -6599.000000 +68:601.766 Sensors-Accelerometer.AccZ -13272.000000 +68:680.690 Sensors-Accelerometer.AccX -4250.000000 +68:681.207 Sensors-Accelerometer.AccY -6451.000000 +68:681.733 Sensors-Accelerometer.AccZ -13397.000000 +68:700.683 Sensors-Magnetometer.MagX -344.000000 +68:701.174 Sensors-Magnetometer.MagY 491.000000 +68:701.675 Sensors-Magnetometer.MagZ 690.000000 +68:720.690 Sensors-Accelerometer.AccX -4917.000000 +68:721.210 Sensors-Accelerometer.AccY -6331.000000 +68:721.735 Sensors-Accelerometer.AccZ -13886.000000 +68:760.690 Sensors-Accelerometer.AccX -4979.000000 +68:761.220 Sensors-Accelerometer.AccY -6167.000000 +68:761.745 Sensors-Accelerometer.AccZ -13344.000000 +68:800.725 Sensors-Accelerometer.AccX -4467.000000 +68:801.246 Sensors-Accelerometer.AccY -5404.000000 +68:801.766 Sensors-Accelerometer.AccZ -13572.000000 +68:840.690 Sensors-Accelerometer.AccX -4544.000000 +68:841.203 Sensors-Accelerometer.AccY -5983.000000 +68:841.725 Sensors-Accelerometer.AccZ -13094.000000 +68:880.690 Sensors-Accelerometer.AccX -4854.000000 +68:881.209 Sensors-Accelerometer.AccY -5998.000000 +68:881.729 Sensors-Accelerometer.AccZ -13520.000000 +68:920.690 Sensors-Accelerometer.AccX -4875.000000 +68:921.213 Sensors-Accelerometer.AccY -6133.000000 +68:921.738 Sensors-Accelerometer.AccZ -13272.000000 +69:000.725 Sensors-Accelerometer.AccX -4108.000000 +69:001.243 Sensors-Accelerometer.AccY -6065.000000 +69:001.765 Sensors-Accelerometer.AccZ -13824.000000 +69:040.690 Sensors-Accelerometer.AccX -4967.000000 +69:041.212 Sensors-Accelerometer.AccY -6506.000000 +69:041.734 Sensors-Accelerometer.AccZ -13061.000000 +69:080.690 Sensors-Accelerometer.AccX -5089.000000 +69:081.213 Sensors-Accelerometer.AccY -6296.000000 +69:081.735 Sensors-Accelerometer.AccZ -13125.000000 +69:120.690 Sensors-Accelerometer.AccX -5019.000000 +69:121.212 Sensors-Accelerometer.AccY -6166.000000 +69:121.730 Sensors-Accelerometer.AccZ -13463.000000 +69:160.690 Sensors-Accelerometer.AccX -5188.000000 +69:161.208 Sensors-Accelerometer.AccY -6559.000000 +69:161.726 Sensors-Accelerometer.AccZ -13360.000000 +69:240.690 Sensors-Accelerometer.AccX -5360.000000 +69:241.209 Sensors-Accelerometer.AccY -6443.000000 +69:241.735 Sensors-Accelerometer.AccZ -13094.000000 +69:280.690 Sensors-Accelerometer.AccX -4881.000000 +69:281.209 Sensors-Accelerometer.AccY -6468.000000 +69:281.727 Sensors-Accelerometer.AccZ -13141.000000 +69:320.690 Sensors-Accelerometer.AccX -4569.000000 +69:321.215 Sensors-Accelerometer.AccY -6620.000000 +69:321.734 Sensors-Accelerometer.AccZ -13131.000000 +69:360.690 Sensors-Accelerometer.AccX -4969.000000 +69:361.211 Sensors-Accelerometer.AccY -6561.000000 +69:361.729 Sensors-Accelerometer.AccZ -12815.000000 +69:400.725 Sensors-Accelerometer.AccX -4843.000000 +69:401.254 Sensors-Accelerometer.AccY -6391.000000 +69:401.783 Sensors-Accelerometer.AccZ -13019.000000 +69:480.690 Sensors-Accelerometer.AccX -5339.000000 +69:481.213 Sensors-Accelerometer.AccY -6584.000000 +69:481.731 Sensors-Accelerometer.AccZ -13181.000000 +69:560.690 Sensors-Accelerometer.AccX -5176.000000 +69:561.213 Sensors-Accelerometer.AccY -6211.000000 +69:561.740 Sensors-Accelerometer.AccZ -12949.000000 +69:600.725 Sensors-Accelerometer.AccX -5111.000000 +69:601.254 Sensors-Accelerometer.AccY -6997.000000 +69:601.777 Sensors-Accelerometer.AccZ -13174.000000 +69:640.690 Sensors-Accelerometer.AccX -5038.000000 +69:641.212 Sensors-Accelerometer.AccY -6576.000000 +69:641.725 Sensors-Accelerometer.AccZ -13104.000000 +69:680.690 Sensors-Accelerometer.AccX -5249.000000 +69:681.205 Sensors-Accelerometer.AccY -6673.000000 +69:681.724 Sensors-Accelerometer.AccZ -12798.000000 +69:760.690 Sensors-Accelerometer.AccX -5541.000000 +69:761.207 Sensors-Accelerometer.AccY -6662.000000 +69:761.726 Sensors-Accelerometer.AccZ -12831.000000 +69:800.725 Sensors-Accelerometer.AccX -5581.000000 +69:801.244 Sensors-Accelerometer.AccY -6335.000000 +69:801.768 Sensors-Accelerometer.AccZ -13088.000000 +69:840.690 Sensors-Accelerometer.AccX -5967.000000 +69:841.213 Sensors-Accelerometer.AccY -6591.000000 +69:841.733 Sensors-Accelerometer.AccZ -12762.000000 +69:880.690 Sensors-Accelerometer.AccX -5685.000000 +69:881.213 Sensors-Accelerometer.AccY -6824.000000 +69:881.726 Sensors-Accelerometer.AccZ -13116.000000 +69:920.690 Sensors-Accelerometer.AccX -5441.000000 +69:921.208 Sensors-Accelerometer.AccY -7070.000000 +69:921.731 Sensors-Accelerometer.AccZ -12825.000000 +69:960.690 Sensors-Accelerometer.AccX -5520.000000 +69:961.206 Sensors-Accelerometer.AccY -6373.000000 +69:961.732 Sensors-Accelerometer.AccZ -12656.000000 +70:080.690 Sensors-Accelerometer.AccX -5653.000000 +70:081.209 Sensors-Accelerometer.AccY -6593.000000 +70:081.729 Sensors-Accelerometer.AccZ -12713.000000 +70:100.683 Sensors-Magnetometer.MagX -292.000000 +70:101.174 Sensors-Magnetometer.MagY 461.000000 +70:101.668 Sensors-Magnetometer.MagZ 686.000000 +70:120.690 Sensors-Accelerometer.AccX -5388.000000 +70:121.212 Sensors-Accelerometer.AccY -6936.000000 +70:121.735 Sensors-Accelerometer.AccZ -13012.000000 +70:160.690 Sensors-Accelerometer.AccX -5569.000000 +70:161.212 Sensors-Accelerometer.AccY -6720.000000 +70:161.722 Sensors-Accelerometer.AccZ -12650.000000 +70:200.725 Sensors-Accelerometer.AccX -5456.000000 +70:201.238 Sensors-Accelerometer.AccY -7095.000000 +70:201.764 Sensors-Accelerometer.AccZ -12465.000000 +70:240.690 Sensors-Accelerometer.AccX -5409.000000 +70:241.211 Sensors-Accelerometer.AccY -6556.000000 +70:241.730 Sensors-Accelerometer.AccZ -12697.000000 +70:280.690 Sensors-Accelerometer.AccX -5701.000000 +70:281.217 Sensors-Accelerometer.AccY -6543.000000 +70:281.749 Sensors-Accelerometer.AccZ -12661.000000 +70:320.690 Sensors-Accelerometer.AccX -5736.000000 +70:321.209 Sensors-Accelerometer.AccY -6723.000000 +70:321.731 Sensors-Accelerometer.AccZ -12931.000000 +70:360.690 Sensors-Accelerometer.AccX -5758.000000 +70:361.217 Sensors-Accelerometer.AccY -6681.000000 +70:361.744 Sensors-Accelerometer.AccZ -12543.000000 +70:400.725 Sensors-Accelerometer.AccX -5520.000000 +70:401.238 Sensors-Accelerometer.AccY -6710.000000 +70:401.764 Sensors-Accelerometer.AccZ -12669.000000 +70:440.690 Sensors-Accelerometer.AccX -5294.000000 +70:441.213 Sensors-Accelerometer.AccY -7102.000000 +70:441.738 Sensors-Accelerometer.AccZ -13051.000000 +70:480.690 Sensors-Accelerometer.AccX -5541.000000 +70:481.209 Sensors-Accelerometer.AccY -6994.000000 +70:481.729 Sensors-Accelerometer.AccZ -12795.000000 +70:520.690 Sensors-Accelerometer.AccX -5612.000000 +70:521.211 Sensors-Accelerometer.AccY -6427.000000 +70:521.734 Sensors-Accelerometer.AccZ -12632.000000 +70:560.690 Sensors-Accelerometer.AccX -5479.000000 +70:561.208 Sensors-Accelerometer.AccY -6798.000000 +70:561.730 Sensors-Accelerometer.AccZ -12781.000000 +70:640.690 Sensors-Accelerometer.AccX -5409.000000 +70:641.209 Sensors-Accelerometer.AccY -6468.000000 +70:641.729 Sensors-Accelerometer.AccZ -12521.000000 +70:680.690 Sensors-Accelerometer.AccX -5784.000000 +70:681.209 Sensors-Accelerometer.AccY -6878.000000 +70:681.738 Sensors-Accelerometer.AccZ -12584.000000 +70:720.690 Sensors-Accelerometer.AccX -5447.000000 +70:721.212 Sensors-Accelerometer.AccY -7020.000000 +70:721.736 Sensors-Accelerometer.AccZ -13022.000000 +70:760.690 Sensors-Accelerometer.AccX -5712.000000 +70:761.209 Sensors-Accelerometer.AccY -6806.000000 +70:761.728 Sensors-Accelerometer.AccZ -12787.000000 +70:840.690 Sensors-Accelerometer.AccX -5667.000000 +70:841.214 Sensors-Accelerometer.AccY -7435.000000 +70:841.740 Sensors-Accelerometer.AccZ -12453.000000 +70:880.690 Sensors-Accelerometer.AccX -5478.000000 +70:881.212 Sensors-Accelerometer.AccY -6536.000000 +70:881.732 Sensors-Accelerometer.AccZ -12395.000000 +70:920.690 Sensors-Accelerometer.AccX -5682.000000 +70:921.210 Sensors-Accelerometer.AccY -6571.000000 +70:921.733 Sensors-Accelerometer.AccZ -12394.000000 +70:960.690 Sensors-Accelerometer.AccX -5546.000000 +70:961.208 Sensors-Accelerometer.AccY -6764.000000 +70:961.725 Sensors-Accelerometer.AccZ -12679.000000 +71:040.690 Sensors-Accelerometer.AccX -5791.000000 +71:041.212 Sensors-Accelerometer.AccY -6677.000000 +71:041.732 Sensors-Accelerometer.AccZ -12865.000000 +71:050.601 Sync Key pressed +71:050.903 Sync Key pressed +71:080.690 Sensors-Accelerometer.AccX -5709.000000 +71:081.215 Sensors-Accelerometer.AccY -6807.000000 +71:081.738 Sensors-Accelerometer.AccZ -13090.000000 +71:120.690 Sensors-Accelerometer.AccX -6294.000000 +71:121.212 Sensors-Accelerometer.AccY -7569.000000 +71:121.737 Sensors-Accelerometer.AccZ -12666.000000 +71:150.683 Sensors-Magnetometer.MagX -273.000000 +71:151.174 Sensors-Magnetometer.MagY 447.000000 +71:151.671 Sensors-Magnetometer.MagZ 699.000000 +71:160.690 Sensors-Accelerometer.AccX -5639.000000 +71:161.216 Sensors-Accelerometer.AccY -5745.000000 +71:161.741 Sensors-Accelerometer.AccZ -12440.000000 +71:200.725 Sensors-Accelerometer.AccX -6322.000000 +71:201.248 Sensors-Accelerometer.AccY -6197.000000 +71:201.773 Sensors-Accelerometer.AccZ -12480.000000 +71:240.690 Sensors-Accelerometer.AccX -6027.000000 +71:241.220 Sensors-Accelerometer.AccY -6514.000000 +71:241.744 Sensors-Accelerometer.AccZ -12842.000000 +71:280.690 Sensors-Accelerometer.AccX -6105.000000 +71:281.214 Sensors-Accelerometer.AccY -6360.000000 +71:281.735 Sensors-Accelerometer.AccZ -12470.000000 +71:320.690 Sensors-Accelerometer.AccX -6198.000000 +71:321.218 Sensors-Accelerometer.AccY -5622.000000 +71:321.743 Sensors-Accelerometer.AccZ -12528.000000 +71:360.690 Sensors-Accelerometer.AccX -6014.000000 +71:361.215 Sensors-Accelerometer.AccY -6151.000000 +71:361.740 Sensors-Accelerometer.AccZ -12289.000000 +71:400.725 Sensors-Accelerometer.AccX -6168.000000 +71:401.248 Sensors-Accelerometer.AccY -5863.000000 +71:401.776 Sensors-Accelerometer.AccZ -12395.000000 +71:440.690 Sensors-Accelerometer.AccX -6455.000000 +71:441.215 Sensors-Accelerometer.AccY -6296.000000 +71:441.736 Sensors-Accelerometer.AccZ -12351.000000 +71:480.690 Sensors-Accelerometer.AccX -6314.000000 +71:481.212 Sensors-Accelerometer.AccY -6194.000000 +71:481.736 Sensors-Accelerometer.AccZ -12691.000000 +71:520.690 Sensors-Accelerometer.AccX -6739.000000 +71:521.211 Sensors-Accelerometer.AccY -6584.000000 +71:521.733 Sensors-Accelerometer.AccZ -12424.000000 +71:560.690 Sensors-Accelerometer.AccX -6718.000000 +71:561.211 Sensors-Accelerometer.AccY -6251.000000 +71:561.739 Sensors-Accelerometer.AccZ -11927.000000 +71:594.272 Sync Key pressed +71:594.579 Sync Key pressed +71:600.725 Sensors-Accelerometer.AccX -6260.000000 +71:601.246 Sensors-Accelerometer.AccY -6543.000000 +71:601.778 Sensors-Accelerometer.AccZ -12984.000000 +71:640.690 Sensors-Accelerometer.AccX -6444.000000 +71:641.215 Sensors-Accelerometer.AccY -7398.000000 +71:641.741 Sensors-Accelerometer.AccZ -12582.000000 +71:680.690 Sensors-Accelerometer.AccX -6015.000000 +71:681.212 Sensors-Accelerometer.AccY -6376.000000 +71:681.727 Sensors-Accelerometer.AccZ -12268.000000 +71:720.690 Sensors-Accelerometer.AccX -6726.000000 +71:721.209 Sensors-Accelerometer.AccY -6616.000000 +71:721.727 Sensors-Accelerometer.AccZ -11530.000000 +71:760.690 Sensors-Accelerometer.AccX -6034.000000 +71:761.214 Sensors-Accelerometer.AccY -6722.000000 +71:761.730 Sensors-Accelerometer.AccZ -12306.000000 +71:800.725 Sensors-Accelerometer.AccX -5771.000000 +71:801.249 Sensors-Accelerometer.AccY -6550.000000 +71:801.778 Sensors-Accelerometer.AccZ -12753.000000 +71:840.690 Sensors-Accelerometer.AccX -6641.000000 +71:841.211 Sensors-Accelerometer.AccY -7309.000000 +71:841.735 Sensors-Accelerometer.AccZ -12541.000000 +71:880.690 Sensors-Accelerometer.AccX -6882.000000 +71:881.207 Sensors-Accelerometer.AccY -7446.000000 +71:881.732 Sensors-Accelerometer.AccZ -12601.000000 +71:920.690 Sensors-Accelerometer.AccX -6268.000000 +71:921.215 Sensors-Accelerometer.AccY -6830.000000 +71:921.740 Sensors-Accelerometer.AccZ -12157.000000 +71:960.690 Sensors-Accelerometer.AccX -5602.000000 +71:961.214 Sensors-Accelerometer.AccY -6401.000000 +71:961.736 Sensors-Accelerometer.AccZ -12136.000000 +72:080.690 Sensors-Accelerometer.AccX -5856.000000 +72:081.210 Sensors-Accelerometer.AccY -6906.000000 +72:081.731 Sensors-Accelerometer.AccZ -12887.000000 +72:120.690 Sensors-Accelerometer.AccX -6040.000000 +72:121.208 Sensors-Accelerometer.AccY -7284.000000 +72:121.726 Sensors-Accelerometer.AccZ -12755.000000 +72:160.690 Sensors-Accelerometer.AccX -6115.000000 +72:161.217 Sensors-Accelerometer.AccY -7153.000000 +72:161.740 Sensors-Accelerometer.AccZ -12521.000000 +72:200.725 Sensors-Accelerometer.AccX -5614.000000 +72:201.244 Sensors-Accelerometer.AccY -6790.000000 +72:201.763 Sensors-Accelerometer.AccZ -12542.000000 +72:240.690 Sensors-Accelerometer.AccX -6091.000000 +72:241.213 Sensors-Accelerometer.AccY -6641.000000 +72:241.734 Sensors-Accelerometer.AccZ -12198.000000 +72:280.690 Sensors-Accelerometer.AccX -5773.000000 +72:281.210 Sensors-Accelerometer.AccY -6497.000000 +72:281.734 Sensors-Accelerometer.AccZ -12325.000000 +72:320.690 Sensors-Accelerometer.AccX -5661.000000 +72:321.208 Sensors-Accelerometer.AccY -6762.000000 +72:321.724 Sensors-Accelerometer.AccZ -12526.000000 +72:360.690 Sensors-Accelerometer.AccX -5506.000000 +72:361.208 Sensors-Accelerometer.AccY -7013.000000 +72:361.730 Sensors-Accelerometer.AccZ -12646.000000 +72:440.690 Sensors-Accelerometer.AccX -5708.000000 +72:441.213 Sensors-Accelerometer.AccY -7001.000000 +72:441.738 Sensors-Accelerometer.AccZ -12669.000000 +72:480.690 Sensors-Accelerometer.AccX -5420.000000 +72:481.208 Sensors-Accelerometer.AccY -6860.000000 +72:481.728 Sensors-Accelerometer.AccZ -12709.000000 +72:520.690 Sensors-Accelerometer.AccX -5652.000000 +72:521.209 Sensors-Accelerometer.AccY -6972.000000 +72:521.730 Sensors-Accelerometer.AccZ -12545.000000 +72:600.725 Sensors-Accelerometer.AccX -5702.000000 +72:601.250 Sensors-Accelerometer.AccY -6715.000000 +72:601.774 Sensors-Accelerometer.AccZ -12666.000000 +72:640.690 Sensors-Accelerometer.AccX -6275.000000 +72:641.219 Sensors-Accelerometer.AccY -6619.000000 +72:641.746 Sensors-Accelerometer.AccZ -12523.000000 +72:680.690 Sensors-Accelerometer.AccX -6374.000000 +72:681.220 Sensors-Accelerometer.AccY -6587.000000 +72:681.742 Sensors-Accelerometer.AccZ -12843.000000 +72:720.690 Sensors-Accelerometer.AccX -6214.000000 +72:721.215 Sensors-Accelerometer.AccY -6370.000000 +72:721.741 Sensors-Accelerometer.AccZ -13099.000000 +72:760.690 Sensors-Accelerometer.AccX -7141.000000 +72:761.213 Sensors-Accelerometer.AccY -6078.000000 +72:761.741 Sensors-Accelerometer.AccZ -12765.000000 +72:800.683 Sensors-Magnetometer.MagX -199.000000 +72:801.176 Sensors-Magnetometer.MagY 437.000000 +72:801.670 Sensors-Magnetometer.MagZ 738.000000 +72:802.196 Sensors-Accelerometer.AccX -6721.000000 +72:802.714 Sensors-Accelerometer.AccY -5292.000000 +72:803.238 Sensors-Accelerometer.AccZ -12847.000000 +72:840.690 Sensors-Accelerometer.AccX -7294.000000 +72:841.215 Sensors-Accelerometer.AccY -5261.000000 +72:841.734 Sensors-Accelerometer.AccZ -12760.000000 +72:880.690 Sensors-Accelerometer.AccX -8713.000000 +72:881.216 Sensors-Accelerometer.AccY -4461.000000 +72:881.738 Sensors-Accelerometer.AccZ -12132.000000 +72:900.683 Sensors-Magnetometer.MagX -98.000000 +72:901.153 Sensors-Magnetometer.MagY 394.000000 +72:901.646 Sensors-Magnetometer.MagZ 753.000000 +72:920.690 Sensors-Accelerometer.AccX -9478.000000 +72:921.216 Sensors-Accelerometer.AccY -3595.000000 +72:921.740 Sensors-Accelerometer.AccZ -12003.000000 +72:950.683 Sensors-Magnetometer.MagX -32.000000 +72:951.144 Sensors-Magnetometer.MagY 346.000000 +72:951.637 Sensors-Magnetometer.MagZ 763.000000 +72:960.690 Sensors-Accelerometer.AccX -9879.000000 +72:961.214 Sensors-Accelerometer.AccY -2842.000000 +72:961.730 Sensors-Accelerometer.AccZ -11902.000000 +73:000.683 Sensors-Magnetometer.MagX 59.000000 +73:001.149 Sensors-Magnetometer.MagY 287.000000 +73:001.642 Sensors-Magnetometer.MagZ 767.000000 +73:002.174 Sensors-Accelerometer.AccX -13774.000000 +73:002.720 Sensors-Accelerometer.AccY -2151.000000 +73:003.238 Sensors-Accelerometer.AccZ -10403.000000 +73:040.690 Sensors-Accelerometer.AccX -13008.000000 +73:041.231 Sensors-Accelerometer.AccY -1563.000000 +73:041.755 Sensors-Accelerometer.AccZ -10144.000000 +73:050.683 Sensors-Magnetometer.MagX 155.000000 +73:051.178 Sensors-Magnetometer.MagY 192.000000 +73:051.667 Sensors-Magnetometer.MagZ 746.000000 +73:080.690 Sensors-Accelerometer.AccX -12811.000000 +73:081.237 Sensors-Accelerometer.AccY 1015.000000 +73:081.759 Sensors-Accelerometer.AccZ -9363.000000 +73:100.683 Sensors-Magnetometer.MagX 252.000000 +73:101.176 Sensors-Magnetometer.MagY 78.000000 +73:101.645 Sensors-Magnetometer.MagZ 705.000000 +73:120.690 Sensors-Accelerometer.AccX -14539.000000 +73:121.240 Sensors-Accelerometer.AccY 2963.000000 +73:121.762 Sensors-Accelerometer.AccZ -6622.000000 +73:150.683 Sensors-Magnetometer.MagX 332.000000 +73:151.177 Sensors-Magnetometer.MagY -78.000000 +73:151.650 Sensors-Magnetometer.MagZ 636.000000 +73:160.690 Sensors-Accelerometer.AccX -12653.000000 +73:161.239 Sensors-Accelerometer.AccY 4891.000000 +73:161.765 Sensors-Accelerometer.AccZ -5306.000000 +73:200.683 Sensors-Magnetometer.MagX 378.000000 +73:201.175 Sensors-Magnetometer.MagY -218.000000 +73:201.665 Sensors-Magnetometer.MagZ 551.000000 +73:202.196 Sensors-Accelerometer.AccX -12145.000000 +73:202.747 Sensors-Accelerometer.AccY 9006.000000 +73:203.276 Sensors-Accelerometer.AccZ -1368.000000 +73:240.690 Sensors-Accelerometer.AccX -11355.000000 +73:241.241 Sensors-Accelerometer.AccY 11434.000000 +73:241.788 Sensors-Accelerometer.AccZ 2367.000000 +73:250.684 Sensors-Magnetometer.MagX 372.000000 +73:251.174 Sensors-Magnetometer.MagY -346.000000 +73:251.669 Sensors-Magnetometer.MagZ 445.000000 +73:280.690 Sensors-Accelerometer.AccX -9838.000000 +73:281.213 Sensors-Accelerometer.AccY 12613.000000 +73:281.762 Sensors-Accelerometer.AccZ 2787.000000 +73:300.683 Sensors-Magnetometer.MagX 357.000000 +73:301.179 Sensors-Magnetometer.MagY -419.000000 +73:301.678 Sensors-Magnetometer.MagZ 354.000000 +73:320.690 Sensors-Accelerometer.AccX -9648.000000 +73:321.210 Sensors-Accelerometer.AccY 12096.000000 +73:321.748 Sensors-Accelerometer.AccZ 4798.000000 +73:350.683 Sensors-Magnetometer.MagX 351.000000 +73:351.180 Sensors-Magnetometer.MagY -470.000000 +73:351.680 Sensors-Magnetometer.MagZ 264.000000 +73:360.690 Sensors-Accelerometer.AccX -8840.000000 +73:361.209 Sensors-Accelerometer.AccY 11818.000000 +73:361.753 Sensors-Accelerometer.AccZ 5931.000000 +73:400.684 Sensors-Magnetometer.MagX 336.000000 +73:401.166 Sensors-Magnetometer.MagY -505.000000 +73:401.658 Sensors-Magnetometer.MagZ 204.000000 +73:402.185 Sensors-Accelerometer.AccX -9569.000000 +73:402.709 Sensors-Accelerometer.AccY 16404.000000 +73:403.249 Sensors-Accelerometer.AccZ 10423.000000 +73:440.690 Sensors-Accelerometer.AccX -7477.000000 +73:441.213 Sensors-Accelerometer.AccY 16136.000000 +73:441.758 Sensors-Accelerometer.AccZ 10791.000000 +73:480.690 Sensors-Accelerometer.AccX -6180.000000 +73:481.214 Sensors-Accelerometer.AccY 11547.000000 +73:481.762 Sensors-Accelerometer.AccZ 4315.000000 +73:500.683 Sensors-Magnetometer.MagX 382.000000 +73:501.179 Sensors-Magnetometer.MagY -372.000000 +73:501.671 Sensors-Magnetometer.MagZ 443.000000 +73:520.690 Sensors-Accelerometer.AccX -7723.000000 +73:521.219 Sensors-Accelerometer.AccY 10476.000000 +73:521.769 Sensors-Accelerometer.AccZ 275.000000 +73:550.683 Sensors-Magnetometer.MagX 366.000000 +73:551.181 Sensors-Magnetometer.MagY -169.000000 +73:551.673 Sensors-Magnetometer.MagZ 608.000000 +73:560.690 Sensors-Accelerometer.AccX -8653.000000 +73:561.213 Sensors-Accelerometer.AccY 7560.000000 +73:561.736 Sensors-Accelerometer.AccZ -3220.000000 +73:600.683 Sensors-Magnetometer.MagX 285.000000 +73:601.172 Sensors-Magnetometer.MagY 68.000000 +73:601.633 Sensors-Magnetometer.MagZ 712.000000 +73:602.159 Sensors-Accelerometer.AccX -9212.000000 +73:602.683 Sensors-Accelerometer.AccY 2608.000000 +73:603.200 Sensors-Accelerometer.AccZ -2948.000000 +73:640.690 Sensors-Accelerometer.AccX -6699.000000 +73:641.219 Sensors-Accelerometer.AccY -3404.000000 +73:641.737 Sensors-Accelerometer.AccZ -8875.000000 +73:650.683 Sensors-Magnetometer.MagX 86.000000 +73:651.152 Sensors-Magnetometer.MagY 292.000000 +73:651.645 Sensors-Magnetometer.MagZ 762.000000 +73:680.690 Sensors-Accelerometer.AccX -9455.000000 +73:681.217 Sensors-Accelerometer.AccY -10581.000000 +73:681.760 Sensors-Accelerometer.AccZ -12101.000000 +73:700.683 Sensors-Magnetometer.MagX 25.000000 +73:701.149 Sensors-Magnetometer.MagY 376.000000 +73:701.644 Sensors-Magnetometer.MagZ 756.000000 +73:720.690 Sensors-Accelerometer.AccX -14978.000000 +73:721.240 Sensors-Accelerometer.AccY -16730.000000 +73:721.792 Sensors-Accelerometer.AccZ -13287.000000 +73:750.683 Sensors-Magnetometer.MagX 86.000000 +73:751.149 Sensors-Magnetometer.MagY 357.000000 +73:751.640 Sensors-Magnetometer.MagZ 742.000000 +73:760.690 Sensors-Accelerometer.AccX -12976.000000 +73:761.234 Sensors-Accelerometer.AccY -8474.000000 +73:761.749 Sensors-Accelerometer.AccZ -11322.000000 +73:800.683 Sensors-Magnetometer.MagX 236.000000 +73:801.170 Sensors-Magnetometer.MagY 259.000000 +73:801.661 Sensors-Magnetometer.MagZ 714.000000 +73:802.189 Sensors-Accelerometer.AccX -15668.000000 +73:802.736 Sensors-Accelerometer.AccY 145.000000 +73:803.223 Sensors-Accelerometer.AccZ -11346.000000 +73:840.690 Sensors-Accelerometer.AccX -14812.000000 +73:841.230 Sensors-Accelerometer.AccY -1750.000000 +73:841.749 Sensors-Accelerometer.AccZ -4479.000000 +73:850.683 Sensors-Magnetometer.MagX 352.000000 +73:851.172 Sensors-Magnetometer.MagY 113.000000 +73:851.661 Sensors-Magnetometer.MagZ 657.000000 +73:880.690 Sensors-Accelerometer.AccX -12545.000000 +73:881.238 Sensors-Accelerometer.AccY 5081.000000 +73:881.764 Sensors-Accelerometer.AccZ -1867.000000 +73:900.683 Sensors-Magnetometer.MagX 424.000000 +73:901.171 Sensors-Magnetometer.MagY -124.000000 +73:901.662 Sensors-Magnetometer.MagZ 558.000000 +73:920.690 Sensors-Accelerometer.AccX -10288.000000 +73:921.230 Sensors-Accelerometer.AccY 11014.000000 +73:921.774 Sensors-Accelerometer.AccZ -1659.000000 +73:950.683 Sensors-Magnetometer.MagX 411.000000 +73:951.177 Sensors-Magnetometer.MagY -317.000000 +73:951.674 Sensors-Magnetometer.MagZ 439.000000 +73:960.690 Sensors-Accelerometer.AccX -7811.000000 +73:961.219 Sensors-Accelerometer.AccY 10306.000000 +73:961.761 Sensors-Accelerometer.AccZ 4108.000000 +74:000.683 Sensors-Magnetometer.MagX 362.000000 +74:001.171 Sensors-Magnetometer.MagY -470.000000 +74:001.667 Sensors-Magnetometer.MagZ 290.000000 +74:002.191 Sensors-Accelerometer.AccX -4820.000000 +74:002.712 Sensors-Accelerometer.AccY 14937.000000 +74:003.260 Sensors-Accelerometer.AccZ 7819.000000 +74:040.690 Sensors-Accelerometer.AccX -3197.000000 +74:041.213 Sensors-Accelerometer.AccY 16309.000000 +74:041.762 Sensors-Accelerometer.AccZ 8616.000000 +74:050.683 Sensors-Magnetometer.MagX 271.000000 +74:051.176 Sensors-Magnetometer.MagY -569.000000 +74:051.672 Sensors-Magnetometer.MagZ 194.000000 +74:080.690 Sensors-Accelerometer.AccX -3590.000000 +74:081.211 Sensors-Accelerometer.AccY 14078.000000 +74:081.760 Sensors-Accelerometer.AccZ 8110.000000 +74:120.690 Sensors-Accelerometer.AccX -6144.000000 +74:121.202 Sensors-Accelerometer.AccY 14222.000000 +74:121.748 Sensors-Accelerometer.AccZ 7873.000000 +74:150.683 Sensors-Magnetometer.MagX 326.000000 +74:151.178 Sensors-Magnetometer.MagY -540.000000 +74:151.672 Sensors-Magnetometer.MagZ 172.000000 +74:160.690 Sensors-Accelerometer.AccX -10016.000000 +74:161.230 Sensors-Accelerometer.AccY 12903.000000 +74:161.776 Sensors-Accelerometer.AccZ 10240.000000 +74:200.683 Sensors-Magnetometer.MagX 416.000000 +74:201.170 Sensors-Magnetometer.MagY -438.000000 +74:201.666 Sensors-Magnetometer.MagZ 276.000000 +74:202.191 Sensors-Accelerometer.AccX -10656.000000 +74:202.730 Sensors-Accelerometer.AccY 11854.000000 +74:203.277 Sensors-Accelerometer.AccZ 7022.000000 +74:240.690 Sensors-Accelerometer.AccX -13057.000000 +74:241.233 Sensors-Accelerometer.AccY 7052.000000 +74:241.750 Sensors-Accelerometer.AccZ 1088.000000 +74:250.684 Sensors-Magnetometer.MagX 451.000000 +74:251.174 Sensors-Magnetometer.MagY -261.000000 +74:251.665 Sensors-Magnetometer.MagZ 464.000000 +74:280.690 Sensors-Accelerometer.AccX -12133.000000 +74:281.238 Sensors-Accelerometer.AccY 3884.000000 +74:281.757 Sensors-Accelerometer.AccZ -1938.000000 +74:300.683 Sensors-Magnetometer.MagX 371.000000 +74:301.179 Sensors-Magnetometer.MagY -65.000000 +74:301.649 Sensors-Magnetometer.MagZ 645.000000 +74:320.690 Sensors-Accelerometer.AccX -8618.000000 +74:321.206 Sensors-Accelerometer.AccY -1842.000000 +74:321.725 Sensors-Accelerometer.AccZ -8532.000000 +74:350.683 Sensors-Magnetometer.MagX 150.000000 +74:351.176 Sensors-Magnetometer.MagY 160.000000 +74:351.662 Sensors-Magnetometer.MagZ 782.000000 +74:360.690 Sensors-Accelerometer.AccX -6457.000000 +74:361.213 Sensors-Accelerometer.AccY -3452.000000 +74:361.734 Sensors-Accelerometer.AccZ -12122.000000 +74:400.683 Sensors-Magnetometer.MagX -63.000000 +74:401.148 Sensors-Magnetometer.MagY 266.000000 +74:401.636 Sensors-Magnetometer.MagZ 815.000000 +74:402.170 Sensors-Accelerometer.AccX -4138.000000 +74:402.686 Sensors-Accelerometer.AccY -6400.000000 +74:403.194 Sensors-Accelerometer.AccZ -13792.000000 +74:440.690 Sensors-Accelerometer.AccX -6462.000000 +74:441.212 Sensors-Accelerometer.AccY -9511.000000 +74:441.736 Sensors-Accelerometer.AccZ -15675.000000 +74:450.683 Sensors-Magnetometer.MagX -120.000000 +74:451.172 Sensors-Magnetometer.MagY 311.000000 +74:451.671 Sensors-Magnetometer.MagZ 808.000000 +74:480.690 Sensors-Accelerometer.AccX -8015.000000 +74:481.217 Sensors-Accelerometer.AccY -8151.000000 +74:481.748 Sensors-Accelerometer.AccZ -13958.000000 +74:500.683 Sensors-Magnetometer.MagX 33.000000 +74:501.146 Sensors-Magnetometer.MagY 275.000000 +74:501.640 Sensors-Magnetometer.MagZ 792.000000 +74:520.690 Sensors-Accelerometer.AccX -11443.000000 +74:521.241 Sensors-Accelerometer.AccY -2988.000000 +74:521.767 Sensors-Accelerometer.AccZ -11671.000000 +74:550.683 Sensors-Magnetometer.MagX 231.000000 +74:551.176 Sensors-Magnetometer.MagY 180.000000 +74:551.665 Sensors-Magnetometer.MagZ 726.000000 +74:560.690 Sensors-Accelerometer.AccX -13759.000000 +74:561.237 Sensors-Accelerometer.AccY -757.000000 +74:561.730 Sensors-Accelerometer.AccZ -9235.000000 +74:600.683 Sensors-Magnetometer.MagX 411.000000 +74:601.175 Sensors-Magnetometer.MagY -45.000000 +74:601.641 Sensors-Magnetometer.MagZ 589.000000 +74:602.171 Sensors-Accelerometer.AccX -14973.000000 +74:602.721 Sensors-Accelerometer.AccY -90.000000 +74:603.188 Sensors-Accelerometer.AccZ -3643.000000 +74:640.690 Sensors-Accelerometer.AccX -11028.000000 +74:641.233 Sensors-Accelerometer.AccY 9554.000000 +74:641.758 Sensors-Accelerometer.AccZ 1576.000000 +74:650.684 Sensors-Magnetometer.MagX 458.000000 +74:651.177 Sensors-Magnetometer.MagY -301.000000 +74:651.673 Sensors-Magnetometer.MagZ 408.000000 +74:680.690 Sensors-Accelerometer.AccX -9325.000000 +74:681.215 Sensors-Accelerometer.AccY 10667.000000 +74:681.764 Sensors-Accelerometer.AccZ 5356.000000 +74:700.683 Sensors-Magnetometer.MagX 381.000000 +74:701.180 Sensors-Magnetometer.MagY -477.000000 +74:701.676 Sensors-Magnetometer.MagZ 229.000000 +74:720.690 Sensors-Accelerometer.AccX -5885.000000 +74:721.214 Sensors-Accelerometer.AccY 12771.000000 +74:721.770 Sensors-Accelerometer.AccZ 8729.000000 +74:750.683 Sensors-Magnetometer.MagX 282.000000 +74:751.177 Sensors-Magnetometer.MagY -576.000000 +74:751.670 Sensors-Magnetometer.MagZ 76.000000 +74:760.690 Sensors-Accelerometer.AccX -2153.000000 +74:761.206 Sensors-Accelerometer.AccY 9724.000000 +74:761.730 Sensors-Accelerometer.AccZ 10256.000000 +74:800.683 Sensors-Magnetometer.MagX 172.000000 +74:801.172 Sensors-Magnetometer.MagY -615.000000 +74:801.668 Sensors-Magnetometer.MagZ -70.000000 +74:802.173 Sensors-Accelerometer.AccX 199.000000 +74:802.668 Sensors-Accelerometer.AccY 13461.000000 +74:803.212 Sensors-Accelerometer.AccZ 10961.000000 +74:840.690 Sensors-Accelerometer.AccX 1482.000000 +74:841.207 Sensors-Accelerometer.AccY 9489.000000 +74:841.731 Sensors-Accelerometer.AccZ 13171.000000 +74:850.683 Sensors-Magnetometer.MagX 59.000000 +74:851.151 Sensors-Magnetometer.MagY -627.000000 +74:851.653 Sensors-Magnetometer.MagZ -172.000000 +74:880.690 Sensors-Accelerometer.AccX 1532.000000 +74:881.206 Sensors-Accelerometer.AccY 10636.000000 +74:881.750 Sensors-Accelerometer.AccZ 15184.000000 +74:900.683 Sensors-Magnetometer.MagX -122.000000 +74:901.173 Sensors-Magnetometer.MagY -623.000000 +74:901.672 Sensors-Magnetometer.MagZ -207.000000 +74:920.690 Sensors-Accelerometer.AccX 8756.000000 +74:921.209 Sensors-Accelerometer.AccY 9948.000000 +74:921.735 Sensors-Accelerometer.AccZ 11279.000000 +74:950.683 Sensors-Magnetometer.MagX -256.000000 +74:951.167 Sensors-Magnetometer.MagY -596.000000 +74:951.662 Sensors-Magnetometer.MagZ -215.000000 +74:960.690 Sensors-Accelerometer.AccX 5745.000000 +74:961.210 Sensors-Accelerometer.AccY 10372.000000 +74:961.753 Sensors-Accelerometer.AccZ 14869.000000 +75:000.683 Sensors-Magnetometer.MagX -409.000000 +75:001.179 Sensors-Magnetometer.MagY -555.000000 +75:001.681 Sensors-Magnetometer.MagZ -217.000000 +75:002.210 Sensors-Accelerometer.AccX 9048.000000 +75:002.734 Sensors-Accelerometer.AccY 8516.000000 +75:003.256 Sensors-Accelerometer.AccZ 11927.000000 +75:040.690 Sensors-Accelerometer.AccX 15485.000000 +75:041.236 Sensors-Accelerometer.AccY 11545.000000 +75:041.779 Sensors-Accelerometer.AccZ 13060.000000 +75:050.683 Sensors-Magnetometer.MagX -538.000000 +75:051.175 Sensors-Magnetometer.MagY -475.000000 +75:051.675 Sensors-Magnetometer.MagZ -188.000000 +75:080.690 Sensors-Accelerometer.AccX 12276.000000 +75:081.238 Sensors-Accelerometer.AccY 8183.000000 +75:081.764 Sensors-Accelerometer.AccZ 12332.000000 +75:100.683 Sensors-Magnetometer.MagX -658.000000 +75:101.175 Sensors-Magnetometer.MagY -391.000000 +75:101.675 Sensors-Magnetometer.MagZ -152.000000 +75:120.690 Sensors-Accelerometer.AccX 15038.000000 +75:121.242 Sensors-Accelerometer.AccY 3736.000000 +75:121.761 Sensors-Accelerometer.AccZ 11049.000000 +75:150.683 Sensors-Magnetometer.MagX -757.000000 +75:151.182 Sensors-Magnetometer.MagY -305.000000 +75:151.681 Sensors-Magnetometer.MagZ -67.000000 +75:160.690 Sensors-Accelerometer.AccX 15628.000000 +75:161.243 Sensors-Accelerometer.AccY 4779.000000 +75:161.776 Sensors-Accelerometer.AccZ 6254.000000 +75:200.684 Sensors-Magnetometer.MagX -788.000000 +75:201.176 Sensors-Magnetometer.MagY -286.000000 +75:201.672 Sensors-Magnetometer.MagZ 61.000000 +75:202.177 Sensors-Accelerometer.AccX 11031.000000 +75:202.730 Sensors-Accelerometer.AccY 3371.000000 +75:203.251 Sensors-Accelerometer.AccZ 7971.000000 +75:240.690 Sensors-Accelerometer.AccX 17743.000000 +75:241.243 Sensors-Accelerometer.AccY 4922.000000 +75:241.763 Sensors-Accelerometer.AccZ 4361.000000 +75:250.684 Sensors-Magnetometer.MagX -780.000000 +75:251.182 Sensors-Magnetometer.MagY -275.000000 +75:251.682 Sensors-Magnetometer.MagZ 135.000000 +75:280.690 Sensors-Accelerometer.AccX 15774.000000 +75:281.238 Sensors-Accelerometer.AccY 4376.000000 +75:281.760 Sensors-Accelerometer.AccZ 4792.000000 +75:320.690 Sensors-Accelerometer.AccX 20618.000000 +75:321.238 Sensors-Accelerometer.AccY 3168.000000 +75:321.760 Sensors-Accelerometer.AccZ 2680.000000 +75:350.683 Sensors-Magnetometer.MagX -695.000000 +75:351.183 Sensors-Magnetometer.MagY -397.000000 +75:351.682 Sensors-Magnetometer.MagZ 164.000000 +75:360.690 Sensors-Accelerometer.AccX 10279.000000 +75:361.238 Sensors-Accelerometer.AccY 6022.000000 +75:361.767 Sensors-Accelerometer.AccZ 4354.000000 +75:400.683 Sensors-Magnetometer.MagX -478.000000 +75:401.180 Sensors-Magnetometer.MagY -570.000000 +75:401.674 Sensors-Magnetometer.MagZ 115.000000 +75:402.203 Sensors-Accelerometer.AccX 13119.000000 +75:402.750 Sensors-Accelerometer.AccY 9803.000000 +75:403.279 Sensors-Accelerometer.AccZ 5617.000000 +75:440.690 Sensors-Accelerometer.AccX 6300.000000 +75:441.211 Sensors-Accelerometer.AccY 11344.000000 +75:441.754 Sensors-Accelerometer.AccZ 5160.000000 +75:450.683 Sensors-Magnetometer.MagX -224.000000 +75:451.172 Sensors-Magnetometer.MagY -660.000000 +75:451.664 Sensors-Magnetometer.MagZ 53.000000 +75:480.690 Sensors-Accelerometer.AccX 3159.000000 +75:481.214 Sensors-Accelerometer.AccY 18027.000000 +75:481.764 Sensors-Accelerometer.AccZ 9278.000000 +75:500.683 Sensors-Magnetometer.MagX 82.000000 +75:501.149 Sensors-Magnetometer.MagY -657.000000 +75:501.639 Sensors-Magnetometer.MagZ 65.000000 +75:520.690 Sensors-Accelerometer.AccX -2215.000000 +75:521.210 Sensors-Accelerometer.AccY 10435.000000 +75:521.757 Sensors-Accelerometer.AccZ 4478.000000 +75:550.683 Sensors-Magnetometer.MagX 375.000000 +75:551.181 Sensors-Magnetometer.MagY -534.000000 +75:551.677 Sensors-Magnetometer.MagZ 164.000000 +75:560.690 Sensors-Accelerometer.AccX -10740.000000 +75:561.234 Sensors-Accelerometer.AccY 12058.000000 +75:561.784 Sensors-Accelerometer.AccZ 5384.000000 +75:600.683 Sensors-Magnetometer.MagX 521.000000 +75:601.179 Sensors-Magnetometer.MagY -311.000000 +75:601.677 Sensors-Magnetometer.MagZ 291.000000 +75:602.209 Sensors-Accelerometer.AccX -12586.000000 +75:602.753 Sensors-Accelerometer.AccY 6120.000000 +75:603.275 Sensors-Accelerometer.AccZ -909.000000 +75:640.690 Sensors-Accelerometer.AccX -13183.000000 +75:641.240 Sensors-Accelerometer.AccY 216.000000 +75:641.732 Sensors-Accelerometer.AccZ -2523.000000 +75:650.684 Sensors-Magnetometer.MagX 513.000000 +75:651.177 Sensors-Magnetometer.MagY -171.000000 +75:651.673 Sensors-Magnetometer.MagZ 430.000000 +75:680.690 Sensors-Accelerometer.AccX -16764.000000 +75:681.242 Sensors-Accelerometer.AccY 2300.000000 +75:681.764 Sensors-Accelerometer.AccZ -4590.000000 +75:720.690 Sensors-Accelerometer.AccX -15621.000000 +75:721.242 Sensors-Accelerometer.AccY 2571.000000 +75:721.764 Sensors-Accelerometer.AccZ -2098.000000 +75:760.690 Sensors-Accelerometer.AccX -17660.000000 +75:761.238 Sensors-Accelerometer.AccY 3710.000000 +75:761.763 Sensors-Accelerometer.AccZ -2217.000000 +75:800.725 Sensors-Accelerometer.AccX -16520.000000 +75:801.267 Sensors-Accelerometer.AccY 5761.000000 +75:801.790 Sensors-Accelerometer.AccZ 460.000000 +75:840.690 Sensors-Accelerometer.AccX -14470.000000 +75:841.239 Sensors-Accelerometer.AccY 2856.000000 +75:841.757 Sensors-Accelerometer.AccZ 801.000000 +75:880.690 Sensors-Accelerometer.AccX -14953.000000 +75:881.236 Sensors-Accelerometer.AccY 3723.000000 +75:881.759 Sensors-Accelerometer.AccZ 620.000000 +75:900.683 Sensors-Magnetometer.MagX 495.000000 +75:901.183 Sensors-Magnetometer.MagY -242.000000 +75:901.677 Sensors-Magnetometer.MagZ 381.000000 +75:920.690 Sensors-Accelerometer.AccX -13503.000000 +75:921.239 Sensors-Accelerometer.AccY 4204.000000 +75:921.758 Sensors-Accelerometer.AccZ 1983.000000 +75:950.684 Sensors-Magnetometer.MagX 495.000000 +75:951.184 Sensors-Magnetometer.MagY -271.000000 +75:951.682 Sensors-Magnetometer.MagZ 328.000000 +75:960.690 Sensors-Accelerometer.AccX -14249.000000 +75:961.242 Sensors-Accelerometer.AccY 1651.000000 +75:961.766 Sensors-Accelerometer.AccZ 1830.000000 +76:000.684 Sensors-Magnetometer.MagX 503.000000 +76:001.180 Sensors-Magnetometer.MagY -296.000000 +76:001.671 Sensors-Magnetometer.MagZ 255.000000 +76:002.203 Sensors-Accelerometer.AccX -14760.000000 +76:002.747 Sensors-Accelerometer.AccY 4268.000000 +76:003.268 Sensors-Accelerometer.AccZ 4076.000000 +76:040.690 Sensors-Accelerometer.AccX -14157.000000 +76:041.234 Sensors-Accelerometer.AccY 5325.000000 +76:041.752 Sensors-Accelerometer.AccZ 6035.000000 +76:050.683 Sensors-Magnetometer.MagX 491.000000 +76:051.183 Sensors-Magnetometer.MagY -350.000000 +76:051.679 Sensors-Magnetometer.MagZ 197.000000 +76:080.690 Sensors-Accelerometer.AccX -14344.000000 +76:081.235 Sensors-Accelerometer.AccY 5000.000000 +76:081.757 Sensors-Accelerometer.AccZ 7936.000000 +76:120.690 Sensors-Accelerometer.AccX -14275.000000 +76:121.241 Sensors-Accelerometer.AccY 3082.000000 +76:121.763 Sensors-Accelerometer.AccZ 5702.000000 +76:160.690 Sensors-Accelerometer.AccX -13097.000000 +76:161.238 Sensors-Accelerometer.AccY 4601.000000 +76:161.761 Sensors-Accelerometer.AccZ 5170.000000 +76:200.684 Sensors-Magnetometer.MagX 482.000000 +76:201.176 Sensors-Magnetometer.MagY -385.000000 +76:201.671 Sensors-Magnetometer.MagZ 105.000000 +76:202.192 Sensors-Accelerometer.AccX -14511.000000 +76:202.744 Sensors-Accelerometer.AccY 8449.000000 +76:203.262 Sensors-Accelerometer.AccZ 6915.000000 +76:240.690 Sensors-Accelerometer.AccX -14378.000000 +76:241.235 Sensors-Accelerometer.AccY 2108.000000 +76:241.752 Sensors-Accelerometer.AccZ 6564.000000 +76:280.690 Sensors-Accelerometer.AccX -17682.000000 +76:281.237 Sensors-Accelerometer.AccY 2674.000000 +76:281.757 Sensors-Accelerometer.AccZ 4344.000000 +76:320.690 Sensors-Accelerometer.AccX -13617.000000 +76:321.236 Sensors-Accelerometer.AccY 7207.000000 +76:321.762 Sensors-Accelerometer.AccZ 6131.000000 +76:360.690 Sensors-Accelerometer.AccX -14213.000000 +76:361.241 Sensors-Accelerometer.AccY 6409.000000 +76:361.764 Sensors-Accelerometer.AccZ 4257.000000 +76:400.683 Sensors-Magnetometer.MagX 452.000000 +76:401.172 Sensors-Magnetometer.MagY -437.000000 +76:401.666 Sensors-Magnetometer.MagZ 118.000000 +76:402.192 Sensors-Accelerometer.AccX -11557.000000 +76:402.739 Sensors-Accelerometer.AccY 13757.000000 +76:403.290 Sensors-Accelerometer.AccZ 5024.000000 +76:440.690 Sensors-Accelerometer.AccX -14938.000000 +76:441.241 Sensors-Accelerometer.AccY 15469.000000 +76:441.790 Sensors-Accelerometer.AccZ 3292.000000 +76:480.690 Sensors-Accelerometer.AccX -18174.000000 +76:481.240 Sensors-Accelerometer.AccY 16013.000000 +76:481.788 Sensors-Accelerometer.AccZ 5562.000000 +76:500.684 Sensors-Magnetometer.MagX 438.000000 +76:501.179 Sensors-Magnetometer.MagY -412.000000 +76:501.673 Sensors-Magnetometer.MagZ 20.000000 +76:520.690 Sensors-Accelerometer.AccX -15617.000000 +76:521.241 Sensors-Accelerometer.AccY 7808.000000 +76:521.758 Sensors-Accelerometer.AccZ 5653.000000 +76:550.683 Sensors-Magnetometer.MagX 469.000000 +76:551.178 Sensors-Magnetometer.MagY -302.000000 +76:551.676 Sensors-Magnetometer.MagZ -142.000000 +76:560.690 Sensors-Accelerometer.AccX -9074.000000 +76:561.214 Sensors-Accelerometer.AccY 730.000000 +76:561.710 Sensors-Accelerometer.AccZ 6232.000000 +76:600.683 Sensors-Magnetometer.MagX 466.000000 +76:601.176 Sensors-Magnetometer.MagY -170.000000 +76:601.666 Sensors-Magnetometer.MagZ -257.000000 +76:602.194 Sensors-Accelerometer.AccX -3719.000000 +76:602.722 Sensors-Accelerometer.AccY -10339.000000 +76:603.273 Sensors-Accelerometer.AccZ 7435.000000 +76:640.690 Sensors-Accelerometer.AccX -1144.000000 +76:641.210 Sensors-Accelerometer.AccY -16981.000000 +76:641.758 Sensors-Accelerometer.AccZ 7553.000000 +76:650.684 Sensors-Magnetometer.MagX 457.000000 +76:651.181 Sensors-Magnetometer.MagY -90.000000 +76:651.653 Sensors-Magnetometer.MagZ -303.000000 +76:680.690 Sensors-Accelerometer.AccX -2585.000000 +76:681.212 Sensors-Accelerometer.AccY -26378.000000 +76:681.763 Sensors-Accelerometer.AccZ 9492.000000 +76:720.690 Sensors-Accelerometer.AccX -8299.000000 +76:721.217 Sensors-Accelerometer.AccY -14511.000000 +76:721.772 Sensors-Accelerometer.AccZ 8139.000000 +76:750.683 Sensors-Magnetometer.MagX 461.000000 +76:751.181 Sensors-Magnetometer.MagY -244.000000 +76:751.677 Sensors-Magnetometer.MagZ -243.000000 +76:760.690 Sensors-Accelerometer.AccX -15946.000000 +76:761.242 Sensors-Accelerometer.AccY 4666.000000 +76:761.769 Sensors-Accelerometer.AccZ 6989.000000 +76:800.683 Sensors-Magnetometer.MagX 445.000000 +76:801.170 Sensors-Magnetometer.MagY -333.000000 +76:801.656 Sensors-Magnetometer.MagZ -183.000000 +76:802.183 Sensors-Accelerometer.AccX -10215.000000 +76:802.732 Sensors-Accelerometer.AccY 23355.000000 +76:803.279 Sensors-Accelerometer.AccZ 8539.000000 +76:840.690 Sensors-Accelerometer.AccX -9169.000000 +76:841.215 Sensors-Accelerometer.AccY 27751.000000 +76:841.761 Sensors-Accelerometer.AccZ 7600.000000 +76:850.684 Sensors-Magnetometer.MagX 399.000000 +76:851.179 Sensors-Magnetometer.MagY -334.000000 +76:851.674 Sensors-Magnetometer.MagZ -248.000000 +76:880.690 Sensors-Accelerometer.AccX -5863.000000 +76:881.215 Sensors-Accelerometer.AccY 14925.000000 +76:881.763 Sensors-Accelerometer.AccZ 8283.000000 +76:920.690 Sensors-Accelerometer.AccX -6890.000000 +76:921.209 Sensors-Accelerometer.AccY -4151.000000 +76:921.735 Sensors-Accelerometer.AccZ 7164.000000 +76:950.683 Sensors-Magnetometer.MagX 402.000000 +76:951.176 Sensors-Magnetometer.MagY -126.000000 +76:951.668 Sensors-Magnetometer.MagZ -388.000000 +76:960.690 Sensors-Accelerometer.AccX -3382.000000 +76:961.206 Sensors-Accelerometer.AccY -20696.000000 +76:961.753 Sensors-Accelerometer.AccZ 10323.000000 +77:000.683 Sensors-Magnetometer.MagX 399.000000 +77:001.181 Sensors-Magnetometer.MagY -23.000000 +77:001.649 Sensors-Magnetometer.MagZ -397.000000 +77:002.181 Sensors-Accelerometer.AccX -3804.000000 +77:002.706 Sensors-Accelerometer.AccY -27611.000000 +77:003.258 Sensors-Accelerometer.AccZ 12069.000000 +77:040.690 Sensors-Accelerometer.AccX -10211.000000 +77:041.242 Sensors-Accelerometer.AccY -12458.000000 +77:041.786 Sensors-Accelerometer.AccZ 10221.000000 +77:050.684 Sensors-Magnetometer.MagX 397.000000 +77:051.178 Sensors-Magnetometer.MagY -114.000000 +77:051.669 Sensors-Magnetometer.MagZ -365.000000 +77:080.690 Sensors-Accelerometer.AccX -10581.000000 +77:081.233 Sensors-Accelerometer.AccY 438.000000 +77:081.729 Sensors-Accelerometer.AccZ 9798.000000 +77:100.683 Sensors-Magnetometer.MagX 402.000000 +77:101.177 Sensors-Magnetometer.MagY -227.000000 +77:101.673 Sensors-Magnetometer.MagZ -338.000000 +77:120.690 Sensors-Accelerometer.AccX -11670.000000 +77:121.237 Sensors-Accelerometer.AccY 14484.000000 +77:121.777 Sensors-Accelerometer.AccZ 9760.000000 +77:150.683 Sensors-Magnetometer.MagX 416.000000 +77:151.173 Sensors-Magnetometer.MagY -293.000000 +77:151.669 Sensors-Magnetometer.MagZ -288.000000 +77:160.690 Sensors-Accelerometer.AccX -9422.000000 +77:161.216 Sensors-Accelerometer.AccY 21494.000000 +77:161.766 Sensors-Accelerometer.AccZ 9729.000000 +77:200.725 Sensors-Accelerometer.AccX -7150.000000 +77:201.248 Sensors-Accelerometer.AccY 24529.000000 +77:201.797 Sensors-Accelerometer.AccZ 9541.000000 +77:240.690 Sensors-Accelerometer.AccX -6037.000000 +77:241.217 Sensors-Accelerometer.AccY 13109.000000 +77:241.759 Sensors-Accelerometer.AccZ 9371.000000 +77:250.684 Sensors-Magnetometer.MagX 369.000000 +77:251.173 Sensors-Magnetometer.MagY -245.000000 +77:251.668 Sensors-Magnetometer.MagZ -380.000000 +77:280.690 Sensors-Accelerometer.AccX -4990.000000 +77:281.216 Sensors-Accelerometer.AccY -1383.000000 +77:281.736 Sensors-Accelerometer.AccZ 7910.000000 +77:300.683 Sensors-Magnetometer.MagX 342.000000 +77:301.179 Sensors-Magnetometer.MagY -15.000000 +77:301.648 Sensors-Magnetometer.MagZ -470.000000 +77:320.690 Sensors-Accelerometer.AccX 2072.000000 +77:321.209 Sensors-Accelerometer.AccY -13942.000000 +77:321.756 Sensors-Accelerometer.AccZ 8440.000000 +77:350.683 Sensors-Magnetometer.MagX 290.000000 +77:351.172 Sensors-Magnetometer.MagY 243.000000 +77:351.668 Sensors-Magnetometer.MagZ -482.000000 +77:360.690 Sensors-Accelerometer.AccX 2664.000000 +77:361.205 Sensors-Accelerometer.AccY -19207.000000 +77:361.754 Sensors-Accelerometer.AccZ 10059.000000 +77:400.683 Sensors-Magnetometer.MagX 257.000000 +77:401.175 Sensors-Magnetometer.MagY 368.000000 +77:401.666 Sensors-Magnetometer.MagZ -469.000000 +77:402.195 Sensors-Accelerometer.AccX -3414.000000 +77:402.719 Sensors-Accelerometer.AccY -16223.000000 +77:403.273 Sensors-Accelerometer.AccZ 11665.000000 +77:440.690 Sensors-Accelerometer.AccX -4064.000000 +77:441.203 Sensors-Accelerometer.AccY -12753.000000 +77:441.749 Sensors-Accelerometer.AccZ 13316.000000 +77:480.690 Sensors-Accelerometer.AccX -2063.000000 +77:481.213 Sensors-Accelerometer.AccY -11600.000000 +77:481.750 Sensors-Accelerometer.AccZ 10767.000000 +77:500.683 Sensors-Magnetometer.MagX 186.000000 +77:501.174 Sensors-Magnetometer.MagY 423.000000 +77:501.667 Sensors-Magnetometer.MagZ -467.000000 +77:520.690 Sensors-Accelerometer.AccX 9809.000000 +77:521.216 Sensors-Accelerometer.AccY -13080.000000 +77:521.767 Sensors-Accelerometer.AccZ 8235.000000 +77:550.683 Sensors-Magnetometer.MagX 130.000000 +77:551.176 Sensors-Magnetometer.MagY 442.000000 +77:551.671 Sensors-Magnetometer.MagZ -503.000000 +77:560.690 Sensors-Accelerometer.AccX 18435.000000 +77:561.241 Sensors-Accelerometer.AccY -11197.000000 +77:561.793 Sensors-Accelerometer.AccZ 7145.000000 +77:600.683 Sensors-Magnetometer.MagX 192.000000 +77:601.168 Sensors-Magnetometer.MagY 361.000000 +77:601.659 Sensors-Magnetometer.MagZ -499.000000 +77:602.192 Sensors-Accelerometer.AccX 14240.000000 +77:602.733 Sensors-Accelerometer.AccY -5867.000000 +77:603.261 Sensors-Accelerometer.AccZ 6209.000000 +77:640.690 Sensors-Accelerometer.AccX -2771.000000 +77:641.211 Sensors-Accelerometer.AccY -1730.000000 +77:641.730 Sensors-Accelerometer.AccZ 3997.000000 +77:650.683 Sensors-Magnetometer.MagX 386.000000 +77:651.178 Sensors-Magnetometer.MagY 216.000000 +77:651.670 Sensors-Magnetometer.MagZ -413.000000 +77:680.690 Sensors-Accelerometer.AccX -18604.000000 +77:681.240 Sensors-Accelerometer.AccY 2103.000000 +77:681.758 Sensors-Accelerometer.AccZ 2384.000000 +77:700.683 Sensors-Magnetometer.MagX 505.000000 +77:701.179 Sensors-Magnetometer.MagY 30.000000 +77:701.646 Sensors-Magnetometer.MagZ -256.000000 +77:720.690 Sensors-Accelerometer.AccX -32749.000000 +77:721.246 Sensors-Accelerometer.AccY 5598.000000 +77:721.777 Sensors-Accelerometer.AccZ 11715.000000 +77:750.683 Sensors-Magnetometer.MagX 478.000000 +77:751.184 Sensors-Magnetometer.MagY -73.000000 +77:751.656 Sensors-Magnetometer.MagZ -282.000000 +77:760.690 Sensors-Accelerometer.AccX -28116.000000 +77:761.237 Sensors-Accelerometer.AccY -1127.000000 +77:761.760 Sensors-Accelerometer.AccZ 13977.000000 +77:800.683 Sensors-Magnetometer.MagX 440.000000 +77:801.177 Sensors-Magnetometer.MagY 130.000000 +77:801.671 Sensors-Magnetometer.MagZ -362.000000 +77:802.201 Sensors-Accelerometer.AccX -9880.000000 +77:802.728 Sensors-Accelerometer.AccY -6873.000000 +77:803.257 Sensors-Accelerometer.AccZ 9734.000000 +77:840.690 Sensors-Accelerometer.AccX 14354.000000 +77:841.235 Sensors-Accelerometer.AccY -6144.000000 +77:841.746 Sensors-Accelerometer.AccZ 10116.000000 +77:850.683 Sensors-Magnetometer.MagX 333.000000 +77:851.174 Sensors-Magnetometer.MagY 270.000000 +77:851.668 Sensors-Magnetometer.MagZ -458.000000 +77:880.690 Sensors-Accelerometer.AccX 16874.000000 +77:881.235 Sensors-Accelerometer.AccY 1847.000000 +77:881.755 Sensors-Accelerometer.AccZ 6550.000000 +77:900.683 Sensors-Magnetometer.MagX 391.000000 +77:901.184 Sensors-Magnetometer.MagY 139.000000 +77:901.677 Sensors-Magnetometer.MagZ -427.000000 +77:920.690 Sensors-Accelerometer.AccX 9706.000000 +77:921.214 Sensors-Accelerometer.AccY 4009.000000 +77:921.737 Sensors-Accelerometer.AccZ 5173.000000 +77:950.683 Sensors-Magnetometer.MagX 467.000000 +77:951.180 Sensors-Magnetometer.MagY -87.000000 +77:951.652 Sensors-Magnetometer.MagZ -296.000000 +77:960.690 Sensors-Accelerometer.AccX -32519.000000 +77:961.242 Sensors-Accelerometer.AccY 6330.000000 +77:961.766 Sensors-Accelerometer.AccZ 3864.000000 +78:000.683 Sensors-Magnetometer.MagX 455.000000 +78:001.178 Sensors-Magnetometer.MagY -183.000000 +78:001.674 Sensors-Magnetometer.MagZ -267.000000 +78:002.205 Sensors-Accelerometer.AccX -32764.000000 +78:002.761 Sensors-Accelerometer.AccY -933.000000 +78:003.260 Sensors-Accelerometer.AccZ 13939.000000 +78:040.690 Sensors-Accelerometer.AccX -21374.000000 +78:041.240 Sensors-Accelerometer.AccY -9553.000000 +78:041.767 Sensors-Accelerometer.AccZ 10821.000000 +78:050.684 Sensors-Magnetometer.MagX 475.000000 +78:051.182 Sensors-Magnetometer.MagY -20.000000 +78:051.647 Sensors-Magnetometer.MagZ -312.000000 +78:080.690 Sensors-Accelerometer.AccX -488.000000 +78:081.177 Sensors-Accelerometer.AccY -4157.000000 +78:081.699 Sensors-Accelerometer.AccZ 9152.000000 +78:100.683 Sensors-Magnetometer.MagX 402.000000 +78:101.174 Sensors-Magnetometer.MagY 169.000000 +78:101.662 Sensors-Magnetometer.MagZ -403.000000 +78:120.690 Sensors-Accelerometer.AccX 21459.000000 +78:121.243 Sensors-Accelerometer.AccY 1990.000000 +78:121.767 Sensors-Accelerometer.AccZ 13600.000000 +78:160.690 Sensors-Accelerometer.AccX 5256.000000 +78:161.202 Sensors-Accelerometer.AccY 2626.000000 +78:161.718 Sensors-Accelerometer.AccZ 6187.000000 +78:200.683 Sensors-Magnetometer.MagX 470.000000 +78:201.182 Sensors-Magnetometer.MagY 12.000000 +78:201.648 Sensors-Magnetometer.MagZ -303.000000 +78:202.184 Sensors-Accelerometer.AccX -29062.000000 +78:202.737 Sensors-Accelerometer.AccY -2177.000000 +78:203.260 Sensors-Accelerometer.AccZ 4321.000000 +78:240.690 Sensors-Accelerometer.AccX -32764.000000 +78:241.244 Sensors-Accelerometer.AccY 87.000000 +78:241.712 Sensors-Accelerometer.AccZ 10340.000000 +78:250.684 Sensors-Magnetometer.MagX 474.000000 +78:251.177 Sensors-Magnetometer.MagY -122.000000 +78:251.670 Sensors-Magnetometer.MagZ -259.000000 +78:280.690 Sensors-Accelerometer.AccX -25593.000000 +78:281.245 Sensors-Accelerometer.AccY 10135.000000 +78:281.798 Sensors-Accelerometer.AccZ 12722.000000 +78:300.683 Sensors-Magnetometer.MagX 466.000000 +78:301.179 Sensors-Magnetometer.MagY -53.000000 +78:301.647 Sensors-Magnetometer.MagZ -287.000000 +78:320.690 Sensors-Accelerometer.AccX -9908.000000 +78:321.216 Sensors-Accelerometer.AccY -698.000000 +78:321.708 Sensors-Accelerometer.AccZ 7623.000000 +78:350.683 Sensors-Magnetometer.MagX 413.000000 +78:351.176 Sensors-Magnetometer.MagY 85.000000 +78:351.645 Sensors-Magnetometer.MagZ -385.000000 +78:360.690 Sensors-Accelerometer.AccX 3865.000000 +78:361.215 Sensors-Accelerometer.AccY -13107.000000 +78:361.776 Sensors-Accelerometer.AccZ 5295.000000 +78:400.683 Sensors-Magnetometer.MagX 379.000000 +78:401.175 Sensors-Magnetometer.MagY 170.000000 +78:401.662 Sensors-Magnetometer.MagZ -406.000000 +78:402.193 Sensors-Accelerometer.AccX 7634.000000 +78:402.717 Sensors-Accelerometer.AccY -32764.000000 +78:403.271 Sensors-Accelerometer.AccZ 4574.000000 +78:440.690 Sensors-Accelerometer.AccX -3981.000000 +78:441.215 Sensors-Accelerometer.AccY -27134.000000 +78:441.764 Sensors-Accelerometer.AccZ -794.000000 +78:450.683 Sensors-Magnetometer.MagX 431.000000 +78:451.180 Sensors-Magnetometer.MagY 73.000000 +78:451.651 Sensors-Magnetometer.MagZ -363.000000 +78:480.690 Sensors-Accelerometer.AccX -21800.000000 +78:481.231 Sensors-Accelerometer.AccY -2013.000000 +78:481.754 Sensors-Accelerometer.AccZ -101.000000 +78:500.683 Sensors-Magnetometer.MagX 464.000000 +78:501.171 Sensors-Magnetometer.MagY -119.000000 +78:501.664 Sensors-Magnetometer.MagZ -269.000000 +78:520.690 Sensors-Accelerometer.AccX -18216.000000 +78:521.239 Sensors-Accelerometer.AccY 29612.000000 +78:521.789 Sensors-Accelerometer.AccZ 10420.000000 +78:550.683 Sensors-Magnetometer.MagX 428.000000 +78:551.179 Sensors-Magnetometer.MagY -282.000000 +78:551.673 Sensors-Magnetometer.MagZ -226.000000 +78:560.690 Sensors-Accelerometer.AccX -8335.000000 +78:561.221 Sensors-Accelerometer.AccY 32061.000000 +78:561.774 Sensors-Accelerometer.AccZ 9124.000000 +78:600.683 Sensors-Magnetometer.MagX 400.000000 +78:601.173 Sensors-Magnetometer.MagY -206.000000 +78:601.667 Sensors-Magnetometer.MagZ -335.000000 +78:602.203 Sensors-Accelerometer.AccX -4116.000000 +78:602.724 Sensors-Accelerometer.AccY 9612.000000 +78:603.250 Sensors-Accelerometer.AccZ 6008.000000 +78:640.690 Sensors-Accelerometer.AccX 1871.000000 +78:641.218 Sensors-Accelerometer.AccY -15223.000000 +78:641.774 Sensors-Accelerometer.AccZ 3834.000000 +78:650.684 Sensors-Magnetometer.MagX 385.000000 +78:651.177 Sensors-Magnetometer.MagY 60.000000 +78:651.643 Sensors-Magnetometer.MagZ -413.000000 +78:680.690 Sensors-Accelerometer.AccX 4436.000000 +78:681.207 Sensors-Accelerometer.AccY -32764.000000 +78:681.761 Sensors-Accelerometer.AccZ 6654.000000 +78:700.683 Sensors-Magnetometer.MagX 376.000000 +78:701.178 Sensors-Magnetometer.MagY 206.000000 +78:701.668 Sensors-Magnetometer.MagZ -409.000000 +78:720.690 Sensors-Accelerometer.AccX 1722.000000 +78:721.200 Sensors-Accelerometer.AccY -32192.000000 +78:721.741 Sensors-Accelerometer.AccZ 4729.000000 +78:750.683 Sensors-Magnetometer.MagX 426.000000 +78:751.169 Sensors-Magnetometer.MagY 85.000000 +78:751.633 Sensors-Magnetometer.MagZ -366.000000 +78:760.690 Sensors-Accelerometer.AccX -10145.000000 +78:761.236 Sensors-Accelerometer.AccY -14160.000000 +78:761.774 Sensors-Accelerometer.AccZ 6990.000000 +78:800.683 Sensors-Magnetometer.MagX 440.000000 +78:801.172 Sensors-Magnetometer.MagY -113.000000 +78:801.662 Sensors-Magnetometer.MagZ -325.000000 +78:802.194 Sensors-Accelerometer.AccX -15989.000000 +78:802.746 Sensors-Accelerometer.AccY 8278.000000 +78:803.271 Sensors-Accelerometer.AccZ 9735.000000 +78:840.690 Sensors-Accelerometer.AccX -13664.000000 +78:841.232 Sensors-Accelerometer.AccY 22167.000000 +78:841.782 Sensors-Accelerometer.AccZ 12722.000000 +78:850.684 Sensors-Magnetometer.MagX 429.000000 +78:851.172 Sensors-Magnetometer.MagY -213.000000 +78:851.656 Sensors-Magnetometer.MagZ -306.000000 +78:880.690 Sensors-Accelerometer.AccX -10258.000000 +78:881.230 Sensors-Accelerometer.AccY 17722.000000 +78:881.772 Sensors-Accelerometer.AccZ 10451.000000 +78:900.683 Sensors-Magnetometer.MagX 405.000000 +78:901.175 Sensors-Magnetometer.MagY -135.000000 +78:901.667 Sensors-Magnetometer.MagZ -385.000000 +78:920.690 Sensors-Accelerometer.AccX -3702.000000 +78:921.210 Sensors-Accelerometer.AccY 2542.000000 +78:921.732 Sensors-Accelerometer.AccZ 8254.000000 +78:950.683 Sensors-Magnetometer.MagX 358.000000 +78:951.175 Sensors-Magnetometer.MagY 86.000000 +78:951.644 Sensors-Magnetometer.MagZ -439.000000 +78:960.690 Sensors-Accelerometer.AccX 1866.000000 +78:961.208 Sensors-Accelerometer.AccY -11038.000000 +78:961.755 Sensors-Accelerometer.AccZ 7473.000000 +79:000.683 Sensors-Magnetometer.MagX 321.000000 +79:001.178 Sensors-Magnetometer.MagY 271.000000 +79:001.673 Sensors-Magnetometer.MagZ -434.000000 +79:002.201 Sensors-Accelerometer.AccX 1406.000000 +79:002.719 Sensors-Accelerometer.AccY -20799.000000 +79:003.274 Sensors-Accelerometer.AccZ 7024.000000 +79:040.690 Sensors-Accelerometer.AccX 1197.000000 +79:041.209 Sensors-Accelerometer.AccY -18289.000000 +79:041.756 Sensors-Accelerometer.AccZ 9248.000000 +79:050.684 Sensors-Magnetometer.MagX 308.000000 +79:051.178 Sensors-Magnetometer.MagY 322.000000 +79:051.672 Sensors-Magnetometer.MagZ -424.000000 +79:080.690 Sensors-Accelerometer.AccX -6216.000000 +79:081.212 Sensors-Accelerometer.AccY -11989.000000 +79:081.760 Sensors-Accelerometer.AccZ 9462.000000 +79:120.690 Sensors-Accelerometer.AccX -12163.000000 +79:121.242 Sensors-Accelerometer.AccY -13549.000000 +79:121.787 Sensors-Accelerometer.AccZ 11906.000000 +79:150.683 Sensors-Magnetometer.MagX 360.000000 +79:151.175 Sensors-Magnetometer.MagY 234.000000 +79:151.669 Sensors-Magnetometer.MagZ -400.000000 +79:160.690 Sensors-Accelerometer.AccX -9209.000000 +79:161.217 Sensors-Accelerometer.AccY -12347.000000 +79:161.765 Sensors-Accelerometer.AccZ 11050.000000 +79:200.683 Sensors-Magnetometer.MagX 325.000000 +79:201.178 Sensors-Magnetometer.MagY 183.000000 +79:201.674 Sensors-Magnetometer.MagZ -458.000000 +79:202.205 Sensors-Accelerometer.AccX -4587.000000 +79:202.737 Sensors-Accelerometer.AccY -4210.000000 +79:203.256 Sensors-Accelerometer.AccZ 11907.000000 +79:240.690 Sensors-Accelerometer.AccX -1027.000000 +79:241.210 Sensors-Accelerometer.AccY -1570.000000 +79:241.731 Sensors-Accelerometer.AccZ 12958.000000 +79:280.690 Sensors-Accelerometer.AccX 9840.000000 +79:281.211 Sensors-Accelerometer.AccY 5644.000000 +79:281.732 Sensors-Accelerometer.AccZ 13823.000000 +79:300.683 Sensors-Magnetometer.MagX 378.000000 +79:301.175 Sensors-Magnetometer.MagY 106.000000 +79:301.662 Sensors-Magnetometer.MagZ -414.000000 +79:320.690 Sensors-Accelerometer.AccX 3366.000000 +79:321.209 Sensors-Accelerometer.AccY 214.000000 +79:321.701 Sensors-Accelerometer.AccZ 7384.000000 +79:350.683 Sensors-Magnetometer.MagX 451.000000 +79:351.179 Sensors-Magnetometer.MagY 21.000000 +79:351.644 Sensors-Magnetometer.MagZ -305.000000 +79:360.690 Sensors-Accelerometer.AccX -13068.000000 +79:361.234 Sensors-Accelerometer.AccY -4910.000000 +79:361.758 Sensors-Accelerometer.AccZ 4338.000000 +79:400.683 Sensors-Magnetometer.MagX 488.000000 +79:401.173 Sensors-Magnetometer.MagY -66.000000 +79:401.636 Sensors-Magnetometer.MagZ -229.000000 +79:402.165 Sensors-Accelerometer.AccX -22830.000000 +79:402.716 Sensors-Accelerometer.AccY -5894.000000 +79:403.241 Sensors-Accelerometer.AccZ 7019.000000 +79:440.690 Sensors-Accelerometer.AccX -22057.000000 +79:441.236 Sensors-Accelerometer.AccY -5714.000000 +79:441.760 Sensors-Accelerometer.AccZ 8764.000000 +79:480.690 Sensors-Accelerometer.AccX -23159.000000 +79:481.240 Sensors-Accelerometer.AccY -1553.000000 +79:481.760 Sensors-Accelerometer.AccZ 8555.000000 +79:520.690 Sensors-Accelerometer.AccX -12520.000000 +79:521.232 Sensors-Accelerometer.AccY 4727.000000 +79:521.755 Sensors-Accelerometer.AccZ 9700.000000 +79:550.683 Sensors-Magnetometer.MagX 410.000000 +79:551.175 Sensors-Magnetometer.MagY -75.000000 +79:551.649 Sensors-Magnetometer.MagZ -359.000000 +79:560.690 Sensors-Accelerometer.AccX -5068.000000 +79:561.216 Sensors-Accelerometer.AccY 3085.000000 +79:561.738 Sensors-Accelerometer.AccZ 8425.000000 +79:600.683 Sensors-Magnetometer.MagX 373.000000 +79:601.176 Sensors-Magnetometer.MagY 34.000000 +79:601.640 Sensors-Magnetometer.MagZ -407.000000 +79:602.174 Sensors-Accelerometer.AccX -2591.000000 +79:602.699 Sensors-Accelerometer.AccY -5907.000000 +79:603.226 Sensors-Accelerometer.AccZ 8037.000000 +79:640.690 Sensors-Accelerometer.AccX -9222.000000 +79:641.217 Sensors-Accelerometer.AccY -11397.000000 +79:641.769 Sensors-Accelerometer.AccZ 5515.000000 +79:680.690 Sensors-Accelerometer.AccX -14931.000000 +79:681.240 Sensors-Accelerometer.AccY -22505.000000 +79:681.790 Sensors-Accelerometer.AccZ 6303.000000 +79:720.690 Sensors-Accelerometer.AccX -15766.000000 +79:721.241 Sensors-Accelerometer.AccY -19310.000000 +79:721.792 Sensors-Accelerometer.AccZ 6576.000000 +79:750.683 Sensors-Magnetometer.MagX 265.000000 +79:751.175 Sensors-Magnetometer.MagY -179.000000 +79:751.671 Sensors-Magnetometer.MagZ -431.000000 +79:760.690 Sensors-Accelerometer.AccX -11564.000000 +79:761.236 Sensors-Accelerometer.AccY -9726.000000 +79:761.766 Sensors-Accelerometer.AccZ 6185.000000 +79:800.683 Sensors-Magnetometer.MagX 87.000000 +79:801.152 Sensors-Magnetometer.MagY -425.000000 +79:801.646 Sensors-Magnetometer.MagZ -368.000000 +79:802.173 Sensors-Accelerometer.AccX -4198.000000 +79:802.694 Sensors-Accelerometer.AccY 6095.000000 +79:803.220 Sensors-Accelerometer.AccZ 8792.000000 +79:840.690 Sensors-Accelerometer.AccX -4095.000000 +79:841.220 Sensors-Accelerometer.AccY 10948.000000 +79:841.764 Sensors-Accelerometer.AccZ 9447.000000 +79:850.683 Sensors-Magnetometer.MagX -174.000000 +79:851.178 Sensors-Magnetometer.MagY -510.000000 +79:851.680 Sensors-Magnetometer.MagZ -318.000000 +79:880.690 Sensors-Accelerometer.AccX 3772.000000 +79:881.214 Sensors-Accelerometer.AccY 7472.000000 +79:881.733 Sensors-Accelerometer.AccZ 8813.000000 +79:900.683 Sensors-Magnetometer.MagX -487.000000 +79:901.182 Sensors-Magnetometer.MagY -469.000000 +79:901.676 Sensors-Magnetometer.MagZ -198.000000 +79:920.690 Sensors-Accelerometer.AccX 9930.000000 +79:921.218 Sensors-Accelerometer.AccY 11239.000000 +79:921.771 Sensors-Accelerometer.AccZ 6738.000000 +79:950.683 Sensors-Magnetometer.MagX -686.000000 +79:951.182 Sensors-Magnetometer.MagY -351.000000 +79:951.683 Sensors-Magnetometer.MagZ -70.000000 +79:960.690 Sensors-Accelerometer.AccX 7927.000000 +79:961.220 Sensors-Accelerometer.AccY 9615.000000 +79:961.749 Sensors-Accelerometer.AccZ 7298.000000 +80:000.683 Sensors-Magnetometer.MagX -753.000000 +80:001.175 Sensors-Magnetometer.MagY -276.000000 +80:001.659 Sensors-Magnetometer.MagZ 29.000000 +80:002.154 Sensors-Accelerometer.AccX 14757.000000 +80:002.697 Sensors-Accelerometer.AccY 11252.000000 +80:003.236 Sensors-Accelerometer.AccZ 5256.000000 +80:040.690 Sensors-Accelerometer.AccX 17177.000000 +80:041.233 Sensors-Accelerometer.AccY 9902.000000 +80:041.756 Sensors-Accelerometer.AccZ 3843.000000 +80:050.684 Sensors-Magnetometer.MagX -831.000000 +80:051.178 Sensors-Magnetometer.MagY -125.000000 +80:051.670 Sensors-Magnetometer.MagZ 162.000000 +80:080.690 Sensors-Accelerometer.AccX 20850.000000 +80:081.232 Sensors-Accelerometer.AccY 6399.000000 +80:081.756 Sensors-Accelerometer.AccZ 348.000000 +80:100.683 Sensors-Magnetometer.MagX -842.000000 +80:101.172 Sensors-Magnetometer.MagY 78.000000 +80:101.639 Sensors-Magnetometer.MagZ 275.000000 +80:120.690 Sensors-Accelerometer.AccX 23736.000000 +80:121.237 Sensors-Accelerometer.AccY 3338.000000 +80:121.757 Sensors-Accelerometer.AccZ 266.000000 +80:150.683 Sensors-Magnetometer.MagX -814.000000 +80:151.180 Sensors-Magnetometer.MagY 239.000000 +80:151.677 Sensors-Magnetometer.MagZ 328.000000 +80:160.690 Sensors-Accelerometer.AccX 21453.000000 +80:161.237 Sensors-Accelerometer.AccY -178.000000 +80:161.726 Sensors-Accelerometer.AccZ -335.000000 +80:200.683 Sensors-Magnetometer.MagX -792.000000 +80:201.176 Sensors-Magnetometer.MagY 350.000000 +80:201.668 Sensors-Magnetometer.MagZ 352.000000 +80:202.190 Sensors-Accelerometer.AccX 23054.000000 +80:202.739 Sensors-Accelerometer.AccY -3706.000000 +80:203.258 Sensors-Accelerometer.AccZ -387.000000 +80:240.690 Sensors-Accelerometer.AccX 16336.000000 +80:241.232 Sensors-Accelerometer.AccY -4200.000000 +80:241.744 Sensors-Accelerometer.AccZ 2208.000000 +80:250.684 Sensors-Magnetometer.MagX -782.000000 +80:251.183 Sensors-Magnetometer.MagY 425.000000 +80:251.675 Sensors-Magnetometer.MagZ 324.000000 +80:280.690 Sensors-Accelerometer.AccX 18593.000000 +80:281.240 Sensors-Accelerometer.AccY -2993.000000 +80:281.765 Sensors-Accelerometer.AccZ 2336.000000 +80:300.683 Sensors-Magnetometer.MagX -757.000000 +80:301.178 Sensors-Magnetometer.MagY 501.000000 +80:301.673 Sensors-Magnetometer.MagZ 306.000000 +80:320.690 Sensors-Accelerometer.AccX 15863.000000 +80:321.236 Sensors-Accelerometer.AccY -3177.000000 +80:321.758 Sensors-Accelerometer.AccZ 3709.000000 +80:350.684 Sensors-Magnetometer.MagX -756.000000 +80:351.177 Sensors-Magnetometer.MagY 534.000000 +80:351.672 Sensors-Magnetometer.MagZ 244.000000 +80:360.690 Sensors-Accelerometer.AccX 8354.000000 +80:361.213 Sensors-Accelerometer.AccY -3274.000000 +80:361.736 Sensors-Accelerometer.AccZ 5792.000000 +80:400.725 Sensors-Accelerometer.AccX 9414.000000 +80:401.250 Sensors-Accelerometer.AccY -2741.000000 +80:401.769 Sensors-Accelerometer.AccZ 5361.000000 +80:440.690 Sensors-Accelerometer.AccX 10743.000000 +80:441.234 Sensors-Accelerometer.AccY 2472.000000 +80:441.752 Sensors-Accelerometer.AccZ 4002.000000 +80:450.684 Sensors-Magnetometer.MagX -858.000000 +80:451.174 Sensors-Magnetometer.MagY 362.000000 +80:451.665 Sensors-Magnetometer.MagZ 147.000000 +80:480.690 Sensors-Accelerometer.AccX 12585.000000 +80:481.232 Sensors-Accelerometer.AccY 3829.000000 +80:481.755 Sensors-Accelerometer.AccZ 1904.000000 +80:500.683 Sensors-Magnetometer.MagX -872.000000 +80:501.172 Sensors-Magnetometer.MagY 87.000000 +80:501.639 Sensors-Magnetometer.MagZ 170.000000 +80:520.690 Sensors-Accelerometer.AccX 18917.000000 +80:521.237 Sensors-Accelerometer.AccY 19384.000000 +80:521.784 Sensors-Accelerometer.AccZ 1694.000000 +80:550.683 Sensors-Magnetometer.MagX -736.000000 +80:551.173 Sensors-Magnetometer.MagY -299.000000 +80:551.671 Sensors-Magnetometer.MagZ 180.000000 +80:560.690 Sensors-Accelerometer.AccX 4320.000000 +80:561.207 Sensors-Accelerometer.AccY 10322.000000 +80:561.748 Sensors-Accelerometer.AccZ 1339.000000 +80:600.683 Sensors-Magnetometer.MagX -404.000000 +80:601.175 Sensors-Magnetometer.MagY -573.000000 +80:601.675 Sensors-Magnetometer.MagZ 246.000000 +80:602.203 Sensors-Accelerometer.AccX -4891.000000 +80:602.729 Sensors-Accelerometer.AccY 20429.000000 +80:603.281 Sensors-Accelerometer.AccZ 1064.000000 +80:640.690 Sensors-Accelerometer.AccX -1686.000000 +80:641.202 Sensors-Accelerometer.AccY 22855.000000 +80:641.752 Sensors-Accelerometer.AccZ 644.000000 +80:650.683 Sensors-Magnetometer.MagX -121.000000 +80:651.172 Sensors-Magnetometer.MagY -603.000000 +80:651.667 Sensors-Magnetometer.MagZ 341.000000 +80:680.690 Sensors-Accelerometer.AccX -12417.000000 +80:681.238 Sensors-Accelerometer.AccY 18002.000000 +80:681.784 Sensors-Accelerometer.AccZ 3029.000000 +80:700.683 Sensors-Magnetometer.MagX 203.000000 +80:701.178 Sensors-Magnetometer.MagY -534.000000 +80:701.672 Sensors-Magnetometer.MagZ 329.000000 +80:720.690 Sensors-Accelerometer.AccX -6975.000000 +80:721.211 Sensors-Accelerometer.AccY 7217.000000 +80:721.731 Sensors-Accelerometer.AccZ 3161.000000 +80:750.683 Sensors-Magnetometer.MagX 439.000000 +80:751.181 Sensors-Magnetometer.MagY -346.000000 +80:751.676 Sensors-Magnetometer.MagZ 312.000000 +80:760.690 Sensors-Accelerometer.AccX -13089.000000 +80:761.240 Sensors-Accelerometer.AccY -382.000000 +80:761.736 Sensors-Accelerometer.AccZ 914.000000 +80:800.683 Sensors-Magnetometer.MagX 494.000000 +80:801.174 Sensors-Magnetometer.MagY -182.000000 +80:801.665 Sensors-Magnetometer.MagZ 362.000000 +80:802.190 Sensors-Accelerometer.AccX -13327.000000 +80:802.738 Sensors-Accelerometer.AccY -1514.000000 +80:803.255 Sensors-Accelerometer.AccZ -947.000000 +80:840.690 Sensors-Accelerometer.AccX -13669.000000 +80:841.237 Sensors-Accelerometer.AccY -1626.000000 +80:841.756 Sensors-Accelerometer.AccZ 100.000000 +80:850.684 Sensors-Magnetometer.MagX 486.000000 +80:851.179 Sensors-Magnetometer.MagY -142.000000 +80:851.674 Sensors-Magnetometer.MagZ 419.000000 +80:880.690 Sensors-Accelerometer.AccX -16841.000000 +80:881.233 Sensors-Accelerometer.AccY 1760.000000 +80:881.749 Sensors-Accelerometer.AccZ -1636.000000 +80:900.683 Sensors-Magnetometer.MagX 467.000000 +80:901.175 Sensors-Magnetometer.MagY -83.000000 +80:901.641 Sensors-Magnetometer.MagZ 457.000000 +80:920.690 Sensors-Accelerometer.AccX -16641.000000 +80:921.235 Sensors-Accelerometer.AccY -38.000000 +80:921.706 Sensors-Accelerometer.AccZ -2493.000000 +80:950.683 Sensors-Magnetometer.MagX 493.000000 +80:951.175 Sensors-Magnetometer.MagY -50.000000 +80:951.640 Sensors-Magnetometer.MagZ 447.000000 +80:960.690 Sensors-Accelerometer.AccX -19505.000000 +80:961.236 Sensors-Accelerometer.AccY 1933.000000 +80:961.755 Sensors-Accelerometer.AccZ -1443.000000 +81:000.683 Sensors-Magnetometer.MagX 542.000000 +81:001.176 Sensors-Magnetometer.MagY 13.000000 +81:001.640 Sensors-Magnetometer.MagZ 372.000000 +81:002.165 Sensors-Accelerometer.AccX -9336.000000 +81:002.689 Sensors-Accelerometer.AccY 5973.000000 +81:003.211 Sensors-Accelerometer.AccZ 617.000000 +81:040.690 Sensors-Accelerometer.AccX -14093.000000 +81:041.232 Sensors-Accelerometer.AccY -7381.000000 +81:041.752 Sensors-Accelerometer.AccZ 1273.000000 +81:050.684 Sensors-Magnetometer.MagX 557.000000 +81:051.181 Sensors-Magnetometer.MagY 47.000000 +81:051.653 Sensors-Magnetometer.MagZ 301.000000 +81:080.690 Sensors-Accelerometer.AccX -10075.000000 +81:081.242 Sensors-Accelerometer.AccY -8626.000000 +81:081.766 Sensors-Accelerometer.AccZ 652.000000 +81:120.690 Sensors-Accelerometer.AccX -16836.000000 +81:121.231 Sensors-Accelerometer.AccY -5981.000000 +81:121.753 Sensors-Accelerometer.AccZ 1435.000000 +81:150.683 Sensors-Magnetometer.MagX 544.000000 +81:151.173 Sensors-Magnetometer.MagY -25.000000 +81:151.643 Sensors-Magnetometer.MagZ 302.000000 +81:160.690 Sensors-Accelerometer.AccX -14157.000000 +81:161.236 Sensors-Accelerometer.AccY -4109.000000 +81:161.759 Sensors-Accelerometer.AccZ 139.000000 +81:200.725 Sensors-Accelerometer.AccX -17017.000000 +81:201.273 Sensors-Accelerometer.AccY -420.000000 +81:201.763 Sensors-Accelerometer.AccZ -652.000000 +81:240.690 Sensors-Accelerometer.AccX -17254.000000 +81:241.240 Sensors-Accelerometer.AccY -811.000000 +81:241.746 Sensors-Accelerometer.AccZ -1665.000000 +81:250.684 Sensors-Magnetometer.MagX 495.000000 +81:251.184 Sensors-Magnetometer.MagY -143.000000 +81:251.683 Sensors-Magnetometer.MagZ 363.000000 +81:280.690 Sensors-Accelerometer.AccX -17170.000000 +81:281.237 Sensors-Accelerometer.AccY -1100.000000 +81:281.755 Sensors-Accelerometer.AccZ -2286.000000 +81:300.683 Sensors-Magnetometer.MagX 459.000000 +81:301.177 Sensors-Magnetometer.MagY -201.000000 +81:301.670 Sensors-Magnetometer.MagZ 377.000000 +81:320.690 Sensors-Accelerometer.AccX -17978.000000 +81:321.236 Sensors-Accelerometer.AccY 5.000000 +81:321.676 Sensors-Accelerometer.AccZ -2117.000000 +81:360.690 Sensors-Accelerometer.AccX -16508.000000 +81:361.236 Sensors-Accelerometer.AccY 1771.000000 +81:361.758 Sensors-Accelerometer.AccZ -2396.000000 +81:400.725 Sensors-Accelerometer.AccX -15949.000000 +81:401.277 Sensors-Accelerometer.AccY 1517.000000 +81:401.801 Sensors-Accelerometer.AccZ -2409.000000 +81:440.690 Sensors-Accelerometer.AccX -15354.000000 +81:441.240 Sensors-Accelerometer.AccY 1158.000000 +81:441.759 Sensors-Accelerometer.AccZ -2600.000000 +81:480.690 Sensors-Accelerometer.AccX -14648.000000 +81:481.237 Sensors-Accelerometer.AccY -251.000000 +81:481.736 Sensors-Accelerometer.AccZ -2456.000000 +81:520.690 Sensors-Accelerometer.AccX -15066.000000 +81:521.240 Sensors-Accelerometer.AccY -251.000000 +81:521.737 Sensors-Accelerometer.AccZ -2159.000000 +81:560.690 Sensors-Accelerometer.AccX -15861.000000 +81:561.243 Sensors-Accelerometer.AccY -777.000000 +81:561.744 Sensors-Accelerometer.AccZ -2166.000000 +81:600.725 Sensors-Accelerometer.AccX -15341.000000 +81:601.273 Sensors-Accelerometer.AccY -386.000000 +81:601.768 Sensors-Accelerometer.AccZ -1981.000000 +81:680.690 Sensors-Accelerometer.AccX -15104.000000 +81:681.228 Sensors-Accelerometer.AccY -261.000000 +81:681.722 Sensors-Accelerometer.AccZ -1958.000000 +81:720.690 Sensors-Accelerometer.AccX -15083.000000 +81:721.245 Sensors-Accelerometer.AccY -583.000000 +81:721.745 Sensors-Accelerometer.AccZ -2068.000000 +81:760.690 Sensors-Accelerometer.AccX -15124.000000 +81:761.237 Sensors-Accelerometer.AccY -97.000000 +81:761.707 Sensors-Accelerometer.AccZ -2126.000000 +81:800.725 Sensors-Accelerometer.AccX -15054.000000 +81:801.277 Sensors-Accelerometer.AccY -338.000000 +81:801.770 Sensors-Accelerometer.AccZ -2121.000000 +81:840.690 Sensors-Accelerometer.AccX -15298.000000 +81:841.242 Sensors-Accelerometer.AccY -279.000000 +81:841.739 Sensors-Accelerometer.AccZ -2106.000000 +81:880.690 Sensors-Accelerometer.AccX -15604.000000 +81:881.240 Sensors-Accelerometer.AccY -57.000000 +81:881.713 Sensors-Accelerometer.AccZ -2049.000000 +81:920.690 Sensors-Accelerometer.AccX -15435.000000 +81:921.234 Sensors-Accelerometer.AccY -521.000000 +81:921.723 Sensors-Accelerometer.AccZ -2053.000000 +81:960.690 Sensors-Accelerometer.AccX -15041.000000 +81:961.235 Sensors-Accelerometer.AccY -276.000000 +81:961.719 Sensors-Accelerometer.AccZ -1972.000000 +82:000.725 Sensors-Accelerometer.AccX -14825.000000 +82:001.267 Sensors-Accelerometer.AccY -184.000000 +82:001.752 Sensors-Accelerometer.AccZ -2108.000000 +82:040.690 Sensors-Accelerometer.AccX -15275.000000 +82:041.240 Sensors-Accelerometer.AccY -161.000000 +82:041.728 Sensors-Accelerometer.AccZ -2167.000000 +82:080.690 Sensors-Accelerometer.AccX -15032.000000 +82:081.235 Sensors-Accelerometer.AccY -497.000000 +82:081.727 Sensors-Accelerometer.AccZ -2125.000000 +82:120.690 Sensors-Accelerometer.AccX -15478.000000 +82:121.236 Sensors-Accelerometer.AccY -340.000000 +82:121.723 Sensors-Accelerometer.AccZ -2118.000000 +82:200.725 Sensors-Accelerometer.AccX -15051.000000 +82:201.276 Sensors-Accelerometer.AccY -168.000000 +82:201.759 Sensors-Accelerometer.AccZ -1904.000000 +82:240.690 Sensors-Accelerometer.AccX -15174.000000 +82:241.238 Sensors-Accelerometer.AccY -455.000000 +82:241.731 Sensors-Accelerometer.AccZ -2020.000000 +82:280.690 Sensors-Accelerometer.AccX -15021.000000 +82:281.236 Sensors-Accelerometer.AccY -227.000000 +82:281.729 Sensors-Accelerometer.AccZ -1947.000000 +82:320.690 Sensors-Accelerometer.AccX -15395.000000 +82:321.240 Sensors-Accelerometer.AccY -372.000000 +82:321.729 Sensors-Accelerometer.AccZ -2048.000000 +82:400.725 Sensors-Accelerometer.AccX -15200.000000 +82:401.267 Sensors-Accelerometer.AccY -144.000000 +82:401.754 Sensors-Accelerometer.AccZ -1988.000000 +82:480.690 Sensors-Accelerometer.AccX -15274.000000 +82:481.233 Sensors-Accelerometer.AccY -467.000000 +82:481.726 Sensors-Accelerometer.AccZ -1974.000000 +82:520.690 Sensors-Accelerometer.AccX -15540.000000 +82:521.236 Sensors-Accelerometer.AccY -327.000000 +82:521.735 Sensors-Accelerometer.AccZ -2012.000000 +82:560.690 Sensors-Accelerometer.AccX -15246.000000 +82:561.236 Sensors-Accelerometer.AccY -227.000000 +82:561.728 Sensors-Accelerometer.AccZ -2036.000000 +82:640.690 Sensors-Accelerometer.AccX -14964.000000 +82:641.230 Sensors-Accelerometer.AccY -293.000000 +82:641.722 Sensors-Accelerometer.AccZ -2031.000000 +82:760.690 Sensors-Accelerometer.AccX -15297.000000 +82:761.238 Sensors-Accelerometer.AccY -76.000000 +82:761.705 Sensors-Accelerometer.AccZ -1918.000000 +82:840.690 Sensors-Accelerometer.AccX -15539.000000 +82:841.242 Sensors-Accelerometer.AccY -113.000000 +82:841.734 Sensors-Accelerometer.AccZ -1992.000000 +82:920.690 Sensors-Accelerometer.AccX -15145.000000 +82:921.238 Sensors-Accelerometer.AccY -129.000000 +82:921.729 Sensors-Accelerometer.AccZ -1981.000000 +83:200.725 Sensors-Accelerometer.AccX -15468.000000 +83:201.265 Sensors-Accelerometer.AccY -252.000000 +83:201.752 Sensors-Accelerometer.AccZ -1963.000000 +83:240.690 Sensors-Accelerometer.AccX -15227.000000 +83:241.237 Sensors-Accelerometer.AccY -79.000000 +83:241.704 Sensors-Accelerometer.AccZ -1977.000000 +83:360.690 Sensors-Accelerometer.AccX -15015.000000 +83:361.238 Sensors-Accelerometer.AccY -192.000000 +83:361.723 Sensors-Accelerometer.AccZ -1990.000000 +83:400.683 Sensors-Magnetometer.MagX 440.000000 +83:401.172 Sensors-Magnetometer.MagY -212.000000 +83:401.659 Sensors-Magnetometer.MagZ 383.000000 +83:480.690 Sensors-Accelerometer.AccX -15439.000000 +83:481.240 Sensors-Accelerometer.AccY -39.000000 +83:481.708 Sensors-Accelerometer.AccZ -2128.000000 +83:560.690 Sensors-Accelerometer.AccX -15135.000000 +83:561.238 Sensors-Accelerometer.AccY -200.000000 +83:561.722 Sensors-Accelerometer.AccZ -2082.000000 +83:720.690 Sensors-Accelerometer.AccX -15127.000000 +83:721.241 Sensors-Accelerometer.AccY 7.000000 +83:721.683 Sensors-Accelerometer.AccZ -1950.000000 +83:760.690 Sensors-Accelerometer.AccX -15442.000000 +83:761.234 Sensors-Accelerometer.AccY -14.000000 +83:761.700 Sensors-Accelerometer.AccZ -2013.000000 +83:800.725 Sensors-Accelerometer.AccX -15171.000000 +83:801.279 Sensors-Accelerometer.AccY -71.000000 +83:801.752 Sensors-Accelerometer.AccZ -1980.000000 +83:840.690 Sensors-Accelerometer.AccX -15300.000000 +83:841.237 Sensors-Accelerometer.AccY -306.000000 +83:841.731 Sensors-Accelerometer.AccZ -1993.000000 +83:880.690 Sensors-Accelerometer.AccX -15131.000000 +83:881.241 Sensors-Accelerometer.AccY -81.000000 +83:881.709 Sensors-Accelerometer.AccZ -1947.000000 +83:920.690 Sensors-Accelerometer.AccX -15037.000000 +83:921.238 Sensors-Accelerometer.AccY 200.000000 +83:921.722 Sensors-Accelerometer.AccZ -2072.000000 +83:960.690 Sensors-Accelerometer.AccX -15276.000000 +83:961.240 Sensors-Accelerometer.AccY -35.000000 +83:961.709 Sensors-Accelerometer.AccZ -2072.000000 +84:120.690 Sensors-Accelerometer.AccX -15062.000000 +84:121.240 Sensors-Accelerometer.AccY 25.000000 +84:121.703 Sensors-Accelerometer.AccZ -2074.000000 +84:160.690 Sensors-Accelerometer.AccX -15509.000000 +84:161.236 Sensors-Accelerometer.AccY 244.000000 +84:161.723 Sensors-Accelerometer.AccZ -2153.000000 +84:200.725 Sensors-Accelerometer.AccX -15203.000000 +84:201.277 Sensors-Accelerometer.AccY 862.000000 +84:201.769 Sensors-Accelerometer.AccZ -2290.000000 +84:240.690 Sensors-Accelerometer.AccX -15879.000000 +84:241.237 Sensors-Accelerometer.AccY 732.000000 +84:241.730 Sensors-Accelerometer.AccZ -2244.000000 +84:280.690 Sensors-Accelerometer.AccX -15243.000000 +84:281.239 Sensors-Accelerometer.AccY 819.000000 +84:281.738 Sensors-Accelerometer.AccZ -2136.000000 +84:360.690 Sensors-Accelerometer.AccX -15069.000000 +84:361.240 Sensors-Accelerometer.AccY 508.000000 +84:361.732 Sensors-Accelerometer.AccZ -2187.000000 +84:480.690 Sensors-Accelerometer.AccX -15393.000000 +84:481.232 Sensors-Accelerometer.AccY 724.000000 +84:481.717 Sensors-Accelerometer.AccZ -2227.000000 +84:520.690 Sensors-Accelerometer.AccX -15316.000000 +84:521.235 Sensors-Accelerometer.AccY 929.000000 +84:521.726 Sensors-Accelerometer.AccZ -2262.000000 +84:640.690 Sensors-Accelerometer.AccX -15061.000000 +84:641.233 Sensors-Accelerometer.AccY 930.000000 +84:641.722 Sensors-Accelerometer.AccZ -2296.000000 +84:680.690 Sensors-Accelerometer.AccX -15402.000000 +84:681.232 Sensors-Accelerometer.AccY 865.000000 +84:681.726 Sensors-Accelerometer.AccZ -2245.000000 +84:800.725 Sensors-Accelerometer.AccX -15137.000000 +84:801.269 Sensors-Accelerometer.AccY 809.000000 +84:801.759 Sensors-Accelerometer.AccZ -2262.000000 +85:000.725 Sensors-Accelerometer.AccX -15307.000000 +85:001.276 Sensors-Accelerometer.AccY 1051.000000 +85:001.791 Sensors-Accelerometer.AccZ -2179.000000 +85:080.690 Sensors-Accelerometer.AccX -15289.000000 +85:081.238 Sensors-Accelerometer.AccY 694.000000 +85:081.734 Sensors-Accelerometer.AccZ -2092.000000 +85:200.725 Sensors-Accelerometer.AccX -15054.000000 +85:201.268 Sensors-Accelerometer.AccY 795.000000 +85:201.760 Sensors-Accelerometer.AccZ -2249.000000 +85:240.690 Sensors-Accelerometer.AccX -15283.000000 +85:241.235 Sensors-Accelerometer.AccY 860.000000 +85:241.725 Sensors-Accelerometer.AccZ -2250.000000 +85:480.690 Sensors-Accelerometer.AccX -15437.000000 +85:481.239 Sensors-Accelerometer.AccY 659.000000 +85:481.733 Sensors-Accelerometer.AccZ -2162.000000 +85:600.725 Sensors-Accelerometer.AccX -15051.000000 +85:601.275 Sensors-Accelerometer.AccY 605.000000 +85:601.770 Sensors-Accelerometer.AccZ -2219.000000 +85:720.690 Sensors-Accelerometer.AccX -15483.000000 +85:721.237 Sensors-Accelerometer.AccY 880.000000 +85:721.729 Sensors-Accelerometer.AccZ -2230.000000 +85:800.725 Sensors-Accelerometer.AccX -15219.000000 +85:801.276 Sensors-Accelerometer.AccY 698.000000 +85:801.764 Sensors-Accelerometer.AccZ -2074.000000 +85:850.683 Sensors-Magnetometer.MagX 428.000000 +85:851.174 Sensors-Magnetometer.MagY -233.000000 +85:851.667 Sensors-Magnetometer.MagZ 382.000000 +85:880.690 Sensors-Accelerometer.AccX -15214.000000 +85:881.239 Sensors-Accelerometer.AccY 494.000000 +85:881.733 Sensors-Accelerometer.AccZ -2165.000000 +85:960.690 Sensors-Accelerometer.AccX -15290.000000 +85:961.237 Sensors-Accelerometer.AccY 811.000000 +85:961.740 Sensors-Accelerometer.AccZ -2178.000000 +86:040.690 Sensors-Accelerometer.AccX -15016.000000 +86:041.230 Sensors-Accelerometer.AccY 1057.000000 +86:041.743 Sensors-Accelerometer.AccZ -2074.000000 +86:080.690 Sensors-Accelerometer.AccX -15148.000000 +86:081.234 Sensors-Accelerometer.AccY 605.000000 +86:081.725 Sensors-Accelerometer.AccZ -2210.000000 +86:120.690 Sensors-Accelerometer.AccX -15212.000000 +86:121.235 Sensors-Accelerometer.AccY 2418.000000 +86:121.752 Sensors-Accelerometer.AccZ -2960.000000 +86:150.683 Sensors-Magnetometer.MagX 311.000000 +86:151.178 Sensors-Magnetometer.MagY -356.000000 +86:151.669 Sensors-Magnetometer.MagZ 427.000000 +86:160.690 Sensors-Accelerometer.AccX -14763.000000 +86:161.238 Sensors-Accelerometer.AccY 6948.000000 +86:161.755 Sensors-Accelerometer.AccZ -4634.000000 +86:200.683 Sensors-Magnetometer.MagX 125.000000 +86:201.171 Sensors-Magnetometer.MagY -447.000000 +86:201.664 Sensors-Magnetometer.MagZ 475.000000 +86:202.195 Sensors-Accelerometer.AccX -12098.000000 +86:202.738 Sensors-Accelerometer.AccY 10638.000000 +86:203.285 Sensors-Accelerometer.AccZ -5573.000000 +86:240.690 Sensors-Accelerometer.AccX -7234.000000 +86:241.210 Sensors-Accelerometer.AccY 14831.000000 +86:241.758 Sensors-Accelerometer.AccZ -5888.000000 +86:250.683 Sensors-Magnetometer.MagX -137.000000 +86:251.173 Sensors-Magnetometer.MagY -502.000000 +86:251.671 Sensors-Magnetometer.MagZ 483.000000 +86:280.690 Sensors-Accelerometer.AccX -9743.000000 +86:281.216 Sensors-Accelerometer.AccY 17031.000000 +86:281.765 Sensors-Accelerometer.AccZ -8148.000000 +86:300.683 Sensors-Magnetometer.MagX -265.000000 +86:301.175 Sensors-Magnetometer.MagY -467.000000 +86:301.669 Sensors-Magnetometer.MagZ 492.000000 +86:320.690 Sensors-Accelerometer.AccX -4793.000000 +86:321.213 Sensors-Accelerometer.AccY 10509.000000 +86:321.756 Sensors-Accelerometer.AccZ -7957.000000 +86:360.690 Sensors-Accelerometer.AccX -3458.000000 +86:361.210 Sensors-Accelerometer.AccY 13165.000000 +86:361.755 Sensors-Accelerometer.AccZ -6963.000000 +86:400.725 Sensors-Accelerometer.AccX -3804.000000 +86:401.242 Sensors-Accelerometer.AccY 13099.000000 +86:401.796 Sensors-Accelerometer.AccZ -8247.000000 +86:440.690 Sensors-Accelerometer.AccX -3298.000000 +86:441.205 Sensors-Accelerometer.AccY 13339.000000 +86:441.749 Sensors-Accelerometer.AccZ -8860.000000 +86:480.690 Sensors-Accelerometer.AccX -5765.000000 +86:481.211 Sensors-Accelerometer.AccY 14038.000000 +86:481.758 Sensors-Accelerometer.AccZ -9571.000000 +86:520.690 Sensors-Accelerometer.AccX -5400.000000 +86:521.210 Sensors-Accelerometer.AccY 13345.000000 +86:521.754 Sensors-Accelerometer.AccZ -10293.000000 +86:550.684 Sensors-Magnetometer.MagX -314.000000 +86:551.175 Sensors-Magnetometer.MagY -418.000000 +86:551.664 Sensors-Magnetometer.MagZ 555.000000 +86:560.691 Sensors-Accelerometer.AccX -5269.000000 +86:561.208 Sensors-Accelerometer.AccY 13890.000000 +86:561.750 Sensors-Accelerometer.AccZ -10728.000000 +86:600.725 Sensors-Accelerometer.AccX -3330.000000 +86:601.241 Sensors-Accelerometer.AccY 10703.000000 +86:601.787 Sensors-Accelerometer.AccZ -10916.000000 +86:640.690 Sensors-Accelerometer.AccX 711.000000 +86:641.185 Sensors-Accelerometer.AccY 11265.000000 +86:641.726 Sensors-Accelerometer.AccZ -11106.000000 +86:650.683 Sensors-Magnetometer.MagX -424.000000 +86:651.171 Sensors-Magnetometer.MagY -289.000000 +86:651.662 Sensors-Magnetometer.MagZ 608.000000 +86:680.690 Sensors-Accelerometer.AccX -571.000000 +86:681.186 Sensors-Accelerometer.AccY 9033.000000 +86:681.709 Sensors-Accelerometer.AccZ -12805.000000 +86:700.683 Sensors-Magnetometer.MagX -509.000000 +86:701.178 Sensors-Magnetometer.MagY -171.000000 +86:701.671 Sensors-Magnetometer.MagZ 641.000000 +86:720.690 Sensors-Accelerometer.AccX 6313.000000 +86:721.210 Sensors-Accelerometer.AccY 8713.000000 +86:721.734 Sensors-Accelerometer.AccZ -15866.000000 +86:750.683 Sensors-Magnetometer.MagX -576.000000 +86:751.173 Sensors-Magnetometer.MagY -24.000000 +86:751.638 Sensors-Magnetometer.MagZ 636.000000 +86:760.690 Sensors-Accelerometer.AccX 5945.000000 +86:761.212 Sensors-Accelerometer.AccY 6378.000000 +86:761.733 Sensors-Accelerometer.AccZ -15377.000000 +86:800.683 Sensors-Magnetometer.MagX -629.000000 +86:801.179 Sensors-Magnetometer.MagY 178.000000 +86:801.668 Sensors-Magnetometer.MagZ 590.000000 +86:802.195 Sensors-Accelerometer.AccX 5091.000000 +86:802.722 Sensors-Accelerometer.AccY 8333.000000 +86:803.242 Sensors-Accelerometer.AccZ -17317.000000 +86:840.690 Sensors-Accelerometer.AccX 4040.000000 +86:841.203 Sensors-Accelerometer.AccY 2467.000000 +86:841.722 Sensors-Accelerometer.AccZ -16968.000000 +86:850.684 Sensors-Magnetometer.MagX -642.000000 +86:851.173 Sensors-Magnetometer.MagY 359.000000 +86:851.666 Sensors-Magnetometer.MagZ 522.000000 +86:880.690 Sensors-Accelerometer.AccX 5205.000000 +86:881.207 Sensors-Accelerometer.AccY 1529.000000 +86:881.724 Sensors-Accelerometer.AccZ -17265.000000 +86:900.683 Sensors-Magnetometer.MagX -644.000000 +86:901.173 Sensors-Magnetometer.MagY 458.000000 +86:901.666 Sensors-Magnetometer.MagZ 470.000000 +86:920.690 Sensors-Accelerometer.AccX 3305.000000 +86:921.207 Sensors-Accelerometer.AccY -1671.000000 +86:921.729 Sensors-Accelerometer.AccZ -15390.000000 +86:960.690 Sensors-Accelerometer.AccX 8270.000000 +86:961.211 Sensors-Accelerometer.AccY -2065.000000 +86:961.726 Sensors-Accelerometer.AccZ -12683.000000 +87:000.725 Sensors-Accelerometer.AccX 83.000000 +87:001.193 Sensors-Accelerometer.AccY -2427.000000 +87:001.717 Sensors-Accelerometer.AccZ -13503.000000 +87:040.690 Sensors-Accelerometer.AccX -2579.000000 +87:041.207 Sensors-Accelerometer.AccY -2463.000000 +87:041.724 Sensors-Accelerometer.AccZ -13576.000000 +87:050.683 Sensors-Magnetometer.MagX -549.000000 +87:051.172 Sensors-Magnetometer.MagY 501.000000 +87:051.665 Sensors-Magnetometer.MagZ 545.000000 +87:080.690 Sensors-Accelerometer.AccX 2675.000000 +87:081.210 Sensors-Accelerometer.AccY -72.000000 +87:081.671 Sensors-Accelerometer.AccZ -14938.000000 +87:100.683 Sensors-Magnetometer.MagX -413.000000 +87:101.173 Sensors-Magnetometer.MagY 498.000000 +87:101.668 Sensors-Magnetometer.MagZ 635.000000 +87:120.690 Sensors-Accelerometer.AccX 94.000000 +87:121.159 Sensors-Accelerometer.AccY -2896.000000 +87:121.673 Sensors-Accelerometer.AccZ -17294.000000 +87:150.683 Sensors-Magnetometer.MagX -316.000000 +87:151.176 Sensors-Magnetometer.MagY 476.000000 +87:151.670 Sensors-Magnetometer.MagZ 679.000000 +87:160.690 Sensors-Accelerometer.AccX -4571.000000 +87:161.219 Sensors-Accelerometer.AccY -2995.000000 +87:161.742 Sensors-Accelerometer.AccZ -17995.000000 +87:200.683 Sensors-Magnetometer.MagX -223.000000 +87:201.172 Sensors-Magnetometer.MagY 451.000000 +87:201.662 Sensors-Magnetometer.MagZ 720.000000 +87:202.185 Sensors-Accelerometer.AccX -12413.000000 +87:202.731 Sensors-Accelerometer.AccY -1415.000000 +87:203.251 Sensors-Accelerometer.AccZ -16626.000000 +87:240.690 Sensors-Accelerometer.AccX -8014.000000 +87:241.212 Sensors-Accelerometer.AccY -4197.000000 +87:241.728 Sensors-Accelerometer.AccZ -17146.000000 +87:250.683 Sensors-Magnetometer.MagX -62.000000 +87:251.148 Sensors-Magnetometer.MagY 405.000000 +87:251.641 Sensors-Magnetometer.MagZ 739.000000 +87:280.690 Sensors-Accelerometer.AccX -9955.000000 +87:281.217 Sensors-Accelerometer.AccY -1142.000000 +87:281.734 Sensors-Accelerometer.AccZ -10079.000000 +87:300.683 Sensors-Magnetometer.MagX 139.000000 +87:301.174 Sensors-Magnetometer.MagY 377.000000 +87:301.663 Sensors-Magnetometer.MagZ 695.000000 +87:320.690 Sensors-Accelerometer.AccX -7561.000000 +87:321.214 Sensors-Accelerometer.AccY -2029.000000 +87:321.734 Sensors-Accelerometer.AccZ -10952.000000 +87:350.683 Sensors-Magnetometer.MagX 300.000000 +87:351.175 Sensors-Magnetometer.MagY 427.000000 +87:351.668 Sensors-Magnetometer.MagZ 580.000000 +87:360.690 Sensors-Accelerometer.AccX -9913.000000 +87:361.211 Sensors-Accelerometer.AccY -5153.000000 +87:361.729 Sensors-Accelerometer.AccZ -6140.000000 +87:400.683 Sensors-Magnetometer.MagX 373.000000 +87:401.174 Sensors-Magnetometer.MagY 527.000000 +87:401.665 Sensors-Magnetometer.MagZ 417.000000 +87:402.192 Sensors-Accelerometer.AccX -8079.000000 +87:402.717 Sensors-Accelerometer.AccY -4879.000000 +87:403.243 Sensors-Accelerometer.AccZ -2519.000000 +87:440.690 Sensors-Accelerometer.AccX 1819.000000 +87:441.210 Sensors-Accelerometer.AccY -8789.000000 +87:441.732 Sensors-Accelerometer.AccZ 3088.000000 +87:450.684 Sensors-Magnetometer.MagX 336.000000 +87:451.165 Sensors-Magnetometer.MagY 644.000000 +87:451.655 Sensors-Magnetometer.MagZ 279.000000 +87:480.690 Sensors-Accelerometer.AccX -1067.000000 +87:481.209 Sensors-Accelerometer.AccY -16354.000000 +87:481.759 Sensors-Accelerometer.AccZ 6812.000000 +87:500.683 Sensors-Magnetometer.MagX 247.000000 +87:501.178 Sensors-Magnetometer.MagY 722.000000 +87:501.668 Sensors-Magnetometer.MagZ 259.000000 +87:520.690 Sensors-Accelerometer.AccX 374.000000 +87:521.183 Sensors-Accelerometer.AccY -17870.000000 +87:521.733 Sensors-Accelerometer.AccZ 5933.000000 +87:550.684 Sensors-Magnetometer.MagX 198.000000 +87:551.180 Sensors-Magnetometer.MagY 728.000000 +87:551.677 Sensors-Magnetometer.MagZ 332.000000 +87:560.690 Sensors-Accelerometer.AccX -4727.000000 +87:561.212 Sensors-Accelerometer.AccY -21446.000000 +87:561.763 Sensors-Accelerometer.AccZ 4388.000000 +87:600.683 Sensors-Magnetometer.MagX 121.000000 +87:601.173 Sensors-Magnetometer.MagY 735.000000 +87:601.669 Sensors-Magnetometer.MagZ 414.000000 +87:602.200 Sensors-Accelerometer.AccX -10821.000000 +87:602.746 Sensors-Accelerometer.AccY -15629.000000 +87:603.297 Sensors-Accelerometer.AccZ -1126.000000 +87:640.690 Sensors-Accelerometer.AccX -7431.000000 +87:641.217 Sensors-Accelerometer.AccY -17652.000000 +87:641.765 Sensors-Accelerometer.AccZ -1901.000000 +87:650.683 Sensors-Magnetometer.MagX -30.000000 +87:651.152 Sensors-Magnetometer.MagY 759.000000 +87:651.653 Sensors-Magnetometer.MagZ 445.000000 +87:680.690 Sensors-Accelerometer.AccX -5936.000000 +87:681.206 Sensors-Accelerometer.AccY -18786.000000 +87:681.751 Sensors-Accelerometer.AccZ -646.000000 +87:700.683 Sensors-Magnetometer.MagX -160.000000 +87:701.166 Sensors-Magnetometer.MagY 789.000000 +87:701.658 Sensors-Magnetometer.MagZ 424.000000 +87:720.690 Sensors-Accelerometer.AccX -4672.000000 +87:721.205 Sensors-Accelerometer.AccY -14915.000000 +87:721.754 Sensors-Accelerometer.AccZ -3302.000000 +87:750.683 Sensors-Magnetometer.MagX -268.000000 +87:751.174 Sensors-Magnetometer.MagY 802.000000 +87:751.668 Sensors-Magnetometer.MagZ 384.000000 +87:760.690 Sensors-Accelerometer.AccX -1490.000000 +87:761.207 Sensors-Accelerometer.AccY -16072.000000 +87:761.751 Sensors-Accelerometer.AccZ -379.000000 +87:800.683 Sensors-Magnetometer.MagX -378.000000 +87:801.176 Sensors-Magnetometer.MagY 811.000000 +87:801.680 Sensors-Magnetometer.MagZ 308.000000 +87:802.209 Sensors-Accelerometer.AccX 39.000000 +87:802.679 Sensors-Accelerometer.AccY -12429.000000 +87:803.228 Sensors-Accelerometer.AccZ -1654.000000 +87:840.690 Sensors-Accelerometer.AccX -697.000000 +87:841.181 Sensors-Accelerometer.AccY -13792.000000 +87:841.722 Sensors-Accelerometer.AccZ -3277.000000 +87:850.683 Sensors-Magnetometer.MagX -456.000000 +87:851.174 Sensors-Magnetometer.MagY 814.000000 +87:851.672 Sensors-Magnetometer.MagZ 246.000000 +87:880.690 Sensors-Accelerometer.AccX 2508.000000 +87:881.211 Sensors-Accelerometer.AccY -19443.000000 +87:881.764 Sensors-Accelerometer.AccZ -1391.000000 +87:900.683 Sensors-Magnetometer.MagX -511.000000 +87:901.183 Sensors-Magnetometer.MagY 802.000000 +87:901.675 Sensors-Magnetometer.MagZ 147.000000 +87:920.690 Sensors-Accelerometer.AccX 605.000000 +87:921.183 Sensors-Accelerometer.AccY -12566.000000 +87:921.736 Sensors-Accelerometer.AccZ -2810.000000 +87:950.684 Sensors-Magnetometer.MagX -551.000000 +87:951.179 Sensors-Magnetometer.MagY 784.000000 +87:951.674 Sensors-Magnetometer.MagZ 45.000000 +87:960.690 Sensors-Accelerometer.AccX 4851.000000 +87:961.217 Sensors-Accelerometer.AccY -12272.000000 +87:961.766 Sensors-Accelerometer.AccZ -2667.000000 +88:000.684 Sensors-Magnetometer.MagX -562.000000 +88:001.173 Sensors-Magnetometer.MagY 753.000000 +88:001.669 Sensors-Magnetometer.MagZ -70.000000 +88:002.172 Sensors-Accelerometer.AccX 5277.000000 +88:002.690 Sensors-Accelerometer.AccY -21026.000000 +88:003.228 Sensors-Accelerometer.AccZ 635.000000 +88:040.690 Sensors-Accelerometer.AccX 653.000000 +88:041.185 Sensors-Accelerometer.AccY -20052.000000 +88:041.733 Sensors-Accelerometer.AccZ 1218.000000 +88:050.684 Sensors-Magnetometer.MagX -538.000000 +88:051.176 Sensors-Magnetometer.MagY 722.000000 +88:051.671 Sensors-Magnetometer.MagZ -200.000000 +88:080.690 Sensors-Accelerometer.AccX -3814.000000 +88:081.212 Sensors-Accelerometer.AccY -18124.000000 +88:081.754 Sensors-Accelerometer.AccZ -941.000000 +88:100.684 Sensors-Magnetometer.MagX -496.000000 +88:101.173 Sensors-Magnetometer.MagY 675.000000 +88:101.669 Sensors-Magnetometer.MagZ -299.000000 +88:120.690 Sensors-Accelerometer.AccX -2509.000000 +88:121.210 Sensors-Accelerometer.AccY -14090.000000 +88:121.759 Sensors-Accelerometer.AccZ 107.000000 +88:150.683 Sensors-Magnetometer.MagX -491.000000 +88:151.183 Sensors-Magnetometer.MagY 608.000000 +88:151.674 Sensors-Magnetometer.MagZ -394.000000 +88:160.690 Sensors-Accelerometer.AccX -2042.000000 +88:161.209 Sensors-Accelerometer.AccY -16793.000000 +88:161.752 Sensors-Accelerometer.AccZ 6048.000000 +88:200.683 Sensors-Magnetometer.MagX -469.000000 +88:201.174 Sensors-Magnetometer.MagY 527.000000 +88:201.665 Sensors-Magnetometer.MagZ -457.000000 +88:202.195 Sensors-Accelerometer.AccX 346.000000 +88:202.687 Sensors-Accelerometer.AccY -12823.000000 +88:203.231 Sensors-Accelerometer.AccZ 5231.000000 +88:240.690 Sensors-Accelerometer.AccX -252.000000 +88:241.179 Sensors-Accelerometer.AccY -8586.000000 +88:241.700 Sensors-Accelerometer.AccZ 2176.000000 +88:280.690 Sensors-Accelerometer.AccX -2700.000000 +88:281.211 Sensors-Accelerometer.AccY -12899.000000 +88:281.761 Sensors-Accelerometer.AccZ 7418.000000 +88:300.683 Sensors-Magnetometer.MagX -479.000000 +88:301.183 Sensors-Magnetometer.MagY 468.000000 +88:301.674 Sensors-Magnetometer.MagZ -499.000000 +88:320.690 Sensors-Accelerometer.AccX 1568.000000 +88:321.200 Sensors-Accelerometer.AccY -11660.000000 +88:321.746 Sensors-Accelerometer.AccZ 7093.000000 +88:360.690 Sensors-Accelerometer.AccX 3764.000000 +88:361.212 Sensors-Accelerometer.AccY -6413.000000 +88:361.731 Sensors-Accelerometer.AccZ 5581.000000 +88:400.683 Sensors-Magnetometer.MagX -539.000000 +88:401.176 Sensors-Magnetometer.MagY 518.000000 +88:401.670 Sensors-Magnetometer.MagZ -452.000000 +88:402.196 Sensors-Accelerometer.AccX -493.000000 +88:402.687 Sensors-Accelerometer.AccY -8718.000000 +88:403.209 Sensors-Accelerometer.AccZ 8874.000000 +88:440.690 Sensors-Accelerometer.AccX 4263.000000 +88:441.210 Sensors-Accelerometer.AccY -16255.000000 +88:441.760 Sensors-Accelerometer.AccZ 12196.000000 +88:450.684 Sensors-Magnetometer.MagX -560.000000 +88:451.175 Sensors-Magnetometer.MagY 610.000000 +88:451.671 Sensors-Magnetometer.MagZ -383.000000 +88:480.690 Sensors-Accelerometer.AccX 2954.000000 +88:481.205 Sensors-Accelerometer.AccY -14705.000000 +88:481.747 Sensors-Accelerometer.AccZ 10293.000000 +88:500.683 Sensors-Magnetometer.MagX -531.000000 +88:501.175 Sensors-Magnetometer.MagY 681.000000 +88:501.665 Sensors-Magnetometer.MagZ -336.000000 +88:520.690 Sensors-Accelerometer.AccX -1629.000000 +88:521.207 Sensors-Accelerometer.AccY -9881.000000 +88:521.731 Sensors-Accelerometer.AccZ 6972.000000 +88:550.683 Sensors-Magnetometer.MagX -431.000000 +88:551.176 Sensors-Magnetometer.MagY 772.000000 +88:551.671 Sensors-Magnetometer.MagZ -259.000000 +88:560.690 Sensors-Accelerometer.AccX 2171.000000 +88:561.207 Sensors-Accelerometer.AccY -12793.000000 +88:561.753 Sensors-Accelerometer.AccZ 6849.000000 +88:600.683 Sensors-Magnetometer.MagX -294.000000 +88:601.176 Sensors-Magnetometer.MagY 852.000000 +88:601.661 Sensors-Magnetometer.MagZ -152.000000 +88:602.186 Sensors-Accelerometer.AccX 5661.000000 +88:602.705 Sensors-Accelerometer.AccY -14962.000000 +88:603.249 Sensors-Accelerometer.AccZ 8957.000000 +88:640.690 Sensors-Accelerometer.AccX 5963.000000 +88:641.212 Sensors-Accelerometer.AccY -14438.000000 +88:641.755 Sensors-Accelerometer.AccZ 8913.000000 +88:650.683 Sensors-Magnetometer.MagX -115.000000 +88:651.175 Sensors-Magnetometer.MagY 884.000000 +88:651.666 Sensors-Magnetometer.MagZ -95.000000 +88:680.690 Sensors-Accelerometer.AccX -1048.000000 +88:681.206 Sensors-Accelerometer.AccY -14237.000000 +88:681.753 Sensors-Accelerometer.AccZ 8527.000000 +88:700.683 Sensors-Magnetometer.MagX 139.000000 +88:701.176 Sensors-Magnetometer.MagY 842.000000 +88:701.666 Sensors-Magnetometer.MagZ 6.000000 +88:720.690 Sensors-Accelerometer.AccX -4691.000000 +88:721.214 Sensors-Accelerometer.AccY -15353.000000 +88:721.765 Sensors-Accelerometer.AccZ 9666.000000 +88:750.683 Sensors-Magnetometer.MagX 345.000000 +88:751.176 Sensors-Magnetometer.MagY 708.000000 +88:751.668 Sensors-Magnetometer.MagZ 53.000000 +88:760.690 Sensors-Accelerometer.AccX -11210.000000 +88:761.234 Sensors-Accelerometer.AccY -12275.000000 +88:761.787 Sensors-Accelerometer.AccZ 10608.000000 +88:800.683 Sensors-Magnetometer.MagX 485.000000 +88:801.174 Sensors-Magnetometer.MagY 538.000000 +88:801.666 Sensors-Magnetometer.MagZ 41.000000 +88:802.162 Sensors-Accelerometer.AccX -11689.000000 +88:802.708 Sensors-Accelerometer.AccY -11575.000000 +88:803.255 Sensors-Accelerometer.AccZ 9214.000000 +88:840.690 Sensors-Accelerometer.AccX -13730.000000 +88:841.232 Sensors-Accelerometer.AccY -12103.000000 +88:841.783 Sensors-Accelerometer.AccZ 9371.000000 +88:850.684 Sensors-Magnetometer.MagX 547.000000 +88:851.179 Sensors-Magnetometer.MagY 458.000000 +88:851.675 Sensors-Magnetometer.MagZ 33.000000 +88:880.690 Sensors-Accelerometer.AccX -10283.000000 +88:881.238 Sensors-Accelerometer.AccY -5100.000000 +88:881.764 Sensors-Accelerometer.AccZ 9204.000000 +88:900.683 Sensors-Magnetometer.MagX 595.000000 +88:901.179 Sensors-Magnetometer.MagY 286.000000 +88:901.673 Sensors-Magnetometer.MagZ -54.000000 +88:920.690 Sensors-Accelerometer.AccX -9189.000000 +88:921.216 Sensors-Accelerometer.AccY -1869.000000 +88:921.737 Sensors-Accelerometer.AccZ 9111.000000 +88:950.683 Sensors-Magnetometer.MagX 593.000000 +88:951.179 Sensors-Magnetometer.MagY 143.000000 +88:951.676 Sensors-Magnetometer.MagZ -159.000000 +88:960.690 Sensors-Accelerometer.AccX -9698.000000 +88:961.215 Sensors-Accelerometer.AccY -2404.000000 +88:961.732 Sensors-Accelerometer.AccZ 10035.000000 +89:000.683 Sensors-Magnetometer.MagX 533.000000 +89:001.173 Sensors-Magnetometer.MagY 46.000000 +89:001.639 Sensors-Magnetometer.MagZ -271.000000 +89:002.168 Sensors-Accelerometer.AccX -8624.000000 +89:002.689 Sensors-Accelerometer.AccY -646.000000 +89:003.185 Sensors-Accelerometer.AccZ 13109.000000 +89:040.690 Sensors-Accelerometer.AccX -6062.000000 +89:041.218 Sensors-Accelerometer.AccY -1338.000000 +89:041.735 Sensors-Accelerometer.AccZ 12923.000000 +89:050.683 Sensors-Magnetometer.MagX 465.000000 +89:051.176 Sensors-Magnetometer.MagY 34.000000 +89:051.641 Sensors-Magnetometer.MagZ -393.000000 +89:080.690 Sensors-Accelerometer.AccX -1826.000000 +89:081.209 Sensors-Accelerometer.AccY -4566.000000 +89:081.738 Sensors-Accelerometer.AccZ 14034.000000 +89:100.683 Sensors-Magnetometer.MagX 384.000000 +89:101.171 Sensors-Magnetometer.MagY 75.000000 +89:101.641 Sensors-Magnetometer.MagZ -452.000000 +89:120.690 Sensors-Accelerometer.AccX -3306.000000 +89:121.208 Sensors-Accelerometer.AccY -6244.000000 +89:121.730 Sensors-Accelerometer.AccZ 13736.000000 +89:150.683 Sensors-Magnetometer.MagX 362.000000 +89:151.174 Sensors-Magnetometer.MagY 147.000000 +89:151.668 Sensors-Magnetometer.MagZ -469.000000 +89:160.690 Sensors-Accelerometer.AccX -5983.000000 +89:161.216 Sensors-Accelerometer.AccY -8642.000000 +89:161.736 Sensors-Accelerometer.AccZ 15260.000000 +89:200.683 Sensors-Magnetometer.MagX 337.000000 +89:201.170 Sensors-Magnetometer.MagY 217.000000 +89:201.660 Sensors-Magnetometer.MagZ -474.000000 +89:202.188 Sensors-Accelerometer.AccX -5635.000000 +89:202.713 Sensors-Accelerometer.AccY -8586.000000 +89:203.235 Sensors-Accelerometer.AccZ 13792.000000 +89:240.690 Sensors-Accelerometer.AccX -6998.000000 +89:241.217 Sensors-Accelerometer.AccY -9206.000000 +89:241.746 Sensors-Accelerometer.AccZ 10811.000000 +89:250.684 Sensors-Magnetometer.MagX 313.000000 +89:251.179 Sensors-Magnetometer.MagY 280.000000 +89:251.672 Sensors-Magnetometer.MagZ -465.000000 +89:280.690 Sensors-Accelerometer.AccX -3603.000000 +89:281.215 Sensors-Accelerometer.AccY -11864.000000 +89:281.759 Sensors-Accelerometer.AccZ 7437.000000 +89:300.683 Sensors-Magnetometer.MagX 259.000000 +89:301.174 Sensors-Magnetometer.MagY 386.000000 +89:301.666 Sensors-Magnetometer.MagZ -470.000000 +89:320.690 Sensors-Accelerometer.AccX -2086.000000 +89:321.211 Sensors-Accelerometer.AccY -12494.000000 +89:321.757 Sensors-Accelerometer.AccZ 4701.000000 +89:350.683 Sensors-Magnetometer.MagX 208.000000 +89:351.169 Sensors-Magnetometer.MagY 493.000000 +89:351.661 Sensors-Magnetometer.MagZ -434.000000 +89:360.690 Sensors-Accelerometer.AccX -2548.000000 +89:361.209 Sensors-Accelerometer.AccY -10203.000000 +89:361.759 Sensors-Accelerometer.AccZ 6782.000000 +89:400.725 Sensors-Accelerometer.AccX -2945.000000 +89:401.248 Sensors-Accelerometer.AccY -11231.000000 +89:401.798 Sensors-Accelerometer.AccZ 6315.000000 +89:440.690 Sensors-Accelerometer.AccX -2760.000000 +89:441.207 Sensors-Accelerometer.AccY -13661.000000 +89:441.750 Sensors-Accelerometer.AccZ 2109.000000 +89:450.683 Sensors-Magnetometer.MagX 151.000000 +89:451.179 Sensors-Magnetometer.MagY 573.000000 +89:451.679 Sensors-Magnetometer.MagZ -414.000000 +89:480.690 Sensors-Accelerometer.AccX -994.000000 +89:481.186 Sensors-Accelerometer.AccY -15466.000000 +89:481.737 Sensors-Accelerometer.AccZ 2191.000000 +89:520.690 Sensors-Accelerometer.AccX -2339.000000 +89:521.213 Sensors-Accelerometer.AccY -14032.000000 +89:521.757 Sensors-Accelerometer.AccZ 3507.000000 +89:560.690 Sensors-Accelerometer.AccX -5139.000000 +89:561.215 Sensors-Accelerometer.AccY -15014.000000 +89:561.769 Sensors-Accelerometer.AccZ 2087.000000 +89:600.725 Sensors-Accelerometer.AccX -6508.000000 +89:601.242 Sensors-Accelerometer.AccY -14032.000000 +89:601.779 Sensors-Accelerometer.AccZ 4189.000000 +89:640.690 Sensors-Accelerometer.AccX -4935.000000 +89:641.212 Sensors-Accelerometer.AccY -13287.000000 +89:641.758 Sensors-Accelerometer.AccZ 2940.000000 +89:650.684 Sensors-Magnetometer.MagX 179.000000 +89:651.175 Sensors-Magnetometer.MagY 453.000000 +89:651.670 Sensors-Magnetometer.MagZ -464.000000 +89:680.690 Sensors-Accelerometer.AccX -9015.000000 +89:681.214 Sensors-Accelerometer.AccY -11914.000000 +89:681.760 Sensors-Accelerometer.AccZ 4440.000000 +89:700.683 Sensors-Magnetometer.MagX 191.000000 +89:701.178 Sensors-Magnetometer.MagY 375.000000 +89:701.673 Sensors-Magnetometer.MagZ -509.000000 +89:720.690 Sensors-Accelerometer.AccX -7394.000000 +89:721.208 Sensors-Accelerometer.AccY -8523.000000 +89:721.727 Sensors-Accelerometer.AccZ 5846.000000 +89:750.683 Sensors-Magnetometer.MagX 149.000000 +89:751.174 Sensors-Magnetometer.MagY 293.000000 +89:751.668 Sensors-Magnetometer.MagZ -547.000000 +89:760.690 Sensors-Accelerometer.AccX -7732.000000 +89:761.211 Sensors-Accelerometer.AccY -9356.000000 +89:761.734 Sensors-Accelerometer.AccZ 5567.000000 +89:800.683 Sensors-Magnetometer.MagX 141.000000 +89:801.171 Sensors-Magnetometer.MagY 214.000000 +89:801.660 Sensors-Magnetometer.MagZ -566.000000 +89:802.191 Sensors-Accelerometer.AccX -9601.000000 +89:802.717 Sensors-Accelerometer.AccY -5149.000000 +89:803.237 Sensors-Accelerometer.AccZ 8293.000000 +89:840.690 Sensors-Accelerometer.AccX -11917.000000 +89:841.237 Sensors-Accelerometer.AccY -4150.000000 +89:841.759 Sensors-Accelerometer.AccZ 7706.000000 +89:850.684 Sensors-Magnetometer.MagX 177.000000 +89:851.173 Sensors-Magnetometer.MagY 105.000000 +89:851.659 Sensors-Magnetometer.MagZ -555.000000 +89:880.690 Sensors-Accelerometer.AccX -13864.000000 +89:881.232 Sensors-Accelerometer.AccY 3189.000000 +89:881.754 Sensors-Accelerometer.AccZ 8738.000000 +89:900.683 Sensors-Magnetometer.MagX 224.000000 +89:901.172 Sensors-Magnetometer.MagY -31.000000 +89:901.641 Sensors-Magnetometer.MagZ -517.000000 +89:920.690 Sensors-Accelerometer.AccX -13096.000000 +89:921.234 Sensors-Accelerometer.AccY 3447.000000 +89:921.754 Sensors-Accelerometer.AccZ 9350.000000 +89:950.683 Sensors-Magnetometer.MagX 267.000000 +89:951.177 Sensors-Magnetometer.MagY -122.000000 +89:951.668 Sensors-Magnetometer.MagZ -460.000000 +89:960.690 Sensors-Accelerometer.AccX -14091.000000 +89:961.236 Sensors-Accelerometer.AccY 952.000000 +89:961.729 Sensors-Accelerometer.AccZ 5593.000000 +90:000.683 Sensors-Magnetometer.MagX 303.000000 +90:001.180 Sensors-Magnetometer.MagY -186.000000 +90:001.670 Sensors-Magnetometer.MagZ -390.000000 +90:002.201 Sensors-Accelerometer.AccX -13716.000000 +90:002.746 Sensors-Accelerometer.AccY 1197.000000 +90:003.266 Sensors-Accelerometer.AccZ 5839.000000 +90:040.690 Sensors-Accelerometer.AccX -12660.000000 +90:041.236 Sensors-Accelerometer.AccY 5028.000000 +90:041.759 Sensors-Accelerometer.AccZ 7024.000000 +90:050.684 Sensors-Magnetometer.MagX 322.000000 +90:051.174 Sensors-Magnetometer.MagY -249.000000 +90:051.671 Sensors-Magnetometer.MagZ -332.000000 +90:080.690 Sensors-Accelerometer.AccX -12848.000000 +90:081.232 Sensors-Accelerometer.AccY 3780.000000 +90:081.752 Sensors-Accelerometer.AccZ 7301.000000 +90:100.683 Sensors-Magnetometer.MagX 325.000000 +90:101.181 Sensors-Magnetometer.MagY -317.000000 +90:101.680 Sensors-Magnetometer.MagZ -282.000000 +90:120.690 Sensors-Accelerometer.AccX -11533.000000 +90:121.236 Sensors-Accelerometer.AccY 3242.000000 +90:121.752 Sensors-Accelerometer.AccZ 6996.000000 +90:150.683 Sensors-Magnetometer.MagX 344.000000 +90:151.172 Sensors-Magnetometer.MagY -378.000000 +90:151.663 Sensors-Magnetometer.MagZ -163.000000 +90:160.690 Sensors-Accelerometer.AccX -16264.000000 +90:161.231 Sensors-Accelerometer.AccY 6507.000000 +90:161.755 Sensors-Accelerometer.AccZ 4239.000000 +90:200.684 Sensors-Magnetometer.MagX 390.000000 +90:201.176 Sensors-Magnetometer.MagY -382.000000 +90:201.670 Sensors-Magnetometer.MagZ -52.000000 +90:202.170 Sensors-Accelerometer.AccX -13043.000000 +90:202.719 Sensors-Accelerometer.AccY 759.000000 +90:203.216 Sensors-Accelerometer.AccZ 3574.000000 +90:240.690 Sensors-Accelerometer.AccX -16508.000000 +90:241.231 Sensors-Accelerometer.AccY 2447.000000 +90:241.753 Sensors-Accelerometer.AccZ 1173.000000 +90:250.684 Sensors-Magnetometer.MagX 405.000000 +90:251.176 Sensors-Magnetometer.MagY -379.000000 +90:251.670 Sensors-Magnetometer.MagZ 104.000000 +90:280.690 Sensors-Accelerometer.AccX -14310.000000 +90:281.239 Sensors-Accelerometer.AccY 10310.000000 +90:281.785 Sensors-Accelerometer.AccZ 1341.000000 +90:300.684 Sensors-Magnetometer.MagX 409.000000 +90:301.179 Sensors-Magnetometer.MagY -373.000000 +90:301.672 Sensors-Magnetometer.MagZ 197.000000 +90:320.690 Sensors-Accelerometer.AccX -14525.000000 +90:321.234 Sensors-Accelerometer.AccY 3587.000000 +90:321.755 Sensors-Accelerometer.AccZ -1333.000000 +90:350.684 Sensors-Magnetometer.MagX 379.000000 +90:351.179 Sensors-Magnetometer.MagY -354.000000 +90:351.671 Sensors-Magnetometer.MagZ 277.000000 +90:360.690 Sensors-Accelerometer.AccX -16652.000000 +90:361.235 Sensors-Accelerometer.AccY 5394.000000 +90:361.755 Sensors-Accelerometer.AccZ -2030.000000 +90:400.684 Sensors-Magnetometer.MagX 358.000000 +90:401.173 Sensors-Magnetometer.MagY -340.000000 +90:401.660 Sensors-Magnetometer.MagZ 373.000000 +90:402.186 Sensors-Accelerometer.AccX -12751.000000 +90:402.735 Sensors-Accelerometer.AccY 3244.000000 +90:403.258 Sensors-Accelerometer.AccZ -2996.000000 +90:440.690 Sensors-Accelerometer.AccX -16043.000000 +90:441.240 Sensors-Accelerometer.AccY 5787.000000 +90:441.759 Sensors-Accelerometer.AccZ -4592.000000 +90:450.684 Sensors-Magnetometer.MagX 341.000000 +90:451.169 Sensors-Magnetometer.MagY -312.000000 +90:451.660 Sensors-Magnetometer.MagZ 431.000000 +90:480.690 Sensors-Accelerometer.AccX -15416.000000 +90:481.233 Sensors-Accelerometer.AccY 4039.000000 +90:481.753 Sensors-Accelerometer.AccZ -5140.000000 +90:500.684 Sensors-Magnetometer.MagX 315.000000 +90:501.177 Sensors-Magnetometer.MagY -283.000000 +90:501.670 Sensors-Magnetometer.MagZ 484.000000 +90:520.690 Sensors-Accelerometer.AccX -15676.000000 +90:521.245 Sensors-Accelerometer.AccY 2397.000000 +90:521.767 Sensors-Accelerometer.AccZ -6791.000000 +90:560.690 Sensors-Accelerometer.AccX -12848.000000 +90:561.229 Sensors-Accelerometer.AccY 3109.000000 +90:561.751 Sensors-Accelerometer.AccZ -7390.000000 +90:600.683 Sensors-Magnetometer.MagX 259.000000 +90:601.176 Sensors-Magnetometer.MagY -234.000000 +90:601.667 Sensors-Magnetometer.MagZ 560.000000 +90:602.194 Sensors-Accelerometer.AccX -13483.000000 +90:602.744 Sensors-Accelerometer.AccY 4311.000000 +90:603.268 Sensors-Accelerometer.AccZ -8153.000000 +90:640.690 Sensors-Accelerometer.AccX -11855.000000 +90:641.237 Sensors-Accelerometer.AccY 5786.000000 +90:641.756 Sensors-Accelerometer.AccZ -6894.000000 +90:680.690 Sensors-Accelerometer.AccX -11088.000000 +90:681.231 Sensors-Accelerometer.AccY 4094.000000 +90:681.758 Sensors-Accelerometer.AccZ -8245.000000 +90:700.684 Sensors-Magnetometer.MagX 214.000000 +90:701.177 Sensors-Magnetometer.MagY -194.000000 +90:701.666 Sensors-Magnetometer.MagZ 616.000000 +90:720.690 Sensors-Accelerometer.AccX -13034.000000 +90:721.237 Sensors-Accelerometer.AccY 4889.000000 +90:721.759 Sensors-Accelerometer.AccZ -8476.000000 +90:750.683 Sensors-Magnetometer.MagX 179.000000 +90:751.178 Sensors-Magnetometer.MagY -191.000000 +90:751.676 Sensors-Magnetometer.MagZ 636.000000 +90:760.690 Sensors-Accelerometer.AccX -12268.000000 +90:761.242 Sensors-Accelerometer.AccY 4191.000000 +90:761.771 Sensors-Accelerometer.AccZ -10636.000000 +90:800.725 Sensors-Accelerometer.AccX -12353.000000 +90:801.273 Sensors-Accelerometer.AccY 6100.000000 +90:801.796 Sensors-Accelerometer.AccZ -8417.000000 +90:840.690 Sensors-Accelerometer.AccX -13737.000000 +90:841.237 Sensors-Accelerometer.AccY 2802.000000 +90:841.757 Sensors-Accelerometer.AccZ -7987.000000 +90:850.684 Sensors-Magnetometer.MagX 112.000000 +90:851.170 Sensors-Magnetometer.MagY -176.000000 +90:851.660 Sensors-Magnetometer.MagZ 668.000000 +90:880.690 Sensors-Accelerometer.AccX -10498.000000 +90:881.228 Sensors-Accelerometer.AccY 4166.000000 +90:881.748 Sensors-Accelerometer.AccZ -10391.000000 +90:920.690 Sensors-Accelerometer.AccX -9965.000000 +90:921.215 Sensors-Accelerometer.AccY 3888.000000 +90:921.735 Sensors-Accelerometer.AccZ -12167.000000 +90:950.683 Sensors-Magnetometer.MagX -7.000000 +90:951.125 Sensors-Magnetometer.MagY -128.000000 +90:951.607 Sensors-Magnetometer.MagZ 716.000000 +90:960.690 Sensors-Accelerometer.AccX -8914.000000 +90:961.209 Sensors-Accelerometer.AccY 2314.000000 +90:961.727 Sensors-Accelerometer.AccZ -15195.000000 +91:000.683 Sensors-Magnetometer.MagX -67.000000 +91:001.152 Sensors-Magnetometer.MagY -125.000000 +91:001.646 Sensors-Magnetometer.MagZ 734.000000 +91:002.184 Sensors-Accelerometer.AccX -8475.000000 +91:002.709 Sensors-Accelerometer.AccY 171.000000 +91:003.206 Sensors-Accelerometer.AccZ -12545.000000 +91:040.690 Sensors-Accelerometer.AccX -6009.000000 +91:041.213 Sensors-Accelerometer.AccY 6293.000000 +91:041.733 Sensors-Accelerometer.AccZ -17352.000000 +91:080.690 Sensors-Accelerometer.AccX -7901.000000 +91:081.218 Sensors-Accelerometer.AccY -649.000000 +91:081.715 Sensors-Accelerometer.AccZ -12142.000000 +91:100.683 Sensors-Magnetometer.MagX -94.000000 +91:101.156 Sensors-Magnetometer.MagY -65.000000 +91:101.625 Sensors-Magnetometer.MagZ 740.000000 +91:120.690 Sensors-Accelerometer.AccX -9318.000000 +91:121.217 Sensors-Accelerometer.AccY 625.000000 +91:121.715 Sensors-Accelerometer.AccZ -14643.000000 +91:160.690 Sensors-Accelerometer.AccX -9244.000000 +91:161.212 Sensors-Accelerometer.AccY 966.000000 +91:161.713 Sensors-Accelerometer.AccZ -13717.000000 +91:200.683 Sensors-Magnetometer.MagX -134.000000 +91:201.171 Sensors-Magnetometer.MagY 50.000000 +91:201.634 Sensors-Magnetometer.MagZ 764.000000 +91:202.162 Sensors-Accelerometer.AccX -6554.000000 +91:202.676 Sensors-Accelerometer.AccY -264.000000 +91:203.160 Sensors-Accelerometer.AccZ -14542.000000 +91:240.690 Sensors-Accelerometer.AccX -8218.000000 +91:241.211 Sensors-Accelerometer.AccY -3376.000000 +91:241.725 Sensors-Accelerometer.AccZ -12813.000000 +91:250.684 Sensors-Magnetometer.MagX -126.000000 +91:251.175 Sensors-Magnetometer.MagY 114.000000 +91:251.668 Sensors-Magnetometer.MagZ 760.000000 +91:280.690 Sensors-Accelerometer.AccX -7813.000000 +91:281.214 Sensors-Accelerometer.AccY -2423.000000 +91:281.737 Sensors-Accelerometer.AccZ -13060.000000 +91:320.690 Sensors-Accelerometer.AccX -4829.000000 +91:321.214 Sensors-Accelerometer.AccY -3613.000000 +91:321.733 Sensors-Accelerometer.AccZ -13400.000000 +91:350.683 Sensors-Magnetometer.MagX -121.000000 +91:351.176 Sensors-Magnetometer.MagY 219.000000 +91:351.671 Sensors-Magnetometer.MagZ 757.000000 +91:360.690 Sensors-Accelerometer.AccX -7325.000000 +91:361.215 Sensors-Accelerometer.AccY -2979.000000 +91:361.739 Sensors-Accelerometer.AccZ -13470.000000 +91:400.725 Sensors-Accelerometer.AccX -7061.000000 +91:401.249 Sensors-Accelerometer.AccY -3166.000000 +91:401.776 Sensors-Accelerometer.AccZ -12768.000000 +91:440.690 Sensors-Accelerometer.AccX -7785.000000 +91:441.215 Sensors-Accelerometer.AccY -5551.000000 +91:441.742 Sensors-Accelerometer.AccZ -12567.000000 +91:450.684 Sensors-Magnetometer.MagX -122.000000 +91:451.175 Sensors-Magnetometer.MagY 309.000000 +91:451.672 Sensors-Magnetometer.MagZ 738.000000 +91:480.690 Sensors-Accelerometer.AccX -9232.000000 +91:481.210 Sensors-Accelerometer.AccY -6918.000000 +91:481.737 Sensors-Accelerometer.AccZ -12667.000000 +91:520.690 Sensors-Accelerometer.AccX -7062.000000 +91:521.213 Sensors-Accelerometer.AccY -6856.000000 +91:521.732 Sensors-Accelerometer.AccZ -12745.000000 +91:550.683 Sensors-Magnetometer.MagX -154.000000 +91:551.178 Sensors-Magnetometer.MagY 391.000000 +91:551.678 Sensors-Magnetometer.MagZ 703.000000 +91:560.690 Sensors-Accelerometer.AccX -6237.000000 +91:561.217 Sensors-Accelerometer.AccY -8039.000000 +91:561.743 Sensors-Accelerometer.AccZ -12047.000000 +91:600.725 Sensors-Accelerometer.AccX -6921.000000 +91:601.245 Sensors-Accelerometer.AccY -8566.000000 +91:601.769 Sensors-Accelerometer.AccZ -11041.000000 +91:640.690 Sensors-Accelerometer.AccX -5081.000000 +91:641.218 Sensors-Accelerometer.AccY -9130.000000 +91:641.744 Sensors-Accelerometer.AccZ -10821.000000 +91:680.690 Sensors-Accelerometer.AccX -4529.000000 +91:681.212 Sensors-Accelerometer.AccY -9039.000000 +91:681.741 Sensors-Accelerometer.AccZ -10808.000000 +91:700.683 Sensors-Magnetometer.MagX -189.000000 +91:701.176 Sensors-Magnetometer.MagY 455.000000 +91:701.674 Sensors-Magnetometer.MagZ 683.000000 +91:720.690 Sensors-Accelerometer.AccX -6155.000000 +91:721.220 Sensors-Accelerometer.AccY -8731.000000 +91:721.746 Sensors-Accelerometer.AccZ -10689.000000 +91:760.690 Sensors-Accelerometer.AccX -5306.000000 +91:761.206 Sensors-Accelerometer.AccY -8845.000000 +91:761.727 Sensors-Accelerometer.AccZ -9704.000000 +91:840.690 Sensors-Accelerometer.AccX -5590.000000 +91:841.213 Sensors-Accelerometer.AccY -9747.000000 +91:841.741 Sensors-Accelerometer.AccZ -9521.000000 +91:880.690 Sensors-Accelerometer.AccX -5090.000000 +91:881.213 Sensors-Accelerometer.AccY -10516.000000 +91:881.754 Sensors-Accelerometer.AccZ -10328.000000 +91:900.683 Sensors-Magnetometer.MagX -239.000000 +91:901.183 Sensors-Magnetometer.MagY 528.000000 +91:901.672 Sensors-Magnetometer.MagZ 638.000000 +91:920.690 Sensors-Accelerometer.AccX -5430.000000 +91:921.210 Sensors-Accelerometer.AccY -11009.000000 +91:921.758 Sensors-Accelerometer.AccZ -9617.000000 +91:950.683 Sensors-Magnetometer.MagX -290.000000 +91:951.174 Sensors-Magnetometer.MagY 571.000000 +91:951.674 Sensors-Magnetometer.MagZ 616.000000 +91:960.690 Sensors-Accelerometer.AccX -3306.000000 +91:961.208 Sensors-Accelerometer.AccY -11799.000000 +91:961.755 Sensors-Accelerometer.AccZ -9271.000000 +92:000.683 Sensors-Magnetometer.MagX -346.000000 +92:001.173 Sensors-Magnetometer.MagY 590.000000 +92:001.664 Sensors-Magnetometer.MagZ 567.000000 +92:002.194 Sensors-Accelerometer.AccX -2310.000000 +92:002.715 Sensors-Accelerometer.AccY -11873.000000 +92:003.263 Sensors-Accelerometer.AccZ -9248.000000 +92:040.690 Sensors-Accelerometer.AccX -2509.000000 +92:041.212 Sensors-Accelerometer.AccY -12445.000000 +92:041.761 Sensors-Accelerometer.AccZ -7634.000000 +92:080.690 Sensors-Accelerometer.AccX -192.000000 +92:081.175 Sensors-Accelerometer.AccY -12901.000000 +92:081.723 Sensors-Accelerometer.AccZ -8506.000000 +92:100.683 Sensors-Magnetometer.MagX -404.000000 +92:101.175 Sensors-Magnetometer.MagY 623.000000 +92:101.674 Sensors-Magnetometer.MagZ 510.000000 +92:120.690 Sensors-Accelerometer.AccX 34.000000 +92:121.154 Sensors-Accelerometer.AccY -13348.000000 +92:121.702 Sensors-Accelerometer.AccZ -8089.000000 +92:160.690 Sensors-Accelerometer.AccX -292.000000 +92:161.174 Sensors-Accelerometer.AccY -13554.000000 +92:161.712 Sensors-Accelerometer.AccZ -8441.000000 +92:200.725 Sensors-Accelerometer.AccX -438.000000 +92:201.217 Sensors-Accelerometer.AccY -13368.000000 +92:201.761 Sensors-Accelerometer.AccZ -7998.000000 +92:240.690 Sensors-Accelerometer.AccX -766.000000 +92:241.184 Sensors-Accelerometer.AccY -13241.000000 +92:241.728 Sensors-Accelerometer.AccZ -7589.000000 +92:280.690 Sensors-Accelerometer.AccX -983.000000 +92:281.193 Sensors-Accelerometer.AccY -13197.000000 +92:281.740 Sensors-Accelerometer.AccZ -7574.000000 +92:320.690 Sensors-Accelerometer.AccX -1001.000000 +92:321.208 Sensors-Accelerometer.AccY -13435.000000 +92:321.748 Sensors-Accelerometer.AccZ -8278.000000 +92:360.690 Sensors-Accelerometer.AccX -1022.000000 +92:361.213 Sensors-Accelerometer.AccY -13061.000000 +92:361.762 Sensors-Accelerometer.AccZ -8107.000000 +92:400.725 Sensors-Accelerometer.AccX -1238.000000 +92:401.245 Sensors-Accelerometer.AccY -13540.000000 +92:401.785 Sensors-Accelerometer.AccZ -8502.000000 +92:440.690 Sensors-Accelerometer.AccX -1712.000000 +92:441.204 Sensors-Accelerometer.AccY -13345.000000 +92:441.750 Sensors-Accelerometer.AccZ -9709.000000 +92:450.684 Sensors-Magnetometer.MagX -380.000000 +92:451.177 Sensors-Magnetometer.MagY 598.000000 +92:451.675 Sensors-Magnetometer.MagZ 563.000000 +92:480.690 Sensors-Accelerometer.AccX -1927.000000 +92:481.208 Sensors-Accelerometer.AccY -11568.000000 +92:481.748 Sensors-Accelerometer.AccZ -8156.000000 +92:520.690 Sensors-Accelerometer.AccX -2304.000000 +92:521.202 Sensors-Accelerometer.AccY -12101.000000 +92:521.748 Sensors-Accelerometer.AccZ -10328.000000 +92:560.690 Sensors-Accelerometer.AccX -2830.000000 +92:561.212 Sensors-Accelerometer.AccY -11233.000000 +92:561.759 Sensors-Accelerometer.AccZ -10044.000000 +92:600.683 Sensors-Magnetometer.MagX -296.000000 +92:601.170 Sensors-Magnetometer.MagY 556.000000 +92:601.663 Sensors-Magnetometer.MagZ 640.000000 +92:602.182 Sensors-Accelerometer.AccX -3421.000000 +92:602.698 Sensors-Accelerometer.AccY -10809.000000 +92:603.243 Sensors-Accelerometer.AccZ -10157.000000 +92:640.690 Sensors-Accelerometer.AccX -4406.000000 +92:641.209 Sensors-Accelerometer.AccY -9813.000000 +92:641.736 Sensors-Accelerometer.AccZ -10448.000000 +92:650.683 Sensors-Magnetometer.MagX -240.000000 +92:651.174 Sensors-Magnetometer.MagY 525.000000 +92:651.665 Sensors-Magnetometer.MagZ 656.000000 +92:680.690 Sensors-Accelerometer.AccX -4950.000000 +92:681.213 Sensors-Accelerometer.AccY -8781.000000 +92:681.739 Sensors-Accelerometer.AccZ -10946.000000 +92:700.683 Sensors-Magnetometer.MagX -177.000000 +92:701.173 Sensors-Magnetometer.MagY 488.000000 +92:701.663 Sensors-Magnetometer.MagZ 691.000000 +92:720.690 Sensors-Accelerometer.AccX -5650.000000 +92:721.213 Sensors-Accelerometer.AccY -8080.000000 +92:721.731 Sensors-Accelerometer.AccZ -10732.000000 +92:750.683 Sensors-Magnetometer.MagX -111.000000 +92:751.179 Sensors-Magnetometer.MagY 443.000000 +92:751.676 Sensors-Magnetometer.MagZ 712.000000 +92:760.690 Sensors-Accelerometer.AccX -7136.000000 +92:761.210 Sensors-Accelerometer.AccY -7262.000000 +92:761.737 Sensors-Accelerometer.AccZ -10525.000000 +92:800.683 Sensors-Magnetometer.MagX -43.000000 +92:801.146 Sensors-Magnetometer.MagY 392.000000 +92:801.633 Sensors-Magnetometer.MagZ 717.000000 +92:802.159 Sensors-Accelerometer.AccX -8931.000000 +92:802.683 Sensors-Accelerometer.AccY -6638.000000 +92:803.201 Sensors-Accelerometer.AccZ -11254.000000 +92:840.690 Sensors-Accelerometer.AccX -9704.000000 +92:841.210 Sensors-Accelerometer.AccY -5457.000000 +92:841.725 Sensors-Accelerometer.AccZ -11007.000000 +92:850.683 Sensors-Magnetometer.MagX 32.000000 +92:851.143 Sensors-Magnetometer.MagY 342.000000 +92:851.638 Sensors-Magnetometer.MagZ 729.000000 +92:880.690 Sensors-Accelerometer.AccX -10796.000000 +92:881.234 Sensors-Accelerometer.AccY -4435.000000 +92:881.757 Sensors-Accelerometer.AccZ -11723.000000 +92:900.683 Sensors-Magnetometer.MagX 92.000000 +92:901.148 Sensors-Magnetometer.MagY 298.000000 +92:901.638 Sensors-Magnetometer.MagZ 725.000000 +92:920.690 Sensors-Accelerometer.AccX -11504.000000 +92:921.236 Sensors-Accelerometer.AccY -3170.000000 +92:921.759 Sensors-Accelerometer.AccZ -11430.000000 +92:960.690 Sensors-Accelerometer.AccX -11213.000000 +92:961.235 Sensors-Accelerometer.AccY -1938.000000 +92:961.755 Sensors-Accelerometer.AccZ -11157.000000 +93:000.683 Sensors-Magnetometer.MagX 128.000000 +93:001.164 Sensors-Magnetometer.MagY 211.000000 +93:001.654 Sensors-Magnetometer.MagZ 732.000000 +93:002.185 Sensors-Accelerometer.AccX -11254.000000 +93:002.735 Sensors-Accelerometer.AccY -2230.000000 +93:003.255 Sensors-Accelerometer.AccZ -11847.000000 +93:040.690 Sensors-Accelerometer.AccX -11040.000000 +93:041.229 Sensors-Accelerometer.AccY -2630.000000 +93:041.748 Sensors-Accelerometer.AccZ -11906.000000 +93:080.690 Sensors-Accelerometer.AccX -11324.000000 +93:081.240 Sensors-Accelerometer.AccY -829.000000 +93:081.737 Sensors-Accelerometer.AccZ -11767.000000 +93:100.683 Sensors-Magnetometer.MagX 159.000000 +93:101.179 Sensors-Magnetometer.MagY 151.000000 +93:101.674 Sensors-Magnetometer.MagZ 723.000000 +93:120.690 Sensors-Accelerometer.AccX -10671.000000 +93:121.237 Sensors-Accelerometer.AccY 849.000000 +93:121.730 Sensors-Accelerometer.AccZ -11054.000000 +93:160.690 Sensors-Accelerometer.AccX -11262.000000 +93:161.241 Sensors-Accelerometer.AccY 375.000000 +93:161.737 Sensors-Accelerometer.AccZ -11217.000000 +93:200.683 Sensors-Magnetometer.MagX 181.000000 +93:201.171 Sensors-Magnetometer.MagY 79.000000 +93:201.639 Sensors-Magnetometer.MagZ 703.000000 +93:202.170 Sensors-Accelerometer.AccX -12370.000000 +93:202.716 Sensors-Accelerometer.AccY 1226.000000 +93:203.236 Sensors-Accelerometer.AccZ -10718.000000 +93:240.690 Sensors-Accelerometer.AccX -11732.000000 +93:241.236 Sensors-Accelerometer.AccY 1570.000000 +93:241.755 Sensors-Accelerometer.AccZ -9650.000000 +93:280.690 Sensors-Accelerometer.AccX -11449.000000 +93:281.239 Sensors-Accelerometer.AccY 2209.000000 +93:281.759 Sensors-Accelerometer.AccZ -9651.000000 +93:320.690 Sensors-Accelerometer.AccX -12253.000000 +93:321.239 Sensors-Accelerometer.AccY 2851.000000 +93:321.763 Sensors-Accelerometer.AccZ -9751.000000 +93:360.690 Sensors-Accelerometer.AccX -12869.000000 +93:361.237 Sensors-Accelerometer.AccY 4734.000000 +93:361.763 Sensors-Accelerometer.AccZ -9484.000000 +93:400.725 Sensors-Accelerometer.AccX -14274.000000 +93:401.270 Sensors-Accelerometer.AccY 5938.000000 +93:401.794 Sensors-Accelerometer.AccZ -8892.000000 +93:440.690 Sensors-Accelerometer.AccX -13857.000000 +93:441.230 Sensors-Accelerometer.AccY 6482.000000 +93:441.747 Sensors-Accelerometer.AccZ -9584.000000 +93:450.684 Sensors-Magnetometer.MagX 202.000000 +93:451.172 Sensors-Magnetometer.MagY 18.000000 +93:451.636 Sensors-Magnetometer.MagZ 690.000000 +93:480.690 Sensors-Accelerometer.AccX -11769.000000 +93:481.238 Sensors-Accelerometer.AccY 4044.000000 +93:481.758 Sensors-Accelerometer.AccZ -8529.000000 +93:520.690 Sensors-Accelerometer.AccX -12375.000000 +93:521.238 Sensors-Accelerometer.AccY 2628.000000 +93:521.751 Sensors-Accelerometer.AccZ -8777.000000 +93:560.690 Sensors-Accelerometer.AccX -13278.000000 +93:561.240 Sensors-Accelerometer.AccY 2936.000000 +93:561.766 Sensors-Accelerometer.AccZ -6665.000000 +93:600.725 Sensors-Accelerometer.AccX -10411.000000 +93:601.274 Sensors-Accelerometer.AccY 1483.000000 +93:601.793 Sensors-Accelerometer.AccZ -6328.000000 +93:640.690 Sensors-Accelerometer.AccX -9067.000000 +93:641.216 Sensors-Accelerometer.AccY 4174.000000 +93:641.737 Sensors-Accelerometer.AccZ -6649.000000 +93:680.690 Sensors-Accelerometer.AccX -9861.000000 +93:681.215 Sensors-Accelerometer.AccY 4037.000000 +93:681.741 Sensors-Accelerometer.AccZ -6096.000000 +93:720.690 Sensors-Accelerometer.AccX -9351.000000 +93:721.219 Sensors-Accelerometer.AccY 4215.000000 +93:721.740 Sensors-Accelerometer.AccZ -7934.000000 +93:750.683 Sensors-Magnetometer.MagX 210.000000 +93:751.171 Sensors-Magnetometer.MagY 73.000000 +93:751.641 Sensors-Magnetometer.MagZ 700.000000 +93:760.691 Sensors-Accelerometer.AccX -9467.000000 +93:761.216 Sensors-Accelerometer.AccY 3875.000000 +93:761.739 Sensors-Accelerometer.AccZ -7668.000000 +93:800.725 Sensors-Accelerometer.AccX -13163.000000 +93:801.271 Sensors-Accelerometer.AccY 4043.000000 +93:801.793 Sensors-Accelerometer.AccZ -8341.000000 +93:840.690 Sensors-Accelerometer.AccX -16055.000000 +93:841.242 Sensors-Accelerometer.AccY 3925.000000 +93:841.764 Sensors-Accelerometer.AccZ -7004.000000 +93:880.690 Sensors-Accelerometer.AccX -15482.000000 +93:881.239 Sensors-Accelerometer.AccY 4226.000000 +93:881.758 Sensors-Accelerometer.AccZ -9879.000000 +93:900.683 Sensors-Magnetometer.MagX 158.000000 +93:901.180 Sensors-Magnetometer.MagY 142.000000 +93:901.671 Sensors-Magnetometer.MagZ 704.000000 +93:920.690 Sensors-Accelerometer.AccX -13326.000000 +93:921.239 Sensors-Accelerometer.AccY 4590.000000 +93:921.764 Sensors-Accelerometer.AccZ -9707.000000 +93:960.690 Sensors-Accelerometer.AccX -12670.000000 +93:961.242 Sensors-Accelerometer.AccY 2684.000000 +93:961.765 Sensors-Accelerometer.AccZ -11398.000000 +94:000.683 Sensors-Magnetometer.MagX 92.000000 +94:001.151 Sensors-Magnetometer.MagY 147.000000 +94:001.648 Sensors-Magnetometer.MagZ 721.000000 +94:002.176 Sensors-Accelerometer.AccX -13114.000000 +94:002.721 Sensors-Accelerometer.AccY 4285.000000 +94:003.245 Sensors-Accelerometer.AccZ -12611.000000 +94:040.690 Sensors-Accelerometer.AccX -11770.000000 +94:041.242 Sensors-Accelerometer.AccY 4055.000000 +94:041.774 Sensors-Accelerometer.AccZ -11455.000000 +94:080.690 Sensors-Accelerometer.AccX -10329.000000 +94:081.235 Sensors-Accelerometer.AccY 5333.000000 +94:081.754 Sensors-Accelerometer.AccZ -13563.000000 +94:100.683 Sensors-Magnetometer.MagX 32.000000 +94:101.144 Sensors-Magnetometer.MagY 128.000000 +94:101.628 Sensors-Magnetometer.MagZ 746.000000 +94:120.690 Sensors-Accelerometer.AccX -10683.000000 +94:121.240 Sensors-Accelerometer.AccY 5046.000000 +94:121.767 Sensors-Accelerometer.AccZ -12030.000000 +94:160.690 Sensors-Accelerometer.AccX -9264.000000 +94:161.214 Sensors-Accelerometer.AccY 1881.000000 +94:161.738 Sensors-Accelerometer.AccZ -12633.000000 +94:200.683 Sensors-Magnetometer.MagX -48.000000 +94:201.151 Sensors-Magnetometer.MagY 150.000000 +94:201.649 Sensors-Magnetometer.MagZ 752.000000 +94:202.184 Sensors-Accelerometer.AccX -5433.000000 +94:202.710 Sensors-Accelerometer.AccY 1602.000000 +94:203.233 Sensors-Accelerometer.AccZ -13832.000000 +94:240.690 Sensors-Accelerometer.AccX -4291.000000 +94:241.211 Sensors-Accelerometer.AccY 3002.000000 +94:241.730 Sensors-Accelerometer.AccZ -14338.000000 +94:280.690 Sensors-Accelerometer.AccX -3140.000000 +94:281.212 Sensors-Accelerometer.AccY 1792.000000 +94:281.723 Sensors-Accelerometer.AccZ -13588.000000 +94:300.683 Sensors-Magnetometer.MagX 103.000000 +94:301.176 Sensors-Magnetometer.MagY 126.000000 +94:301.668 Sensors-Magnetometer.MagZ 723.000000 +94:320.690 Sensors-Accelerometer.AccX -4537.000000 +94:321.213 Sensors-Accelerometer.AccY 592.000000 +94:321.704 Sensors-Accelerometer.AccZ -10141.000000 +94:350.683 Sensors-Magnetometer.MagX 241.000000 +94:351.180 Sensors-Magnetometer.MagY 92.000000 +94:351.651 Sensors-Magnetometer.MagZ 664.000000 +94:360.690 Sensors-Accelerometer.AccX -10016.000000 +94:361.236 Sensors-Accelerometer.AccY 5484.000000 +94:361.763 Sensors-Accelerometer.AccZ -7869.000000 +94:400.683 Sensors-Magnetometer.MagX 333.000000 +94:401.171 Sensors-Magnetometer.MagY 66.000000 +94:401.632 Sensors-Magnetometer.MagZ 595.000000 +94:402.162 Sensors-Accelerometer.AccX -19023.000000 +94:402.712 Sensors-Accelerometer.AccY 6359.000000 +94:403.238 Sensors-Accelerometer.AccZ -6762.000000 +94:440.690 Sensors-Accelerometer.AccX -15294.000000 +94:441.241 Sensors-Accelerometer.AccY 5085.000000 +94:441.763 Sensors-Accelerometer.AccZ -7109.000000 +94:480.690 Sensors-Accelerometer.AccX -17380.000000 +94:481.234 Sensors-Accelerometer.AccY 3182.000000 +94:481.758 Sensors-Accelerometer.AccZ -6147.000000 +94:500.683 Sensors-Magnetometer.MagX 364.000000 +94:501.175 Sensors-Magnetometer.MagY 120.000000 +94:501.664 Sensors-Magnetometer.MagZ 556.000000 +94:520.690 Sensors-Accelerometer.AccX -15922.000000 +94:521.240 Sensors-Accelerometer.AccY 2836.000000 +94:521.759 Sensors-Accelerometer.AccZ -5425.000000 +94:560.690 Sensors-Accelerometer.AccX -15214.000000 +94:561.239 Sensors-Accelerometer.AccY 2695.000000 +94:561.760 Sensors-Accelerometer.AccZ -6438.000000 +94:600.683 Sensors-Magnetometer.MagX 289.000000 +94:601.174 Sensors-Magnetometer.MagY 96.000000 +94:601.639 Sensors-Magnetometer.MagZ 631.000000 +94:602.171 Sensors-Accelerometer.AccX -15700.000000 +94:602.719 Sensors-Accelerometer.AccY 2925.000000 +94:603.242 Sensors-Accelerometer.AccZ -6057.000000 +94:640.690 Sensors-Accelerometer.AccX -10758.000000 +94:641.233 Sensors-Accelerometer.AccY 4808.000000 +94:641.753 Sensors-Accelerometer.AccZ -6627.000000 +94:650.683 Sensors-Magnetometer.MagX 194.000000 +94:651.175 Sensors-Magnetometer.MagY 82.000000 +94:651.640 Sensors-Magnetometer.MagZ 686.000000 +94:680.690 Sensors-Accelerometer.AccX -11566.000000 +94:681.239 Sensors-Accelerometer.AccY 6092.000000 +94:681.765 Sensors-Accelerometer.AccZ -10703.000000 +94:700.683 Sensors-Magnetometer.MagX 73.000000 +94:701.153 Sensors-Magnetometer.MagY 98.000000 +94:701.621 Sensors-Magnetometer.MagZ 747.000000 +94:720.690 Sensors-Accelerometer.AccX -8663.000000 +94:721.212 Sensors-Accelerometer.AccY 3839.000000 +94:721.735 Sensors-Accelerometer.AccZ -11516.000000 +94:750.683 Sensors-Magnetometer.MagX -31.000000 +94:751.153 Sensors-Magnetometer.MagY 87.000000 +94:751.621 Sensors-Magnetometer.MagZ 769.000000 +94:760.690 Sensors-Accelerometer.AccX -9273.000000 +94:761.217 Sensors-Accelerometer.AccY 3651.000000 +94:761.740 Sensors-Accelerometer.AccZ -13205.000000 +94:800.683 Sensors-Magnetometer.MagX -93.000000 +94:801.149 Sensors-Magnetometer.MagY 52.000000 +94:801.613 Sensors-Magnetometer.MagZ 762.000000 +94:802.142 Sensors-Accelerometer.AccX -3233.000000 +94:802.661 Sensors-Accelerometer.AccY 3953.000000 +94:803.182 Sensors-Accelerometer.AccZ -14231.000000 +94:840.690 Sensors-Accelerometer.AccX -2208.000000 +94:841.204 Sensors-Accelerometer.AccY 5032.000000 +94:841.727 Sensors-Accelerometer.AccZ -15074.000000 +94:850.683 Sensors-Magnetometer.MagX -28.000000 +94:851.147 Sensors-Magnetometer.MagY -20.000000 +94:851.610 Sensors-Magnetometer.MagZ 755.000000 +94:880.690 Sensors-Accelerometer.AccX -926.000000 +94:881.184 Sensors-Accelerometer.AccY 6576.000000 +94:881.701 Sensors-Accelerometer.AccZ -12266.000000 +94:900.683 Sensors-Magnetometer.MagX 166.000000 +94:901.174 Sensors-Magnetometer.MagY -56.000000 +94:901.639 Sensors-Magnetometer.MagZ 686.000000 +94:920.690 Sensors-Accelerometer.AccX -12444.000000 +94:921.239 Sensors-Accelerometer.AccY 6930.000000 +94:921.762 Sensors-Accelerometer.AccZ -4759.000000 +94:950.683 Sensors-Magnetometer.MagX 250.000000 +94:951.175 Sensors-Magnetometer.MagY -66.000000 +94:951.640 Sensors-Magnetometer.MagZ 638.000000 +94:960.690 Sensors-Accelerometer.AccX -17070.000000 +94:961.239 Sensors-Accelerometer.AccY 4397.000000 +94:961.765 Sensors-Accelerometer.AccZ -2622.000000 +95:000.683 Sensors-Magnetometer.MagX 358.000000 +95:001.179 Sensors-Magnetometer.MagY -83.000000 +95:001.651 Sensors-Magnetometer.MagZ 563.000000 +95:002.186 Sensors-Accelerometer.AccX -14933.000000 +95:002.735 Sensors-Accelerometer.AccY 8187.000000 +95:003.267 Sensors-Accelerometer.AccZ -5711.000000 +95:040.690 Sensors-Accelerometer.AccX -17359.000000 +95:041.238 Sensors-Accelerometer.AccY 7919.000000 +95:041.766 Sensors-Accelerometer.AccZ -1953.000000 +95:050.683 Sensors-Magnetometer.MagX 414.000000 +95:051.176 Sensors-Magnetometer.MagY -48.000000 +95:051.640 Sensors-Magnetometer.MagZ 492.000000 +95:080.690 Sensors-Accelerometer.AccX -14824.000000 +95:081.233 Sensors-Accelerometer.AccY 2410.000000 +95:081.754 Sensors-Accelerometer.AccZ -2793.000000 +95:100.683 Sensors-Magnetometer.MagX 442.000000 +95:101.177 Sensors-Magnetometer.MagY 36.000000 +95:101.644 Sensors-Magnetometer.MagZ 473.000000 +95:120.690 Sensors-Accelerometer.AccX -15620.000000 +95:121.237 Sensors-Accelerometer.AccY 915.000000 +95:121.737 Sensors-Accelerometer.AccZ -3154.000000 +95:160.690 Sensors-Accelerometer.AccX -17098.000000 +95:161.238 Sensors-Accelerometer.AccY 2323.000000 +95:161.763 Sensors-Accelerometer.AccZ -2007.000000 +95:200.725 Sensors-Accelerometer.AccX -16040.000000 +95:201.267 Sensors-Accelerometer.AccY 3662.000000 +95:201.791 Sensors-Accelerometer.AccZ -1147.000000 +95:240.690 Sensors-Accelerometer.AccX -14315.000000 +95:241.243 Sensors-Accelerometer.AccY 5228.000000 +95:241.765 Sensors-Accelerometer.AccZ -791.000000 +95:250.684 Sensors-Magnetometer.MagX 472.000000 +95:251.174 Sensors-Magnetometer.MagY -25.000000 +95:251.640 Sensors-Magnetometer.MagZ 429.000000 +95:280.690 Sensors-Accelerometer.AccX -15047.000000 +95:281.244 Sensors-Accelerometer.AccY 5070.000000 +95:281.769 Sensors-Accelerometer.AccZ 242.000000 +95:320.690 Sensors-Accelerometer.AccX -14799.000000 +95:321.241 Sensors-Accelerometer.AccY 5207.000000 +95:321.767 Sensors-Accelerometer.AccZ 715.000000 +95:360.690 Sensors-Accelerometer.AccX -15083.000000 +95:361.241 Sensors-Accelerometer.AccY 5431.000000 +95:361.763 Sensors-Accelerometer.AccZ -533.000000 +95:400.725 Sensors-Accelerometer.AccX -15547.000000 +95:401.277 Sensors-Accelerometer.AccY 5013.000000 +95:401.803 Sensors-Accelerometer.AccZ -103.000000 +95:440.690 Sensors-Accelerometer.AccX -15235.000000 +95:441.241 Sensors-Accelerometer.AccY 4916.000000 +95:441.758 Sensors-Accelerometer.AccZ 75.000000 +95:480.690 Sensors-Accelerometer.AccX -14547.000000 +95:481.243 Sensors-Accelerometer.AccY 6685.000000 +95:481.763 Sensors-Accelerometer.AccZ 777.000000 +95:520.690 Sensors-Accelerometer.AccX -16773.000000 +95:521.242 Sensors-Accelerometer.AccY 6342.000000 +95:521.770 Sensors-Accelerometer.AccZ 103.000000 +95:560.690 Sensors-Accelerometer.AccX -15946.000000 +95:561.239 Sensors-Accelerometer.AccY 5288.000000 +95:561.756 Sensors-Accelerometer.AccZ 381.000000 +95:600.684 Sensors-Magnetometer.MagX 434.000000 +95:601.175 Sensors-Magnetometer.MagY -72.000000 +95:601.642 Sensors-Magnetometer.MagZ 495.000000 +95:602.177 Sensors-Accelerometer.AccX -14211.000000 +95:602.729 Sensors-Accelerometer.AccY 5168.000000 +95:603.250 Sensors-Accelerometer.AccZ -695.000000 +95:640.690 Sensors-Accelerometer.AccX -11675.000000 +95:641.243 Sensors-Accelerometer.AccY 8014.000000 +95:641.771 Sensors-Accelerometer.AccZ -2520.000000 +95:650.683 Sensors-Magnetometer.MagX 331.000000 +95:651.177 Sensors-Magnetometer.MagY -96.000000 +95:651.645 Sensors-Magnetometer.MagZ 585.000000 +95:680.690 Sensors-Accelerometer.AccX -11121.000000 +95:681.237 Sensors-Accelerometer.AccY 6494.000000 +95:681.765 Sensors-Accelerometer.AccZ -5251.000000 +95:700.683 Sensors-Magnetometer.MagX 198.000000 +95:701.177 Sensors-Magnetometer.MagY -84.000000 +95:701.639 Sensors-Magnetometer.MagZ 684.000000 +95:720.690 Sensors-Accelerometer.AccX -7189.000000 +95:721.215 Sensors-Accelerometer.AccY 6810.000000 +95:721.737 Sensors-Accelerometer.AccZ -9293.000000 +95:750.683 Sensors-Magnetometer.MagX 68.000000 +95:751.147 Sensors-Magnetometer.MagY -43.000000 +95:751.617 Sensors-Magnetometer.MagZ 740.000000 +95:760.690 Sensors-Accelerometer.AccX -8137.000000 +95:761.214 Sensors-Accelerometer.AccY 7051.000000 +95:761.741 Sensors-Accelerometer.AccZ -12570.000000 +95:800.683 Sensors-Magnetometer.MagX -45.000000 +95:801.152 Sensors-Magnetometer.MagY -14.000000 +95:801.619 Sensors-Magnetometer.MagZ 774.000000 +95:802.153 Sensors-Accelerometer.AccX -8504.000000 +95:802.675 Sensors-Accelerometer.AccY 5306.000000 +95:803.197 Sensors-Accelerometer.AccZ -13149.000000 +95:840.690 Sensors-Accelerometer.AccX -3500.000000 +95:841.214 Sensors-Accelerometer.AccY 5485.000000 +95:841.739 Sensors-Accelerometer.AccZ -13236.000000 +95:850.684 Sensors-Magnetometer.MagX -118.000000 +95:851.173 Sensors-Magnetometer.MagY 48.000000 +95:851.639 Sensors-Magnetometer.MagZ 783.000000 +95:880.690 Sensors-Accelerometer.AccX -6444.000000 +95:881.213 Sensors-Accelerometer.AccY 5620.000000 +95:881.735 Sensors-Accelerometer.AccZ -16226.000000 +95:900.683 Sensors-Magnetometer.MagX -196.000000 +95:901.176 Sensors-Magnetometer.MagY 77.000000 +95:901.648 Sensors-Magnetometer.MagZ 770.000000 +95:920.690 Sensors-Accelerometer.AccX -4449.000000 +95:921.214 Sensors-Accelerometer.AccY 5218.000000 +95:921.739 Sensors-Accelerometer.AccZ -15851.000000 +95:960.690 Sensors-Accelerometer.AccX -4942.000000 +95:961.217 Sensors-Accelerometer.AccY 4990.000000 +95:961.746 Sensors-Accelerometer.AccZ -15467.000000 +96:000.725 Sensors-Accelerometer.AccX -5388.000000 +96:001.241 Sensors-Accelerometer.AccY 4784.000000 +96:001.760 Sensors-Accelerometer.AccZ -15601.000000 +96:040.690 Sensors-Accelerometer.AccX -1903.000000 +96:041.215 Sensors-Accelerometer.AccY 5466.000000 +96:041.731 Sensors-Accelerometer.AccZ -16108.000000 +96:050.684 Sensors-Magnetometer.MagX -268.000000 +96:051.175 Sensors-Magnetometer.MagY 94.000000 +96:051.648 Sensors-Magnetometer.MagZ 761.000000 +96:080.690 Sensors-Accelerometer.AccX -3262.000000 +96:081.212 Sensors-Accelerometer.AccY 5321.000000 +96:081.734 Sensors-Accelerometer.AccZ -15567.000000 +96:120.690 Sensors-Accelerometer.AccX -6269.000000 +96:121.215 Sensors-Accelerometer.AccY 5857.000000 +96:121.741 Sensors-Accelerometer.AccZ -14796.000000 +96:160.690 Sensors-Accelerometer.AccX -3213.000000 +96:161.207 Sensors-Accelerometer.AccY 7026.000000 +96:161.728 Sensors-Accelerometer.AccZ -14447.000000 +96:200.725 Sensors-Accelerometer.AccX -4704.000000 +96:201.245 Sensors-Accelerometer.AccY 6400.000000 +96:201.755 Sensors-Accelerometer.AccZ -13604.000000 +96:240.690 Sensors-Accelerometer.AccX -3072.000000 +96:241.202 Sensors-Accelerometer.AccY 8015.000000 +96:241.730 Sensors-Accelerometer.AccZ -13597.000000 +96:280.690 Sensors-Accelerometer.AccX -3630.000000 +96:281.213 Sensors-Accelerometer.AccY 6536.000000 +96:281.734 Sensors-Accelerometer.AccZ -13755.000000 +96:320.690 Sensors-Accelerometer.AccX -4367.000000 +96:321.210 Sensors-Accelerometer.AccY 5518.000000 +96:321.732 Sensors-Accelerometer.AccZ -15361.000000 +96:360.690 Sensors-Accelerometer.AccX -4763.000000 +96:361.212 Sensors-Accelerometer.AccY 6015.000000 +96:361.737 Sensors-Accelerometer.AccZ -15876.000000 +96:400.725 Sensors-Accelerometer.AccX -4583.000000 +96:401.249 Sensors-Accelerometer.AccY 7272.000000 +96:401.768 Sensors-Accelerometer.AccZ -14551.000000 +96:440.690 Sensors-Accelerometer.AccX -4055.000000 +96:441.217 Sensors-Accelerometer.AccY 5640.000000 +96:441.735 Sensors-Accelerometer.AccZ -13795.000000 +96:480.690 Sensors-Accelerometer.AccX -3095.000000 +96:481.213 Sensors-Accelerometer.AccY 6515.000000 +96:481.739 Sensors-Accelerometer.AccZ -13957.000000 +96:520.690 Sensors-Accelerometer.AccX -3045.000000 +96:521.212 Sensors-Accelerometer.AccY 6630.000000 +96:521.735 Sensors-Accelerometer.AccZ -13668.000000 +96:560.690 Sensors-Accelerometer.AccX -2592.000000 +96:561.205 Sensors-Accelerometer.AccY 4519.000000 +96:561.730 Sensors-Accelerometer.AccZ -14776.000000 +96:600.725 Sensors-Accelerometer.AccX -1546.000000 +96:601.247 Sensors-Accelerometer.AccY 6302.000000 +96:601.773 Sensors-Accelerometer.AccZ -15807.000000 +96:640.690 Sensors-Accelerometer.AccX -4076.000000 +96:641.213 Sensors-Accelerometer.AccY 5370.000000 +96:641.731 Sensors-Accelerometer.AccZ -14865.000000 +96:680.690 Sensors-Accelerometer.AccX -2740.000000 +96:681.206 Sensors-Accelerometer.AccY 6221.000000 +96:681.729 Sensors-Accelerometer.AccZ -14869.000000 +96:720.690 Sensors-Accelerometer.AccX -4627.000000 +96:721.212 Sensors-Accelerometer.AccY 4988.000000 +96:721.735 Sensors-Accelerometer.AccZ -14975.000000 +96:750.683 Sensors-Magnetometer.MagX -320.000000 +96:751.169 Sensors-Magnetometer.MagY 59.000000 +96:751.638 Sensors-Magnetometer.MagZ 768.000000 +96:760.690 Sensors-Accelerometer.AccX -2986.000000 +96:761.210 Sensors-Accelerometer.AccY 3858.000000 +96:761.735 Sensors-Accelerometer.AccZ -15884.000000 +96:800.725 Sensors-Accelerometer.AccX -3667.000000 +96:801.249 Sensors-Accelerometer.AccY 4002.000000 +96:801.766 Sensors-Accelerometer.AccZ -16678.000000 +96:840.690 Sensors-Accelerometer.AccX -1755.000000 +96:841.213 Sensors-Accelerometer.AccY 2484.000000 +96:841.730 Sensors-Accelerometer.AccZ -16506.000000 +96:880.690 Sensors-Accelerometer.AccX -3047.000000 +96:881.213 Sensors-Accelerometer.AccY 2927.000000 +96:881.738 Sensors-Accelerometer.AccZ -15911.000000 +96:900.683 Sensors-Magnetometer.MagX -337.000000 +96:901.174 Sensors-Magnetometer.MagY -1.000000 +96:901.610 Sensors-Magnetometer.MagZ 762.000000 +96:920.690 Sensors-Accelerometer.AccX -193.000000 +96:921.186 Sensors-Accelerometer.AccY 3223.000000 +96:921.713 Sensors-Accelerometer.AccZ -14978.000000 +96:960.690 Sensors-Accelerometer.AccX -3124.000000 +96:961.210 Sensors-Accelerometer.AccY 3911.000000 +96:961.738 Sensors-Accelerometer.AccZ -14634.000000 +97:000.683 Sensors-Magnetometer.MagX -282.000000 +97:001.173 Sensors-Magnetometer.MagY -41.000000 +97:001.635 Sensors-Magnetometer.MagZ 757.000000 +97:002.166 Sensors-Accelerometer.AccX -4815.000000 +97:002.692 Sensors-Accelerometer.AccY 3653.000000 +97:003.214 Sensors-Accelerometer.AccZ -15311.000000 +97:040.690 Sensors-Accelerometer.AccX -6559.000000 +97:041.210 Sensors-Accelerometer.AccY 4299.000000 +97:041.735 Sensors-Accelerometer.AccZ -15253.000000 +97:080.690 Sensors-Accelerometer.AccX -5992.000000 +97:081.210 Sensors-Accelerometer.AccY 3246.000000 +97:081.732 Sensors-Accelerometer.AccZ -15168.000000 +97:120.690 Sensors-Accelerometer.AccX -4670.000000 +97:121.213 Sensors-Accelerometer.AccY 3640.000000 +97:121.734 Sensors-Accelerometer.AccZ -15105.000000 +97:160.690 Sensors-Accelerometer.AccX -5252.000000 +97:161.207 Sensors-Accelerometer.AccY 3823.000000 +97:161.735 Sensors-Accelerometer.AccZ -15368.000000 +97:200.725 Sensors-Accelerometer.AccX -4161.000000 +97:201.247 Sensors-Accelerometer.AccY 3463.000000 +97:201.769 Sensors-Accelerometer.AccZ -15396.000000 +97:240.690 Sensors-Accelerometer.AccX -3221.000000 +97:241.213 Sensors-Accelerometer.AccY 3076.000000 +97:241.735 Sensors-Accelerometer.AccZ -15236.000000 +97:280.690 Sensors-Accelerometer.AccX -3697.000000 +97:281.203 Sensors-Accelerometer.AccY 3393.000000 +97:281.719 Sensors-Accelerometer.AccZ -15711.000000 +97:320.690 Sensors-Accelerometer.AccX -2289.000000 +97:321.213 Sensors-Accelerometer.AccY 3815.000000 +97:321.735 Sensors-Accelerometer.AccZ -15616.000000 +97:360.690 Sensors-Accelerometer.AccX -2655.000000 +97:361.211 Sensors-Accelerometer.AccY 3423.000000 +97:361.734 Sensors-Accelerometer.AccZ -15628.000000 +97:400.725 Sensors-Accelerometer.AccX -3065.000000 +97:401.250 Sensors-Accelerometer.AccY 3652.000000 +97:401.770 Sensors-Accelerometer.AccZ -15533.000000 +97:440.690 Sensors-Accelerometer.AccX -3896.000000 +97:441.211 Sensors-Accelerometer.AccY 3245.000000 +97:441.734 Sensors-Accelerometer.AccZ -15813.000000 +97:480.690 Sensors-Accelerometer.AccX -3309.000000 +97:481.213 Sensors-Accelerometer.AccY 3543.000000 +97:481.740 Sensors-Accelerometer.AccZ -15737.000000 +97:520.690 Sensors-Accelerometer.AccX -3057.000000 +97:521.213 Sensors-Accelerometer.AccY 3958.000000 +97:521.738 Sensors-Accelerometer.AccZ -15497.000000 +97:560.690 Sensors-Accelerometer.AccX -2936.000000 +97:561.218 Sensors-Accelerometer.AccY 3392.000000 +97:561.732 Sensors-Accelerometer.AccZ -15336.000000 +97:600.725 Sensors-Accelerometer.AccX -2880.000000 +97:601.236 Sensors-Accelerometer.AccY 3584.000000 +97:601.747 Sensors-Accelerometer.AccZ -15120.000000 +97:640.690 Sensors-Accelerometer.AccX -3177.000000 +97:641.214 Sensors-Accelerometer.AccY 3240.000000 +97:641.732 Sensors-Accelerometer.AccZ -15402.000000 +97:680.690 Sensors-Accelerometer.AccX -2328.000000 +97:681.207 Sensors-Accelerometer.AccY 3508.000000 +97:681.725 Sensors-Accelerometer.AccZ -15637.000000 +97:720.690 Sensors-Accelerometer.AccX -4579.000000 +97:721.220 Sensors-Accelerometer.AccY 3084.000000 +97:721.741 Sensors-Accelerometer.AccZ -15154.000000 +97:760.690 Sensors-Accelerometer.AccX -4676.000000 +97:761.210 Sensors-Accelerometer.AccY 3005.000000 +97:761.734 Sensors-Accelerometer.AccZ -15511.000000 +97:800.683 Sensors-Magnetometer.MagX -220.000000 +97:801.175 Sensors-Magnetometer.MagY -84.000000 +97:801.637 Sensors-Magnetometer.MagZ 771.000000 +97:802.171 Sensors-Accelerometer.AccX -5990.000000 +97:802.696 Sensors-Accelerometer.AccY 2752.000000 +97:803.212 Sensors-Accelerometer.AccZ -14600.000000 +97:840.690 Sensors-Accelerometer.AccX -6474.000000 +97:841.213 Sensors-Accelerometer.AccY 2139.000000 +97:841.736 Sensors-Accelerometer.AccZ -14606.000000 +97:880.690 Sensors-Accelerometer.AccX -5814.000000 +97:881.218 Sensors-Accelerometer.AccY 3343.000000 +97:881.744 Sensors-Accelerometer.AccZ -14578.000000 +97:900.683 Sensors-Magnetometer.MagX -153.000000 +97:901.180 Sensors-Magnetometer.MagY -86.000000 +97:901.649 Sensors-Magnetometer.MagZ 757.000000 +97:920.690 Sensors-Accelerometer.AccX -7387.000000 +97:921.213 Sensors-Accelerometer.AccY 2607.000000 +97:921.738 Sensors-Accelerometer.AccZ -13473.000000 +97:960.690 Sensors-Accelerometer.AccX -7123.000000 +97:961.219 Sensors-Accelerometer.AccY 2793.000000 +97:961.740 Sensors-Accelerometer.AccZ -13987.000000 +98:000.725 Sensors-Accelerometer.AccX -6886.000000 +98:001.245 Sensors-Accelerometer.AccY 3115.000000 +98:001.771 Sensors-Accelerometer.AccZ -13472.000000 +98:040.690 Sensors-Accelerometer.AccX -7927.000000 +98:041.220 Sensors-Accelerometer.AccY 2184.000000 +98:041.736 Sensors-Accelerometer.AccZ -13887.000000 +98:080.690 Sensors-Accelerometer.AccX -9227.000000 +98:081.218 Sensors-Accelerometer.AccY 2455.000000 +98:081.744 Sensors-Accelerometer.AccZ -13591.000000 +98:100.683 Sensors-Magnetometer.MagX -88.000000 +98:101.148 Sensors-Magnetometer.MagY -61.000000 +98:101.617 Sensors-Magnetometer.MagZ 769.000000 +98:120.690 Sensors-Accelerometer.AccX -8216.000000 +98:121.212 Sensors-Accelerometer.AccY 2681.000000 +98:121.734 Sensors-Accelerometer.AccZ -12880.000000 +98:160.690 Sensors-Accelerometer.AccX -9342.000000 +98:161.217 Sensors-Accelerometer.AccY 1708.000000 +98:161.736 Sensors-Accelerometer.AccZ -13492.000000 +98:200.725 Sensors-Accelerometer.AccX -9312.000000 +98:201.250 Sensors-Accelerometer.AccY 2405.000000 +98:201.779 Sensors-Accelerometer.AccZ -12724.000000 +98:240.690 Sensors-Accelerometer.AccX -9297.000000 +98:241.216 Sensors-Accelerometer.AccY 1724.000000 +98:241.736 Sensors-Accelerometer.AccZ -13030.000000 +98:280.690 Sensors-Accelerometer.AccX -9118.000000 +98:281.222 Sensors-Accelerometer.AccY 1773.000000 +98:281.744 Sensors-Accelerometer.AccZ -12786.000000 +98:320.690 Sensors-Accelerometer.AccX -9091.000000 +98:321.215 Sensors-Accelerometer.AccY 1394.000000 +98:321.727 Sensors-Accelerometer.AccZ -12913.000000 +98:360.690 Sensors-Accelerometer.AccX -9553.000000 +98:361.213 Sensors-Accelerometer.AccY 2071.000000 +98:361.731 Sensors-Accelerometer.AccZ -12442.000000 +98:400.725 Sensors-Accelerometer.AccX -8722.000000 +98:401.245 Sensors-Accelerometer.AccY 2000.000000 +98:401.758 Sensors-Accelerometer.AccZ -12693.000000 +98:440.690 Sensors-Accelerometer.AccX -8483.000000 +98:441.210 Sensors-Accelerometer.AccY 1365.000000 +98:441.721 Sensors-Accelerometer.AccZ -13070.000000 +98:480.690 Sensors-Accelerometer.AccX -8855.000000 +98:481.213 Sensors-Accelerometer.AccY 849.000000 +98:481.704 Sensors-Accelerometer.AccZ -12921.000000 +98:520.690 Sensors-Accelerometer.AccX -8936.000000 +98:521.209 Sensors-Accelerometer.AccY 937.000000 +98:521.705 Sensors-Accelerometer.AccZ -13339.000000 +98:560.690 Sensors-Accelerometer.AccX -9051.000000 +98:561.212 Sensors-Accelerometer.AccY 955.000000 +98:561.707 Sensors-Accelerometer.AccZ -13016.000000 +98:600.725 Sensors-Accelerometer.AccX -8467.000000 +98:601.250 Sensors-Accelerometer.AccY 1362.000000 +98:601.764 Sensors-Accelerometer.AccZ -12922.000000 +98:640.690 Sensors-Accelerometer.AccX -8987.000000 +98:641.211 Sensors-Accelerometer.AccY 1120.000000 +98:641.724 Sensors-Accelerometer.AccZ -13041.000000 +98:680.690 Sensors-Accelerometer.AccX -8629.000000 +98:681.213 Sensors-Accelerometer.AccY 1311.000000 +98:681.729 Sensors-Accelerometer.AccZ -13070.000000 +98:720.690 Sensors-Accelerometer.AccX -9012.000000 +98:721.207 Sensors-Accelerometer.AccY 1072.000000 +98:721.719 Sensors-Accelerometer.AccZ -13025.000000 +98:760.690 Sensors-Accelerometer.AccX -8710.000000 +98:761.213 Sensors-Accelerometer.AccY 1196.000000 +98:761.734 Sensors-Accelerometer.AccZ -13163.000000 +98:840.690 Sensors-Accelerometer.AccX -8884.000000 +98:841.213 Sensors-Accelerometer.AccY 1033.000000 +98:841.731 Sensors-Accelerometer.AccZ -12945.000000 +98:960.690 Sensors-Accelerometer.AccX -8773.000000 +98:961.212 Sensors-Accelerometer.AccY 1234.000000 +98:961.728 Sensors-Accelerometer.AccZ -12989.000000 +99:000.725 Sensors-Accelerometer.AccX -9106.000000 +99:001.250 Sensors-Accelerometer.AccY 945.000000 +99:001.746 Sensors-Accelerometer.AccZ -13003.000000 +99:040.690 Sensors-Accelerometer.AccX -8938.000000 +99:041.214 Sensors-Accelerometer.AccY 1149.000000 +99:041.734 Sensors-Accelerometer.AccZ -13032.000000 +99:240.690 Sensors-Accelerometer.AccX -9099.000000 +99:241.219 Sensors-Accelerometer.AccY 984.000000 +99:241.711 Sensors-Accelerometer.AccZ -12803.000000 +99:280.690 Sensors-Accelerometer.AccX -8752.000000 +99:281.211 Sensors-Accelerometer.AccY 1256.000000 +99:281.728 Sensors-Accelerometer.AccZ -12819.000000 +99:320.690 Sensors-Accelerometer.AccX -9041.000000 +99:321.215 Sensors-Accelerometer.AccY 935.000000 +99:321.715 Sensors-Accelerometer.AccZ -12833.000000 +99:400.725 Sensors-Accelerometer.AccX -8800.000000 +99:401.245 Sensors-Accelerometer.AccY 1226.000000 +99:401.765 Sensors-Accelerometer.AccZ -12994.000000 +99:440.690 Sensors-Accelerometer.AccX -9033.000000 +99:441.213 Sensors-Accelerometer.AccY 1251.000000 +99:441.738 Sensors-Accelerometer.AccZ -12908.000000 +99:480.690 Sensors-Accelerometer.AccX -8877.000000 +99:481.217 Sensors-Accelerometer.AccY 934.000000 +99:481.715 Sensors-Accelerometer.AccZ -12947.000000 +99:520.690 Sensors-Accelerometer.AccX -8905.000000 +99:521.217 Sensors-Accelerometer.AccY 1227.000000 +99:521.741 Sensors-Accelerometer.AccZ -12873.000000 +99:600.725 Sensors-Accelerometer.AccX -8947.000000 +99:601.251 Sensors-Accelerometer.AccY 1000.000000 +99:601.767 Sensors-Accelerometer.AccZ -12961.000000 +100:040.690 Sensors-Accelerometer.AccX -8876.000000 +100:041.237 Sensors-Accelerometer.AccY 851.000000 +100:041.754 Sensors-Accelerometer.AccZ -13019.000000 +100:550.683 Sensors-Magnetometer.MagX -40.000000 +100:551.169 Sensors-Magnetometer.MagY -26.000000 +100:551.658 Sensors-Magnetometer.MagZ 764.000000 +100:640.690 Sensors-Accelerometer.AccX -8958.000000 +100:641.238 Sensors-Accelerometer.AccY 871.000000 +100:641.755 Sensors-Accelerometer.AccZ -12751.000000 +100:720.690 Sensors-Accelerometer.AccX -9040.000000 +100:721.232 Sensors-Accelerometer.AccY 817.000000 +100:721.753 Sensors-Accelerometer.AccZ -12997.000000 +100:800.725 Sensors-Accelerometer.AccX -8958.000000 +100:801.273 Sensors-Accelerometer.AccY 1075.000000 +100:801.814 Sensors-Accelerometer.AccZ -12836.000000 +100:880.690 Sensors-Accelerometer.AccX -9057.000000 +100:881.238 Sensors-Accelerometer.AccY 836.000000 +100:881.752 Sensors-Accelerometer.AccZ -12884.000000 +100:960.690 Sensors-Accelerometer.AccX -8853.000000 +100:961.234 Sensors-Accelerometer.AccY 976.000000 +100:961.748 Sensors-Accelerometer.AccZ -12812.000000 +101:120.690 Sensors-Accelerometer.AccX -9075.000000 +101:121.238 Sensors-Accelerometer.AccY 1053.000000 +101:121.773 Sensors-Accelerometer.AccZ -12789.000000 +101:280.690 Sensors-Accelerometer.AccX -9192.000000 +101:281.233 Sensors-Accelerometer.AccY 828.000000 +101:281.751 Sensors-Accelerometer.AccZ -12863.000000 +101:640.690 Sensors-Accelerometer.AccX -9181.000000 +101:641.237 Sensors-Accelerometer.AccY 1027.000000 +101:641.778 Sensors-Accelerometer.AccZ -12533.000000 +101:760.690 Sensors-Accelerometer.AccX -9422.000000 +101:761.236 Sensors-Accelerometer.AccY 979.000000 +101:761.758 Sensors-Accelerometer.AccZ -12687.000000 +101:800.725 Sensors-Accelerometer.AccX -8957.000000 +101:801.276 Sensors-Accelerometer.AccY 822.000000 +101:801.793 Sensors-Accelerometer.AccZ -12786.000000 +101:840.690 Sensors-Accelerometer.AccX -9635.000000 +101:841.241 Sensors-Accelerometer.AccY 1176.000000 +101:841.783 Sensors-Accelerometer.AccZ -12368.000000 +101:880.690 Sensors-Accelerometer.AccX -9425.000000 +101:881.239 Sensors-Accelerometer.AccY 998.000000 +101:881.764 Sensors-Accelerometer.AccZ -12379.000000 +101:920.690 Sensors-Accelerometer.AccX -9677.000000 +101:921.237 Sensors-Accelerometer.AccY 1242.000000 +101:921.779 Sensors-Accelerometer.AccZ -12561.000000 +101:960.690 Sensors-Accelerometer.AccX -9720.000000 +101:961.240 Sensors-Accelerometer.AccY 970.000000 +101:961.758 Sensors-Accelerometer.AccZ -12403.000000 +102:000.725 Sensors-Accelerometer.AccX -9460.000000 +102:001.270 Sensors-Accelerometer.AccY 1305.000000 +102:001.814 Sensors-Accelerometer.AccZ -12428.000000 +102:080.690 Sensors-Accelerometer.AccX -9456.000000 +102:081.235 Sensors-Accelerometer.AccY 1954.000000 +102:081.777 Sensors-Accelerometer.AccZ -12393.000000 +102:100.683 Sensors-Magnetometer.MagX 18.000000 +102:101.172 Sensors-Magnetometer.MagY -43.000000 +102:101.666 Sensors-Magnetometer.MagZ 757.000000 +102:120.690 Sensors-Accelerometer.AccX -9439.000000 +102:121.240 Sensors-Accelerometer.AccY 3390.000000 +102:121.786 Sensors-Accelerometer.AccZ -12002.000000 +102:160.690 Sensors-Accelerometer.AccX -8600.000000 +102:161.234 Sensors-Accelerometer.AccY 2828.000000 +102:161.779 Sensors-Accelerometer.AccZ -10822.000000 +102:200.683 Sensors-Magnetometer.MagX 110.000000 +102:201.199 Sensors-Magnetometer.MagY -13.000000 +102:201.691 Sensors-Magnetometer.MagZ 732.000000 +102:202.248 Sensors-Accelerometer.AccX -10816.000000 +102:202.810 Sensors-Accelerometer.AccY 619.000000 +102:203.335 Sensors-Accelerometer.AccZ -9839.000000 +102:240.690 Sensors-Accelerometer.AccX -12716.000000 +102:241.262 Sensors-Accelerometer.AccY 1322.000000 +102:241.802 Sensors-Accelerometer.AccZ -9209.000000 +102:250.683 Sensors-Magnetometer.MagX 177.000000 +102:251.197 Sensors-Magnetometer.MagY -1.000000 +102:251.660 Sensors-Magnetometer.MagZ 700.000000 +102:280.690 Sensors-Accelerometer.AccX -12786.000000 +102:281.265 Sensors-Accelerometer.AccY 1405.000000 +102:281.810 Sensors-Accelerometer.AccZ -8479.000000 +102:300.683 Sensors-Magnetometer.MagX 239.000000 +102:301.206 Sensors-Magnetometer.MagY 13.000000 +102:301.695 Sensors-Magnetometer.MagZ 650.000000 +102:320.690 Sensors-Accelerometer.AccX -16540.000000 +102:321.260 Sensors-Accelerometer.AccY 1070.000000 +102:321.803 Sensors-Accelerometer.AccZ -6282.000000 +102:350.683 Sensors-Magnetometer.MagX 319.000000 +102:351.207 Sensors-Magnetometer.MagY 23.000000 +102:351.699 Sensors-Magnetometer.MagZ 608.000000 +102:360.690 Sensors-Accelerometer.AccX -17452.000000 +102:361.262 Sensors-Accelerometer.AccY -502.000000 +102:361.787 Sensors-Accelerometer.AccZ -5089.000000 +102:400.725 Sensors-Accelerometer.AccX -15849.000000 +102:401.289 Sensors-Accelerometer.AccY 2398.000000 +102:401.826 Sensors-Accelerometer.AccZ -4578.000000 +102:440.690 Sensors-Accelerometer.AccX -16161.000000 +102:441.255 Sensors-Accelerometer.AccY 4608.000000 +102:441.784 Sensors-Accelerometer.AccZ -2824.000000 +102:450.683 Sensors-Magnetometer.MagX 375.000000 +102:451.198 Sensors-Magnetometer.MagY -59.000000 +102:451.686 Sensors-Magnetometer.MagZ 531.000000 +102:480.690 Sensors-Accelerometer.AccX -14820.000000 +102:481.252 Sensors-Accelerometer.AccY 3381.000000 +102:481.790 Sensors-Accelerometer.AccZ -1450.000000 +102:520.690 Sensors-Accelerometer.AccX -15251.000000 +102:521.263 Sensors-Accelerometer.AccY 4884.000000 +102:521.804 Sensors-Accelerometer.AccZ -1260.000000 +102:560.690 Sensors-Accelerometer.AccX -14405.000000 +102:561.256 Sensors-Accelerometer.AccY 4825.000000 +102:561.799 Sensors-Accelerometer.AccZ -651.000000 +102:600.683 Sensors-Magnetometer.MagX 432.000000 +102:601.192 Sensors-Magnetometer.MagY -93.000000 +102:601.679 Sensors-Magnetometer.MagZ 483.000000 +102:602.234 Sensors-Accelerometer.AccX -13914.000000 +102:602.804 Sensors-Accelerometer.AccY 4796.000000 +102:603.349 Sensors-Accelerometer.AccZ -981.000000 +102:640.690 Sensors-Accelerometer.AccX -15620.000000 +102:641.256 Sensors-Accelerometer.AccY 4187.000000 +102:641.802 Sensors-Accelerometer.AccZ -1025.000000 +102:680.690 Sensors-Accelerometer.AccX -15368.000000 +102:681.255 Sensors-Accelerometer.AccY 4700.000000 +102:681.800 Sensors-Accelerometer.AccZ -926.000000 +102:720.690 Sensors-Accelerometer.AccX -16444.000000 +102:721.253 Sensors-Accelerometer.AccY 5303.000000 +102:721.798 Sensors-Accelerometer.AccZ -2287.000000 +102:750.684 Sensors-Magnetometer.MagX 475.000000 +102:751.203 Sensors-Magnetometer.MagY -110.000000 +102:751.715 Sensors-Magnetometer.MagZ 403.000000 +102:760.691 Sensors-Accelerometer.AccX -16352.000000 +102:761.257 Sensors-Accelerometer.AccY 4964.000000 +102:761.800 Sensors-Accelerometer.AccZ 450.000000 +102:800.725 Sensors-Accelerometer.AccX -13792.000000 +102:801.287 Sensors-Accelerometer.AccY 4755.000000 +102:801.832 Sensors-Accelerometer.AccZ 2083.000000 +102:840.690 Sensors-Accelerometer.AccX -14693.000000 +102:841.261 Sensors-Accelerometer.AccY 4761.000000 +102:841.806 Sensors-Accelerometer.AccZ 1868.000000 +102:850.684 Sensors-Magnetometer.MagX 507.000000 +102:851.201 Sensors-Magnetometer.MagY -105.000000 +102:851.705 Sensors-Magnetometer.MagZ 351.000000 +102:880.690 Sensors-Accelerometer.AccX -13119.000000 +102:881.256 Sensors-Accelerometer.AccY 3001.000000 +102:881.801 Sensors-Accelerometer.AccZ 5790.000000 +102:920.690 Sensors-Accelerometer.AccX -13800.000000 +102:921.250 Sensors-Accelerometer.AccY 4114.000000 +102:921.790 Sensors-Accelerometer.AccZ 4978.000000 +102:960.690 Sensors-Accelerometer.AccX -14841.000000 +102:961.258 Sensors-Accelerometer.AccY 3870.000000 +102:961.802 Sensors-Accelerometer.AccZ 2544.000000 +103:000.683 Sensors-Magnetometer.MagX 539.000000 +103:001.200 Sensors-Magnetometer.MagY -80.000000 +103:001.684 Sensors-Magnetometer.MagZ 291.000000 +103:002.236 Sensors-Accelerometer.AccX -11692.000000 +103:002.806 Sensors-Accelerometer.AccY 4324.000000 +103:003.347 Sensors-Accelerometer.AccZ 4280.000000 +103:040.690 Sensors-Accelerometer.AccX -13644.000000 +103:041.251 Sensors-Accelerometer.AccY 3418.000000 +103:041.790 Sensors-Accelerometer.AccZ 3650.000000 +103:080.690 Sensors-Accelerometer.AccX -15171.000000 +103:081.264 Sensors-Accelerometer.AccY 3003.000000 +103:081.809 Sensors-Accelerometer.AccZ 4027.000000 +103:120.690 Sensors-Accelerometer.AccX -15890.000000 +103:121.261 Sensors-Accelerometer.AccY 4660.000000 +103:121.803 Sensors-Accelerometer.AccZ 1138.000000 +103:160.690 Sensors-Accelerometer.AccX -15179.000000 +103:161.265 Sensors-Accelerometer.AccY 3836.000000 +103:161.812 Sensors-Accelerometer.AccZ 4293.000000 +103:200.725 Sensors-Accelerometer.AccX -14630.000000 +103:201.297 Sensors-Accelerometer.AccY 3753.000000 +103:201.840 Sensors-Accelerometer.AccZ 4387.000000 +103:240.690 Sensors-Accelerometer.AccX -14429.000000 +103:241.252 Sensors-Accelerometer.AccY 4158.000000 +103:241.795 Sensors-Accelerometer.AccZ 4247.000000 +103:280.690 Sensors-Accelerometer.AccX -14787.000000 +103:281.255 Sensors-Accelerometer.AccY 4254.000000 +103:281.797 Sensors-Accelerometer.AccZ 3228.000000 +103:320.690 Sensors-Accelerometer.AccX -15203.000000 +103:321.268 Sensors-Accelerometer.AccY 4146.000000 +103:321.812 Sensors-Accelerometer.AccZ 3260.000000 +103:360.690 Sensors-Accelerometer.AccX -14952.000000 +103:361.256 Sensors-Accelerometer.AccY 4377.000000 +103:361.800 Sensors-Accelerometer.AccZ 2314.000000 +103:400.725 Sensors-Accelerometer.AccX -14219.000000 +103:401.298 Sensors-Accelerometer.AccY 3929.000000 +103:401.846 Sensors-Accelerometer.AccZ 3440.000000 +103:440.690 Sensors-Accelerometer.AccX -14857.000000 +103:441.259 Sensors-Accelerometer.AccY 4065.000000 +103:441.802 Sensors-Accelerometer.AccZ 3717.000000 +103:480.690 Sensors-Accelerometer.AccX -14436.000000 +103:481.255 Sensors-Accelerometer.AccY 4050.000000 +103:481.799 Sensors-Accelerometer.AccZ 3486.000000 +103:520.690 Sensors-Accelerometer.AccX -14909.000000 +103:521.264 Sensors-Accelerometer.AccY 4154.000000 +103:521.807 Sensors-Accelerometer.AccZ 2985.000000 +103:560.690 Sensors-Accelerometer.AccX -14930.000000 +103:561.259 Sensors-Accelerometer.AccY 3973.000000 +103:561.805 Sensors-Accelerometer.AccZ 3221.000000 +103:640.690 Sensors-Accelerometer.AccX -14756.000000 +103:641.257 Sensors-Accelerometer.AccY 4342.000000 +103:641.799 Sensors-Accelerometer.AccZ 3134.000000 +103:680.690 Sensors-Accelerometer.AccX -15235.000000 +103:681.260 Sensors-Accelerometer.AccY 4243.000000 +103:681.802 Sensors-Accelerometer.AccZ 3319.000000 +103:720.690 Sensors-Accelerometer.AccX -14436.000000 +103:721.255 Sensors-Accelerometer.AccY 4047.000000 +103:721.799 Sensors-Accelerometer.AccZ 3191.000000 +103:800.725 Sensors-Accelerometer.AccX -14678.000000 +103:801.304 Sensors-Accelerometer.AccY 4156.000000 +103:801.849 Sensors-Accelerometer.AccZ 3188.000000 +103:840.690 Sensors-Accelerometer.AccX -15066.000000 +103:841.261 Sensors-Accelerometer.AccY 3934.000000 +103:841.805 Sensors-Accelerometer.AccZ 3402.000000 +103:880.690 Sensors-Accelerometer.AccX -14527.000000 +103:881.262 Sensors-Accelerometer.AccY 4331.000000 +103:881.808 Sensors-Accelerometer.AccZ 3165.000000 +103:960.690 Sensors-Accelerometer.AccX -14842.000000 +103:961.260 Sensors-Accelerometer.AccY 4239.000000 +103:961.807 Sensors-Accelerometer.AccZ 3101.000000 +104:000.725 Sensors-Accelerometer.AccX -14818.000000 +104:001.289 Sensors-Accelerometer.AccY 4190.000000 +104:001.833 Sensors-Accelerometer.AccZ 3448.000000 +104:040.690 Sensors-Accelerometer.AccX -15059.000000 +104:041.260 Sensors-Accelerometer.AccY 4025.000000 +104:041.802 Sensors-Accelerometer.AccZ 3526.000000 +104:064.814 Buttons-Center 0x1 +104:080.690 Sensors-Accelerometer.AccX -14748.000000 +104:081.254 Sensors-Accelerometer.AccY 4742.000000 +104:081.798 Sensors-Accelerometer.AccZ 3169.000000 +104:120.690 Sensors-Accelerometer.AccX -14563.000000 +104:121.262 Sensors-Accelerometer.AccY 3818.000000 +104:121.805 Sensors-Accelerometer.AccZ 3596.000000 +104:160.690 Sensors-Accelerometer.AccX -14662.000000 +104:161.265 Sensors-Accelerometer.AccY 4222.000000 +104:161.807 Sensors-Accelerometer.AccZ 3350.000000 +104:200.725 Sensors-Accelerometer.AccX -14245.000000 +104:201.296 Sensors-Accelerometer.AccY 4293.000000 +104:201.839 Sensors-Accelerometer.AccZ 3235.000000 +104:240.690 Sensors-Accelerometer.AccX -14833.000000 +104:241.259 Sensors-Accelerometer.AccY 4026.000000 +104:241.805 Sensors-Accelerometer.AccZ 3542.000000 +104:280.690 Sensors-Accelerometer.AccX -14540.000000 +104:281.262 Sensors-Accelerometer.AccY 4250.000000 +104:281.806 Sensors-Accelerometer.AccZ 3396.000000 +104:400.725 Sensors-Accelerometer.AccX -14950.000000 +104:401.298 Sensors-Accelerometer.AccY 4052.000000 +104:401.839 Sensors-Accelerometer.AccZ 3695.000000 +104:440.690 Sensors-Accelerometer.AccX -14715.000000 +104:441.266 Sensors-Accelerometer.AccY 4133.000000 +104:441.812 Sensors-Accelerometer.AccZ 3509.000000 +105:040.690 Sensors-Accelerometer.AccX -14456.000000 +105:041.252 Sensors-Accelerometer.AccY 4300.000000 +105:041.789 Sensors-Accelerometer.AccZ 3380.000000 +105:080.690 Sensors-Accelerometer.AccX -14793.000000 +105:081.255 Sensors-Accelerometer.AccY 4193.000000 +105:081.799 Sensors-Accelerometer.AccZ 3361.000000 +105:200.725 Sensors-Accelerometer.AccX -14583.000000 +105:201.292 Sensors-Accelerometer.AccY 4187.000000 +105:201.835 Sensors-Accelerometer.AccZ 3378.000000 +105:450.683 Sensors-Magnetometer.MagX 530.000000 +105:451.196 Sensors-Magnetometer.MagY -90.000000 +105:451.687 Sensors-Magnetometer.MagZ 305.000000 +105:840.690 Sensors-Accelerometer.AccX -14950.000000 +105:841.259 Sensors-Accelerometer.AccY 4063.000000 +105:841.805 Sensors-Accelerometer.AccZ 3528.000000 +105:920.690 Sensors-Accelerometer.AccX -14458.000000 +105:921.254 Sensors-Accelerometer.AccY 4110.000000 +105:921.796 Sensors-Accelerometer.AccZ 3489.000000 +105:960.690 Sensors-Accelerometer.AccX -14685.000000 +105:961.256 Sensors-Accelerometer.AccY 4067.000000 +105:961.803 Sensors-Accelerometer.AccZ 3393.000000 +106:120.690 Sensors-Accelerometer.AccX -14638.000000 +106:121.264 Sensors-Accelerometer.AccY 4092.000000 +106:121.808 Sensors-Accelerometer.AccZ 3611.000000 +106:200.725 Sensors-Accelerometer.AccX -14667.000000 +106:201.297 Sensors-Accelerometer.AccY 4130.000000 +106:201.835 Sensors-Accelerometer.AccZ 3389.000000 +106:240.690 Sensors-Accelerometer.AccX -14892.000000 +106:241.253 Sensors-Accelerometer.AccY 3932.000000 +106:241.800 Sensors-Accelerometer.AccZ 3631.000000 +106:280.690 Sensors-Accelerometer.AccX -14709.000000 +106:281.259 Sensors-Accelerometer.AccY 4144.000000 +106:281.797 Sensors-Accelerometer.AccZ 3480.000000 +106:760.690 Sensors-Accelerometer.AccX -14465.000000 +106:761.258 Sensors-Accelerometer.AccY 4175.000000 +106:761.802 Sensors-Accelerometer.AccZ 3368.000000 +106:800.725 Sensors-Accelerometer.AccX -14834.000000 +106:801.293 Sensors-Accelerometer.AccY 3954.000000 +106:801.834 Sensors-Accelerometer.AccZ 3685.000000 +106:840.690 Sensors-Accelerometer.AccX -14653.000000 +106:841.263 Sensors-Accelerometer.AccY 4147.000000 +106:841.809 Sensors-Accelerometer.AccZ 3433.000000 +107:040.690 Sensors-Accelerometer.AccX -14770.000000 +107:041.255 Sensors-Accelerometer.AccY 3832.000000 +107:041.799 Sensors-Accelerometer.AccZ 3550.000000 +107:080.690 Sensors-Accelerometer.AccX -14552.000000 +107:081.257 Sensors-Accelerometer.AccY 4071.000000 +107:081.804 Sensors-Accelerometer.AccZ 3476.000000 +107:200.725 Sensors-Accelerometer.AccX -14770.000000 +107:201.290 Sensors-Accelerometer.AccY 4164.000000 +107:201.825 Sensors-Accelerometer.AccZ 3521.000000 +107:360.690 Sensors-Accelerometer.AccX -14378.000000 +107:361.256 Sensors-Accelerometer.AccY 4077.000000 +107:361.800 Sensors-Accelerometer.AccZ 3619.000000 +107:480.690 Sensors-Accelerometer.AccX -14671.000000 +107:481.265 Sensors-Accelerometer.AccY 4043.000000 +107:481.809 Sensors-Accelerometer.AccZ 3702.000000 +107:560.690 Sensors-Accelerometer.AccX -14367.000000 +107:561.259 Sensors-Accelerometer.AccY 4344.000000 +107:561.795 Sensors-Accelerometer.AccZ 3503.000000 +107:600.725 Sensors-Accelerometer.AccX -14657.000000 +107:601.294 Sensors-Accelerometer.AccY 4352.000000 +107:601.823 Sensors-Accelerometer.AccZ 2845.000000 +107:640.690 Sensors-Accelerometer.AccX -14875.000000 +107:641.262 Sensors-Accelerometer.AccY 4190.000000 +107:641.810 Sensors-Accelerometer.AccZ 3530.000000 +107:704.381 Buttons-Center 0x0 diff --git a/sources/common/doc/examples/user1.xml b/sources/common/doc/examples/user1.xml new file mode 100644 index 0000000..8386ed7 --- /dev/null +++ b/sources/common/doc/examples/user1.xml @@ -0,0 +1,36 @@ + + + + + + ([[:d:]]+):([[:d:]]+)\.([[:d:]]+) Sensors-Magnetometer.Mag([XYZ]+) 0x([0-9a-fA-F]+) + 1000000*dec(/1) + 1000*dec(/2) + dec(/3) + FRDM.Sensors.Magnetometer.Mag/4 + hex(/5) + 32 + + + + ([[:d:]]+):([[:d:]]+)\.([[:d:]]+) Sensors-Slider 0x([0-9a-fA-F]+) + 1000000*dec(/1) + 1000*dec(/2) + dec(/3) + FRDM.Sensors.Slider + hex(/4) + 7 + + + + ([[:d:]]+):([[:d:]]+)\.([[:d:]]+) Buttons-SW([13]+) ([[:d:]]+) + 1000000*dec(/1) + 1000*dec(/2) + dec(/3) + FRDM.Buttons-SW/4 + dec(/5) + 1 + + + + ([[:digit:]]+):([[:digit:]]+)\.([[:digit:]]+) ([[:graph:]]+)-([[:graph:]]+) ([[:digit:][:punct:]]+) + 1000000*dec(/1) + 1000*dec(/2) + dec(/3) + FRDM./4./5 + /6 + + + diff --git a/sources/common/doc/examples/user2.xml b/sources/common/doc/examples/user2.xml new file mode 100644 index 0000000..c4705bf --- /dev/null +++ b/sources/common/doc/examples/user2.xml @@ -0,0 +1,26 @@ + + + + + + ([[:digit:]]+):([[:digit:]]+)\.([[:digit:]]+) Buttons-([[:graph:]]+) 0x([0-9a-fA-F]+) + 1000000*dec(/1) + 1000*dec(/2) + dec(/3) + Disco.Buttons./4 + dec(/5) + 1 + + + + ([[:digit:]]+):([[:digit:]]+)\.([[:digit:]]+) ([[:graph:]]+)-([[:graph:]]+) ([[:digit:][:punct:]]+) + 1000000*dec(/1) + 1000*dec(/2) + dec(/3) + Disco./4./5 + /6 + + + + ([[:digit:]]+):([[:digit:]]+)\.([[:digit:]]+) Sync.* + 1000000*dec(/1) + 1000*dec(/2) + dec(/3) + Disco.Sync + + + diff --git a/sources/common/doc/examples/vcdMaker.xml b/sources/common/doc/examples/vcdMaker.xml index 6e17964..3910481 100644 --- a/sources/common/doc/examples/vcdMaker.xml +++ b/sources/common/doc/examples/vcdMaker.xml @@ -3,24 +3,24 @@ - ^#([[:d:]]+) ([[:graph:]]+) ([[:d:]]+) ([[:d:]]+)( +.*)? - 1 - 2 - 3 - 4 + #([[:d:]]+) ([[:graph:]]+) ([[:d:]]+) ([[:d:]]+) + dec(/1) + /2 + dec(/3) + dec(/4) - ^#([[:d:]]+) ([[:graph:]]+) ([[:d:][:punct:]]+) f( +.*)? - 1 - 2 - 3 + #([[:d:]]+) ([[:graph:]]+) ([[:d:][:punct:]]+) f( +.*)? + dec(/1) + /2 + /3 - ^#([[:d:]]+) ([[:graph:]]+) e( +.*)? - 1 - 2 + #([[:d:]]+) ([[:graph:]]+) e( +.*)? + dec(/1) + /2 diff --git a/sources/common/doc/manual.odt b/sources/common/doc/manual.odt index 2bb0fa4a6cb8511a76ab44bbf0bc09034ddca712..16bfc0a3ebee9e79e72201e637aeab73d9623125 100644 GIT binary patch delta 22899 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 From 5adb1d9a8441677ca716e33d4818c46ed50af361 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Wed, 7 Mar 2018 23:49:38 +0100 Subject: [PATCH 079/143] #2 Peer review fixes --- sources/common/inc/TimeUnit.h | 29 ++++++++++++-------------- sources/common/src/TimeUnit.cpp | 30 +++++++++++++-------------- sources/vcdMaker/inc/CliMaker.h | 4 +++- sources/vcdMaker/src/vcdMaker.cpp | 8 +++---- sources/vcdMerge/src/Merge.cpp | 12 +++++------ sources/vcdMerge/src/SignalSource.cpp | 2 +- 6 files changed, 42 insertions(+), 43 deletions(-) diff --git a/sources/common/inc/TimeUnit.h b/sources/common/inc/TimeUnit.h index 68382c0..3d00132 100644 --- a/sources/common/inc/TimeUnit.h +++ b/sources/common/inc/TimeUnit.h @@ -30,6 +30,7 @@ #pragma once #include +#include #include namespace TIME @@ -37,30 +38,27 @@ namespace TIME /// The time unit class. class Unit { - public: - /// Unit is a singleton class. - static Unit &GetInstance() - { - static Unit instance; - return instance; - } + private: + /// Number of units + static const uint32_t NO_OF_UNITS = 6U; + public: /// Checks if given time unit is supported. - bool IsTimeUnitValid(const std::string &rUnit) const; + static bool IsTimeUnitValid(const std::string &rUnit); /// Returns given time unit index in supported units list. /// /// @throws VcdError if the time unit is out of spec. /// @param rUnit The time unit string. - size_t GetTimeUnitIndex(const std::string &rUnit) const; + static size_t GetTimeUnitIndex(const std::string &rUnit); /// Returns the literal of the time unit. /// /// @param index The time unit index. - const std::string &GetTimeUnit(size_t index) const; + static const std::string &GetTimeUnit(size_t index); /// Returns the list of available time units. - const std::vector &GetTimeUnits() const + static const std::array &GetTimeUnits() { return TIME_UNITS; } @@ -68,17 +66,16 @@ namespace TIME /// Returns the 10^N value according to the given unit index. /// /// @param index The index of the unit. - uint64_t GetTenPower(size_t index) const; + static uint64_t GetTenPower(size_t index); private: /// The default constructor. - Unit(); + Unit() = default; /// Available time units. - static const std::vector TIME_UNITS; + static const std::array TIME_UNITS; /// A table containing integer values of 10^(3*n) where n equals position in the table. - static const std::vector TEN_POWER; + static const std::array TEN_POWER; }; - inline Unit::Unit() = default; } diff --git a/sources/common/src/TimeUnit.cpp b/sources/common/src/TimeUnit.cpp index f75c6ee..b31a832 100644 --- a/sources/common/src/TimeUnit.cpp +++ b/sources/common/src/TimeUnit.cpp @@ -36,27 +36,27 @@ #include "TimeUnit.h" #include "VcdException.h" -const std::vector TIME::Unit::TIME_UNITS = -{ "s", "ms", "us", "ns", "ps", "fs" }; +const std::array TIME::Unit::TIME_UNITS = + { "s", "ms", "us", "ns", "ps", "fs" }; -const std::vector TIME::Unit::TEN_POWER = -{ - 1ull, - static_cast(std::kilo::num), - static_cast(std::mega::num), - static_cast(std::giga::num), - static_cast(std::tera::num), - static_cast(std::peta::num) -}; +const std::array TIME::Unit::TEN_POWER = + { + 1ull, + std::kilo::num, + std::mega::num, + std::giga::num, + std::tera::num, + std::peta::num + }; -bool TIME::Unit::IsTimeUnitValid(const std::string &rUnit) const +bool TIME::Unit::IsTimeUnitValid(const std::string &rUnit) { return (std::find(TIME_UNITS.cbegin(), TIME_UNITS.cend(), rUnit) != TIME_UNITS.cend()); } -size_t TIME::Unit::GetTimeUnitIndex(const std::string &rUnit) const +size_t TIME::Unit::GetTimeUnitIndex(const std::string &rUnit) { const size_t index = (std::find(TIME_UNITS.cbegin(), TIME_UNITS.cend(), @@ -73,7 +73,7 @@ size_t TIME::Unit::GetTimeUnitIndex(const std::string &rUnit) const } } -const std::string &TIME::Unit::GetTimeUnit(size_t index) const +const std::string &TIME::Unit::GetTimeUnit(size_t index) { if (index >= TIME_UNITS.size()) { @@ -83,7 +83,7 @@ const std::string &TIME::Unit::GetTimeUnit(size_t index) const return TIME_UNITS[index]; } -uint64_t TIME::Unit::GetTenPower(size_t index) const +uint64_t TIME::Unit::GetTenPower(size_t index) { if (index >= TEN_POWER.size()) { diff --git a/sources/vcdMaker/inc/CliMaker.h b/sources/vcdMaker/inc/CliMaker.h index 8837423..d9ff2a3 100644 --- a/sources/vcdMaker/inc/CliMaker.h +++ b/sources/vcdMaker/inc/CliMaker.h @@ -79,7 +79,9 @@ namespace CLI private: /// Valid timebases constraint. - TCLAP::ValuesConstraint m_AllowedTimebases{const_cast&>(TIME::Unit::GetInstance().GetTimeUnits())}; + std::vector m_AllowedTimebasesTclap{TIME::Unit::GetTimeUnits().cbegin(), + TIME::Unit::GetTimeUnits().cend() }; + TCLAP::ValuesConstraint m_AllowedTimebases{m_AllowedTimebasesTclap}; /// Timebase parameter. TCLAP::ValueArg m_Timebase diff --git a/sources/vcdMaker/src/vcdMaker.cpp b/sources/vcdMaker/src/vcdMaker.cpp index ebd3547..9aa896f 100644 --- a/sources/vcdMaker/src/vcdMaker.cpp +++ b/sources/vcdMaker/src/vcdMaker.cpp @@ -98,10 +98,10 @@ int main(int argc, const char *argv[]) { executionStatus = EXECUTION::APP_ERROR; } - catch (TCLAP::SpecificationException &) - { - executionStatus = EXECUTION::APP_ERROR; - } + catch (TCLAP::SpecificationException &) + { + executionStatus = EXECUTION::APP_ERROR; + } return executionStatus; } diff --git a/sources/vcdMerge/src/Merge.cpp b/sources/vcdMerge/src/Merge.cpp index c4d7f30..9a41b58 100644 --- a/sources/vcdMerge/src/Merge.cpp +++ b/sources/vcdMerge/src/Merge.cpp @@ -124,11 +124,11 @@ std::string MERGE::Merge::FindMinUnit() const for (const SignalSource *const source : m_Sources) { - const size_t index = TIME::Unit::GetInstance().GetTimeUnitIndex(source->GetTimeUnit()); + const size_t index = TIME::Unit::GetTimeUnitIndex(source->GetTimeUnit()); max_index = std::max(index, max_index); } - return TIME::Unit::GetInstance().GetTimeUnit(max_index); + return TIME::Unit::GetTimeUnit(max_index); } TIME::Timestamp MERGE::Merge::FindMaxLeadingTime() const @@ -158,8 +158,8 @@ TIME::Timestamp MERGE::Merge::TransformTimestamp(const TIME::Timestamp &rTime, uint32_t nominator = 0; uint32_t denominator = 0; - const uint32_t target_power = TIME::Unit::GetInstance().GetTimeUnitIndex(rTargetTimeUnit); - const uint32_t source_power = TIME::Unit::GetInstance().GetTimeUnitIndex(rSourceTimeUnit); + const uint32_t target_power = TIME::Unit::GetTimeUnitIndex(rTargetTimeUnit); + const uint32_t source_power = TIME::Unit::GetTimeUnitIndex(rSourceTimeUnit); if (target_power > source_power) { @@ -168,13 +168,13 @@ TIME::Timestamp MERGE::Merge::TransformTimestamp(const TIME::Timestamp &rTime, else if (target_power < source_power) { denominator = (source_power - target_power); - const TIME::Timestamp rounding(TIME::Unit::GetInstance().GetTenPower(denominator) / 2); + const TIME::Timestamp rounding(TIME::Unit::GetTenPower(denominator) / 2); new_time = rTime + rounding; } const double units_ratio = - static_cast(TIME::Unit::GetInstance().GetTenPower(nominator)) / TIME::Unit::GetInstance().GetTenPower(denominator); + static_cast(TIME::Unit::GetTenPower(nominator)) / TIME::Unit::GetTenPower(denominator); return TIME::Timestamp(static_cast(new_time.GetValue() * units_ratio)); } diff --git a/sources/vcdMerge/src/SignalSource.cpp b/sources/vcdMerge/src/SignalSource.cpp index 83d69c1..36efcbc 100644 --- a/sources/vcdMerge/src/SignalSource.cpp +++ b/sources/vcdMerge/src/SignalSource.cpp @@ -151,7 +151,7 @@ void MERGE::SignalSource::SetSyncPoint(const std::string &rSyncPoint) void MERGE::SignalSource::SetTimeUnit(const std::string &rTimeUnit) { - if (TIME::Unit::GetInstance().IsTimeUnitValid(rTimeUnit)) + if (TIME::Unit::IsTimeUnitValid(rTimeUnit)) { m_TimeUnit = rTimeUnit; } From 23b8ae5f210d753bf85522b25dc36ce487b472ee Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Wed, 7 Mar 2018 23:57:34 +0100 Subject: [PATCH 080/143] #2 UT after PR --- sources/common/test/unitTest/TimeUnit.cpp | 46 +++++++++++------------ 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/sources/common/test/unitTest/TimeUnit.cpp b/sources/common/test/unitTest/TimeUnit.cpp index 109d74d..85a9fd5 100644 --- a/sources/common/test/unitTest/TimeUnit.cpp +++ b/sources/common/test/unitTest/TimeUnit.cpp @@ -44,40 +44,40 @@ TEST_CASE("Unit::GetTimeUnits") /// Unit test for IsTimeUnitValid(). TEST_CASE("Unit::IsTimeUnitValid") { - REQUIRE(TIME::Unit::GetInstance().IsTimeUnitValid("s"s)); - REQUIRE(TIME::Unit::GetInstance().IsTimeUnitValid("ms"s)); - REQUIRE(TIME::Unit::GetInstance().IsTimeUnitValid("us"s)); - REQUIRE(TIME::Unit::GetInstance().IsTimeUnitValid("ns"s)); - REQUIRE(TIME::Unit::GetInstance().IsTimeUnitValid("ps"s)); - REQUIRE(TIME::Unit::GetInstance().IsTimeUnitValid("fs"s)); + REQUIRE(TIME::Unit::IsTimeUnitValid("s"s)); + REQUIRE(TIME::Unit::IsTimeUnitValid("ms"s)); + REQUIRE(TIME::Unit::IsTimeUnitValid("us"s)); + REQUIRE(TIME::Unit::IsTimeUnitValid("ns"s)); + REQUIRE(TIME::Unit::IsTimeUnitValid("ps"s)); + REQUIRE(TIME::Unit::IsTimeUnitValid("fs"s)); - REQUIRE_FALSE(TIME::Unit::GetInstance().IsTimeUnitValid("ks"s)); + REQUIRE_FALSE(TIME::Unit::IsTimeUnitValid("ks"s)); } /// Unit test for GetTimeUnitIndex(). TEST_CASE("Unit::GetTimeUnitIndex") { - REQUIRE(TIME::Unit::GetInstance().GetTimeUnitIndex("s"s) == 0); - REQUIRE(TIME::Unit::GetInstance().GetTimeUnitIndex("ms"s) == 1); - REQUIRE(TIME::Unit::GetInstance().GetTimeUnitIndex("us"s) == 2); - REQUIRE(TIME::Unit::GetInstance().GetTimeUnitIndex("ns"s) == 3); - REQUIRE(TIME::Unit::GetInstance().GetTimeUnitIndex("ps"s) == 4); - REQUIRE(TIME::Unit::GetInstance().GetTimeUnitIndex("fs"s) == 5); + REQUIRE(TIME::Unit::GetTimeUnitIndex("s"s) == 0); + REQUIRE(TIME::Unit::GetTimeUnitIndex("ms"s) == 1); + REQUIRE(TIME::Unit::GetTimeUnitIndex("us"s) == 2); + REQUIRE(TIME::Unit::GetTimeUnitIndex("ns"s) == 3); + REQUIRE(TIME::Unit::GetTimeUnitIndex("ps"s) == 4); + REQUIRE(TIME::Unit::GetTimeUnitIndex("fs"s) == 5); - REQUIRE_THROWS(TIME::Unit::GetInstance().GetTimeUnitIndex("ks"s)); + REQUIRE_THROWS(TIME::Unit::GetTimeUnitIndex("ks"s)); } /// Unit test for GetTimeUnit(). TEST_CASE("Unit::GetTimeUnit") { - REQUIRE(TIME::Unit::GetInstance().GetTimeUnit(0) == "s"s); - REQUIRE(TIME::Unit::GetInstance().GetTimeUnit(1) == "ms"s); - REQUIRE(TIME::Unit::GetInstance().GetTimeUnit(2) == "us"s); - REQUIRE(TIME::Unit::GetInstance().GetTimeUnit(3) == "ns"s); - REQUIRE(TIME::Unit::GetInstance().GetTimeUnit(4) == "ps"s); - REQUIRE(TIME::Unit::GetInstance().GetTimeUnit(5) == "fs"s); + REQUIRE(TIME::Unit::GetTimeUnit(0) == "s"s); + REQUIRE(TIME::Unit::GetTimeUnit(1) == "ms"s); + REQUIRE(TIME::Unit::GetTimeUnit(2) == "us"s); + REQUIRE(TIME::Unit::GetTimeUnit(3) == "ns"s); + REQUIRE(TIME::Unit::GetTimeUnit(4) == "ps"s); + REQUIRE(TIME::Unit::GetTimeUnit(5) == "fs"s); - REQUIRE_THROWS(TIME::Unit::GetInstance().GetTimeUnit(6)); + REQUIRE_THROWS(TIME::Unit::GetTimeUnit(6)); } /// Unit test for GetTenPower() @@ -85,8 +85,8 @@ TEST_CASE("Unit::GetTenPower") { for (uint32_t i = 0; i < 6; i++) { - REQUIRE(TIME::Unit::GetInstance().GetTenPower(i) == std::pow(1000, i)); + REQUIRE(TIME::Unit::GetTenPower(i) == std::pow(1000, i)); } - REQUIRE_THROWS(TIME::Unit::GetInstance().GetTenPower(6)); + REQUIRE_THROWS(TIME::Unit::GetTenPower(6)); } From c0cef1291c42b8579324a303898aaab57e6172ac Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Thu, 8 Mar 2018 00:04:38 +0100 Subject: [PATCH 081/143] #2 UT removed singleton --- sources/common/test/unitTest/TimeUnit.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/common/test/unitTest/TimeUnit.cpp b/sources/common/test/unitTest/TimeUnit.cpp index 85a9fd5..0f8a593 100644 --- a/sources/common/test/unitTest/TimeUnit.cpp +++ b/sources/common/test/unitTest/TimeUnit.cpp @@ -38,7 +38,7 @@ using StringVector = std::vector; /// Unit test for Split(). TEST_CASE("Unit::GetTimeUnits") { - REQUIRE(TIME::Unit::GetInstance().GetTimeUnits() == (StringVector{"s"s, "ms"s, "us"s, "ns"s, "ps"s, "fs"s})); + REQUIRE(TIME::Unit::GetTimeUnits() == (StringVector{"s"s, "ms"s, "us"s, "ns"s, "ps"s, "fs"s})); } /// Unit test for IsTimeUnitValid(). From 08ac64b2f19c3d6a3f6aeba9bb260485f6f46cb7 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Thu, 8 Mar 2018 00:14:43 +0100 Subject: [PATCH 082/143] #2 Use arrays --- sources/common/inc/TimeUnit.h | 1 - sources/common/test/unitTest/TimeUnit.cpp | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/sources/common/inc/TimeUnit.h b/sources/common/inc/TimeUnit.h index 3d00132..fd6b326 100644 --- a/sources/common/inc/TimeUnit.h +++ b/sources/common/inc/TimeUnit.h @@ -29,7 +29,6 @@ #pragma once -#include #include #include diff --git a/sources/common/test/unitTest/TimeUnit.cpp b/sources/common/test/unitTest/TimeUnit.cpp index 0f8a593..6753524 100644 --- a/sources/common/test/unitTest/TimeUnit.cpp +++ b/sources/common/test/unitTest/TimeUnit.cpp @@ -33,7 +33,7 @@ using namespace std::string_literals; /// Vector of strings. -using StringVector = std::vector; +using StringArray = std::array; /// Unit test for Split(). TEST_CASE("Unit::GetTimeUnits") From 0ff2207b2010160b422ac13768bc993ad94b48f5 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Thu, 8 Mar 2018 00:24:25 +0100 Subject: [PATCH 083/143] #2 YAF --- sources/common/inc/TimeUnit.h | 2 +- sources/common/src/TimeUnit.cpp | 2 +- sources/common/test/unitTest/TimeUnit.cpp | 6 +++--- sources/vcdMaker/inc/CliMaker.h | 2 +- sources/vcdMaker/src/vcdMaker.cpp | 2 +- sources/vcdMerge/src/Merge.cpp | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/sources/common/inc/TimeUnit.h b/sources/common/inc/TimeUnit.h index fd6b326..a7e98c3 100644 --- a/sources/common/inc/TimeUnit.h +++ b/sources/common/inc/TimeUnit.h @@ -7,7 +7,7 @@ /// /// @ingroup Time /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), diff --git a/sources/common/src/TimeUnit.cpp b/sources/common/src/TimeUnit.cpp index b31a832..269c696 100644 --- a/sources/common/src/TimeUnit.cpp +++ b/sources/common/src/TimeUnit.cpp @@ -7,7 +7,7 @@ /// @par Full Description /// The functions for handling time units. /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), diff --git a/sources/common/test/unitTest/TimeUnit.cpp b/sources/common/test/unitTest/TimeUnit.cpp index 6753524..c7a95d6 100644 --- a/sources/common/test/unitTest/TimeUnit.cpp +++ b/sources/common/test/unitTest/TimeUnit.cpp @@ -4,7 +4,7 @@ /// /// @ingroup UnitTest /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -33,12 +33,12 @@ using namespace std::string_literals; /// Vector of strings. -using StringArray = std::array; +using StringArray = std::array; /// Unit test for Split(). TEST_CASE("Unit::GetTimeUnits") { - REQUIRE(TIME::Unit::GetTimeUnits() == (StringVector{"s"s, "ms"s, "us"s, "ns"s, "ps"s, "fs"s})); + REQUIRE(TIME::Unit::GetTimeUnits() == (StringArray{"s"s, "ms"s, "us"s, "ns"s, "ps"s, "fs"s})); } /// Unit test for IsTimeUnitValid(). diff --git a/sources/vcdMaker/inc/CliMaker.h b/sources/vcdMaker/inc/CliMaker.h index d9ff2a3..b1a2611 100644 --- a/sources/vcdMaker/inc/CliMaker.h +++ b/sources/vcdMaker/inc/CliMaker.h @@ -7,7 +7,7 @@ /// /// @ingroup CLI /// -/// @par Copyright (c) 2016 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), diff --git a/sources/vcdMaker/src/vcdMaker.cpp b/sources/vcdMaker/src/vcdMaker.cpp index 9aa896f..0e5c05c 100644 --- a/sources/vcdMaker/src/vcdMaker.cpp +++ b/sources/vcdMaker/src/vcdMaker.cpp @@ -2,7 +2,7 @@ /// /// The main module of the vcdMaker application. /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), diff --git a/sources/vcdMerge/src/Merge.cpp b/sources/vcdMerge/src/Merge.cpp index 9a41b58..119737c 100644 --- a/sources/vcdMerge/src/Merge.cpp +++ b/sources/vcdMerge/src/Merge.cpp @@ -7,7 +7,7 @@ /// /// @ingroup Merge /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), From 2a1d9010ea0919bd9b181a17ec91b811a2669357 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Wed, 21 Mar 2018 18:35:03 +0100 Subject: [PATCH 084/143] #40 Check signal consistency --- sources/common/doc/manual.odt | Bin 557460 -> 558988 bytes sources/common/doc/manual.pdf | Bin 851451 -> 861645 bytes sources/common/inc/Signal.h | 7 ++++++- sources/common/inc/VcdExceptionList.h | 6 +++--- sources/common/src/Signal.cpp | 9 ++++++++- sources/common/src/SignalDb.cpp | 21 +++++++++++++-------- sources/common/src/TxtParser.cpp | 25 +++++++++++++++++++++---- 7 files changed, 51 insertions(+), 17 deletions(-) diff --git a/sources/common/doc/manual.odt b/sources/common/doc/manual.odt index 2bb0fa4a6cb8511a76ab44bbf0bc09034ddca712..7389210630129d61f07c46923d262b75f6008508 100644 GIT binary patch delta 22561 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 delta 21007 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 diff --git a/sources/common/doc/manual.pdf b/sources/common/doc/manual.pdf index 2b577d87852451bbeead4ddbf6469abfa1355233..bd0726c175e93fd508312c6abd73899f877786dd 100644 GIT binary patch delta 222691 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μf8l=$e_(?c1M>#+@@%^^ZS(E$gZ75 z4~MFFYr|6pGUYB$jbytkLrvn}x-!&keX=sxUcL@?!&{KOULC5k|9_nNP}6UJg|OT) zz5>ojwzo>uBz~$+RCRf>QrK=d3EyS@NcKvlSW5k5rKst%S}7)(%lf`X-O624T1Q7e zN1~Ig$<|ypz_)Jxo$?g;BiY`(SC#m8&U;l`pUr#Jy#((__KCb#ll>>3 zx8N>tMzY;`uOjhtd4I2_OFQpPw=F`2_UVml-0Z^=aZMV>a<^QAIm=Cz$hO! zcRJ*Z=g0Z1R!1x4={4j-Y#oXEND1XJbQ*_+vxSqUo?(0yCx2@?GebEBFFB@xZd66m z&SbDS9p=SjaXmj4J~SLMr%_`b$jwfumt$f(&NEruD5*Xb4swQ$ZldbiV0dk6KoD{@ z8(j9pVLWUM1+sUVbLHhheu-H&cXfV#7Y+(fysRn-8SCivIOn_xhhmkkplckw<|$#K zl0R=qjtk;>lz$UDi0Vw|cr(=pw=kVd&>zE0bYqGc{i1)iP#uhx^NTT-qdDWyCN4&q z$)><8ci%Ach(n)Y!q3sZn0xd+M@Slb805Zbb?||`Oat?rBHpFx1~cl0H+qv^WSYEY zoO(>T4KH^OJuocW#r2`blH!S>M}=s8=ushfe&|s#>VKJ`M?to4=&{E-tsfPFJwuP( z_Qg+ws(tmL$8?6_st(yY;m59Dd=KD_fSjD(^KTE2$_YRJP*F-E8`=}< zX`@9!PnAi-T#u>5K@a_%n`~%(%SAbE-k@hbPyZ}B*A0obo3(CxCFT}!Lk`W`%iWd@ z-=ABOhJRW8s}`jrL2CU$Qj~)C7@_0O&ImG}M0s!g7_;bm|BCp5e%W8Y z8b9lPg<$6=x2t}I@lSNtJUe8YS3L_p%nmL8YTt6d^+}1@w;PB%oFBQZBW~^Dh^|r< z5~_kTUCE%sJMlL%-DsogFoR`7v-Ic!%@-tLcq&3tM)4K?=85__?u-{C06tlvC8O@* zkG-_%uAhDOo@hKB_0#R|I*4Rs~mp}gLg-xamFSJ z>ZpM+IK293cmP4HpxGmsXqTv@uGfN#rl;3i#zz@{Fr-9qxKMvDs09GRQ&w_}T@vCV zuczP{C%w?KCVeVaz7K4tH8zHV9vC;1Lm^=B!*?$k3=hNT?9L8<4ra6rv3&bu_>r4< zB+O0WTWm^FxfegLhgeI6+4aK|Di3+Rn}$(>RUBl8k^HkqkJI7f_u8irB_nrg_YMF3_36HUJ%0BTeoG`Y@_Cp+4-CtMmv9czJ|RWP~AFfho$TEtw| zi4yW%eNN8>H?4DH8;+4;kt|beAAsxVLj}*+hsyTsqhw}W)zq~SwQW13XCvyV87IKW zOTHsSEzuEw8hbiDG>6!-)7v>b#m=L8>sqLPRVT1}7HZ|%ZkX_`qa$RS@$`F%K8DlzT|9Y#qLeN9OJ;X-XjT{Y&YOujn{EozM`?J(D_R@&#fHssMRq$MYj zIM^z`VL6OxAxJ(sg`bW_P>Msgh?OZDP7yVB6$09(M$~A~(vJg=4oCVSu2ZM!!AQ*&3&(3@l<#u=PqOvvk))J`%O`-6Y*PlOWKXSJFK$nae7>I$@F= z$cg888(ce$%bol^;8tRf^3Yo2b3CLjckv5#pDTTsU#y?frv4#_irDk~vex|ozqDrX zIKNmrC_ZIAtd-x(FKe9}{L<8a*5{X5`q*)~gp&pR^qI?A-#TT?j(pv0;EZ1npt?J| zkUndTJ@?7s*`f-)aR4LLK~6KSlB#p~3)rhLPS_qm%7|Byg~O}niYNU-Wn@?>!N$+h zDKy*IaKce!?7{J-H1v=nU>s6W0}b{TA2}%;>KkQMvC~Xb%J5PR)(7W*xx86wmZ7j2 z3Zb43{#e&V7j@3iHIz6>(x#$iDVzFO`mKgRw$kk3eDL#9Yx*#TB5x?LCM6g!jXgtk z`9=*lS6D;MnuZg}Fs4+Iy>!u2s#ITMbz8p5JSqJTFfvB9(LIcfQ8mQ5a1C#ym6X2m zD5p>dKX(Ti4V_9_o=Vk!`cfy3Hp}NyS*J}sYz2aMi@_IuHE^&Jp9BIPv<&O2lJqJ2 zCcv7?+yZvSa~&=^mB2B&iVNu+1*MkGwI>b`o1-norUVkplrd&^4Ix5F-iM0{T!t+4 z?k>pBvDBV|Abbsm1iN)?FewwbF~eZPRYAPvxMUNet_^q4`io0{Z-<*1ny#+{x5_uU zJjh8az(-smyI>L77lwwm3fX<=$AD}iYP?s z(ov+%OIBf^w3zI{hch>AUQC7AumVb8E=EQt-NIQrOeBpN)-yDJy8zX0vCxpm( z^`8+l|8|kcjo=)A7X>2t29NXa(`{=Ew%ELYD7={Pv~>a<>)_9>tjJpmz$Qe*;=Zax z4oBiFbmn0b0wLaHEicUUGP$=Fp3X`WXyU|i9jTQ*X8Nx(r@`gb6669t5sEzNu`;AE zLOso3Oz3gjTR1I!wQ_t6HspAv&$aWZ1RvfuWO0yx;^` z6C;$UZe{~|zalQo3sGXjuoY6i1kZw!tED4@N^`4%IFGfU!+fV)$Yy@I8WzL$t|i1- zy;?~esj!wMsC0^BnO}^TIam35#yG7Q^pqjUWS5Z_HcV^EZLlc>%o6N4a56}6FDVyS zC8)9`*>;?Ng@WQH%rK_JY6B&21O&Q;3(sGjrQ4(x+VHtg#1h9?N?G?sawSly(~EV%ReAe~S;(H$*bL^#c55{fo( zyer6I%Ga#-1$iY!4s~29Lh~$2MCUrt_b8|i4Smyy5VtpTd^nM*QSDqQuMHJ_#WTj|^IyL{cUIAB#gTk^g-4oOpW zx+)v!mE}3rf=|;+O8Et)_Qq>=x{Ak}<^emU4kpqP0=R}QvuVo_LAGkM?N;}dtcjDu zPK&jFjPfey#`~al-qF9+UmAio;ASwOcaF|YdO$-9!l4GnCp=}j)(2Mt%kmSj;N-6qKe@W9&r+%~yf2lvMz}J_tykW|@*5JVl*VJo z`z6;>*;b`CmnT_S!Ues`6013YnoU7Sdoi9A+v>*|mC_L2#KPvASntEXp4g&ild)41 zlZrPA12H%;lb1I^f6ZA-tLrup-se|jT}Y~j*6K25$~HDye7D6@G6Li@3$=t$cW%*e|xkJ z_xFBu7u!Y|An9sN{MmpCF3PnR`xs9heKozg;ukmA8~ng)H`E#5X|1yji{X1$6XJtc zmh}JpysdWMI{$*1@ ziwQnmK}USlfvC}T%8?k(Y7~5bUdAD-;V=^T)svmHdkPUcW^SroTRIB?#gm>iKDv>t zz(ryY20A|B+OcF8?ruB@wo3k7LPfQ!xyR@ITU>fCf9cu4V$}7@mnM6ImtzR9Tb!@@ zw;lR(OaAS}zXoF0N9Xp@0r1w~?||9WlIW_;u7~$U%mxcKHAD1@#171zqGYtu4$i;> zl$los2S9G3yJ5Rt(4JwaXREO}US?VVgi>aniJ!<`4hN^8HOq~1nbT$tHl6FgH>+QK&e?}(3Evl_Bk+22|<{a4sn&+CRQ6eCPIQ#uK{k92S6af|VLinRArX8w)LSg{CZ}W&XmwMk1Aij#$HDs+q~E zf3hh=CDM_4Xvr3?owtoA1HNcjw_d_vB!E;nO*`h^Is| zqk2(qKM}XaQXrS(cQ1|F`$x)?WbD>5?%(hMFk%T+RU4orenVB;rIxu>lb9seQ+h_P z>>!wMeQNJS?9j6W4658xpy*D5={7Vze^fZ%*PmJIR`izAJ~uMFVx-kJroOjfXFZC2 zvnnQwHvd8L@~*Ce)Z7JOgNi_H0b}l-*e1w7GGF-FBbw38F%_eK*VR%=XMxva?K9~S z2}Pz$do^jNqBOyryS)Z=uQsTX2q;Q1keHhg7w$VWnmfEeJ?TAds%nNe(j=EOe?N66 zY!JfSQjD<_WP~fKAbcnD%iP5@E1#G2^>ENGX9Fi$vKn}$FD43-Ln~A;)llkU)b%_- zT919wGOac%&VZZ-fq9+o%gfdq7N`=Cr-YEU4T8M*AoLgaQVp=}Y7pc~j^ZD=R_oyH z6=6obnw=?8r5Tea7jy77W8|3|e`pNN@>P?3@AvZPQO%=*fC(!eClKn{MmU8}<%)0J zd1EC0ez{Vvp{ii*4bbHiA%w+(MpP%>5}f2#tIlbd6F?Jo8CvkYS4ThUfbRhvgiY-d zr4W+As&0)csR{eNKsCdPnbk5@k!4K{WQg0^%enyDtT(%Om~JAciv#EQfBdt!Hf*eg zWGSy8%WOFBWs9#L1D8a2JB9%gCQ@LFy%)1%@9_78)onL#+^{~+@GY@V9FkK$Cs-FD&=6^AzfGxG$=Q;%&wPV^i7 zY!`j;Vy}q~eL4OM1hQMO?vt@o6bvvRFd%PYY6>wnH8+!#K0$xAS4)fAND#jJSLhtD zx2yUMMj%_#VQ&FL4$Iy)3FHvST=wtpSKVru_WppImeMr}<-~hPb(X`|HexjOvJ5K9eJb zo4U3~QfJjE-_n1Xqq1^K1Xp(L(Vo-6%#>FFx1$p-Tb4qjiCB$Tc8aDGC=nU5&=CT8 zk_WXcQpE-`?a{AQbjh-CroLrc%uEzncd~IZKu74M!Y4a$Q`Z8IWJFS!9Btl(;_ZzPL`Tkka`K)=fNXB>2>h-eY}Uaf`__a&C`*{6nRA4-*T zLnc?b156^YFZb3ux$X!e4#>n!Nf$}&t749=J~PbJISZtspPFUE$*h`>)^jyV>!2&T z1FKwPQ^iTqPAJ)_$ffG90%z4cx~Vej231m*TRMN27LY4CH>y!mp-Pmhn$^N>C+aXY zfTi6ffm|}0^`842jWpl5a{sJ-d;5_YKBJ9CjlYLGL_|K>1|T6KM#YAl$NKGS^X=1G zk#mTbcXWzb6Nr^)LMLPZX_Unsl2TJCy4S{Pkzq`U{4Ar};~*;>?C}b^=eT_2x2Hu# z(Sm>L+Bc-fhkkqhP>`&53H5tT6?(w3e_7K#-|*B!=j{WI|C5K-BQ2jt>{U&##gKx` zAI_);WFI|z&F2liJ>6c3Zr0@uJL?|P8?%mQ*%_Yde!@4~Fk4X7uncT<4O>O%4BKak z&3l8Zl)fBS2TM;_4)RFIn$HHOCSN`-oGOCosZMz-xNMdQg^vy2{u`U7<+>?NGIi*}%#R!KCuSY73w?k1~@n z$?*ls6(YY2W42l{4H7Y2=}nBij2#?(d2K#mEI0|ueL~33Sch@~tT36SYrmkrm-@Eh zV9Fp|l<7e)LFr3SjG__K-j(r@gnwYb12u^b*N6{O8T~vcvCCG1pT2BF#z^|^T#REe zIXx#$PYlGXz^~Al^8lU?5Z|+7k1LB=cvhQ+_3s$gSBCZPWLl18`kG&2nKNzkD5n%Y zI%q4`mdtoH*Zu<>Mt8@Pu~QTbGaxV^Z(?c+F)=YTlO#bwf5ll#i!{3p-OsP+^@Z+O zvRw~o3i?%x>@Eys5wgp@fh+>~Hu?KGlI*hUIh{KnWQLxuD%-LiM@MpvyU^)BAOAkN zlfzZ)&A0PM6kJwM_^Y_1ADL5X^ zbanUPZ=Zkue|UX<{JL1$#Y9!|~eFrg{ikq%M|F+PJ)ROeLQyp7*qPlZ0 zn)AMc%(ubWE_5Q+U6==x(};XrK8IwTV{~O(_V!~}Y}>Y3v29drJC&T+wr$(CZQD-8 zsnnZ$yKndZ9sT8;GxpefoDcI^zxnL7=9$1z*n(dd5#{a~&QS zgL#tgI8VSW>2C9zETRG~7t^ond4?@aV-9mOF$xU0lj+DNI=kZGNz8{z ztdIVFR&ASPCP3eu(=MeVe+!iucUj8&VFfPZiOb1hUS&v2T08AbqJ1g$(7jXg0l~$9$?W2h%`*pJ}S!H@6tl0mQwp=>h0?*w)UonHpIuP?-ns z(c&i4^xKgWffn>%y!x{y`n^7ab6pUFatrEMLbj8^6abKUSrUg7(|ph(RUDaV*A{z7 zW#F@+tK%(f#@Ar-M(z8pdNV&JUZk$_BVM6N^w2;^3b3h`!X(=4e12lDN2($|t3<8B zEI(Eu_JBphBq-tu7D4EC@k*J)Tdh99z9g&)`$#$iSq0IV>=C;Btd2(55QZm3j_+BI!^g~t}j zakAB1v6!N;%C_Vn>hd}nh&hsAjwUc$G;4<{MEhrHnV6w}ap6)Nx3CMwyk}M=jv;i{QCizjP<^#2yCNmtnZnv3NnvhdL zL3}HbHw+b`3#V8;jMo29{Rr4d$8AlcuJ8qnD7>o$M&`fp%3UL9c;S|wI_#Ck0V&)=1RNz+VzI?V zPy*^^=-F1XGQt@ssyA{ku^^q&ehV*fH=z&B9`wF`?x$4aSFj`T@|f=Ql`!Fy(pp1Q z_&0&7PYE|}PlF_JCn{Ykw*qHdwQ$N(gMgkuP5d;i^YLn_y?zJdu==Nb26Yyix6bH zF6a%;k7<&f2H}<=x=;f)t*KG*lWJ%Xp`cTPvt|6i=%F@K;4WdTJmMi}`-*!()ioRY z`qy#l;{CC&duTV7$=ZFVF9B!B6aK`}=qKkI>EIqJS=GOmxr!i=;6&sFwc5)?hC16!dl$+N;$ zc=nG#UyHfL}n3oUyslmsvlP*>H9ws#zo078ZNTVvbSG zcvK|?=WltjX!TS-@v{V#L2XptC;@q%C$vM`CJbFEWJ~_@9u$S>w5ZEHz}2oYl3;Nv zJW{CliAK824!Cd2@$!*Vx+As~M5$$moes1G)aOQL?JErY^OK2Oo;GJJJQ}#z5}o3# z{YUg!&rgvg9!+dxrLtDd(SQy|VL?#-vAd!cX$oMqrWc8%U@N2~>NZp7C4e?w!0_8( z>TUNkeg${Jd_0{vTBgO?k1_8b>c!7>i|p58J_Xvq zq{d86qW5dnmiRX2GfuaJ5CF|_g+9ybMtYd4QfdOpz18>g@^0gu2YX~40X!>6^QTw_rqH{!C&ymMN-6i447M_&+aKzup-ls<6GYq!U}h(+qR&J471VOV23I z$0I)Q@QB9ACSnjc`C6G?5MR#xapCdUK@LQ3gOEQfyw$%1E8H~aqe#4{NA91+6zR}`4BXYxOX^V=O~{s+a}oJQ@RSTLmvo- zT?k%p`lpe^69I+M3=_O4w`?6`8_5<7AAcy<5~x*KNt;z^^H-ckmSgD+May z`}Ty^!4me}QCP?XBIx$h#*qt8o_y&naDav=%PpI(%` z)9q?l;Cx8z#yTvP%*5b+p7z5O2WKU&58LV-kVJ`$jMg)iQ*qMfxppXwe#mS&b|h6D z%{eXbj0@A6F@T1PXiP}X{^Z|CF)cX0VIkxLL?+%Gtffr+PR5*L2t+2DYs&3fxA*;x z5DvD*7B2)ts;haCVAind23)TTE{54EHQpu?otu^b=wV1Q=>A6z0kXSJxGP1;IQ5eZ zKvKzj$@MNLdX5@-dgymzV@*us1(RStthbahCLS{qA4)n+%Ck8pm zNA6tZ3)!|&RI_6%@F?5vhe6hPqA~$TGFV@=)gw84NGVyAdJBg2Z0>D`7cpWp-O4ie zpwQVoxq-|~&Ev)bx(ARcg(r<4_6yb!Amp$zH?PmS5M>!I8@nJMSc@n99_^OBQ-9@_ zxW@X)#aZg67S1C35N)9L5bo#dIXM0qyY()U>}l%qmjO`#>+2x4@tARq3y7tX>$F}yQc0|J5e0^1M=!tdi5nc zTu}BeFFdC#1X$9N{i}ge*T1Uw3*(I^4B+_q4n%BWLAhw#Ox%b<1fSx2a^4ii;_2Gl zprMU1Oxtaw%RN;+AEoe}no@eQKRZ(+`s9DWsJDK%tGTwXy_FCQn zYrU8L@f^E|tg0ab)7+bAf&1F``^yDY6pR{BUT?UMyY7#-Pp1jeyZ)#ZLh`i;aQ4wQ zlh6imrv^8ayA~E2>>%mri3i{1T&mVzzWQ_>q zt3hq64Y!q7TFj-X*XWWa!~2dZK&I%xaT6r>1#ZE^ehb#^oY;()3C`|Lp2l~jSWvXs zz3>j$vV~B*_TGA>t$uGK4-4MO{OK0TAW$19f#V969>QW5@y*)>#muZum9+jol@1`B z`VoBS%FJv65i=B+oOvp`{BofX+$#w+n!)Y?&cYVJzJZi-7Fm~vf8dx)5gl{04q4ZH z2SS&bjBD~ugYfiD_U{jsW)P!?hwl6#?Gm_(p8oX&24 zI^UiN4((vW5R3&t&S&&X&XA!5Vh2ds2B17468|u~3!6aNj;k5(QeX3l#*bqz>7+?q zZ19BA+1*ok2=sPM0(Zku5>b>3vZWM_v`IYXPe{EdIfItCeA*!~{T`+m7Yt zJFbyXD4UH;r>#sR)~`w*rNfXUrklT>%9#u{$4EdM1V<&l)lFX)18R&J%sSegWaHDPziyO4p%6ySHd{!i4o9q?_q4|C*N+ z_d~&Y?YCkL>Wh>oSqKt6B^gXvO>t^nQoX8T z?EQ_g8B~t~zJw)dxItZHtltP-n2)10p;rtxLOLrn#WfN<^01jhlP;iwQ+XXW!;!+G zxGPS4uv@6 zaef3&SAAPM7^h(s!IIbMG%oa|fCAx+@On1g=c3#y4zY7Iox-tYW+Pk5RS}*GSxbs> z$E9AWb2zhYyn*()pn8C`nbm#xzVX|w$Tt%q$xAS{kuopQMV&pQOT6-s=%B%vuo8I^ z$m>!fYe&sXnSP%g-=kw-luw^twW~gFzdtnhUb7Y82aQlE^HM4(R|~T8*6YwLqm^aN zvuFif6+9Mu{v=3Ebk71Piag6_D>^f}bTkT;i1g0smSpsr5Uc=DMwF5&`$uB4Framf zYdOtn!9d+E>_>@_!6K=M??6P*dHn*$=Go(NnFy5p ztSBup`#&Ns_RwW^4v>B8+zs4vl}D->z%Jfaa+c~HLFvze=-ahRdn4FO?_v*~M%yDF z^Vjfb@;Ora!ZKSM#9ek!mQ*^V3>;8tPfAPPv~DcwiLU?^g8QVBF-?oQ^JUd|CAodC zqHXbnJYLb7Wd*LO039@U)^-&pFZ-DQh!F^H9-vtkmAdb%vi+-kv)C7sEe(7bUd(11 z;nB|Dt6hj)*@9s4Se$q{ZrPNb>Q7dogjahGny!phX1hts9jx@NN^FQ`)ofx~1|zu& z7J{3=WwZbiwq*qLZxWhUNZN+#^?(5bW5Z=r0o;@GBW%r-E+qOjbm#4=U z5PT(b1rT)Iu`K)D2}Nd2L+N|_!Dk9ov}rq6smAx8+W6T^@{mdowE{PY)E=~O_?6%b zOk+0NEU%G$a7%ZQ1g-DOuFxLTF?n8EwbL-a?l*H8yTN9ae7m% zR7W8Wzw%*f%_p!*H~>6;YYT59S|r*U`{w?!8B(L-{A92qCJ8) z#`ZL>vT?l8bwhBGi$v*7p{wpKXlfPL{7_GPL8#BV>Xcqrl)3k8qLA$C<^?_Z1Os8M zW+`ANS|+IX)17IBbGK)}E)%S%yax`c8Z_KABr}|#+q?VcYi&y7hoQI8W~>@9YauPN z?dg^!MR37`EyTMu^_6j@J}Ypl5V!m)Itc(Pm&Y+wzbLxsKgn z5>wS=Xa&!QHIrlTRa*ktF}Qa}flbX%gcZv=JJ+F{We9HL*%HsMGMCtNe_JPATpo7Z zRV>uA8k%sSJhY92h|^=?=6%O> z_^cp!)e4?-Tl>SwZX4fTBhbu0hsH-HcBq6LKE7-RO2VZoG#E1zD`Ucost}+`Yb=~} z45@2H{m>&<$@WDjT(vE!dD7@PTZf6^ld(7prn z6ZqrMck=ikU^g?I35#Fefh4-p{29*MM!yQT4(M;@b zRet1`nyVGLrXUQ)RB`H7_8?#2@TWpPPU)Lgv0~nV49AOH{eUJaH%%Fg5+;8Smq)B)vj}cT z<+Nr~cn(mGp36gEuXO?ti#Ud#Q%?G_{WARS9Z6~!Sv*P+4CZtg5C`MXpn6#b;uJ|K z7gq+4Pyr8$0zMw1L8O=lCoG?UVW`uHPl-CplNlQp)atER#mb%EIY&QI%`)MkxUzQ0 zO@b9k-6p+e%K1P`xdklA7`<0GJGqC50;Ql6qiN4<0@v?^VksvH@s^)(}E@;Aa9^Ws5CM(;bG`rRALnBB04m`BS(sw8gwYxaORZ6Lj zfCkBHr^hAY!h9@si_UQuqZVJ=_jA;Q zOp|awBb5+X9OYMd9O_E>Qe49C{-q8%J&0hRJOn}2CT^g!-tRIH;>AxAz@bOfh^({Zq~25d2letE(Zzv_hzE(J+imCs|?h^Y#Jy~424pJbK+&>`G@-doNF@69AdYGW07 zO4BZBzsb>{wz}gLEMFEa&F853^rve*K#x$*Qjv9)r5oazWt6RQ_O!N|H;vd)6cVG! z$N;cxkq%4?lvNci_&g*{V00auB90qMv4j??74DgZ4Ll)qhUgBKiQ;Tz=(Az| zOqEI|fO;c9KEpRF4b<_+C>P0;D?;lp1S}%i3qi&bL zQU*uBlB4)w57n|0>V2iiG1?Qn=NFr5G>0N}$AJ8nC=2AEUX4{Bu8(>Dki|ZX5oL^1f7Y2R#Yv6?` zlAbDpRfs65jx}(G6RKAexkt)Y{-l-6Ie5&0<2qo))j7!)H)aj6S^zk!K)b*3X~i zin36qq3W<5$!!AA+B>(kOXqf;-%hF4i+gg2(pFJkMxs1W)RslASVS55Ip!7RHxD1D z(5U29+e5+;80kLXZXY=2O>&KW9fvgn$PWh;TR^@IgjZ%HcJfZqZ8N4q< zR&k>uz!WvNM0~mV9*W2>bF_C~+@4Cm3C|!1nN2Kkno7 z23+3Q;T^dh6=rj;xvvlfpC#+NDD7|kCs>sQACK#eM8A^#VhLAxY3phjfW0LB&Nt(x zW_9bN=x8oN;JRv4%splFP~tX*t>r1&t;t{=aQw&eEeDDn=jpVy18w8=Y1Ei697o6U zhB^fHeEU&{peH@I!cH;f*NJKJ4Tq~66>M_!?MedIjNj+wCj~L^nKcy4P-sS}vhft) z!{_ZFWjmW~GS*;7Tn+*bAO*{>*hX44b&em%zuA5Vk)$wm-z&DapM8gQOQF%5vBbR< zk&wjOBfX={U}f70muDwEkRV!ictoc}R@0Ilc)>p}5<$WEgY4DfH=&h2{wV|Lk7tbd z?&gw=S6byvkTKTA61Uf4uEOD1au)-^wAEnO)qA2p=)x}i??z)Um;Rl)Y zk@dT@l`Fl9b!42rYZEP+&J-Z)A-r@__wDOAvt4babAd`TxWZ|mH}E7P6|KA4Kl-#w z;2al;|3o7oIT<#I0a%d&X5~M1w;(-#Ca#v8Y??!OrYwCoV5rrQ8hEgbrK+`i;Tf-g zRL}s0hOf7w;tCp-v8M3sQ^2m)iP-mq)?FTeJUmF?e)r_8LZYzfm^U&VxKW8s@$vy{*3FSzF7s#;&O zly|KNZQocA5gjK$xWJfGK77gxybjW)@=PT*9j_4ZJS> z{rH_@a^!DzoOd2r-uQg@z8Y=k>YQ}txz*&fw_uzCbzGz%ker5+z>g0%;2@nsm^wQv z@%NV=y90(5XYLLjw=CMS@w3A%Woz6NmwI=KIGs5+6lGDzqkPZv{e|JLuoPu|8AbY4 ze+n{UC3d%tsv73&8|2B_J<}4BSeRI5BKo=0f^T!~voh6u2XXlwnmsp#+83iGej`qZ zh)FohBSZq${uD&&UdS>c&xjq5i~EAtDt#v_j0iyg0PwzNk|=fc`f@8{o+c_iRqDlL zi7&l(ZS$BKhK5wH8)1reA9+#qi!}Nz?#D_9f+dxudVQvIYBzHFErloLlN~WwHQ`iM z3JuN&P%l;sV`b3WC8?JAtd1?Fd3A{rIo5BL>#n4Z?BMYk%7YiaRhzf~2HqCp?zBRna$ zU15A`+(U@F$_3eX^BUM{fO@GTHca*9?u4nf!<*Wj=tZf(V)Uxhe(?R$Ir(#F5nkrk z3B+Wz1x%U6ztVeFVpT?)qsEa&t)^TI(hs<*M3y24IUj#q5-PnhLxc)E8+#GcltQ*@kzKYrlaWv`@~lfHreyLrH7p-BQxnj^Yl@tiFK#^3S#AQkKG)1-mxygbv=vFbw4axT zu@1i%QF@v*Pq$qf!F6NrWKWbO#^Ls}Cd?xzBT^k$I~k|#Y;i~%bKP2#Pv%rzsCKfj zihsv-a@1S*+Q{R;IVXAjK&{!ir$E?ZAT#wD`uhb4P8XVplbIRD#Mbz)CiXCF|I|eB z@-oPn*qS+;6S6U-D8fLJ0@NqU55)e}rA_0k+@};=*x*77bWPT9)G&4F5SR#M)cW|j zM31h?SUUx_-P2h;tD4)T{8G!jJLl6*=irq7scwiI(%k9cYG&a^fbGv2$J_hU^O>i> z(D$77RExXcF~=uZI1)eqtn6;N|2c8)$l1z}@>Q#_k&=8kC9u&Z%}RrkC|>iTDTPm5lLGg;UKIE) zW}c++h7SFPiP!L|gIq?D2Q}Tu>u`=vFKnozgZUjZ95ykL8rY&r%yc=S2pNOabrkr# zw@L**?q}P6#x{QO=%Y=KbliM-OD(z@O_*S;1*~j7lzUD~XsIzo=Uq4sitolMEC!K*wv&4voI%LQQxnRn(SV zEgd$LjQR4t)mJGeyqkVa@t5nW=4Orc^T;uBym>_1tRSM3y$hw*yQ5XKjc2z@d{jP0 ztYk@??-rpjAd;A{sQ~ZDmPQfT)hMNsH_u+y<(v|ru12O}=~8VuS9ugm~vbpWP%`N~7&;@SMb@vK6_@dnR4!iVOMe%k3>5OjVF*v!Pw-lTpy{!ljVt`kti zZORtF!|2?uHg_-5YO2$PK0GirbW*rw@3IfRnr+-ZgAJ#K`ZDU9>=g@=d0ykh2yjsp z{9B_?>is~faAQ!Bwv6@41LI-MQ9g zTwDCQr_`WZ$q(-C#Y-C!6Lugw>1@lyb3=?n=6OFC6?z!;pVyuNl0(%4?*|4~!%b1s zsjjG1al%N0t8D`l4C$ zQOTPL&L2+@rxiQt1Q`T7Y~&Mv;VGd>8G(k4=|9C&tp5jE|CChyA84`u1uYUll*+&C z!8?sJ{Hn657OfxCYL}p+72}sZNT)?i4NQ~v5ol`MxQ@mX4$x97)9ZScLS{YnQLll= zy`@cFjhz6_xZLhmBiL!nK|k2pc(%+ePvuNBwC>F4ZY^<(l(k#$zpQ=-4D?}zh;bVE0@szmqYNySWe7lrAxN*@-3^OsAfm_KcudmTatha?lyr>5vt$2Tb1r9Qwn(UAA$Ij!fr(cw!`JC|;x+r#fS5_EPRX_5wXAgdD#a zVC*27$Q6fCzg%K5wg`KqR(7$GDkC(|^;J{ZtMoI>+mVsx#v zdNrsQ*BngBVqB(#ZcS?DWKa{vmlv zNYaNu@^cnuuVOs_Vu}T)lKA!;H9|=;O7)6vpgJ#(SS z{`5eZuWStI7<9x5<+KoyLfLht)7c={HMhq-yiDmIo53Y~%BI{ujkCF{I?GE93#I*Q zYkStrCPG=(Ij=I(`Qh%G)(UGiv=2rczYmZOIjAfD4E)j>#6i|1wncV#UssLT$ZDv43zSJP6UWHe zLhlA{ARco5JEZLY3}Y5{*8c|RKg0Mdr0gMIA^i#~s1e+M#xOf4I}6i)Z~xyh%>J)2 ztRfq+`S%!p(Mhc&-KYcYi_MbE?fM4hNy+zU^y7!NE5q;irH};4i9#|&iueywK0X{R z=bm(RNcb0;r#i9}(B`!+Z!7+8CxOY4nGNNKR@OQr^%EnUt@|au$u*+3qxTZv632dE z`dAnSMSvLg#L1Be3*FQsJ^U~`7687Q6P2+yRKvVCx=$`^chWzEa5(IDoRh)`z@DDM zC&pb3r{g^OTtYiHSrj?o2$e%-K2#$6n;9LqG-c%|+Mm*IFv1(v2tAKN@sEns`~eIl zthvT<&ZiOV117a}5}7M{2=VU02ySEkbI*)8ns3B#@!`;E4)to4E<|Ye;{bz_$5HrZ z7zf<+I7;ajFpf_SFtVjeEzZ37LcOEVPBQvbh?|u&Nkf^Dk2E--jnA6t)W%McKRdXN z213{NwnmI(a*Rp5f((?C9wju6G?4D6XSuZiMSOo&83{wef|bzn1$ajF=3Rs^ko9jIa)p;mWy)bG1xEelEiYkDN7>*y zO|^SJ-N%IV!|f-TU&n`YFewK9R@ZIy_1CU%^yt4-;pFUS^1}uup;H+OgZ&?7uyXyE z`W$~VLluOB>8~Wg*D_KGh9lp?cK~WI{MWUdGB7kWj{l_u$G<7ztupb~R7B_BUZcXc zO9+aWg`KqJYxf9I$rLC^My=P_P05l?&E?t{^X^Qp1!YCO>Za8{y zsb05RjzH;7y?9Sb&X&blW(l3$=I-LXEZ?LeaQV?l3Y_v8(M1G&&?m0E7;jR|M2W3d z`-Lv9y$B*MVAXz7$8*vbGol5{AD<1G_)WMXou7B9`xg$DPPyZ&v8f}kE*c|J|vwHgO^)^HpFeirLvd3ShaLtYSkLfP4?`> zOsFdUY9h{lFB3@ee5_;W6q)g;`*mcIbA+AF-X)LA!7^4MjeEC+uzochPCc}9V*%S- zD^i*FLUe-se1nU{P}1c5nAIjV(Q*X^&%!4Jd#A2g0~_k4Z4mAeW&N(e_^fEnd|@Ac z;@B=>@=;2l&Qb$0bU;7i8FXXaFs7wrgBR3=C4u2#yU{anjQrNXNXhQvQ4Dh9TmJqQ z#$)*>FpDMizx)ZuKVV~H{V%CF{s!BZ?*29>d?8=D`_djb56*wc#=*?W^3%Z(w7o7i51smWkd`;%RN&R`bRwRO0@=j*aF-SE^FVoySbv>x`@rS5l!3%slf7&BN@v7B{#*K(* z_M}knKGrOGD)cb7NLgtR7|S5SnfMmnQw`89MC^{@*4Ux3gO^*>-a(&VK%}maE+%ED z!f35(W9kN*Q<_BI0+u11$=6Obz`Snh36uLt>WxU#p?u6aQw(Jk7nm&?2y>xPkGYJ* zsRgME5(ode!n}$~EvybN0%Id*MwNr%;z%w;aeeNyLzAAMew3STIcQ6Gz%`|II+ozZu9KLN@{4LN@{N!cWWjk8R>)V*fu@ zne%^v$oX#|x~Pm<4*r#BX@1g^8jVTgLIrE){VUD71oSsf>b$)t(T=3Sp@3-8p1q!( z4YdP5s%IssrElw;V5{^Aqbwd3c={*^AQxQRtJ(yQd%$=cV3!2DHF1N1mj=(I;6K#` z>)klxobAnzV7uM9xR*bPxO7Hk5mG+^Nsr@b;B#w!fhi>XVc<*Pty*A~g*y{I;mecHrGiXaC!=HeR8eDv-C zJj>Te(;N~eX72|WInE*y#_4hV*60@@qTbCLKqKkE}i0m`hIkp#O=Z2w;AVL zfhQ~v&To*avlh2-`;$lH@f**Wq|T)PJopa;IMTGW5Uq|fKT0q&A1yDxb8#c*XLz1u zfK#EQVTk9L9t!8a?o3in{t;%hGIKY7+9p-UMOgYzHYvHl-( z&iQZPasCZF?k|CXN65F->Od;({TF$hjLaPWF>{>%i#*PMBX7d;@Lx$+ueQKeG8s-d zcM>#y!7LJ7#tF66dw=%{^F3{4)El)quBjTgp`*%RJ05kr4&TBi**u_PMF;ZU)G0CQ|b!aUAQ=txq#uj5jDORd2!XA4tL>{cHR7_6 z9~e;vuKI6kasERsR<8e2i|gOi;`$f0{t{G_e2af9)b}xXu79}2!NkeIoFZ-sEd=P& zlD4~Q{r1&@BJ&YQQgqA{xDWWJoE(g^+Xj#>>Q zyN9SV^4{J*$n#F#+2Nn=+hbZodISI#5$RxE7(NYU3oFE~ZtD*fsXGS;0|ccwWbjly z6dAH1)W`$q`wjx&EZKAWX>v_LsV6}!wG;w)QDIqWu(gF`_o2-PNEIYxy1*Kx28)fPGL9BRR|7Fl20}+4AmV{ppN5XC4dw^xN9hb6!IAuUdJ=ls+qdc6Bly$$ zv4`j4JalLM?A%?KvauM+`&w6IQAy#=+8=nT%?d#J~YBL+zfw7VZa zm{n8ZQ^YZf6~fLmqhM%MexRqxG?sRU8zHm(O zvJ>0^lRw>M9$a&0?@Etuv=1MMaI?GxuDPkCRH{OJ=HP~)iG{$jd!&%Iiz=m~*d4q|4@T@2e& z#A1I0!~UM>9Fz811z@*rqe1b9P1ZU-kY{@41~t%1l|g8nCK+iRp-UmrQ_p^0XO!X+oC{9 zNPjFt0Z>62F5@E-4^>ujOT@3`x-H!-JBBAee-) z9cM`t24)2X9$pjbrEuc~!>>YA>1{gq-7^!VnhaqyG(u(vs2Vd`q5g(27K zee%5K>uk*j=xOkJa&xV5HEJ=o-y9=*nGv1-J9E?lv)C*5$&o;1Vhxp^7TcXMnS z;Cy`Q@iAMTthme1fJ}?madC7H@31N$Yr7XTsv}$D#+=m_zWwwVA^nrKCg->f05i=Wl^8lww7n`a9UZXpzeyIV z#0{nmGNF-)!j)O9EHDi<_MmeA^C4D4l9FZwnDesV`*SZ0kAYmVZIKF zcqjugs|Hf9268eg17cYMqOjcvwDd*c0LHMrk~Y~)t@sR{EDc(T#bUAb#2JE3Gxr`+ z7cZBc?5F8g@QMpkPi|mGqG70!xB^GlW3se4Q`Kvht{ZU8XB-u_KkNd#eEN(8}QLc4^E9KoOJ_KYrQ9EuHe1S{~y$Zfx6u_V_L`^+58JZ5u z;*bO9sOUN(6Dp-73G>a$CsX|%CVH|l9%43)DhZPnp~SAT#I|0#>>KY2RC2?`q~y&E z8rIkOJ6ep!5~}uxyojotG{ccC`c%UPFZtb0s+kWq8O)b0HdA>gO-RBW)mQckmUVS@ zmP9e&UhtCyVWzVhE&yXrXPe)r<-E$Tq(AAS1=3xz(p9(Wo4xjeG6HAzUcH7F6^cRP zo5xx4(&STNf4-918&`ij)Y|fdue_9A0i3e^(RmJi8XCn?Zo^^cG5Q@Dpky$2qa!L> z88j`;ua@Vw-p*tcZh;AVE1o!Rn1RM*=4XDWsDZ~5*;&zkp$&k^Mwr*JqVi~KPu3jj zo*e2y?M20SA`I$bWjqd#{28;qK91&eh3Y-NTe%w$gQrKS@;(R;3Q3JFXwFO(p}*RR zK)v6TtQn4`utq7h3$t)i=wEa~lsU4Utn^oXx1KwPyHO_k)cyf7oyU;Pd_ z19UL#+im3)JQ)BKB;K32#o<)PHkpXy<=VZ4)e;^D--*onG$y8H-po>~fink^K*AY6 zKBYEeo~u9&?<6E~IMS|X(@_G?r$0rI#WN0`>WnguOe_mCY*Jv+$w(V6@F-iGq0q{M z>^&2DuFk1F?_?#gAPRio_1L&vOLWGqC-}YwY3UIzn-Y-i74m_BA!wd)D*jf%G>vy- zr)gKzE?Hc7NGTw7!RL8*xFNAoS(7!~&a3Q)X!wVz*owyv4+f2TYO7%hf3n2lz{gW> zBx_kd%celnCr@-jVf&dN>C-L;pAq_;IUQ9Zx*Mj*1;4Wuf%HhC3OwOB_f2lXG2I6E z4~}vQDjNW?gH*TasSGqKc`%uZ)ZsE`+^($Vb(I zeLsW$v6s7YKi)F&2dJfw^X4zV_wDP55k|tlY7>}Q*;rB*ZT@m^nq$!iUz^0fCfc$C z22}HX34OKIPBtY$U;QTG5RE~M>0f^@_7{;Royw7z!>yzLo*db)i29XUf%n<=!I#?C ztDJeT^o?rO3cDNdb-;_o%Y`8%>?-HaKb~O+F4)D02B>tMV4w##IUx)=^vi`6GpVwi z`o6Yeju5&ME0jV2@+Ks`u*IT_PBOB{FT6=Y8!G`LpQR28LIJQUzrG~0evF6itSNx>2ZD?T z0x@Oz>Osh8><0us1`ymekyiE@_A?SKr~ZX1{TVklhIKmKE`Dj%9`$>JeSb^aj3)0Vf@ z7%N@YqESo8XB!DlYPIF7{z1m7Jy5O@RlV$ntp-xa8W&t!BF$l*v(bLi)hha$|Erm@ z*?_0Q`uF`}4byMoxtS-Q@u!DtUhiqAJc8woQ)`=oqC?HA8;n~YwCj|4AHGYBCLa@S z00Z+0T0zds25xec+F7(=Wg{n(+FK$f&6HSVQZ&)9)Eb6Sk!!?V9_q?mUiEUE684b0 z{@F{Qv+Mt3>zo3^4!Uh0+qN6qw%yonZ2KQHwr!)aZQD*7+ezcze&?Qh&dYtA_nAF= z&swv7C8W`Dl1jB{+(mjx&=rONvA<`FBM#f(MH+F;FyQ}o_7pey=IymU-MC_sO^d#5 zQs`n{AJx8Yq=Ej6V|GQ?6fN5PVhXS(?-E-`M-|k6my7na-eNS?Z0tLPw2WyduaCJ# zYHFl-hUG+=hAG0IYRk&X=ugigRKjv?1pjO4bI%sPclen4S$?eW!tjsdaodjQC)SkX z1D@D%NSQ`-MQ%iYU8)4-0X7goPlEHIV0O3il@I69LJ$`30d496v;Fp^P6@nGF`EYN zwf`8Ohrn?8#&)Cbu5^aD)i}@8Nku$H4VqAegAy3Ml2@3|MVELZ&PcECD z)C_j?^6U|EjJQ)iR!gJzOQS}=LeEGZt1js=U0^6SF+;y1Y-wG1M#G6v&(GUExO|p_ zW&JLqu?(r)}0=lE(*Iu1tXetgQORWyHd zp0-PcITf4j>Bko9qumGSQ3ijQ=cKlbN?OXQWQ zO^|ima){bRw5!{Gi@T$x>Ig~*@q)Mn>EzpT#L0%kmZTdbA8r3Nx0~G8cg4MBh|%uN6nSTX*}`{v5NI-)PKNk@W)Q# z`kXLv)RnBA&2KyiQmK*=rJ|C9BhhNLdBvKc++|HJWAO!4iBO|EfLlwzr4AP<>@P?h{N-hyt9z2rjy}YBD@7Q8RhOIp2~fjP{@+*SP=Q?8?Z>$qwlf3R}ndGg?%GnrSP=vPYl8wEIZ{ zThtCE0RP@=Vu`MsL5CS4EBcF%nqvoZ3XeVl7>&MULSOi8gir8e32_K%f2Z}1!kl`! zz!#KZ_nhf?b_RGOTQXJjG5C7So`T-}a%QxK4e0bNW!;XGoCY_dBW{%o3GbGs|MRaw zThsM$vN%daa(N4-7EBZ}x6_SA2y<2)*5xNs^!lBR$2D-4YH5$;jnMT6_~3a{a^>;* zT>ClXWxV3I%_VYortKJ?RoNP~s~!1bkgaT;%&%`?u7%HARYD)=h(UYzg|??{r%Nr$nCu{&p>+l$0Ci zrj!QTy3$==_x`RPi%?R;rO2bJ(_d>_LVO!1jMW4{i1EO@gy79RhAnIX<2HXk zjAH5=**wwn2d6wf4k44D160qN{SSv$D4E7PKWt32rU0-pA20}+F0?|06%c#MlYjO& z&I-X9A~XC(laQRr097J^?r?VuTsp^GKCq*)=qYkY(sIj9tBprr!3x8=eE&HKnKZk@ z0Fc1%)#DyO%#qdKJ|{T- zJ#a85lKNbdJ51Q*d$iKNYwy&u<*58>Pw~|}A3bM)Egzsi)BK8Xx#nuBL zejnF3T9-%RfQ68wQKIkef=!5UM&FLX`HL zx(@=_fTs%aD%4p*Uiz2LyPLZep2vtEUU=Hwb&}fsD`QaST9Py`$Hl+P!2V60}yI)`gF?x;v z1@cRibAg2=<7VObpI2WNX4e01{{Gj8!@`_YFGv9_YyA&PoiSdG;+rlM0(eAi_o;or ze;)9jKwZD*H=f<3Vf>Jr5sP?B7eVb?b#fJt%}`5iaH9(tp9qqyb?Pqpj& z^?LisHGT7j4+#GCZqq}qIm+Wb@w$5|JKluEw>swEXan z51+@0c39r#iEdd`Mz068^#r1ry5flAFtSTPkJ}!sAyPF*cJYB`wj{5ooe)*nI2br(hT)Qy@{a{DC#dOz&qL*i85v)l?Y3-pq2bOku6lSv} zd!^=%AK7`Cp8nkeLvkMhWuamc%_BJ-X_#&_8cRh2JHN{1>?C*`Zot&5%Mosw)RS#0 z5{+=l)R)j8lr9T2MT)gp@QbDfmeGlRsnI5mY4f+!qWuULFXTz4!(&yPWUeP7$V={> zB44aVHn>>sHwy=H%>4HAfY8NZs&)I{Lv=&`^N1b4YDPj({fnCg%0t%sR+!h&GWy8E z1TPbb(lamzs_k!EHATeA5p_guMNH9Xa*ncTt#qqF>|+g{N7I{yx-XPOiz#&Kp+$uF zFf~#xQU0Wt;p(jHrf0Q`d2K#<7^Lvzk@lpP>*T6*R4SW?_fl2P1I%vCq3HW8W$EHS z)Eh{=4N?kzO5=8zd4rda2lz#TrBI>T6P~BSMUW9GICRrXQHm9hk-R9sA$`w*1w&0X zn|;9HFWV2yh2SxyN9Cwc#}X89FosFh5cj>Z(fJNV-AtyAoTv+HM{{;~Iuqi& zz&7;Psg1lc>qqO8As`nlJ+(6Dr~g;!5!y$~aCV11i}d`7NwVxA*tPu+)M zwYe>amXXmCLjyL-{1GLO{8>o;e9XA?LzJQ~?IvQu{3WEM*SHvB&0Z0({sM#0^>zHO z(n8Pt|5QpAW{&?geEeJd|LTi~2nCQ5Uk?Yyf+GIzJG?S5JasIJ1_OGtG;mE~MC$Gx z6tc(h)suiDGB4Vqou1=0NDJE$K}VzF#kM0&xhl$=8Ee8l>)D^3WB2)>w(<6*AR)0?r4_ghJCqFI*v1^Fzdhyss9u)rzS(o_6P&sBT zUljDzQ205H35RJjF@Oq{GOcuresN@NkfZ$oxut9Yj3dFE=~G3iy2uF9xjU(giHklqugl7Ynrfmd~!< zo15O7lj*~qhwP(VpBb0j&+Lp6hDqQ&AyNl5_>m{dI_p~hUmB|DsRxYlX7-UB_~{+# zC#YaZJhO}aVwZ#s@|PWzs0ys;*82liO{Q-9M{gu5D<2A;+wRBPMn@5{zMZ7ygzB8s zyf3vDcDH^2KY!f936o9->mKk0|C3gGEKg^RyX<*h^XmofP)V%k$M>s=Qd{62w<(Vo z{628FIqLjIxAPCrSgrV2Pkn{c_`;v>y*Q$XkFUb2a(;{PtDykQtLx8d2Ql1G!IJSGf2Tf?hP>>QwttaApK_DG(60cLnvi zBVk9XKjq6$JyAyXM&VKZwh?JZP1ruC#*WlDM;U!R5;v4O+9R%6@IH4?FZS}hW>CKS z(?A5<2m&x;!HcF8ey=De@*DS!tu#Rk$84E;Q7Gv%#+d|oZLm} z33@op+SQMm^nyiBi3fv_qwfhc&J&(WJo3Kbzwv1k>c)%|(%c^J?wb+xWdz)z56Rho zYh}I34`kl7#<^l`LT~PmBoL9BXX%@kI>mS+;Hx7x47NC6cmZz2zquVU9HW{GJupVC zmx1n*CWCV8MCOV^2j&5BI|Brdd0|xhkZq_AgK_(+#WB7LJ*E=RNY7F&VUy9hkzY7j zDDPNa@yPm7_Tp8bt-Zp8mO^h#k3?^LZ_vDP44yE#am0gmFBo5$(iAaj@stfI{4)OI z@cc2?6e~^P3^_ zzUnDKbr3SN6IOI5PTFs0ej=q&p~0sY_b#N}u+{^q+k+QPX7F@yRHI8{)*yM(=HlFH z(u*+xGeF2UHhy&+);ZC2aBN#X9F{FO-DyhxnAetOo zscqpK4>H=P%D`C-a3ODzAo{~y(f0~TRH%o+b^LklM}fCQJ}?Y74(SE9d8p@;%RG}{ zQ}BSnfXO-4K97faoW1nfK-pN4++%;JY=AMCejK_cH{86C*A-s6o1wmCEq0BtUcFxO zk&^!%{5lTk>kJ_0{T+e!i08{$fP5>tH^}nWLx)5stYc1dEtt(w@K%hgHG6aF>gd^} z_t<|H8O*j;Bo0IZfLfv-L^#eD%CDXC(E8bYSNKH@c0dSbniq(bNPCQf7vWb93wUzk zAHFO{WY7m1*h61lf%pqTbva=j4$aQh&dbQx;hVEV?=Xo99R-|d&v|oI?-90v%bp8c z{}BTMy|Qjm8ZdUs#FTVJtlj$41tkF}+tFyJC+K!&IHlm89os<`NhvoFVZpRLrxVQ*{dUF7_lWui{r|d7qf<8pN+QFe8k^fAN&rD27BbPveSI~^h_~)%2xbqOYXDyp>T2+$C0fl`o^kU5C zLcD4k=$4b!R;FxXrlUytugVM{rDcpsfUiU zt5nm-?f?x)0Y!#IHtqBm|gE++zb;OZ;4;E>D6)lo% z^%5&Oh1p1to^N)uL#LX?5ttxG&_F!h4V9XKowgS%sM?$|E`r6g>MD&PUZ=#Vg=L>x z&yNZ8`|RZ0+O`sDv>CA0FRyvFVB1LFpnXHK!P()foc24gnk}Js1?=&8Ot+7k{mln0 zmBa$fxoowtEiW?J5AHWex;52Bh;Qk~sjJqNp=x{Zg+g-FvG*X_S>9I~bPHN>S3D5p0(Auz#Nb_j3;#|n8X8GzHub%XP5(uJ58e|*pA$o9!t%R1XIYsOa(%o zff~evSkU@LYB`uqI*0I8$;`j30Zq3sM;TMSZiFj4dG=tZ7y1oj?Un%y4#o}e`ypdj z_;a?-H;P*NtT=8dzX#hMK5X;tsfdCs`X@&S3li6T2>2Tla6=(cKq&`;CQO_O)As8Z zUMBo0GSnHE!{ySv?O0Q@VkYV=^qeigx8O3UZdV+-;`+40UAB<9vXj{}Y9lH<{*EZs zzfNiX{F%kT_z1 zI4x0pq$B~e+0fE?j&Ar3T)u|+T@7~+OnDPQBDf)0U~c(c)bq30kJmux$8q!^*6sC* z=8Pp(dUSPrhqWQ^(lj?hX{3E}VvkBD{2T%8sPO5PID6$snA=aC7@ZYr=6e@j7S@TO z9oFb$*F?{ZVd~&sP@|E#;gdaZjei`?9VN$PY+jiPdnp3^AMx~c-=n+8W+h-B_-Dk? za0ZDE0a)Fcw8v!mx@nCIM$1G0|t}kdcB3OuAL5mC20C*#yt@BSsii3TpbFxNyZFo@XIId8? zUKUS1pL0(ko=f1d{Rxn^W25{)SMD8e$?lyR1r2W_Wb_&)Jz@acg|_H8`aGQyGKUNg z?_<52uBqmXKVCO~uAT{>d(VBQYwx>`UGEGuvGNY8?`ueG#_hjA{=(JvpuF~pCN4fe z1KRI4XWpJh6#7b&p;=r!3+etWImKz;JVrVm`IC5@)mbISQx97XZ<5vz55L+#&Xlbs zE0~)qLtc^IXrw4JcfkOz3_Pa8Bz2CV<_O5L94kCl$+=^McBOZA+ z*EP9D6@tXECyI;1*GOT50c%9kGwNYVn~^S6S%dGMtZ3nMT)14CZli2r-@U6Z;)Qrr zG7QobD+kq=Z+|XpOr_J`eY2{OT%P8xDlaG5J#uD6O5;npnAA1FQ@ajRnDyyl5Uzq-G-SzHi%)YY_?^U4(V|$J`r;1hZIqcar;H$6iLNhdc zRDavUEvg~ZH~Kzi0Z#0ne_kUtKht^B#c5TiNl#~EDD;qfUmPvGP&_|a=&*S&p#5#I z^vD89u@*YH7Tnqs#BvGY>%Ax}0bpgCBDXqY%+cp z{cG8xN7ownEJVUjFn4WNn6xmaXk!>$(H>KNT#w2M-35=nC9`l%Taqxdu}L24bTCn9tIz< z4B}>FLn^G5x_Ipf9vZn%tsBP^DMtg3hxr(HvOjmi-=jpwfg-!>DN zc*}%D4!_qfPvbA`t+i?G6}d@HoDyrDBlz8Quigy7kW#alzl87*`OP53P*rJ+Y8igO zBQw=Z(fM51SaI7dCOwCVd)Jv&aRT-@S%sXVo%GwE)5>+TEXzt3R3K?Iv|vAfmAD_0 zllLQ<(pW0=L2*%6&_sxfn83VA4ET{mKY4E3C%8gDjt9#tn*2e(i8l zAtPlWy@4%6fdyJZpG`{K!8s^v;GmO+SREX_f8RYAZIO^jVDtO=yy}!AIM%bW0W=n@ zX3Dd$KuLEElBID`Fc2u&0#UWt)ZI!`N24$}0uDoKJM21lWuMvPCVlTn&PS$&C)xCA zH4(Txa-qO$G%jvvU0BO?7C>+2nyCvmwT*_9W@H13nKLbHmk!>8VDxUTGU@}v-GZv^GrIUC{Zk+QI_?e;duYINS11!QHJbF<%XO`%(S!D2PI z->e_k81P5;L%9C!6ld5|5_Vk6-^Tfnh`x1pZ);4qxOaT-9*WQE_mEPy1~YUCw3F=b z?3yVS`0Fzc*sT>g3qFVB*QRFzPY52Ne?=QFQFkeN4*>F>Lg&e$&KC|c(-J*uI{OYq zBn?Ll_#Qj}NXmOr5IKCB4zGpRPvss2?fjPh3%51`W|V6DURE*P27pev<#JLVN}UbFXA_mRuSMCtRR zqRjou^PFbFf++nluiYaa-tGKVg8q6GiXPMkbMyQ+ApQ)A?9@>`WbC4?;Lg^Neu<+U zE`~M@ms>J~Q8))X&fk)$&wV_=n5h8D2bLF7X=8t%1sdM|R$994D7we!}|Mnua)t?Ui!4ec(gN@(&ga~qymf>l=gjHXm{ z$j&|Y&FyP~g}Cv(pSIVe_F0d-54s_A!3B#QL0QQwubOR|DzRmcK@Zlr2$?AO-? za5_5w^dd>nzoF{(Iv?k&#Q1kOtM*E#C+(${@BQ1(PmBHGm;Rj9)|BSzSK2qR$Ew;^ zl_@(=_)0kL;Sl$8qWlOa}Ff*)TC19!zlf5b)(qg#)64z&947Kv9$>~0Il^=_L*p6}v&BlZM6K)u z0>SMu|I&~25@c0!e-X1fDfqCbOmEc#haVhV^BJWhJtVqqQX*s@2D7mFAV}jpz;QvT zjl8;f|Ajcw$dR~x)^^}F=YAiNB$}DXldDN}R)SAj=k)ZF@B$DXqv{y%qLyG)vmH}sebV;JGjEBiI>81ES4Yo;`UAB z`n)-2ViQV<#sMEname^E-0k}!@L;la-;~YfS+-dhS#V|*-?kD2aieBxgaM728@#?L!v|I1f;%2{{2;Hu>+)=nGwISE24BX}*=I!vJ!fD%I1pPMPW z2un>+1Rn&r0cb0wdxK!E_qUswL)e!``x$sE)VB zu~9R#R=Nfbtvt48Mx(4qTxv;aNlD1hNA~W&Xl^B@DK1_!4gME7Hg5u#zID4_O`oK{ zFddwCue{247e6=N9+&uTg6%75G7i?zg6CjxBuL z-@AOwc->u@^%?eE=W;ss(%&d@bg^k>ts*wrHB)FgA(Lp<$4}DW54dA+Xw<^QLW>P@ zad-B!Jsz>VDo5(mycYoo9R#MbPw}8YJ_Z#=OM=p5_?(*3b0B8WLtQMDNefi#eq*}G z8dy8t6duDBqb01F5I|J#iRF{}%@vN3@SnWU=61UJORUVk+tG1IK>)QiHvydMboEk^ zBiesOV7V-qo%#J%+;BGtGaa)NV=@M3<^sl!bX?GAj?Qj1* zuG*O746Yc~?EBIb#>o%djED@@D!PTJWXrhJ(ir;eZrb%p#04K@jk}S;DlC@Zk13du z8^ge})|p~G0Yc+XVd4>k(kXM_`N5aqDVIA&NI6pw>+I+!y^qK}k#{gx^OnCIRA}0+ zb)8gpMpaNiu#CZnNSp=3r%#<`g#E3xlr9 zCLaij6(gH`g&2Tv1UdTNEy?MA8;ta)CoFQ8+7Deg6bRJUHn zo+!YSj~SK#@u()t;B8eXu2aHUA;-(;NA6Ui64Ru!0SQSk2*3BjX8zO7l^`dGs;YnN zgvY?>2bq~k%j%3p_rB8QhsvOu5jVU#WVc2y;Yi3qs!+HulMhPce3X#Ep!wGe>6AaM zbiGQv31INJ`&Nv5Oskt>)6?F+vez-(IMEqnt7=%^wePj-Jn-=CZ^=u^r`!qTj^L2s zkXOtVo@PdwtetX5K}&y4Kan|P>p)kmu1(M6d$L{JMcq}t94oFymyqZpIH%N*TK+tm zgY1y>^h&rpL}Na2+Bs)ckgH{+t7RA*XRw7Y1YkNOs@}(7qytw-tyvU+#r6CtI_DIE zD-#oR+kVZ=0bi*UcAx=ToQ#kOip^~gh2w8KZ)B}l_8lG+CWjE?Gs;R)VvwQAA)Omr zP5ou-rZ@Tvva`eRE!#IosKj}4$CR(eX6o}v4o3q7p4${ze|zGTqGcpp_i!Kf?GkhR z0!WNdSk8p{wX6eOpU*54K0XLp958<;&6?Ogqjyw3k)Fzii12|wgHV|SsotdRO7Yx~v=XeQjpiOeW$LRU_K$YIBTX45j#1loj zNl{-C@=PR)%Ry2GZ1e=dRKOm{zIIFSnQ0z^{O+&>iW|)KkL*EN^ZU_=wjPCg-^3fX zu;h?c*U*NUiyM#i_}@^@b$GwD<>A8U;m}lovO@FwxeY#8BP`-47)kzRniojbEday9 zKi207wO@P})&P};#5`1CWn8u(yd`-2H;DH4obz1s zTnk*IOT9@^#>nR$`~CErYfRhD0VwW!Kqii%-$xqA1<1R}{Y*NjwzIBH^)fEm-McNq z0I7x8!)_U$BnkW&4#-64Z%j%CNnJdz;tiG%g?dO96d77-E)9^7C6i?|*_I(oI@!vsunINO{!E^Z?(%<3 zD)b>|=+%YUK|B#&P0N(g^v3H|#X=D(z;eM=xA5p2aN(`!Q{ulTBN0G%i0^5~Tb~cp zPuA1|ghV=q9Hu=up94|DfTmy@v$?Ox;|C7*aiNf4KuO$liejF(-)B%(VvpxRmErVR zy1@R{kUVYYP3We-SPv)OU1IEq^iR245QQg|FuoveJQ1rS#bGfjg)Qw^yQA`Ki+JgD zWM)x2wFUR@e?!P}C-kux%%QI?n>m=`iig~oQ=UBzY{^rD=6UB#fM5|ctvOZiXHFzJ zO8$_nNrr=Ty-kEgU)7|Tly8lhm5B=0^506VA?g23`2{C1U@y=JzmIGww2S#GWK6#8 zT5l@iXZ+B$^Op`# zQpg~Y6O_FmOd6uf=WoYf&ahZzq$^I^O7pR0YUJnqLeMVvhW=3N?FN>6V-*FUZo{1+Or37$-bqO#RT#arH? zFy_3ZbX9Hfz@=-zCUOr@x)^bqEzdZ(8wCyX72Hb|;TM}5J{zgkwJ_hgHHp8gZ}J+E zr%9OSNy*L9-=?doCN5$=FlUO$b=i&Oqe_()Yj+mb%~v+lvx@ZnXso z1v2I0dx>xXEt3{3IQOv1W9X5XmB>k%usyZ7MKme`9K(3b-4&dm*Pc4>`RM&=lTlvj zn{(UL?^l~HoXFwU*Q8^ww#i~Iv|3w^h_F{|KG}%KiKKqF7lN+hzY2h)=QK%YdR3mf zo>|yfVl)C@{=w7E>!x}>vvi_jD1D@&1WQG?;MBo%$$MrHs6^(_Yv8p)h;13K;h`Jl zQiU!G#OzqMwBxG=s%4|dsj=cxq9CT?9NT3R{Oqq0{LY>Y(i}jKrdQ*sXT{%Q$&gf9 zYnh>^mb=m5JknP0l42PL%sXgwyG?d^*l%NfK5W)X0(~A(Crk#5O?&1iC-Q@jHs(vq zkG(D@ZZ=pofK$ZZS3bk&+|Mqq)TnNftOYlK3KvX6k#bu#A1qYDzXKVI^Z~W<;j{7{@=nq%<^S>AEMAR^=|bZIZmkkK)xDts<>5tYXeU7n$UN zY?}NEBn8#!N>!Im)=Mnt8mCKVlrV6}AY2j(j->GjaaAgRgIUo`NUT?VV1=>MXnxzzNc~2ZSM|!AF-DPtVtb9G*@bipEN-`q zM~#u$LI)q(&&p^vI8J1^(elHnyPfraquv;Q?}Ezb7aT?E$K{o zehc|DY34#i6u3_j=$*#QE~aI%cqOippsg%Yb72MXX?mI4!7t>tnZ6f0>zkDHo}a^` zdAfr4Z}lOaZR9n3RI|S>Z0mS^b}S4dR}iuVO!j>hVn<6onWm(^5$S(VmuFEm)`C)# zs#Z@+43#|Wn=?j@=opPq1IVlZlH`GyH1SuZg;mx`*#=uGnQ95y6tQ9<{CMXhFEc@1 zCWd&;_>@cZ1%uZBS8+k6Pm)gehOCmDd%A^-`}ac%AJI2qL9reqp|qaFX3PcIS0raH zpD@?ft_&EqWbcN69IENGv?TRv=E&s6qGD&S4sQKSQg|YsRSZ(G^>B7To{<9<;k&j$ zq8Zg)y}gXI7E#4s>Nr{%oT#9K%7e&(4i1?jMsv8R!w9`XBo?Zhs)l$07xhMgE_Hr5 z!V6kD3@aK9Y-*~q3%mWg+QF9nWaoBM-!3kGDRMw7gx2@Od)$?NX8P}D|C~u6Xs4my zwMEsmQz=B`A(@KNZ3rKMpVO#&j@AKsnuJ{ZTdK6=dOi8@RU)Otx`q-u5Q_=EP7Z$e`_4XgMya$Y_>$2@b`*jhZ zg63-uph8!-@9#STi867F1MWHBG3w5S)++pD1MrNNM-2I`0|usn-68JqU%I#7 z>4Ui*e4F^*WFD2~g`A}rz0;ZesZAaJ-f4J)vIv1Vhghu187i*Tkf#5t`tKGCku z>R%FFfO*UhV|GS;Tznuq>0&Z2X9l9yZ?aBd&A+3^*0(}Ak)&f&h*U8IfTi-o*DJfj z>Wwol`+Y2!I?4wDnwKIdD~$NzHo5+y%#e<#q3A}~6HLhQhhiM9ZYu~l{2m{Kjd`bD z&=!F6!(M%(tSpuyu73buV)CoX;}k&HX1bbv?_Y5#hYhdLV%59d`DafrE8@IA%&4?C zFoV`J>Kfh4wsD+w6eSdLCfRHcSrP4<_T^C6V_hE~M4$zr#o0HG6btTbgkxY%A*q(n zG1@@F8ebS5H0GYz;cj0I6Jd}3&(MqvLH(UE4fFgcaX~J4GuP9RkCFEGF=PU&NB;ig zHEbgZJ)&?ih^OlQBtm!EP{vUJhB88`XOaF?Bni3X&pz9G^Ly3Y@+-F9`03`n`%d!vo4g{9|2L8qYx2%or2vXhsyPONuXtm`-NZ zAP#lq#4Xv&8a5$kN%GA52N3;*L+LcVVt+cGy1iNv2n_jo7UeV5(!9kiQ*G+4?-IuLR3)N;?4q2>vjVWD8 z#st_i<+J3h%C5+w$Yj+9UFshO3wlb*2xJ_8*UDOMOmAqn0DT#7&v8jEcH1LNciXZ~ zT=xzjYkroaZ;B)ud`DY3`$v|f3OH!!3z(Ic6~%N`v)qU|kNQj!ZpO7W#6RBma7}0d z-K-mzZbfYPjeRy!nu=*zaT$-^LKR+r1(;O2MZXc~KJ-Z?Ngw4iclHtpBc9$^a-wck z5g+mgPsgA2n!!I^F~8dKfycom3mwC^kEj!%DlV4d>&BbcV&{o0_s`5poBc}L>@H5% zZR!I6jsH68lt8}Z4@zGOF6226sV{(PfbH6e>Y`TFG6t#{~nUC|((nd!VbtljzA z(~x2vYZM~JXLXtH`qgVPfL$~XPi+6I($DPt*Ga`QG;|^%qKf~&f>UwxZ zs2Y+%HEvd;q%Ig1!84?ue?^8GZb3Yu*`8gp%;;6c*3D7f;h12e_t?@Bmw%$vp275B z#c}9$E>5!-|Hv*ADJe;H`6jR&+71DQ&WctET28^7HQjyv3i3qj*7fG|gwE^)?8ow? z_ZoXYLSbv25s{*RwKt#8I6tgHBTLRo<_&6}WEkpoeRZBfQ$Pav>PAPk5uX{Ke78z~ zuU_wYT{GLO(KFqrc0VKcwtMR$ddKi zRY2l?`dgui&bz*&5i`o~hKWL*Tt#utzHe!^fng|axr4Dlo0if9`@ zoZZ{8$f7LFGdAA)5ZYWlQ2TRDsINc2UXlRFWGljMxpVe&DK&?%Er|Vkrj>)lN=VgtzXZ-&2$_>XFaHDiJIoy3nKt z8Q7;xAg+`~7gKMo@XELzYe^{=L5RN&f0NQ)@1NyuT(J`YaA;%QJN8BG2OaAg)sVKs z4Ne(W>)0JKA*{c&p67tc+&Y5+%}|SMv7-XKZ3f!3Q7iJr3DM4@vPH9Cw0+v9S=0$u z!4V?o+FNOeH$s*6i@SdCtPP_K=jj`XoE7iK6(~E0?+oF%fpQ*a`_-UH}jJ=P| z`Zmj>=wsC>?1#)k>Qfb^#K@~1c$k9jQ&s8i)aN_C&O`P<(>@?AdA%hu%DMA)hlr!9 zKo^+93&C%L2^1oO`O%T*j)76VCPWq2Y0OY@7h|kfR<XvlBJ$WZ?r8|~l@J50%`#1mb&#o`j4NNrpav1I1bqZKn9!?CYsR@4dn z*P?SfMjT?E^8!t|`lErS6t${C!o+nqPB(#&@40W7Z;=AiIZ$-ZO>Y8kL`w&dzq=m0 zeGLdvM(_Pmv)Fg)Y=YFr-Om(3FmjGDh=zLmObo#KMXx>$4}b@pt=! zQ`T`iHD)d1@dCZ+v65&($Q(+D?3ELWFgs{v!2t4yD(Ecj+k#F%e=6i}c{ae% zIG%;~mwtj?E*l6&``zWo&+_$*o}8WCdHL|8ORmPfxwz#WS<3iEgU)-}I_c%(6tPoC zy5P*O?fFZrMjB^gZ#0{vAB6<#)E8DY9olxv%2^JmZm3&ctKFokh*}h#lOSzeJrYCX zLTO5D)&Wn;VryMD3YXD>=%4QepSI?+S_?9@#6lFakMfWkZE@GN!7EM$?gF+W6>aHI za}1gXRlk6tT~nDoJw4tG;~a-0W=i+4WpfJx2>gU}GbjX(_20?*Ff`7k)VQQLu%i_8 zpPeWO&So9iexx{5f)_(G0CCV+6u64KJNWh12w==xPeEipxbi~T`4suf<74X0w3&}K zvB&}}sfJcp4+V0z>Et2DG;77-d|edkDnpz5yrx;eaIo0;3vLRaybTTd>`0n?K9Yp+ zJ~&e-=IVPKN0N?_mhIzWzh_3l=jJY~re$_FG4)MUQWOJE*2GlitZ(d~;{ll(pg}rR z2UwMbz6FKSUc@Ko|G>4WoKGWbC#PqoI;J^NL9XByY3fiAVXXqeRB?vTqAh*r>Y$?G zE3~XIS~$n60{x+LsM0>bYawJe z9pTvCt+k|V1HViylPg}nVo4*~7-j^^0!X)RXp@nqnN*0Q0<-%qHZPm~w4u!9(9jha z{Jqa$)&g3x6AFQZ<_>06KVVUNsX^*5cXaw16=7!clF_Da7dRPMTY`ICLi{z>CTPv67xx@f8Us|J&O{@65O|PCCv#Z$K5suY~ zZeVHXv9g5g+ok9rRb95jbAXia-8}Xe8^5si=bw!aSL@p5U<6SoMyTdsoyvoRbA!!S z#>?S@+o{vwmzh)I!rdKEs0FVse!$yh_UR?5vv78xsx~Ue7`}a*8dvv`U>-vmdQ)<9 z#EW>r-+sgVeU4(i+Ff@JuVLHjps!%XtS-P-!-i_Tq*Fd~&}_lBf!xS8jSXF7Hjz#Y z2#X%eGgRdpm)Dm|arr^ENK(+XX&j$Fh*BJXhYhb3aH41gw)TK zV!bhTuG^YSr>YK&AJ|t1uRNCoQ4uZKZNPneICXe*pbLcI94dI7FcSs8*10kvi*|(`t*v={!@cCXW@6>C8A#@XWKh4hD|u1 za$TB_)8&ulqlRJX=>GaHa1hD1WPgooYl=nAzwioNcx(F-20qwb0$BM&#+rC0y%@&3 z;jcl44BXK&kNdxIvuFz~>MnNL8yyV!EOxv(T}FpGPKk>I<{##fCrY1v#|f@IkLP0r z;udi_X?P=Y5Ef=)$=~hP30hRe=8H1P3+33P{&ON@Ttsjq_>9HK31%BJP4*ce*1c8~ zwdNQf_w-{Rb$Raq7m}JOof;Z^$ZW3}JSs7X4yQtLHWO)YT@~3O8KpLCwvJK!g8B@_ z>=L=5vA`2W7f!wC$KpcifoqqpY;F$>qTPcKz7!pS&^EZRf3_9fnH(st5?(IGMn?yX zjk%hj@wE$i>6-I<&dKEamVzYn8A}U>Q|U{3>5;~F9C#u?)ME;PE}>|IXpFjZ_&OwO zT6H3j;3fb;VUsk^G5TOaotdSeshZwYb@S)oJUll>w~g7z*jW{oV&-0VhvV~;0ZIhr z{hz2q$EVAxg=%6Oxyo|AF3iiiD`78f&o$#@@brq7iIM=lt&*_+R8{l84IIc%deMLPLAZv)RS*}6 z8yoz+(D+o%^M1R-&q^y%6aV&r{8IeE=O5sezDdbXFObh4l4nFg><+iity(^?_>(UK zaSKW&a?cp-ZUU53lW5q0&XB6s_$IZrj_*hxxa_^8hd5D|nF)V|FORC|y1dDR7H?zG$AjIE*0bc<+x- z=wteA-1pdf_-!U`n>Ey|rz-JS%pruG)QR8x*F3R~*+X@%Rl=#P7!+{6JYpk3aY2~m zr)4(LBeI&IpQU>K>E)S{d^0K8bZ1fC0G^KyY~b8-t{%eF?#4A+qF?B{CS*+Xpy0@L z0$X|;k(nHmzl`D&L^{~@Sjg%8P2u!z|EW5TUyQM~{VJC^d~Lm1ry~v!y^B6$olX6s zg`78yEGafr-v+lEod)Yni3BgmzWo$;<{%2x=5M2RckK=EGylSFmxoV#_IksXeXJRF9OEg$~h1`*$?nySplH$pfJo5!-jXw=Ch6QP?FSDp11`N)~5WY`*{6v z^cgBs@VN?8fc`alslU>CnVCe_5ZkbI$}7CnLf`=-HLrWi9R(RTy^s77kq5Vc!Cd!$ z$ol8tO5QL27maNj6Wf>=6Wg|JPLj^Vw#|t#!Nj(0+s4E>`F?Kw?z!ilde!=4@2=i! zch&0ZdY)eE{eEkk(6(mgk_?z%hr47D8H~-#0tZ+fE|IuWdl%?rD$va(`23~pXfyxdW^!k` zwPg2X6j~gN#;b8@;kh@w<8)jv5*Oy~_yHStN>e6H@)^usWzNdzycEUGyVW_Fg-4t3 zSI1f;2W{8y&6mdmOjq95gVC9nx`;Bogxo#goYet~MB?;uqakm+10nZWOJ zHNUDi{b!;0Kp~kZf8}J|;CEK>!*TGTLI{5ZW3*=v-5XM57yf;xXx~(h1)~@Jf zAaD;>^DzpB`9V2-UtOH7RF_Mx_#sr6*}VJ(NBgi&&~|@&=F+h>vbqo@J}F(hdIdsS zwiqJy(Hpyh?uJLNjLz47Wr&glk^^rBt*~!!Gh@wSii(Yjt#EMDli(HX`~nz89|LIgSk1)x zg?y%}&*FY~+#JL11#J^qHCXePVnkF)=d=8&@Bt^=#b|bliX5?U4Ph|3#Ndi->vz9l z@9P?Gr|_d@HLMRqHBZwd-5ff{@L-t=w;P8q_=YpI3kOH`BQ#T}I5;Jfm=x3-ogi4T zPA)Y7oU91VUi_>s31okp5)BZ(Mj2$dr_$_;{k3E<;)7#g})|&~tm z*llBG9GIQ0khdkSSJ(iYRqR#YqKjrq<}AZwkCYXp>3XS7mV|tsHxtJrq7oUe@^W)- z^R{5&=E$~`P`{3mH}hJDKm!JHNI2&-LI9L6M225@VP$2Hq@- zxd;G9$QD@h>&-l?cONz$0n{^G=`uxBi(Uax`I+Z*hi-$#* z@YL45dBe_OBAxy~B5h5snifmN@1yeKrmZ@kO@@B~z9^BP4(ebIx6AXOv%*C$tLnD4 zvKj$vvlKbqRKw8c&;$}(JsQqy*Xp+@ZP{xy5eUjpy7Bf6OJQ`i+hU9Y&}O%L(>Q)S zXecwE?rzd?xI>O_sxC0L4|^w6!?8<4qe6Mv>WQu{?-Nlq!#`s-GcZFKnpX6n z(yLU55iU8H+)6I>E!JgWDC)X=#aQ^3(w)kXI_^8lIS#=l z(+DJ%OD|?&S&ncQsqx=5@I$_OdwsjZ34!b4HrpY)e#$V&Qnd})SOMjDWM7!_%tOa! z!aV@E<45NRXkSd`dhnYH^0r#o!BQ+kr&sNpPH>^v*uf&pxx26`*RzVq{0WOO6chOS z{zonDh*#WbfTTvKA0itOwdj2$2DiOc;WdIV-9T&j70eTAYhX~+V4b8jAcpck6! z@136(M@Shs9g$iDdbL(sXqQhgU7JZ`hPS{$#mq-6%;3tWm0^0i|8J|(55Eqd;&%Pb zz<+S}Z;PZS98y{4RnBV9zl#G@-6#G{$Y4fFu^5nJTI~&U`!%TkzKGu>ueoEAVX`5P zi+%Da_TZ=(K)*&IOUMSjKUrb0E<4m^V^Lw{x)RsD9f8BD?_?j68o+;}f{%hz2^0YK zT&f43?Nb-N^()9BF**mHh;@-##97BLB&18-Zt1jG-9`M9{{i^_?D?VLTvR}k|;!s!GN+T z_z1tLnz{(vn?gE8=J(3CfPXlI2nve6Z@`E-85CC$qEXaD*^EHy&44c30Htx!TD@d|cs+_@ zd`=*%!?w3}K$;SvmkT7LaG! zW}$CkAL#B|$ocy|0)C47Df5rIJ4zgYpW0Ni$I0zEANaq({1p5b_LfKcakrUB^XDIV z`tc_EdY-F<#2fiM(uUNO*usqNRSd?!H72jJ;7Zb{jIH#+nP6e2a;g;}E{yvIWxSA@5ljNzOo#6lwD?=K8sdo^Ohvk&R2>oO-%EG@C)^TuR?LQa=`)J+4 z6J~FyM&({xzNe%48Aw>^w*EBcHlHkY^@tT6MRm^PZNvFkCd9vj$Ps*27`wNwP#a;x z{Nb?9)JpaueZO~1Wf-BA?!Xuz`Xq|W`#2I*Lf$}b+gyN6XnvQ75Gy@W<9VYc?+tzMpAr` zIHJG5qc7G7;sDBxd3w9;O>i4axhfCYj5Z54yfr~y=qCQ5a7+YH<14In-+k5jv9KT0 zD%dr+BY!`3;Y!@>5nKKx-muK|xNn@sb}M}K8A%taa$;PReK2R(Bd8Z<^~rs}QIjZ7 za3)sd3`;#su`mx}&Kl)ESOw{{iXE3A!qLtty)j?x!{yxOmdW|c)Hq^0+*?!fA-aq-A*@4SNGEGxhz*CqpAEQAe2Xxa*&(b2KeMpANwUL6(`Ps7=@($!b zN`gTVSjXbl2F6I7Np>?6F$fq?CGj@IqA^E;t#Uz~7hK34LLgkojX<3jU&sZbGdFN0 z6R`6U(G<#Eu$`E2hqaB%#n>V7!iTpKBoPyKhEqRvz;M}}~3v^+wfiYO;Uo2doi%`EFH6e6V%H`E8D6&r+ zTS)C@gQ~)G9Q=BN%d(^!FyX4S6tPl+@_1S|9>~kFJYPL97tp*o<8DoX@&Kw-;hbGV%%ZWVWF(v} zTD+kJU6V?g=sNMQt2mGwd{xJ7E_#Q`D;mH-xBE_YBkTLkz~+A5wA~lALECzMroLuaDDWU)NNuzOSgDJV#QBCiB?yS=qMTHs-p;=F-!)tic&@R6les}% ze6mpfWH6EU??RApsdj8J zY?53cwRrH=`y}C!IM;?Ssgl`z)6((Fw>fB)PQ7DOGkdU~U!a1!9l==+800sMa`z(U z7<$cTz!r)8{2>aSi?n})h=);{Wk8Ix)!giKQvUm;dw4MA_h8CuF=BKiG?X~KE>7Ay zv%|+M#jlYEnNyvVr6ojynOViQ>(jwtw~kl@4r#Ck%j1TZ6pCxpJV(RLIHAXa@m<+cK& zn|7gr^%g{zQ*dywM0^V_dL&uPG`21$ql<)(U*U~1I(Ucd^H9I%8Fh4_1K|;9i4qJJ zn(1px-PH_N5?;DzpP9>Bq9aqGQaGVb@lx0sf+AK2+$qF7j1)2G^ zDa_8O-%J~~5rfdYS^2R0`Q%>cMVRd?^Nz+N6Okjslo$K&fnz*P$sN4i%?s6=JlR*csw8B7s2Ep!diOIGVO%zh^_h^iyNyv!?FT!0fYY^y5>?Y>UbS|D)iw0Q@+yA$ZN zA5xNkHR!`6?C>>wqK#H3jcY7E2-K644&Z;9#im-9;7%Xd?NXRTuRDuU>1qLH6F-gv zC%w~2;i;?D^=4iS77Sv_27$;van5AINhA}AI~yvj%Vi;>1Y>VL#4~qJ<#W$Bb?id85n7lV@%}0Boj=O6BIK}MlhZT(?^~A!=dNv(61Rm zSQjre-$ZI7Bh{|sIMtUI1003tbc1dc^JblG>)^BR&6@#{qS209uo_YMJ89YDdy4BXv5knt&1HeQ+Q^knBNoRy#n6?Un%G)qrQ1${ZVdV z*%DSV9Bk?nRdb9zQNO~KI(L;f{;}2i*Mq(&309)Q@bno)2<3Rx)jJh%3ET~#j~67V z{5_p5d#6KUlS@;GeSh_;>CtR!fx+S0x;mD`Q6#CcEj|%5TBD3){}fdmGAMc`P9AMw z9f>fymbEaQd_SNSKh1PMs3A& z^a_uZr7!<)bPG1tw*KBhCNFE~ej#eQEazxoBuI<~c*82m3nGY}zuFoIT_dQvH8_Gb zxFWIfWk5z-o*bhKnYFQc-h|@?L|OunTu+GNy$mv2fA^_ib%eb(?>2Pf5))kmOYS6s zr7PlXZ(J>Ro{<(cFGk{1bI_pu?k{s}nySX(DtUpPVvAh`hzN<`mFLA%%4N_ZHqCxx zUp#ziE#idzW~W}ZI&Wl`ks_aQ2)!vTM*O=&ZsniHIRx!N@hW219sj?qt)n+!lK*Ib zRbzd9&5?iS*2K_921hz(mcQ|Wf1a&tu1lun*@pKgC7Oq>SmoWfRd&7NRr}BW777hb z!ci5DPZUr{=&^?w8;_sXAV{-G>rNK~Let#{Z8@%fBz7{!xmb0kx^KelR&o6X{RUR8 zCw9WppUX2fJTE1Gt82o{UsFYZxAX?H3(R|%c#VF+Ww-qxO|*)qNxFe8v21VBPAtR} z|7xSpl4+>>(CM|w;nX_DQx2GykIp%MNoYFt>|swTvS@kpe~MIdg4{;9yDm4lYmt;6 zP#e(ivX!+;$9ls5@TLBIlRlR@W?%_t!d3Q}o!N>s)85@x`4d)?raYeo5S<2GSdzoX zgzlS!HvVJXbJp^qx3A-Od>@9r6h4X8cFaB36Zxt8CZ3dKwBq0vj_jH8i7$`&SA6tk zAXGjJFWn`@Z3V@}c=CQot}iO%t~w1ha_~^E^_R_Ivp|iGfDttF^=Jf;s~HSL$4|3oh%E7vTS zkwedBNJpWxbS>*S-y|g@%72Jq2>l0!lH$x5^S4`)|A-h4{13W-mrUq*jUQ0|A&!cR z@*iTRLSJAQeZ2`zBaszLBLQSlC}C7kDPhoq%EEB|Bkh|p$$vzI{rZAN1Uf%(TKG8P zD@a^XTEDrX@WAMy3ZVRl*ptwIVC<;esf3`;fc=N^5BUF(L1jSs!m0DrTH64`3hWEo zBG~^Zi=+I)95|Ymv1W!ynLs!Pv&9lWhg-(1r8CsPXe&t3z!k4V?1eH4ti}8a;bjtA zv9Cb+`;C_5KO#!~|AV@q0Lva%y#Jp;($-JwezBZ~-Fo%$Tb5$%W$2# zj~aK~wrU1Tk48IqZ5i~AoV}d09LOoXslSj4V`Q#2lCBkZ)bb4H{K@)4FDN0%s70{J zGGU@&KVgnmq}~Y7LdQED?n90In8vR{o<-8Sun!mAZwNdp*s>>g!3dAETr94EG~K{~ zzZkCbRJ!`xTCZgaO#)8P$XyidvEsvZXZ&0uk19n|cD zdNFAKD|n)P@f8bp+^6VZw9jbUuZ$W|zVDX3ZfKjYN;w?GeSx^ z>4+Nh&$sx<8K?Ah*L2lCx^MBZwyy~1Ti3YD$hpIxE!lG7o)?B*=E?eaDaf+f!3P%} zTb>gRQ#msar?M?~oPP{I#w%*#a|CQs!7WrCWl4%PkgM$hr4H!@Xz(&xoot@;s_G02 zl}X{dZPjg8S`8V33GJwt4wtQo`4*4^I z#42yCgpW97E4lOIUc5=<=>3Gi&R!Pn>1Z;tkM#UC`$30V!uYHXwz!5iBUQ}C0xY$i ze^KS$#}ke~Htpwle0=`en|R4+=x(Qw^Ibf2RMs(Srqxf=mtuMb%r(A_hb&Ahl?6Y} z2XDB~S_9>f+#!A~r?IMr1$D;M$fP7PvB6n)PaZo#Ipnu__Mp)cXKLPBr9bOTyRCLZ>Y67|tZ;XH1x z#~;dWcmJ&=3h6hMRv}17AT(g^NvP5>vCg*_9r5NA;qzf?-|BoIcD>M6-exW=B99C+i z4m@mXEI9&3>TD-$1SZG-v|p9szEljqygUDA0076r!I5gC1U_BmcFG~tP zQw{`0uKJjB7W#mi2~q)K`@6RxgSY0=Z#H-fuPT*yi<4Vxky8|BPFq7uea=7>%_o?^ zWxa-Y4u@K6*}tWh3m?m&`YCm>nbHOOB~!oi&!0yGDlsLO9{9$kG5KOUqm*^1)$Gd& zh|S~<-7)9g$+a}y98(_KRL+ooSd0vw6L%Wdk&X<$T&6(y3Y?CUr&;y=2Ft(ib&SJd zOZPR_%=yGdyfPeAoObCo~g<3B~>}`;{cxf zITHV!&>Qzfr$3V&xaYX9L3NmY%k3T^zGELDen5P$nlAznxkNwlw(O4$dgjQ1vh+6! zt_g$5Ir+C@?Dwjt>8^fR+gpitxsR|WtB+%w6N8$b`zFWwdnSsU52OdXRzaJVh7h^;jXAH3c#1BC9Lck({|e&EnERIwJY#A>4=g<>N9t4$ z>>oBxPEL~l1qa9f9bBxeaR2-K|NWks`M=|wEX*X|+1XNadtq@f|8oIXhGSB7P_wr( zaWFL_`CsWA>%ftJiDahUXu{-Ul1QkNbbDvFKSKYnB9nLE z5-~Zr{$B;j$=nnU3Re!ADrp9XnL0s*fS+mt4mXYQKaaBiXa27ue>VGHe$M|R(h1u% zYXD~mnJQob2Lr*v#?F$uW%2*G3!Kd0LNGc1-**8gM-zfM94lz5=rbI~|0k)P1)K)P z|BN#J|B`Z~zCHh!^#8tSfP0UFEWpYv>l1N)yGEo>f8%Y>$ZhR4c z#GVlz2r%jPa3iT&^UV@#aufHhci&9_uy#}X!UJ$yP}w>v&!`Bg?u5aeX5Njf`?zfc zH`9w|6*+bbs&#u`tS~)lYt)y_6_UKW9Q-AhYCr+}gcMmNCM~MobY1xyz16|;tPwO` zg7Pw1K7n1e;W)QAXC8#)+QW9rB|6vHghXyj0YL*GKv z46##DGckkzJoIqDt|jyfR9%70^i-rpUNLF|5`Tz8H*r47sf5S1+neN#GCMq>NY`L? z+^P7Qs)G%3{@8Z)l`(b>b*I4_`U}7kJ0o^olsSDdy$fy`pz8EBUmz*Y;!30)v?y}& za7<|1w~(bAg?)tePw3L**nwP1e}{cKhFm*rF|VdjB9CiRgleWlGq(O|?MaH;FZ{E> z8-H~%yjpyzXZ?lqe$(Wb#uY+i&wBS8<1quabl!pDUwnSJD*%dcD7zV1VH?PGj4fvk zPATX(rv50?{DE1Dt=)|M4zcNkXOV~0{)=v}dKdgntvsU)e+Ql`FLc`JUdD3hDsM|r zEO!r%+fSiW+#N#$iUewdHD zQ)ZK-YtR0`{mw$Q2~!?JfYC>ZKo~Et?s*znqmWpL=?#-N9}(6Ewi7`6gl_OjBG{MB z8V+uu=L*#sd~j-V@o*8`^XoyrQMkP-$0}be&zY}e&{cXe`%^C&4@1V$Ko_H2io^l( zZVO@Eim}QCGKA6!x)CNmttZ5^_2YFq@p^-)Kx3w6=I1dw4rq|*^kL-AMJo8hM#NQs z39=vDCq!42!9dqg?hFu^)T1PSDg|#vabb$yf*I2`;&hAk9Czn*)On~eX+T!8a zf9Ip520jF~Kv+IBUt=}O0ndIGv@|6vuO|B-_g?J}m(zRN+Yy|L@u8}#v<`IbbFb6ZjHW!~Ki~K}AO@{Vu&r zF6Vq*TxBYtB|8~vg1!Pa1cLib$0&%1Y$}dypJ8%PtVPwXoV+? z+{4Ug%s0vp^A7;=BlT_V4ZA$AT&_{;q4t!bQA4jpzq<2>Z`X^}L+B|RUgK|xdU=e@6O}>;BeM`bhl0DaV?}n%kNI6}$ctZrrX& ziRQ=_naHh!)sdrhtoDHRu(9U6^6<5=%O7HI2mDL~aNgtL6T9|Qp7e#HO_~E^EW1#KzC+C@eu;DW0;}Q#WJv3x^6>}jvGYSM z^n?CrpCQ$K1d|{a<8PSLn9Sgpluq3ZoI;5PJ9y;zuOL?n*nU4ybsqknBIVUfG-L1( zn*T?fhlm{kuH6|9~FsoRZ$lJ&-QcOdFqz zgr&kGgC~Dt>A~~{c7p0GYU1KowK{#2b2jEtM1+D7M-Oq;sx;8ipN%IzR_A~KP&;2-u3L_!aiCFQY| ziWJX0-OCy`O4|~jF;^h#`u>}cd=bX5@3=9*ug58M{#fy+EfDv=7+3Tkc;E8`NAp4# zL9zM6zm~?o{B*kI@>YAl)padTB7%f^6Egrb0_q6HgsZyk2yy=;j+LU}YAtXeRb#;} zHhUb%aV;IdzB}PLGbvt(Nv5~?q|dUxwjXNAwG4*5*y`EIxl!t=rAw=mkM8}kB-h1C z2n6k#I&+d?EZHz`3^Pxh$y>65jMg4-fhbhfY3?u}ihPK@`EwlrnS9UFj>Wo|lQ;ti zQi`g-YMe!lyjNztEo8vWuRm>B(-vopu4HH?Wh%LtN!!DZnG78UA2_vJOEDF72{5fw z#md#Wa>>NjHK5MsqpXuONo5|5m^2&Meq`;jM0dA$4YW#RF>Lt+ipf>z5Yo3)Ptn=JNr#J-^v zuvgh!hpm@I_XiYw>#M76ck9YbT(gvV^mAkJ@!7Y_ofI8MDIu22OVCp|WHZ3yN4&e| zP4;wfwv3r4c1vT82f`K{Q__jYv;(d0hS&~g#vBmN_Zx8v(SfL?h!|>+jWuL)3yWv_ zhFT(mDy~G1NNW)vDZ0_K&)4SY`EhM#_<1eIiLUOof+D%>y`Xr$>Q(OWB&f&Jez&0B zjDDbePW9;7;uUiaD;OK>dlWEoW@ahnfYVtP4~5N95dRRZi1_isyw33#bZ~E%#m?q4 zY#HMDTL&PEiP?8MTmmyF$oD*=;j$=yR9d)O5=KdroJGM-ohubfk!XU6nIyzs#au8w zxN^>;lfKF$KiCUifPm^seEO?XZ*3_lWD+^}_8wWUz^B8R-CGQHe9a;N$KS||P~`DZuAc$=S#J5W`C|72l6fI7+T`z| z{-n%{G|le8a-qK;6F2Z`>OEtVH?>=6E&ho=$N`4JJl5mafR$9=+ zbjB~lY;}>l)+7jK)*)fqZIL2l$v9Dj&DsHy16{uhf~x6zg$kK(q&`}Y;NIa!K$b!^ zzHijvmz8wepUwy7GTsv=}*C)sYK#H zzDiOiA|YD8tT*6^B-9lzgF7f*N3lXb$T@&JOGw*?rV~X<>Zbm%>`-j?+i| z1_5FrJ&wXOT*Tj(kB7_!-2wyi1*|9!*0R0WGa(ZKQI%3~MZxkF$)<7GL~RWie+Sjt zPTC<~Cw>&w(Wayld@iD}o7i!68*DR>tDsv*kUzt0SOw}()=Qdr#gsbM?NxMWEqjgC z&{ITfwasDE1&%at#{kcafee{04_Tip96q%f?bK86;syIjetn-;e*qm%{Vc^ro;vrY z4fMs76A`Qxym-^5bF0}ySGmQkBsVTEo}l1WuU5{oiH>QPKi6@!60des;F}$03VB1p z5{+9<05Ejd{BNk2^ulPv=tS$EOU_XTx>;9>z??6o?^k<8#lSto)cpO@A8swZ2=H)a zKERJAW=O_~TQ`CM3yUsdO~Zn*4HR*Qlr^taxKqik!ptN6uT<&Wg4Fjby3_FKHKK`& zR=rtyt|db~64Xpnwng3;E}DV@`787om@X7*(*(#QsM?E=CfCL*k{Ye%gzt~{)0uOW~+^E=LLvSt?P;kzwK+Kjoi+(iAYcuap-zt#JHYT{Wx%)d^q|8iY@i;R==NA! zbL~^$*sn#@Fz@IgVdBiKqKIx%xK+e)R;aXzW+`}wEw7e~)d)78;-1DpxIRZ6B*;&4 z-OO%+k?uJUr9?iq09BtJB2E@GS*lfWf{Yj>3DbHLHzA%9`nET~g}i!h`kma*4_LMi z{=pGCn>eyRW7>IeOfKJdM8GR;k;)+}bv7C?%7bCgad@UTm`uA{&#;$To>HD_<=xRC zFhRMXzQBx!MEJFHOq{BaCs^Kqm?u*mm-4z8^jhqAt$_7xSv{FW>&4J_%|QF(}XPR8vX!a^6^^R;CCG|rG6G}gL-mpI zu8sTb!C8vL6g4muDWImQ@kG%{E^Vx!gaw;tUFt*cJ+JkVAEQhHjrohAfCTJ?I-WxH zd0ICctuxeH#BLt{mi(T}k+b@pX zujn%)*9o<@$wJ~S+DoeL1wyLk0SuwkLry`3X49`40gT$#-E?yNJafDQoA{aNw!ZO3t?Fwq8u%(?b$bObwhyn?}=;*PzfOd~`ZJuy$*W zs0-NtLms)^IArKN2Mq4t4QW$WRqMjKDT1FzCI7pJ{EJJpQuQE8y93Mb+in7=LO!4u>atgx@L-slB7pk)1=B(*BT~$m-VWj` zb;c`mPyZt!0`SIF45O6Gqs`7L8#$_N^`d5N__S^Q@Y0O5s_s-4M`RTn-OerU#Qaq7 z`KVdL$}}5EWH**6{=R>&ehObwK0k3b*I`#N#HiCz_TJ8)vLzZ8r4DgaiimO!rjwXGlfrDcc>zWO}&FAB2(=Rov7_nF0vi z2@yF)S`bq<298J@&cd^4b*s$R@^P3|ij9nwz{@edU!A!t8f@x!t!HXh1&2-59z}Z` ziPeHK0N|cm`i$^C_h68I4A%ZNBBdYvs!KPU+Fb3{^{pezOU9e-PU0jMH}U)NLdfWT z-V!=(1)TSos2TY&ric;Cv0F%QejXPQTpM{Af)Q`RI!qgdRaSfX_+-%q?nttfj8#_1 z-!?w`rbtUj(0o}+eMVFDz~Li#jpUKr@6_c;{6OXWHlFM;SyX`*r_QkRUEhKYpi_WB zyX+SEJax-HV>?m|FT_akn|H!Tk3{ak9ZpRO)2tJW*&riM8X@IoP54PP&`XGaAQS5% z1WOmLKZ{(;Il*#*RCu&yFmedF#ko2v`;Vq7&nt7DIgHLZqlH}+SyFLWYNM=+b`;Gk zBtZM(Fpy@G%X1O^XbN|bj)_{bG2eoLyr*z2#h0az>-18eLT*Kj|QH}7t`cbB{g-qQ(@Csv2MFI)!$&W8aGQaDsY z1rzh$yN+*^+ZhAb8gvhne_%wLstRnW3*eQ^|C0h%8Yp7MP@$7KSF5R_CB`DY*vp{S zNZn1PoX!(i5FCn!(Ulv5Ma>FgpaIs9(9?YtSKIGQp)QJ62rB0iVbSc(o<5#h%iu-N z56PVRlg$f3=y92S5^Nf5wo^)p^F;0Mu`gL;e`^Dg&ViwQ^MO;G!PkUhE1_LY2Y|Sd z-$hpOsFN*cJmv^r^Waw2I&bH!qot8JTQ|mZEQ^Pm%+R0R8vGKxG8wY?JNT$--eGpD zyhF?*ap#w*XvT>0vCE?!QvkFRD zCo=$J0S_^xmFM`04VuQL)R)LX1Qny$f&D;{9fvR`M%;_Sn^rockehZ^dge%qu2cfa zaH=OO5X`PSb5hL)Lq&e^-ZF$EtF)(ty;&lVqpDt~#&8a*{}*ZZ@?4^n6F>`#J#tvK ze_w=ZM4O*7r$TkNyKgwQKaC+-m_ksMDEnJR_Y%YcWF+4KZ7>1}yKm=tMXR%Rba7g9 zOLAUYm{*mmkEO$->h`_K!1K zkkKI9As`=#n3$Mco1SDuy#TZ5%{Izt(<71PpIyH3Hu3`Jn;z?@Sz21SNO~UIQI26s z+EO3SZlOZ-2qIH6tz4I$uQy?rGe@q>Nr(sRi^7$Gn(%-Ak}qd{$%$;?LVBgMM25V) zKpA4$inpB?w|g6s$fwS+Oz@oI6R-=~|N8kmedw)5;&e*K#h2t}l?tFs{rkg&oG|kD z(4&5nWy(~!OS)KKp_ieF8+s>GqvvMCV6_foQ?o;BQKR=}Bi*+)&XnZhjB@K!T8${m z0GGrjEd36z6g?AL`*x4bCdbZ|?9(X*P0@}YSV5lP!%~Rrk#lzfCr01mGlN+(Td=T< zu|$yep|jbegbfIb(%FH0@)N{AioWf%VWMCYNH-XeBG!SRy|n0J;j~m@2*+1b%h7S% zzH#aS{RTMRLIrtY^fLV^B*b$qd^66E--hV`qM~Y?(STaBDvgHgpcg0%7kte*1d>3) zMLbJ>2J(Mrr5V{-vcKn4A;1H&)6#1F_t_Z2D7FfzZz4P~K4^fv)DRSvT5jV>NSFR{ zES5Jw=4Y(Es-U&!^qc>I@ELedM~j7PYZmX37FqS5N?3hL`#-j@0+J2H(3F9unm-Fq zFfTFhB=*VfiVkYj^9N?XHA3JYr0BMJNqRJDNhZQ6#f<)OMKZNe+Cxd*yBjcLCC1X& zO+G~KR}fne84CcmWmZ#NKl4>u8su5NOgYwub?dbqSk|J50=Ed5As1v?4)VJ0!@p+7 zY^|GCu8<*8(fqWtWS3-Q#rwaNL|Wv>+A|yWJ!n@hlx;W#g6b1~YY-V03LZvreSt>! zPU3V*G7-=(m|L7+s-{-$q#YFWk&!0_LFi2n&?BRfU&sT7!P91AVr-OH6%&-LfjRzd zw5VZ2W3E5&r-RXcY4Yh3D@=_*ogU@0&#wJo`38N#O6fdJAAu`-j)RV{Ycd`3%*}H4 zLurWxA^VDF@yrAv;a^c`dy z(US)gza$uh+Sxx~@W=Hm09xMcAQG#i@X{#sAy3|;VHM{S$pr~k| zsuW%U56>HEH@Q$AnPiZaNzs3% z`qCgE<}?9D0@mtHFVErDC~o4S?4RE&%CEM=B8G>pyHM+$g1dvs^ikSJ5@h^TeaDo0 zcQbT0%8L5$T*PKvNB>Lgp}b9Tfyn)Mf^ucAwAN6`Z7IEn>qrX`s*QNxSDE81yVs!_ zxmXTpm4x86t=4WYb8N3s>WvQ*yMklbIlRoiY7BxF8axK`1!%ZJ&WES$atAY?)+WT{upz(FOOc_arACOBK7tEVpQrP?MTHU+61GPhh|Vr)LlP{Cf_oIezq}I+mtO zLoCy^G0(S*B}j`FE(`ZvhDpN74f#p0ReNGAM{yiXN%3Wdb|%MyJeX^W-ZV!*L=j$) z`MYOB2z3PssI3N?yq@A9sHdRoz;ad$!wX+*Tw{4$I*nEeHRsd!pkj{qgwpA+7GMIms9 zxlk9VVpfYFmAt!lz7iTS)ggXhn?cV@#%xZbbvC)$wb)D}LMqcG>@rK|?|zgctJ))7 z9c<%887P+ZDZcI;77krw_YYB)@}Eg%TLbu<=elk-X45x!uf*?9g2;l`qx14_&C;$l zH3r^n=?^bz8dY73ooD}Wy6#vO+aCjeZ%P(AlS!h9E0X6x5*82;XQXccn6e&<&|jtu zi4eQWC^~7ThDJ+Rl(?D!Y$8IA;`ILg1{m;|&;jl|9)Ys%{_AWJIcgA{l;1a0apDva zf>On1kmL@c8?+v#$zJZ_z8}p!Ag_? zAM_d}+UpEB0$GS6&vXh@#|^BQp@Z*#gnWo*Pw42~wffuH5!QLAz}7DJK#a&!?W6JN ztShVG)VJYG!yy8NagoOgS%vGUV@J?$owO+aQFQ|9%Fr=TLENqYT9JXdVh%yZxQ_0) zL|i6kFteDuB}&kOzIOtgbOqK z>`|OYh&`V3?VOJRCT*3Q7tWu%y}iBF&0J{V+yk}6&^22gIa36QhpqbjKpE) zR`;^Mn_>n=Xt9VTlj;sMY1YuG&Dt~{L7^j)UVrFh&s2s2p-1C{hwe^BhEAnZ?aI3L zSBSdCo8}y(%9IFbC(w261}a?BIWWXP&t+K7)0=e;7+ep$H!&%R75b=A zH$ve{nVvSOg3n?rls;CpDq?m%!;E$hs~4TI+7^+~tEYVTbvrnvbW8QlOpgsIyvcBs zYi9t~u>kgJseTuy*~AuUpyT=1R~O-w$*KAO1w}x*zmpL3l2BPN=yiw6DuP}d3fqES zDHL`~5+RsG%Z=KK#CY*PnYxppk~f7kmY~>|pkpO!wSr>E2}(;=7BT`6m{Hme@{GWY z(t?`aOmh#@n*|SR>AaRK2-5?ZeVMV$i430!%4%l8e=garOX^#h)w;umx7e_aDR?#$ zEwcq^na!O({het$Du_lDKB!i`NCaN@866QAo0&{%N@hb|GKO_7*|xty0CheVD%V-c zLg5fmo1^h)#3WZD(GoKxDzRP{5~G!d@OHxvZ zf0`8HRvN|QwKdb8f}^GQD3v_(^aTAS-y$Am)*7bhd6k4V6y&w8(hzpH#c11s6#{K32^Qf6KkK=m99rw7af&vy&d*ir2 zJ`f*{b8~X@-90&Unn{;aRE{i$K#t6%K|DNA#E_(t=1C}@Y?-99 z?xZ-$3>h?N?NxMIsvXH}N4266TuWMVmw(z^k$_KBn@2<6oRs;8R;b-5vq@%L2JW(}&{dczS3Ftg{ z{+)L%$+cZL+LT*4c)!bRk^sY&aAE8LnaY5cC|;duIIyW+FI8mge+-QfjO%}$51hct4DlgOGWH7*(WPtI#fSU5Q zK$*qTV;!{;vvskRAggHIVJ%vDD^G#jY8@}0WX#t(PCi%kf4b(L7&ga(F%qLR!K{%n zkr_G{W;cvXv&cLsgr6nT)C}HSVu~jzSESl{Go5d2x>4o`GptTdYD6Jg9#6z8;+)zL zi$u*K%PcGhMT;h>t3<{y1fp!3g|u-s@XDx(GD%8Z(@eGkrXZD$=*kZ2Y#+q7F!h(q zR6w#af?^W-e_2Ke>{E_2<8uQYwGz$o9|0>}w(ZA-shxxO{(ZRf&N;z3=M$rQk>7sh ziCu+jUf;7~)5uX(Pr~GzVyU_3zCX%QzsDd~X6lIa;A{5ksHN=?Z)zzI6Ntd~rYs0*H2dZZo;RLR3Ss`Fu{ z5@OlIe|+yArW$&5G|yudgqSQam%O^jOUMZd?S)9dv5e-Lx5o6s1>W;}rR;x{ml$H@yy)av#` ztkxdesErImFlOVBO|;37n6MqUscrqSmv($rzXX;={p}*Nn@-NGTcRyLt6{?sYGm~D$JsQFNk%7o)WMAY|L?uUhB1EAsbg_tQz@>@ zl;Uud#Y&aiQzspR zGM=Br-|NJ0;F_7sM)u-=l4kxVf5?lcrja%3 zSFAuNezu}XZ;&Wn8XPvPvazI%8O&@m0BWO@$y7Yb&q|7)UPzgpc77at573RIEyt#g zA4^Xjowk*|HzB@~{;J;Lb{W|EBNjT&NqebxjzQr}!cF~wY?ac09_!6s?6}yD7uqp< zodO~zyj$c{8Un@C5IH3 zIHyB$dpJx3yLTVv9GU6Xav9Lu)rKr>wDS$e`;NalILAeH@9RiUfBjP_*?A^8|%XA6@#%$cq|?>5)I3pA;vl%>=bfoh*5rpy(uB^@-rL zg3d*4$Ad$85TPkd);hw|h*&#=li_SVvyF7T^;T_pXtpID9-dd#Tk(yCD=S?I{wIZB zwNL#^-|R&By7jedf7X-DA?L*lVi!>hTpRG~BcSn`k)If*>B?s}Fw=s8$xhRLRgo&X z1`kiEh!)a>VxyTntH!&cf?kXw4U>OL3olDh^`%QiOUr3J553vTcqVUWgKjs7bf7`* zh6@AF)|JpC&j$>Kl52!ANs%H9Fi7?i$`RYF!w&qI^RV+}fBdTUsQ(?U+WIFQUZ8Dr zu5{dr@6_%xzvI;em6|NiTq1je_!Y;i9-;*CLSd#gR-WQP(yDJ+%wvVe$7$HZ_wxh% zC_l!l`A-ZA6e@3bF62{s{Mw*!u>&h;rXk2U!bc#5D#at zIMLYH*w@+ruC4SKep-tAZ!p*uY+Q_np~~EPIsN@I_tI0tEH=b z0w`sOtyd;IK(u;Se;HkqU}Z{7JVwy*uU)$JjU8`X zw`u$9OS6~G-Fws8uU$N!d-~y>PhWp#_|ZFl__cprGpFU@8-7;!-M)W4eP=(_3Mvrd z530IQEoj9pN_La)8sCGNC#0t`&u30#g%$1r^?+uFutPhn9@gv@b^{*@di|lYXwaJs zg$0Ike?rJ)3TnM2|67RWXhMVp)n1KH^b#C4na%!M^k}jQRf?6Qa-95138hj=;;=vJ z_kQT}`33D$f}nn?MYBUgr~_)ThJ$B)p!Be3ZLNALl?+y<;nvGMPsv`z`@Wa+F73$< zWcOvcEE1V5O=JWwvUwqvMI#JLBP=uGp_!3~f9p;h!8_R&0;&@*#el9en>?LA3Hm}l z51fVBOFseW38Dfsm{O%-s+pSRK~_cLryw4cVzx4Y%KVlPwZqq1!pu(-VqAve0OWC{ z^lCsMaS(f1) zf9ANOwx;|d6`A@lTy<5Ue7!GRUYN5g?vm59w-=s@x@) zU;hQ@QA>U`jUBEmllC*LPpVmH63kA}tN*N2(W|gOk`S1LB{2Vw!2CagGeU23vhH&- z&CNOE5pvEfDsxhgP>fc0B0sy?&mQDwe~<7d7}rZMu9uiuN|GqC5SI9C+O}H!CslSK zg?uEEp|Y5^TA>OCDz4e?P0~ zXBmE0=w~0wR{ze(X^{Bav$RGck*zz2X-=FYs?lW}lV`nD6hFL5Q&y?S3R$XXWU@Wk zejxtQtf~?~k)?;>YAmZB%O1~?u`KR~jEOAg7o3TJd7LvVma;@55a}or5&=_3*q;c5 z$2pTy6|Rm~%*h0*=lM{$rj~tien@u{GGol$4@R)$jpnvTZ-Vk_!>LK1ltv^x` zO!OrB69Wl;I5CP5CP;!gXYJ0qM1S4)cd%(T%~7XH@r*A5bP>y0C1hF+u}W@E z%}3pw%ZGvQt2{o;6p z_Q9J9{=C!gjYQ^ez{?(8;3>&|DVS$Zsy3ql-mKiDk@Pv2l>RBxtEyLBKa<{Zy(68F|H1#m<#1p> z?^byoZl~Mjmo!?JUef#P-1FVLT)SnByr8AWo`0yWM!N`)N0EKgZP~4uAa_Obmf>{B^~M)PGoPTVvZ|f7@Z>ZR1#@*yuhl z50VvmSmyfWeKL{V&*Og}4jHkc*w>IPWCz(zUL}HY()1Pc~0d zkHlyBZYDg@Mcz~eZJ8P@&9!HDYw?TPH?)NAQAnPoCQ?gjV^ofa)7H=J?ytL{ywB9U zQ&ep~YNDzXm9g@re+9Z202Lv&Vo$9J*H0V0)Ec4*fl%MTJ-O!03A`4|4_~oiZ!GG5 zHeQKCJX>g2 zT6$N>5V4Y4PH1lB30__3I9+zoN-hKNNCQowRYKh z6u0zIa`Wg)yVUI!1QkF>;f49s*4{B#WD zbP~&wSe9fcf2o^|4Kr)kSayhIhbm`~uaX*FXaOY7FukF&va#X+6#~6Vx)Bgi*GLi2 z95u&=8%G=YvBrtUqdGjM!)D!pZm;eQe;u!5=9fwoic|$Fdn)@Y2P*mD z%F#+PR*9)VGf{cGlCSJ|?K1bSw zt*X1Gf7V^sw&DWi2ZbN4lqH6J;vzin-V4)piwnLBtAde;P1m@BJFm18g31|J6rRNQ zqn{xcTB^kRNT2JdlheBT-N)UW79$PMn*}R6Y*h?;zRBzeI)*_x8^;xjK4@NJCT6$v z(D$a1V=B+wDAtnSgf7j&gSL_@nXP!3S(i&?f8Q%M4Qe$Sebj2NZtAR`yJ>gf$yC|y z9-C2X*EZEww_mwt(|)Q$bre73o&|IkQ3O4AV67mJWAy=*%0VNe(KC+CidE}DF(pQn zSbuC^>_m)@S!lLt4cdZspxtO6QXzNrIUM*B<4OqEJ^7_((1j!6NLhra3Fa_SYob1{ zf8QJMa%x-59M#7px64h`A>OhM1=XH)*lvQ9(*UUmme*mg0D)C>tV3=c1ZVYy3U*dh z+-R$_HZaG8#ZH*m-yoI@#`RRBEOig*xbv!2{SV#n;O)O!_tK4*A8pGG)?XE<%0zOB zrg_-~b>!g>@#6F6?0vcL^e2VG_x$lEfB#kZaQ{7Phn~W@4#E)3>vr42oFoxyB!)`W8kcZ6)s7ZgZ;qf@7edZKgrpFZ-%&Y{KtiAIUP z`a1I4yDQ{CknTFZ0jOdGzR`_hpz&O%JlBV@wl-K>5#LgKUD>dH*g(CVH${hIBehRR zk9r=9K4UoOc{cWZ{AJzC`rjCxe;TC2Y9sMz<4&W?6E#Lno%l|Cv+-8b6Ua0RHQ`Rw zi5Hfy!K>pJ)Lw!v!55QFu}k8cYp=&Q#J8qysNK!)Rt;;0g_|rlS$EraJMZW374Ej& zYkko9{n!uVKdc?+4+|gZ|7`fk^ilkynuNxvjW?kjZmdzw6Oh3Z=UE`Se;7ThRh2Zd z8U1s#*bF11urmW`5pPsPlvT2XN{IWiC$fAt{39sf@N858WUkA&6xXPWbGhrD!+*ga zoh9+pla$6MPo6GOIrC?_N_zrolIcL1#mNhfXh;Li1XXry`HDI=Q*u`Gx5Z~fa~K_ zX+g9^m>292^MavquJf?`fU4Zb;c@c*Axm;h#Ns$N=g@BBUL!G%b7>`Q*OI3Y#<)g& z>S+rOT3Rf`;!$Eaf2M7gC2W?05|NlrD=my}SYL8*<%bv!eMa|&o*slzni@QvKm9?= ze52(8;5rl-h6+&@VC*y$L)t6|L1dOUc<|tU*NQPGl0>>e-t{n=Ri}9qZ}!lmbntM z*xHU7T?LJ(&_U%cn;Xeo!p0;ho6NQ~$uqtu>a}8m6WbtaWbP`iJZa@kYR`-_N-w#k zs;H^HPpyeFf87!>-4bDtm_S+rscDj_kzejYcrQ6IA-)1KQu-_VL64xC;+aEKda2P- zdl=i)sngABg4QvC$Hqh;n_Lp>)U;85QM_!;zYMj?)uuSYZWA;{Pg_G9KxbKtSQ2*d z+4aW9rxzS2sYUH;x>?jxmJ=6>tHoUw{#Qf0PlgoWn1bN;Ze;; z!auae%&gwpzPiimcx4t&3tV}^YLgQI_ibf1y0S5h;-SUy0Gdav$#Rab66-N-3DM9t zxg}Fgbx=2|BmKHz-P1Zw_pwZD)G6ha7~vY<7vt3G{m;a zPqt9Yf4u9gWu7yMbn9n{Fw*Jo0aYizF+vx)j>E)7;&t<}4-Kwc2C_hpvs|xZkR_GtZTs?u4>}`kPg^s)<&svI=g&qfOd9F>S;e@x+pixZaxe&bMyXZq{Aw-soBH-JH5s z*rwa&zQ%Kv_uAAh-7fe2=zi^eo_mwef1~4de^iIHS|OQCRaEFO`;7-T{b7hy&GZjL z#01&x@nkA=cBqg_CfQFyBrD*S3Xhi82`Px(I;|jtr+*wG&el^yYvbu~&Tp=Bfj&Hr z1;x8thu_zoqNF>Z`zw&{_7?48?HVno-7bt{lj2XlWtOp7-V2)T?lmc#PPL>+f6853 z_e6*a@5x1{0a;Jx2Tx7`oPr=fwP%%Ty>lDHyTE@|C`JL;ca zGOMd06UvqA0`ntt3eTEDZqZfCf88C8`{Qke8vM^hxmBw-Mx(qGGPRt!;?~>er7CKj z=GlFF$uq&Kut79{Ty!2#@4o{Q&q51PA9tT}lhxUCUu;i32O7?5vbAFCQi3YfRqFHa zkolH|#jCe8Tpb%&O=X#zUAIWPvm>)_Zrj~?+v0m%_egsdkMl=V2VDoHe^={X?VMPB zeD#Udr&fDCvZGea+UtX>RgVcB^(|iHFA45E;^1MKGd58I0`{k#YpQ~_lBMhy-3%5mF{6N+!BJiiZt4R zJE(o6gE|g6QdAA^=&@rvf2AGU76I=NAYq|PIkW0Lt+;iZt5yu|4qe)fd)&ir;(mer z8%#|t*NvK?NT=4gm*6F-l)3xITn1%O0Ky#V<}#rCXYiKH?#$i{myziHmy&%klg(9e z!^`k8`fYSK93*~zP_(ne@0ganj4~CS5!B>m(O@|)ryuQfdFpnTf8)jF1LYIt$IJP0 z6RlZ3V=pMD9L7q)qx@=lb!N4)dLQ(;YBjypr#IBCHtoK*9k;W+rR~+S6Puj_&NrN# zlP*4FYx$i9x^buEGjvjQ*S4nxw^V1i9**>I7;z#;xapruVKF?FoAIgB#Iy7pxroE^R2xH>5@K@?@JDyo}|l>X-@S0DC7*$**R@dI%`#$*~xlc=gOwG zNY>|fNmvz&)>PM4*Hv@sIkCmDs%S-QMRb`D`(_1vs59Fwf1|m$MMmeTT70OdvfGEw zPcD=3JgMD>m&aH7@QRiGCNEU?&O%+)9Ww6h$kr>QRR#_)n{W2vMd>9zv^23qMs2QE zUrG993u?a%&h-eDmJcz(m~lC}B9HoibX63Mv!a#mfIYR}T5$)WGh-r4?{9qO|(lE4a=sTXk&T&HXPWO`rpE=HxYvM<1OxKNSpR zd;`BYFTdrIhram9t(|&HROU!1LqH}|K`e?e|kxZ&eg6DRtLiulAT+xdwAvC zq3iapntSHP+TLg;GJD5@I;WFYL!T}ybdVcVcOe^UQo{FI97cxO)a(dAV)6kiR#sObQvLb2#j0M5g6(Hn>`z{)N2-kde{lkkw zo{sH>e=X6jjo-i{Z{m7fyrN>>Cxv@oe(ULx#~y$-R6!e7ur}nBNP@2r7N|IQxdj?w z1JPZpg9em-x`k5@J9@wOKO2Gbwk(W`)gdBHwjQ`=UA&4^-G9;UhYD}}*Y$h5L+;KS zR2wQfH-58l&94hTFW@VpZ6D)HU;g#j$oC&8f9(ZUX8@g7a%Vj{eatf1$9@UGHNACb zc~@oz6Ebu&44v9EM={fRnn|)+$?AsonOf~LwP=nKqP5!R%%8*R&0)TrIn0YQr;Ba& z>6*E(YsO~THS>Tj>c4T*x?MW@n64zdJ;`oQHZadI&1hhY^&03e3Fzs44QxGG12dS? zf2s|Hl@t1mhOg{JqT9cx*QRBrrT&*n&yXvo*RH**=xJ4%%xDFQo+%1WcehUpkqZ;qmZvy+);3f3|#uMyj4~VOoMkW((EiBr}*MSzfYX4!fGe zuI6;fbT?CJ-CA!0H96DlhLY`>CH}@r8yb4MsC$iOcFmYvA@MmY?dt05J$F?b3+a+J zcETqh_RYsYTm&2jf*mu0r1&CgFMf#H;7r4rDSmj!18S5cHJ1KBX!O--j`#i5f5{E^ zVM`yi%qER^v=7Sys2kEaIdibAArYvCgrYC&N(AP2uw7N-oataVnFwUYIpe|boJ61< z63XoG@_6^0Wr5}MghWHPl1r2eNE4mEVkI4zXv(0|Yt+0-Grzq$Be`^aAoPK{9m>df zKpq2uZX9P7b3>vk8EMQk;DLs*e+JS(^PJr)=R~@?g55pcWVm~@o1kv7n{?A3{jxjj zy8CuK@r~o*QH{42vz~tE#bf>8e_hcz*o)!k#57@M@|8BMod3wF~SzFbY_T93G z!EB6%V-Z8hhfU@(Q}kT>?hv92u;~J2z-VUP{l6G_r#E=TnUz=L`f>%+f7xu!Io98= ztZS;pJsYf*n`>9x;MjCm=fc5|)2ORIuh49p6>{l#Z+u1e(k? zF0FJ^msm@UhpmAs`NTfiV2)L6SaWS>=klf-3R_pm&R`_sV!Osh2C9_o0)4X3$t=W? zh~<39t5*D}hJs^Ny*Co^f6iKtFT5`mnqDuJK!|@<)rDj<21+p!>DF?rl&vJ2$Teg{ z-XlLDACV2XY#iUE)S5QbFDDlSh&JfuLS@bdujRZlUC=9r!g6qC|L>oC7LoYEgcHzH z_%bq1jw)%Vi>(N7G3URFSx;PLTCI-xXml)B$6PqNheK=gGy7_0e>TvZKFwTLAn>2e z=W@x?M!Y0&5f^vPkHN5wFEO=xda&ru7yjPRRbPBiyCUlF#k*_C#>-a9qM_#I^$-0Y z_TD=%uHxDspSfl4_PyKt?%lqt)fQ=2vR0O@EB7t|#@GfSxyS_<$#TPhV?hAhl-Qv| z66}P~orf*C$TqHA(B(6!DV@c>WabMc+a?l$L!+ zR_Rz-BR4l_=NBJe~fZ+TQ=L)_ATmXb25=h zK^$amBnbTIWw|#*bu~hC#0bgB26t$Id2yp+6XgneEupZR+C)KZn?n(cnPITn<)%Hc zn<8?#IdZBytm#t^s86cd^Td$1L*1=ryVS?kC)8|3cYs!{n)FcAAd0|7_^F!60;w-F z5IPxR^Auc-e{eAd@n0~4{HH_~WN+v}#%$yoJk;l-@6%Vky=)jI)yz78pPUnjLVLX0FG^CP8 z@iJsX8so8jw+N;OEn0Z&$%0;}p zc)Z9If6*`=dq}n(vocn9fh<_Oe_>IUuE+vMeU^C8m$lHTh5pvlokSnLqTQ6u1>#y0 zry}-Y(NHYJsrZ;N9@k0>agNI@!~qjfAzfl2)@rh<{6ZWw_{nO;1!k5&y4*_V==;%{ zblQ4hnnqzpLl;C^$0bZBd5L2g1%G8(^S;}kf4FAck<9~r_mw}~z9<)Rd(1aFV>L@2 zj(CFUhh|CbyQbXQ{iS8xwCxYx&_4fx$LkK>y!X~;CM5i|YQ9yadwga4^d^6@Eug*r z_V%S)o+58|477g}aBg<|#i~ZJ^ZZ{GjbfW#g@uaxJ8id^@)=O)=l@I_uAcBVBuZaZ ze;U>k)nclH2h!RBs)omZll?7H6DwF`CDV*n8(ojJ*&%|g!xA;JD!yEWQ4n9fWYslc zrR%LWs*-7i(-0CWy6klP$DE?wULDc(3JXRFMa@^QcRDUxIBli)ab(H#&`#%Z=NTvK zBqCeuq#_CB=F;dQb`BaAH+DF&?CfxMe>?k}JDs~Bqo7X(glS=%3aAnhTf)$04cI2Y zBMB-k!cl|1av23MsbO?+ryh6caksutzf-?ke@4&i2OXCv>MF~htt}T-bD@1;(qO1& z?&YIab;Hd(e}O8d zD{e}~ZDd-F7!@%I#;3`9Ih}>ksmXFOG2UwxM^3=+IGs(C-5Qla(5tl?L95NHN`l4c zvX=A}`=lYYrU>Bx34IXC?*q}OX~<2}%;V;2p4O=1s zezIzUFkLsrJ6knZn5&+rovWYgf0>(~UAJ7dSXilB=2_-lQP{w3P;C%4Xm8ZrtiRcF zqj$6KMrnQS4(=ZHUA}F(ZTanW_X&^c?zi6WderlX_krYtxd-yksGrk3r+d!xjQ3gJ zbN;7uL&A{ykapO!KmXnQ$Lf!D=lmZ_)0X9W^2_SBYq%!w%0O>$b%yH^e|pr*H0*TE zjNp{y^c*+Odrj^N5bcEy^?V)62}sN8bUsI}#+M4#2_>DT3blbOqno{XjgQlrm74Wh z)PfG{)TM-lA&gKfQILCu{Hi=q$t%}td_FY{wmzTN9|)+C3VV^&WAj>*xs*3)(Zf{| zfw(tOs%!F=hR^p6d39Rge{p+dTV5?ldYvxph1_0`&lk{WwZ!Ds?)5>0FXvaQ!vt|I zpQ{62h@|-Pb#Pc`wIq^B5cd(I(`wafK{NVs)suDb&IaX%I-+piOanQd$rtl=19dy= z*!H@vy6(C@dT_GtOr5&!ef94&SL(b6Jh~%{ggp2kvW|d(ozS!Tf2W&A4>LCmg@}1| z8amTcZt;{$965WI!n%&UcfrQG0=Tu6&!)E;H!HZX7YX&|OORs!wbk|IQ-{VDGI=P7 zE%Ov0Sp}x1lTMIhit8!cl1Yc5H9$Nm4_?q^(X}cw=oEg&9*~Z<1hy2!;#O82+Y?0YwP1ygGH@^s8nIg zNRavPmb^2mHpa+TZ8(35-_JgPYT4H+Uv)ebFdLa#@>Ls=e#6eh`K-E%wRDF;7E;Yz56T_KF`B- zsp`qmNr{=snW=5UfH+{jH?}RgEj5sROniW3jvW;b#||ftWxp5uUh=KjTgemIAmTY- zj5wzzCL}aTRjR=`UL0@k;I9NkUE)wk9V^yyJAsE zEvPj@G?lcaQb}k)u|!_2v8mM>m)+&IN3}7VRvU{%qj{Ix=5o1H@rWA)IgMJ-!h1N1 zKLVj3e}F$43SyI)9Er$?Ka#a3lPCs*l7tu%iBTl@i*PCyWe)R?)#!S5cRx=BvTBF@X{;unX#i- zL~&phmdbiro9l{WIX*z_4Dm<%HJcMT^%3aEf7IA3YbBJ#1IaTLfK!vZ1-d}i zk-`HhOmrcol$_d|I-WX_5>nln3)TgviEQcioE|xK7MQULt~5k>AOezIr#z>{v&2L+z)p|$*-ICuITh4um9pMJyBh_vy1M>RImQuI!LT;q zfrgOzJFgU72}cXwKP6yOpLp4pDB;jGsq&9g@0R}(EC15p)WSXx;{v{5?Z}_-H@3Do zjchE&f?R5|kNg>b(kNMp{)b`txeuACeuGhU+FZi0XrumIrwv}%cTg^@J)?}%eZ=R}a7u(H~0#oBNf0EOS za`PPboLEQmdSQ!hi@3$S#j(Ztps-8aWq#UqG#)VWCedUz)dt0&Iar(0rkuHEt=N3E zW`1Kwa}`@I3eUZ%2{(~~Y{=nUHePgTIg}-32xR^KQa0OMs&;6=5w%h{7P>yD_@qo< zi^I1Ge0ri-Y|!fT`hpAiBf%Xne>M~g4Kd3OM-G^>24GPgdjDp3M*s(MvEIm*2ou>6 z!4Y>Xn=KVGe@>+mg$}6g%?-GL=Y^PC5TXq+TSG%k??@!_1--3M(8HT|Y4pxQBIedL z<>D?at1k)-CLi_%;Z5YSvepxPqGnqiZuLY@S;(=a}rn0eNe{39*+}KU} zRlV3CyZ5?Jy3e>d55kb(ugbg&_tfc{_z6>#Aw^D-)-W@hG4=(X+2kbah+ z5O${5oIYEHOzEs5y%We{k+ja)DTNC={l(~aTSVA2j7&IAkO{$ zkf!7$R`x)@KLnwjOo?iI=2nC36sPw+MkkYJ!OgprO*#F-(^OwN0AP)7mke+Ml}U{>Jjy@rwq z6<`MElr1GuG?mQYYGr%Ls`LsDC9qIX9%B1{Mz-2ZjcR)-nYWcv;LK_Vk-p(#j#5fC zgR__FiGw>k$=$(OE&U1d0Z>G~Dt5kLy@0?6qG{qXXq!=lW%A+| zQlW^>(KdZbIF1|Zf1-6)Z$349N~zqDaa-j(@1Ky#l;4PY5_rY&2>!I-Q;0`OdXwSAvN~d7FRZ`Ex5rAqIv)6CAuTeX zU&z4DVH28YkWH*?!Zmtq7cis3tcF)%POmc{PH*4{3jZ+nf5{d>Z4(5w8rXT2UX6kV zY&eR)3_X_)?~)BXR%z5Km73@DdhRHmidY!PmdHAd#>C=X>PQ#S;fx@} zF9R7biHZy(4@RlkZ;VdhZ4G0~9r0HpuVmP%(Wf(vE9lHFiLx53iN#}+(Olfi^hR&S zH#2L4Yo!h08)J9jt&#Qp7c$2(Z|47) zIiE3DkOO-dOVX3~)HP?D^Gl-3bJ`j;0j_zS3MyN?WNe!Z$Rae}jA^3+cSm+{cIf2RJgu^>p_%( zmX#kWHxwj8K=j3DG>jarPSD~%y!qOWC!WWy?z?)=jj{SP-+E=&=bINXH!&EOHw*-8 ze`B$x;5v3Cp<16^zj-)bzWL6%dgcNA%xznCSxNg0BgCcY{Aw+}@i5B5YrDU>A(vh6 zTIXHoyCvC|eb6Utavh2uN&d?FE8j1pDtAK6CgY`8DKR>k&(2RQPxNI6vbt9h_V`l1 z>AqjMf92($N#Y+w-*Wyk`c~r2|q@A3ZaN8=(UF;$S>8__>--X zb{Kslg1sgQRloojZb2Rq+OF*B^YEUjRO%Sp+JLfH&hE`JyD0c7o2|vP9bwvJ6bxY; zHW?N3FdAv3?a26eCOeEb4uuvhqDnFso6<~?O!WMR;dg#*%P6q14n z(*<;tR+LElF;$RHe+E+f#pXboOBLjWvH@l zvWKVKKD*Gt++1FN`RkuPc+*oSe~gp0+OH1GeR#UH(lc#>H}60p%*yk0UY-9=@j>wo zk>4P0ux%9|u|8`5zW4k7pNVRh*<$ktSiz3BdbS0aq*@j9qEJ`}dJUn7Gvp2?jYb3G zhIfb5zLs_iCKxD^C2x@}JdAd~IY{vjrba4nQI23Kg8L%7BPSzlB=lKJe;vYQ8@14P zsCqoSV9}>Kg38;Y>ZDbOh|^}W;2i9=y60T-ra)Zi z?_5*3yz(W^ViyHfC;?TE%pxLaJB2w>2VEFR;yfPn@}8H=>wmRn&ilB&{Npq8*TzPL z*0L+f;>ca)m;Sx{?n^&gf9S)LuoJuS1V2)CS>WG<8XwQ>m4|OOzGP%pBD@8yXKprb z$Zu-6sqvWhh(WyyVGB1gYhK*g$Xw0zFaykXc_;IzJY?8!JW@C^{td$~>J1hhW{r%B z;p^{4Tk9W3d+=`KPwLe=1f4L$>w}trp$5fpPD9kk?m@2>-$H*bf0{Hpw=Rzxn1Vb` z?wI%#eu8;YKFA!@?j83U`VVvh|BU%L`yu)epTU38p3(o=;Bpik#bSNFI2%8T9xyyq z|6s8?wHC^m!hx2+#0hp}&ojn6ViPWh+v`%f)Ty{PF*-q}*Tj)ms7IL1HFR<l%@x*Ud9tz=V}W3eQQMlx!>KWHo= z!T}qrTj`)nf40)8OutcWcU-|nq`goAR~D=a|6)N)Wj8mDLJE6I;*1P2a9fPe-u!RZ zjNIH@ur`!y>B3fa+5!xxri^~hFE3tTOGT@95RoB)@f40N$)eW3~hvWGbsEN5oc3U2- z#RLIP$08G#L@7Sqj@ucHxp^2*l20@?HF{Vt*X8PRcX_(JD&D{wQO)sYZk=wOVV!Y< zsV~qM?927#x2x~eZ8dB)-fr5OeujIdAX*FsL($OSFZhf82BLnS;iP~ROrEd(39jk8^|-LpOO>aQzYSG=y_ zy2kmVjI2(Vvg*94h)!xAoys@&Tl%frqmKxWXFY0By zFW}cPgSX&{_P%Urc&yIn_4fw7fxrwJXaYPn#=3{2&Z8Mh4FPPspv*uxD>!IMDKw2c$nvfy5D~pe1 z|Cl`wL$f@&LC(Go2Q11;**px`T=qpg36-ErbXAu2Kw72Pbi~NAf26;ZODpyoEtf#h ze^o)}6wJBH5a&SDtt|dU^MW-Q*VSqYC}kppvK2fb4~N=}zJPT4+H^vMA=+e2)x<0? zOsjJ$!qr`()K<0cz`)&6EV@OyC5ENqqBQx62;>2Uql1r0uXCA7T;5bF?+Y+HKl2QS?{{f{q>E(X8tar=c> z%rp1E%FSOK)to4Q{r(vzzp-*tlhYH@@+->et-G(^a>dxf^vz3FJ#fWiZ)^D0Ko0-p zzAtv)KEHlRZQ$GM?wNhxzc;vpIWpcXJpVpRM)(j8$m74xVavS0^1v2;i)xGie;)2$ zztF%mgsx_WNtW}0?68{!4zYT>DhmPQ}$crZ*7@$JKF#e0Ih0$M* zbOXER7{(tT6q(&293mHyHIgjue-?p#4j;h}R*ZR0brKN$P9mAnMc`AY0-b-FF8yMV z)hfEoyn>eRELA~^$S!~V(rx%Q<~B)%I_FUUSmhP!R&c$R#eqJ)&(D)hJFpNEI0csC z5=*_xGB26z!|bM6nI_xOlwvwF}F( z$A3-iX2n;@-(|=Fhe1vzf9D_qMdMGYqHra3s6EJE3OYy0zASz?;mL9b~8fPc46ZBKucd&Qp`Nue%%WMhlRP7XYsds4}7auq8 z&1giGC@@_$U1`RrHtr9o?+fGo0b!U`%fU!sSKwHH37DfXCr)>We^|`dq%3BYTF{DK z>>b8e4(-U`%rNuUL0pp_#-eOUrm)3i7Vk5eaFoEU4|R7JY1rJXgsrVg7_FnB?C^z( zJB^rtw08jqaol*qs4}{1kFY9MsB~2dtolson$FUpx&?ywI!`G8PAx4X{VlB{W*EJz zSOBqv%@L2;<1t6le}@vbs1JWiex%FC7sgPsfE;Nk5I__~>wx0#P@O52-CnTcr+l%o zSB?BSl^o|D9GrV#&GNa;#elOgEf|bvW#32ajFG1X!nM(8a>7Dp{*;#OFRh=DX$mxi zR#`;7RZt$y^Zt!Pa1HM67PxT@mIQZqcXt*ixO;GScX#*T?hxD^UY_s&SM?rDO-*la zA8f76cF%mS3g@4IfDL@?-GK;D9jzOzMH4zX!g0cZUymQzWWEvRjS481sI{kdgnnYz zL*gyvsg?Qg?Wx!4RQ@R#-mwq?a{j_3Hobk18>HAfp~o9BBfi^^$x?!(nodMYf1<-R_~{aaK{j!cc~O;h8qnpa>zchO3|@)7Y=M)jA5}4@|{w za?mJNpjwgn>&)BvgIvlLweGNYd*ySL8kF_-TMYVK-Y&O?=%kJ7yf*B1Ct}Vw?}6cH zhIneMLY+GA)q_Wl*V>evH_OfS&ZE7J!*loZR?<_!-$evXUml$#50K+Q$dm;UpBXDNZE2AJc2$l4oS^FmA9m+E6w2#3}!1!tDZyq1zTM4 zg&PvOUr1HY74StM(2pCoePol8X385XL_ne$^bP7LinNdn(fL?0 z*Pq8RDJoWSfy1|qszahHIQFZ5_p7%-k3_P5Ieh7_Jw*{FW6Yr6i7%zJm31)5lL7~k zO^4z-RO!+DGl>i`7&~Nwd9M}AGY9fne=5%D29F~b5`jhGF@FupHXpt(4W**Y#NumD z@uDghYMH+}3;pcMSf>`u21%Evt(UAH!QTaLsC?qN&3%KzoN;iCAjf=%StBlz`56oi z)q@R@_^KISZEN5m=51L^G+vK-)_KYuPoBufUw#|=P@kYtJ3tMagN7WL*)B-EKWUX2 z$BIhE#{h$T7vuupx`#ex2fT7alx|ULMwj-0axjH|Cv?ReUhOU%GMe^qe{`yDg68vO zz<%4}o+Ega3B&vtyOz5A^_zc(@091? zGXAsLR+jU{Rr@fp65-d!!^a}!Dfp@7ESF1NbeA+24I;yN7BZ?h) z^2%p}X_fcX^UUuGC1sY}#5K!xC-BhJ8On z$(zZkl*CZ>j2a5_zFF9hr?CIMe4O(8!{3@;6L-?;d?;fr2chkmS!nEm|2zbq2!Mxy zr$)WN=z(v`W^YJ`8^#kSZ0|6HCdI*`a2|Ce_1%b-%gN(NkgnWxjm`3X=JlSAr{u@v z$EtI-H6NMpzAr*AUmikLAia_-!mGvjyHSc=;CTPCI9XcYkmfI<>^57;c|r@uKKGTP z_Qj-NUMS-pcSibs5;Mc{E#oyBGJ#!O7>R6MM-w@Us5mn94wHB7C`xpD7`4COd0Jp& z8&14_P&EsbWY8(gb)P{9z?=nHNyLbWuZXFn&=`ZV?Yd?6-323W=PIW^-0rgq(`aaD z)gg$v3w|NJ=iETlC)FMjnEM{XH!etWD6!o0EaumwLY&CUlU`Tto6<`S$pWuu|6Cx4 zt3yLE-eLS5tUGP?B*o-l-u>U=Nq17093iJ7ytq1=)}{p*RWcn@fBibXo@zUw9BBri zZ{w%Bn=ih9DNjZKQE%)3Xg>5kjJupy>GL3S&VRPwtZHo%&Q*Yo()nW7{FE6Bfo*t7 zEk69;_L5uCTVlgO`){Gh8bIQ%u{6^HzM%mtCduH7IMJiO=RI%6@D^EKCu}-0t)g$a zG0p=RELfEh$-rpI`QP)uQf{D>OC-`^D$8hd+zMXz)WO3~bxFtX+xMFEh<Z%r%$HE2-g#nP>TV>&RaXJs4)WS`{#Wt%@#yTT{M zFrpsQ)5|nPytBM>Q#e^y7cylOTsV?-Wc`06>xgp2=aS$ksDWmwSS3|W{xrNM)gQ;u zu&i1fzu}Ido9oPzu@ntYlklKru!1!>(_MJ@J-nd_ljtJi;{1t`U|i7yRDVtXnUpN2 zkavvVz5&2PLsJqE7xDpgGP-o9*$RV)m_p5;sFoqArgPH{GOh|shQ@NsWgZi4Sv#$n z=UEbk5%eeCNr2M;m0;MB+9isOg!o$ItIo{o;fyH|G?n(N zsXpIQLj$I>>1CzGnS?hTJ5Wn~NGxH2@LLPjxFlp?G# z$b(mED8={>2#4%Xd7WARduTU<2Z}h*#Om#^7%0u<7#ImA#zNY1R36ZU))xZ6^@XZj zxzUEq%JZF5n9bfi3_rJHW%~b=cu4L#h zP)hdOaY^CD<&&UXi+ok|5YuMTX~XCn-RishzO(@WpzSQ@EcECdv%3q$D->2`3bJ#p z)odwR0uJYUjle-=Wj{KZs4tCmU?IL9_QwB(e#+pRn?Si_zGV2w+3<^@FI@}|Mi$M| zFY?0&v#s(IgP9@0y%r(@{b7NF$u*vy)jNvvE~^z>gtknhy;e>%8nR^z1rr=uxwS#n;!_Qze1C&SoaYa{;E_K>R;9P=rMb^{I3z6#GOu z03@+*Uhkf@#Bd<+=LghJ-Kpc6Y}bFd6&J|6v*M7#FU06-(P+KG_&>ouw#6*D$%Wrt z-S}kcT(BOj59y2s4|v-7~^k$2BPFaE;Eylvo$0Lw^Ug0P7VK6V9s4bRY24wxx;b5{s0b*{1~EnSuim zLAD`cs{Tv8A1uxFX!?BPR7Q|}D>%W%`uY7lG_rDyQdXH~CNE3tr&1~dL<5_8K5z~q z7oAPV$S`3(k-f{dgx(xUV6(g-m|u|h&M6BO{8a9@h}E^l^SZ5a^|_@JI>^^iNN1A zh|Mcnt6b={o>(ubR;$0A|A<7Aa|kWGbV6vYes7mQ=0%qNtjW`GenP8ZB~8)j(E~&g zNW&9Q=oB)G%_vbfRN$W@`Y=V=fnV-LEb?*}CYm$7WIVYR}V~sG^YW(wlqh@v^@JxKrz7eAcKz zE?^^S{yN$;1XQgE+XmC=NI}#v9frr9n;NZ*aUjf4=#Esme9|LAj4&Z2;Crt8#S*Kb z6Axqjgprp()rtWUy8})a;h+K+@h7ziISVcev8=Z*g2J?YdvBIVW#P z+bAqrmh3=){j>TyTqLG72i!ZPe1kUfs|`|~Al!e8MJjrC&)A!b&^rROG+mUlw^+k|U0UYWKtRi0 zigPw@q!J%An<3b4mZkMjy^p)CepW};gl3E0xMK|g(y^8#TgX&0*J2dr9AfKV%k=ur zHdd$j_ID|_LHK&iXVBILjUz6Y)!ZLXoPAyu9EuE~nSFp`n*A2g4f~}M-2vq{j?pw2 z>EQ_DUPB*X4Izh2L?drGtOtV36tkWpp*Ee;ic`o=y(gA8dU9V3cT=z`@Wlezo{B%up)8|Ix1kW)+`j6^%L;$>L>q>A1+#IEAIuq^GE+WC*DrI&*= zi1jy2CfWTt2pWIqdk2etHuYLd?|yNYifAU!xXzgK#-= z0uj+6+nR-&OzZv><-VLTRVx`Xmr0jc>utd|SJisF}$ zPlL#I2xO72_!*V0kcQ;Ui}dU2i5L;fXLm|;v9AcGW!cNG-0F&Nz9{rsxH4CMF?@RD+S9MOd&7k`m zIL#v_%c*XJG2M&SjrG_=iwqDiXaGcc?qVZbywQ&j6nKD zBFKm=EyDQbNlI-}*Y6Pi2GTK}@TsA+p?76(C9U%nj7V;sX)TkW7w=XCN@ zf8-^XrBXrW(H~7h02FGh^|5K4}n! z6xWZ|ok=Z);j(xUvh$q)vIyNCJ>OqyJcLkN|K_sCOpP%zY!SySj$kpL4o*qwu1;fV zSfU1|g0=91CAz5wHc=qz1X`0^kxm%-Zk<1cjB$d10;h;#zm!3$2w!q-YFjqc<=Vx? zTym)hRccty0u9~voHX2!V4n&lk-qF!6JO?lYGVS*%Z}y8UAj98nG&yQ5p?xj9a1tiuO4hBip+PdnD~4TW7o!o0+{84{9#+Vv8;ncj|IX z`=-P*NBPou@woAL@dRg`s_#5^=r>gJFA}4gI`rK|pVeFoCrn2|<0u)#=0>cTK;q+? z*Rw}*hGbcp5r|*^QZ?+a%GBFenOwGxGq&)~t~#zg-txV*qn3p>lSkD671ne7yBKug zjNy69nbYw()OE^d*DQzT@rnm-NvwHtNjHO%%5MC0(P>ISpbg9_vx@fXACx4CavAD> zG7}xRFyb5xmKcH=E8t8SD(K`dOZm{XC}X8OFbWn-Y(t0sB!{5=J&6h#QFhF0mrkvw z3AP^${`|cmLU{5T{K1_LQ0&)|vhNg!^c56Rv8C_Zw<*)d9!-ZdFm1hlN!cNetnGmZPHw9>#_?0+rcviV*TMm>CjmxE=5w5bF zx;|8?z9v6YJx-7l@-HhQTLd%Y_o8@Qw!k`aVNFIF^B&G9`|sxf1IHU$uK4p3J#W*i zaU;@masAg+g~4Wp-@ij1XKW@{JS+4U&>Q!N6>|N!Y7ekc^_iB3rzSM&yxGgnGa~0< zXpQ?>AJflXJE<^Q%vexuM9UEyJ@Z{q9F8GOr#T9M!YkWI$nf8!6~jN&9eJ(cvjnh-!}T+$Oq_Wp;;)?dVbd^N zN`fN?+-BGxG+x0rS}oCPFh`yZ;>R|JoFk>$wCmGZzo-5I>XI-L6Eh`b)a6U3#* zO}GV#Cs3>;Rv}gqqCGm}mUfrpAG>c}`Y#-wshkuI6t`=hB@krAv*_E8-Px~96vjAE z*t_uA7_BMj9z;9sVgs*%m5c#@f>P)yLYjrKSPC~Cz+S{j#H#I(@%8428R23OiYd%6 z*dw-~teptZ>_&5@ID4{s>p!aB;c%<;^w}YW!C|X;vfvY3SzlY^n{IDYKO6D<$Lnj2 z$u}c3o3X2eh;Ik8g0Pw!Ew)Jqr%<=HHq-uFz2D_#z0@X$w@bKTp>AOnTMb(~y_wd% z?Vrp=h96;&-vRNSPwETHb9Aw1=F0cxvT8}wI0Sj1-=U$HlrW-pTS?K{Zz4Dz2?HFE#w(7o5#`EuJN%pONeX zp-5j-S0`BE+T#g+HhoOvjf*|jQ`RnWy@wK%6(~+ODCw0J7$`B?>52Ob7{?U{FYgu{ zU|-1s#cZi%rN0)~;`O9^77+<>)lPhlXBl}hDzpPWuNcTS}*xu2UK<4!9?`eh+J*OVy&%>fFw zTy~~4jb225lG9khAD775&|SQ>Om*a!tpr0`AQfR+q}; zWnvuHbwd7-swfWe=jFsKg!w_O8BzRXuXzf%il&LR$B5l{oeK<5<0dG5w?s?vd>`Zo zXc~w-vg^2D6Wt5ttknFNd_~9|ZnU zhw%Js;lDc*0)rY-sZ@q!#j}Q9e^5R?plrLr!=aw&7v~Ts<)JYgh+)VEg%qK0u~TQ1 zt+=-yt3H;bV(?31Gp#)IC#$Yj(c(W`Ad&uSWItI1o!KW8N_Q9hY6wba4KajNlLWHh z`XA|Z@w&JKj0D4$vR!-W<2c807?A_DtVbJ{@VJUx;qQ7Q(MSL4d?AjZW!~gJK97~x zW&4|q%iJ%86^~4({(eWuF_|_zOP*8MD#UK~XA9;9wrTeQ1<8+@IhhBI&`U3DK!o-~ zqH3b_NSpi)fO zw_+Hp;R$Bf@0c+saoy%|8$U$yNL(`RE#xz)FU%WPGx|=zu2N}i?}81!{*Ps=U6}J0 zS1o}0(8{@ySG`D}%u)!^WDWUH6>F|S-E{GDU6K;Xu&3av`wu>``tK#;z?ZAiDK&j7 z;guEm0B2*^;f`=uGP5m+xpd|q*$5uU&YF-yLK6h7%D zpBcTq_g9f~J~LW-CSKA_K{MFd?<2A($=@}|R&lmaImV(Q;Fs-xpMUMsDdK&gn$vz? z_WxRz{IgW;+ci#RgIBBKUqIjW$yL5_kgz06B`V`ZJzquRM`zEMeRBc>T_K-@LBX=} zFt?q0-H27fzcAl}f`r6~M5^7qdYGWncoUEe-bA2_2bGKAeA(AA= z3w})09YN*!E0zu?GkBG7=)MV>4IyOi!FXkRlYfqPicC<)*Gym2_g;Fg zK64Xq9u4cWFr*`)paYh^>Lk;m8j)vWQVoRlzcLBS;dbbtc0?FCQ-=7vQJb`0f%$;f zC3;f{Ml6QjBl9|rzw@k{Mx@2A4lPEhHfrauq>vv^`WQ>GOHh{0T~Ns52fP^WT~yKG`)m2+WmFyfW z*n@f_QdSR(Xb>2HH1kd8&l+!!azbBgBUmnomRVO9y`NS_6ukbj>y=W!tavE9t$OU0 zg22c-$``UGDS97iZbe6?ZbM&6n~VyF)sWeRpUg?tQke7jjRz|0jfM9vMpzH2Rykw@ zu?3uzk$N;LSLNXSoXT-*9`|alV#o74htSi;CB+ssa|Qs>y<5zdvTg*2qAfd}^y;ZI4#&zN?<* zlE>~uPV{%3*R>^+Lgu&hzlYeV$c@n-5UuEMI-QFGFUWHZks*;oe4_El+E1;AtMNX& zPsf|Ud8K7;Uz3C>B*&IL_g`v}+Ze)SD?jJ9@d3{cC$ z^Fq|-H{|ybE+_F4q zcf4Xu#T?n+4f%_t9eWl|8Ml-4y(FX5!p@rD;P?Rpw>}-j&RDnntH=cvb8(-+6Ly*L zEt56-L(NRHYc%s8*@E_ULkW;f*K*bfl*pWlV`C`B*TF5ByVNR~-+!Bi*n8CKHcv0{ z2zSx_R?kzoPMikc_xV2vNv~7Me`@zm{>H%Jm85wI4nAB ziu2U}yhmMglVUV)CWv#BN}RjP)yW7uJzNG%461}6(uFkOoPR@yfx`b>iE&Dj8fyjNh_;uJ7^pyX1M(g1&K>Se7|* z71H>`ri+b7=1^u9evlXOV4;qu;I8Di=mk&BjB|~NzaAocHI{c_e=H_G${Nol8XEwF zz&pw#*5o)&PUK4>XQkM1pDO-iTU~!w?%KEoBq$yxN;ef=p|OcCGz0#OH_9g7bZz*a zGSzZ1HJ>=-!6x-4jt!wHP7W1N?U|D7ay46#9N&Wx$%TRWIf zDX*`%Z0-9fRHvBrF6A;8hLv6`=Z8HfsPd9V=Mxka~lOIEeh~E&QJ;HlmYJ9bR9P+w8@+*O2(YJA{dkx?x%3Pm~ z-a;MlfB=5RCKV!kR4ro~V33~kDCboCTXXzF$qiq8*rX0+cS&xisEca<&B+dQ!mcV^X5F>=6rXh}TuxU5fVdfEH<}(CVdv zedl9se1mNzA)Z6Vx1x$w{lYg^I^G_Zq8G%W zkuIJ$|J#C59Q7xtE^gmnqbxjS;`b5jm+u=&B&x0@T#3}C)(wrC>SaKS4tmWabi=B_ zI;O^q)RSm076kC9L%ptMM76$bn=j^7Rl6L~i$$k+`D2`NG}$~?vXMB{!(c_UT&ba( z{H!i9LF&h7BR73Hf%2f&=^Ej$v+n!gnAZ^<7b*9JQD|t-wV|oU@AD7srLSfYFYY!Q z(vNh-Bc`JumUR|*_#;4NnKJ&&;Tyxykh(agl6@c}UeTQB!)W5MP78@r9aI1vTd7|; z(p?QC1E~AlD0Q8|r0Ke}1ILwR9kH)@K22W>g!z2z6~tYLfNGj}=2HfiRF9m%h?Lmj zB2upi2Y$j0jgkxm^zGwAt-Z4@W0-ijbN9_2wrfX?rmf=@Y61b6IdP}igjejwmu2%MWs8eOEU zS1_!_;Koq*NABMGh-e8dN8W5rM2cnEi%3UZb$xSl&*r1a+&rbNuns@>;+u`X$XhxH`yp7PAr zb#3G701Nl|pi1aQ|CU@3CX^=RfFwW6o|ud%c5!vQJy4GF4d!26{Q%Sv+9&=#*BUEL z?CmHAeu6ZnkM3Kv7MD(rGR-f{T3W_zq~-Pp0}A7y+Fe zR-ir0lKxu&)O#@eL@s()p@?J5VGH~OIX}=WQWld66o??0efzk9uMlTSZ21h}ru-S; z^4I*2X0`*NuRF$0Q4C;Z`&oQt2t{c?FT;Xx{P@&U;4Jj4-8(raDDCq>u*yN35|0nRt5C|gY;7ug@*#d=FAgy(X&2j zhsHl(Y2WY)^1gj&CRFC!UeIKaGR|CLiq=#0Lx?+Zu-w=8uzo|0!Gy2lUzW$u?Xr6`OI-Gm3eJ7qw5^(lm_sZGZ zu%w@&&4F?A=fi_mLazim2^jtV>PTLQ{oG~_-T0HQ25z{i)x>GQC(IO zwItOz(L+O|syS)_hxCs&&BL^AB}w(Q$E&Yn^9GFBhrAG#xwjiu-BMs^(Rq0`08_ z*T1~Z?^!N=K}ls=A$wY1xZhV@Z_Aaks>VL?#&?qJo~jQ(^2m#`i<2|mY8&^9 zf8~E09SWTGuM5T&DiSMC)mP`ba!l=A?yr^kEeq87@eAlZRTl3ACYF=pY8 zS#7P(Liht7C~+O>VjAuG(Toa8cf)wbw$keKDEZrIG;%G*uOQxPvF<-l@5$Ly@;0`3 zUs;)Wz@S@S*`%9RlMUEU{c~2(E|C+ga_y+M=%F%yTOl%EXLBp0?1-t=tN6P(*Jbh4 z>dYTr5R^_*Ad%*F7r`lcRs`$)))BtQtU=AF%V@3j$sd`i{W%$A_w-MUevvs?aq;d) zcyiU5<`SS235ct+u3Lj@Hee3$3YmgN{~>%o3G3Me7(hC zyV|kS^3am^DQMYn3%O2WiT`5=?3Ebu5SNu#|GBWE(_IZsw!5Fhh}LsFBj}tbkH{ z3D71z_73xgM$q>j?2V6y$8SlKS|K=R;tMzKgPh7DE?l4f#<7ABCCv6RmSfiLv&ecc z5%Ugt|04IzVdVi9>A<6T%XL|F*x&zD_+E%|zdL3|D|%(2_JJ%SDgc03ld?1Iwl7Zh z#M40_vvv90jBfjJv1&PN17031F2aP4rbzv%G^lz=O8e zJbxp@2D;Wg%w3+KdXT*0^}~|9(h+O2h)Y3_A|`cSQP1~DzKcgB>m7Bmff+11*n_X_kOR#-KF>!txRsPq#%lrYw{?? zooGha{>&~lb{UCT)$Q8d0b<2};*kXo{xBnR_cXJZiV>GJ@C@ejp$ycbUx_#+b7JR$ zS?-SZr}s|>i!#JU5_jw&KV_)@5ou&-hfo)^-fO+x@(N|eJ-CpE%;8UEuFqZ!&6e-4 z&FH4oR4B`ytsg2Tp+j!T^UaI7Eoi-`wjVw}(b}|4jVFWY8}_i%Ghn3bs9$8$^vS|) zJ`arAEaR!<$>AyC$=gXxj6we7+sSfduavA*%%c9rDb!pn!k@0mm6_dluB{Xuf`x8x zJ41FMO&x;Ng<6EQq2@yV*Nm`3dGBGTeaYFHO;=eo7P}a5;=iUXceB{{awNh>kV=yE z4kRX|f{Y4+P6?752n}M*lJ)$=w+c8A)enHkidYrHKqU^x`6IPg&<6dgc#+}Sf%`8bEyWP>>4|(xR zzonp|LI*j(v_`F!OuMGiXfa;PHXpQ*e(D`(8C^fL5`QM^093>-s9DzDNikuM3^!jFQeg2L&SK@ZCH;(H`pzRO!ICW+QZ{vJHL2Tu}%ll=Wmx`Uu zrM-0l@xaOT6}o52&k}kOA<9q(OmNr>(x3~xW>e^FtF`;eZV)8-0O3;|C%)r4^X*gn z^Ptx0D}1MEHPAA>!HLwm#$?ylU1N8~AJZ9fpi+!&_NsF!JNtP5<9+>`0G!Vq!B?K< zr~34Cl&np!qu0YcCOhvfw_6@hBt+!J82SL>&&z)fZAZXM{9dVFrQZn-c&6}MRah0* z!N&H1??w!ie_j19j$+;Io0aoU{&!R6P3512@$R=iU7!e8C(WeUF^v=)Djw>6%9l9X zM{=P7_r3{tWfif66H;p;RAjh&sicZb;63KKu2`3TRU|lCH24D^_Z^eXi_%C9gDv7q z?2Xsu86FP)opb*X%4hoWZnu`n%#FjWnaT_Y>svkU(yRn|i~RZ7eO z%{x2G3IGFx(wOhxhnNd4AhlKXr$J>K;sX-d6QZ@ms}JzCO~Q$2Ns@f^9gT`J*y zB#yf45|wMixxUTnol!NP7#1gO+->))D583P0D5OGaOe2t+FyF2dT`vk@nJMA{H;ye zF~xA>T+zZtN>Pprs%6;mf52|LYm9u)~^vUn<$!)QF1n&+F2g+uH5<@Io5}!6F0U zKoPP4@#~1bf_6a9qGgEvsov#KY+jFQZlBwv-lf}FH6D7@JTm*EkR9>olx28qE1(D4 zA{nL&EvH0QoCHhft}^M@<Fb>M=b6M0H42h!(=hilyO1>XjysR)RX(2 z?%*-lwK*U+Cw1s~GoF9~ZD}(MVa&{B>xRD;7D2VBnzPH|fekdYvp=xYtz58hf!LMX zYDEMp>AbTN#`LosNpeYHv^x^FGhw(~SW_g))$m*pGf}&g?MAyBDxcfTgNY%Kk8Qtn z(Xr>PyRmxODFu-#?bef18;&8cJxm&2Mf}Ra6vD`~I#~IHR)7M%7QeFY{DaENOb)Sv z${3p|r||anUjW6kW*JIgwpJ%2fFY0(CkTJZw^AiDsxrqa`7m3|y5jtP)Pis>P`Fgz zrXqpo$wbfMv4^2^xqm}M%I>zS8ohOGK+3UiYZkuJerRKca1_`joZKL0OR(#-jJ3+v zTMr$BhEF((7nl>lvLaVI_5;Rxln-RU@UQl#ox53D{G@qnwe$gOc})aUIqCm+iblQ3eAy z$4^`-lrR=r@Yf{^vtl(YDr;T8F$7g=Z}Xq4@yogNe`|NExvza1ZzA7j77otR-iCGR zbXO|$X-L-Yg1wDaoH?f~PSG?CnU}#S3SSr1JtMshJ>b^Am$C4v&Lj5p1-q8%`vwU4 zfuSbXiO^ph;?SM|kCCm&_c+~9h!F6;D%V7()ZN(Ku0jYckoT-xwAp@W-a^Ee5!~4H z@OPGX!I|cNxYKcUV0By3UV4pAJLqeg9C0CE%Vv7+wIBrC6l=fSLvFEe(Qi>_D^DHa zCh|qJsX$Rw)0_(Ec*=`ms40hqH_#HDTj;4%{H}7$wS)OflC^Yp<|z^o)1Bjs0fGFT z4sWYZXHG(?q~X zj;27wOtyT2kD&p5Ix4^m2>ky(AeR3-myeJ6m$8khlNkvI=eK0mVQ6ANJ3%%&odtE^ z!V5lXwGSR=wVGZmwsu5(Gza)=B?tyiEoK3R<}lpEY`amP=plJ))phlXvl?%W(k8k& zvD{>C7G*CprM)S0#kp2QRaoS9{G18Ql=c|t-D}z zb1Rv}d1e=u6?b~_cd!IFVLqOVKC{OqzSw=F*D(|ix30@^dm~uH{KxHoQTt z++8Q}L@fN@tT3+y%9-*Dq0^QZxVA!AUEr^#RL}prCzBJ@5U`Rbs1fm#YhK}5 zAh=kPcVFQRlI7pv@i0j^SXlno*xA|PKN|@M1WNXNga5RG*w{!oI5^?|^Z4(`e?2Gb z|MUL8WB;?Ufk6ND$#ZY;{KWqY$NB%9zk#?({%il8^nc-#YswHYu{gQ^ckeSR*(%$Z z8`>HfldytVlGW4^C?Hrt@ihWC$;{da2mm`b=jY?$=;UCmZw>GEXRX~`5A*Ix@Lj;< z!qfD^)AfFQW5gy-TEqn%og{GB8wxJu57}@IO*Y&DBpeoF*aAj{DpsNp7lcl|n5MP$ z+4_nPmf%1c$3UZ*HEH@LdmVmMW7fM*7tqDadn0hLl=|S<@wrHCN~g)@4Lx666F?Jt z%~eKNJZ&}Eb_tx0M(rIGThu*Vy|#9T`&Wb-x8CG5QL7AiyT8A|(Q=YdxO*;-M*h?_ z<7Y=EB`jyR)$BCd-kAtacZOpOx{*I~IBIUHR}P+LgIVd>FRNU&lRXZ1%_a=Gzfi5z zsjt3|a=$^;Uv)B&iC^|AJ2AI2$S2``fR%+BfC?fZ!(%7w$1wBt1lwWCkPbyLyhI^k5nGO7*XPhuc#c^x19OlCmvx^qb6Z4XKMYrjEeUTwjdkW0DSX#Y~Qo! z|3u|}pjZb7JSZ((QwMfNy69tlZgmY_k>~J0?+B_Cx12VrC+5hRx~iH{>+hBaW#jD3 zpw?~$nITpNEHD`n`XJnocp;rZJ^|^MO0CMX5hl6PM^v}YRs+h-M4N%Vb}0DM z^hZ!L^vIAMZPQq0cxgdNIiiTcn+e%cW`ggOgh*ZA5YGDDy$l}R_X67B^C&EO8Yl$3 z2;AkcMsviKzBlE0&VXjB?BSzx)emrLd)XPk4^@BFv;*tnd}X=r1!jW|dNX_o*F!Qz z1-}dS>+nV9A481P70AYXtqA5_i*U)+&F#{o%nSv^fIo|raJ3sW1CJDcv|+pEf(QG& zZN(q@=J*4mvN4W$S*W^tZ1}!xMt_WJQI`<47TnIwmgtXN>c$|SJM(BnRSIiPBWF+K z9km^4JK=c;;W7-t0I%9{q!$W|H^u!t5y4I1^IkNO8hZ7d+16&f3`1KHi!~?`_DG$` zA7N&pQRNh%c<(*-)&QbxKu>^(i2wC$`=TcW2s8Q}Kp9a8rVN6dKZjW1kJkAfG6VJu z{!IQ%kP#HC<>$Hs`N;Cl%NmP4%$#}?w<#$=>|^xEr_f^tgvdb{>y`MS5rp$>=~N1% zKoo3zx6Rwk19AZaYNoC9&u>Y%>o)(Rz^lM}+?ueD$VT47jHx;C8+bsfg-MW6(O!a6 zt(E?9=WIY<#-$U37B8&V9HL<}l-rfYR%nPm0ZMM(5l3@VSDqsa69b<$Drkq+4YKpg zrvF86^!6qYXKw_pF1;Z4Yds+ktu^C{?Ik6P?cxWgluJ@?!TB~O`lI-lwQ0BqeuSha zGuqctDm9m0u2TtS$c9c7truFm8|)*3S3Gc@vTEEHd#I*9Ho{^7gsDD+D~EPmLBEG> z*Q>11%q2YnkdHky~k9Mo*0$rQJ zeZ;GTsIsUajz?8KQ|iyy*}t>a1lY^z@dS_w;X;hzUjM<>lWw(gNGA40^k$sxgZ~6?85n}qu z^)&_jbpKsyc~RO|J!~&tetG@+&i&5ujwAp*mi&0}NN+&FAQjIu zD?S((Y6P$TJt>C62;qs!{WqU;RUvZycLy=#QbrCIz+?1g}FBfA{dCY0hew#v~Q;<_vz3#K zjHu6g&kuY@jp{E)7eJo~LBvJON->i?3g!1^0FGqH-svfBP66fT+!#Ufa zFCtlf8|f1f1HZYUJ-XoCud=4Y?QCs<*sOTMM;7vd=-p5|6ec>@_eTNvIEiWWRw8yI z`X~Gw{98>0k~(vUkHis$Fe>m28?p6AS+%Ilp@-P2YT~mV&Fy2set?WP_hfqWk_9){ zHFp0I_VHy&WT!dNL@w0Jw<@shORnJ0ay6NMLQ(nMs>HE}M+&c~&n-JP;Ba(gyBu0whkC;uP3W96a6Dx1C_k-`A2W7(G(9%0Tv^W~EImAz0 zVVgmABIJ|9$+97R8}g|~1n{F25`C@d{IMRXmti&P!Yg6<9icLyY`VTU@&5ekm!Te2 zL;|7Wk9O7*(2WG>SBl_+3rmYs`EsnoazyWyphx>4df37Y?_6BU#I)MycaMuG_9P|i zz#xbM(4C!^{sL6vk@(4&D{CT0YHm_P{sP2Kku9$&0-F$5ESvih*LHie0CyZS@rW)L z`iZx6F>UH)gJWlB(<;{{SSG*w*S{B5yRF{d0R|mE%QqPpIOHB)wxM*}tliVAP?#?p z9wJ+O+-+a{Ih)tO6CJ*RJVM!0gT{a?1Mkio2=Y zJC~i&2^osfp-ViSM~~eb_xRAm73;PQBxPKbODK!ydZ9x)y2Up$H?c3!>3s24k`C!D(jJ&LSOn{EVN z_C4c5Aw5LhzoD2pCx&S_nj4P%oO6u#PkNPZQCoxm1?bL%6C__y~LQB0li;Pt^kgl+huKU|YMXet`tuEZ`Sd z+D(A{h;SeM_hsj*vy{${*(lF1#x8oofH&)xmY~r4c*V?1w(quRyh)GwI+8hnMA$3G->$-{+;7y5e{xi+-tr zj_y!LW&(z9CM7Q^s9ptR)XYRc%!nV>0MRM_T#+tIW&4@R^VsoI^p|jijsBJGp5A0he0-OyG%ELLwjv+9} z`@2eWT^5lUzwKS#3~$5E4J4Er0uWde`d<&J<8&xstSooxQ_M$v-;DoWPp{6VJXPdf)noxfc>iYAr$!7cpzaa!0>|)S)A3brNmjK@MF(=># z62qU+Ub+M9)j7W9D8^Ar;7+X=BkyjRSb^QC-BwTeU^o!0?HKRe7P{o#Ff$+pvxJY`kr&?QVbDPizvK zBkJw-p^mVyUv0`4!xO{v!>@&z@XM4#GC)bb;S>FdRL)nvj!^LSP%P&YE|_YayG# zYsHAbjA5zf4?^$^*9}ERle%>nws>4-wjxQN;W=HqkvIw zf>B=yqaMW?ehd;<{NCvPD2XBz)z}RKm^tJQDrKR8;rIHT z`XZFS=L4QXC_+`}P172CM6-2jKCLNgCTiwu7@fweAsR*>hAj?E*RwX>_30J*l28r~o<_yNc)U0`h+(t~`Zs%EuwkUv z_Mpx_|J2UD6v+8Y$UFQA@(h1cU*C<^0xjb4kW|VAVC;>-%HWHwW|Ged;}4WDn=Cce zwRP0F{1?~n+Pe??cdl9)cE!9gU0TVy^H-i|n{wUauKVY`yLo^8W7{6U(PML3n-hVk zhxH{*DznzqyXCPQ_Q(K(jiZb1EIGtCUx%-dDb-k`~Pq&GXIEYnY3t1sZa-`3_G<($vd_O)ML(3HoG(f#G)#dJ2UBn&MS9n^wg(MZ>Hf4N%%2-p{H8&QR9E zeO5o3Q}rsLd9)VpeDtF^nTd!h!}pI5p26CwovW@PO6{Jm7?zbn@9ACJ(bfz^0W<#>;+~NfurBP#BU|xJvCQ(>$ z)2SJa+pgP#r>vNssKIkXmZ-z5HON9k*Ya1C7QEUy5q}q4hv8Qck}Z}@Kv_^(c7m}m zf=woMaR#34A;y3_?;h(M0X8<4*7rW{<~WlalPRtOWk+4kGN^rjgtYrp&4ah z;}L2Hq-6B8S(o?@3nPCTY|;bH-IASf#DVh-^pK!MG{wFuB=q0!}t6 z4Q^w|8+3;d#vZrF2Um(%2OIg^P5=k=JpUXPJwUExs3?RLqt zh!TQ`+l8sa>!^-89UiY9nC;0!4&G330GsuXekKRyiGG_qC$@h*4PyJCDK8YfN^8jZ z99tZZIjG|mvJ>28gu6gjUdyYzyxx%W@@h@aTe*O@azUZw4R9sz&D9R8*Xr*pPk@ z18e`+ZFiZCfrWp205tJBmkns|4!{Np8`#y2dg8bTv)FHz3g(9bV_PjXH8Ovlz}~fW zEas@tX|Yzi>Toz5sUtf!Qxdhujo&Pkt<*(k_<*HJP z%DE`v<8Z{^G+8N`aPDQMEhLj^u2_Bk$pu*pJzO;84`*LOtBkjKB}Z3>^*l2J8%PRhx=W zTAs|3+N$wBq7K;eYHc8z(+c|vP$^m`TIXBos0>!~&{Ts4J!biB_>(Zjgkg}yVhx4E zX0^r=NmqY|Ll!1$PSm)=19T4{p-3&OS#Qpm>D^{*E-O9rE1>ie^cG}9Zs01= zZ*JjOYdDf~gBINDKI10t>RPkaT&t}9URm8;QRaUnAnGykq)E}Da8iG@y;?E}`rh*InB0@VrjG=6qaKlJ5gigSb;L2V*v>rZ2Ypg0W$_zKz+>)+fa z?3V-I>Q4%)Q_z?_>qOQA8(al8xB+bNYbZbb3zUO33br^R*kZvNiwsC*WybrjDz#1) zkV$_@Me_n~qTl(Rg(~H0jXBa1Xy4r&k6X;QUNdn*$BNhPxpwKO$>!ke{J5oi+Y+m` z?rWtxhGx&vDD-ND-aW^*d{sP_oz%InExU2WUc7L{G=BU#SJU*;!EJ35AOF<{(Dw$W?!-QmSn#yLt+`-SCuNR%b2d$5>}r8E42I zb|h&}J#pumP+A4x5;$x;j(Sg^*erRR&b32%j$o1=T33#q?)2W$hTDz?7IZ znQY-mI2bWt%tWFQLlk+u8iO{YQ8TKHx~3E#z%Je#6)$PB*}TE9DHsf61|wzwU(J74 z8zLryA%Y|D!|DhYvR6@51Gf`5#bR-dS{jQgJ$oFHfGQr-YaDq`uXg|+J7PN>959^@ zze>}1-DA;8HW0ehh$;AFu(Y?FVKtug|u3{Q?gA&wa83u+IvUD-rms@?Q&%H;Yc z;5uQu`K0!w$bQ`ypmrSN3cwC?T%Es+u4N+lzQ|{hFqKgbi-!rOnv5@4;D1=IUtxm5B+4Qy$ zgXDTSF;10FR*)}z9CMZje! z$^%AKQLd0HBu*q(n0=_%$;*G0%^IiMnRZgAQ^f_1GD$?G@-^tpUNbQ}BB+B1aNDW{ zC8OOMomABFaG||gthI;Z-?NSAn67`E795+dK|tBXL2ze!;)50RgbV`QuGkpVBWfcB z0Dia?g#i2w%A&kd%7jv(ZWh`Hp)BhhKvF&I2+p?t3mlh8BS5_}U8H|!WjD_rcl)j8 z!C&vbcK}=NS+TTr=Cf-~-rIBIjrr`-5AnuofA{9bCGI~Btlop`UzpK2b;6=iF^3^m z_dt79?ze(8SAl~&3dTH!{=v5po4VkKbuyk#=PBkXr^KG4&+DGEJ>^i`?%3lPj?*2? z0}Szay%@Fo{}_#BP#1qDCLi$<>`!a32E0!`U;-Zk%c2+#@_K!Klh5b(d6iMWPoGin zib)EpI8J!vCG=qIP0^`LSqnZsHwqlfMBc{-VGY3Q^+AWrokKp1e0zPb`QGuJ@eTW= zz5%@baNK9Do*-y_!Rsl1PJ@FfDCmo_Q&!E;jYY*QXyuB)h?;*nn-NADsL6(CS(jG) zok&;&sM5+JLL?%}mbdLPgg;ky^sqcYfKAp*LuBVgh zOAZ{rp)C?>ZAyB)tW+-7@>f3GI(41(X0mE!%Ba>Wgwf}QKapGmqd%3j^S9YCHr6L` zw_=WZzGkLrZhe1GLr>$prs-3bvsYPGBsQuyS~ev%H0_`}6FZxBjDCbZqPw9zT3yKTx8x}$b`+c(?klES9i z^$j<+T|e%Lf;5Ulg~-_S^wrZO{=n2yr=T~dMW^}LLrYdB zoB9Tlne29NECY%%qiksKHa43Y8=KKMGn|`|~lo`N5UTqJ>cx`?`?EM&t4UpWC)eU%m18x`~ls7l>T)vTax^k-=U~uPfRr$uL&xoN~OI}?YD249p=)pIUvm{wXQ1NyJ2Gc{rg-N zy+41{^h(Y?@7`lJS=6g(RL~uzQF|xdRPW=fvlB}=dt+O%wV|bS;})$}DPt4k%+aq` zXSmEaaLZ~nYqV>%@huYims_nm8rf+CmVc zVjNWyTWSb1+KFB!ucBsh3XLYO9zm`8R??~)AnzXvqgI(~fV_Ihj=&>tQIq%31oD4B zs1|w1`^ZXuiDXcw$kBtf$|=X;5)Ap>p=@^g4AslfUquFxgS^k{b#Sg@Mj@o@*xK<} z2kkgc-bE~V|A;Pt1NP}NULn6hesYq$f^4|%c3|SOV2g%&2Fph2?4S@~8~P9x&khO5 z^`jpBhsENczUPaf4@FERu%uOF%Qt_w>9tK|Z~&kBdepNPQ)$Ke81p$2oA^+r@v%^1xlQURsXe}|+ap`tR_kZfJw;)?q^-roIG>E}m2E?xKW5Am8` zU>Sb)x`x@MaOtOiE-n9`ukdTpXV=L|z(Ze@a$kK^+WsBvz`D|(OV59RANdN)@tYX$ zD;+&{wDiD}<67$H^sm^m;v0DR+NtgB*RT_>d;RWN#fh_y&fUAX^$G!h%o_fLq$C!k zLNU-%5$iP#dCT<;d1IV6=Hq`n;Ja=$wsY8GjkWt{M?txDsnHtg0DYKusAW;LP94*E zJ${qN<9Dh&RZ+i3Z|${!;ya{MtfA@wJoX@6pc}y4(b!6(hj->Zf|hD%%y}v}Q7Cx@ z7tDDC<0rOQ){@J3?(z_iy~<025KGP3gR^`56q2_24BGT3ro-0SuHSH!83nSV?JEt!#aOBYE4Uaotxcl z(wPjg8Qwec;aq21&Lh4WR!?4-XO%%bdJIX>_nc*%Ux}RxA$392 zx;_P{FPMH|Q#RsYZ%u@`h|guhfR;URBkkW?I(^5E7oNq=+iu(U^qg_`{Cz>koqs2j z?km0f{QiHP_u%OBFOKP1RGRb7{AKtFfwQ&4A22f{SEEKeoxlC|#4TwuPcu(DPq#v| zTDw}eTEAJdMY~0Jqke00YwBUmBie^``Y5W>{bCv_5Xq(eMgLYm^*ctzpEvTUyzxh5J8s;L zg%f}GqEo;RLPQ)61XAVEaa@a z`bUdgsb4%@U+taJAk`Y&Rj%;z0Q1Z`Nywn ztDpMQ#o5W-yWUbs16D#k*-~>;Xyb#MCXLxr`rz?7%f7S164y-v`cDJRwurd}d9d^t zk_^AcuLTqc+V)Aw8FEfbr#pMmmzW0K4QP&*>U?e=*#Zs`@gS`ZGZL8$xm_M7cDR4s z9-G9@U^%il>~@Bs_n^lJma-}&lX)$6lf`1Uc%ycUo^ZhyJs`Els+#G9h~nn7&+52`yF-Rx_IqsGCJb9;T}}U{+$Gk z(}eHmZ<9CJ8;CKV9h;rjw8FB{yvg#s`E~S9vtoK`TH^`@?KDqAv&|Iv&`f{)(O7}( zQ{Y0l7@ZiMAN|7orR9r)%+%P_#442GNPVHfVwKdGo7ix~IVx3C<8}H>PNy#}YeG^) zsh4dsv22q~t8%iVqCRI6t5^0a7Er4$&A#nNOhmx-KM@^&to%Q$)GV@~R{k5V|TtQCG#dBgWc zBJdYMgkbQUJZCJ57ci>C@_?mmKe_~uXiz*7+@p&@dJwluDBDyViHM4E5Lki00zrl3 zQQ6lnV@!cW0K&gp;nPW2<|7t}9nBn5LP8lxR!9#=J8xNoa7A`BZ@V_Y_(Pk5^K#^%vw{%%(XiQ@H4zN8pv>6D2UTxjGXBKdM6)X z7$M}YMV!`KPX2_0N)?=?b6`hJ)alSCj?-I^4EQ6JmkDeVD;IwevEa?Vyo~qeC(1A{ znbygcXEFI>bV0-E&Yf{!r@h8ub<`*aXv2XS zl_X=ChcOf{A*tgN<7U?k{b zk;oPy49AOHU5Zjn+0zmnvU+{)+%?Tt zhIM=1S~O|; zS5FI>!MhgXR1p4G)4ML$WF~3OAdO1qTs_$2)&#;2riS@U!;ks=hsHe^Eb< z*XQ-tMgD93Z`yz8mnb-O)fA30c87yhRmGe6<|aPs4-kjL8|6*WDBoNKO52cc?H%(5 zG6-oFuem{~M6&!Fg-9wDRxwrfW`FPAz)u1s@TP{GZa1MvM zGuOYq?Z$N5Yhp%Zk}8XVSpFmK}s; zS-UYdi(4GFx#KlDSI`XXWb-%An8G?VW>;N=D=vSm3)lP2tq;!|Rfzg+37;?M(5l(= zx9rUl>-ce258aW=1s}LAGgGfj`NLYfLhs7$DSdmQ*P0q{y#9(rF@j^Izg$u6wuJl% zpH&||U;j64ODzcslpO@?`!P^9gO2jSYK*M`r@kmxF*=*dtZRr!qAE`J0HtYM#1rv+ z%m9B}VR&Wg4U~~df-#wW03YUa<~M9sl{;uqkzVu$7T9AF#`sNb!#loHzR!Jhi|;Pq zUf&5H<9kfr5Z>eHwZ9?G&S7(T8=ryIAILpsJ7FWXo3h7o8(xfTas3y9c%2of)YCHr zvUXaGIX9giEN^>6NfFZTlnYnDi`7y_+#-J=IJU-8K|Lu_8GB*y$;YEYlI2~^9q#Pc zCcJRlxOskK(i$2SlCE1cpyGK86e2(2`d1CYnWBZJ+d0v0= z_K#K?SLj!CZq#q=e6aKRPN_ks^EQt+H8+pf8Jfp4&3;?B&?_IHH3t)j4A6UcZ~Bdz zU_#a&wCRin(>Ri5xUD>sY-uqh1n6n{e$|UPxV89TPns&Oyr630ONcXF#phC z0h$-ZK@b4JY<32~ffJ&2{UfDL->etIcKYTKV-ZO7>eo6Iv#a7<^Jr*3te(6lkcs6!-QnPH{%hH&Od-p@O4=OuQKLz2Csn_qU!Zl z!GF8k`k0kWvTn8ZS*g#Ofj(;OXsGXatqvFKCf3cbqjdw6<2B5OSpk2UW(7-@6+^+H zSnlrZW7#uVIw`v~OMKZ(me10xFnO&oGI_11JbA50fUwXI(+a1-ll@GXyN1hwGckCE z#K^9QUYV0+pD>QsVM}?MOF7F{5jla}NLGoGl|`@;kgctw;c}q0GvLr9n%31#&Z?x^ z#z-cZXkJgb>zSUf-pgS6t+*>k@dw9aFlYDxE zO3T*xW7Qq}#2=RCezmVV?TzpXNm?#Z2F736Og25zCKX=(Lz}_W&y*}jPV^Sdpc4#~B5YHmL4pStL z>UFx0FfxJnU_Xw}A_vv*3a1lEqfUb-OO~J8yC@+}u^=j=Cv^i2b*M}%7gY!60k59{on|aO zh$wRKY7#@pA;EU0m@nJVFHyQ{5N^Pq_cO+G|A*m9W2Ols?1K?L0VC{2hk5^9@;g)y z%kNV@FW;wrO@3VcWBHG5$}{wj%%3c0tc*(Seg#I>4x@j119IVd-t4AU8)K0Wvx%if zDYY^d2CD`L;nj+LI*Hx(5&VK${Ti_%g8z;@NQ(W)O~^r`!+RWmiO(Q0dLj75U!E4t zc~f!dbUBl56+n4v@H32SvrQNO<7@$hVV&@Z@6{&t=sgs+;!mQS)J>@@m}fu zwt_G&5%dx>hq)JAp&fjzj^03tl?o|+N@G%qNlJ-SLZFVY2~h@Nf+bYW;8&>=#`7s8 zr7waD<>c)?3H?y2gX`I4j6_0+4y>$0-a4rqwkdy47dqS1)HR6GcE`}*U|DL#SwhUn zbRkC6;oy_7*o@&DVRGlMq>rBa5&16u+04>4r4_UBuf%%>%=ZFlyIOn~ufX85Bwi|0mP!*sS{wr94F zUL}9MO0mMTQL)i;V^}()YI1&Mm`*{$)Wzvkv)me8jjdp1k zZSeHzvzKPh#Ng${wCp9RGVli0jkp6Bg3#Oa+RZ2BO=1Qe6mVx>_0-P3+R3wL9qD8uP@L8G9r1AvwI?hE@KeCnzSexx;?kTBy_VHf&0udYM3Ujmdc3={%4D}CfAaYB zB~OucYpoVPBMk!2gn-YxMLxfWPrOBOlx_eokwz(|gfb*nR+f|j){jY~CW%DKNHCQV ziNNXtn+xnNu)4>G>4ymEq+ThJI^=(t5Qfo7yb>a@%gX$Iw!-hg_g(sbVR&JpoP1=) zoP31g*I}F&zD)PIAJM(%7cx0=XDKxU@5cAdDOG{a`#$`9gsz2q+;zaH85sT_-WX`e zsRcYsJy6p~{dqbt{25>6&)1S4;-8Qo(s$`UsWd?wX@_Q(dY0xYvXpKh*VBJT)Q@PM zB9Bu|Mb~H)CW~3^Q&@9qsv-l!r+6#Wi3U-X@`UCc4S7d{Pie45cysIRp0(?WZv$t< zg|#w0(xNCa%xCh9!ql$Se#T}@8l%<=NDM1&@E|Fc|)!o_Nz>9Bh7*0I-`r8WMy2RFDB9oF>Fq)a6pV z47kWqQ<3rpQ)SkMV68sV3up0Wtq@Al@^FGy_))D8Bh!l0!!I0-MJ@bArRc6CUMlGv zBjt4k%DcH{%A19ashr1Q{boS}3!zGX9{WY!=AI`v4o$$J<@ITIXy$*=dUB|AY7XnF zbBF0#`%p%oYb$;3Chth3HQ?dn(q6!BZ%THd(Riuwbno@gPKr;%v(w{6DQ|7DwiXa$ zZ0Dn~94GWU>|740R0ZPAEVU)xZ~W(G*=iq0MXcwkfNBcOgVEGzelbl1LdW z-viu?{`AGDRT=PaJ1NYWlITxro4PN|cdkq-WMI7DMu?#Nolt*a0!^MG;hRjwKp;80 z=odEa{Dq`E=qgZBGEQ)OFL8ZETUvqiB2wY%%9V@lTAKFgF$SMjQ%_y;wau?;JDK>PrVK7FK^NQ%GdBS1+mh6M3rD+S0wDwY$43$z_6eeOj)SDWmzdjei6kb{9gD zYRLrT$8nw$g+~+67Y=K%I4#+zGPsQrx}Es8`-vV)G2lEoQX;=FS=dnU>%o&=BgFEl zoYy<`N|mZIRaxOuItTE>ya^HiD;N)7w0jsfC18c;Z_j(~F6F*+Vy5}h6iYdQombd=|el&@EgY8^GQ%?`fW zUL47^#VhkW;>D)(0%&Tw5Z#P#(tqBAZRxmBI|Y^c_(`k>kFoHtI26e37qbXJIyW=UL05&yxz1v@a@1a%)j*i zn)_9d4F@u&j5+IOVkqHEyV7nZ!rL2iVV-Tsu_4ZA3UVAE=zvdYRJoOIzkh%@`SAh2 z$L&^Nxm)2fJKZkMZ07s{liwfUjGWo%DcieX$Q0sORuMqd?Q$uV3ONlJ0wjPqzu6RI zjNyNbIQ{oTzp5c;9-ys9xtjw*+C5O|3k=Za!${~sl^!&JTX_xU^$j^4PUDG~;sJWa z;qXo_fPBa4Y&r*(CyB++#^Ybc<7YpL_f(v>o(uEKK@kmBrk7uUC(M7COfLWILQAIA zH_0UWrY2d_1)PG!EE6uzwXuwl9Tstt<%oZ80&GCBpYbk}>)4hq)zBYR)|QxCuTttu zH}$4%xh7RA+?lewbQ zKlCYB>>q=yc7v>@@wmh0fX>h?db_s*-6UGG_WtlQ;a8Z$hNEE_)@l*f>U2n!&}e_= z%iS`I+v>JNmZ#GTqwa`w93cxOZmC&ka+{eD4taz(4s<&4jRUtQoeGhZMyoZ4h{Y^- zXQCdrUivJO@iOug+50jgi|j_>OqdT(3a<%E!j3HZh3+`T$V1zCwNdBxy3=mD)s5W) z_}U{G1^jYG3DpDVFTs#&E3>z^_J@D1!ffoV{ZX4(@~R|s@V0`RH;l|c5au-i;$Pc! zI(;G8B>0U$(WXKD;E4QI2-#CEE;GEB^nlK9+I&)0PVS1?r%Q5z9Q{}CQk+0rSC)1m zNk|@i?BIqQis3t>y2+~#UGJ;AT0QiM<_brYb%xHk9W@iwjB9aN)lrD))6%0iM=TmKP$F|b!qIyTj7%Dy69Bu8=D+M$*{DIU4w2k2_`Smi^YK)p{ zjSb;3sNFc$yqs(#Puf(|*z0YFZ1h%)RYtX20#zIkdOi2`OrON^$DZDshGMh}8 zn9RcKBCOHGV#FFl!JrVFvRHr2F_lWG6y6e%n^=W~t%@31vqg{7EQlR%GVyh;qDfGg zylIVTtLZTlV;Z2zeg%3UI3Tv9gvbkrPf{NKIXEC-C6uxS-B)>GY+Ur()&BkP9z`$p3$Tz6(-@Er+mA zq0OOq#qaIGxZ)>7Kx)IH@x>he7vh)S_2|S;{K1tQtJbLSA$6NSZT0y}-wBpR{l%G` zt1QjXPIAUf?jY7gy634R6VCmXI&*W2`g7l6Hk|KYP!kp-4{D=3aWmcD zl%zt0X830y&pM!a9e#h7f10-+vXk5Gd+bly={DCLk^5ZtC!cXXlYEIeY&`5bnp7@x zUGKUBQHjo^>#)-r-dSJ*=7K%InwuR?48o3edOb+IRx3!n$Q-F$UEQl`cWOl9owr%7 zpF7-62AsQ4+?_yry$95FFc_*!B}fW1hB-m3DYraW9}NXT>Sccd#7)bv%=N63x7x&v z<5Bn6oO5?-cTym<#o@~BO`b`Tq@zHd!)fhvx@XY?dO;tAX!{|fE{KDoIX78zK@jP! zLL2l#y&`B0)+>+WYjFd*%(*P9h9EGL%TNpslvPBqq9TOy2xy2PXoyR+!`Y9{ek9Hm z=sJ5o9tSlMKYf1@1pY5-;xYyC?|MSi``gM1kqd7U3CWO46-Gs42rmtZotNniZbWa0 z6OGCJ4{h1LDG}NkHFBe_yyaHbZfM)^y+8GYww?q1;fxxcp+CFwU1l}?@wAZ45opQ0 zAfZE_OkGnlH7DXZd#TtGaG12c`%2pcK61rwrPYga;dpvSG`IPdo^84ufhF_y!8`LBKW2#s#kqqDjUjTE?CUm-mMmNh) z4WZPd)|k|4jo`a!bR3{J38$h=N~x0T^hUh~Atj+2vxz;9#~?MXJ!DcSZYJVH-GW#+ z@%EM|yj+_S%tX41qK&J8>T!Gv`yz*@N$~!gXm#GJZtr&Baq~hB)pCn+0 zZI=^Dpoo}awx|Q1f+i3ss9~i688wE$kv{~R!1eANeob5(PRb0uQ6 zTKd9y!y~1i?o5Z*pU=`WrH=>hyE?>4CWOv8s&9W zKxQu<_60n~qA*dH9|x73y}{KGXtR%Vbq1!9ncAtQ>E_w)d7dTa6|NQD>)B1No4mK1 zcDe7D-pfAhdeD8y{F?g}k5i_Vv&2w?sG~-%uny2Iyg?1VpqihXSMy^R=hRC$pU`V# zcz=IOkpW*3Hgofgu#e&Gd1e4xkE{W~S~3?r+@3GXsabKHKNS-j6}J;t3kf4}Dw8mm zsWxa8o_-_&FH8ds)4yzc=lY@2@^>Hk`I4h0?AyBdwU;~R?!JG{{`oh2Yq#X;^&j5& zZpnXs=jp3o#n=Ah4t~)GM^1fz*Y9Sp+JS$c9oYU;z^&f{o%RH9paUh*`^S)L_!GXy zP)NsTIyXi(#dk&yd!!nZ)~&&2a;rGfaP= zL`?q*GkO3(c6~acJ&OOXI4*GmaGl>LOpn#Vm|iaWl5&_D1~yn8ST2AQYJ32*Sn=qb zYyVvO<2ys&)l76oS$FVrS8f9CD!uDB8yyXgV9kt8yHEW(FNuV1F8$@9+t1y9WTuE3 zs#MT>a=)0`S;yL_+M$s$F6P zyGwr>rHA02!MKqnv7vv)@bK-ogT6R{5FH29^5A<8;ebvs=I`;mj%`L>osUenKEU=n z=~f>m3hE{bBR1Mtw-MWcbOxo~ZLrzx9)%LbUuiTDg5?TtRH@M0UM4KE1Bri>gyjuJ zox-a~E4C=^Qb-hAZ3Ts(A>w(VI9iie@Zm^KAtr62`K^i*igy&J6raP9Ko?Py{oh;H$oEB+T2+pfQ@BCexum`RsKe z5o~(W8)@~@oFm8zh{QC0%lRL#_1ZZWX#W;M(#=5o7VzxUMq2==9ut2y71 zIF6($7PH%J@~p2lN_>CSS-r7E4Qxe#y?l5F;-Fql+mR7v1zxJnW%*D(TL~&;D{tqC zE|QtcX9b6HYql?YBKuDERQB_%G%Mg)Wvjwx&02lgRuP%5{`W~!Vt66TTSDdBqT-TF zqsTykzR$;zNd?f$> z<}{5U>wl1Si(K~H1SJWm+XES^KXAsAU#uGXTnm1a(GlJ>wDU%HZn1pmGtESBq#WVT z-FAVQt*X(!w8eiDBxmr%D{BRRsSK*GKmYd9#0a2vMQ+7=OA8mLE_B3hp*4$hmBUT` z#3taV*zhOxdC4x&lN0$>#%Zz{u_t0;isow1%1Aj$b7Mq46RUBnUlN`}3p-ksP^XIcSwE z=UXABbeBFp@}r&%@7iQFs5FK`y*IFNW+0U2 zuC>@r?ofYQw{3fslfMslaB;6OWR~nYpU1{St#z&QN<9_H)FHY;xp|=G@dV(Kga20!!tCH7+Hz#)`A51=_eAc!< z`4V|ac364L_F7Uq56#D9iD|uwNQgqGj!`MK(4gs&~ofm+}1ozX*~;Q!9Uozl{CJN;OD={YQ8MP8+b{HT)>bASFJFR8)sB zvG%9E*!wc=L22{@Iv0tvWX=jIrDrYB7Zr!jo-PgwFF_BU?h)cBYsJ43!ug9cFh(*P zGD~IN)5t794=K-U3gg0GZ!HoMfbWK+7-FE06+EN|pG!YL%GZh~~sHo)k;om~F`Us&LhY z8by`WXoYJl2WasUAX3S4U}0jQFl8xz*`KEj{!4u9{}mim@^}W5O<{k?8HJ6>81OM# zI}#%1aUn#8%kqW&GA#kEF1s-0`htuJej^=G@)e68!D=!}HLEl4-Wigq58c1$;nj1w z4areGD!gAcVRW_kp0PKdIq;)@s^s1~T!m}Fw6#pzH?3W)X3_;toWw3S&pb^m3SjzO5EgJ16e(ZCwY z5i5A?T2#j?Ra&Rkhp1M82Jmf1q*QOUI>5!~JB;kQm(P{oXBxVqeM#F#sMs}#4Z@$7 z^>OdabVTEv4VWeZGH+5R(SJjA8{}qhM`O zVw`TdE4(wZGx{VtijFvCktmh}`-$$9K~eFf*vyls-Wi7>*J6A{NUlAPc|>V!uNX+!A2wMS`5 zIZB~1G`5@sg+QR~r{&Z3xU~J;^*+7(+(FyG-O-xRJC1)+imm(2?AozI+7S2`%QN$v z-|zeT&CYLUc4zi6+hkUz4;K1xWby37k*vm)W(9*cgY_XJ*r^K<{ zX0uw6Rv$Hx6&6@+RvRtIG14So6fJ~oM9@VwkMX?PU_57vItf6Gs&dSqpH;*8?Hm_% z5LS7#7+5DuO3XM~28QOjdyFmuuxHQ2C?7}D9JC}JuNqn}8w9Md`Jdf;6fxotN6 zZghY8op+{ZrpRMe(=*fWET2tf#uP;FMyHg?N$v94ll=7D+5Xa{oaTwhIFuZp^Uqu5pKN=L`ewC52n-rl(#Z;EyH96P-xKl65U z)ApHXdIoXlwKHQ5{PJeJbt8Uxrip}&Gv9yNEK^J=-iny~Ip~+~ku~+9XNDuCYR1A` zKIoDaQ&Qf7$ zGFB8BR+d+4wdIwSI+F#uF|sVIxl*TdTC6ZZw`w)zqOS&NLZWCyjLE3cmb-r~ zRh3qY!A&l3ao9TPuly$+xtwKXicgphSg<8WJF~@VkvsFjc|(2Ln=Nv0wkW;XqD(X` z5gWY~bJEmgnVVnE-8-ATqJ`yW|H(D+DFgIwQ`2RyZe6_nxt!N4GXofFMX`&X-#O^M zbCbT{?D4;tKItG21#pD1{NiVK&wPLI)f>M&;9J_Soqk<+OK06{l})i9-P*oqGJePB z+G47;C-2<({gH~9`|tKkei$-c_XNv*vDRIqntrDIGbdv4y+(3P`%M1VtN?R27Oja? z>_oS*Pa>9u<9ZdtmM{z<8LWe03!Dt1Oeyyq{yokh<;_%5^(i#F(#{v;7fydLxz{61 ztG6+E)&1{xs-7W7ilt<&Ehxo`JXjSmY`0^L7V`z0&{owM2S--VoOC$DbQR4A%-W19 zu;Q`VkhNX^W~HUhy3QtGR~gomHHLs|69s*VAn08lXOn9Y#|!7nJUX4=t<(z!CwWD+ zh(FM|ly0iK_lhV%H`walrh7I{6Z*<}FbdEo3!kiL^c9ds*Q(I$mi<(x;Z z7%##X7xYus4507fFdKe&(~RY?*g)e_@Um4B%RQFG> z>%0DM_CGfBz3i==b;MjIn0Vj&?=>96!LRSw^|$vZ>!WnA_n`nzMszlFsh!c73+#-a z4CNLT3M;pkb^7CFH~C*HQ~Axc_T`pq?LGD#{z3bImFD(NsQik; zB`f49%c`EY)hYuy9a)BOG4|OP`&IP8UOacz>V&?Q`J=D+oV~i$IyDs3iZQHhO+n(;8Y1@3;wr$(CZF}0DwsCrYJ11xFlT=d4N>=@-R8p&I zJ8$Pbqz5QW1Xgi#)QWa!rfK)54EBC+Pat2B_X^@WUJ zmN&-@f`=2i^3z5TMto&RpW$5}{OQZh$pzsK_=qL$1vP#5?*S?=I+rvg{vC&A&&Vpz z8f$Oi9Q1DUb%FGy+)Vz>Qq;S*@QRo>HCtgY^XHRInOf7zp@H3s@n+Lu0=6*_)(@&+jgJJo-caqpwe-bekNX*1|#+j zl`8L+0Vb8KmvFw#J=Y%WZ~rFn|5>?YBW$$SD0S(zaXa&GXnvxPX}L?D$u5xhmN`$B z(0`}>TK!Dny!=GmW%L1P9U404-)&dqzH@&+gYK3BeC>od`yA40vZCOal)HevZ)yMF zas{;&C;BAT^b392D)%@DKP4s}YgMR+U8|d8z~_geWr#*Hm(J0c4!Zov{Vp#$!N>Ck z-kBm+e%~n~n0d3T3c(m@wamL2R>ZPuwCFg6BW0uI<}wZ28l#Tz zneoJK^<0pk$Qg>ta{=W~-heKfv<2&MZ^ay#ptuF>U))O=cyCekV%c!~L5*MtUOt~S;Lph7!kWb?d*gyFw zFa;ebZJ`Lo|vG zNbzd_twO-<7EgqG^hNjW8H0GvpOXBQ%q zSc*uezhukD!DV&j@(WXqRg7ifn2#S`&?iGae4YGfldqT#e177J2a+W|Bz^l5S~Yfk z2Nstum4N6gijM4sq$Lj&AM}PPDva>OCB!S!q4Z~X_OFeGFf&(b-}6!o)+G}%L9yor zg1A3>k{h`}wj~|d!=P98fF4~~8_gB@=|s5sm3heG2bD!=Bd`3P z!6pnJw9KHk*ojafl2t$VVnu4&e63S;>+$B={N03(reo>zY2+VUZ_bf?gT^+8_QG+K z{e^gwa9b9$`g!{51kI)yyW^!WIaT)i#+5$v1XKmJodH`1uw#u&_H@+o1Z+lF z?UC>lG`Xtwjo zg&Z<5JwCs!i6+fqoJBFTB`QcKoYXuez5k?Z73zj2?Y66>E#y=JcQ9!$`4ZIV&nIURbQ3 zB~82n0z*m*nJ4RbQWHnYc_iYWqPG&II$mzNtMF*4!Lv3%(mMF&QZAS@9XGsO5j3|e)x|5y)&^q+!F%av%e(;^&|O$D5#Q< zbsb_83eYJy8k!-gbYn0jB&0;qgjh1#t`qBghq;wKhR?cu!Hs~*i5g$FwD46Q^?d~7 zBe(A4DTW$=A}>kK8}ZhN2Dtc%{23mB%;X+6I67uL6Gu^6X_pKQ{MP=DITz{U@H5H@ z$RAB_qtgT&VJCbI1r4u!6TP#fMx^e{V}ZyLfrM+3hii`%fsB%OZZ2CtPx3drtkiF56?T83Vr3%tqQ9FQD=S&b7TU zuQj>>$FIv9kUes5Va3^Y4N>)ps?z}DewvY%^(eWeKuxH#DuKPNw67;zSm#mw)p zz94@98j<*=Bw?W+D2i)}I+3;!HgB|P!hH$^UZ9`;Q8GLyK4`zb*?$ex|2xvRf9aUo z6~nZoH_erFK_Wrwf&PUTK=X~_^{1hmA8T9~r!3#1rGdsh17^azAGCV-65APVzya!n z$X;m!n@q%LjdjYQ2`U^&AiH_3T!W$0GFgNUV3QOs4REQrBnvD9f}wf~uyfD%PA z2+Rwq&J?Q^X#*lg^cSUgD!;V5MxAYtytVycuX}Sl6^4&NizwVGi@^RZps?IL(|5%pD=_8o?7Bm(bEgM|%)VobEyIKUwD;M`X8}lV;xEMke7@YUF(bx>+e| zr4Z8qq2Q%(Na2SP;Q5J*`@0MQFV71T$NWGpk0Bfbm`h zliyk1q@u!wL(Z-eG$ok}K^I=cW@-ZozWXOOwS!Ka={Ek9*M9*ExoiL^Lz!3tM@F;OpA5)uiLfsD~{Jlu?Wlt}vMO{?+!yhKZ_L=Oi8HcE#hjDmUV z($y^3bkPf>!5t>dSE&7)zr9zmp}@2E;1(7n6sxz9;NCDob(&vW*OXa|rg|YQfEGA~ zi@C*i*fXrPQJoW-TDZ+gQY=LPY_Qcy8_&U93EkIkOw#@FY!1QJhy29@cS^yv3|Lh+ z!8rLJ&m=m8Xa;+YodKaUBFbs_~SIp)}c^a^_3w=G6gcz^ua9r6iW6>48=Ac5R^vtASIGX)&%2DZYu_&BYePvlbVR7m`kOj83bc6w8-=e zX${)G8aw=_7zZ|zyM*k*%3mzeB?nno_Gcg3l1WM(X@tmLW`ZQ1)H~{YTp8#ayZshJ zsyFlTbr{cALSZCqT7&iVnqz)Ik%;n1~)u&{g!`eN-j|DDwJ4zerx#q4l17sd+24_>74PyZN(@k__)>D;58G_HcljdT3YO zk8UV0%e3u>x0}Su6-jE}k%YsHTwVHyw)!$MwES2bM!U@!F->x#7%rc4ZycDJ zqJB_v?n|kL&{8zPPr*<@h-zoH0s_zawkD!y6*QUiWLV~j$Z}ckD`z9x< zfWhJlKV%?;3uIrO@-Fe9M0{djo=dFCS~QCsn2nzYKw88|kvM)p>;uhTn3c3GoVmW+ zMg)yI1XsiajdcWm9EXFthEMj#Fe^rig(P|;07);q0Wum;6&}uHh}dp$ z@1@&O91g@BCf4?r!yp8`{k@~~t_8SN*A!`@a6TL~nX0HBxj_+v63|C!r)#vUw z4E*i{SnL0SIRn`~(0Q(K$o4|Fw5SJ%n{=>I)90#zAVBo*OKrE#Z4?|Ow&(W81kqIz zTdrQN76Y434|_PIy^9!oYX8kZbx1943enLIWHz8T54#Fw}(+G7cQBeqUA{WtNR3ebgxMrL7UW@7yxbUWMs;N82mVAH8NS^i^O z|1aO2{b%UEIQakPyR&g{{Kt1s&C!NM0vurdlc7R^jU37+q}e1yLJ=iRCS&>A*IR4Y zYfJkGu|wWGD1jS6M0HrimWmzx$6#!_T&|3V=Dz z^1D;jeS3Cqlcr%w)rlyfAmZc!cgY9ri~E#;w2oDUv+6%Pr_I;77)-;e$_nL+&mQWJ zweRQY6*=zg&RmtYPUfi z^q1)O+C6#?*d6i|w;SH)=RF@|SOBMfy}*|9(`b9f7s4a^=QeEG7sJtlp^Ds-o6#HZ zi}@Swmh$56fbin(ox<3)wTF z8`_)h6589UJ?h(PImIV9KjzzNTk7FgA!WjQZrT@yPuyj!0raO059XJOh3F;j8|=RP zlO!SBC;9N)ZozEG7l>lw2_!$;gBt_9WsX!7-Of^OXl zI_UjKHt~9}xZp4>%&bJI^?I;$Xl(y^hW?k6&YtSf_8%wxCtMr)KTtXhfRl;y|C7?a zjL??X1$}4ICwJWb{Cmz`&+ayDT(@S(oTMPeW`K5sihw$mX`2uy503y*QBnr8>G#BZ zk67t!5eq=7qgSh5UcsocX3x3we9xSo;bwI@p2~6( zn7#MT0i0y5SH9I6#7vpP8pm}!+zofb>R{xCB6-3STN`#<(|9aG0(KByQK8OIX+0Uc zz0Y7gz=#V8h_3+*-PWHGt_3|2arO}Tu(sOm-nR|UZYaq4N4ohjBgytgq7K~%PrZ=u z^~tG*F4flGH)eH+kNF3w)%qPTf3Y!VM9qhR0GG8r-nY%&iD{N)?+ZkilbUor-mjAV zkrzh2@WgID|2AlAJ&}hckT;fOXP=)K|M`^JsKPzD5g%e9jxu?l=3+PSZBxQc-tu(! zo3rRv1(-MTW-+vmUfe?l<^2 zuSoqKZ1|C5fn3&N=u*Oq%AAh*7N>}70Z#=w50qQMHKPt}xcq(v<`|BJx2LX6kctGK zQ2MbueU)>I_K&Dq;?iuOir7Aw)56<@0LZ@tP|XEibDwJwWLzdg6Q}?3LTKkXoUuM} zq6>mg4QvsY7NTcFHKPc`Fbh|2MZD+Dk>tfS^J??G=0#86Psw_~34gcG6D;|qwzno6uW{uGIP%0g!475!v}a&LD=7u?bMm7|&;?5T>C| zM|;w4d6IL8^O2{sO1hXilX?c1SlQt2%Y|&`LA*BNoQ3~HX1jrMQ|tUl-D#FSL_c^x z2%Nz0ftNnGa3o6ScOAeDf_o)+0Auia+dnAEY(7|%QZP?R0qp$mQ|zohnjWYcA3r_O z9tjRs$TYV#n5V?~<9STv*aoF1hzGQ$i<49M2Z|_7%$#t5e9s7+BWJ8_(8+W`@?1pq zsj@SaPYAbl-=E7NmYPxdxrXQ$D&N?kFp*O6Z{e;( z4o6CloR2U(($RDz)p0pv0D-B23F)QXI-_%>q{uMou%d)~;o1D#ynZ2KR1ZH-RrC)) zvg=O)(y`(vuodB&-#OQsH~UG^avc7U@et0$6zvb66TK56;2!ok_tLWlK|s-I z)*<(f(#7G^%FH$Pqb4k(GQthhEtUfa!$T+s)RZBV0_eD;pNdh`=jKfEVvc=I5;t#@ z5a{qy{C)2J6n$=Ibnl+SQ_{=e?G;L59}P!XT+WD(yDC)iY~9MplmbM@^TrWtbHR+X z2iR`(dBBYGi}3>q@bK^A1@i^|gTa>&0AV9SCOVQhK38Dth)msQhO8}9L)n_}dGpHs z%I=Z*k@Jy=jEzgmEM1b=p41+^-Vew0o^Hs}Ym9p7?h4Zx^2z+p)8q}qnXEfRe`I?^ zu-`M?-S-*9J05-Kc7u2?`Vq=gSfjjJomshAPah{xWI?X+G^$v@_1@7Da zGeYKz;UnG_r=EtYc_9k>Vx%Y z_!lo_jRaSyHt-m>aNBP~us}GjKevuKE^l^@m?9Jd&_HQ4)ks>4LFu5$%(=g4$_G~} zxwzF>&H;h%&3H;vAz5wCNCeyzMllbN5FAuK9p-%5EqI?-a87f`=enm_7m-NU)WY^b z%{Kber_br{3$u^6N3LY%U7)l9%bB^cnygl{V z0%3>-_{NwSVe)`%Ou}}%bDB{hh>m{}h1wNTzi6;&>4n4u=-=*h)qt|WJ6*KtZ>eti zUPErpzUVm9OI_Jw4eu7J8nK&pp}p-Zo;vltfyL#}#O2=JpsDtS=u2QQ?MkB76FvqY zQ~`DK1HTy&M;#_BO~RjY#Fa|+hkW4qM2LF>nBRasVaY~89edEOYePLt3So_wYQ>y)-IbC1g1khrXyyb(>Dg)`mFNzske78 z0+~>@eZO9Fp^u)fm26LYIkBdprfy>Oj9M|RD*Ct>Ux^rL0~!K2sBiA-fh#w@YbKQz z{h!47ywzL0Nu;O>p5z(=52AV2K8hr2fGUf#p*9>OMy^wynNWzRz9Bs;(X;vRVQq?9 z{$T`wx;#au!c5j!*;dphou*wi9@3XXIzIGffcu{K`%!uV#KTBya(3yiv#AUGE*?sc z$jwtzApz1pc8hzi+4d-ACP!LnyOH8R?DxK-NeK+U6`Sx1SUYg+!aLnllL@^jfG?YV z7Nw}QPZa(oSvnh3;5Uj-05HW)yZgG(bJlBiB1rsLfZQ@rPMexGi(e8nsE7`20EJ~M z_8uj|Y18IdrMcBy^vGwsk)Oq^J2Oou=%p|Tuo$+mee*E$ z!dRqKDFGpZI4ox28}|m^Sd!zM%$$!Yo>qeU!Z2#HG{TM=s{kGx%E32=*ZXm7{|;Gz!8gP_W&e*aD(9EvMAm0+2AqVMOE2ekoC&$c^>L3=mI{9cc<__Cf=cOx7|Nk8 zz5+2Jy90R4&z+V&(9pl$HQbpXG!^xB?7k&`*7D_eK!PGpQH(vb!@6BE`5x(En&;v3 zcA&LeNzTR$ix%ppP&JfYa)EhMv=_EEnpum5N+9myV4Zf@0J9mB+X6SCu>I8r-(@+` zM&EV(8h8!uBTlgcr1Js@`%R5!gTQA;_O?DmS*Y}{sJOk7uE(7b`DlgS1PWFaz!A!! zZ02VgHh^saXGjto%%5w_Q7H)V3(U&A5CF9~%9(7yHIk)cJrQUe5!Qz_!x-^i8V}nq z!G6ZO4q}N~9;DHpF`~j4A7s+poD&1GsplJaQ=ma!M2|(l{#i?Wi}rqbOFF4d8R*?U z_S({lm^HF49tYQ00V|8sL)1h*W84%$aSrzl`%~^-=*qtKd0plsc9@=_>aK2YK2B1@tjADI+hhzNL@br)LN&iv(%8X7+Im z?>Z!0Y~3z^o$vT?3hV4RZCY?S)VTrgPNMLPySe$Fdho&rUKC&=_$3TaMjU;Lv~eat zj|5A^ZR5<5l^}bR-@Nu|MWe{RdHqrzxi)7Nx?`PZ0XQ?eqr1bT!_B2DPq&h^qvNgn zjMO4Q-mS>26tj4>gtOGGgi!8cku&1j;F*E*;HeVu*hT=2F)l)Pg}koGdChItv7`=u z+Awf7FqIfAkjZa&dNC_<;<9$X{tH=P(1xRvGWHDnWdMK^IS3Hmm*U3W{4G`k-+_Z} z-%$$$C_~&lzre{nw~=92wpM8EG}!!20{`eDA1xmZ-=fD7FGnRKI#fbt9-{_X(<>uK zHpL3iq;oygIsVu~bh&jf)Jw65eyygM!IF|2tFuDQSLdI8ZXAwpCHSh1PpQ1FV%(Y2 zr9`}BoC)u&QvL^X+!3iCL5js#(`_QVhH#Jxj@3QM7o#&Kd;Va0DiHn>Xbf8~NH9X5 zVr7NU%;Z|BDkHTT*IE6%+7q#Bvlz*v%;*UaW4w4gb*UKLAO>FjRvSHa?qXbx3yWmN zi-eCR;5S0yF^+~o)OLv+Ty+2({FPA2?q65ZYA_Ym7+)aCgR@0;#^^4(5B^ACObM5* zA4#Dozhy$4!J)i0=qL3+r>3EXU(Z@n!fzo-S#62<*MG^X?db5-a{1gK$Kf1%BR2_n z)=7)hwY7THGh#q%fktd$%4f(QriP-&b`R_4F@!9tE#utOZ+~We`It(XVom2{v4+^B zM|U-g8Dv08_U%G<+N5Wc$(5bbJCis=ID-!VY&pW8w19P@?LicbP2V+&Vyu@^h!nR} zzLE*`1CNYD*U^HO#h|8buA^U%LPG)2Y0c(NzvAE;!~DBHcR$E!DYPkqCpgP9nr!yq z^WBhy91t00Hh=tOEshoX{M#+K2a!QIL@!WB8TSk)>SGps$N6pP<}6+{_@Qd%C{aKP zQz&M0<5W{LpK^CKb>~mEc6JFC?L)CJIiZOA!w^vv3PFKINfHmOOgYlZg3lj-nPkQn z{Tf-18dXt#f+b_M*rqtn$lnX`eI|_9uXha0uihD`8%-&}NmZW`9#MlrcFMWvWZMDf zz^3<=6(wRBy9tag8=GFx@(IIK`l9Z*;W;EVzm&4C5NETDDv3(D)DTTg!I<3moOncO z!Deq$=6#V}5ce<;*EW9JSlR`^+}c{4EQL!~jGOY`08%0Yc{nK*(V^l($^0zHL%LG@ zzaIGQ`+wV;{V&H(4n*#K9=Ln6U z8+uV)5!Yj#xPon7>+e`N0BHqlS-%B-w%ui-uDRoFx)czdH?*=DC?CN99B#SNyFl2u zI@}-Zrv9a2D$~PVvMmos8s{VrduMNOP`gzum|k-P==7P6~Z{Y!uKT>orF@Z&goxxK5n zDSGvu*sdCUm`@^m7i^aS+}v6XmnY=rQB$|YbK!|+yJ)3LV$;+_BL(up0 z#mH=B4pCR?=%c0@h@%Q+U>DIOjOS2BMyRYa)>oJc90UFWX3iFNA8$h6-(jG7+8CqX z_O!Az3&KP6Oz@Pll?up{I%Z5FMgmd-jK{`T7$(%Z1n7rKeah9$P6{FQ%dJ>GCrt88V0FAY+Y zYRay%lm(9fBQ-tH$^-O?B!>Wd2aezPUU#{iP+W?T|i_-lIQTJey~vJ+UP76X$SQ6XvBX zk}RVvQ5oy$#Obkdb7a76G?Y=L?C+xUdb2O62je-npa-!rW({@R0y)_KGWmXoWeH-X zyYN#1?zDlLzM4ju6hMm>`i3W{l@KbniEGQ$c;t_W&VMk)goR^WMsQF?n21oMb4kU1y zGCw^*v;ntd>Ot;ukRWWjCYGazSt6X7-I;@#sF{^(m06iS-T4p8n{m;#xI&{>bq1CCN zK~S{q3v$a~VhN}CiDX`XUW2@pTiN-wYawVU`0M1d$=ilOauGEBJj-T9SxA&e|CCpL zocy!!Kmjt529?J*4+yaEvO8p1=V`25`iRbX5a}|9NQA6Bt8$!7K1ZH}I8DGmjt2D2 zKz0D(B4C$$O~x{3<&Nh*<%oWDH?3DUDpQ}U0wm>xnKrF? z-YRW+9ydL+8qnZ<%A$5Ixvgc#R1|NpH0dc}xM#{apnpxQR}T=3vp>!IHxT$Iv0t8d z0PLx+`mKQbnMMp3rV|7X%BB-~jhcSHnVks0v4O0Q_DMD&aimtBdNI_XnP2?Ni&}o^ z(7YmJdS%N2IkHFUo|Db&r+O&wT2UpGCA)+Uln2S52rd`I43A3uFByj6)nXCQm=M+V z;|pI9;zlvk9WP+}7hVhaz}f*!Qj$B5etHi<6cD%rVN6>&vK`&}BiWi4ub*bBESaoW z-!Phl1UxJ+W-Gl#%nX(eziRfrExGdTkuxo`TF8n4{)fs_BcO? zs873ofq4lr99Tj;ln$K9;(3e|p%VUdQqUA$UBFK%xePFOdoWL`_J`~Lu3pS0CcaD- zHD9T10{~A5r#e+;d{Go_Q;9wY4+Pt)-lp`dzr1?726>{4L`f;O zwPTRKU zC8^i=U<$zOu~IZtaFi2HpB|5KE)82kzPZWxK-PvmyvbP`z1I7(IHAX4aF?y^Hks9V zt3y+*4^=-sN2>m^EgDAn>6}Y#D9=mA+f6*`g1n&b)0J_`72|dfor6x7w^m6OiG^P2 z{%&xAObcyv7$&_!eAi+bNnxU*7LH?_Ag&z1ObuWW^Q~l1r!iJZF4zOoi`YBvFem%z z){gQV_k&MX2*ttP{j0=Fd4ks`g?BFYa;$4qT7tnb4zmU%?NBz4Wj%mmEv9>&1`3Nn z#~Z^PcG`y^lYS*xS+B;gB;T;yyV8UbKL-;QK$b)MNxs=(5eTY9~Ga?UfBNZvE2 zr(mn;o5u10%nbeBd_w!DwU`$F_%Wwm9bYn2V3E#Pv8vUNbL=+)BSU2cQk_OY zC%zs!n|=pDu&5NW!PlM78^|rBm1X8D>O1{0G28Y6(MND^^QXMJ&`t*#9aOu4x}{&22SQLTrNj} zYSy3Dw>~sKbPJY9709d%VNw7#pvCaF@(m>j2V&SsD6Pa`FBND>szXcSZ@Dv}U!6@G z*cd>xKu@HAFGS3rM43ReKq#I{i3|oUe4v-4z6Ih@bsM1z=A)B2=AE$a-D$1-)QGH=1Zy><`ZGSs6$woBdBYT@eyGeo@S)xAOQ5&b) z_cv=k@i5hIkmoMRv%Y+U+_kQN{0L2yI>oIcn{m`o;X~ph@dZ&i73Cm#+SufXV^M!X zzn)TlS0hC39UWB*F;d`&MG?Ru&v{=V&5r7o9ps7%ZL&eA#lFrn(o?h3=s>eTbT{?@WNI z27PG)Uj(lVgg5DEKq(GZlzN6+L+oRc+TFQsurwt81#<&PeXK%4S5ku=s?NV<&bUdb z9Ie}l4>T5{=;6hPI=Cc2YKWBxukJa-(oc>L^bUm(=ktQ74H*!Z!zaZbNA!Ya_!a<* zWKS8r09rbVAilW3*4CdxeoI6HqpAo>q;tq99F78|9?lcb8+_V^J6fuf#iD@r$H!!6 zXs3>PKPGH`s+2e}<-ga} zy1KMh9Tc^;0(OA2-(Cj+c}lO+QD4zp(=kMZ9h%M8Y*%ckHYO~jyGQ~+KVp1#)P+QV z$GVz{ihNZ0Zrzq8$rMsc1@Vk?-zB0^iZ}?RLr|r2oBl<%5K!JTKAMU#RmLPw3{MO% zR_LtYMF4XHw9I8vNvRO?G)n(ffc_G*V}lTP;s~cdcQ-(0Jb?rEugZ)>h`A9JFk5+k zeLXbd=e3)N2;MGAj+0TpM5e>wYEE`v3|g)ZkE5vqN7Isz^I6;J_6y-eKj_{$KX;Tvh`R@K!SWzr0@=E;$;S+>XYF!?M@n+Hvu3Dt9rL9C;`i*EPmM++tWH(Vg1fr-^r_n2S#bE*8#PtjAcrRRO^{t#g>gb z-~EeNA`dwSv9Yv=_)ycS@yt^axz)=4xUap+hPqdezC4-J)e=l=C4*f}3I5_@psQVt zPZ;2rdg`LIKCM~V89^g=5_uHNNCLKTKm|5m?1ooE$BdZNoH1{nZIe+3a*jq$K&jkq ziyu)XgOX|r#+J&-)hhB9L*gpLtYs^T0M~r z334cwf(wNsyAt~NFJj6gDTQdV1@#AC6g)t+3av^z4bBXD#frvNm2pR9jAnd=)gKN+ zr3jrq^K5I}lG}}6JmtzeF=%fyP2rTG&4X+s68Lp3@od@7V+e~-cHG7nYQ<6v-9}vc zEMLWip-Q}Lya?Npzc3RV^W4nGFnijv7Ha8hr=K2`<f2it zwLA@EoR9XCyJS;jltV$Ev5dczDP`# z!pMA@k6&xCiGQqnmF(oTm=-)xcmj9ORJ5br`futiNwQJ3rrwfO@ML5uQWFs9v8Q4u z=hdRsi<~5r4`75NDjulVCd(%RVU)o-O(|U;+n_Tic3M(Imf84$G*%BIMeqT-Pn5W2 zxA>$EMk3|R^d1PMz%Z<#%Hd_r@Kyv*WO&F2WDLPaOn7K}% zSkOjn1No!6I+Rd0r&h=iSXY=_vG{+X9r8)5#R#crb~XI0fN#q-V6sM4Z`B;S(=U!V zGdUx>d+0wD?iCy&|DoSCm~H{8E}9=;GP`+Qbm?@1vJLpN+s<`?wEA`0!UF>QzOTdY zG9DdMw=^oWQQF%6Vx}_g-W=mn3i4(-JORyt_rQ@4^w?uAHkAo#$4?0_K8Q8?S|M?6i?(SYG_8*yT%W!BvqYL z9>5)U>}e`QaJG{tzMi(>WBTbVpI5Szm}?4-w&tysfPk*ag9^95KPqxp{H`+_mt8w}Z$03EeR1SyoWXWr}v}nU56EcwEaT+Jw?vE=uSH#LNY? zVg~cFUCHip8sGpv+(h8Ky)SENjmD!iW_kZ+ZKv(^1MP*(?L=~IYJb!UjDrG810;v& zvWV?{hj?_K&+0G@9lZKB6v{4s z<#;)AXuD`h{BW|0ralVWNHPZ%soZFgz%2{qJ-V@^LQcSjE_WP%#*tTb=G6sXX7bL` z$kcQWe!3U^bDNtc|FQ2+&||VoWZkv|TZUFf#aN2*^15Rck8X_mfwRRQe*}Rvx0+vc zbsBdAr*Ba~3wv_|R%)WE2FiD9%2K5>x7S_=!W_kufJn%Lhw9Sy>nE>n^QiKqNzHOni{k(iGf8Pl1;EE~##N|G_PFj9{Ur#0 zRdDcxs0Hv?V8BiJqA-au7})YR_xopdhknTS%2 z!xTDs-Pj_$3bDk8slvZn95u#0Q@OB|>QqZ%1_$@YQ6NFDvK1DkL9-!n<;51;rdIpX zN=E@(hY8Lp1-WcrXVmb8Ei6K~ygb{gZ8qNbL$}NDjm{FXW4VswT4pmGm@Wqko+bq$ z9v`W#jOUkWTsA0^orU<3wZ4tqj1b;LU3$Kte>=8?1tkyI5b7ccSz`-{b}HVkz>uva zU8h!pFx@fSI|m`BDF<>xTz>Izq=YcpIFkUVj(D~jx9{C0%$8+&Rs#8fYY&CH#!zjx zBXymnuk+`x&Mkq#kA#@k$iozXP2uxp!DtVwglQ${7$^2H!UMIsQkTPs4b)NVkz?K(ve61Y9D+y7;-j7 z60tAJdThQ=?^&m`OM9S*h0zmxN@y{nL(qP z1qyMf3G`E5-6zk^j>J63N^y3z#4!*H!`;(ZXf?Bs_LNiugXt2{qckYAMzsTI<(1VToVTz-Z8#iT$NGJ~B-lf5<2|W-8ZXUz5J4}TYT+^ZpCnc-cixS62$vbaY zlQ5M*mDj;2RH_qQ^ey3V{$!I-z*OmmuT=#N6Nrb6(B%1G<$^&$!vT$&vz>x-x)P3X z5`k-0Mp!>AlX;@*qIjW^D-9(#sXSDPz-9u z{dutt=+%R}iQIba4%38RY3;*O0$TW5`goj=2?`&OkY8oAs5XRW@Kb=4Z9eFluW<+O z!4>E;Z=t2pgOcLT^%TaOm)fME;R9P{Yd0*45BOf?slGKgKlU1M?AU!f0ug4UxX}_$ z=h2wauzoxy&5Y8F^{&^iy~O@}q8};4gg?B3LY6^<6C@N5g_38@&BYxJ2rH3GoVwZs zYO$|(;5KW%b<2naqy|v1w{{;^OUGKoqzGEk#Z%+2Njbo|3&P9ZTqmv32SEphH92ypk$+ZCQ4pQ3chpKQsX*lG zFJz`0hA<|>y@-xaQ+52MSu6x<9;j5`jHlk5Quy-=apyxExG%0B-6A=Cs_(mvzdsTX=A6bv_CZo{C@dyrQVm%Vi*sfaqy6MPPSTDW# z+n^Flv&&(B`eb%TE8TiD6R%u|PHkS!B%hQSCwg~@-{lq_@qpH1>&H~p_r0Ed8j z%+M?dd@od0T>#*#!r%)#)&!!f??&rI@=$U@_eJsLSr|02jY;h5fYwkbIeAQY7{LxV~ z@-OonCyG^TFDqAyZXB&MY&Qh4YN*rG*&A%#u3v`TtJR}lsj*u<&zZ3IiGS!XZeGvL z1lk^JtIq(I6`D4MldI5@yOcxE9ov~{P;5n zZlPu^PAy(7W&)hM0*v0=tpjaSO$$9E-6M^3T_QS^wsm%nh9~VTT?RcI?Tv3c54sekN-C06)@5m0@l9WOvR^d0WND!k9%4-solCx?m&J#>a$;J^(g}TJ% z$W^dh2kA_Vn4F}g83&Sj0wt^7!hsOq1Oa!V%xS+=j!~aJbCk4w4RP z8C$(7VLf{Qmk|FesvnmFR{~xxTA1A#7b}oam0#@G0>c+db6ZWPJn89ONaJ${xz}!} zl3tM}Y3Sh+W~qfy-k0#u+UUV7C5f*UKFJ%9`?%|bgDUktyZn0gEd?#JX;aW6zgseW zy`XIu-4!aSIER(Q<;?NfY1wqN?P<0HYRD%6jTMY-0#2?HCzr(C->VFEd`R_1@*I0y zRQr>Ehnm=G#~#9}{bB3G)%2(XD1h#)z+D^$K#aRd&XC4l%}lJg^O?8mD|LYyUS|Vx zKtu;#_^!|DHu;Bhqw4#JaB6UGl_Lc!xuUZnJjsG8ZfWv*o*26KgoQrD7;zM&`?Cl)GQkR4_WUV9LN{+{l?kYwzIMA zZ0uxXZESChiEZ1qt&Nk7Z5ta~H^1k-@2#im{xMajPj}DMOwB*%obK-@$9eO-;lj8# z`r;!Ub*B0|uN}KtR!jOGdtr;I0zz3FjeStLoESE6Qsm*K6LW7=E^_%d`Mu??huc2A zx|oEeJX*mL&Mo+_mFrlyc2?$LWmqdSN?ZZU4y_;MfE_{Rzv)mnzG^der45;sYXb&PJ~kNe^7rjw4A7+Wjr_P2=12!026>eB4U zo|qcI+@z2BdUiL&PH$ODLV_P*odhJi6Pg0J##i+fUhIC zALVpMMlIkfKYe@nX(6eyTFDq`;d<&8K3_Qh)3uzliHbdzCw;c4QjPqHoah>qW}X>% zqjuZRJg#^e!)2(OS1@eL8OW=t-WfA%0$mC(mKIYv$S-pW&t{++YeuDk>=CBC# z4H|{{3LaB+f;JjwMo~J9oWqetsIrLY?Vw4Ww*>Z6=OcZZAya3x>WS8La=WyAIQ(ON z7ghrTJ}ALg#=&q4C$2l%JPkWd^Duv{asO>ZmC9l{+*pyWYZ!8LgSymp)t*w}$J6U@ z7;1m}S2~$mJ*@4%7rFRS))X}gbK45wkdfiNL~l863EEX!=u8Um45PruK8=tKW=}|; z%_p15cdl$G`;Y~D$pTrR7mBPXP2ZOd5=F^z@Bfl`vf;*xa+Rm<$I_QC+XVjV%7L1c z%-t}aZ*)qTb?6JViY%{Na+@Dv@JC>NF}87GLH>3i|HIyH-#l>s$NWhCNb(2(a(=b9 z=%=V`Nbb{S{@Z#*HJv5ziMvAkII*|@kEi64PJr5Gv^2YkPB?JO7v^$)gk&gGF|N93|rc3V6zEttQ$| z43jXc#M5k*QT9l zPER6<$Y|uufnp1mk1fh$TUzN9!J@B4tCsqIktYRt^;Ifx+T6FA za@fSKe^t-C9!89qHi2?yYi_M1iO{rzO(PTFMhAUy&R9L3xvnQX z`9Uyq!a``?I6Qa_cm)kZbLYs^>}j$d-9GU#@DHDmVzQF*YziF_Aet5*qUTB+GgXTd zdIeafOwiz;F&i~7mg``G_B_x*&r&O~M>;s({H0NRQgZrRpLj{6I4)`2^w9Da z(Gkz7N8{P~eCo*yrv;fjb;$xLr8R7!R4qOk-xz72lio4MAo9 zZ3R@!J)=(4u6D&{8lqvad)zU}q~bvSFInh0ksc#TqE|+IU5SC zX}fGN31yy^thh1O#Wv_KGP@E98amxje4*vz!WwvDDi>ungxH&mJ7{>QJ+aib)x`Re zCW`!g)|j96@I2Ghq*f;{N~l|AZMZoUTG&Q8{oH{iDWYZ#@}PfkXYhAaN{;6{xpdMq zBp;RRfeC!f5W(Ua9L#~{n3FyrN^5R$)q<%?zhN4axC_%YBq(0LA)z?rJIvyPnEH2& z#yzSBO#&k;*=8G$utkb)n(lD6))_@wE{~#7n<_&n2DWdjmYxg0;9QUyt#i|3a_;vn zVlhgvevl$yC&DaHqF^y}b#h&gGk$CHyk6J&0$<>Zh4 zcKzmATmpKjW*3cy%_0kE`trExh1kpQ4S=?{oc>vx;p6xZYA3=ERVKlH(-W@yA)%?L zlxNjk=4;8ns${fCl^IQU9d>c^Vhs=qe0sX{If5)Vql}Lx3+mbAk6)V0hCGu6pLmPU(4b8|mebtV2 zL)rcGNH}LOQ9rN4zNNrPN1>m|O+_^UlZMZ0#lDQP3%d++x+d|G#5jkbMT(OY<@(7mCsjJI@Dh{utzG0S`7_*bSvR$2hw4g^+%Oj_CTTNdO7L8g61LAf`k zSmR}I$-HB+P8x{XHCkGaR6KdSFaT>!G!a|hhd#h*R~uOD*vH+BW130-@&6OqreL=G zvtFPLg)pRJUz&JxfIeUn(GJ35+CwsZoO;r;;#~ol{qj`o8EPKt-fZ6N-gw~p3_MVp zis2VTz;@@9mi--rWb3fC-^N|b?iTAUU_DN$CcSiZMt26r$%_crPFXQQ$P36=X3`jw zDXgBW**b^TRlDF^-E4)(+Qj1)d=jNdB7hm4h)ql+C%EACH0c`=e~@Cj7i` z7%x3>^r>u$A36jS=k$E6@bG(Aj1cV89|lrYa~{J7B9YVC8sT3HFQ;}ca)j zftwq>berZJx?9QA$_TlvvIG7*`S#H>Cl|}h^|b%`j2B8CZ9hzGh6fq>YY)`VUIc+V z&cQBdARMc+_V!PNx1$;~dV%9{kzIAi(X`)g&A+n^pL=$z?ud?HytvA`F1&3)u3;$0y5c@r|gHF*zmB1Oz5a|^dwzFGyF5u7BDCIuz)%AW2ECeA4H%C zyhklEY!lgeprxoEbv=w)q-b`iUdjOFH&BAZs+z@-kM~LMs z<~c{8V`8Mj9MpAFuouGrc8a1KxCEUTz|e7(a?POHWS7`MtrjyER1D`EaLVDq{G$?{DhmFm6HMkp36-hiGnbO=3Qc zXYp61VScd%W%Q97nY|t5AIeA=l|DW^$v*2j*gc-T3GuVw`Rdc7<)cW(21Y!=UxG~8 zhw^w)YTWygGyv0VwK*GeNx5a{&(ey7yujRHj~5k)U}R*e$_&vFh38lXx)4JpNGJi} z@dkQh4tab~!7V{Wgx@II5EaH0iw}wxqYj>2_%|kB%h7P`vR(|+2#UkT;F~)keANM? zfugCO01_Iy@Lp{+gKF-tT)VjDtl3=}oBmbAMITooe1O4R=25yw0OXY@l*l}2jFH<* z?J4EwEjXO_0TJf3k0$YT&ZakY#b6x~MyUeBd5(=5`f!3({5GQLq%+!zmC7P5qn&3e zeRStc>%mPN9MD?V`Xm#ip&UIJwblZ449B|WE5>l3=HKGB_ZW)-KywoF``iirMtMho z;@iw80A_XoV#v1Z0?FPSGAw)tw0tc{{@ptsr{{|zlA+viHLI3dwPji+Qm#~intNyn z5`K3a_b}+5iud$EDa-V~&1tg^o_g9!LR%4qb_u}B)lkFV!UTu#f!#eZH=;1{%Ve<5iJpo%pDcx`cFRAP|!ugdR2@X)5UfGf}wak(KI6zLj%=UBjc$x3FQj{6-MZO!hWHVvn*WFBPq zN3{Lr@)olHlO!_qyFqS<1hptU!O-nBgPctc-Q7&-#JCC>q~bI||Ei%@NcLpN>4^s( zz^}_$txo?u+qV{n>U29@)Qf2&N3JVVPy|}nD9&O|OFzqR!P}uz^{W7vS`hP!5u`%Y z#h$@jKS|%q{?rYB26^yz&NIK>YZV?t+o!+V9&ZPOce&Z>%`PjK&&t!7`FK=L|3Zh_ zhDXoAvEtO8iruPD=~E{EhSV!F%Zoq*0RF-p60vwAxRh*7*t1$m`q-ghW&oa!B_DO1IkK9F#sTSuE~gZ`Gqaz#aFc z6DiZlzJE}Ktl4Yvh{#rSGaB)eNtfGAnNRBbb1lFADT8bZMAqEbemKzu3wl_#uBOgI zqeC;$-R`qvBeScrxpsXYfTi>MerR_pe9+AFh^ml`G@*%FR@;%rHCHvaIG=CqxW)j;RPo zv0SfMZ$h%5Of5aQJ|9U7Lr)6Giv2u zriNU328`s~AjYZZpuNTCJe6&yOGm_eV;F%8rzFkJ$3*lO6Z%P*=!Y zK0|;v(5}SgHUR8`)l&KRFDS(}YB;k9vpDt8h~{>7W6E};T)>isMoK@*1%k8$#2$NV z&C{^Nl${iLG84w2SFCO#VonUv`%%~3V_C6~OmJ(FFA#zKl&&%lJ2cK?ZCX+=*U3^R zkQcE>In~*2wTw5aw)LL8QCC8zFc^FXoq6b}IAZimN5sU2?N_vC9Jjgxnp%0WO(?57MQKag`{~*~%*UpX= zFhDo#HG$JiMTp^4^QWba}(zV*h4vJ`Kabu zu7T;&3%^EHXHgfkpsaI!*`H3o{~DY-`PgA=qRr)%k4j9=ikV2AtvQ6y;LJ+eajXrg zc3LyV(D#taIHT!k`^UJ18AXq~WUa8bQdBC>*$;dv2PW@l;%~M+-0F9~Odj$QwI9dS zbYFRFMO5}PfM|j9dQvd0 zx4P=OaqCPAH2*(bAx6@Gr4*6TaBFWuxug!uS0zCXVwBi+NP~c>5?0@;EBAMwE*MB5 zw0FNjl0fVHsAax~Sh;GD8pJRSHaHTc8z4kf*~Ub!RPC!sj0GXemf$Wu@@D#2+*wt+ zCgGjJsC253CbR5kP}`kp=l8vPt}eZpKjzbTw4DMYuWnh@q^dAMH2kIsaTv630xt>a zdLRDMI%(yys?+-GYDl>QQVk6^;=6GCWJ?O=x-$`# zqr8BACzB>VwGWwICR3Rb1uLbQ6;OArKC$4u$2)S7Wst&o`wY+;-dfv=XNC<<@bYK@65n3iFRNrLuX!Kdw7l(;N4!nnre4=G5|tuFbx z96f9x(=;FG^b~Re9_Y~T8YuK~G7?e}avF#w<~znZn{QYqMdKO(5OV`H6fwPd_rH$P zf4_B{mUb5l0e2(CK77T&*#r~Zv;&UptWOS!@ifp`%T3B0ZHdI6J*nk@)v<+ro)y9E!Ecy{VFI z8+CE8%DvHIt3zG}JSxrwGZWsgmkU*<3Ot(A97Yc2FdTX#5ZrGdAjKcm&M}l9xx^BP z@#5!DwP0=hTi$aUxenj6kr>kGABEBzORO)n&iJcV++eEJP`Sc2kce}3?_@Wm#?CV) z(^L_wTu@LsuSw5)db~#J3b7hmAbI%B0Sm(v3j-tm#Y2P!AQ)UhlwjUDB@pu;z=(a} z$=>_>7hf#R1)L-T57q`!M_AS+uB~FFfXjuZ zf=6>uVeS(2C%wix)8Kufbh2GeSJ{B=;V$_W-tFw1*LXVQ9h=}6V^Q#La@~RRCMtOJ zA0F#PsCMQvV41b?bT`JvkJ)1;s+)XV*JIE1Uzy<1{J*fd_Vt%Ga7O%tA-BhTlWIsc z72DT%v7_X&x3n%WV)(4Qv7aqjBVkb=N>mM71C1uPYJW`Ws7HRAoi> zjZ|N$It?OLXqc8JmWPfKfa$L;m>+aatOzh`6|=`k+?#`h{-~=)Uf^9sdo&;9vA5ni2jTOj8M3J9h@igT=~r6E zNvG&*cwa}(tBH(}L0*J_g(@ra?~hTl8yT?_+O7Dd0nHSFf$l1%BT?8pz1g6xn~8RM zjkrZ&dr&s-QZRS_8r(4=u5nR7&rB^(vN?ondXGF(~ zNK^@i_l46Gd$D$_Z;RB0xV3tp-!#7ujf(idT*JD?smAIC-N0u1I1&D|k6m~pD+KTz zk?sO~D->;mtTFC*l_vfF@oXrBA~;W!o`KmxZ$Vz=dqeL3{Ddk8cSkHm;&{7KMf73s zCF%ZA{_D)emq-z;6!bTUn&q9eF$r3GkcBJB2bYC}EZew8b>?SPtMFs}M^a;G-k+<+ z>&olOGLpU2w!d%T&S?_{p8X$chfaWINWHv?V4M@NE7v9G^Dri#s-iZN-m?C_i!~hs zEh4%gy|>b)=B(z8xkXI^7g@DJ`(&c7?q;|B*Fokk&lKSls}_fq6ta;VaQFSy(h-3q znD^N%G;Z6ZjM5^z zH#g#9tFebLFif!IM)u5SH{-_Ilk#~w-nw*B&X!H4mPzlRwV%&We4X0Teu2vvZ@uxz zt|!6rdk(jTs;xc8!V6ck{55L`PqKS6?^=AexMt3c6>A=VP3BheWt3TM_(~~n{50m9 zP;2*_bBlAU9V+f5y!Q~z0)`?A*J~56E!gaWL8Bz9;ZcV06mtxo>W3nX<95~}IcMMS ze9Es!dg{dY42D~^_Tm7eoT2{WYt1N$kEj|8zMGutIk$bmci1m`j%fbBq5IcR4i7s= z{?+!QVyNH}b0He$J}nvd>&>@j|2)CtW|)KwkrDo77}7olWE=QOuSu^p3C%jAR-OZf zRCoa+FU*O&g^KHuJk==fj3J{gwLO#=_JJq-c{Akk{3o+AJB!C z0}H-8n{q~v=tSGK(rav$3?6Yr+?Wf(C<(r1{>YTn4;5U6`-N-A8Rn+0yf6P6u%FDwGxNGq|KZY{uWC!-8D9016IbEvbHI&* zAq|d=(1%rKq@Szl292lFUC%x$sp#~%pBHUKk`&f4VljXrwgE!dB-MIIVYcOu@cIU zeUG(dm>@;a`7&Z?Z@U~7D=b+MDvC;&stOSEdd?` zm9AfOI;X2#s`NJG*#VrVG;OOc$MM~k8*GIGRR$E?u63&`@a z%yA(qv2AjoE z!=__9EvU#z+V)P9=wpX84CpWkaEW9`;*{Kn?Tzi-3=jJ^g{A^#U=8=ow7)eLD}aOWyOI4dq}=)Y&?Y#(Yy<`wrL#1 zsK~AoiF4ojG@H`j(0p5YhswYO1kTZTDd4{8(vWV@+%{EGV_Egf2ldv{%A=2<&tL~< z=lk~P^Qun%>$S+?UeNe3Tv`kk3lXESz<`M9AvW@}qy)UGC&e+-v5Wb1`nCI7PtPEg zM)B@#b7yG_m_!!Jx$vfcREiSk=ghwHdxXpG>J0Tu9{*HxYp}y@lM2vO{lfyHyPv3h zqG)v^cG~)@6s^MP_XkS5PDWb+2LLe6U{cgc>CiNX-5UmABd0`U?Z!XTc?o48b+o50 z=v?PH7F#;cjytI5nhLyYPRKV?VfUY>3er0L=H`9Q+72|%=3w=pUD@Qi$&Py})m{^1 z3jd7VifIqBTnZlzLIrNf9MiUpWB4dc3t8xVq?0Q7J`>HQ+e}7R4bfOfA$+OSwoQA* zeS4WCzzmCT%F=t$C1oiJXxfA+_}TqL6+6S{by6`|RotI_w6dh9t`rn4nP%&CHPz9~ znZsSIbAC=m8}SuLyCR@LmtpXF^joT25Li~IHML8r*jC1A=>XJ!eL;S~*Am%7-Z*6VF)4$AQA~0t@Rse(uas@H7$xJbiTvgOE0I&~2 z-xu&cdHhO>otz-NI<|zskiZNn5*1J3x>6rK#dShJru{0{9!(_-ZcUQ@IJ8#mTINQ0 zr{lK(Y)x?_CGJ*5IQ=l7;ikDPQlIAxtK}YlU&|z24%$ei^1WcCr-MQ?RfMx7788cq zabF-99Oz?2$M)|D34)1-TS3{uj0b-SwXcXLlOsa^7@ObBSKGey8ON4ZHjMz<2dUQ; z%tEiQjNcf?*H(VI2jny+!hQbm0wI+0hFO=ntM9ntXv!DVxU5rYLy{tlcIp#pD}51qcP`AhKZvd_iv=E@k)p zo8Lvq-!M5|u=KqgbQ4=GtJAax!vMUX(ps5TZDfi(E%PBA9vvd>uK>`WG09oIfPfYhSDh;W z>TL8i#rG+aTRMLP+v=7f<8nPPnC0Lgp-ZLfHOqdnTcVBoY(zI^6ncXlaf7WzXw)6^ zhk?r%ZAM_~E<0rNR`$~USm~dm^LwvRBpiq<>mS!Znvn(62qs7?NZX?{+ppN_2ne*0fii*LFx;v;di<9ek==d`1MjO7TW4_n_dHm_-rr{X=Qc23)G_M_wUC z1Xipk>nl@h+AB%_BlDYTaE-|_E)(|z;FO-@oKEyRU3>PqA{1`H4BIDd2M-K00pjkzG*Pvb$uyvwOa?eZI3kG2PMV>mZ*1 z-D!zc2Yn=A;&Kc)+!{LsQYNNG4=+a!1y)Dp z!`WdS@^z?t!r4dFWTqs#*KATM{&6VXKVXvm(7*q|j1{41g(?(+84{{b+~!w~h--07 z(5RH`49Z|rOwV((^;<4P4cKiX{88eTEUB{YKDY+O4HDaZ-_eTY{LVel zCEUk1ZV#ySJ@)ZE!aArltP@FcfAUX%r&xx+7*@SpFDMM76>aiYB~pFu-W9fA7Y!dq zxXImh@Oz7pCRF4@9dS)$@>YA*qwqo+X-T^J9@`b}8MwM8x;{S1Dal>nK%w#Nnu9`; zKJxn?%h*x?wGwDbKku%c{UipgJkTSPd+E7`lmaPzAAGXJVa&;vCXKaeaijMZ;k$Vtm00 zk>>abe^=*Q0InlV_NB0tavuh&_ZaOusIsIsX(=5rVMS?SD7=D!v{3(@P}3uxHIAtv zRer3kD@N+**JD=k_kXxz9=uE@+vq1Xwz0#7>H!&rf{-P(yGeR~DBrq<3(*w$Hz7EF z#rs@vQ*>c7Bz;VPM+xQKsVF4f72IUaCcfq-!eYuKe51qJB)>png%hNcU={Ni;U9D| z?_%r(lwX2}X}!C=!iTOfsJG<3d#7!(vu3LfS|s;UVZ*ku3R{OsqS|UwZ0%Jf+?59! z#Bs$XI11#bJ2i2y*2(Ud>OyNC-*mLJhhL^~O!;4o(a>~o^vJ4&AduNqKuI;i-A^Ru z%G(3jBs9tzi+mV#yPl9^3Ya)SLm|s&5lc3J%;xV^R8<(m89^2%78GAGBdTb=J~# z&Mz{hJ8CIcwl8FH+iT9U_FEb69kNDGglF5N|xd)4C^it-zwcCtMsZP!N+!%ncWHk|J8$j*6O?eOtRpyGiSMM$H)?ocWra=!X?X z5_DYy^u|#GHbo^#3gAYk{QEB3>7jP6 zHYlh#D44tZJvt+4DXC(nU5fiwak3+C?;Usx()x@R*RgzlnAwbuZ7A4UK>-8qzQB$G znK_xuwIL{)uYk-XPradMZn*c(B-Gt zQO{S~+0Q+_nR41*WUxlj-OaRDv6K84yCVqKD!046Sy#L>D!ik##%6wr#c{XF6v|Ry*yL^!E>C;!z{9{tLH1QJ8<^(al0S{ zW~`d0r%d3y69ifgQ~qp0Z^6UPSqA~=_VHC$C3WqBuv}pnK6OkRzZ*}C6PO72aQR?1 z_9S9*_!wl>39I-tztb&}hBma^pzNIYIM{jdP3qYhb(y?B)Gs}v{W7m%EGC(RfJw%F zoA+3phZEgQJKWTytcJxM)!5CzzT(8DSCQX_bF3!6l|9YAXrMRb%_6yuY)7{i{RPqPL8~wY?lg5jBJL5ZTl>S?jz`K*1)(hO^z--Sn z&mH47@mW=}Ro|nZABFO?dIo7*z{|C|FK@N|RGC>88mr~yj#}2SF!!oK{82>hR(&pskBpI|G zqK?az?jou?V$-&q{>h5;Zg@Z5dVYFPrOo|oV|C5Gy*uJQ>U5ga_Z>Hz3xo$b>3xB~0bzGk7ou)GUcijX3wT0^G z`%L;DXfN{jiGCsmMrIhm_Y--i<&_nA_toN7$=fldk7HIu?LjKlf3YA|F0NnR{C-j6 zhYjt9)f>}feXki&Q&U}C`wzRcS4MwoTV|JWBW;Pm*5(F&z2BZ>ZKCKuZ z;M}(S`4nH%+(%**4Sq1S2U->fh6 zkqg^PGh~v&9N1eS*dXt}=K~k>;AT3^Eq6Sz5%Qp?U8w_tbAy8Tc4uG{hkL}4e))e} zU+~=&hMSfv43lcm?+4n8>?s;h^uxw>REl%g;?TN4b5d!r^Lmn=B+=H{A-np<7tLUk zf{3mf&i@9vA3wH+bq))FVy{K?(~aq?wpQD_?hqP_h2ZFK<-n>271=NSWP{F%VF;ko z2>T~mv*R)=`+%<2&ng#Urs0?Uqh^~eVwqb~sHFFNE0=d#{tkfm0QdG47{*?+$I%Ph z`t!zTXJBohXMlqnMwvfqPN8$ZgH0%I%EX#Foc8$oLG^|737N|FXAr{5lbMM+ zrffv%iV^rhWE6}&iq4Ycj_n(lW9%C_`}mET`a{I!m7X*W;f&(ikr2qfKH3)XSG zn2YZ=HpUBQK?eX@jFc~D≫G1^HFm)|>c;MSic$4fBJ&8+XgsZV+jA_zLaGDxZXi z3Em0v73|gdqsza}UVR7UNe}5JpIEwYj4e0e7r(x!{+~;k9eCS8y9BmTrd0OFgIo5X znIMdyBe=_gZ_>T%rfgt7w-9Uy*)N8_F;=7Wd_DC=YYKpX<4X_4aw-&U#Yz!V$Vh=|s33y4;DmZV9B&GKA(T8ufCd(3EJ7>)Pj^?I%9`Y05J< zsxww;)XZ$hqF;}nVL-bAbB_OD_<)Kq%cK?Zu>cfI7RbCF-ft{CmUxNz{P;M3bAA>) z-1-ZsF=0HQ3rJ}Fgqd27p7b|+V}JXwnnpPG>5Y-t!4VYG&#f_-06;XDmVGy_20)!R zR=3-zdJ`1-FP>zdv_rAL-_&=b+~9m*1tUH~^@nPQ-yXt!%nN`KLCqxtmf z8Uth}q(psNG5bWanWIb#vIuj1<9_-L;cb{cQ+8S&+m~#!k9zlf$EmRS=?n^p-WY0KnIreS0P*01Rv3C@QayHDhndFq$4t;xN~NPR=shYs2CkEq5feQj7Ad7C zf6y6`+|CHhB367*VoE}G<6r&$-i}x!jI$n+BUTfip+un9%jfj-A1&FFIpgMdq;SSH z%7e*+Nnan;J4&u5%(^HjygP{7z)v7|92pI|(n1I~9`x-J1knw3cQodSr5=L5&y@-2 zM~XKvN7d@hlo8)qyA`bOPsR0JX4s~*Stao(w3vNb*3!6URD}Drr}@nStNxW;eU{@E z(W!M>@7sZyRpqn7GzCZ&bMHnqxE5}JKp&zPk3brI?6q~CJ?^R`M_mqj<}wf|dRzsj zsNutF+czVE?20M-WZZi-*A#QNF{(GLH<3N12UUOa&3?jan*NyK4qq|>fw%<~WHvg??+5r=%<&3E|3ek;wK zIWh+h^;G#c_w*-CBc@yL#W6r~hv}ZUJ{369wD0Z+su?ICLd49-0xN)UVWi$bJ6%Q{ zEB$!pqsi-QeE+1D*G@C6m)+8m25bw+T)q8pCu@2P#J*kz+?{(s+ z7_?@=z2m70Hu)x=78j@F^o7IV*0ttiF_q=MkT~q?T^9y-YWHViJALBT{lk6QxP8rv zk?MX3!b=G#u96s;;Zwl1&df6v^Hn(KA?TW^3DfCtH z!ZxQ%zb)3yFcopjn;M{Q@);3*7KR{1=|%%V93Kc zxPf+L>MaVFed_({P$!IeJ>^fYm_Nj4|Zm#{kq{;sI7H9*#rONm?VkT;cA5A{pde{96Z}oh>8?+AG+Hf zVRw?QB@hG-TJ^3y`g@y{D`c!QCfy{<#P}jTFk&4SdyQAqZ2uV=UDc?@y+qn(5!Nab z{Q0A#yPnBBSigY{`<}w-jDzn=a73<)-u5I?P&QuUB>R{b5|QDa5lTSVV8<8;YkZi3ygmyKKM6=3>o!) zIk{(Lva?`CXcsCfd2%0)T#X8&PhN+a(zoQojWT(lY8C;PWaj#_-U`tDZS{X0t#~tPM z!ARG2$V5C5ViE!44H6g#JpTUY4Oj3{^Tps+4E|=cs(9DpJIrw~xBU~gL)Z*81fs4z1&_IuuigC z;(YQj(op8e$Q|*TrOo4O`zZ0^8S`mz+#=gf4d$>y=D#gB8E(N_L0Ducc<2$N+kmt| zTCJX&%CDf3Yf5y;J(@tBr^t%A^_}R+fDm4fw*D@Va=q#nsdqb@F;jI5n%N4UE?3o{ z2sMVnqnGp`5>2eb?#mIvP2N^O5@z;gl#DnHYi&Bl@T%mA z=zo1kV{Q5K4B4iFye_7@R4w9X$=n^hqZC1@o(Qg-t{rC_j{y(R2Dao3R{)3RjjwQF z%a~rtgg^FXVD*8hRF(y8#r?-7PIzi%)XT#?sF%w23J6Rqt1@-D~{|8M#vcL1< zE7%NX1G*fby^(rC0N$VO7@Jy{0?Jm=8)>j6i!~a8!+O7q4so8W)8lbD!+xWGBV1r-NeQ_%6q(V#@#aRHXlP{sKSbGfOELl#0_xvrN zp7Ykl7r%AxC%3EpEZ(yUbO#`m+(gvgO9$n{*zDE z-~X4t044)Ev(K`(pazmqhJNNd=qIDlxQ1uZo9G?>b+iU?Fu_Z;DO%Q$NK#Y!aC_Fh#!pV3z z9EuXrOUc>rKlugkObKxSRN~(;?=cy>8<5rZO3>JJc zkxrK-d==e=>lCjKqoCJ+=ksGCVOshd5c2!{5)7ek;!{liSUeE$`@Oz6ru}hVucx7& zF!s2IRAdu%@od&)GP7dbtdA!e8hn1gufEQoP|zDVkeHoVme`colh7oTM6x!a2svBg z#>AV61BpX0)=fTD?7je=jmeGp4Gf%=^?F%CSYJ1}SaFC!hLu=<|0MAZaliPT$cpli z=a#9`qhkUvz$T#hUKc+kTm0|nglizOv}-KIaYF_mp+Bw9UQK|BCf+mE8!&a|$ze@wd9kr4?%`?yh)$)Vi_a`KouTKCjZ3sS?&5 z%Z6gHa41|R_(W&2E`;imn5i)vGIibffHDJLTZW7^A;x3~p$wNdkgg_T6;27Z?+8ZcO=;0Nney zccNtB*{u#sYqA?^$*k7OB*D~rmiUlJ_SWK*l!{d(Q?+HeA<@=YbF#H|v9vg1I#a|E zu}&m^X=zgO!`O$l-^9MDJrX-os~;L0TDv&9IJZ&S7|}*^kq9DsiVP-A)}Ybo4Pm0H zU)!ki6`)^g=2~g3aG(neQpd_`RC!fdIjXj@vZgj%UYp}h>IYe~Myu6i4D&_xOe``z z*PR3EStd@$M<rk9vb=U>EeY0E*3PMAYP-n;imzTo zNWekka>Ggk;S51TB{bF>x(r%_T(=wFi&hp@J5`lvDvC(j>^%%xUWcmYQBAMJqFSkc zx~D1?tJsP(7%@8mpZ0C_H?@l0PV?D|JI{<7?re4s3y%K2$p}#KAH>0y16F z$95Hd0IK>)B_mZA?SxrTm^HaH>*uY1F}XIVUIr?oDpeW}@Xuq7UnsEn1cr+7Q_oZW z+1W|U=kbEHs=8VzDb3AyyJ23Ykw{ATNl2mOm0cl0WhMkL&ZmKOGi-*_-m# zk_P`c&q;w=j=2zUPrIUJjJpjXzhM;b0?fTrc5e(jMszX}`ouawzrKAhmTuZ!hJ5y*(=TgJlD= zi|bW+TmNEgaY$M)fwy_2fS+`K7rq%_Y5;K@avZ0u4rr@Lr|Pmgw*2TH9G^dO`s>3) zE9c@Wf4t&@{C;eE>2++JCcnFG-99(I_kkB%YHTvkbJf$Z=jA7{Hvhj@T=&Fd*Q>Sx z@S_>bg(!{figcM3XAF~!i-n7Y)xz!CdqrK*Tr&k;D)9!7eHVEGNJ&wD3?-6J$LNen zWfP-iWwB^DZL&(LGf|_nU=c}H&KQj~qO{i7%7s`RP&y@ekI|+(q$4_aIg)}=TV!%% zW#p#F`pBV(HX>*GZYU}pMVs|t2TMxgMak+Ayy_Bk;!bR@t1F>$zx|-&L;qTzAY{V>BgbDMi$<#$ zsg>*R-hE^v#oPK>yxZ_L+HTy_dzb3CP*YZ&bWe3sb9 z(FpXhl4`Cw$up^@qvk@#HI7y8)t_G3Fcq~$D@=|zHP!O5Hq&)%#dV3=Sg4I*NkSho zSmXLR^|9IhWq#s!kCI|aRXh?`hAm63NZy#dKe;KXNy;Pd-Gu|N_$Az)&;z)w+8h)5 z`g*Cs(Mned{`x?F5$rA6X8qFLSu)K4uDFAW<$l9V8f=*PiPPb96rr6cUdojOw@L>f zy%Xx6I>@Y}+7$rMi8T-W=DH0PC(Su?*#5s^6Rk5QdHMOUvJR>rl3AShibc6vAR7*lgVue zAfv||KtSs0E3TkR0RR1%%u6S-nRsr1yO)*<@4_#s>TtvPol{?^mn@vi68wATx+hd6 z`EJUfnR%-J;jOXrYJwJ-w^>3H)|^kWbns_7iNbMzCcv?snTHa34 zsGP=})tk)*eb`nskWHS6B?CDTqWy9d#nDm0XfzZIC$PgN1w)M}VRX70!D6!M4UL>l zD}nL~TpKwZR5dUpIX*x9|l17s&FhCEk(cB@%HjBB=j%Y ziekin3S}z60geK2=LC_}YGNYG2auqZijb$EAKxXGn9bA3Uibz%3ZEgN@L7rLtLkcE z5ct)#sXx~3*H*82?4?VUQ;YI+;l$TAs>|@*Xj)!+PuukKiCrYwyRIz#V2dC;0 zBB(rnIXewxW(-x~a;3G(Xd9A%cdqgmAlR&7dn`cv!@^mA zI2`bYW7v|++8XWNMxb+RHe@m;LwFslLxIMaHXgF+vEE&iLDrz(=9}c3?OWz!eRB1G z>4RKBs`{p~9lCN&tv$U(I^cT$gP-Gs&hY}c%v`yva2S;r4sT1FEkV2s7Nn~1m(7Vt zL+Pa|N1fE6RFns>0ti;=-&vM;klO>N#y@ucWpAIG?|b^wwXdoKwCtEB#N7MN9e3{A zcjs^SG4t-6IqSSP&e@(XJek)P`4=dEK#i)>v*_kG-n{ANH{SqVWjcH@d|!M3|vIcf@cFxHquA&1$l zK@RM2`0!me%`y$qxJOpQ^{tVAyApyrFLYO;-R8@d5J=;bM;MK6V@lhoJ-7?&iXu!E zShy(2~ywa4A-;(F*H9VpdqYug>5n6w?)#{}6U$=OgTGB=Hq2ytPPf#L%TpircW#DE` zfjc=P+{XFg9?lQ8Hy0kbOTEnouOds@&butO+M4ddms_ANGNq!1uRd5!;WNbmrY7$< z39T^eGi4k!c%#GF!W(&^rEQpBXvMT>tM~G)m=gUU6o{$^WXX1HZhK`$Uhnt;ri#) zhkge3VBZ7rYvUsn0cS?#=AE^<)UGVKCoYVP_|cH zS^!wduYpTCD|4WKZx-+2Wg~gOBw2Y`6aDA(m~1oKHGgngWt$0}bqR0)DhV3!Dy9Bi z?YnxiSG!kF9?);mZqYNHx|KRIUw4N73=ea+=RqyGG_VzKBaAn&I6x3)3GwTNq9@yC z57>!)lx(-Vk$FuCFAO@(>X4 z15$!kYPgG2U6F@DQ2bZ^!~f`L{EvnNh<(Z9)#!D4t)6JT8g~GD^u7S5qCcgIeow#9 z2}p43UpISyq@tx-VCQSRKZCCewKhWRlD(MPO1BN&>JYtX+ ztx!^7xms4_Q{?&bdGc?-im`ChB`Ivtnhn!6ny}e_;gxT*+rwVwdD4w<-Qm?*%tnNF z^VFn$QU~;5fi0k`qrbzd{4%*G-qL zz~fYd%cVLO#{Ec1S;K$$VgBTz?o;|@ps7+#^o_!PCJ(qj0)MYuE46xu5#c1%juwr0 zEcjS|{qGuH6<;3ySMfc^do3Ri|61&+{c`wG@o??W!v&M5b!b`)!vmt-VQ=vazb<@R z?QWZCnmD6jQN!ZKOByb3T-~s`@j+>eWW1qqdw`s*PbVYsDy6xp7OXO>&TbxpYQZdH zE9z`kGh+nHOm1v$4)LKjV>ixiV}cd9q8s0Tu6W~hp%7}+O&t=N}`!wt_MFjaAZaA~9xXM|*vpfGb#m~5?H`Z)j@I_XKMkwlAQB8Cc=9wK>nutf^B?I)bqF0K4MhqKHS#|xy#!;2mY#K3l_UkXcxI%BYs3xfF zjNG|w!}^m?$-j8*N&D74!K8hFqBr^74!J4OFeII8D)ZVzSLCuWXFt3kELq+D$Ng^E zUJErs2DJbnE@>8n3%cg$T!xyH?4i_^UFXNX@?~;!-f6={b(w?nb#1pVI*hTt9#>JK;`~vYzr`{f7Y#{?< zGU&`9M4i-h?Pv`;53Lo8J=aBl_0vi;2bfAXS*5sykXC_dS_S4T)9%r}p*^5Iq}6D< z@n>6IU^Vxfe1M3(eI16ldO`H+5sYHXcj;3AHYb| zq1pmeIWsvV&eJN&<*+shRD=CW)ktZ%L_P_<6Zlyp|oFN&SiSCXTKI?2@vHPwT|+{_h4M|ae< zeAWb2=zc%$!h~bhyN@3^^7y-}Ub+7IKmYmq>t7)+-KE;(JEsiKoL&Z|o(rEeHZ|<% zPK>v2$0$Gk)>mJDTX*YguL0eEju7)V_7)UC?31Sur@mZ*#;m_I;kaw{#_mJ{Qy^iBDt9r)!Q!1GZgr8L>CW?N>U7oKk-CxIsX9%izP?%2UH1>g zLr1j?9opP~60R@$IQ&5YPZr)34hV+?773i72#hf5IJXCf!d#eyN0odZb(O`z8m@-a zjLO#3RA$3m$gdYBOz3*RCZ-nzm^@LeB)n*L5dJ>#P3 ztD{eU;BL`&7i;xV3jchz=M&EXd(d4(vl#vVi-cj2( zw@vdU&nR{VDd-sOB05$iD?k*w6*GF4Ah(8p$n5-$bgg^1gD5+JnuqpKjunqSOjcZU z5zQj)dxL!~A3+vm*`}L`O>8z>v?7lqJNC9C52zH@0mgCP8v~?8P&r8VX`qRCQ5lYI zwuq{+$7Lms6TuenI@H*(oVClc18f1mj=`p2+}r^s?fmWWkRcetG{Gswc!9I&3?^TH z$fn(|C0chXG6k7~c8R8f*`#ICeu`X?UupL)T$C1D~l`VmhB(YP{5ce{o>7e^=n?@b;Jkkm=AC6ITYpWV7Ev@lJKL zw__gg2^F1&_7idCcyHky?{{Nu{_opASvM$P%G~$SEw_9`-|QEC@4S%z5ybtW7aklG zB7N!pzx?I?VwO}7K=n)ZXXHVfw+MO<$T!8tYmwgIQ9P4{$sX2V+eIEhW_-7QVo*iH zGX_1OBN`YHRAKOpzO+3+CwQb?<>;Yp_0QV4|2q+1gtSr~gNXYzGC`FC~FyAX$Ulbb=K4Rx;RRqh4lzJ~C@S z1+6?yOCt|@LovF^ysy!K^&KpK@}DO?rnH8Y5bDM=w;Rn;b67*Y|9$k~swzD@LI3-! zk^#On#&(JIn#46_*CZb*dnmcvye(z02u4TF+>m0Ek(56zCH!R(vt*+Bo#iW`*YQuG z&%u`I`yu(slO;fEp2j`MfK1qeFrK;1U@)59-S{8d)bHMnXM&1MU|j!yDc>9$W+BT^ zIjGDtkss!p$WoNSH)Cx-Ob_>RKhczhVg@9@w}-0jMKGd)fR8s26+hf`up)>7q48IcG`Jp^P!zULWd@$c1vz`WBKaGCXZ5SEfG-s?{M~AGumZxqTS@ z&^aaW#HGJ_RMr~I9PeCzv~%vgpT%chkpE!Uln`B{^DjI2?XrcF%9cEId5249baIs& zPXB1l(7ETHm;dBql1^pT2>f2ZX~`9Dw`WFA-D_QxqD z`M*%B3166Bt=17hgmiu%c?(wnV$>+E=g`~e06K(Nw1dU}Oa6%7w&?;oqI(M8fsAM= z_Mu|judn3m>%gIZ0aqVY?%(&sbfwJV!~X z>DA8|%ofX8b|l&D$PQ#;cAD&F#Bi9LWis+M&d73R(=Nb4O#ZOVX^ zl5XXi)NmQ!uO{$AR#_|3R+{c|0!HFos6Uh&vSV%O!I>+6`W{l@#pIvRJFJ3B%PxtJ zqkz2snjB2dL-$o?@#9+sVvNv~6$Ui-a(!}`0orAt-X{uw2g?0B zvKRio!)rBI^;SZ&Rk^|sTYT1XdPl18gAz$i8}y?OPoRWXvKWg(M$I)YI!R`b3NG%Fow7r=%aW|odObdm z-xKh#+C;o8o{XpBtkz^Unhj>XS!dR0nRu9wDkvzrfgZIn1(mZ|1xIWl1$$&D;^vHk zDhL#mREyq|6ui<`pnmfN54Kers4;5i{i56|`FUr5D^ClD-!HU=y9-AY1sVy-%R}Me zppb1)IIXP_S|lWg1zJ!r63k=#V5^oJp>WWaPm)9QL%va*(6C9)0KF^FN{k%e;-tmD z@ZhJ5s+676m16q|SbDC$6vlTtbhRaq3$cUHqYjsvY9YsbdBuXe#$8q68)NdG5PBMa=pjZqI11q&#o%jZStE+a#BTgQiow}z zbT@N48uPyzCCQTQF!QWfv>X5BNlq@0u|^A!5KTdgs%|;zl$&r^%>?S}0KNlkoW`89 zy?sS<%`xc=pbZ+Ltp=W>v8Rr@4Z0O-1bJ|n0SKdP83!cw$0>`(hc{`juKPxJr)#hPOq z^=<5U{Zw{_UK;}dQ^h}6s>5m>sf~7j7xpPe7)Zk1QN4wRq*kyjtCv_wA7|tGlsHrz zFU}Mfix-R6idRQ>i`%0gnLZM}wumOI(d&ZRxNM6CW1$7X`JszL7nhxzU0%60ygT)t z`7`4|voJ#s1jg|~P?Q38zr*L0IhQ4jq84+^6gT3^EUCzV{7&l9DUDNWwM46bfEhfv zy}X%W44!WMSH%%%mNbcGgT?i!wi%_kR4`SUVpC6(*HAT0OF(Aw(39cjN-MU?Rl9Km zzG6_W43*k_9eq8=l3;tVn#ff2ycXqlEE5c|B4^`mf{oFdEhY=mX4sU1gJQTFKc?7G z+z5Ol7A@1mU|LhI;E*jqub6Ou%#u)0QkPKCqTfOSt^qa@?o>s+N|{BWpT@^!H32(r zA*#Jo#GObO9dmc8sDqbGd~m@vZ$9(z(x>a%S}WJTd)br*mxH$m$>u-h_sH=FmMy=3 z{ernOnuvJrul8@a{U6s{_xRiQUAyT11!0>kIE_+%^B1AFcHFaR?NyI|omvl6d0YN+ z_6}wqs>V+#tuEveT;a4OU8onb%N-JWnHT}88AD=Jm5x>GS#S5#D0 zhtt)fp|~+aqq(!VEyI9+ky}zXC^;*g*qH@`M-szsu{sr{qe~NsY$TD0M#8B`SgfuN zM#2(Ue!L(A5tfi3B3um@1Rf*3Un3akmL!iyYIM7~MkAqHlA?{Nszz8AEAmhFljZ&c z{zKHKUprZYk%rR*HOn;zG>0@=ja-x3rS3;63f+!Q?qEmfKqB0KpiN1o-7l;36>6?2 zjT`?TQcnNdjY|Dp?!?(TJ=dgfQe%!G+^-$}+YsytnV=!EB!7wQcU$a^gQ|Ulr{Pmn z8|U+Yo0BT~zPU;bSE*@QSjSjgg2ir7Gg&5)&BZXQ#i2X$e1C=n0HNh*EXlI-dk5W&M~fTrgLU)v2$VWYVVy{ zV@;JU=n1PkmK@G{SXe*JmlI5pZD}D^Z@P~4$I|r-OVVnhTqquQ5B0=tRe`E(RcjSn zB@bD3@i7}!byxQ1#FbLwO6hQ_(r|3M(s9n`oyc4GW(zNWpeA9MQZ>Z`w4^(Gro_n7^SX2MMw)}9WOPnmr4V@&6FcQ zEV05di3~h9oo?vpY(Nd2*fEID4wA_6W4`2mTdUvFEm904o_EQQ-Alf#usJzSy8H24 zo}asaqr>l(?z(K+Eg6nC@vdnX-*x}1^T@{9?el*7#jHwB;9RzIpIkovrc>43 z2Ww`Yep6GeWN>n2%~SXMX3FiLQ@=;8V$g_uD1_cp0MAj7_(K|B!0Q089^B#cJ>#(1 zg>Eny1grHKdoUC_i!c%)3<(8-0Qe^vhSh|B{1!j7w;(IXNzk)>UTVxbkPXHhcBY$L zrP#2>dX~=@KsG-HgVw)`{0g+EnTiSYC@hCr)@}wZ`|acOqRt6@)Yacqveh_XbUs%5$W+$TeLfIH`%Bdv+$X+fF@l5%p(FIkh9p; zpIQt5Xdo|%vUh4*sk^3VgIa+iF3~!F#wE!;k6G(5@pAa+PmCcf^CkxwjsIzud0EU) z&QBJhVFsN|1e@w>whMH&D)fvpY=j=)YrT&r7VG`SyDdz@5Q|(H*<@wQ^?DRxCWG=U zxNVNuc^Q*qy)9$&XZ^&_vKc>~ITTD|5UL zw(6+r?PAne$DlTOvVV(j{+$8OEJn8ihMuir=ru}skM=F|4`${#%p8n=u`_uUO95Ml znE*>EhEhx|VJVpZ8x=F!nbl$~AnD{wVL?NKk+iSpzd+JsNlCcG|JbvSo~L3dV?6rz z5|-w*Dwg6d+|`ezUl%?jpMgx_Q2tJ!8M`l6Kj$;rp%@?oCqepq3*%~#c*e0dx*5@ojx^x8s|f zr%9Hgb9{v@;CDEDey2X|HyDUtPoi-f-NYKS5u3XriJjZo7BJwu3EgaLyiuQu01*b#*|{TZ+gS*#S<2tcf}7ghEra>=8vb}F|oOQ za%L<*Vj<{-3qdcmAQ>N33NPE9mx*xDanSV-?jOQo$6;B2`=aAR?nB`{$NR3oaeotZ zZq6;(9S#@!qVP}KPa<=#;WqOI@`&aU!v^!8wSU&@uOe$T*XviBVNvb3lDjqfdTqVF z#?WLQ%GC%pj-f7niloh1E+)hrSyv;`J!RX&Z4tJJTkKtqJ+57{{&CwA+=IgJ#Ru#g z9GhH^%KB-4;>nH<*ZtgW;yTAYt~+J@NO7cnq+^`xBzcBy26u{}Pr8QM>co2c5Z6T8 zIBuk%H))M}kJh74+7e>I4!WO=S-ohput?{Ou?9Y7WUMiSI3R^ev>s{Dg;Go>Z*{j_ zQc4k~ZU<_Ks>+R1r3v-bL0`aEX~xZVhtbOyQ&pjV=DG_%Zxvjv4jN9dN}g7S%i(Kv z(ZZnaH3ZCbt=NXAug`z>$ZL31{^d`;%D<0C zQk!Ew(E384^=f?2P82SDvDF!%p0Y2L96axiFg8RC)pA6xUKCkWt(_s9?wIYH5n}bB zGs3rq9}Kg95B(eg3Nl3OAvwbKhw5{sP`x{UNc$FFI^^>OLq2yXOl{Z=TRCdNlIKb$ ztS?=S`h)nn5}T04U1S4t&^dy`AqqZO;HmYxL8(ckRpZqM#%maJVIDEEp*kW~#naJv zIu(qk+#x{_<8GO{*dy`D)wsHw?AZ=KHqL{Qy+^Ty;z*bz+(>0v&Cs(4TRex0q2%6w zl5?F(>0VCF2xw~Rk0lQ>Bah$c_>24i{qce2e?POB)7)9wDIB9G7$6t#>Q5Y_tmqdS z;PD3PFD%wbgsdBI>&tN! zi9pa+z?GS5l%pISQe3Q?_2~R4AbNyzs`$d%Bdfkx?@?BFG;TY|+*ziAG(pn8}#Ui@ok_Irj6MT=CN}W3^v2 zP|46lv)&Q)CEKEaJ*`p2V1vSBYo$a~+8guVCw0)s5@r4;hV*I%$pTdjfFOu}sS==; zGXJh(kT35!7X8FuKK}9O>hY6@o|gXyHg`NQ{?RM*@8Sdb^N!E^cy;y3SH>FL;*?V_ zYMFl@rP1jC_bk9YhXutwJFrZiHw7bUf}W4|L-tN|T%5xG55iyK^WW^CM((6O%q1 z2Z(>?EqIA{7!yYZJlU|`@TTE_;gCUN$i?FosGKV&<=wbNal~SvlKBm%h*{w~;SeRR zx^c_;^J{3vQz?;|qx+TN4eAU4y03J`LZ2G5qS334eN6+6!BMSrdf$nE(JmTpg>@-u zKm0FNhVKv99Gg=b!BfdK>Y)a62SumPRgXJ(2&-OUs$Y{_KA`US%5OWiKKcE0X+$%iT){aClb*2cydwuqdr&A0o4$+y5XBTtwJT;?^pxAYm_!9 z%RwzZOKrN`K@IzM-W?AF;`m^(hG*#oyZKvY9&)0;DMl+z)WdqKkvv`a30Vq1BO_vI z8iX#(=yWU-Hab+tpA!clUwFQw=%aEYSY{VUG zqs`cATxMj9ZrRbX%#6*l>-?327;P!@p=aO>ryVSd*Us`{EtS#w zgDqBPYyW1E;{$akM(xxnQySZGKL+T)upWryG4J(VM;g?$wLV17>HDd;{cn6<^Lcbx zUm8!IJBK!21h~C_PxlzJU!Yp_iV{=IlQkTL$|OEizQ zwgOdQ5OwShgu)d>uj$5$;-;Cc(Xud#btFSRgoL16QSQBZkJ z{MChcwMtT!zR}00`m9)dk3;Ve1SjKMGIB-#*-k3~w$p*bh0qeE0a#m(vbK=NpF_y! z0oL|$iIe4jC?_LvlZP@Vn*kf#5#TwZAcr5kc+df1bhCBI$^0*(;)9Ze`4Io_ct>l?BR)2w&qViA!!dIFdx_}=q_8lOmXN5Hh5((d68ff)_OeH z;bBd@DgdoX!D{8r|x{8JL;$X zaHz%?3i*A$sE1$y`@J5?>-As{64UWm%pZ?NLDXKd!z0B3W?pClPcj*eSnu=tF%YEU zK`5ida<cSwzy2ZQ9LBFHW7<*`5=v{lX7;hD02QdJr_DCdO5 zjj&`%-)(mn55Q5~Xew5JLYAnT+;N?n)y6uHHXkpck9@&AKPW?!bmWgRn}9QT&}1c% zG^aSCaau*A;LvI{oYNuNTSUzSgF#$xjZ$lW225M;pLbymShjMBANC!l8H>f7j*@Sk zM&*G#YXxDz7Y@3)63QckMvVfkGlO5Go>7V z5tT~F&A0>z7yHCNS5fF_E(W*(3~+h=C|Oa0LDE1Bpnl74mcqdxXq^sDqXifkjQ|RO zf(-=#3U1$qU3fx26zHCg!#(Og<|eAc4T6D0$iP`QLavq!xS$0GS@ADn@cp^@LjLiv zSq2!qjK^$v5RdsYz`$h+=XU@M&}T${$NUdGZ8@%0u9Cc5MDhOU{yC~?lUIo=B_`kr zL{Ew`spuTb8RF9DtIq!w4towo^_f(dL1jkCs+U4SCY7)mHEax(mq%k!3DloxBpQoE zixlW_d%W(bC`h6xfa)48p7mEAi$=T}ROS{1-k`DSqew86vnbZhFp9wIgqeDOJ<>%d zc!I*ybdy;(zDu#`70(1AsDrueKg#HV9nFeqQrWUHQYKftNZpgs5)!F6)Tf?r<#uts z9lh#FSBT~o_PSboT89iAGDqL+s*;;UBhhhsgW&UuGsn?n*>FyOt)j)sr&c?h zxp6z37H2Wd&Z9JI*5eWDmE`*J;QA<@IUda%qs**to!QV*UpuCDe63)d$s12EsJ4Nr$V4j=xeKO{%T z;q{H$Jbd_Q|8P(7uN`HxTpyjG9%4qr5AagQ1`nu&HsC&_Iweha5&K*9Vm}i-)~Kti zfmPQrgIXoV8)0ggpzu4&ARZ18C(p~FXM)7V2{I0DqNCe|d+1t!|2|Y2d|I95#-XjM zPW``6i_egr{LiYoo$dQw9W8EiZMwL$%COc-kXJ;mt|D3X=Q7Vs%OK!3r`2-qD7HXaSu&1Mm)B80-gh&Lmt)x;(14ZC5iLpabXv3K|JWqypitE zc~;?QN-~cTKMCxQ0?+a=cWZX!l7YQN^mG84nptf2mCg=T50l7tsLDDZ3_bj=6s7;g z`JtWvIWGTyh}zS;b%2rdT}%;VPLSpUXEdF7HWR}{80ONx4?0!6%fCR&Vfb9te!~yr zyN0R5FH*dJTfgqhz^8as{ZzaYDwGZjGX}0TL(0!oW@7B5XytBBUSPDo)n&pxtrz^~#xSyCa z7WWeaip?@uEJj0^EAA&Yov@WSlFJsi5;tJ#aA%W$Wo10iH6T{U8TE#syx)agbQ7^j z-9)^n@{LMTNe>Dca^gWD#ht|Jp_;0m#{YLmP5j^OCFa~7jZPc$Xh5fO>%2wdqqvV! z7|0sX77lL@ngdcX-@LteybfPFrs5YW-3j{^ezA%8l*#L6&Rad}bh;lt{~cZP)2}*z z*0Ah}M|nj#7!kyO9^H zAq; zIXkh}sN2kaLaMT;{FmeMBxn z6&H+gfhWEgYY2z@7%xLNB4R_65Z$Wmu9n??y`FAVTV_~cxY3|7$W?fNz<`u61-GAOqK6X29AI1izxKX8zKP>ncxHEHJuF!(Sz0}8Nvns~l4aSJZDE6Lw6aY| za0n)lfCB~_Y{0~^9b1OLy$R%N^JpkFw+RUZTIeG;Bx!;%p)t?|`n65c_Un)IYiN6W z+lKU#ggz)V&CTrt+uxbll^;CP_TTS+SIaYV=FFMLo}HbYGjrzbSpAX9Yu>nzc?}*} zlYuVT)bIG;w|;Rg#i$Y(-aS6X&VlDPj`kcoYdsraw4)Qhe8rm(0{MYTFVV}e0T2v? zN-S2MHEW7j$jJ~6jWW(-NYt&6%>c=MB)U=I+a<=gIZY@x*Y>u%v?S#Bi*F-;H}7WL zuJXSe$M;Xl<#Z8?`taICuF_IBKjw5_bV1Mxp*r&-b6UE$bT1}5NEStPRGrkrM4N0L z0Z*z3dnz+Ce{EJ4S-N6om0KP4ai78Db}dTGudm1#g#60XeM_BglU^)Oh4F_{AU1b= z@9bMNtlkJcw|w4OyrHUzV+C7(uE26lRd~ay`<+&+(ZFgJRE_URE(BgZ0rJai%B!<- zZczYl4SX-~n*jTK0OuDM#44Rcr!fZrPXIh0@f>6=20}YgdxVhcoB9Fpk_;T#R->#n zYrG4Eg-Fx_cg@(Wa5uU_CVZAX3U^hOx+j@zcKd+2-(bFuD)34CeRUCkOyR2%T+3Vt zFJ`tz34>cRnRAnNeSPvar06Vg z4vhvCz@@?5P^;sLv{6)l@_gt-C`%$rr@>fJJw!A=b8!hr6vcHBK<0oK~!nd?5WhzRm;B8cIsgNH!2%uOOLO7;L*EgyPX!Jqp;#EF1IDV z&~^8hzr3zypu*3*K9KJC=EkSTKKICr?~QC~ezG(f0Exztor^0zDEjI5AAfo0XO7Bp z6b9Z8CVs_!K=u8JZK_A)M(eYI@1ftL-y1nM=dnj)%c7lsj3zsWbLQpPoR2x5z)$O* z&VIb`Ky-iXIsBEvW6UYT3FC?A4-DUn=5E2y_?fsZHahXUk^CTxUB4J93znRi_yw|0 z{OM(jE*uUKTv0ecRPG8$R|xotvb!}JmUY3pNF>Wsm#ZnQ%Q6K=@qfsCBqH!q9s91k zE-5S$7-1BDUzD>e#5(@n;yS&n{Hh}ZifvJ9<+k+wjQz)p^bVKB;(0!cozr=(qKxuw zZW)(o;Wn0O;NJQy9vSD^!HenO9>%%SX$Jx5p~q`Z0iag8-$hq{qZ1d7daX%6*(!D9 z&`>TDOi7IsVj3qvm_XP`aW-Sp?gVl>!PyDUPH;1Sc2ip>b=b)Gni&gdKdG8_c5TKf z=-jTm&mBB??(U5%i{_kt@~OAyL`+{AOn>RXrp*T&U)#R@YcFow_9C;R;@P&{Kl|D4 z)z4NYW-ngz*qJkrt!bX~>+XH~H?Dd7@o{bMSHIfRf9Md*9}d85G7a;GO7sVLRhtHz z^~NZFIVwb!Is*YuUPa7Y=7YIgw6f9@V|1EX0ub1_>?_GF4fp&-H%ACORU}hGwwL_^S%Mn7f96KbjJdqYaQ$r>kP69e+G}tRVyFs#={WLFd|SRv^v{jL z41Mm3#Jc!koYh9>#23Wxaxagk#dPs~iJggOik^?3kA*8Os-n-xR;=e?MySo`l(;9+|IX-D7ZOLAx&C*tTukwlfn>Y)ot?Z){I& z+s+$fV%xTDocZ?N2UVwPRaaM6SN~c+RzIuzzB=}`{$->!np+LeQ)5YfY6bjqoY4$4 zmt{&-cVc5bU}PlCOrtdYZYYvCj)pKgl2)pJS7Oom8O=+RiJ}{xT1zt`jg}(icwTS& zD*meQMS~=+4Z;nL1hoaHi{t=m9JXnb;0e%$d(PU`TZ9Lerc>u}fBKwzTK$By6X2zl zFoU3b?<Crmo3g8y^#wQ${;MhmgfV5cgUrL>HoeYoq`o*-2Po& zf5~aTq=ShaMYJ!k%QJQYe?l_Td){gKT&6d885MuOUh7t+s_*_}eu({k_7;@J76!DM zeY{5-`Sd9m-Nd|K^Tnri0)jW)K{t*q79x3fExyG` zh72MzN&)KkX5udO|L)|a8nU`2s{*i(8}~DK_qN~BPoha{90f6%jsE?x`m!HD64PZwI$(ql{WO=<8bv2e4y%%|y=e*p&{P|N~tH5;< zTYmt9rEJqvzDv*Yq*6#cX1RX$O#SajuGWW}&9qHx-M*$@zku+Q_}vGa#W3K?R7mkx zce1bgyYPdJ(fkqpqnECTp-1Mw1i2PSo}4(ipS=3iJzi}mAt&dd*QVctdAM|54F9UC z27Li1@{n5JXloiQD1_07xS=-uV&afM{ud>`%>20P#s{r;r)K!UkS`rE#n~`tj>987 z$5?=pXhRtl-?TvP@~OO@aW_D?mZX-Zmcx=M@~q`%8>Z{$*cQc>N}a6FFP|!#)|Y4x zg$2y>J4j6o(l`)smn4K4Gh-xtgyW>BkeqM|3^~5qVSHw0Y?tUfc&xM-A(L{}-@2x{ zwildMF@-OxP81sc44omYI&NA@I$I4{jk+zS0VBFNPsTt=hxD=q4F zB97`jf}kI{{kj0p#?LcaLHk58sc#(BXEr0GL<4 zX|F+6MGL>(*#gD?{54X-c3W?tm>oG0j}|Oo@prk<2F8d@i;c^BZFYHfy>{hDhlCN9 za+ca+L-^uvoBwWXIdrnXnSk#U$1;UJHoYUzPo3UJlqP6Q(-H%0IHEiMiFaz+!R&V$ zE{qkAy=JqA6Lwxvcra?dnG`reU-;!eY})t^54(hqChkiL74q`K`NZXM<*vc~ooGo%=%X_S59qeOZ5 z)iLM<6dS#!`YuSLPj8_3lh9YYYaDDiwG79u5v+4~$Ib$5uajqzYdaXzO0Kyq27wSy zX40aoa*=J|y@0PpvWG_wK@Oe{W)5-P{WF2((az^ke}MuZ$s|b)45|veP)ZAtcgbk~ zFq29_yP?`(D?q)h6?5ep6k8;S9d*k^%xy8s9Q-3L5yc^%!H%bNPgf*0Bhab#S%S(c zw&is#-9sJ9Fben7RkY8y?S5(+lA>kRMxhX7(E}fjrA7g%mxVf zzJ~W&==&~Md09sZ%Peu!t~E|fR*y_}!3}>M%=dghmVPfvZ#ylTE_}FM0|Z~ry}Jvm zGEsu#6!l-JxVam}oG5!!^j}He$A5b-G2RqihEM~lb57%RvRRKA-09R3%E~f0w|mH% zx3;s_F20u+Ozup|yY9Ldb{9q$p6Q(?Ej9jjMw%sO@uFnAs+!R`T70aJ+K-m10y{nG?z95fGVs;neSeWZl$t%%4&d1LJv-ETX#^7-4us^x&R&PTJJ?Q-TYzmLdY2E@{j zDzC6UFpxWX7x9_2MQC9CaVPK(pdW2JT3Jxn1mk!p*9k@;i~kHx9S!jo6$YUG zUOk3dr<}6_8MJK0lc>5pZ{htiWqs^n3(*+&TUS=hYL zQ3W=>CVVwzRONb%pqR3(_anBvn>s)kAE!C?O`2XBf2*nc6wr7#8Jb(Lt*$SpZ}UR@ z0Q~_iB!ZPxYvPfHhyO%36k3jITx%Sh7O*OaoV^xLuSMBIA$R3fE?SXkiraBV+la*Pw-Fo zW-0Lr6nW8JB6{89fD9R+D68m%mu?Joy+rcerCg6IX?L<@X1tRM_Z^0$)Qa^=4`+wIURB)fPprcopO^jxFw}Uq*tFammYN0|whX&jI!B$OKtX)_K=jn8GOrb*HC%x&s@Tw&5mh5a98VetS$*avRra zx1|w4j1Tx%D;05l*VvWP?XglB)-+9tiBY_=>*CU{?d282Qot8Vy8t{_ztGQb!F1Bm zN;^hn)kBIa5yNIkkxhysWqAb*jE+4sH%*%01IPlw0-BVK zQ6AQ~P8lQq6v?P1Mi%6VV3^G-s#?@yq2rTwX=_x*uxK-mdoQW(W@Nxvax9bZBf{fregQq2i6nZ&Wjf zUpX;jPgSL^RS0+iPq%-VnuMFKu3^L8--~EhKP;ReHu$|zIA>$L9F>)HAWUV!6Q0vQ z9Ek{P#cv#4#nLj@s(-$)iiBdCGK5!G*y3b|GnuYVIOOy%k(CnUmd_gJ5GUHm$)6K} z8#50WnZc5y2dU4N16LS|`^+K3PdeFB@H8tJTl%}N@Y~cnplb=j_EDfAUB=-i_KKd*LatXa2 z48Uyg|7&^Ua!t?elDnP%Fmrr z?rh=hR{^AgNa^JfhhMKspEeZ3Q;>>MH-yrl0(SJw!(SPnLFe+rC#<`Xn1QKj(}k&_ zF6e5Ao}_cigkt=;v#^;9JbtNVxbN9atWocV7jcq)!k(&ZuKOkzb~N*Wc8QeoZc||} z$reFnAEccFE~`*&>M&sso%s_pHin2yl@-nePwxeb`5PRL|Qrn5}r~9B&Xc( zaauOh-+qN>e~b(EpCD`pbhSExh(0aq_At8?g3T2Rew3>3i>}rsE~AV2nX-NW;N#Fh z28NdZ2YmA%2uclQ1qbCi>mO;1DY>xlA+cer#~~IXQ2b1t7c-=x7A>&i|FA92T|y(> z833VaXgWJW<-Us>PT7SKRe#83NUT-OnjgD+qc3jjM9W6^MzcUC()OfnU9EeSdo}Vm zynC*1+)dH`b~<*O_)}1<$%L%kg3yJ>-$%KZj(+^uZ;UOs4{e_7aC3N1v7`vNpTp!e z()|YLN^rH-`mLY3ZT`$WUxOd&FMkFKegV3I`uI(rloCu05~JS5Z~{2!!&b&2_+a`O z*0I-!jKeL*gT=hdb@6{3uB9G~SONb|pq;uUeKB(si8houI}9? zsl0N5++EtyZ7VUvkF(!Z^U!Wb&L8MFX86!o++EW8Am!|HOvp^3nxwyE5gg2@!~D@ZvR7Uiv8mve(Y!V&Qv-DIV*_<{K%A;CZUc{{r`{Z8`A@erlwU z^v#~FCUfAa7yLj(%!j}e^TQJ}q5vdS2NtT3ucNPvfS899O!y;w&|{=O>21g9P`h&% zVnyUyg$^vXt&u6ok z-wjXg|K3K`A6^;q8x|1!)amc|0j@dBC?V7&7Tclm;sbMPGkr(jX5o5->D9&beQX&r zRo`#yShM3vsGq-h=BF zv3yZ&MXYCkHWA>@NIsy`bOir4vvNfEgp+Ih7Zr}yi7yQLK%56|$;%g&k`J~3=7b%m z)bCw^v|M0iiMe_)GAwLNWIFBKGq#q`IQR9_U9M;8NBpF@bhJJGHW%jM!U4e^Dxj3o zwB2~qWV{7)0n>R?*cR|HjRIS?|@Ur{^HUlzQv|27?0HaOJ}^z=$Y5la}m&{yQQ&P;X?7Hycl`b z*x18){K%VXJ!b87es+$eGQ}j-+RqU6!Ri26ED;y&tJ#R)hyswdM7qZ#GZ3K$;FnL& z@srKq$U7g#tD<6<&+45x(@lU*LSioU`r>KsG9<lQ3Kw!@wO!2S9Icm7idUBd|d zo@1V86&h`WSska)MzIEtU8eH3f+fm00}S)X|Hut9kGvt_k;BV15h z*=su7dBBl4CV*=e}L?x=q4NaCWp*nZ@nzmz@7Hmm!4 z#V>>5z>!_uFrkRf0_hM07B*}D4Q}rLr`whHpDzA?y4Pw(JNaMg|C#k2)DJbMv=0)} zD7zlLPGeK_LJD{M!-F_vl+>SKzY${!as^-|AZ3JK{PV1N-pNnGC}8h9s-G$287<_V zW)devFnGwcpf0YT2`&t#tK7d|5~C*1A^Jf=HL{m)%@4E0HT|TEh0eo^Ir>3cA^U`v zqQFTFs>jMdrQdlIc2{g6%B#0{7HdJ86%pkeI_>4s|GEH!GX7tBRS|ywI%q4=T`6D| zB*s;21$H5`_Zmb_rJrQ5gGNK5RkSUAt{U2hJ82D|*yU^&Z;iy*OlrmD6jigUQ+r3oGrUH7$tL;s4UswsB3GGyeg3^$QO~9x;uDm z(?0PrGi`HNO4&gNxUn7zIRR$A;BSE3dil}@_=<{lpv?GIUW)^xts}CnCU!B?YnYA` z`%C8OVthuXKO16?owhhUqd}2o2V}pf*Kx82y{?w@xXippq6hJ$J91ab#9~#xC%Yye za?PX0iH_XX*KbyCXth@fcvr8{B|TBXmn7NS%_JtR5xL?Gg#^?d>(M^Tzi#bnB~o z>+8uy)BfKXi?b^%`)lnUQbCffE#8^cp7O@RqI~zdp2|jp&T8lT%j|RLj`eqT&tnDo zjK=bR+WHs@I^}H}j{Zt>OOJb=yB;4~%+b_u3Oc;HNqH=$Y$*yi#Bji+F|enr@IL41 ztK;vME4NMU$|89Q>1AwAjf+KC8^vbMRq%u$VR6@|F>}#Fl(jds_uP*Mk`%~)!Qsi@!Jt{ObU%sW~7;r16X+?SMxN$=)@_~0rIIU_f+2nk^wP|--OM;4hr z=Isq^4d1N^U-6vAOSG=2%0YN^&6F7B2YM|*g4tTXC1%Q0hRoRf^OOjj;|rK`5ZF@1)Zcr1mOAz@CYVh zlkKUES|UQp-y%&bk_2PkdI_Q2p$Nh>f_fDH){Q{>p%L^U%{~NO$Z{ZDakRDeqE5i} zW`X=yqmW1_ndTev`6e?0t={9afJxVrf@2>E2j@*WE|l~gFHNp!?-fZ^4>4h#yn#X8Qc}DCnb;ax0OSyw&*VBq78St#i1<#s3dX8 zm#7=<>lgT=rYZpSv2}LA7UQbefjQ(4hEfH~t$gXL&{<~0^wtzp!0_TQlR5TGU3zvH z9EmQ3Bih!`me@eZg%92qoCkHVqKHL^1E@E8%r@Aq6pVc+5A1OxcMQkdn2Ilo0pf3j z1?iiZnNTT9RdSXH!_Zzrh-W0g-zq2oejEGFFS&?SsTa;(=D#H*VF+d;@nqyF$-Ak+ z+q!N{MGK&|gfDD5^0oC?Wmfqm+B@ouNxJZ@rC4^#jB^dmJ5e@Z$pL@*ID@RgO9PxD zNex(=Dsil6%uQ$@%wE%{$?$^<@ZQo0N8s~QS6TNSM`;D`*{qlVXIUy$hpIA zK=5Gk{Ul8i{v##s{N9@kP@)ep9Poz~XF%}m7r}?R;NLOH2rA+Z!UuDgQ-q(HBFM{T z2Qh=pYcAfQrZt7y9)^-C6Rag9_lV_Hhx9RkKtfB;?w!o;6JqClcnqHLm0cYA4OwQT@}HN{-8nr&AV7|2f^3H}!Q#4g`f_Dz37TJ4&1@hd)^ zOfKo7SM1QtNU7!6Y?*VJms35Jo2Sty=PxMvj?QqCRCJe8Y%C~|SWrXdlq@Jof^6L} z8wu7g^b>p>FDK3ebVD=avyy&tk62*2%UcXB73hccn0o0)TzEzCrlk!4I zdamg2Yo9Ucab#h|zBGAhKsN(=LYsK#u&sM4^{SJb8=EQD(zvP^7oeJjsue93Z-E5a zKP_fXU9|X=hEL+Bq!65?Ml)&{qo_r(qXn|}Y=?lgWyjTT-8t2a8D z{TZFYMEn;W;_=5;U2{Md{Lo+I%L&zi6s$yxS5&0yjn%+lMOlkEzGb%elA&`C+X~@J zlsMrNyv3trEKJA3Um)6B)}MS>#$pOUG-*>ND=<_0MOwtDhqzu{cEyDl0`MI z%=*-?0Lesw+=WN7@^eX*WgkzW>Zm8LlN3I+?YTM?*f_S;eq28c??$)np>+{jv@$PIzd^Mm5Gy~UkPlKd5Q1P@9(>jcen%LGM;_<=wcqb4tU z@(tQQBV+U5lp7EG|JZD7+^nqJ|Ce&(;rKt4TW)F~EdmB6=l@I;5MWj?v$JrqB;n-Z z`X9t?VKO$81p{(NP`S?uhy!`mOiC`9aL1m|a1xhs3XbBSQUrxU8rA8```lK&AXyM} z+boQKW9+^`+~KC}ga7`9QSvb7Hi>ifX;LNbg|yrv?Y3Yr zxuW;BNT=nKd%anDo8E1c@kJm+8C7e7J_Km#C}9?MD}8-?zzH?j#RAe!CO-1n_L~tM zJ9GM!+Zh?D*AAO^Zz@eMw;vdU#T}!l)SqW10qy&J%g$IdHaRIO8FWf32aK|VYhJIn z*i1%WRlci++O37$CmR}mO=~e=M^;TBt!lY>n@&Fwv>R@brA`oej2Snezr0@rBz~g*_4_+ggmD zkV~2K%qgeO8uEYu&Z7tVCyG*o>TJKb$D>)~pqbh<%@fTk`4i2Hh?!asCNThP=FD{+ zQ@#P?d~Mpl;mjz%5UqbRBu_M9FEVGCZ{RY5tpqYqk1s7ET82AFAf14|kf%LW4k@YCwY^nQCGHhmOg^@&EH{ zoT+Zs2o#{KsW)1%xT(x~@UX4pv`d*A zt>EBTd0AQ`tPy~qV7#pVd6Ah?oox}eG5&w*jh7|$v-CgI8}I+7-rxXStSlV=uk?1& z`1^ro<0bQPF?>8C((m~bYdupFwZDu zu{*dWI;n*xXb=?ccfQLEN7Kb!N|7yI-h$#57X(fHgW&PW82CtsU(a>!wKwIqb57&5 z;BmUehz=mM<%x_DPl^F;*+!RhMytaLRqSLL#%Modyah({62}W;XCH>v)f#%q*5~$Z znGQuITT14((G|bump9GLPfD@SpTSrJ2HPDK7L(Ste8C!<$gXNNVc}szJt%Ud__zbW~QlO|=keooZP(6nJf}NzN^nZZdaY z`T$tA^z!o}AU$Fn@saRq$ZbA>VG3k<^+We1-ca(e6XV{+ug@OZig63_rUVjgg74Qz zuY*Pzd+@%2(gnP@|G;4sf9`u`hryj4kN2avC$@z0LS)Q;jUv4gg6RpaHPVfSW<7zy z7OCAuct+)Fh$|Ssar;nqqg((GFT|Vcj{utTB~PFp7|kf|$uT6z*1~I~+zaeY1eqpm z#yW!zM!;-aO^GHyz^Vfm1T8VX<1cq=Mg&Hvq)*ck5|*_zZF@I^E?=l8;j&ln(O*yHtJ^+Wqc`bLsEhkL>!f#5~k z@y+}RpAiMz@pbQ4_zZk{Bjku>eE=9TUJWnrgxxUtKzt{7M(FiV9tn+AP3p#toZ}gF zc9y|#iXh4x`T>HU^2L9=#my8DzUc?3-uM|<9I>U=!?px<#dl?N1^FiVW_S3%|Kv;f z@;(ZkAWuJLvp3(Gj288UQVTDzM2dbuYa-BtWOt{2Lt1!4f53W!e%i(LKnHyBbwdN7 zzfrzngu}K6e^bSICRUqXn54P?M-$uRIBMj>f3QR(+iayCb(LL!unK1S0jdqcCFl;7w z^ZU}EPuqkNZD+mGKd8rDlmXzH#g&<*eEo63PuN^|A6~6+?rX)T?en(RcM<(yY>6bM z``ZYl0pi3am{S9M7yXVe8v9Znm4_bi-H5{eJz?L$+rzmmI9_Pxbm^}Xd}-6tX{l+; zX~GTiE5vov^|kf2j#zd?tr>j#tub6zn7TNj+a5+0M!_+rnRl835VTq7JsmXm-{3 z-;)B#o~-vuN7o|lV38pDQ_vYeyiL$w>~QRlaE3dTEXx4VYjC7dkZpvOxF8RrZWsgj ze>wQkkF7WEyB+u}$Fu@)+s8ZJINu08aE0GkLb2b0!o&WZ3h@!5am>a`Y?`dfEW+mc zrgK%Ht_?ys(_SsuLx2aoC#ok_kFf3f?>@i&Qyz5egR?gME2b;iE9wpYjpGK5Re@Em zc2U1fpVC3zScOBWwh&p7PlPLox8?qD;mOVki2$A`uA3=?`PgBGzHL#3N=9z zgCYdQDIC;Yi0!nV!(1O;nSG6IL@DQM92u=0uiwx$!KZ?B6ZT;jl%|>JQa+pX&S{Ah zBaL*0C+yRM0JwYpI-EEjne}c8idftS&|QI_Z9=-tL3A-m>HJ{V4`=y;sEh~Q23zrC z{c*%NlS@7O$0JKoT&Iz3dgd6M3dzHdnT+in<*xABqB|gGxH2I2*@W{A>y12PJZJY# z)Hv%%w;=`LkABS76oW($SnS`%>-^OdJsB75L__+?buC?LwLV)XU3YZe`SL|!_EB`&|{q@B9gpoOSBVn8f^Y-Ki z*}X^!Ibc4%d@OD5^kMiEdtO*hIH{ZaGv>j;i)2&qYpz{5%lmR8$2o4Vao-;N`wjL> z{mnTZREM3O&6(XIU~3}1gB|g-^+w5K7z7Xc?TzzhvBOBe8``9UfG2BYVn{%)Fm4tn zdL}d84@MA_rv=fq(Cm)V5_G~Hh31|Q7T-Hy86bp2igh#wgGK^LE`)t_KsE@H$^<6+ zj`k*cgz84SP#=aizCZDkp{OS+(tq3r?3Dxh6PLT7r{7(8P56tX=_&Zb(eg3ghx_f< zm+g~t*)0k%`F8?t8_v!L&wQNyv~F5AipQGz3Cc5e69%c{)g62aqh5o@Y=11|{rb8} z3;^-bwV88KeN;lyQ%gVtFD6)=@~>o{|F-4{rhuJhz`Rkb7UQe=pV{7XS5NI2?P9eN zGlFqLjNiADXIN5!o8-DP+}>_U!M>Fw#*0beSE!%`=8DtoWG?eI{SR4W2fFVeS;kzY zJPGLcVuBTMQo&fcEKa5+$~b@Nv6!G=o&f3HN=By9{r5BzkiSWg!StDvP_%8%E#S!8 zbS!bxU02@-88_MUy9M!F8*AG&31jjEtq}e3{H3b80|Zyr!fAVd=~z9p$fQGe;W@sT zw?wb_vddyit%!_Q5b!|;qnnG~b-c}QdcH@%2u}lVL{AMS=J3@uDl>(fQ z*9O^PK1m>5x7j8^L-JHz-ab|VEni_eD*iMX!H9RTOIK;;)G0#cJDJ?yWtNoitr9Y} z2n9g6U$n{MtTsEmE~qg(^7H2-(TqcwyI!Y3DsD?j&0+<`#$Wx>9PL)CtqmD;F(8XB z^I`Wnch{XmMBiIs4aCyh-8^>)4+F3bClpGq)SI?X^CvpJ@o7#nte8mgW9ijTGr>Kb z($4;4tl|kL1^K!lEbmLey3l`P6s*E>Sj-MO7|)R#;OF&)*Gc*3Fg*7~siBv);$8ky zMO@vPkH}w;K~@mo4zFnUhBlDjlYK?i@_&Zq7m{MR?5^)ojMJk0I|457;|{Pr67DaT zAkHE)-ABHABSRx`BQ}eG4(n@Ev}?-Yv`XVV$lVLS(|3~}d-$WOkqgS?>M>EP%T-OH zl9Yw5)4`LAA#ZW2OC~ymUpmb$(TOKDu_vhr;aG(#()}I8_gVFv3Lt@-^)i2tr8@q$ zhHCSwoao(n>WuY%#GqTRYYAALWsJGZqMR37eK?EYfW>3wWVXnThG11nDFLI>=SWD0 zNU@e~1Nj)GrFxF0OY)E8fP!z7dbwKFYE`{_{Njd>F<1JdvXIF@Bzj2w+aV*`89j4y+X&}6&+Z_S5dqIjg6$8T5ShlgoAoO)=R@LJ6r zaTNm^08Za(-}SGpOMvd8EKS_UD42X|+{o#T7c74Aki2x}&Z$Am8l^}pIeh;OwAz}d zZ3}%laWB?2~lM3 zV(mbD$)m(6IB9qS2wkB0^KsxkEdpp(>rGOW)0zvthbv|$ZU9!fz3*-W#*9^F!y@wT zu`<%^(;H_5>8?7|JBMDn@Cf0e>`yN@lkm^sFGqjrQ;7Fa(d_gae3)q-CO6sno?l39 zUr9j^XkyH$jAdm=NI9SfNG{BhI7U5XBrMZPoHznQm!pj(_LJIqqL-rCR(W!U`oa`s z?h_AH%M+0-EdWWD&Z1Y1MOd!BcO zXDF3GGj4H)h0!f3t7JHn!7_L2F@z3v>07%Jg?4_ZHvm%5#n5D!1H$YO@F*Ks*!gMV z1=ccx+F%ajsllnemgN@*EKPlb?2#)EB<>Yy-VQ{(H@Ph=a1-?7=Tg}1Dx$p(MHDHt z*BOeFDN4NijQ<}ACJG{Me_=JVSGvR&M0NBMH+N^Seku==M@)6Iq<;v ze$zJe5@2qFrSr$Uo+X|os{St66T{vIZ&XdL`q9%I35>x|V*tj`yt$0c<;MM{!y^R{ z`&(Mch1(BWKTUXDU3e(&_P|!vWY?jsl8S&Ss_@2869=DeOcap#-Wk$oTF_9?pGQ)Q zWQghfVChY_DCEcN7)KQSE7D4AvSH=;TSFDE8bFHdEvmbY!x(`pnkt;ZJJeukWEroy zP@!+gDS$A3?$q&w%km-DSSVy)1z$Wgwg=j{0KqZY5M@5CFOlQge1E*$FJ5;X@$X(2 zNpvX@L)5#ZYi7GTy>qjZ=axl!RK9*r`^)dTWdb35*vfdqe!1c?eUE3-PBhsQ2xfs4 zNdOHj}abc#cT-5SCPlfKW8N=@W}n;}%Ox#Uu-dmjeNu zCJrnD4~v5lLC%YA)cqtvC-ff$s^}XkDaitw6MD6g`};`^c}Y)ovqbpr@1;d$A&0x_ z${e2)ZoSc~8sJnEdL>iExv9|mKJ%QrEnqO<`t$a<4IuuuDNWo{Vs>?O{e2rz83A2u z8Gz~mRaJ@ewcD+Xu>#_==g)MCzeHILasJ+V0IU>e z>el#xG7$7?97x%&8vE}>H(A2YCyASPbtpFNW#!ap9PSmO*kdUg2b`dZ7s#n0pG)d< zglo)Ftx1-ipu~I>t$i!Bu&Uq_%Oxe@qy>^Gsl%kzN3YzZ4?sV@!hXo6PYR7Opd(rp zMONY@TaGE02}MNdz;Xt6_&57&0+e|saUA^FA5F!^_a-&N{la=_Fy-146TBf>dq=X_ zI*8kU)e`e3LHhMVIG{)d|2SE*cGUDZgLX9v!hMC4PcI^k+6`cEeMK-AiID4s4GMl^ z%jjJ!RwmSceL=ibjEQk}Aj)rgg65j|(ys5y?xiS65aj&2xIb;2H0b$c1C$hVX=}$= z%gI|0xf{5=Pn0C`9f6_sFBZ>gH}rSH@XQ|ia|`KGd;KLr(09XeH8qrsDZ{+yFgOyT zN(&?z?Nh1}C@cxIAycsCSFrxk?_d5aKS&xf4vz>?K-=T)`&EAKOsS zom&=jPXYhy-mu%sUT>0bp^*sb^xA9qkGuMd4`dZT4=RG1Ql#Ce$9<3m`S2UFnv?Nq zHpZZdc*w+wTDN#wIrzb@L&1KOb`rCw(y1=)J~DWK-0>|^77<0SGGLV8v6tX7gtwws zIjVE(`ZnnFshF0v*P$<%^-m_~pMnBHGj516db%0-d2?B1sW6Lffj5b6g^aO3A!`k) zG**iWOKnImpWV9obsd}d^|+r2aD~h&31F;1v`2EKxDhKJl{Flpfp%(%=*ZyNWcK5Zpg`jD(3W#;s`t}Uf95u4Az?u3ySFxLh$Cryf&IZI*oz< zTfxw&EQ!z*d#B(n!oQ8R7TP)suY@uQnYU0b6|f(dg>=hrz5W0#OX2>?$lC znGPcOE+Nvh^x#+(fb4=Jlg`>K?21wTzmkUz1z+zaeOD;)3T3@`@7t+Y z4qt*SBA8n60Yz}Lsuwi=V?VTQemKZASNtNPW1@p=J<`*z>g@E;IqBQ$5Zh2}I9FH3 z6vPxF<U=S zg=MXNz?%aOYx|cE!<1=jn2!zujZ1_F%qXVIN5yy=AHXkuz{!l*CgteK5-ljDiNnvhBe7V|Lbu9t-hjn{Ts;Wsw!=GV9iU!1TN(Kr5M1fg6WQvM9eZ| z18~bqC^d0pRG9Ei6cgKDy3aDP2--|#RZS{BQDA1M02g~p^4N?d5D!M)bapx-Dl6;S zd$)aPuqY_U-j8hL?Cx13#6|ge&pF zf?+q=zQTrK^|;^NxzEA+v%^)%&lSvzdd3&^Ba`~o{kw-8A2f|>YC#I(V0^JW4-EIL z3Ps6UUNeQ!^w3FFcPN8xBGts?aYgHUOfMk(;73|zngKA7&{})>-OV$`1Vs9Uijv)^&n!YR@;lOtKA47A5%~ro z5mKX(%t{Xr?w5sek`_}&2Rsy9DEt)-k1h%QOHm8331bEJr^jL_Pn@UsWWgE3x*oRt2l%!}g& zqSBn!;V@=R8gaW|c+-#iRtL^o6{Z+%wTLd<`$JsISNC1v5i6q03kT7-PK)&1ss zvXYWt7TuK)5xAODr*iG%xLWK#FT86n&azw`=NH$7`laVjnMWpC0Yn#HZsLj-lbD^Q zcq4CXuhLmxu?1_K{-x~xvCN=+ZluC~GHP*n(v#5H!tPFT%<-3;qECV)tklcW4WDUW{;4)4ExY`ST0UxaB>qD+;TMZTHuDK@zhy z&<_nuC_<91OjP&4GPYl;IWRo_kG0p3xee64Sq|7w+GU7}KV?MIFh}ShNJa4Eg=8rE zzuUW=p+l~>0DKSouUCmy?v8Jo{L>}dedU_9ueN_L(r%7dK7G%xBz;a!SXDBRm&!!!V4gS zWS-DFMzW?dN5L@(c%D!XyLDc1HF8>V=n$}`QWh}ZzG0lmL5-W}r%Khr+YK0w>ep#1 zp1gz2miplwT)|fq(%Ff)rokA-(UoZD8LP)eBAK)%uyzxW?hRa^V!_ad_!)`Bcaa$O z>2IYZ1BQe2?uV4!e*VrfL)w3&{t=nhN3EjeW>`e08AFkr>lThDBSifwm;s^@$xxe8Xg^BvdpV!H5(w;u_`F$v_5{8AY1V|;9kK~Y(*4$TG^Q? zJTSy{0&n&3??OyAEdEu-w2-bshf2^qm4B}K3~K?Y6;Y%8+`Pm3(eee}CD00_j>wet z1c;{y>3YmvW!L0j9z|fW=GFw@6uTlfU==JE&{h&@6)Rra-2>$>oI=**7dV>FOj&s*qEFC#u#N}QZm z7lj+yUACPOCmQv8d&SOl*n8qGQeV~O`3i&Eq%64K)&Z-N$++=|zKRPzAqgLgl_hG8 zpNTG-?dvx2S_R}`0oXAa7|a>Xw4e-=c7E8?w{Gu|*M|&>vZ{*N_M#;4EYeeR0LeLx zy&T^rMTO>Zgj`{6()gBHO`{(cM}ifnsd;o8Bvj&T1k8UMfft!+o3>D@0&42vH!+lL6l%#cc#9Cv#&#&wXGomn z6=93fYaMKX*b)vDD#loahp^7IfP`ltCgs^Kgpz+odYB=}leZ?;p4eE2ArBlO=Thcg zFaQU$Kt1)220~J|kM3fz9DJ^A0-st#yN#Y-z$B=bFMO{2`0oiEjuMK30IEXppSX|+ zULg)Bwx9+dP8sMC3837BZL_IeC8cxbi}xdMIjBw9(2s%dm^-rm*ziL^KsavV z1IhjFP8BJ~cX=Em_txL{Nm4;5F_Z|#s`NZtBK>*JGl#Vvo`G*yB#+2xm$148^U=ns zCyN2enq=-Pi!!wSjf}E_Ve4_=5;Sjyx(K)I0N4JSSIuEktXs~H zMWM3GCQ3-Is9v&@`1s>iv0B{p3f+bW=?x4ak)VY+7Qb?4UroK1cEmeDd8mIXHwJo=XNLhb#?;6#yTvw)(WkN|#&F^XS%jx>L*d1rbtVd3}pQEuJ*8CVf+|La&h zm>SxFw?2-Z5ZaE<1t>B|uS5J!*q1d*yB-#$T42#ZA{9RZpPk8CfG?-84!U(kE4AXd z2gS8velf-bNf}WlAAYcxXj`4qO5irNFWa8&Ht`uiFgLlq-v6GnK047nv0v;d_|}p* zI+dZ+Gp3WJva+YsV$Z-uweHnqlB0{C(+hcbNj*0`7ku_k1NhjuuL{=gZl7;CcO83H zOL?jVVOwfgxmo4Rb>=1f<^baK4Gj5MlVL@Xp<^i$mKe=5&4!9;gig>1S)0P0g%6T)H4GkV7oG))aBmqlZx zM0EI|2uOmXcGN4DVW*^L9CQvXGgm5}nwq*9Q88fbfzt3mY$*XVPb{Bl>@UqWGV`+V z06VZV8_6o`__9W$v-s(mnH`e8@7tb_5Ieo4s!caPmh+nGMIPKf{AV0p4i+I+s4GUZQGdGww>Jk-}k$9Z`D`pJY9SB)3wj8 zI;T$U-lx~EBgCfqr%3l4inxbyuR71X+x9AsAjv559HQe92Qvg?SVTi7aVfa#;J-0O z_sZ6+5h!FX)g~vEf3_uc^sSpV<>0&Z}af^Sx`aJ3vyQ82?1aNPx@T-_q&gjD53xLULIdrN&cNq|}%mH3RUrz`#Qe2$AV}H@Fa#+0&ucmWY1Fl47vbX!|^2< zdj|uJtr>swm22};NgD#aTMW}wyZ8Qg8tly0hf{uR>1g>%*f1`s$27CVfjI!*d;dkI z;0b3N2jJ#lFxR@9_U{h8{C?h!UtN*-9GaqxwJ*^&6Q_;S#q=@p^eFk5+^POjc;bAY zZbG4Qnf!MqGZJfFok*z|HF4m2RNZQ%JSC3yD*QV(ulnj%aV$QKw@Pu1F?!rk%#>b6 z#6(!bhO&#^vKgg6|9wd$GklrKK)rq0V7c=$58xuUrtax~u=sSzdO7GsVfCT@su6)! z&Uw*Pi&mh?w$lsKwUpa1l&T1lZCI|v74+qiv){9)T+@E<~+PZ zVP4O`e-@YoyPKWVwcYC&KWANxM!~!Mg#zMv@oG^Q60zGP)UZ2)0ID`haM99!7Ycr% zAnexOZ-BqD8mXoK_t2AeWfpr=q@qAhmQW$54eza2GQAithI4{%_O(65lcV4|)T+fz zMK?zdrMzv4U|@=r&$=TRl<*+a(!)iGoOK~{f*Dt8-rP(ESH>eGoH^xjRU*W>xj=bk z`g&@$X|ix!XfEM1d7YN@qNGJ$D7wB`l5OcG`xpxH3$Q-JQGc@d$bBhw3>z6B0Xgbi zbDF%)#~&lj_b{?EpriNdeCm8pUPZ4w0juI`d7yPojZ?^81Lw@9j? zslG^ZG+c@pU8|{c{V0P%>Wc7J7ckA%aD z@%qNCtUiw7Jif#0k9mgQ;Ydz^%dODH`k^NwG?xAJmvbq_&34UD>2$8Xn`VfzsZ{dG*Z3T$s-mBo?>yxs7?8!9s%!b z47C_ZL2PSrrL)~H@HW9>anT5e?p4}t;G1C9xK+@+*O>6h9>?JJ6X@b0BtZar8m%1TMHMfbcnyk z$Lw&w_1D!;85>mUQ#D4?z)3RWF>0IbR_ntxjE^;wHR}#gziWAR%+j<_eNK@ysxtUn z!vR=dA8NLUhDTZt0`4Mz2l-PruL0wa=_v)BoNhE7k zIM91_w+$6!3tJUIBWZGjWxIKH62Y2}1$ngRnA`SQm}tgRKw&$8^uq)PpGJZ3)1JnE zjx=tCk86=a^i=@-YS-qUpz-Gu=nZSIBG_jA=yKa6+ZD&_fc*J>1*9Q~0~Ac7q;M0A zx1tL-ND7Vw(mGtsgyi3WbI|$(u&5#-e8;0riS%zPf8}_ucdmM$nDvTtti)co+}W1bdAhS`vR?O+&*>AkU}P(k>r;+$WB^?Xyciv z6E(;1auRbRA0qK%DIeM4r`xxHT)!4)E&d#KY+~+Wr9CL` z5`RfncNWJqqz|%LP!b-wVVcGG0gk9?jH2o9-X(1Kt%TvIJUTK+Xm~KsA)o|m`ry{9 z*|Jo)NT}0D$gEniBGvtLVst~aMYLGqI|i_gd$k&8fPuskoYW|}P8e3cW}&dFe$u?M zT#PP05$~JGtYbm|Se5jCqB~EsFnAOp`OpVIxrGa`@I*4s*b5w|4GE9x>K8Jvlg#3N*Z7$-UCJJ>y#Gi5`JB{lp< z%d(m`)vZjSAp2T1b@F-p+!fpg$Hr7!2Z6o~v|pnbw^`##gK|H$e=RDY#pL}Lh#5Z~ zSo=K+ezv4%1TUIOs%&;9z{^6zUxHHzr_);~u&h~@Qi?$9winjvJoj%HUa2_?L%yfk zo@YAV{kEan@1DHmT?~mGqBzlHO@n+~!mqNc1f|Fi@|EZkMy@~dq-Mv<{H_p`Ym3V3k^m%UO1sIn&;rZ-Q%ATLm_>v4~bQze_Ax z$&R7FuiC1$F|*q~C|Xh!PBCu7uv9d5|8AejKc%3tGqyRk`cO{n43Eh_w3c%C8^@zN z`GL69DK1{!9+^hqi_pJ2wAw45in zmxqy-XpjnG8NTp_|Dv$?@|ucOIoGf%U{&P0EyT& zYMtD)J$4X%)E>r55&MdQUUTo;xkYCPAiUxdE#QKC2J<&dh5+qo?eF*M0k zq!7uGBm4g9#7+=%fE%zx8jDY$0=WGp!jCFt_L|9-tg))$v@WXcM8_!k=&;xPC@u_m zjBBQa7GFoG62FTK5-R`F=-^L*n}zWk@+f9k~oJuLJIAyrBjE67CC<_BA{AXuKfKar6Q4I3DF`2J{yg9bZy#Z@$lRW+t+~e53g6rF5{u#IbflLrZfKwU+~HsJA%hbjNJV zzbpt>G6L%gzw^3)d2O>^9UZn1_}ko`3hj+osEZ*a#aN>UdV?UJ|Na(uCZTL~m@)j@ zjM|zl2dmLNN2IZG8qn0zJ5sN)G=!I#0zxegeGGD&^Fy;tqxUEOq?4vCDzqj8_a3Wz z@Z;L$3+tlMcIm=@i<4zG7BURGmgOl)=gEcg#@liiY*<#$*>MmO|GE0g*dkRqGPOfE7WAj1H2=T=t9GeX27nQg%8XKbEev3l5+ zw}Rdn4^+qxVKV-9i=h*--w6=l<^}=&AkL2RyCJM9m;XxTs9WJ22(Dy2fidE7UPN;s zcrdV}mf7-+)(Dp}bXt@-FKKRI^WL7C#h7RuBqGkr_z|_scpJxhr~(R1c4zMJF0iUg zK2|iEee~1qY>3od*=Et#K7SAWwwyWp3<~}GJ5Urc9LRGs=>m$nCHf4f=9@Fayz6lY z--!qRI4;i-Whxua!{s?;bq}2=q}0t;&DU#^BmDizP~J+G3#RAzu}VT`d-Mt!gjhnyfdH>IgW8@e!*36oZ>$g?W#Uk|;( zq2i%f?+c$LVrZR*29MddP=X<6-l%ga@r`QJluF$ZWk7Gs8}V`JCoj<ODnbT0m*{KbRF4*nJveCM_{ju` zbvJUFSv&!|v);7wssfD&QL#FB7VGhAl9+Hp{r?En9Vrxzbc~TuvqO0c?IwvKO~HtI z#cChrK$ViADVCr|m<^~%=4fR?&&FdyV39FY%7qYUt`L1M*&{ zDEvoUuXW%YDrgw-BG3B11BQ0isjGl>ZSIeybNuEzoX^g?*Z_U$hI4Z{@SpC{l;{g! z>2w~!X3v$CZJ%4W7zHc%zvVRGt>}9CTTk@MG?xB-*y3DvUELu2C42s15m{c10e=kn zXgHCZm+oA#FxZgKQf6UcrAtbl0T|fUejZg}51P+d+zu<`KlTgC=n9hfDFyghW|=~3 znjSCQX`&vDnb{6IhmLGQ#u#R~G+EI?&4@5G43?`}v5H$OSg_fQQ93?+!=i|o{}x8Q z2N6}&%tL@GSv7ph)^6%ss8^@t7<|wy3Ucp_q1#I%h*mhJM6IxpW7w0R2rO5ux*niw z$j;v~w%ui@y#JG+=9i6H`X1lS#b+>9`O}n*N5QD(c!FwzG4^hcFl#TIx`C*GNNR+# z$utKGVn|S}V1kO9(fwPo#dYtRLfD!li$)&S35;98y`e3#XMq%*%7)h)mG0DHfTY!= z&J=3CUSUMQIj5phye0pYH$c9*mL%EmehuvqtWS3p>uk<2OGtB*12L0rX?mM}zhPRW zRAt82X!=N5=Tg;()qK6;U#wyCD8<2Z7@38~|1&8uXYXYK!v=J8^80Ssi+pn@A8zRo zqHLfbJeXzlJV!tuJp4Apld;UpXvFYDvW`D`j!Cm3E;B82koy9$5s<3cGMplxEi$Ni zX6YF4Y+@b7e80mkCdkw_p%A`a$7A4gOe>e_F+wXRIKw@r6fSfxV$j*%SuCxipqC&& zzksn|Shf-UP7ovj*P?CXN{L!{sGDn||D8dr(aFNyeVNiFWFIO`&J%)}=?96~EA7@tM zC1CqIXQ~#D%HB8C%9zPb<a7v^(P}DLSGp46Tt8?(*IR+|& zU%SM4rbfu$xJ42$vD|~2vH?2reBX4nW(P+Ixs|8XFPrSyV(oZMKi#`Nd>)8$pKvK; zJ(8JCXns?wwAzck#OANy6-Qg(x@`+XtowTE?+Kx zODqO!4|vXYdAO;)sCkC1<#?oDj`F69WhZmOcX+833IP!FWT0(v?1K~x>OS`toYM_# zmbwM3afuaZxw-{{mI8Q?5*8dAk9T{b;t%L+cYQW3My%sBYD#!_gqbp4mB+U&!WA)7 zQx|qyB&mRz#)Il8N?dM|w*c7`AW(JCp#C$A_fNITth4^=-D$VkQKY_yrvc1Bdf^7* zV9RTdG=QM5aa?%irf@OJD7t&xH?F|Vj`1lsG+3;7gQ?J~Si*CX;z2e;jCsq4f`w09 zUW5=uTa?|mCEg|ghljhCgirQiYQw*b{Per3epJ-PSa)DOh{t@L$k>!qp$bwd`0!pK z5t67N&NFj61_tdGoYR*EtI3}%*zDlr{16AhyIZW;o7-WU1k zoThCL1oN0>S?cy~ho^-b@jIUn=zLXq2LOrCF7JYq)b7jHBuGQIHHsFt=3bwh8=5@G za3+EE+ZjabH)4d{eP%P6y4q~BnUTHsuoCg_wLRz-A^3sv+QHw>&qDBC6D-EunI+q& zLcU>dX|JULb{!-)6Skrm@JMoKvG!eKZ>g|;s+R%=cg5y=Yo;8IaNAb;@~Gu}Q-Cp^ z2_M%HgbW3(QSg&8-r4y$+ zSjs?4iTqfoODN_>BBH$Z6>ceg+z|zW<8MbQM%B?l%Go%M4}1>_+YZR|lK?crlU=tT zMlHk~Q;EpfcJ90HE_Eb7EUTGZS7l^@;>@3~Rb%m9KHk%*G3#Kzbf%%b*TA&Dh(S5u z=!+mt23i;Q(0W}qT|O5;=(DM=1K%q?aNZfp^kyj!ij#BUiKQ$_@~M?c>B zs=?~rcbouh*`%s#orB7Lnt1CP4PqTF{s6Gb@c4{G7-Gu5 zd6E?C>HTV2PhQOL%5?uoFHtI*>JG_hsY2P{KE-$%gK>%gH(ax(V2p3F7)m_^P{yjy z3)@1)?9AJ0!SUrI2bHds7$-bzu{_~>F{SRsIx{MrC2B8Ag;f?b{q8q1- zyU7pQy0XJ&x3Do=MGeAu@pF)k|GoacP%5e!=dj!d^7E$k;DsxFp!XoAtFzhXGbkEg z?+Y8iFg_!b{T#*!h`}FmDdhDIPkM#%*RUw#WTDYWwMT6EUz;x`=%2 zv-!hQC&tlsU^IHb?0`!P2s8+a(PI3aTq_-(OLiYksjaoMY8c-o@^{V9_9IuhXyQUC zc1vh+v(@=~k9A<^F)A={NTJT2C?1o}3+d(vYEf;vW4@yfi2N@1+gJiIq>Xk)3eM<_ zgpWe95s{_OrFzsYveR=Y@k_#!yjQ%Aiw5c|p0_{+#)&s?$lL49rA!d423j9|T8kp0B%^n|Kzp&+5CBIqOI% zX@Tc~MnsAOya&X$l4+{+bu_H^u}OuAwwqmB=(Q*A$o7ORw%}nMspZLV;Y2aa5-94< zl%=Yv3&Z)UsZelE;nkW(v-)U5CDpz8BRD25As+cYQu5!@?AF&9x%NkJc|$4}{Ef~2 zRJ@z&eVmn11{2^=gnPI^{xfx2fIt~lOoy<^#YP@OCnAQ>A<9uYt&{{bh=94 z*r}h|k*8nr9;2gbF+^X(eoPFZ=VmcVrc;sYQ` zg8A8U&ZD*7La?YrO`g1Y)(Dzxm9R{1d5%!Geqq;4%Z|Z?LWu2VHhMg06F6b15;CbT zc+FD>r4fV7ALNvMuts}81X;9XaSr>NgnjSi05wWXMqaZ`g4~@SpX0ku{gc=%|9V8(+Bp4x#$aB>cyHT+l={n?izZ3EYJgIRWHM&7MyG?dWN}s@21w7Gm(*8J?OnK3DO37Q)nZCR+IHV@}`k{UVs{H zE>Ahn?#*bK^5bi{;1UjI6$#cLgvYmEc302IR&#fi0{owhpQxXpQ$(HL+w=Bv3`dBb|nCizo1jaov*c(^E3^w7nGbe_B(QS;$HGq%MS zPskrWJd1QR)n(Qey1WdIYm}Wsseoqh`xWLhi;>RhQ`@N$aAP~W1dXuJ9*z8VLm(ej@-|ywyMRFB&41a4jJ`@C`PNsaCaN#h*a02MkOxN9@ zrkxV3;UFe4S5&k!38}RD$KM!Z|LNy+u&0CZNpM4Th6=Nn$d1AK0+1_9{5ls;1Xu6)e%2B-h4eBN|gC%EKczG5qBv@UdNbbf5F0x`R3>U-1A5O z8WPlrfOykzG8huve>oe=&lLDR#>i^Uni47MA8MJA9G2K^5-Fj$*z`2N|#z5N|qfA42zP~^L9_ocQ|Te58(mKR^)C4%$k#6uY@g)xGP@d&FlCE z>-a*TH4(d^&>^s!lL+9aNSC=xpQu1Q2uB%~Y({`p*o>*|en6lKs%23eynO9O-8ES>~ zY08rt!IIp6cdO>obj%OX%})P-=9njWQOd0KiyPGA_d1mHejk!djQgOxa!r2V*!Pk7 zdAoXtj0I5!O9CX`0f^>Y&llH_g&#)`7$0Qc4x+N1)k9r&^NygWVbOE&?{HTlsee2t zQedQk=y9~7JNtp7PG$%`f=qJc=8TIS;qMK%Cv*LMrdx@6$Zj~291NU$g2E2w{_w>Y z>hjlQ_eB7ZooYN;fPtx*htV1KJF15*opHxAj%K6_G+=rC=Ke-*Ka2XXG^upS+$$}; zLF<DQ=G?a~i1A310`Q(qjZ<7D~d zf_+-neqdHn(qT5Omo{R20(qPWdsOC3F%={Fy1VYBpPKFsXXz z@7nsW5^h)y_Po@?i0vxmzhmpT*(^%3Akze zI<264lf1grOHz}ZUk<s=FmdbeHuSVlZ)o!8uZnGo=X+V`ptl#yz`w?__ZX6l z<0YNRz4WsL?=r}6?=xmYqe8a;KUELu=N#%oJl8_k*OeB%@GEf&4+g7=Ge#g*71<@s z_YIMz2!#~g7U%Esg9v>-tHR7Z?r=ylhIWN@ul)WHBTea7%9x*Z-`XXg9zR2 zx^q$e5yR#WkMDU=FQR``CZwcbeb$eL9C zRe!>AI{E4$6kmxt2sp3MU%r?Mx7f*li#m_@YYVui4N?EjzLFhQbVNrDQM)xx*PQx3 zMQ$PHND)QdodbLqpzi=bZvNo!mVzHA{y(rRKs*`)56%-cH^6F`H2r^_>N4Eh!Jl7~ zuT=4+wcP=0@ylB_dA35DncumZx?R6p=fp2EOgD9azEz--)OJipjcRHRp|40G<7e-) z&$^CuOjv5NKNiwmRXTzk)|vzt=EF@dU-+snPGi@R)JHZpK&$~(HXJzQ?n}R_nr4@e zbKGBh&U22x$HaO2pQ)R!p2ST?>!AdPY z!rZ=a+}pMoW~-TB5MUn>Xf_m70ZJv)^#=ac#kT7&bm@U29qC^;VW;O*))$-H^GiQT z$1m5}^8g{aO8xT$H(%0u-Nm0@{|_L=6_}U^UblC$3B3d9uS+&m&xV60N;eV~G4nN? zl4W|#Y@VB@28q=s<|=ZRgDOJFFz;4VtFAe=@zvn7Nj4{|v#TVu8?}~F45%CPD5nI- zFGMEd>T_MrbLhn$j>pf`sq0@Et;b-?aiG%PM~~+FS&d=FnKZa#$m& zTBAdF1hWGV)o(#d386WSGq{ zhQ|v#;_p8Y*~#*yh|J}_+8ybQ2{3|{*B>%Cl|RB>B?C4h%OpxhTG{s<0Fz|%hs;iy z(}0|fiK|7c;a3@pOoU`*HN0~HdxHAf0#_2Oh#Y{=yrBqKErfqBD`bcHtDAUE9dX#- z{b0M!TB012=uGMicI$#mZ^Od-w=JNlGApiYV@b`-P9-FoP#}nWo+4Q zT8m_58cGX<4T73uXPjQD>j*&AK;bz40>}*!r*j8KK+*fZ9gcCN8X*)+gQP6ncAY2i z{QL9K|MKTzGTxQgn|?pcdwTK{;`9@v?yAf3uuF<)_Jv&Xwea(CV9jg_JhKo2ArF(s z-c22*U`ylMl%!khHW$nklbdW$9+>viUdP|W^#Dp{ z@b)tJl!cqIxbfU8Ypa8t5>0wgt_AD2slF>ac_(J4u)(tg!L}`f*vxpMSqm&D6$rdo zfu-S<{O(MW&+348-21*dSizy~?T@U*Njmnh(}-Obv)@(lZ9UqO+4PxsIMv8PgDKkj zOlJcwv=wC$H7)Pu}ovraE>$e@>2P7+vl(U_4sE5l=f$5FH3F z&2%*=_17ISr#U!|KRLKLi*+Q~Fjg8mB`WAHtW4`VVWLfg_d93TN8)5$s{j$U;;IPy zGgJ>lA!dDNB~M^j9K+2y9pNxdCg51f3Rq8N8)13(d5WPj$)kze!b0!MceJ}Ohe^o} z*aeYs!vbQ{ZN*^Y0cz-pyX5Wrp)XE$k|>(~jduqIhLExE+Y9H~kCND5;{*;hlp`*| z{4@Tr=70yI3#9*H?77d{0&J%J1~4}IpmV&oc^eD)-qq#j1_$0@&-)lVF$S0Vo)j_l z;CAB;*3br>4bGr;OBpNSjD#>x`px8oYk>R?_5pLWj?cHbY0N=nC$MPN%oxsF!gAFLRO}7}Sd{DYhd>*}_U{{Lo6dV6_LMN6*p(RB zEQ0HyL|{Ky{ws^^cs`pjv*qh6&&!yKW$Q2KfA%WLV&DLnE+#T)ZaFVBV0%Zu-``Wf zOI7SYYsDDCb2QB#&MHL`Fivi*i?E3Xx*$+-)3lS_JE#XfnoFr~pNe_3+E=ZRlwX$6 zNDI%Uh_pv@vP2ZBr80@#*Prasn~&#Fs{I@-2y^hx(@vv&aOB0^PGE= z6nAlFa}UN*qvc(Ce4@0UWSOyOaF4OFbAmF;J&Fn_YDPI!%_Ars6tIhH#H^$kLk{64 zz28(t!7@+f!Vbr{aH)FdK0wh`P6~0!J-AQEA1>Hi(5W3BK`#o(FaGy65IM=g&%$ESSf zXubs77q|`crCvLO=Ku6%RWbtq$B!t7@xe?T;137TKg*xYuBUds=9V-c8gF&~C1GE^ zwErdl_5SY=ihh1y0Q3{=1NvHSE35k}5qv{=qPY4>e*D+_Uy|@sIYE3AEaux+{P;un z4d)MhH-tXym%dkn`~&^cH{kcT#&5sBv444V6#Bci|3!Eg!w290MCa4%|HjVc?*Bx1 zSM>kH|2Kd@@n@>IZJuk2cJRE*yuZf`!ttdjS3R0_d{U%2%1T6|_?X9hXzMhD#qlqz zY0Y|Bn|IlBd(Mtt`|V~sZBC%_tD(omh@$xt>`>q?%$NT2{*Pa2*ShUg)>IFFVy!{D zs(^SR@-x2+XMb9?UPhBWSH_%Wg_!PCf#O6EC%@o(g~Y8enqpH7t~f$|`F|}bWE{zt zzK{6sL4E0$10k2-m%gm1|7^3pZoobuJ|O;2PO-HZZ!yMsOs7qPkk$;l#c~LH&V+e* zeYx1*Vp!{#B!qg13XxOejq~{nj3D^FAcMZ@z%Lp6WBmP}Fxla>zJ&8-q5r@3cHdJS zqZcM096=Dnmk|4cw_(53cV+O@`=u|dlhF(KAD@76{`MvPgzNpaJnpnS$*MeUNgc<( zJQie864A<(mnJU|ZFX4FLVsYsh913+54}d#Qk?--9ZjViAzTI7tUv@s4aSG*nkW-XN6fz%oGqJM*&jWd8dWS&Je@Z^*_5R)xp4NeG%@TD zL{pldY9EP8FY(5L3ZOIzPY9jwu&#->uE}Z~SZh>w)haKedob6cok4$X_#mjris&jh zxF7PFA@D5WZ!Fw9NP_t5@q+xWF}s)(O>b0|=vlYApZ#US1y zG73SptEhScuPaT1GgIZZC^_lbTZh}r&trwNO*iE+{TBIAXnGwsGrxINPFMdiTekxJ zllPRU7hy_MaM(?igy@~7Y_i=n67{&m;y|y$`yi{lT%$TEy$akqlZ#LXP@3>otys2N zw|$UiugZdp6mXl;w&<{?&-|^yx?JmGx;$R{7Q&aNi9Pa36gMSu;~eW{O$q>{U5s&A z1S9FOZ|%e7vseZD1&;}$Qbh?#Nl6LliKU7aPO4W+ycpn@v#BbI_yKXb*|c#UEijU7 z&k*@rEJ_XKNk4N`Z&(e0{TPpY#yNA93cRn@rF_m2_1G)n5V99KMNnR$hj|aklEu#T3HXRN^SRzp=WzlTKx?AuG> zn~7K+4#Qge$@bov#i+^N3HJJI+)VW(T>!Z(!YwzF1QYtv{=cWH(7V2+Mc(1&xtj-tP^P3Gd_Vm zX*)YIjH3Ct*ezxBZd+eJ6*me#_8|uArK~o3tNmzt0HTh3oNbj1M4Xkpir=?5UST2q zFCI?5VEg*FX_GnrB^%^bybBxJ9StQ`|CUqN93e0EwVHGGCficZ;l|@Y#+DtEFL(u- zP^urm%6UP?B)EDlH}J|k8z*xV>E;%iEtnC?N|aLWTVTp)SlYZUsWm`p%DLXrDBO+# z?R3pmKqW-g42B8SiB6V57E*`yE&CKdtte2(@kLD?jpAm>H`p`m5tDiHej}l zW)!@<>?Kpn-jq_iEuge_&RWbpTIm5>43I(WIP~#obk(pM7ZL7Rd{}-&hR%X>5kAtb zcb)H$!<^YNgKfW?xXF#=i6d-P5aumc01y=xO_pS$qA%2}Oeq``I5QIm8%OeX860|Y zxE3sQax^I%YO<;pObitl^Z!kX{lCG+tZc0R12#_1)PVf~u-m(kp@s&E>`Wsjo+Cnq z=ER1fq}pw5E?u_U(A@vJ>(5N(!5`dzsQwvXPt`S0!v7-jcZg9KNWZ9gJlSI~qO4cw z`^WGsllk6|9?ravPtY`=hq%pCu_W@$d%m9ZBrlh4!2K*I^2~<77qy+6>GM1K_}wk* zQ19cUFSj&T+j?PZs$}xe=3`dJn@VFUn8-SMY?rIx4fe@xTo=oIN%^>_XY-))u?7}H zue_{O<@CLi&I|Knwajt!c20^CeXzY49qHv2<^XjdeVfXnh7O-(K_3wJG8dmXDIcm1$9lVM zzcxgRuWESlt^ZRF&l+AVUKd8w=9fGBi$pjZdOf6BSjLbQGtZPQRAGq8lx1ZLSv$_$ z&?zn=e&CEnwwKg2)jT(~pNV?nv!c||PU7Ho{j+29E4tEy4tb_Zl!_*`Y&#l&zk~e? zGZtdl^`O_onwyqZ46M%w!~q`>KORc-j+j-um};=^4xuExu~!e9xFHBEzZRgN2#)@F zrdyAkT4V+O#K`)~8+*pDFJ9fDG(`$iT2m#&Zh%35-Xsifc@bnpTUt8Pd2~NwfM)=3 zhgO=n_l@fVgVMvAQj=QN;VV-BL?@(40r35BkX@_nJz9Y8Q<(Dm1+>o0gd&)tBmSztV24wLsOk_Fm_EahqutC7lh?>4(v|Y1^Vk*1O|qA}R#&%(P;f8^ zSV-K=cc1q_bbH{`)%;qV zdJuLj%6+!jwCo*-sy=Kc#9`Sqdp!=GkZmrkdXUid{Abjmlu!(!pwOmg5~2=XSnS6U z*J(*CINV4+0X)`|<5`*$+N>LPFui+{Cm&W=Z2Lh8mSF8*PD&1J1{zgAGO1JyV!loi zyQG>#R%|EieOM0L+6@5omRoH3yALDyG{aB(t@v6^4huLm#Yyv}%tx1hYWU^`TzDPDl<%H75> zs|rx~nL-`X`nnE_1Ua7v6pMdf0P;j+oBBg=eA!-BaIgvdfOJUqEyMI28;CaN%a+0*khf zw>rpA3b3y5PvXDL*Y1DGtz!A%H_?j<#A&cMByI~BM z{N*7H`Rm@JStEgk%cTYqwJhw;53T!6zKlbS;tHJmoDOpW?mxN#X_rB*k3Gvi({e)R zS!g^rpxXBSYU&&BtdA@l+N-x^W$#BnxFe#nld~!A^Zc`i6{J0}@GvHqmznOc^V_3j zv*Q_0GC`vOuoJl>x;uIg#J`1yS=m7L2ZC@bT%MI24A(h2SLF&VWD{y?Ny0;N9MXR_;>FH5L?u@TJT^vj6Q=E4 zMQ9G}8*y`^4w}J^hJWpOu(N*H(lTPL7v0DV`tSf{^)Pp>UP=u!-kB#B%2K&Uq3E)` zecK2|0{TjwGm%!2;1|7tGQ8jo&+@uenu%tkb!Esq3RRNuitwYnEAt!SVshQec6qRa z4-VovWYNyIvEYpmt`Zh10zTqyZfr6_?)9`yv{Q6NCRpjA6Xq2)93SRW-tXMXYB)s} zjBLO^%hI)Wc$<@LSPu`?wtM>vOr_4Brq{{7@+NIRHxl%=qF4kBltzOH{;bc6{~h^v z%L2M9b2zo0VTht=9NU_O6q_H`XXAI8E2@v94s{QUNYPk+-jvJDXNr ze$Z^mp(a&{i&pid5=TSRPt(`5l-4Vugf7a7MPdW?}jEwRTHMa-dk+Xjk!9p zdw6D$hC%urC)$d}kx<|tV37XL@gongpygnq98}kz>gwrEhe?EifGK!y{EK@Xc%|Pg zB#>4o-rg@JI2Fi>5SAm6kM=#%M%l2Od0A$GJcP(f0<8q+n$3EXYQK=Gpsv*13RXeU zeh#aR&-5uRdrcc3Oy58|P7cnmZA6@JI4e51ljhI22;)akUJ2W^ki4y@(TtjOa zXMK*DrF@he$XK5WV@;knss7LClt5EqY0j$Qp&nzNJ(A2Mg`Dj!WwdNCSblD_G%1jl zJo-jJ=_(;?Ex--a&B0T~O~#@Mt%@p3#aSLQ{F4n$#T)nF#?rCOQ>>?<)L#^H*@9Y3 zQG%F@DGo(Z5i5hz{3FI+H9!@ZE<;ZHHFf&RlxqRQ1fTcf6IF2B&x$ZhN;@GrHw>vs zSq=RLYh>+P<6A#5ds3LWVmVtE!(UJGX2`)V^UG$EH3!3yIa14{_ONxKP&+PDX0}eF zH6nkEh`O2|;xGoJq-YV$A5~Zh4W@?{!Cf)G1~4zqrG8T$em=1aslx`k%c+}~5g>dl z_Kb%)VzbfXC|cF#S3~fMYs1!PqBE5B;F)O9p)|-_66O6ADM1`iXFbJfdu8sY*{A>9 zeW2Ox=qj97Mv)*^SXLI+lso1T Zcs1~w@@eFIP?;1(w;Gw+uQai8_k^KuAEmN0- z%INJYO^x5fu5RA|OFjXtBDbueOBsSW&AyjV2Ne7>;7Jf(rcx&A6%j5S5G!r?x;iA7 z0KMFW(0qPLlKq8+aW{`f&EaoTi!BTK3iI%ls5aj&y9*@x(VukS3**X%#F+}-i^uDs zg3t_E=_C-6*H?xm*fF1%-z~+NB9UxWV?YGy66`YyMkOZLwp;5m8aaXpxG#&}^P5NRx^3@va-hJUu# z;!(Zw%%xl*(oZ#=V7Au$vg<{2RDSymyQoLtotW&VP)6Y@6x;RbPOUQn(cokF`;P4f zT*$4q^?OJe!L?t|cfKbK&Wy(q)~ulemhS`zNA#J~W@(VR06@qEecE@A3c)Z*$|0hq zIID=l75}x*2XkB>)rSu$FLA7t)ZcE2_DY$9G6=FYP@{`CVhR6pBcZc-a8)JgTcZbK zIl#D|II;R=<=j3Bw78@(VSrpQQYy8%jtY^-X-Y z^RW`~UDr}<`LHg>FV&O<*Xhvtu;!xg5t6pm7qxgBo{cauu1Hj5H@2P31Qf&K3b8x1 zovIi1gdOm?{ur2OLq9ZiCO9HLOS`p)Ub4JsYsA#QK>|@=E zW@CH#eb{8Hi075~CIa8nQl*jVani`Dk33*!h!#x)sl^q~pXfK6@>Mx2Zi)PXE|x0Q z>-CswL&o9%)7qPWQ}uO^Ou0l#^P_AUiP%305 zWvomg^N=}nLWD@@w=e3W>+`H^!1V9K88&b$t-> znocM+HKA{Cg7~sD96fyTX(on2pt7p`A^p;lY1{Srr^=mtsw@I|m*&@0o3hL#mX5u3 z0S^)o;=8`YH~Z|2U}>-ln4?t;75#8fVP>sjsKb{lcJwPjo1ZpIgl(03fQ!Q-(Hy!&Ogp7}(7x_XfYh554sFKx?;cI(`2tnWV8%*t zHyFaS3T*;mVs@9DyY4yFJTn@ZYWX&ut9|=fF?;t4HLq3jae??4xrA)$3DgHYDf*Fy zgu^Gz+jxDb?+}{QZmg~bTwPrbR_JGeP3SQwjHLJNpJLUzd-fy5EI@>nBWdy;dye=) zgiGj&*RXd+&fhcv7KeAp1B|B6{qofHO_9KJnP8XvxK7~ z5p!XJRrI$kCf!#GZQOgj&3|}=cfZk4yMWOgZeT*&^;I4s>~OOWa8s!9K0yIrbY2Ud z6+CgNsA?jee&_Is!_Quwbk{dkn!M^k<86I!f)*YT;Ui7SCM>qPI=|QV5<9(mVPEbP zy{C_nlhF#Bu{-!fgO(#&8eR4A-EpT`Qwdpw88`cpH{HJV;zM+NpK6S+`3<|z8lI5k zZ5a!rTAsb>n@zZ5x_auOzRY4}pF-(VjYpz2X0|L93FU@M@a8_34=vQ(uo;Ei%gLIS zA&1j0uNn<`Ir-5#YIxC>N)c9DzaCPK_=;;)@U0JwX;bwy$4GEcsEm7Y z7otMZ+DawralX~)l~sJwIMe6-)+m>Zf@qI`qFp;2&K|!_(2_2mFdWo>A*1?uAk236 z*E&A2$u|y;SNjr)h>jTv_l5%~ixI7Y$v)|u`)I4=vjdDjJHsW^4LwI4j()hg;F%>9 zw@MqDz+g>pcCWei2Y+SpBleda&-IphvBgSPd^AvokInTCo7EN-!kSw?-Eh`>WnIB% z{J2f_q}^ITT|I$FjM}U9Ox<~Ij9KQX@7!>&$q^nzHZ8G?lc%kW`$?j97(OZdu*KpY zYTg@*r}dvV9Vzu7M#*T@j-OEVRhTh8&lXzTIwgwR9ll$Cy1As=IPU9v&O%wsOE!J3 zRqtk^o=N`*%u1Qd%WHHAm-!-3Tl8(b*QNaf%nJ1)4pJOSfOh6Fo*p#$j86_+s>WR{ zniXbH+U*!j-2L{Jrh;x_k(g}Ir?a{G7MT+eRoZz3O9}4RA~q9EQ+G&})=&Tu9jfxl z&vBk6!XZX@M!Z37iH+ZVD#OFs!1`EnyxE0gPs@Djui0qZ^+>Av>C_~M>L#wNB}RMw>_ZaAnHSKC5u! z@u%u_vu{7GJhKsU;t3FPGNjdZX(2jU37$e&Uwf5t6*kMAdt;a7{e3@IR_tR%I7<&z{ax6CJm3sm+gmf%j6a-3`p=An@VpTzud`aq!#p5fbva z=y@*PudX-6!va$^bCb6b>o-;*Hs=6k+EtU({L2eUhdYpYhz3)xt}cZ6Ha|BtO^OalfA^cAqR7DZSTG z7v>?wx4g^;eNUi!lxr%GM*scPs=jmKo-*TIk{zqYNzI%|sg&1h(<0&<@?#R2me!o& zHG5}oW-tmI+J9U-8Ww;|HXR>!2z@O&_EQ4JC0e5PV_Yk&yw>=qk8Fx31>bJ@ z4Ecdir#U^olwC7wEJY5q?Ks)W$Ga0fPh$g12vkR9Nghrm97op5R75VBhDg$fL74Y3 z%d~~~3ecK2(~nQO!Pw+_e+X<93Fp&4y(=opGR*gecZYo6Fh`VWEaGLLH%?UXeeG?zR7Xd8!u0*RyTkt7 z{LdcqB*Y;C?hsgoVp)Z_9_zU{2Cd8b9y)_4_VKa1xTC?y#FFjegl_YDe>=kIwe5s(%XI7r_c zOt`|vdy{)PEMDlw5w;suNE44^6p?{F#=iun7ugrQOy78Vc((``HXJM2Sv=f_jVdqB za+2ud9(TGs>(bRy`<0iNg_->43*h$0L6h3|`@o_!|4PX)x9>vdG8ye3Qwl z2J@uJ_?xdhE6YbA0u*1Em08r4N9c6q`(7(vI9V;p;To{&y+C;G+9DF#D4FdzPrsj+ z!}q9=EGDu{QzY+s{`1ABxV#RF!j~~GOZ$lZ9^g;vYE{_qkH7;{A$}z9T_3& zxi<5Z-oj;~F06s5KNXi{d&l9}+@z0{s_uM`-OWn7DAVs}y|galADLO6H(D5c_Nh}M zeUF4wGV#_q;}ed41UL0FuC~|9b+H}1-B3}zRPQ$fHqZykN`vRksR9s;=k$VLbu>M% zJ^0_<{IyGL#ABH0*=+HCc;op?lhSOwTwHhVv+~E><~YZz?IAD76%%CVM6`(%)5#(7W)NM@+r*4sOS&M?fasjgav9LEj*8-RMRug6G)v%(^FGh@9@w zlJbbk^A-0-a-`3{W=TJ_;$wVl?cKoB!^aKM9G=F@xvW(_uU*rLCojS>oGPozrMPgVwI#$pGD(j;AP!+LX zW}k41_&(u2xJ=0K$$is=(kJmz2srMbyiMB4&q91$Rl(x-L+KG=@q!v2tuH@|ndf`+ z{91A# zH7(8fG$zfsXs;6U1^HTE>i#wMQOvmK^nt9Y1D)UHa_r0;@41TEzVlA=63T0R>SvfF zlCOW&P8!qYHi)gea)IrWhUKMKGa}y)uS^_`*nO~kFjNxSc0o?#c&f;gdde2dLyhvD zD;+6{*n_6ab!%%G!P0ZK1gj^Xj1O9bBH(O4WUTzQ)Li zIbQ9_OZLp+LHcYZi+~TaLTf_@7RhZBG?*PB(aQlD&5LF~7`0!s||3 z#vhbcbQi)!gl=Zu3JSAjI2Xm`1OIfEzLiNLQzbJNGuz~hZH$%f?i*Eb^g3_7)TPH4 zpE`5H`|QUE`o5NPW;SI93B1PgmopP$vo3O^QOp^n4}EX+DdopOD=}RlK(<^a}SN+irEkC66ru#Z# zkg}eOY!mySVZF%yy}g!31z~zUb1AP~^m(zF=DS}=2p(^jyR7=Od8mO-Eq*7{ahAKwrt{A<6mTowufO}oN>)CD25##&356(zOJip(_I9;%O(NplK#p(2KYBzW}4;P)$slpt-B`h+e zY+&NW2oWAO(G6kcy}+FiyW=f=<)^#D4a>A0&h&-~b6EKYOJdB6KG)s~4H4`*@}24E zB<_CHyV5^8=ByQEIPWVz%3@BlL%}n}Bjhrx-}Hb>4`k&#v-$@bn;Jeon)kV08W!9< z9L{lu&pF?Qttx*#b^omSGtIpmeN7jP;Z=3J&dXuJpQAgMb*cPG4;!%=?&npJGow9h zQu{r&N4Wzs6H1qm$aPleg31Fr!Z{bh1;T9wb%(&-UM>SB=8lWM#C3#~4_QrCi4!L{LUj%#o76bG}vJ;}N@FwZko+i{^?OCjHU zboohL(_@YOA6zuhLwB=P7xW{O9~A0DRN+z@j;Fsa^?DyNVsosN_RFiMmqoyvM;`pl zRC=x}RC%zvVALbH&G(-1E?9 z*-k^2FLR9j9@Ce)Jvn7x+DJH5W|td)FAY@Z*~GED6zx2U7s>umMAZN}>mcMNtk?;e z%zS?G3MFoWKb~-V(WenbSonU$mWnWL%E3+$xA`;|UeO?}KFwHf7w7eBLcu57qT#N* z%^35+uP^g2N82oq3$V=1scTv)nIT%-^XGkoue3Xg`3{ahawv8=-k&MajAAy1I1j$4 z9vihsu2jA~Q!@Q{^dPe=k6Hfo&Y9-4fG3|dEDc<>Z}Fn+WY#xQwgcJ1!v4RE9w*f$q+gq3_BKo(HR63so(= zuTI^u`=vx#G6f<38tdXkSEg^pkKJ^A#-E-rd0BDc{ZZ!niN4Zt_Aw!=up7t2v~MhE zgfc(`6s1yEvVww=t@wv}d$gkTJlF{ytRG4bmd)+nx0kJE->Vvdvq{hbglosn&-=Cc z*Zgxid-mVBqL7GB@jf21mf(;kdVKE(>o@AP8pvb!&pbKFQ9F`tE}71LKKrKVp`cas zoC@2fSoJIY`z-W-Vh`xe_K6rUaqP!Nzt5Dh&+BmN&29@BYO{vah*!WL2M#AH?IRSU zxN4FPJ4XgHi1Qz}7&jDub|>c0Er$Ec?Pri~u$9x*8DgV04XO>=)E@V(daa=0GeVvQ zLnCqbm*8tPE_5X=%4j=Do|QZJUmwzXd7rmQvR}Gia7z%6J`myM{gXHO?qN@1EB({O zKZ6zWX+5QIg@K0EDENaewT!mmGFL`|sjjkn_Nh9rK`};wU-mJGoEHrb-nxi;hFuu+ zgsbA`ijH!-iCugh&}LK>Id658DlRL|&B~I0Wrvr^=#?YT<>L+IHt|Q5<*&saoW;Eg zrs_@-p*kr^3{@TbzW=`Z0(|Y@0ez3od&h(uR8yHXTHl*%i3g8M5_dW%mlfHb((BFRS=z;KHTOxA990Pd>L7T#XU8)wDfv zVloPP9&da0tnIbgNS8jBFBL~x()XP(8#@8JseyrdF|hteC3cl&U| zw3#EPhTSv_SF@E3l)bEqQm$o0lrV}q9ga7kWE<`C-R~)NU~f*%DGfK%DErrNs@sIV z0k*Q$!7QIKA)CHHa>R1QfdmG|Et$_e2o;7o>_zs^=C9&?wEkhvUGAh9xC&VtP-7h-Xw zzWZ8UpM~XaXPGr!9lcOFcWk(&Kw#Dn%GCCl-Dd?k&Z6l;2k*P;vp+YqOx_XKYBfn; zMoF2)bB9YU$n1K$;YxDr8R1mXe7(mGj@33NzL^fbrCgnPVn49lHND)S^7diG!+t_2 z?*-@1F~UiY{-0l-$R3Yx)H_*_f62AEZaOhoNWe7h9f0N9XrMPTOX- za!CwbMhF%kQhVH))*j_N7Oo+Cl*LF0oewWAL}NW7Dh;KypPoWK_SL((=i)KZTuoG( zKI6H?J!+yqhj)ihn%vX~H6g3y@FA`bTwXr2o()Ijn_46rioX(Bj{f9L zU{626AaQ?jXe{m6jp0K^jK2g+9s*NBQfy11{@4W-8o6LEA+ zJLSg?ABL_xEguO^KW%n7@YkX!UM27hBrQOJBUgJ0HEEM|L-B&Fjw^NPg6f%jH7ZjQ z1pATx7alX(FB*$_CLhh`v1u689qY;&g1fuU)P@)O+DL)bBRb_i@x7RFZuHX|-zO`W z?dSG3R9=6-01bAy^7J*tz^nYZ$elXVjHv|!?njje(@v{C`jn>mWJch`sHFXk;!g|I zCaT#P`bQ%4S4L*t`OR{QSqi$B4T$_c6A1+Bg9Y*p8PcB4pOM-zNU;}gdSe2M5WhBR z!HGaC0%JpD!VH%uGpz&t9&iIZqTOlO<^-d_>+rXg`0=iH4gJh(Q({CM_KN$_R~auN zT^%I8c2r+td*38XKt{KITJV*VZs%1OKN&*NFMAJnE#oNDyA0FO>#|QCO@&@h`SiSi zz%8DT&|VoFE<5KFpy9-zg^ls*&X24z_(UwMcX2<|dgv`gdF@NwA)8w=ny>LC1;S<> zR?R#%^$O`b@O^$OZGMGBm6U*&KbI*Y-?Hd_ACmZ9AeE^!*m5ft>U?K4Uh6o z$d;;Ki9G0o~g-$&y}{_4BQcQeLjU$guwM=%@QP9=Ep#S0V_*$5GC7ojHhIJ`Ue zPPqT=m`KMiByWbA96Kc+lYS-|d5TVPzbkiX;N8YkKJR#6yk}|K>qCqjl{n5V5FMF( zoWOff?u|p5fmGPahYW?E%N=t^Mm4`VU$@mT>tJ)Ct{)33h&j+)LtLbO^{|9Xqv3kU zs}f{VlG^i`JOtfqb+c~@O*gp=Z>x7o%C0V87k;)7Y_B zf|XJC8&PogO0GWr7fu;9XU>+Fq7H21e#+VOSm!go;6#6X}`1sDc@1{!t4<%GXyU^IC*LEH7oQcfM26>EDJ)?HtvwgYdE|WO@9!-d zP9k7#PEVViacYQR|JK}%nbFVGra4q_t>ma~0&VK85Tc~GE=}nG9Y@V);U?1UUSV6VPtVvb+3t4_6?`d3Qbeb5aUjZ)LTMTR4p8qScf;9 zW~b^pisZa!=Ar{$eocu+SUEl&V;m143^210nz7%myh&-%H%UN6zIgFjDdt7z=Rs5E z*B8@wA83DC*2r%ZE_O@8yIN)D6AUs`PTx7z5`gisH@dDZG*dKz`|e)U(c;Hj^(jzK zkS>L!w8MCwlg5?%#C(`XJ6Y)&4_i}z zU-N(2M^$QD=^vXT8`6HMD_l`S%5^9rez8n&)n=NP|q>2gX?R^dZ(k%aV zR#CKb_IAT3Stav~Ukk5O@Xb3@5AASsRNCDmQH=H2)gbU8(BVgf=YfkV`ZGDaD@bO$ zfCp}TUes-6uYBoF2W5*?9f+bVpmYe}nWQjP{l!$}=E@oQ%6}FXho~~K80s#5bQC>9zJvWI3|U_yCoF~ zOQt^87)NCm2A2}{&F*BFgYIb^$@2TZ<+t5jxj}qV1f81h7HIFsFHK;ct zHezu9G)iAT#Y=r5NbaP`v$dpUwgv6z$I;q(wCMzW@A&ULQ{G)RrcI{C#ik3(%?IDU zZutrO%HnF!Yj&BqaCuo__4ci{l;$zPc)y7R`3p&$cNXd7qQG-F7k#K|g}bWTcF0iO z!Cm*^9lw(j*VcrH>l+C=b9GdQ;gw$F?&=)vMqT#n;f$wgKNHx%U;kDf+mU`aYl-iO z)SWwXy9l|*PFFtOc{zSN}9Y+GYz zPZNS1ZT(|B=b3fQ8Sf1w<3^SH_gD#(&emnU(Q_!Wn#_#7So#VbpisZ>lw~0QjoX+J z!yopCFmD8gt?AsZtR}OIo`F%ZF+TiUN}bb^L#uvShXq+?B$ekwnT)&k^~Y3d*e_#K zan8J^?CU6er&*p(cjsK~k&ojKA{26%bnCAYXu|m}onWy7ulzdIs_7!J=Fkb{m`+zq zdKPRhY)GAVVNWqpenio;iMD6|sV>P=ZAV3qr0E}&KCj?=T59EX>yOr7cC1qM^OyLf zla5~(H>fhUQFCr@$@+NoP&2JnorH;!%A5PpV{X`t((+g62}(;`;iZ%jv@QYF z!w&WaPdo|hIwPw>T^O7!o!qdi`~6WHixdN-GLP6H!4IbgY$=aR2%dLpJs#hw+O2i~ z5!YoCP?TsE{VXh5aPHYxz8yCFxzbaZr9uhi+*lTO=+}=jUhrzYxp1;1RJNC6| zdFKAgENOvFvccY0MB^N02vQcW2YL-eV&7Q`3{P|7*)6$jjL~rD&#BhbL2l9Z8)0-> zT?CscBuiFuRQ_eYQ}4{Lcb-itF3_{qYwy0kC>K;x>x1}p&B}e}f*qfhP10(OR&fW_ z_uFf#njiBW;&%8RV@#AO1C@@XB;~!RgAvIkZbhKT>e* z)pSP(1E%}(`BG8Txyw#XV>faR?Tc@_A2w!}ODO1EJAeE^ydCDp$-tsPo=R30myQQXv=Fwd(Droe#w@g+PZXr;u;KQDd@D}CGE)zyRUw{|e@?D=GE zlUGnU&Q?){a&L9dmov%F_sUFWygPX!!a(ie+mH6CDHVBz>YqNidHcGYM|ecOdR`gAF^LALMpgDkZ(me)5vNBMRJXkLKzO3+J5CaerN$n)F~e6qDb@$!Z*JG86iP znV?3^K4kr(K<{C;=ZES> z^J&$H5g$7nCv6?FF7w$*ONYz6w5ArqJsc~zqWWU*AcLdGtnj^$gZ{#>SNxS|H8m;u zCJVFStGu0E)@78(%Q4wAJ6BHe72Tvb)ZF^a|msRov zXDjDb%J&5YsN2^?w69_v+ub{-SPLtrzUMQ{+|FvUce$)|JmKSnv0TFC^5`G))65?B zd^&cq>ED@+Z@R=Z(KGd3aJY^^W6y|%U#|*$ejs1DE;MOhKBuD>p9&N5R!&X3y_H*+ zI^oFW6NJp09?z5dXq%eN-S6x*XSR33T0`_~zLZN}ZY+znd*@fR;O6}C5g+%LS7D5H z0=@4J@22jkeUWoH^YE9eOOAWdg=ePD*N?t<@#38UER(I=#BwL=?#ENddq=&vF6Z99 zKaMvxQJbT>o6*%o|EcA;a<}RkZ9V}ip~;JOPYCuDde`Y`?(4Z&AFrX$^;WhjzBzyG z#S^fL$v15$=!Q=3a9r`PnG&eKognCZ#Qi8Tq`@usNKUwYIIJt-E)#~cZLj6p@tf9e zyo`-+8VkP|@iQyNhBGJ`rA^^6Z}rZ6H)x(Z82#xP>zJK1b9WdE%|p97-9bmE6-U=s zT?Z3(V>-F+hSPXPPfAY}oE%>)U>GOX#X`6VYX+ad$uC8pRAHa5A@amV+IhbCfa>bm zpZBhKWM{<>sa#RLvg1my%BNiwk0f7&42DSh?W(ZQSutiOs?6p{`t7bLRhdnalnEKU zD(S~sv6zUJ4RJ|a(qjL`UQv*^gl9LqIVhzQ!%;y@TvB5H#aiJnslZiXmALd;^27B( zfEduR0qk*~ebN zm$(!msTDF9C~3-7;iOZvH^flYNt0bobv8uOl(Rx35xXbkZ6a1IBp`8|tKw!NRybre zu~QZEa1tR|k42ocojkqSX2 zo{|pnR>?ZX?tXJnMkkHE!da(BB*Y@|)cz3h#Bt7wJvy#8%o8NfBszv9Dzh`|a$BHo)Qk}R%tpAvR9{$OEpPyGSQk*=!S_YrdA8Bb9ANn zPH}c{XgV;Lao+mckRSz}+P8T9OA>1KG(E-q(=u0v7$|~W9doI=DCG;%GDK3c<6kGq zT1id{7X%u2b+C@cvNcGnex#uD5B?UJ*g!Gd_xQv&d3#ul?6o=1Gnl9LClnoT4!kGO zdbu_xh4U8%&8*0HlrV?mU(|NhTpoyl(#5m2SB?atB#`#lo>zt6ORupe|}}xG@}4hpyVeJydXXx^aboy7iJIh zI75;dw~6Jv1D?peS~s3j!is1tUVbjP|{rJ2iS6WlOm6A?KmHvV1`%@ zX)?l_!I!T#DK1~FqF{n9$23`mu6-DXB$dLJrINIHeBX?p#|y!hZ#U6}_F1{UlC|b< z^bYN_m}gEZ;8_i7+J`4t&T}SVc#6x%wL`Vwa^>Tf@l`y`iEn^;MK&Qq z<1BL{n)E{5pv$63Q=w~R)_h6nq4`j+yG@pOZKzjF)A>*|%~!tZ6xp+T8jC~Qp{MJ|1@Woez4hZVcz5{e8fyYg(n#p^+1$`3 zUAzXjv}J3(^{yltJR{F#xHHTdK5^FdV3Hf28E+SQnkNr>x@;VcuMdspuD5EfuKw`! ziq4@VIXoJl7di@yuC-=P;>G9i)SI8IfBL+kbhq{1B%aXyJo?c6RwpZ;-qWE^GRL>@ z96yh|-^7lO;5lx767)rTl9cc?q2G8$VDByNy{&#P`LJmR-YB#Z!CPg0AW0K{etBiW zAI|+4aqRrP_tni~hE(_7NInqX3xgw$UAWh15m zlD$ImZj&T_FMe0(8y=pY^A``F3&q13rdmd*!_Kn5k&Mz|O*)LHB!sT;{D8rs-z%zCqk)R|lkY>F2`Mtlrz)=-esO;xH5Nt0#yl(5A_o749CEM0gW;)e*y(9 zMLe|v^@@Na?F^>Oj6fMrr9kNeS=u=xGC-Y?ow-PvLiv@lkEV#)gKvhbY+qSCr2}Q( zjv~q>wgIt$9RrukoXTwc4JoTA+K;P!T4ETmDAVv4^?&QH>>uFoS9a5%+JDvG*T2|b z;c!O2OdV4vbtjVtWhUcHQNGwDZorDNfg+A}a)&%kC*_jp*@J`u7Jobcbbo1o3Cf3* z+7!!$D1#KV{G?Nu=p?LcZ&{MR8U+irAeH=14~ooPnUtA=j-{_8Yy}1s{AIWc=rVSW zb_E#ha2hR}EE_zmaG;F;wm_K!Qzu)Q5w+4AhHfS)$X9L!jJmQwtBc92TN)8&{XA{BoDl4VDZCTbf={EMmecou#(bOTrQp*_J@AR;#=nQzqBVb_UxN( z{PtYIuRFi7XJX$phl+9fNtRt;nz{1r!cceH1J7j=LSHX5D^(RQx;UsZDqAQ%urLQcu#%Q+iR_mkE|J`kVNVQ8rM<(a2MK z@Mf~ju%D$ndyr&$08j>NzF^K;4kOTbb>L8E{ZXV`YB}{?MdqAdK3ss1jT)ShQmCM*iTSN(rVIa zQfty`Qn6DxQ{pJ3g!yjMaMM-q2&KG0(M);K|D-?7Z7OwIG0HlBmDU->7MEYI721Ba z(5{&M+_7iAltKjObAA1}NggbC9M-}75(5m0M8g;?>@Sc`7+^RY>3K@FjR$AlQXoP5 za2WCjXW>xjCb7J{?B>IiC>VU>!C5zP$gaI_Z>vX&SA~nqE+@(PQb5jgJ);eredExN zTWmC#*wb|GrTdcQ*%)HFI7FD>S(yE+K2I>>z<2O`Eba`;s^_WnyOZ8U?hjMcmUAx# z>n+{8V3vZ`G$9;~2M@^3E_(=7nSJ72#??nG$l1NceV8j0EN$($ZPYQB5LWQ|$1K0` z8i$X3a(zledCeJvJQ)qd_-NlQ6(n((e!zQac# z2g+4_sqo|lt3oeT8R?(y7aD9)9CM7{7{Ac`xIg4Q%#>3GtQOv_)-5y>}rY9lTt6`C#7)e)yMUP zO9j<8`@KGA49Jcfb_V*XW;DtYqV&cy(ysXhnT@+UGOUWXOU)mgOmCEh?p&n`IN(>r zmC*k&XMFJ#vGMDSX`o+)_Z^F0c7Dq=bCRo9y&m_Mr`0Y79BLi;S-x_NaAR!$Dnn_r znK|K}Uy#vf_fDb5rMXVaZIJncX@;K-=MMb5<#6<~d*o-?rZ3~NSuzDnb}{?cn!C%5 zw04HGeprf6dVpTM7*f^jw{uc{P|VGD>8CM_S@hN9S4^@mEoVfQ9vd|r3fp+%*5^4y zk`i6;_&J1$at8{D6DGb$g>duW*1bjcq=UZw#q$mqEQB|_MVEo-_XhOyc$hE@10&(c z;^D$D6nf(j0ic_QNMRUy69FX*!)`*+!Z6(CAqF699%2E)Ixd4O9tSWs>0nSW>INJ< z()-)D;ZTGy@!(qsJpu1v?+P$Bo(PvcrEPx6;=C*H<)d~elrZ=uNq5u^4HX8zo5v_& z^lvx@Dhz%%;24xJ_}w_hLWRNa<}peb`x}mf3WHw&X8^*;o^W;`uBAbav!gbI)wOVO zxa@r1!UYI~Ai}aBI>gL$i1fc-o=t~{Q(}l}FCZ$E!o<)Q5LrqFV$lo8VJR45{ds3$ z7-D@`@VTxc@VOqo;FA>ay5JK>{FM(;Afht<(;(|IRAoS9{#^!eS(j*>`Cl)8{co53 z|D7+Go7isTx}t<(z@65mML{>D#brZe|1%i_a&wYM><0Sye?(uOoKMbw<3@!q<0cJaW)I0 zPCQibpIDN_X4}x!mbgITh~?=J{{O6ADi~~CA#A91>ue!K!T$^C`e>;232Y_7{11|y zsC7?OP#{9@P;(G#(;>V6U9@%nXmbAO|H&Wyn?Fl6&Hv<&A?J_zpZqa@_$%!EpZu}p z{IUOwKNS{Bq$~cf!CO@P-#mbLqU1ka22LbSlz9Q(p0T3Kz0)gTOqrMjp-1k z|7ZnW+Kp67B(_5Y{s$@*6h-{-7P5y52_??Hg>Y~n|0PeOh|p%p9-=`h2pci23}Qk;W?|l_5?U4> zq^nrs;Yz@C<}G+L!FqQ2O$OZ{OML@@5DDcFRZ!wEM22cGl{b|TVdC>QU@)c+kex(< zHxO+icR56mh^>N%5CMV1rT{0LE!;r<#u2%yA$z#dviOV6>k_S3nBU`|Hpbz52gbSb z7IKKlP2%#i8n6dK(X+tTUEw!2@(=a}VoeQ%nRvSv7~^vdM2P4}n#aI9$Sx|-boEvP zdHUZ2Fth@KVS#N7xgih?LA+DDF=u)z7@Fu?2j&CDXC<~&0EL#m2dBF#HaH?!U>gN% zQ(YLMR6QWgdL7aIHVObyDNEHf20Q&VY0Z%k| zkq8Q^Aka=FN5$Of^V4Rk2EL*LI$Yl zw=}}=O-*l@9KNBw4JE-5M8~F0C5e#41VfO-M3SZq)B~j4oI3bK5KEdMoCatx{JMHb zVs5HvT`W8}2QUockDAB?LtxPVQ7|G?Gel`!T?CRGzzpkhkW@wDNirQt1thhRWZP8d z`tde7NiqOD676=GHhk-kvM^Yb3<#?&%A$l4OPe7Y|HuNy`)#`4?(xS=KpxVy|GON( z5oCa9TjU^x2cIrz2T7R&zTUjaZdz?UZ4nhdL%50jq@2fF17TWM8!*kfs3difrVqS( zU9{h3B6%Btk<9x4UF<*RBvTy{jgSF(a#Lg&NTGi_+SY6VU+=%RRCzcYLmVI_B~pB@ z%f6{fB+0EdTXj!p-1a zkB0w$M1^BzfZE8s;I|WqY-sVfsOvTAFHv!1Dg`dEF6(AAV2*6K!~b2Sa1`=iy!E%7 zaG=D0REi+)2|?0_Ck`!oNiQ*Zla$Gl-6*5OyunFu-u6P=&;!c=y+Oq_ZT3OW6I$bBjVlKAK?L{J0{+Yo;<8T^YzuQUOT{(2A5C-qG; zb)e*vN-0?JuIp%X+UrT=uW6GS17YHuTCk{`Ce?ltkqBa=&)6hd597axP{guE2oKA~ z0&=q*L7+F%sD^$!ps;Z4Cd<=+<3h>eI|sRw;k!3T)kkqsUFDG4Yf=5I&Z z8X!hQr^Zb!3UA1|Iq{8U>sBi88aYxBa5q9uQ)0L3YpcaJdf&gu zU>nLuZnPj9O%Pc8tv9yX&7cXTZh{=5hJj6(KVHE8FQdar9kdiNy$Nz;1Gxz(ZezIL zB9kvX;7B6yvI9ip=1rQoW{8mVCe4O&Hl^CoJaU`6A&IihfB|RACIh1uh|p$#zgg!t zma_^9_g^sZkroO&h-oblCeUyrh(#@syM)bUKWcsU!l;c^J$mB|y>W)wIKyn5VK>gO z8)qBu_!Gvh`?N4_-8F=Pu1G-wJ~wtqOc+Q}2sVHar1!o3-W-BK0SlsaCj?1s9EQ*m z7hA#lr>_%&AzHOT{E7M>!I5A)B#2o15rQRlw?n*$DqY|xtOGRC#a*DAm+XXauj^W= z6ZFmKZU9R74FamH0RH`~YyX8wlpx z2e_`Ied&g90w`4vfPVi2HSbv`2Hv$k7KG@~4+z?Nz;XzrkoB=3#BmZ#s}~}$nT|G5 z%?7~6QhhIkV>7dH5-0k=L^=k5w90*ugTxb`z|pHdFy9)|5uzU)9UcTnX{4h9(vkQ8 zM2;vu1Wsc}M^AL5fTic@ad1>T0=m~G(h+(T z!vAM>486d7#1@cf4!407Qu-)F@ULrBAaZ9%A?{R26cN@2L7@;BQW1k=;h0l z`_ULM-A47{B$8%91$NHXukeh6nfAS*XCxkM1F?K}976J(Ki)tEHsnY%A@2MPQ6f!C z^D~$;3P!a33~>{MZ-f{F$n*AAk{0&T`g;3Fo1VXe430z>&`dxulxkS8WP-sEFbond z1%*jKp%VMH;CVP(STcY;TqK486ywbw(lQJrT}$D07#4xSfFv031tLyBklyu3`VqGO za}i70=GqDa$4D3%9;pF9lfkeEESyvk{-%XPN!z)9!w_irIv!!`z$EhRh}(q${Uk_B zTNwgM6sdXG3InTHC>$i}zhP+LG+ST-;3^EpYaYsS&mq35P(C>k5X1l8VgV z1EVmcq`wsgght}Xg@&Opd=e1pm+iV*z6HHiN)G+efZw7!HmkvpS%~Zu265 zM=DPL3<8e8jWiUQW&kY?O(2^I36XRM;V)u1*sUTnCKd@@-^wS$gM(WgWVA>OsdL_n z2WSzbeIe2h;dhKcL3EM!b4fq{z)I~;(K>iQO9D5&Ky(!G?eFfa&)T!R1)PTEe}iU(k5ERwJdh=G!+AE2$@ zMcGOW2EmaBA_f&IbHZ)p%%Py)#8M1qmWF%k{Joy-@&ASlvyX#R`= zU?|d!!3{jZMuh-CG`VU}NT63TVZb10(k+IqgOKpZXN*E3K^`T?LvAxMngBy1$&(Kl z1WWDy)j-qX8b0Y(8i>0=g}Ypnj*It)&(P zMUl&iML{v7d&gS`0WchSp2MPGq%8$9JQ#dCKTwah3Qh7}K#U^o5dS?0FxPe%hO~4c z!^4v9`1}n6yAWg%jzxjMCG%|ngKw|iDA25IXNV-P%77S6p637zL+-}_hTT>HP@vz~ z5O7QN2E7V-O9c8C&`*)i4itGZ7Xx_UODEg#P^3HTe`^MTCf)!42L|*Hh_U283t*rG zZ$%{Gfx@+oAqeMfsz$=MPXzetc77;0VcSeVX4;O3**+5__V1aH1Oz?cHUYu+Xtwb~ zfl|FOxj)q#5F@q^f{1Yt+!!GIXt3EqacJ;QV?cV`21AiAoB{2&5CbqAj4V51 zk)SkKkCOK$O{ob+}@fYv1sy~4)8$BKrSF|+g1x$0KvDae?9&H5VXzPi2ubT zxNTJo&;lSCEm)qAFP5;t!dsot)%n~-TMK6f;-OXW^+hB`R@cD++yW!@H{ff9vPbPL z9l#lgg7q^MVPj!=@X{X8AR|?j;Yd7O6{I65Tp0_;DjmTqE8+1doC3rDMiB;kNRg;~D-R@h1mK delta 213235 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 zGetSource() == SourceRegistry::BAD_HANDLE) { + delete pSignal; throw EXCEPTION::VcdException(EXCEPTION::Error::INVALID_SIGNAL_SOURCE, "Invalid signal source."); } @@ -63,17 +64,21 @@ void SIGNAL::SignalDb::Add(const SIGNAL::Signal *pSignal) } else { - if ( (it->second->GetName() == pSignal->GetName()) && - (it->second->GetSource() != pSignal->GetSource()) ) + // Check signal consistency + if (!it->second->SimilarTo(*pSignal)) { - // There are duplicated signal names in different sources. - throw EXCEPTION::VcdException(EXCEPTION::Error::CONFLICTING_SIGNAL_NAMES, - "Conflicting signal names! " + + delete pSignal; + throw EXCEPTION::VcdException(EXCEPTION::Error::INCONSISTENT_SIGNAL, + "Inconsistent signal: " + pSignal->GetName() + - " in the sources: " + + ". Types: " + + it->second->GetType() + " / " + pSignal->GetType() + + ". Sizes: " + + std::to_string(it->second->GetSize()) + " / " + std::to_string(pSignal->GetSize()) + + ". Sources: " + SIGNAL::SourceRegistry::GetInstance().GetSourceName(it->second->GetSource()) + " and " + - SIGNAL::SourceRegistry::GetInstance().GetSourceName(pSignal->GetSource())); + SIGNAL::SourceRegistry::GetInstance().GetSourceName(pSignal->GetSource()) + "."); } } diff --git a/sources/common/src/TxtParser.cpp b/sources/common/src/TxtParser.cpp index fad817e..9cd8cce 100644 --- a/sources/common/src/TxtParser.cpp +++ b/sources/common/src/TxtParser.cpp @@ -29,6 +29,7 @@ #include "TxtParser.h" #include "SignalFactory.h" +#include "VcdException.h" PARSER::TxtParser::TxtParser(const std::string &rFilename, const std::string &rTimeBase, @@ -60,15 +61,31 @@ void PARSER::TxtParser::Parse() std::string input_line; while (std::getline(m_LogFile, input_line)) { - const SIGNAL::Signal *signal = + const SIGNAL::Signal *pSignal = m_rSignalFactory.Create(input_line, m_SourceHandle); - if (signal) + if (pSignal) { - m_pSignalDb->Add(signal); + try + { + m_pSignalDb->Add(pSignal); + } + catch (EXCEPTION::VcdException &rException) + { + if (EXCEPTION::Error::INCONSISTENT_SIGNAL == rException.GetId()) + { + throw EXCEPTION::VcdException(rException.GetId(), std::string(rException.what()) + + " At line " + std::to_string(line_number) + "."); + } + else + { + throw rException; + } + } + for (auto instrument : m_vpInstruments) { - instrument->Notify(line_number, *signal); + instrument->Notify(line_number, *pSignal); } ++m_ValidLines; } From 7c6831419c063cdeb9fe271de0d098b82aefdb04 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Thu, 22 Mar 2018 18:56:45 +0100 Subject: [PATCH 085/143] #40 Signal exception handling --- sources/common/src/SignalDb.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/sources/common/src/SignalDb.cpp b/sources/common/src/SignalDb.cpp index 5b98068..a24e949 100644 --- a/sources/common/src/SignalDb.cpp +++ b/sources/common/src/SignalDb.cpp @@ -67,18 +67,22 @@ void SIGNAL::SignalDb::Add(const SIGNAL::Signal *pSignal) // Check signal consistency if (!it->second->SimilarTo(*pSignal)) { + std::string signalName(pSignal->GetName()); + std::string signalType(pSignal->GetType()); + std::string signalSize(std::to_string(pSignal->GetSize())); + std::string signalSource(SIGNAL::SourceRegistry::GetInstance().GetSourceName(pSignal->GetSource())); delete pSignal; throw EXCEPTION::VcdException(EXCEPTION::Error::INCONSISTENT_SIGNAL, "Inconsistent signal: " + - pSignal->GetName() + + signalName + ". Types: " + - it->second->GetType() + " / " + pSignal->GetType() + + it->second->GetType() + " / " + signalType + ". Sizes: " + - std::to_string(it->second->GetSize()) + " / " + std::to_string(pSignal->GetSize()) + + std::to_string(it->second->GetSize()) + " / " + signalSize + ". Sources: " + SIGNAL::SourceRegistry::GetInstance().GetSourceName(it->second->GetSource()) + " and " + - SIGNAL::SourceRegistry::GetInstance().GetSourceName(pSignal->GetSource()) + "."); + signalSource + "."); } } From 35ebbe3fba583805d13abb15464188900c86e6db Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Thu, 22 Mar 2018 20:05:47 +0100 Subject: [PATCH 086/143] #21 Current date & time --- sources/common/inc/VCDTracer.h | 5 ++++- sources/common/src/VCDTracer.cpp | 14 +++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/sources/common/inc/VCDTracer.h b/sources/common/inc/VCDTracer.h index 80efaf0..c6bbe10 100644 --- a/sources/common/inc/VCDTracer.h +++ b/sources/common/inc/VCDTracer.h @@ -7,7 +7,7 @@ /// /// @ingroup Tracer /// -/// @par Copyright (c) 2016 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -64,6 +64,9 @@ namespace TRACER private: + /// Time and date string length + static const uint32_t TIME_DATE_BUF_LENGHT = 30U; + /// Generates the VCD header. void GenerateHeader(); diff --git a/sources/common/src/VCDTracer.cpp b/sources/common/src/VCDTracer.cpp index 40c7166..81b6e94 100644 --- a/sources/common/src/VCDTracer.cpp +++ b/sources/common/src/VCDTracer.cpp @@ -8,7 +8,7 @@ /// /// @ingroup Tracer /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -30,6 +30,8 @@ #include #include +#include +#include #include "VCDTracer.h" #include "SignalStructureBuilder.h" @@ -61,9 +63,15 @@ void TRACER::VCDTracer::GenerateHeader() void TRACER::VCDTracer::GenerateBasicInformation() { - DumpLine("$date December 8, 2014 14:15:00"); + char timeStr[TIME_DATE_BUF_LENGHT]; + auto now = std::chrono::system_clock::now(); + auto time = std::chrono::system_clock::to_time_t(now); + ctime_s(timeStr, sizeof timeStr, &time); + + DumpLine("$date " + std::string(timeStr, strlen(timeStr) - 1)); DumpLine("$end"); - DumpLine("$version VCD Tracer \"" + std::string(VERSION::RELEASE_NAME) + "\" Release v." + std::string(VERSION::STRING)); + DumpLine("$version VCD Tracer \"" + std::string(VERSION::RELEASE_NAME) + + "\" Release v." + std::string(VERSION::STRING)); DumpLine("$end"); DumpLine("$timescale 1 " + m_rSignalDb.GetTimeUnit()); DumpLine("$end"); From 0a14fe674f2dccef2b0b0d65a2b8cc6378690961 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Fri, 23 Mar 2018 19:40:29 +0100 Subject: [PATCH 087/143] #21 Cross-platform time --- sources/common/inc/VCDTracer.h | 3 --- sources/common/src/VCDTracer.cpp | 16 +++++++++++----- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/sources/common/inc/VCDTracer.h b/sources/common/inc/VCDTracer.h index c6bbe10..2f573e9 100644 --- a/sources/common/inc/VCDTracer.h +++ b/sources/common/inc/VCDTracer.h @@ -64,9 +64,6 @@ namespace TRACER private: - /// Time and date string length - static const uint32_t TIME_DATE_BUF_LENGHT = 30U; - /// Generates the VCD header. void GenerateHeader(); diff --git a/sources/common/src/VCDTracer.cpp b/sources/common/src/VCDTracer.cpp index 81b6e94..be9b1ec 100644 --- a/sources/common/src/VCDTracer.cpp +++ b/sources/common/src/VCDTracer.cpp @@ -30,8 +30,9 @@ #include #include -#include #include +#include +#include #include "VCDTracer.h" #include "SignalStructureBuilder.h" @@ -63,12 +64,17 @@ void TRACER::VCDTracer::GenerateHeader() void TRACER::VCDTracer::GenerateBasicInformation() { - char timeStr[TIME_DATE_BUF_LENGHT]; auto now = std::chrono::system_clock::now(); auto time = std::chrono::system_clock::to_time_t(now); - ctime_s(timeStr, sizeof timeStr, &time); - - DumpLine("$date " + std::string(timeStr, strlen(timeStr) - 1)); + #ifdef WIN32 +#pragma warning(disable : 4996) + #endif + char *pTimeStr = ctime(&time); + #ifdef WIN32 +#pragma warning(default : 4996) + #endif + + DumpLine("$date " + std::string(pTimeStr, strlen(pTimeStr) - 1)); DumpLine("$end"); DumpLine("$version VCD Tracer \"" + std::string(VERSION::RELEASE_NAME) + "\" Release v." + std::string(VERSION::STRING)); From 4e1a530ee2d8bbbbc776ccf4f7e90c1c539f1a29 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Fri, 23 Mar 2018 19:42:04 +0100 Subject: [PATCH 088/143] #21 New time & data format --- test/functional/executor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/functional/executor.py b/test/functional/executor.py index 87d9aef..d7cdd32 100644 --- a/test/functional/executor.py +++ b/test/functional/executor.py @@ -117,7 +117,7 @@ def is_date_equal(self, golden_file, output_file): golden_file.readline() output_date_line = output_file.readline() - if not re.match(r'\$date .+\d\d?, \d\d\d\d \d\d:\d\d:\d\d', + if not re.match(r'\$date\s+[a-zA-Z]{3} [a-zA-Z]{3} \d\d \d\d:\d\d:\d\d \d{4}', output_date_line): print('FAIL: DATE WRONG IN {}'.format(self.output_filename)) return False From 4f51e3e86b1fae9078657411971bec86e2dc706a Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Tue, 1 May 2018 21:12:14 +0200 Subject: [PATCH 089/143] #40 Delete signal where created --- sources/common/src/SignalDb.cpp | 1 - sources/common/src/TxtParser.cpp | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/common/src/SignalDb.cpp b/sources/common/src/SignalDb.cpp index a24e949..76dead8 100644 --- a/sources/common/src/SignalDb.cpp +++ b/sources/common/src/SignalDb.cpp @@ -71,7 +71,6 @@ void SIGNAL::SignalDb::Add(const SIGNAL::Signal *pSignal) std::string signalType(pSignal->GetType()); std::string signalSize(std::to_string(pSignal->GetSize())); std::string signalSource(SIGNAL::SourceRegistry::GetInstance().GetSourceName(pSignal->GetSource())); - delete pSignal; throw EXCEPTION::VcdException(EXCEPTION::Error::INCONSISTENT_SIGNAL, "Inconsistent signal: " + signalName + diff --git a/sources/common/src/TxtParser.cpp b/sources/common/src/TxtParser.cpp index 9cd8cce..b4277df 100644 --- a/sources/common/src/TxtParser.cpp +++ b/sources/common/src/TxtParser.cpp @@ -72,6 +72,7 @@ void PARSER::TxtParser::Parse() } catch (EXCEPTION::VcdException &rException) { + delete pSignal; if (EXCEPTION::Error::INCONSISTENT_SIGNAL == rException.GetId()) { throw EXCEPTION::VcdException(rException.GetId(), std::string(rException.what()) + From 9087e1f7ceb86ed29acdb4624f666dcf489e39c7 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Mon, 7 May 2018 22:56:57 +0200 Subject: [PATCH 090/143] #21 GetTimeAndDate() method added --- sources/common/inc/VCDTracer.h | 5 +++++ sources/common/src/VCDTracer.cpp | 26 +++++++++++++++----------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/sources/common/inc/VCDTracer.h b/sources/common/inc/VCDTracer.h index 2f573e9..6a9bc28 100644 --- a/sources/common/inc/VCDTracer.h +++ b/sources/common/inc/VCDTracer.h @@ -94,6 +94,11 @@ namespace TRACER m_File << line << '\n'; } + /// Provides current time & date information. + /// + /// Returns time & date string. + std::string GetTimeAndDate() const; + /// The VCD output file. std::ofstream m_File; diff --git a/sources/common/src/VCDTracer.cpp b/sources/common/src/VCDTracer.cpp index be9b1ec..f9d35cf 100644 --- a/sources/common/src/VCDTracer.cpp +++ b/sources/common/src/VCDTracer.cpp @@ -64,17 +64,7 @@ void TRACER::VCDTracer::GenerateHeader() void TRACER::VCDTracer::GenerateBasicInformation() { - auto now = std::chrono::system_clock::now(); - auto time = std::chrono::system_clock::to_time_t(now); - #ifdef WIN32 -#pragma warning(disable : 4996) - #endif - char *pTimeStr = ctime(&time); - #ifdef WIN32 -#pragma warning(default : 4996) - #endif - - DumpLine("$date " + std::string(pTimeStr, strlen(pTimeStr) - 1)); + DumpLine("$date " + GetTimeAndDate()); DumpLine("$end"); DumpLine("$version VCD Tracer \"" + std::string(VERSION::RELEASE_NAME) + "\" Release v." + std::string(VERSION::STRING)); @@ -126,3 +116,17 @@ void TRACER::VCDTracer::GenerateBody() frame.DumpAndClear(); } +std::string TRACER::VCDTracer::GetTimeAndDate() const +{ + auto now = std::chrono::system_clock::now(); + auto time = std::chrono::system_clock::to_time_t(now); +#ifdef WIN32 +#pragma warning(disable : 4996) +#endif + char *pTimeStr = ctime(&time); +#ifdef WIN32 +#pragma warning(default : 4996) +#endif + + return std::string(pTimeStr, strlen(pTimeStr) - 1); +} From a98f6aea10a41b2a29c0326fd3c30b236a05dd93 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Sun, 4 Mar 2018 21:40:54 +0100 Subject: [PATCH 091/143] #25 User log examples --- sources/common/doc/examples/example_user.txt | 2338 ++++++ .../doc/examples/system1_time1_user.txt | 7255 +++++++++++++++++ sources/common/doc/examples/user1.xml | 36 + sources/common/doc/examples/user2.xml | 26 + sources/common/doc/examples/vcdMaker.xml | 24 +- 5 files changed, 9667 insertions(+), 12 deletions(-) create mode 100644 sources/common/doc/examples/example_user.txt create mode 100644 sources/common/doc/examples/system1_time1_user.txt create mode 100644 sources/common/doc/examples/user1.xml create mode 100644 sources/common/doc/examples/user2.xml diff --git a/sources/common/doc/examples/example_user.txt b/sources/common/doc/examples/example_user.txt new file mode 100644 index 0000000..1676b02 --- /dev/null +++ b/sources/common/doc/examples/example_user.txt @@ -0,0 +1,2338 @@ +49:325.499 Sensors-Accelerometer.AccX 0.260742 +49:325.499 Sensors-Accelerometer.AccY 0.0258789 +49:325.499 Sensors-Accelerometer.AccZ 0.879395 +49:365.497 Sensors-Accelerometer.AccX 0.230469 +49:365.497 Sensors-Accelerometer.AccY -0.0222168 +49:365.497 Sensors-Accelerometer.AccZ 1.09863 +49:407.985 Sensors-Accelerometer.AccX 0.0498047 +49:407.985 Sensors-Accelerometer.AccY -0.0895996 +49:407.985 Sensors-Accelerometer.AccZ 0.866211 +49:444.817 Sensors-Accelerometer.AccX 0.150391 +49:444.817 Sensors-Accelerometer.AccY -0.112061 +49:444.817 Sensors-Accelerometer.AccZ 1.03564 +49:503.227 Sensors-Light 0.673686 +49:807.919 Sensors-Accelerometer.AccX 0.208008 +49:807.919 Sensors-Accelerometer.AccY -0.010498 +49:807.919 Sensors-Accelerometer.AccZ 0.979004 +50:003.227 Sensors-Light 0.562127 +50:044.817 Sensors-Accelerometer.AccX 0.220703 +50:044.817 Sensors-Accelerometer.AccY -0.128662 +50:044.817 Sensors-Accelerometer.AccZ 0.946289 +50:165.495 Sensors-Accelerometer.AccX 0.350586 +50:165.495 Sensors-Accelerometer.AccY -0.0065918 +50:165.495 Sensors-Accelerometer.AccZ 0.82666 +50:205.587 Sensors-Magnetometer.MagX 0xfe00 +50:205.709 Sensors-Magnetometer.MagY 0x303 +50:205.829 Sensors-Magnetometer.MagZ 0xc8a +50:208.278 Sensors-Accelerometer.AccX 0.353516 +50:208.278 Sensors-Accelerometer.AccY 0.0722656 +50:208.278 Sensors-Accelerometer.AccZ 1.0459 +50:285.494 Sensors-Accelerometer.AccX 0.463867 +50:285.494 Sensors-Accelerometer.AccY 0.0615234 +50:285.494 Sensors-Accelerometer.AccZ 0.817871 +50:325.498 Sensors-Accelerometer.AccX 0.41748 +50:325.498 Sensors-Accelerometer.AccY 0.123047 +50:325.498 Sensors-Accelerometer.AccZ 0.969238 +50:365.497 Sensors-Accelerometer.AccX 0.374512 +50:365.497 Sensors-Accelerometer.AccY 0.0390625 +50:365.497 Sensors-Accelerometer.AccZ 0.815918 +50:407.989 Sensors-Accelerometer.AccX 0.393066 +50:407.989 Sensors-Accelerometer.AccY 0.117676 +50:407.989 Sensors-Accelerometer.AccZ 0.959473 +50:485.498 Sensors-Accelerometer.AccX 0.321289 +50:485.498 Sensors-Accelerometer.AccY 0.0810547 +50:485.498 Sensors-Accelerometer.AccZ 0.844727 +50:525.499 Sensors-Accelerometer.AccX 0.303711 +50:525.499 Sensors-Accelerometer.AccY 0.111328 +50:525.499 Sensors-Accelerometer.AccZ 0.947266 +50:925.495 Sensors-Accelerometer.AccX 0.41748 +50:925.495 Sensors-Accelerometer.AccY 0.107422 +50:925.495 Sensors-Accelerometer.AccZ 0.934082 +51:043.184 Sensors-Slider 0x0 +51:525.498 Sensors-Accelerometer.AccX 0.44043 +51:525.498 Sensors-Accelerometer.AccY 0.09375 +51:525.498 Sensors-Accelerometer.AccZ 0.792969 +51:565.496 Sensors-Accelerometer.AccX 0.489258 +51:565.496 Sensors-Accelerometer.AccY 0.0581055 +51:565.496 Sensors-Accelerometer.AccZ 0.92041 +51:925.495 Sensors-Accelerometer.AccX 0.37793 +51:925.495 Sensors-Accelerometer.AccY 0.0371094 +51:925.495 Sensors-Accelerometer.AccZ 0.927734 +52:007.990 Sensors-Accelerometer.AccX 0.178711 +52:007.990 Sensors-Accelerometer.AccY 0.0126953 +52:007.990 Sensors-Accelerometer.AccZ 0.997559 +52:044.816 Sensors-Accelerometer.AccX 0.0126953 +52:044.816 Sensors-Accelerometer.AccY 0.0185547 +52:044.816 Sensors-Accelerometer.AccZ 1.0332 +52:055.613 Sensors-Magnetometer.MagX 0xfdf8 +52:055.736 Sensors-Magnetometer.MagY 0x2b0 +52:055.855 Sensors-Magnetometer.MagZ 0xcc8 +52:085.498 Sensors-Accelerometer.AccX -0.0124512 +52:085.498 Sensors-Accelerometer.AccY 0.107422 +52:085.498 Sensors-Accelerometer.AccZ 0.910645 +52:105.548 Sensors-Magnetometer.MagX 0xfdec +52:105.671 Sensors-Magnetometer.MagY 0x277 +52:105.790 Sensors-Magnetometer.MagZ 0xcf0 +52:125.494 Sensors-Accelerometer.AccX -0.161377 +52:125.494 Sensors-Accelerometer.AccY 0.110352 +52:125.494 Sensors-Accelerometer.AccZ 1.00293 +52:155.585 Sensors-Magnetometer.MagX 0xfdd7 +52:155.708 Sensors-Magnetometer.MagY 0x22d +52:155.827 Sensors-Magnetometer.MagZ 0xd00 +52:165.494 Sensors-Accelerometer.AccX -0.286865 +52:165.494 Sensors-Accelerometer.AccY 0.202637 +52:165.494 Sensors-Accelerometer.AccZ 0.882324 +52:205.583 Sensors-Magnetometer.MagX 0xfdb4 +52:205.706 Sensors-Magnetometer.MagY 0x1e9 +52:205.825 Sensors-Magnetometer.MagZ 0xd0c +52:208.272 Sensors-Accelerometer.AccX -0.454346 +52:208.272 Sensors-Accelerometer.AccY 0.291992 +52:208.272 Sensors-Accelerometer.AccZ 0.920898 +52:244.820 Sensors-Accelerometer.AccX -0.440186 +52:244.820 Sensors-Accelerometer.AccY 0.336914 +52:244.820 Sensors-Accelerometer.AccZ 0.803711 +52:255.578 Sensors-Magnetometer.MagX 0xfd89 +52:255.700 Sensors-Magnetometer.MagY 0x1b3 +52:255.820 Sensors-Magnetometer.MagZ 0xd13 +52:285.495 Sensors-Accelerometer.AccX -0.597412 +52:285.495 Sensors-Accelerometer.AccY 0.411133 +52:285.495 Sensors-Accelerometer.AccZ 0.723633 +52:305.659 Sensors-Magnetometer.MagX 0xfd65 +52:305.782 Sensors-Magnetometer.MagY 0x16c +52:305.901 Sensors-Magnetometer.MagZ 0xd03 +52:365.498 Sensors-Accelerometer.AccX -0.668701 +52:365.498 Sensors-Accelerometer.AccY 0.491211 +52:365.498 Sensors-Accelerometer.AccZ 0.488281 +52:403.226 Sensors-Light 0.691646 +52:405.929 Sensors-Magnetometer.MagX 0xfd20 +52:406.052 Sensors-Magnetometer.MagY 0x11a +52:406.171 Sensors-Magnetometer.MagZ 0xcd8 +52:444.817 Sensors-Accelerometer.AccX -0.738037 +52:444.817 Sensors-Accelerometer.AccY 0.595703 +52:444.817 Sensors-Accelerometer.AccZ 0.428223 +52:485.498 Sensors-Accelerometer.AccX -0.804443 +52:485.498 Sensors-Accelerometer.AccY 0.624023 +52:485.498 Sensors-Accelerometer.AccZ 0.305664 +52:505.549 Sensors-Magnetometer.MagX 0xfcf2 +52:505.672 Sensors-Magnetometer.MagY 0xec +52:505.791 Sensors-Magnetometer.MagZ 0xc9c +52:605.583 Sensors-Magnetometer.MagX 0xfd15 +52:605.706 Sensors-Magnetometer.MagY 0xb9 +52:605.825 Sensors-Magnetometer.MagZ 0xc74 +52:608.273 Sensors-Accelerometer.AccX -0.845459 +52:608.273 Sensors-Accelerometer.AccY 0.479492 +52:608.273 Sensors-Accelerometer.AccZ 0.143555 +52:685.496 Sensors-Accelerometer.AccX -0.757568 +52:685.496 Sensors-Accelerometer.AccY 0.325195 +52:685.496 Sensors-Accelerometer.AccZ 0.113281 +52:705.656 Sensors-Magnetometer.MagX 0xfd73 +52:705.779 Sensors-Magnetometer.MagY 0x7a +52:705.898 Sensors-Magnetometer.MagZ 0xc54 +52:725.494 Sensors-Accelerometer.AccX -0.919678 +52:725.494 Sensors-Accelerometer.AccY 0.267578 +52:725.494 Sensors-Accelerometer.AccZ 0.0805664 +52:753.226 Sensors-Light 0.802014 +52:755.874 Sensors-Magnetometer.MagX 0xfdaa +52:755.997 Sensors-Magnetometer.MagY 0x64 +52:756.116 Sensors-Magnetometer.MagZ 0xc31 +52:805.557 Sensors-Magnetometer.MagX 0xfde4 +52:805.680 Sensors-Magnetometer.MagY 0x58 +52:805.798 Sensors-Magnetometer.MagZ 0xc23 +52:808.245 Sensors-Accelerometer.AccX -0.780029 +52:808.245 Sensors-Accelerometer.AccY 0.0605469 +52:808.245 Sensors-Accelerometer.AccZ 0.0869141 +52:844.816 Sensors-Accelerometer.AccX -1.10034 +52:844.816 Sensors-Accelerometer.AccY 0.0839844 +52:844.816 Sensors-Accelerometer.AccZ -0.041748 +52:885.495 Sensors-Accelerometer.AccX -0.928467 +52:885.495 Sensors-Accelerometer.AccY -0.0378418 +52:885.495 Sensors-Accelerometer.AccZ -0.0803223 +52:905.613 Sensors-Magnetometer.MagX 0xfe4b +52:905.736 Sensors-Magnetometer.MagY 0x5a +52:905.854 Sensors-Magnetometer.MagZ 0xc03 +52:925.497 Sensors-Accelerometer.AccX -0.892822 +52:925.497 Sensors-Accelerometer.AccY -0.0441895 +52:925.497 Sensors-Accelerometer.AccZ 0.0454102 +52:965.495 Sensors-Accelerometer.AccX -1.04663 +52:965.495 Sensors-Accelerometer.AccY -0.115479 +52:965.495 Sensors-Accelerometer.AccZ 0.0498047 +53:005.642 Sensors-Magnetometer.MagX 0xfe8a +53:005.765 Sensors-Magnetometer.MagY 0x76 +53:005.885 Sensors-Magnetometer.MagZ 0xc0e +53:006.020 Sensors-Slider 0x0 +53:008.432 Sensors-Accelerometer.AccX -1.00073 +53:008.432 Sensors-Accelerometer.AccY -0.2229 +53:008.432 Sensors-Accelerometer.AccZ 0.100586 +53:085.496 Sensors-Accelerometer.AccX -1.00903 +53:085.496 Sensors-Accelerometer.AccY -0.335693 +53:085.496 Sensors-Accelerometer.AccZ 0.211914 +53:105.668 Sensors-Magnetometer.MagX 0xfec9 +53:105.791 Sensors-Magnetometer.MagY 0x97 +53:105.911 Sensors-Magnetometer.MagZ 0xc0d +53:125.495 Sensors-Accelerometer.AccX -0.814697 +53:125.495 Sensors-Accelerometer.AccY -0.332764 +53:125.495 Sensors-Accelerometer.AccZ 0.184082 +53:207.937 Sensors-Accelerometer.AccX -0.931396 +53:207.937 Sensors-Accelerometer.AccY -0.469482 +53:207.937 Sensors-Accelerometer.AccZ 0.256836 +53:244.816 Sensors-Accelerometer.AccX -0.80835 +53:244.816 Sensors-Accelerometer.AccY -0.510986 +53:244.816 Sensors-Accelerometer.AccZ 0.308105 +53:255.530 Sensors-Magnetometer.MagX 0xff0e +53:255.652 Sensors-Magnetometer.MagY 0xd1 +53:255.772 Sensors-Magnetometer.MagZ 0xc15 +53:325.495 Sensors-Accelerometer.AccX -0.67749 +53:325.495 Sensors-Accelerometer.AccY -0.645264 +53:325.495 Sensors-Accelerometer.AccZ 0.320801 +53:355.610 Sensors-Magnetometer.MagX 0xff41 +53:355.733 Sensors-Magnetometer.MagY 0x127 +53:355.852 Sensors-Magnetometer.MagZ 0xc02 +53:407.879 Sensors-Accelerometer.AccX -0.480225 +53:407.879 Sensors-Accelerometer.AccY -0.715088 +53:407.879 Sensors-Accelerometer.AccZ 0.344238 +53:455.675 Sensors-Magnetometer.MagX 0xff5c +53:455.798 Sensors-Magnetometer.MagY 0x18f +53:455.917 Sensors-Magnetometer.MagZ 0xbe4 +53:485.497 Sensors-Accelerometer.AccX -0.425537 +53:485.497 Sensors-Accelerometer.AccY -0.868896 +53:485.497 Sensors-Accelerometer.AccZ 0.386719 +53:555.562 Sensors-Magnetometer.MagX 0xff61 +53:555.685 Sensors-Magnetometer.MagY 0x1e2 +53:555.804 Sensors-Magnetometer.MagZ 0xbbd +53:565.495 Sensors-Accelerometer.AccX -0.0251465 +53:565.495 Sensors-Accelerometer.AccY -0.908447 +53:565.495 Sensors-Accelerometer.AccZ 0.362305 +53:605.690 Sensors-Magnetometer.MagX 0xff54 +53:605.812 Sensors-Magnetometer.MagY 0x223 +53:605.932 Sensors-Magnetometer.MagZ 0xbac +53:685.494 Sensors-Accelerometer.AccX 0.0947266 +53:685.494 Sensors-Accelerometer.AccY -0.910889 +53:685.494 Sensors-Accelerometer.AccZ 0.446289 +53:705.585 Sensors-Magnetometer.MagX 0xff3c +53:705.707 Sensors-Magnetometer.MagY 0x268 +53:705.827 Sensors-Magnetometer.MagZ 0xbaa +53:725.493 Sensors-Accelerometer.AccX 0.248047 +53:725.493 Sensors-Accelerometer.AccY -0.835693 +53:725.493 Sensors-Accelerometer.AccZ 0.386719 +53:807.920 Sensors-Accelerometer.AccX 0.241699 +53:807.920 Sensors-Accelerometer.AccY -0.809326 +53:807.920 Sensors-Accelerometer.AccZ 0.538574 +53:855.578 Sensors-Magnetometer.MagX 0xff15 +53:855.700 Sensors-Magnetometer.MagY 0x29d +53:855.820 Sensors-Magnetometer.MagZ 0xbc9 +53:885.496 Sensors-Accelerometer.AccX 0.21582 +53:885.496 Sensors-Accelerometer.AccY -0.698486 +53:885.496 Sensors-Accelerometer.AccZ 0.618164 +53:925.495 Sensors-Accelerometer.AccX 0.350586 +53:925.495 Sensors-Accelerometer.AccY -0.692139 +53:925.495 Sensors-Accelerometer.AccZ 0.674316 +53:953.226 Sensors-Light 0.697978 +53:965.494 Sensors-Accelerometer.AccX 0.243164 +53:965.494 Sensors-Accelerometer.AccY -0.641846 +53:965.494 Sensors-Accelerometer.AccZ 0.839355 +54:005.566 Sensors-Magnetometer.MagX 0xfee3 +54:005.689 Sensors-Magnetometer.MagY 0x2c2 +54:005.808 Sensors-Magnetometer.MagZ 0xc10 +54:008.257 Sensors-Accelerometer.AccX 0.276367 +54:008.257 Sensors-Accelerometer.AccY -0.510986 +54:008.257 Sensors-Accelerometer.AccZ 0.61377 +54:044.816 Sensors-Accelerometer.AccX 0.420898 +54:044.816 Sensors-Accelerometer.AccY -0.547607 +54:044.816 Sensors-Accelerometer.AccZ 0.782227 +54:053.226 Sensors-Light 0.588586 +54:085.496 Sensors-Accelerometer.AccX 0.418945 +54:085.496 Sensors-Accelerometer.AccY -0.415771 +54:085.496 Sensors-Accelerometer.AccZ 0.828613 +54:105.612 Sensors-Magnetometer.MagX 0xfeb0 +54:105.735 Sensors-Magnetometer.MagY 0x2e0 +54:105.855 Sensors-Magnetometer.MagZ 0xc32 +54:125.497 Sensors-Accelerometer.AccX 0.397949 +54:125.497 Sensors-Accelerometer.AccY -0.30835 +54:125.497 Sensors-Accelerometer.AccZ 0.732422 +54:153.226 Sensors-Light 0.470024 +54:165.494 Sensors-Accelerometer.AccX 0.561523 +54:165.494 Sensors-Accelerometer.AccY -0.264404 +54:165.494 Sensors-Accelerometer.AccZ 0.808594 +54:205.614 Sensors-Magnetometer.MagX 0xfe78 +54:205.736 Sensors-Magnetometer.MagY 0x306 +54:205.856 Sensors-Magnetometer.MagZ 0xc3e +54:244.816 Sensors-Accelerometer.AccX 0.394531 +54:244.816 Sensors-Accelerometer.AccY -0.113037 +54:244.816 Sensors-Accelerometer.AccZ 0.736816 +54:253.226 Sensors-Light 0.353552 +54:285.494 Sensors-Accelerometer.AccX 0.680664 +54:285.494 Sensors-Accelerometer.AccY -0.0944824 +54:285.494 Sensors-Accelerometer.AccZ 0.76123 +54:305.661 Sensors-Magnetometer.MagX 0xfe3e +54:305.784 Sensors-Magnetometer.MagY 0x33e +54:305.904 Sensors-Magnetometer.MagZ 0xc1d +54:325.495 Sensors-Accelerometer.AccX 0.823242 +54:325.495 Sensors-Accelerometer.AccY 0.0166016 +54:325.495 Sensors-Accelerometer.AccZ 0.470215 +54:403.226 Sensors-Light 0.246571 +54:408.265 Sensors-Accelerometer.AccX 0.794434 +54:408.265 Sensors-Accelerometer.AccY 0.134766 +54:408.265 Sensors-Accelerometer.AccZ 0.501953 +54:444.815 Sensors-Accelerometer.AccX 0.89502 +54:444.815 Sensors-Accelerometer.AccY 0.100586 +54:444.815 Sensors-Accelerometer.AccZ 0.530273 +54:485.493 Sensors-Accelerometer.AccX 0.787109 +54:485.493 Sensors-Accelerometer.AccY 0.142578 +54:485.493 Sensors-Accelerometer.AccZ 0.470215 +54:505.583 Sensors-Magnetometer.MagX 0xfe03 +54:505.706 Sensors-Magnetometer.MagY 0x36b +54:505.826 Sensors-Magnetometer.MagZ 0xbe7 +54:525.495 Sensors-Accelerometer.AccX 0.910156 +54:525.495 Sensors-Accelerometer.AccY 0.220215 +54:525.495 Sensors-Accelerometer.AccZ 0.417969 +54:565.499 Sensors-Accelerometer.AccX 0.844727 +54:565.499 Sensors-Accelerometer.AccY 0.280762 +54:565.499 Sensors-Accelerometer.AccZ 0.518066 +54:607.883 Sensors-Accelerometer.AccX 0.807617 +54:607.883 Sensors-Accelerometer.AccY 0.305664 +54:607.883 Sensors-Accelerometer.AccZ 0.398438 +54:644.820 Sensors-Accelerometer.AccX 0.810547 +54:644.820 Sensors-Accelerometer.AccY 0.397461 +54:644.820 Sensors-Accelerometer.AccZ 0.578613 +54:655.671 Sensors-Magnetometer.MagX 0xfdaf +54:655.793 Sensors-Magnetometer.MagY 0x371 +54:655.913 Sensors-Magnetometer.MagZ 0xc0e +54:703.226 Sensors-Light 0.145663 +54:725.497 Sensors-Accelerometer.AccX 0.786133 +54:725.497 Sensors-Accelerometer.AccY 0.435547 +54:725.497 Sensors-Accelerometer.AccZ 0.412598 +54:755.675 Sensors-Magnetometer.MagX 0xfd77 +54:755.797 Sensors-Magnetometer.MagY 0x377 +54:755.917 Sensors-Magnetometer.MagZ 0xc08 +54:885.497 Sensors-Accelerometer.AccX 0.830566 +54:885.497 Sensors-Accelerometer.AccY 0.429688 +54:885.497 Sensors-Accelerometer.AccZ 0.302734 +54:963.184 Sensors-Slider 0x0 +55:355.580 Sensors-Magnetometer.MagX 0xfd8f +55:355.703 Sensors-Magnetometer.MagY 0x382 +55:355.822 Sensors-Magnetometer.MagZ 0xbd5 +55:955.652 Sensors-Magnetometer.MagX 0xfd5a +55:955.775 Sensors-Magnetometer.MagY 0x37a +55:955.894 Sensors-Magnetometer.MagZ 0xbfb +56:007.981 Sensors-Accelerometer.AccX 0.738281 +56:007.981 Sensors-Accelerometer.AccY 0.540039 +56:007.981 Sensors-Accelerometer.AccZ 0.376953 +56:325.497 Sensors-Accelerometer.AccX 0.668945 +56:325.497 Sensors-Accelerometer.AccY 0.549805 +56:325.497 Sensors-Accelerometer.AccZ 0.5 +56:405.683 Sensors-Magnetometer.MagX 0xfd60 +56:405.806 Sensors-Magnetometer.MagY 0x353 +56:405.925 Sensors-Magnetometer.MagZ 0xc4c +56:408.375 Sensors-Accelerometer.AccX 0.630371 +56:408.375 Sensors-Accelerometer.AccY 0.45459 +56:408.375 Sensors-Accelerometer.AccZ 0.655762 +56:444.816 Sensors-Accelerometer.AccX 0.460938 +56:444.816 Sensors-Accelerometer.AccY 0.438965 +56:444.816 Sensors-Accelerometer.AccZ 0.619629 +56:455.615 Sensors-Magnetometer.MagX 0xfd76 +56:455.738 Sensors-Magnetometer.MagY 0x324 +56:455.857 Sensors-Magnetometer.MagZ 0xc8d +56:485.497 Sensors-Accelerometer.AccX 0.477539 +56:485.497 Sensors-Accelerometer.AccY 0.417969 +56:485.497 Sensors-Accelerometer.AccZ 0.760254 +56:525.499 Sensors-Accelerometer.AccX 0.477051 +56:525.499 Sensors-Accelerometer.AccY 0.397461 +56:525.499 Sensors-Accelerometer.AccZ 0.875488 +56:603.226 Sensors-Light 0.253788 +56:605.915 Sensors-Magnetometer.MagX 0xfda6 +56:606.038 Sensors-Magnetometer.MagY 0x2dc +56:606.157 Sensors-Magnetometer.MagZ 0xcca +56:608.602 Sensors-Accelerometer.AccX 0.311523 +56:608.602 Sensors-Accelerometer.AccY 0.313477 +56:608.602 Sensors-Accelerometer.AccZ 0.844727 +56:725.497 Sensors-Accelerometer.AccX 0.22168 +56:725.497 Sensors-Accelerometer.AccY 0.224609 +56:725.497 Sensors-Accelerometer.AccZ 0.948242 +56:753.226 Sensors-Light 0.360037 +56:755.939 Sensors-Magnetometer.MagX 0xfdda +56:756.061 Sensors-Magnetometer.MagY 0x29c +56:756.181 Sensors-Magnetometer.MagZ 0xce5 +56:844.816 Sensors-Accelerometer.AccX 0.0810547 +56:844.816 Sensors-Accelerometer.AccY 0.15918 +56:844.816 Sensors-Accelerometer.AccZ 0.959961 +56:903.226 Sensors-Light 0.472572 +56:905.925 Sensors-Magnetometer.MagX 0xfdf7 +56:906.048 Sensors-Magnetometer.MagY 0x245 +56:906.168 Sensors-Magnetometer.MagZ 0xd0c +56:923.183 Sensors-Slider 0x0 +56:965.494 Sensors-Accelerometer.AccX -0.0617676 +56:965.494 Sensors-Accelerometer.AccY 0.116211 +56:965.494 Sensors-Accelerometer.AccZ 0.952637 +57:055.676 Sensors-Magnetometer.MagX 0xfe13 +57:055.799 Sensors-Magnetometer.MagY 0x20c +57:055.918 Sensors-Magnetometer.MagZ 0xd08 +58:807.949 Sensors-Accelerometer.AccX -0.101318 +58:807.949 Sensors-Accelerometer.AccY 0.0756836 +58:807.949 Sensors-Accelerometer.AccZ 1.09961 +58:853.226 Sensors-Light 0.596124 +58:883.184 Sensors-Slider 0x0 +58:885.593 Sensors-Accelerometer.AccX -0.265381 +58:885.593 Sensors-Accelerometer.AccY 0.0263672 +58:885.593 Sensors-Accelerometer.AccZ 0.908203 +58:905.627 Sensors-Magnetometer.MagX 0xfe37 +58:905.749 Sensors-Magnetometer.MagY 0x1ca +58:905.869 Sensors-Magnetometer.MagZ 0xd01 +58:953.227 Sensors-Light 0.7084 +59:005.578 Sensors-Magnetometer.MagX 0xfe51 +59:005.700 Sensors-Magnetometer.MagY 0x191 +59:005.820 Sensors-Magnetometer.MagZ 0xcf9 +59:008.266 Sensors-Accelerometer.AccX -0.395752 +59:008.266 Sensors-Accelerometer.AccY -0.00463867 +59:008.266 Sensors-Accelerometer.AccZ 0.970703 +59:755.548 Sensors-Magnetometer.MagX 0xfe3f +59:755.671 Sensors-Magnetometer.MagY 0x1c4 +59:755.790 Sensors-Magnetometer.MagZ 0xd01 +59:765.494 Sensors-Accelerometer.AccX -0.21167 +59:765.494 Sensors-Accelerometer.AccY 0.0146484 +59:765.494 Sensors-Accelerometer.AccZ 0.909668 +59:803.226 Sensors-Light 0.577478 +59:808.316 Sensors-Accelerometer.AccX -0.111084 +59:808.316 Sensors-Accelerometer.AccY 0.0151367 +59:808.316 Sensors-Accelerometer.AccZ 0.938965 +59:844.818 Sensors-Accelerometer.AccX -0.136475 +59:844.818 Sensors-Accelerometer.AccY 0.0610352 +59:844.818 Sensors-Accelerometer.AccZ 1.10498 +59:855.590 Sensors-Magnetometer.MagX 0xfe2d +59:855.712 Sensors-Magnetometer.MagY 0x21b +59:855.832 Sensors-Magnetometer.MagZ 0xd02 +59:885.495 Sensors-Accelerometer.AccX -0.00854492 +59:885.495 Sensors-Accelerometer.AccY 0.0537109 +59:885.495 Sensors-Accelerometer.AccZ 0.999023 +60:685.496 Sensors-Accelerometer.AccX 0.00244141 +60:685.496 Sensors-Accelerometer.AccY -0.0808105 +60:685.496 Sensors-Accelerometer.AccZ 0.980957 +60:755.547 Sensors-Magnetometer.MagX 0xfe6d +60:755.670 Sensors-Magnetometer.MagY 0x24c +60:755.789 Sensors-Magnetometer.MagZ 0xcdd +60:765.495 Sensors-Accelerometer.AccX 0.0878906 +60:765.495 Sensors-Accelerometer.AccY -0.193115 +60:765.495 Sensors-Accelerometer.AccZ 0.970703 +60:843.184 Sensors-Slider 0x0 +60:855.589 Sensors-Magnetometer.MagX 0xfea5 +60:855.711 Sensors-Magnetometer.MagY 0x240 +60:855.831 Sensors-Magnetometer.MagZ 0xcae +60:885.496 Sensors-Accelerometer.AccX 0.0244141 +60:885.496 Sensors-Accelerometer.AccY -0.306396 +60:885.496 Sensors-Accelerometer.AccZ 0.987793 +61:485.496 Sensors-Accelerometer.AccX 0.0576172 +61:485.496 Sensors-Accelerometer.AccY -0.202393 +61:485.496 Sensors-Accelerometer.AccZ 0.989258 +61:555.681 Sensors-Magnetometer.MagX 0xfe71 +61:555.803 Sensors-Magnetometer.MagY 0x23c +61:555.923 Sensors-Magnetometer.MagZ 0xcd9 +61:565.495 Sensors-Accelerometer.AccX 0.0205078 +61:565.495 Sensors-Accelerometer.AccY -0.0163574 +61:565.495 Sensors-Accelerometer.AccZ 0.95459 +61:644.818 Sensors-Accelerometer.AccX -0.000732422 +61:644.818 Sensors-Accelerometer.AccY 0.124023 +61:644.818 Sensors-Accelerometer.AccZ 1.02295 +61:655.584 Sensors-Magnetometer.MagX 0xfe11 +61:655.706 Sensors-Magnetometer.MagY 0x23d +61:655.826 Sensors-Magnetometer.MagZ 0xd00 +61:703.227 Sensors-Light 0.471458 +61:755.611 Sensors-Magnetometer.MagX 0xfdcf +61:755.734 Sensors-Magnetometer.MagY 0x23d +61:755.853 Sensors-Magnetometer.MagZ 0xd07 +61:765.495 Sensors-Accelerometer.AccX -0.0319824 +61:765.495 Sensors-Accelerometer.AccY 0.255859 +61:765.495 Sensors-Accelerometer.AccZ 1.02686 +62:285.495 Sensors-Accelerometer.AccX -0.0739746 +62:285.495 Sensors-Accelerometer.AccY 0.101562 +62:285.495 Sensors-Accelerometer.AccZ 1.01611 +62:355.530 Sensors-Magnetometer.MagX 0xfe0d +62:355.652 Sensors-Magnetometer.MagY 0x247 +62:355.772 Sensors-Magnetometer.MagZ 0xcfe +62:365.495 Sensors-Accelerometer.AccX 0.0610352 +62:365.495 Sensors-Accelerometer.AccY -0.013916 +62:365.495 Sensors-Accelerometer.AccZ 0.96582 +62:405.532 Sensors-Magnetometer.MagX 0xfe4b +62:405.655 Sensors-Magnetometer.MagY 0x251 +62:405.774 Sensors-Magnetometer.MagZ 0xce1 +62:408.221 Sensors-Accelerometer.AccX 0.145508 +62:408.221 Sensors-Accelerometer.AccY -0.153076 +62:408.221 Sensors-Accelerometer.AccZ 0.981934 +62:453.226 Sensors-Light 0.579492 +62:485.496 Sensors-Accelerometer.AccX 0.103516 +62:485.496 Sensors-Accelerometer.AccY -0.288818 +62:485.496 Sensors-Accelerometer.AccZ 0.982422 +62:505.610 Sensors-Magnetometer.MagX 0xfea0 +62:505.733 Sensors-Magnetometer.MagY 0x24d +62:505.852 Sensors-Magnetometer.MagZ 0xcb3 +62:805.571 Sensors-Slider 0x0 +63:207.948 Sensors-Accelerometer.AccX 0.0595703 +63:207.948 Sensors-Accelerometer.AccY -0.185303 +63:207.948 Sensors-Accelerometer.AccZ 0.978027 +64:155.531 Sensors-Magnetometer.MagX 0xfe6b +64:155.653 Sensors-Magnetometer.MagY 0x24c +64:155.773 Sensors-Magnetometer.MagZ 0xcd8 +64:763.184 Sensors-Slider 0x0 +64:903.224 Sensors-Light 0.52462 +65:165.492 Sensors-Accelerometer.AccX 0.0488281 +65:165.492 Sensors-Accelerometer.AccY -0.113525 +65:165.492 Sensors-Accelerometer.AccZ 0.977539 +65:605.580 Sensors-Magnetometer.MagX 0xfe3a +65:605.702 Sensors-Magnetometer.MagY 0x286 +65:605.822 Sensors-Magnetometer.MagZ 0xccf +65:608.268 Sensors-Accelerometer.AccX 0.232422 +65:608.268 Sensors-Accelerometer.AccY -0.026123 +65:608.268 Sensors-Accelerometer.AccZ 0.924805 +65:653.227 Sensors-Light 0.411139 +65:685.495 Sensors-Accelerometer.AccX 0.349609 +65:685.495 Sensors-Accelerometer.AccY 0.0151367 +65:685.495 Sensors-Accelerometer.AccZ 0.967285 +65:705.624 Sensors-Magnetometer.MagX 0xfe2d +65:705.747 Sensors-Magnetometer.MagY 0x2c9 +65:705.866 Sensors-Magnetometer.MagZ 0xcb0 +65:765.495 Sensors-Accelerometer.AccX 0.501465 +65:765.495 Sensors-Accelerometer.AccY 0.0737305 +65:765.495 Sensors-Accelerometer.AccZ 0.84375 +65:803.226 Sensors-Light 0.305913 +65:805.933 Sensors-Magnetometer.MagX 0xfe14 +65:806.056 Sensors-Magnetometer.MagY 0x30e +65:806.175 Sensors-Magnetometer.MagZ 0xc80 +65:844.817 Sensors-Accelerometer.AccX 0.638184 +65:844.817 Sensors-Accelerometer.AccY 0.146973 +65:844.817 Sensors-Accelerometer.AccZ 0.787109 +65:925.496 Sensors-Accelerometer.AccX 0.6875 +65:925.496 Sensors-Accelerometer.AccY 0.231934 +65:925.496 Sensors-Accelerometer.AccZ 0.641113 +65:955.584 Sensors-Magnetometer.MagX 0xfdd1 +65:955.706 Sensors-Magnetometer.MagY 0x34c +65:955.826 Sensors-Magnetometer.MagZ 0xc4d +66:103.226 Sensors-Light 0.205585 +66:165.495 Sensors-Accelerometer.AccX 0.804688 +66:165.495 Sensors-Accelerometer.AccY 0.347656 +66:165.495 Sensors-Accelerometer.AccZ 0.506836 +66:255.585 Sensors-Magnetometer.MagX 0xfda2 +66:255.708 Sensors-Magnetometer.MagY 0x375 +66:255.827 Sensors-Magnetometer.MagZ 0xc0b +66:285.495 Sensors-Accelerometer.AccX 0.933105 +66:285.495 Sensors-Accelerometer.AccY 0.378906 +66:285.495 Sensors-Accelerometer.AccZ 0.445801 +66:325.495 Sensors-Accelerometer.AccX 0.77832 +66:325.495 Sensors-Accelerometer.AccY 0.355469 +66:325.495 Sensors-Accelerometer.AccZ 0.408203 +66:407.996 Sensors-Accelerometer.AccX 0.828125 +66:407.996 Sensors-Accelerometer.AccY 0.364258 +66:407.996 Sensors-Accelerometer.AccZ 0.302734 +66:505.646 Sensors-Magnetometer.MagX 0xfdaa +66:505.769 Sensors-Magnetometer.MagY 0x38f +66:505.888 Sensors-Magnetometer.MagZ 0xbd1 +66:525.495 Sensors-Accelerometer.AccX 0.689453 +66:525.495 Sensors-Accelerometer.AccY 0.325195 +66:525.495 Sensors-Accelerometer.AccZ 0.30957 +66:565.495 Sensors-Accelerometer.AccX 0.90918 +66:565.495 Sensors-Accelerometer.AccY 0.311035 +66:565.495 Sensors-Accelerometer.AccZ 0.240723 +66:723.184 Sensors-Slider 0x0 +66:807.937 Sensors-Accelerometer.AccX 0.770996 +66:807.937 Sensors-Accelerometer.AccY 0.245605 +66:807.937 Sensors-Accelerometer.AccZ 0.196777 +66:885.495 Sensors-Accelerometer.AccX 0.920898 +66:885.495 Sensors-Accelerometer.AccY 0.257812 +66:885.495 Sensors-Accelerometer.AccZ 0.291992 +66:965.495 Sensors-Accelerometer.AccX 0.808594 +66:965.495 Sensors-Accelerometer.AccY 0.237305 +66:965.495 Sensors-Accelerometer.AccZ 0.293945 +67:007.919 Sensors-Accelerometer.AccX 0.95459 +67:007.919 Sensors-Accelerometer.AccY 0.286133 +67:007.919 Sensors-Accelerometer.AccZ 0.285156 +67:053.227 Sensors-Light 0.488258 +67:103.226 Sensors-Light 0.750942 +67:165.495 Sensors-Accelerometer.AccX 0.853027 +67:165.495 Sensors-Accelerometer.AccY 0.286133 +67:165.495 Sensors-Accelerometer.AccZ 0.230957 +67:203.226 Sensors-Light 0.64033 +67:253.226 Sensors-Light 0.520088 +67:303.226 Sensors-Light 0.376349 +67:503.226 Sensors-Light 0.497627 +67:653.226 Sensors-Light 0.644862 +67:803.227 Sensors-Light 0.748791 +68:003.226 Sensors-Light 0.465141 +68:053.226 Sensors-Light 0.223102 +68:683.184 Sensors-Slider 0x0 +68:953.226 Sensors-Light 0.47303 +68:955.989 Sensors-Magnetometer.MagX 0xfdba +68:956.112 Sensors-Magnetometer.MagY 0x389 +68:956.231 Sensors-Magnetometer.MagZ 0xb9f +69:003.225 Sensors-Light 0.731655 +69:103.226 Sensors-Light 0.429664 +69:125.493 Sensors-Accelerometer.AccX 0.862305 +69:125.493 Sensors-Accelerometer.AccY 0.307129 +69:125.493 Sensors-Accelerometer.AccZ 0.243164 +69:153.226 Sensors-Light 0.236774 +69:753.226 Sensors-Light 0.348501 +69:853.226 Sensors-Light 0.55198 +69:903.226 Sensors-Light 0.688655 +69:953.226 Sensors-Light 0.791226 +70:053.225 Sensors-Light 0.48333 +70:103.226 Sensors-Light 0.187915 +70:643.183 Sensors-Slider 0x0 +70:753.226 Sensors-Light 0.524895 +70:803.226 Sensors-Light 0.746777 +70:953.226 Sensors-Light 0.567834 +71:085.492 Sensors-Accelerometer.AccX 0.922852 +71:085.492 Sensors-Accelerometer.AccY 0.291992 +71:085.492 Sensors-Accelerometer.AccZ 0.232422 +71:405.583 Sensors-Magnetometer.MagX 0xfdc0 +71:405.705 Sensors-Magnetometer.MagY 0x38f +71:405.825 Sensors-Magnetometer.MagZ 0xba8 +71:453.226 Sensors-Light 0.676951 +71:603.226 Sensors-Light 0.834699 +71:703.226 Sensors-Light 0.480552 +71:753.226 Sensors-Light 0.15993 +72:605.607 Sensors-Slider 0x0 +73:044.813 Sensors-Accelerometer.AccX 0.873535 +73:044.813 Sensors-Accelerometer.AccY 0.242188 +73:044.813 Sensors-Accelerometer.AccZ 0.214844 +73:125.496 Sensors-Accelerometer.AccX 0.910645 +73:125.496 Sensors-Accelerometer.AccY 0.233398 +73:125.496 Sensors-Accelerometer.AccZ 0.36084 +73:365.497 Sensors-Accelerometer.AccX 0.917969 +73:365.497 Sensors-Accelerometer.AccY 0.258789 +73:365.497 Sensors-Accelerometer.AccZ 0.260742 +73:407.945 Sensors-Accelerometer.AccX 0.817871 +73:407.945 Sensors-Accelerometer.AccY 0.223633 +73:407.945 Sensors-Accelerometer.AccZ 0.353027 +73:485.494 Sensors-Accelerometer.AccX 0.9375 +73:485.494 Sensors-Accelerometer.AccY 0.239258 +73:485.494 Sensors-Accelerometer.AccZ 0.34082 +73:525.494 Sensors-Accelerometer.AccX 0.782227 +73:525.494 Sensors-Accelerometer.AccY 0.217773 +73:525.494 Sensors-Accelerometer.AccZ 0.413086 +73:607.880 Sensors-Accelerometer.AccX 0.901367 +73:607.880 Sensors-Accelerometer.AccY 0.291992 +73:607.880 Sensors-Accelerometer.AccZ 0.356934 +73:644.816 Sensors-Accelerometer.AccX 1.19336 +73:644.816 Sensors-Accelerometer.AccY 0.114258 +73:644.816 Sensors-Accelerometer.AccZ 0.589844 +73:685.495 Sensors-Accelerometer.AccX 0.759766 +73:685.495 Sensors-Accelerometer.AccY 0.26123 +73:685.495 Sensors-Accelerometer.AccZ 0.335938 +73:725.499 Sensors-Accelerometer.AccX 0.811523 +73:725.499 Sensors-Accelerometer.AccY 0.190918 +73:725.499 Sensors-Accelerometer.AccZ 0.212891 +73:765.498 Sensors-Accelerometer.AccX 0.763672 +73:765.498 Sensors-Accelerometer.AccY 0.202148 +73:765.498 Sensors-Accelerometer.AccZ 0.44873 +73:855.609 Sensors-Magnetometer.MagX 0xfdb8 +73:855.731 Sensors-Magnetometer.MagY 0x388 +73:855.851 Sensors-Magnetometer.MagZ 0xbd4 +73:965.495 Sensors-Accelerometer.AccX 0.87793 +73:965.495 Sensors-Accelerometer.AccY 0.300781 +73:965.495 Sensors-Accelerometer.AccZ 0.379395 +74:043.194 Sensors-Slider 0x24 +74:083.194 Sensors-Slider 0x20 +74:123.194 Sensors-Slider 0x25 +74:163.193 Sensors-Slider 0x2b +74:203.225 Sensors-Light 0.231998 +74:206.019 Sensors-Slider 0x2f +74:243.194 Sensors-Slider 0x31 +74:244.930 Sensors-Accelerometer.AccX 0.844727 +74:244.930 Sensors-Accelerometer.AccY 0.200195 +74:244.930 Sensors-Accelerometer.AccZ 0.429199 +74:283.194 Sensors-Slider 0x32 +74:323.194 Sensors-Slider 0x34 +74:405.610 Sensors-Slider 0x37 +74:408.025 Sensors-Accelerometer.AccX 0.793457 +74:408.025 Sensors-Accelerometer.AccY 0.133789 +74:408.025 Sensors-Accelerometer.AccZ 0.556152 +74:443.194 Sensors-Slider 0x3a +74:523.194 Sensors-Slider 0x3c +74:555.584 Sensors-Magnetometer.MagX 0xfdeb +74:555.706 Sensors-Magnetometer.MagY 0x37d +74:555.826 Sensors-Magnetometer.MagZ 0xbeb +74:643.193 Sensors-Slider 0x3d +74:644.928 Sensors-Accelerometer.AccX 0.769043 +74:644.928 Sensors-Accelerometer.AccY 0.0292969 +74:644.928 Sensors-Accelerometer.AccZ 0.563965 +74:683.193 Sensors-Slider 0x3f +74:723.193 Sensors-Slider 0x40 +74:763.193 Sensors-Slider 0x41 +74:805.704 Sensors-Slider 0x45 +74:843.193 Sensors-Slider 0x4d +74:853.226 Sensors-Light 0.366888 +74:883.193 Sensors-Slider 0x52 +74:903.226 Sensors-Light 0.478981 +74:923.194 Sensors-Slider 0x51 +75:005.708 Sensors-Slider 0x52 +75:123.194 Sensors-Slider 0x51 +75:163.194 Sensors-Slider 0x50 +75:165.608 Sensors-Accelerometer.AccX 0.762695 +75:165.608 Sensors-Accelerometer.AccY 0.0766602 +75:165.608 Sensors-Accelerometer.AccZ 0.671875 +75:205.613 Sensors-Magnetometer.MagX 0xfde2 +75:205.736 Sensors-Magnetometer.MagY 0x369 +75:205.855 Sensors-Magnetometer.MagZ 0xc20 +75:206.000 Sensors-Slider 0x4f +75:243.193 Sensors-Slider 0x4d +75:244.927 Sensors-Accelerometer.AccX 0.639648 +75:244.927 Sensors-Accelerometer.AccY 0.0654297 +75:244.927 Sensors-Accelerometer.AccZ 0.689941 +75:283.193 Sensors-Slider 0x4c +75:323.193 Sensors-Slider 0x4b +75:363.194 Sensors-Slider 0x49 +75:365.609 Sensors-Accelerometer.AccX 0.647461 +75:365.609 Sensors-Accelerometer.AccY 0.0893555 +75:365.609 Sensors-Accelerometer.AccZ 0.794922 +75:403.226 Sensors-Light 0.366583 +75:405.944 Sensors-Slider 0x48 +75:443.194 Sensors-Slider 0x46 +75:483.194 Sensors-Slider 0x45 +75:523.193 Sensors-Slider 0x43 +75:563.193 Sensors-Slider 0x41 +75:605.649 Sensors-Slider 0x40 +75:608.065 Sensors-Accelerometer.AccX 0.650391 +75:608.065 Sensors-Accelerometer.AccY 0.132324 +75:608.065 Sensors-Accelerometer.AccZ 0.682617 +75:643.194 Sensors-Slider 0x3f +75:683.193 Sensors-Slider 0x3d +75:723.194 Sensors-Slider 0x3a +75:763.194 Sensors-Slider 0x36 +75:805.596 Sensors-Slider 0x34 +75:843.194 Sensors-Slider 0x32 +75:883.194 Sensors-Slider 0x31 +75:923.194 Sensors-Slider 0x2f +75:963.194 Sensors-Slider 0x2e +76:005.667 Sensors-Slider 0x2d +76:083.194 Sensors-Slider 0x2e +76:123.194 Sensors-Slider 0x30 +76:125.606 Sensors-Accelerometer.AccX 0.773438 +76:125.606 Sensors-Accelerometer.AccY 0.160645 +76:125.606 Sensors-Accelerometer.AccZ 0.597168 +76:163.194 Sensors-Slider 0x33 +76:205.589 Sensors-Slider 0x37 +76:243.194 Sensors-Slider 0x39 +76:283.194 Sensors-Slider 0x3a +76:323.193 Sensors-Slider 0x3c +76:363.193 Sensors-Slider 0x3e +76:405.674 Sensors-Slider 0x3f +76:443.193 Sensors-Slider 0x41 +76:483.193 Sensors-Slider 0x42 +76:523.194 Sensors-Slider 0x45 +76:563.193 Sensors-Slider 0x48 +76:605.704 Sensors-Slider 0x4f +76:643.193 Sensors-Slider 0x54 +76:683.192 Sensors-Slider 0x5f +76:725.504 Sensors-Accelerometer.AccX 0.740234 +76:725.504 Sensors-Accelerometer.AccY 0.0546875 +76:725.504 Sensors-Accelerometer.AccZ 0.638672 +76:843.193 Sensors-Slider 0x5d +76:883.193 Sensors-Slider 0x5c +76:923.192 Sensors-Slider 0x5e +76:963.185 Sensors-Slider 0x0 +77:007.912 Sensors-Accelerometer.AccX 0.45459 +77:007.912 Sensors-Accelerometer.AccY 0.0683594 +77:007.912 Sensors-Accelerometer.AccZ 0.64502 +77:044.814 Sensors-Accelerometer.AccX 0.749023 +77:044.814 Sensors-Accelerometer.AccY 0.103027 +77:044.814 Sensors-Accelerometer.AccZ 0.696289 +77:207.878 Sensors-Accelerometer.AccX 0.595215 +77:207.878 Sensors-Accelerometer.AccY 0.136719 +77:207.878 Sensors-Accelerometer.AccZ 0.672852 +77:285.495 Sensors-Accelerometer.AccX 0.700195 +77:285.495 Sensors-Accelerometer.AccY 0.196289 +77:285.495 Sensors-Accelerometer.AccZ 0.679199 +77:353.226 Sensors-Light 0.484276 +77:403.226 Sensors-Light 0.594293 +77:453.226 Sensors-Light 0.479927 +77:655.576 Sensors-Magnetometer.MagX 0xfdb9 +77:655.698 Sensors-Magnetometer.MagY 0x369 +77:655.817 Sensors-Magnetometer.MagZ 0xc36 +77:756.251 Buttons-SW1 0x1 +77:805.674 Sensors-Magnetometer.MagX 0xfdbb +77:805.797 Sensors-Magnetometer.MagY 0x355 +77:805.916 Sensors-Magnetometer.MagZ 0xc77 +77:806.061 Sensors-Slider 0x63 +77:808.473 Sensors-Accelerometer.AccX 0.538574 +77:808.473 Sensors-Accelerometer.AccY 0.172852 +77:808.473 Sensors-Accelerometer.AccZ 0.706543 +77:883.184 Sensors-Slider 0x0 +77:885.597 Sensors-Accelerometer.AccX 0.59082 +77:885.597 Sensors-Accelerometer.AccY 0.125 +77:885.597 Sensors-Accelerometer.AccZ 0.813477 +77:914.423 Buttons-SW1 0x0 +77:965.494 Sensors-Accelerometer.AccX 0.754883 +77:965.494 Sensors-Accelerometer.AccY 0.239258 +77:965.494 Sensors-Accelerometer.AccZ 0.692383 +78:007.919 Sensors-Accelerometer.AccX 0.938477 +78:007.919 Sensors-Accelerometer.AccY 0.186035 +78:007.919 Sensors-Accelerometer.AccZ 0.822266 +78:044.816 Sensors-Accelerometer.AccX 0.569336 +78:044.816 Sensors-Accelerometer.AccY 0.18457 +78:044.816 Sensors-Accelerometer.AccZ 0.738281 +78:103.226 Sensors-Light 0.268879 +78:165.498 Sensors-Accelerometer.AccX 0.637207 +78:165.498 Sensors-Accelerometer.AccY 0.138672 +78:165.498 Sensors-Accelerometer.AccZ 0.636719 +78:244.819 Sensors-Accelerometer.AccX 0.614746 +78:244.819 Sensors-Accelerometer.AccY 0.251465 +78:244.819 Sensors-Accelerometer.AccZ 1.29053 +78:255.586 Sensors-Magnetometer.MagX 0xfdc5 +78:255.709 Sensors-Magnetometer.MagY 0x35a +78:255.828 Sensors-Magnetometer.MagZ 0xc3b +78:285.498 Sensors-Accelerometer.AccX 0.62207 +78:285.498 Sensors-Accelerometer.AccY 0.264648 +78:285.498 Sensors-Accelerometer.AccZ 0.680664 +78:325.495 Sensors-Accelerometer.AccX 0.657227 +78:325.495 Sensors-Accelerometer.AccY 0.155273 +78:325.495 Sensors-Accelerometer.AccZ 0.55957 +78:365.497 Sensors-Accelerometer.AccX 0.609375 +78:365.497 Sensors-Accelerometer.AccY 0.181641 +78:365.497 Sensors-Accelerometer.AccZ 0.685547 +78:525.494 Sensors-Accelerometer.AccX 0.762695 +78:525.494 Sensors-Accelerometer.AccY 0.202148 +78:525.494 Sensors-Accelerometer.AccZ 0.727539 +78:644.819 Sensors-Accelerometer.AccX 0.786133 +78:644.819 Sensors-Accelerometer.AccY 0.172852 +78:644.819 Sensors-Accelerometer.AccZ 0.595703 +78:685.494 Sensors-Accelerometer.AccX 0.661133 +78:685.494 Sensors-Accelerometer.AccY 0.159668 +78:685.494 Sensors-Accelerometer.AccZ 0.540527 +78:725.495 Sensors-Accelerometer.AccX 0.789062 +78:725.495 Sensors-Accelerometer.AccY 0.131348 +78:725.495 Sensors-Accelerometer.AccZ 0.556152 +78:739.447 Buttons-SW3 0x1 +78:755.673 Sensors-Magnetometer.MagX 0xfdfc +78:755.796 Sensors-Magnetometer.MagY 0x34e +78:755.915 Sensors-Magnetometer.MagZ 0xc0c +78:965.493 Sensors-Accelerometer.AccX 0.665039 +78:965.493 Sensors-Accelerometer.AccY 0.0732422 +78:965.493 Sensors-Accelerometer.AccZ 0.562012 +79:044.817 Sensors-Accelerometer.AccX 0.757812 +79:044.817 Sensors-Accelerometer.AccY -0.0378418 +79:044.817 Sensors-Accelerometer.AccZ 0.802246 +79:085.494 Sensors-Accelerometer.AccX 0.654297 +79:085.494 Sensors-Accelerometer.AccY 0.0317383 +79:085.494 Sensors-Accelerometer.AccZ 0.638672 +79:125.498 Sensors-Accelerometer.AccX 0.655762 +79:125.498 Sensors-Accelerometer.AccY -0.0305176 +79:125.498 Sensors-Accelerometer.AccZ 0.75293 +79:150.553 Buttons-SW3 0x0 +79:155.596 Sensors-Magnetometer.MagX 0xfe32 +79:155.718 Sensors-Magnetometer.MagY 0x334 +79:155.838 Sensors-Magnetometer.MagZ 0xc35 +79:207.880 Sensors-Accelerometer.AccX 0.543457 +79:207.880 Sensors-Accelerometer.AccY -0.0534668 +79:207.880 Sensors-Accelerometer.AccZ 0.860352 +79:244.816 Sensors-Accelerometer.AccX 0.664062 +79:244.816 Sensors-Accelerometer.AccY -0.0065918 +79:244.816 Sensors-Accelerometer.AccZ 0.720703 +79:345.094 Buttons-SW3 0x1 +79:485.497 Sensors-Accelerometer.AccX 0.603027 +79:485.497 Sensors-Accelerometer.AccY 0.00244141 +79:485.497 Sensors-Accelerometer.AccZ 0.511719 +79:487.806 Buttons-SW3 0x0 +79:525.498 Sensors-Accelerometer.AccX 0.553711 +79:525.498 Sensors-Accelerometer.AccY -0.095459 +79:525.498 Sensors-Accelerometer.AccZ 0.749512 +79:598.547 Buttons-SW3 0x1 +79:644.816 Sensors-Accelerometer.AccX 0.667969 +79:644.816 Sensors-Accelerometer.AccY -0.0319824 +79:644.816 Sensors-Accelerometer.AccZ 0.787109 +79:725.494 Sensors-Accelerometer.AccX 0.521973 +79:725.494 Sensors-Accelerometer.AccY -0.0310059 +79:725.494 Sensors-Accelerometer.AccZ 0.747559 +79:727.682 Buttons-SW3 0x0 +79:807.919 Sensors-Accelerometer.AccX 0.645508 +79:807.919 Sensors-Accelerometer.AccY -0.0661621 +79:807.919 Sensors-Accelerometer.AccZ 0.686523 +79:825.219 Buttons-SW3 0x1 +79:843.184 Sensors-Slider 0x0 +79:844.918 Sensors-Accelerometer.AccX 0.572754 +79:844.918 Sensors-Accelerometer.AccY -0.057373 +79:844.918 Sensors-Accelerometer.AccZ 0.798828 +79:950.589 Buttons-SW3 0x0 +80:007.983 Sensors-Accelerometer.AccX 0.677734 +80:007.983 Sensors-Accelerometer.AccY -0.0358887 +80:007.983 Sensors-Accelerometer.AccZ 0.680176 +80:021.640 Buttons-SW3 0x1 +80:085.500 Sensors-Accelerometer.AccX 0.706055 +80:085.500 Sensors-Accelerometer.AccY 0.0322266 +80:085.500 Sensors-Accelerometer.AccZ 0.82959 +80:125.498 Sensors-Accelerometer.AccX 0.643555 +80:125.498 Sensors-Accelerometer.AccY 0.000488281 +80:125.498 Sensors-Accelerometer.AccZ 0.671875 +80:156.069 Buttons-SW3 0x0 +80:244.816 Sensors-Accelerometer.AccX 0.473633 +80:244.816 Sensors-Accelerometer.AccY 0.0151367 +80:244.816 Sensors-Accelerometer.AccZ 0.779297 +80:285.495 Sensors-Accelerometer.AccX 0.77832 +80:285.495 Sensors-Accelerometer.AccY 0.0537109 +80:285.495 Sensors-Accelerometer.AccZ 0.636719 +80:325.495 Sensors-Accelerometer.AccX 0.641602 +80:325.495 Sensors-Accelerometer.AccY 0.0898438 +80:325.495 Sensors-Accelerometer.AccZ 0.793457 +80:355.577 Sensors-Magnetometer.MagX 0xfdfe +80:355.700 Sensors-Magnetometer.MagY 0x347 +80:355.820 Sensors-Magnetometer.MagZ 0xc3f +80:407.988 Sensors-Accelerometer.AccX 0.564453 +80:407.988 Sensors-Accelerometer.AccY 0.125977 +80:407.988 Sensors-Accelerometer.AccZ 0.901367 +80:485.497 Sensors-Accelerometer.AccX 0.641602 +80:485.497 Sensors-Accelerometer.AccY 0.132324 +80:485.497 Sensors-Accelerometer.AccZ 0.652344 +80:553.224 Sensors-Light 0.461479 +80:603.226 Sensors-Light 0.571557 +80:703.226 Sensors-Light 0.458045 +80:965.499 Sensors-Accelerometer.AccX 0.700195 +80:965.499 Sensors-Accelerometer.AccY 0.121094 +80:965.499 Sensors-Accelerometer.AccZ 0.781738 +81:007.922 Sensors-Accelerometer.AccX 0.679688 +81:007.922 Sensors-Accelerometer.AccY 0.125977 +81:007.922 Sensors-Accelerometer.AccZ 0.65918 +81:053.227 Sensors-Light 0.564675 +81:085.497 Sensors-Accelerometer.AccX 0.697266 +81:085.497 Sensors-Accelerometer.AccY 0.125977 +81:085.497 Sensors-Accelerometer.AccZ 0.762695 +81:193.813 Buttons-SW1 0x1 +81:207.995 Sensors-Accelerometer.AccX 0.589844 +81:207.995 Sensors-Accelerometer.AccY 0.113281 +81:207.995 Sensors-Accelerometer.AccZ 0.783691 +81:243.193 Sensors-Slider 0x63 +81:253.226 Sensors-Light 0.6701 +81:305.592 Sensors-Magnetometer.MagX 0xfdec +81:305.715 Sensors-Magnetometer.MagY 0x32b +81:305.834 Sensors-Magnetometer.MagZ 0xc72 +81:323.185 Sensors-Slider 0x0 +81:341.032 Buttons-SW1 0x0 +81:444.816 Sensors-Accelerometer.AccX 0.692871 +81:444.816 Sensors-Accelerometer.AccY 0.0537109 +81:444.816 Sensors-Accelerometer.AccZ 0.90918 +81:485.493 Sensors-Accelerometer.AccX 0.507812 +81:485.493 Sensors-Accelerometer.AccY 0.132812 +81:485.493 Sensors-Accelerometer.AccZ 0.758301 +81:493.310 Buttons-SW1 0x1 +81:607.879 Sensors-Accelerometer.AccX 0.611816 +81:607.879 Sensors-Accelerometer.AccY 0.0751953 +81:607.879 Sensors-Accelerometer.AccZ 0.910156 +81:624.919 Buttons-SW1 0x0 +81:644.820 Sensors-Accelerometer.AccX 0.515137 +81:644.820 Sensors-Accelerometer.AccY 0.0810547 +81:644.820 Sensors-Accelerometer.AccZ 0.751465 +81:725.498 Sensors-Accelerometer.AccX 0.585938 +81:725.498 Sensors-Accelerometer.AccY 0.0844727 +81:725.498 Sensors-Accelerometer.AccZ 0.950195 +81:748.563 Buttons-SW1 0x1 +81:765.500 Sensors-Accelerometer.AccX 0.496582 +81:765.500 Sensors-Accelerometer.AccY 0.0634766 +81:765.500 Sensors-Accelerometer.AccZ 0.768066 +81:808.015 Sensors-Accelerometer.AccX 0.503906 +81:808.015 Sensors-Accelerometer.AccY 0.059082 +81:808.015 Sensors-Accelerometer.AccZ 0.939941 +81:885.498 Sensors-Accelerometer.AccX 0.40918 +81:885.498 Sensors-Accelerometer.AccY 0.115723 +81:885.498 Sensors-Accelerometer.AccZ 0.625488 +81:900.016 Buttons-SW1 0x0 +81:925.498 Sensors-Accelerometer.AccX 0.499512 +81:925.498 Sensors-Accelerometer.AccY 0.0966797 +81:925.498 Sensors-Accelerometer.AccZ 0.896973 +82:085.493 Sensors-Accelerometer.AccX 0.753418 +82:085.493 Sensors-Accelerometer.AccY 0.120117 +82:085.493 Sensors-Accelerometer.AccZ 0.855957 +82:103.225 Sensors-Light 0.365667 +82:125.493 Sensors-Accelerometer.AccX 0.334961 +82:125.493 Sensors-Accelerometer.AccY 0.0830078 +82:125.493 Sensors-Accelerometer.AccZ 0.8125 +82:165.495 Sensors-Accelerometer.AccX 0.479492 +82:165.495 Sensors-Accelerometer.AccY 0.046875 +82:165.495 Sensors-Accelerometer.AccZ 0.835938 +82:244.817 Sensors-Accelerometer.AccX 0.709961 +82:244.817 Sensors-Accelerometer.AccY 0.0483398 +82:244.817 Sensors-Accelerometer.AccZ 0.491699 +82:285.493 Sensors-Accelerometer.AccX 0.547852 +82:285.493 Sensors-Accelerometer.AccY 0.106445 +82:285.493 Sensors-Accelerometer.AccZ 0.784668 +82:365.494 Sensors-Accelerometer.AccX 0.658203 +82:365.494 Sensors-Accelerometer.AccY 0.0214844 +82:365.494 Sensors-Accelerometer.AccZ 1.0249 +82:407.972 Sensors-Accelerometer.AccX 0.559082 +82:407.972 Sensors-Accelerometer.AccY 0.0473633 +82:407.972 Sensors-Accelerometer.AccZ 0.878418 +82:444.820 Sensors-Accelerometer.AccX 0.584961 +82:444.820 Sensors-Accelerometer.AccY 0.046875 +82:444.820 Sensors-Accelerometer.AccZ 0.765625 +83:012.582 Buttons-SW3 0x1 +83:174.587 Buttons-SW3 0x0 +83:283.184 Sensors-Slider 0x0 +83:714.585 Buttons-SW3 0x1 +83:755.544 Sensors-Magnetometer.MagX 0xfe09 +83:755.666 Sensors-Magnetometer.MagY 0x32f +83:755.786 Sensors-Magnetometer.MagZ 0xc59 +83:841.020 Buttons-SW3 0x0 +84:217.536 Buttons-SW3 0x1 +84:318.240 Buttons-SW3 0x0 +84:407.862 Sensors-Accelerometer.AccX 0.602539 +84:407.862 Sensors-Accelerometer.AccY 0.0317383 +84:407.862 Sensors-Accelerometer.AccZ 0.773438 +84:553.225 Sensors-Light 0.371649 +84:603.088 Buttons-SW3 0x1 +84:677.101 Buttons-SW3 0x0 +85:030.842 Buttons-SW3 0x1 +85:120.657 Buttons-SW3 0x0 +85:243.184 Sensors-Slider 0x0 +85:603.227 Sensors-Light 0.473671 +85:653.226 Sensors-Light 0.603006 +85:885.499 Sensors-Accelerometer.AccX 0.669922 +85:885.499 Sensors-Accelerometer.AccY 0.043457 +85:885.499 Sensors-Accelerometer.AccZ 0.900879 +85:925.499 Sensors-Accelerometer.AccX 0.668945 +85:925.499 Sensors-Accelerometer.AccY 0.0307617 +85:925.499 Sensors-Accelerometer.AccZ 0.708984 +86:205.598 Sensors-Magnetometer.MagX 0xfe19 +86:205.720 Sensors-Magnetometer.MagY 0x328 +86:205.840 Sensors-Magnetometer.MagZ 0xc4e +86:353.226 Sensors-Light 0.703151 +86:365.494 Sensors-Accelerometer.AccX 0.541992 +86:365.494 Sensors-Accelerometer.AccY 0.0727539 +86:365.494 Sensors-Accelerometer.AccZ 0.800781 +86:565.494 Sensors-Accelerometer.AccX 0.662598 +86:565.494 Sensors-Accelerometer.AccY 0.0415039 +86:565.494 Sensors-Accelerometer.AccZ 0.867188 +86:607.918 Sensors-Accelerometer.AccX 0.494629 +86:607.918 Sensors-Accelerometer.AccY 0.0380859 +86:607.918 Sensors-Accelerometer.AccZ 0.794434 +86:685.496 Sensors-Accelerometer.AccX 0.579102 +86:685.496 Sensors-Accelerometer.AccY 0.0966797 +86:685.496 Sensors-Accelerometer.AccZ 0.894531 +86:725.497 Sensors-Accelerometer.AccX 0.550781 +86:725.497 Sensors-Accelerometer.AccY 0.0517578 +86:725.497 Sensors-Accelerometer.AccZ 0.79248 +87:205.673 Sensors-Slider 0x0 +87:523.193 Sensors-Slider 0x64 +87:563.193 Sensors-Slider 0x63 +87:683.185 Sensors-Slider 0x0 +87:923.192 Sensors-Slider 0x63 +87:939.000 Buttons-SW1 0x1 +88:230.416 Buttons-SW1 0x0 +88:243.185 Sensors-Slider 0x0 +88:563.193 Sensors-Slider 0x64 +88:605.693 Sensors-Slider 0x63 +88:655.607 Sensors-Magnetometer.MagX 0xfe07 +88:655.730 Sensors-Magnetometer.MagY 0x32e +88:655.849 Sensors-Magnetometer.MagZ 0xc55 +88:685.500 Sensors-Accelerometer.AccX 0.588867 +88:685.500 Sensors-Accelerometer.AccY 0.0400391 +88:685.500 Sensors-Accelerometer.AccZ 0.792969 +88:707.985 Buttons-SW1 0x1 +88:803.225 Sensors-Light 0.681895 +88:843.193 Sensors-Slider 0x61 +88:883.193 Sensors-Slider 0x63 +89:043.185 Sensors-Slider 0x0 +89:051.359 Buttons-SW1 0x0 +89:323.193 Sensors-Slider 0x63 +89:531.225 Buttons-SW1 0x1 +89:913.368 Buttons-SW1 0x0 +89:923.185 Sensors-Slider 0x0 +89:963.193 Sensors-Slider 0x63 +90:281.728 Buttons-SW1 0x1 +90:283.192 Sensors-Slider 0x61 +90:323.193 Sensors-Slider 0x63 +90:443.193 Sensors-Slider 0x62 +90:483.193 Sensors-Slider 0x63 +90:644.823 Sensors-Accelerometer.AccX 0.576172 +90:644.823 Sensors-Accelerometer.AccY 0.0546875 +90:644.823 Sensors-Accelerometer.AccZ 0.811523 +90:697.091 Buttons-SW1 0x0 +90:723.185 Sensors-Slider 0x0 +90:853.226 Sensors-Light 0.788525 +90:923.193 Sensors-Slider 0x63 +91:090.808 Buttons-SW1 0x1 +91:105.544 Sensors-Magnetometer.MagX 0xfe05 +91:105.666 Sensors-Magnetometer.MagY 0x32a +91:105.786 Sensors-Magnetometer.MagZ 0xc61 +91:163.193 Sensors-Slider 0x62 +91:483.193 Sensors-Slider 0x63 +91:543.046 Buttons-SW1 0x0 +91:553.227 Sensors-Light 0.688182 +91:563.185 Sensors-Slider 0x0 +91:963.193 Sensors-Slider 0x63 +91:996.254 Buttons-SW1 0x1 +92:083.193 Sensors-Slider 0x62 +92:123.192 Sensors-Slider 0x63 +92:205.633 Sensors-Slider 0x62 +92:283.193 Sensors-Slider 0x63 +92:363.193 Sensors-Slider 0x62 +92:405.579 Sensors-Slider 0x61 +92:443.193 Sensors-Slider 0x63 +92:607.987 Sensors-Accelerometer.AccX 0.563477 +92:607.987 Sensors-Accelerometer.AccY 0.0454102 +92:607.987 Sensors-Accelerometer.AccZ 0.816406 +92:653.227 Sensors-Light 0.789639 +92:952.441 Buttons-SW1 0x0 +92:963.184 Sensors-Slider 0x0 +93:523.193 Sensors-Slider 0x63 +93:555.611 Sensors-Magnetometer.MagX 0xfe06 +93:555.734 Sensors-Magnetometer.MagY 0x32a +93:555.853 Sensors-Magnetometer.MagZ 0xc57 +93:591.892 Buttons-SW1 0x1 +93:605.636 Sensors-Slider 0x62 +94:283.192 Sensors-Slider 0x61 +94:323.193 Sensors-Slider 0x62 +94:565.501 Sensors-Accelerometer.AccX 0.583984 +94:565.501 Sensors-Accelerometer.AccY 0.0444336 +94:565.501 Sensors-Accelerometer.AccZ 0.807617 +94:723.185 Sensors-Slider 0x0 +94:765.497 Sensors-Accelerometer.AccX 0.606445 +94:765.497 Sensors-Accelerometer.AccY 0.0571289 +94:765.497 Sensors-Accelerometer.AccZ 0.913086 +94:779.710 Buttons-SW1 0x0 +94:803.226 Sensors-Light 0.628473 +94:808.242 Sensors-Accelerometer.AccX 0.625 +94:808.242 Sensors-Accelerometer.AccY 0.0786133 +94:808.242 Sensors-Accelerometer.AccZ 0.726074 +94:844.819 Sensors-Accelerometer.AccX 0.561523 +94:844.819 Sensors-Accelerometer.AccY 0.0473633 +94:844.819 Sensors-Accelerometer.AccZ 0.832031 +95:125.498 Sensors-Accelerometer.AccX 0.448242 +95:125.498 Sensors-Accelerometer.AccY 0.043457 +95:125.498 Sensors-Accelerometer.AccZ 0.875488 +95:153.226 Sensors-Light 0.401831 +95:163.193 Sensors-Slider 0x61 +95:165.605 Sensors-Accelerometer.AccX 0.584961 +95:165.605 Sensors-Accelerometer.AccY 0.0761719 +95:165.605 Sensors-Accelerometer.AccZ 0.790527 +95:205.611 Sensors-Slider 0x60 +95:243.193 Sensors-Slider 0x5f +95:283.193 Sensors-Slider 0x59 +95:323.193 Sensors-Slider 0x55 +95:363.193 Sensors-Slider 0x51 +95:405.564 Sensors-Slider 0x4b +95:443.193 Sensors-Slider 0x46 +95:483.193 Sensors-Slider 0x43 +95:523.193 Sensors-Slider 0x40 +95:563.193 Sensors-Slider 0x3e +95:605.646 Sensors-Slider 0x3a +95:643.194 Sensors-Slider 0x37 +95:683.194 Sensors-Slider 0x34 +95:723.194 Sensors-Slider 0x2f +95:763.194 Sensors-Slider 0x2b +95:843.194 Sensors-Slider 0x2e +95:883.194 Sensors-Slider 0x34 +95:923.193 Sensors-Slider 0x37 +95:963.194 Sensors-Slider 0x3a +96:005.546 Sensors-Magnetometer.MagX 0xfdfc +96:005.669 Sensors-Magnetometer.MagY 0x32f +96:005.788 Sensors-Magnetometer.MagZ 0xc44 +96:043.193 Sensors-Slider 0x45 +96:044.925 Sensors-Accelerometer.AccX 0.79541 +96:044.925 Sensors-Accelerometer.AccY 0.0727539 +96:044.925 Sensors-Accelerometer.AccZ 0.760254 +96:083.193 Sensors-Slider 0x46 +96:085.606 Sensors-Accelerometer.AccX 0.612793 +96:085.606 Sensors-Accelerometer.AccY 0.0703125 +96:085.606 Sensors-Accelerometer.AccZ 0.748047 +96:123.194 Sensors-Slider 0x45 +96:163.194 Sensors-Slider 0x44 +96:205.694 Sensors-Slider 0x42 +96:243.193 Sensors-Slider 0x3f +96:283.193 Sensors-Slider 0x3d +96:323.194 Sensors-Slider 0x39 +96:363.194 Sensors-Slider 0x34 +96:405.581 Sensors-Slider 0x33 +96:443.194 Sensors-Slider 0x36 +96:483.194 Sensors-Slider 0x39 +96:523.193 Sensors-Slider 0x3d +96:563.194 Sensors-Slider 0x41 +96:605.703 Sensors-Slider 0x44 +96:643.194 Sensors-Slider 0x47 +96:683.194 Sensors-Slider 0x4a +96:723.193 Sensors-Slider 0x4c +96:805.617 Sensors-Slider 0x4b +96:843.193 Sensors-Slider 0x48 +96:883.194 Sensors-Slider 0x41 +96:923.194 Sensors-Slider 0x3a +96:953.226 Sensors-Light 0.503319 +96:965.503 Sensors-Accelerometer.AccX 0.481445 +96:965.503 Sensors-Accelerometer.AccY 0.0693359 +96:965.503 Sensors-Accelerometer.AccZ 0.566406 +97:005.687 Sensors-Slider 0x3c +97:043.193 Sensors-Slider 0x3e +97:044.925 Sensors-Accelerometer.AccX 0.355469 +97:044.925 Sensors-Accelerometer.AccY 0 +97:044.925 Sensors-Accelerometer.AccZ 0.558105 +97:083.193 Sensors-Slider 0x3d +97:085.607 Sensors-Accelerometer.AccX 0.318359 +97:085.607 Sensors-Accelerometer.AccY 0.0341797 +97:085.607 Sensors-Accelerometer.AccZ 0.731445 +97:103.227 Sensors-Light 0.651118 +97:106.014 Sensors-Magnetometer.MagX 0xfe1a +97:106.136 Sensors-Magnetometer.MagY 0x2f7 +97:106.256 Sensors-Magnetometer.MagZ 0xc7e +97:125.503 Sensors-Accelerometer.AccX 0.387695 +97:125.503 Sensors-Accelerometer.AccY 0.165039 +97:125.503 Sensors-Accelerometer.AccZ 0.830566 +97:165.505 Sensors-Accelerometer.AccX 0.344727 +97:165.505 Sensors-Accelerometer.AccY 0.0615234 +97:165.505 Sensors-Accelerometer.AccZ 1.03516 +97:203.227 Sensors-Light 0.768582 +97:208.358 Sensors-Accelerometer.AccX 0.431152 +97:208.358 Sensors-Accelerometer.AccY 0.129395 +97:208.358 Sensors-Accelerometer.AccZ 1.18799 +97:255.583 Sensors-Magnetometer.MagX 0xfe23 +97:255.705 Sensors-Magnetometer.MagY 0x2b1 +97:255.825 Sensors-Magnetometer.MagZ 0xc9b +97:283.194 Sensors-Slider 0x3c +97:285.606 Sensors-Accelerometer.AccX 0.315918 +97:285.606 Sensors-Accelerometer.AccY -0.0349121 +97:285.606 Sensors-Accelerometer.AccZ 1.09521 +97:323.194 Sensors-Slider 0x3a +97:325.606 Sensors-Accelerometer.AccX 0.288086 +97:325.606 Sensors-Accelerometer.AccY 0.142578 +97:325.606 Sensors-Accelerometer.AccZ 0.900879 +97:355.531 Sensors-Magnetometer.MagX 0xfe3a +97:355.654 Sensors-Magnetometer.MagY 0x26c +97:355.773 Sensors-Magnetometer.MagZ 0xcbb +97:365.507 Sensors-Accelerometer.AccX 0.225586 +97:365.507 Sensors-Accelerometer.AccY 0.0727539 +97:365.507 Sensors-Accelerometer.AccZ 1.13232 +97:443.193 Sensors-Slider 0x3f +97:444.926 Sensors-Accelerometer.AccX 0.0839844 +97:444.926 Sensors-Accelerometer.AccY 0.0708008 +97:444.926 Sensors-Accelerometer.AccZ 0.956543 +97:483.185 Sensors-Slider 0x0 +97:485.595 Sensors-Accelerometer.AccX 0.178223 +97:485.595 Sensors-Accelerometer.AccY -0.0490723 +97:485.595 Sensors-Accelerometer.AccZ 1.06348 +97:565.497 Sensors-Accelerometer.AccX 0.120605 +97:565.497 Sensors-Accelerometer.AccY 0.0561523 +97:565.497 Sensors-Accelerometer.AccZ 0.949707 +97:607.946 Sensors-Accelerometer.AccX 0.118652 +97:607.946 Sensors-Accelerometer.AccY 0.0463867 +97:607.946 Sensors-Accelerometer.AccZ 1.08057 +97:765.494 Sensors-Accelerometer.AccX 0.23877 +97:765.494 Sensors-Accelerometer.AccY 0.0527344 +97:765.494 Sensors-Accelerometer.AccZ 0.992188 +97:807.880 Sensors-Accelerometer.AccX 0.0786133 +97:807.880 Sensors-Accelerometer.AccY -0.0192871 +97:807.880 Sensors-Accelerometer.AccZ 0.921387 +97:855.585 Sensors-Magnetometer.MagX 0xfe2c +97:855.708 Sensors-Magnetometer.MagY 0x234 +97:855.827 Sensors-Magnetometer.MagZ 0xcc1 +97:885.496 Sensors-Accelerometer.AccX 0.140137 +97:885.496 Sensors-Accelerometer.AccY -0.0285645 +97:885.496 Sensors-Accelerometer.AccZ 0.585938 +97:925.498 Sensors-Accelerometer.AccX 0.0688477 +97:925.498 Sensors-Accelerometer.AccY 0.0126953 +97:925.498 Sensors-Accelerometer.AccZ 1.521 +97:965.496 Sensors-Accelerometer.AccX 0.074707 +97:965.496 Sensors-Accelerometer.AccY 0.000488281 +97:965.496 Sensors-Accelerometer.AccZ 1.00684 +99:083.194 Sensors-Slider 0x2f +99:123.194 Sensors-Slider 0x28 +99:163.194 Sensors-Slider 0x20 +99:205.601 Sensors-Slider 0x1e +99:243.193 Sensors-Slider 0x1c +99:283.194 Sensors-Slider 0x18 +99:323.194 Sensors-Slider 0x14 +99:363.194 Sensors-Slider 0x11 +99:405.642 Sensors-Slider 0x10 +99:443.194 Sensors-Slider 0x11 +99:483.193 Sensors-Slider 0x12 +99:523.193 Sensors-Slider 0x13 +99:563.193 Sensors-Slider 0x14 +99:605.644 Sensors-Slider 0x15 +99:653.224 Sensors-Light 0.786954 +99:683.193 Sensors-Slider 0x16 +99:805.581 Sensors-Slider 0x17 +99:843.185 Sensors-Slider 0x0 +99:923.194 Sensors-Slider 0x33 +99:925.603 Sensors-Accelerometer.AccX 0.00292969 +99:925.603 Sensors-Accelerometer.AccY 0.00683594 +99:925.603 Sensors-Accelerometer.AccZ 1.01074 +99:963.193 Sensors-Slider 0x32 +100:005.697 Sensors-Slider 0x0 +100:305.602 Sensors-Magnetometer.MagX 0xfe25 +100:305.727 Sensors-Magnetometer.MagY 0x21e +100:305.848 Sensors-Magnetometer.MagZ 0xccf +101:885.492 Sensors-Accelerometer.AccX 0.0126953 +101:885.492 Sensors-Accelerometer.AccY 0.00390625 +101:885.492 Sensors-Accelerometer.AccZ 0.999023 +101:925.495 Sensors-Accelerometer.AccX -0.117432 +101:925.495 Sensors-Accelerometer.AccY 0.0625 +101:925.495 Sensors-Accelerometer.AccZ 1.0249 +101:963.184 Sensors-Slider 0x0 +101:965.595 Sensors-Accelerometer.AccX 0.00976562 +101:965.595 Sensors-Accelerometer.AccY 0.00878906 +101:965.595 Sensors-Accelerometer.AccZ 1.00488 +102:103.225 Sensors-Light 0.807767 +102:303.226 Sensors-Light 0.669718 +102:453.226 Sensors-Light 0.568551 +102:755.594 Sensors-Magnetometer.MagX 0xfe20 +102:755.718 Sensors-Magnetometer.MagY 0x213 +102:755.839 Sensors-Magnetometer.MagZ 0xce0 +103:753.226 Sensors-Light 0.698955 +103:923.183 Sensors-Slider 0x0 +103:925.593 Sensors-Accelerometer.AccX 0.0107422 +103:925.593 Sensors-Accelerometer.AccY 0.00488281 +103:925.593 Sensors-Accelerometer.AccZ 1.00098 +104:803.226 Sensors-Light 0.807919 +104:903.226 Sensors-Light 0.69543 +104:953.227 Sensors-Light 0.579599 +105:205.643 Sensors-Magnetometer.MagX 0xfe27 +105:205.768 Sensors-Magnetometer.MagY 0x21f +105:205.889 Sensors-Magnetometer.MagZ 0xcc4 +105:883.184 Sensors-Slider 0x0 +105:885.592 Sensors-Accelerometer.AccX 0.00976562 +105:885.592 Sensors-Accelerometer.AccY 0.00683594 +105:885.592 Sensors-Accelerometer.AccZ 1.00146 +106:153.227 Sensors-Light 0.69102 +106:203.226 Sensors-Light 0.802258 +107:103.227 Sensors-Light 0.660014 +107:203.226 Sensors-Light 0.536812 +107:655.639 Sensors-Magnetometer.MagX 0xfe29 +107:655.763 Sensors-Magnetometer.MagY 0x215 +107:655.884 Sensors-Magnetometer.MagZ 0xccd +107:843.184 Sensors-Slider 0x0 +107:844.915 Sensors-Accelerometer.AccX 0.00878906 +107:844.915 Sensors-Accelerometer.AccY 0.0117188 +107:844.915 Sensors-Accelerometer.AccZ 1.00293 +108:525.494 Sensors-Accelerometer.AccX -0.260498 +108:525.494 Sensors-Accelerometer.AccY -0.0270996 +108:525.494 Sensors-Accelerometer.AccZ 0.836426 +108:565.495 Sensors-Accelerometer.AccX -0.0134277 +108:565.495 Sensors-Accelerometer.AccY 0.0717773 +108:565.495 Sensors-Accelerometer.AccZ 1.02686 +108:685.495 Sensors-Accelerometer.AccX -0.00756836 +108:685.495 Sensors-Accelerometer.AccY 0.180176 +108:685.495 Sensors-Accelerometer.AccZ 0.952148 +108:755.547 Sensors-Magnetometer.MagX 0xfdef +108:755.672 Sensors-Magnetometer.MagY 0x1df +108:755.793 Sensors-Magnetometer.MagZ 0xce5 +108:765.493 Sensors-Accelerometer.AccX -0.19751 +108:765.493 Sensors-Accelerometer.AccY 0.260742 +108:765.493 Sensors-Accelerometer.AccZ 1.15039 +108:885.498 Sensors-Accelerometer.AccX -0.25708 +108:885.498 Sensors-Accelerometer.AccY 0.202637 +108:885.498 Sensors-Accelerometer.AccZ 0.952148 +108:905.579 Sensors-Magnetometer.MagX 0xfe02 +108:905.704 Sensors-Magnetometer.MagY 0x1ab +108:905.825 Sensors-Magnetometer.MagZ 0xce4 +108:925.495 Sensors-Accelerometer.AccX -0.362061 +108:925.495 Sensors-Accelerometer.AccY 0.133789 +108:925.495 Sensors-Accelerometer.AccZ 0.959961 +108:953.227 Sensors-Light 0.731701 +108:965.495 Sensors-Accelerometer.AccX -0.463623 +108:965.495 Sensors-Accelerometer.AccY 0.0625 +108:965.495 Sensors-Accelerometer.AccZ 0.887207 +109:005.602 Sensors-Magnetometer.MagX 0xfe54 +109:005.726 Sensors-Magnetometer.MagY 0x13c +109:005.847 Sensors-Magnetometer.MagZ 0xccc +109:008.295 Sensors-Accelerometer.AccX -0.596924 +109:008.295 Sensors-Accelerometer.AccY -0.00317383 +109:008.295 Sensors-Accelerometer.AccZ 0.797363 +109:044.819 Sensors-Accelerometer.AccX -0.677002 +109:044.819 Sensors-Accelerometer.AccY -0.0524902 +109:044.819 Sensors-Accelerometer.AccZ 0.575195 +109:055.554 Sensors-Magnetometer.MagX 0xfe81 +109:055.679 Sensors-Magnetometer.MagY 0xf0 +109:055.800 Sensors-Magnetometer.MagZ 0xc9f +109:085.495 Sensors-Accelerometer.AccX -0.804443 +109:085.495 Sensors-Accelerometer.AccY -0.0915527 +109:085.495 Sensors-Accelerometer.AccZ 0.301758 +109:105.685 Sensors-Magnetometer.MagX 0xfea2 +109:105.809 Sensors-Magnetometer.MagY 0x93 +109:105.930 Sensors-Magnetometer.MagZ 0xc32 +109:125.494 Sensors-Accelerometer.AccX -0.907959 +109:125.494 Sensors-Accelerometer.AccY -0.13208 +109:125.494 Sensors-Accelerometer.AccZ 0.101074 +109:155.614 Sensors-Magnetometer.MagX 0xfeb2 +109:155.739 Sensors-Magnetometer.MagY 0x67 +109:155.860 Sensors-Magnetometer.MagZ 0xbbf +109:165.498 Sensors-Accelerometer.AccX -0.941162 +109:165.498 Sensors-Accelerometer.AccY -0.166748 +109:165.498 Sensors-Accelerometer.AccZ -0.0793457 +109:205.586 Sensors-Magnetometer.MagX 0xfec1 +109:205.711 Sensors-Magnetometer.MagY 0x60 +109:205.830 Sensors-Magnetometer.MagZ 0xb4b +109:208.281 Sensors-Accelerometer.AccX -0.844482 +109:208.281 Sensors-Accelerometer.AccY -0.195068 +109:208.281 Sensors-Accelerometer.AccZ -0.417725 +109:255.586 Sensors-Magnetometer.MagX 0xfeca +109:255.710 Sensors-Magnetometer.MagY 0x6e +109:255.831 Sensors-Magnetometer.MagZ 0xb16 +109:285.499 Sensors-Accelerometer.AccX -0.77417 +109:285.499 Sensors-Accelerometer.AccY -0.241943 +109:285.499 Sensors-Accelerometer.AccZ -0.549561 +109:325.499 Sensors-Accelerometer.AccX -0.845459 +109:325.499 Sensors-Accelerometer.AccY -0.217041 +109:325.499 Sensors-Accelerometer.AccZ -0.31958 +109:485.498 Sensors-Accelerometer.AccX -0.818115 +109:485.498 Sensors-Accelerometer.AccY -0.243896 +109:485.498 Sensors-Accelerometer.AccZ -0.459717 +109:565.498 Sensors-Accelerometer.AccX -0.89917 +109:565.498 Sensors-Accelerometer.AccY -0.217529 +109:565.498 Sensors-Accelerometer.AccZ -0.359131 +109:725.498 Sensors-Accelerometer.AccX -0.876709 +109:725.498 Sensors-Accelerometer.AccY -0.176025 +109:725.498 Sensors-Accelerometer.AccZ -0.470947 +109:755.548 Sensors-Magnetometer.MagX 0xfed1 +109:755.672 Sensors-Magnetometer.MagY 0x7f +109:755.793 Sensors-Magnetometer.MagZ 0xadb +109:765.498 Sensors-Accelerometer.AccX -0.800537 +109:765.498 Sensors-Accelerometer.AccY -0.195068 +109:765.498 Sensors-Accelerometer.AccZ -0.761475 +109:805.682 Sensors-Slider 0x0 +109:855.601 Sensors-Magnetometer.MagX 0xfed8 +109:855.725 Sensors-Magnetometer.MagY 0xc5 +109:855.846 Sensors-Magnetometer.MagZ 0xa8e +109:885.495 Sensors-Accelerometer.AccX -0.652588 +109:885.495 Sensors-Accelerometer.AccY -0.296631 +109:885.495 Sensors-Accelerometer.AccZ -1.00024 +109:925.495 Sensors-Accelerometer.AccX -0.549561 +109:925.495 Sensors-Accelerometer.AccY -0.317627 +109:925.495 Sensors-Accelerometer.AccZ -0.953857 +109:955.650 Sensors-Magnetometer.MagX 0xff0f +109:955.774 Sensors-Magnetometer.MagY 0x108 +109:955.895 Sensors-Magnetometer.MagZ 0xa8c +109:965.494 Sensors-Accelerometer.AccX -0.447998 +109:965.494 Sensors-Accelerometer.AccY -0.364502 +109:965.494 Sensors-Accelerometer.AccZ -0.511475 +110:007.883 Sensors-Accelerometer.AccX -0.431396 +110:007.883 Sensors-Accelerometer.AccY -0.511963 +110:007.883 Sensors-Accelerometer.AccZ -0.96167 +110:044.819 Sensors-Accelerometer.AccX -0.473877 +110:044.819 Sensors-Accelerometer.AccY -0.569092 +110:044.819 Sensors-Accelerometer.AccZ -0.634033 +110:055.583 Sensors-Magnetometer.MagX 0xff4a +110:055.707 Sensors-Magnetometer.MagY 0x100 +110:055.828 Sensors-Magnetometer.MagZ 0xaf6 +110:085.495 Sensors-Accelerometer.AccX -0.965088 +110:085.495 Sensors-Accelerometer.AccY -0.575928 +110:085.495 Sensors-Accelerometer.AccZ 0.0600586 +110:103.226 Sensors-Light 0.838468 +110:105.910 Sensors-Magnetometer.MagX 0xff5d +110:106.034 Sensors-Magnetometer.MagY 0xf3 +110:106.155 Sensors-Magnetometer.MagZ 0xb51 +110:125.498 Sensors-Accelerometer.AccX -0.931885 +110:125.498 Sensors-Accelerometer.AccY -0.595947 +110:125.498 Sensors-Accelerometer.AccZ -0.149658 +110:165.495 Sensors-Accelerometer.AccX -0.250732 +110:165.495 Sensors-Accelerometer.AccY -0.858154 +110:165.495 Sensors-Accelerometer.AccZ -0.0183105 +110:205.549 Sensors-Magnetometer.MagX 0xff70 +110:205.673 Sensors-Magnetometer.MagY 0x155 +110:205.794 Sensors-Magnetometer.MagZ 0xb6f +110:208.241 Sensors-Accelerometer.AccX -0.612549 +110:208.241 Sensors-Accelerometer.AccY -0.948975 +110:208.241 Sensors-Accelerometer.AccZ -0.0183105 +110:244.816 Sensors-Accelerometer.AccX -0.780029 +110:244.816 Sensors-Accelerometer.AccY -0.621826 +110:244.816 Sensors-Accelerometer.AccZ 0.0112305 +110:285.495 Sensors-Accelerometer.AccX -0.354736 +110:285.495 Sensors-Accelerometer.AccY -0.979736 +110:285.495 Sensors-Accelerometer.AccZ 0.161621 +110:305.585 Sensors-Magnetometer.MagX 0xff7c +110:305.709 Sensors-Magnetometer.MagY 0x1c8 +110:305.830 Sensors-Magnetometer.MagZ 0xb64 +110:325.495 Sensors-Accelerometer.AccX -0.133545 +110:325.495 Sensors-Accelerometer.AccY -1.01978 +110:325.495 Sensors-Accelerometer.AccZ -0.267334 +110:355.612 Sensors-Magnetometer.MagX 0xff65 +110:355.736 Sensors-Magnetometer.MagY 0x223 +110:355.857 Sensors-Magnetometer.MagZ 0xb73 +110:365.495 Sensors-Accelerometer.AccX 0.0625 +110:365.495 Sensors-Accelerometer.AccY -0.809326 +110:365.495 Sensors-Accelerometer.AccZ -0.041748 +110:405.546 Sensors-Magnetometer.MagX 0xff45 +110:405.670 Sensors-Magnetometer.MagY 0x271 +110:405.791 Sensors-Magnetometer.MagZ 0xb68 +110:408.238 Sensors-Accelerometer.AccX 0.236328 +110:408.238 Sensors-Accelerometer.AccY -0.815186 +110:408.238 Sensors-Accelerometer.AccZ -0.0856934 +110:444.816 Sensors-Accelerometer.AccX 0.368164 +110:444.816 Sensors-Accelerometer.AccY -0.822998 +110:444.816 Sensors-Accelerometer.AccZ -0.0700684 +110:455.679 Sensors-Magnetometer.MagX 0xff24 +110:455.803 Sensors-Magnetometer.MagY 0x2b1 +110:455.924 Sensors-Magnetometer.MagZ 0xb76 +110:485.495 Sensors-Accelerometer.AccX 0.258301 +110:485.495 Sensors-Accelerometer.AccY -0.82251 +110:485.495 Sensors-Accelerometer.AccZ -0.0632324 +110:525.495 Sensors-Accelerometer.AccX 0.46875 +110:525.495 Sensors-Accelerometer.AccY -0.765869 +110:525.495 Sensors-Accelerometer.AccZ -0.0700684 +110:555.567 Sensors-Magnetometer.MagX 0xfee7 +110:555.691 Sensors-Magnetometer.MagY 0x2fa +110:555.812 Sensors-Magnetometer.MagZ 0xb7d +110:607.987 Sensors-Accelerometer.AccX 0.462891 +110:607.987 Sensors-Accelerometer.AccY -0.874756 +110:607.987 Sensors-Accelerometer.AccZ -0.000732422 +110:685.497 Sensors-Accelerometer.AccX 0.410156 +110:685.497 Sensors-Accelerometer.AccY -0.817139 +110:685.497 Sensors-Accelerometer.AccZ 0.124023 +110:705.584 Sensors-Magnetometer.MagX 0xfeae +110:705.708 Sensors-Magnetometer.MagY 0x32c +110:705.829 Sensors-Magnetometer.MagZ 0xb78 +110:725.495 Sensors-Accelerometer.AccX 0.580078 +110:725.495 Sensors-Accelerometer.AccY -0.858154 +110:725.495 Sensors-Accelerometer.AccZ -0.017334 +110:807.947 Sensors-Accelerometer.AccX 0.481445 +110:807.947 Sensors-Accelerometer.AccY -0.737061 +110:807.947 Sensors-Accelerometer.AccZ -0.0148926 +110:844.816 Sensors-Accelerometer.AccX 0.694336 +110:844.816 Sensors-Accelerometer.AccY -0.864502 +110:844.816 Sensors-Accelerometer.AccZ -0.179443 +110:885.495 Sensors-Accelerometer.AccX 0.522461 +110:885.495 Sensors-Accelerometer.AccY -0.736084 +110:885.495 Sensors-Accelerometer.AccZ -0.218506 +110:905.668 Sensors-Magnetometer.MagX 0xfea0 +110:905.792 Sensors-Magnetometer.MagY 0x330 +110:905.913 Sensors-Magnetometer.MagZ 0xb2f +110:925.495 Sensors-Accelerometer.AccX 0.642578 +110:925.495 Sensors-Accelerometer.AccY -0.684326 +110:925.495 Sensors-Accelerometer.AccZ 0.0791016 +110:955.602 Sensors-Magnetometer.MagX 0xfeae +110:955.727 Sensors-Magnetometer.MagY 0x30a +110:955.848 Sensors-Magnetometer.MagZ 0xade +110:965.496 Sensors-Accelerometer.AccX 0.56543 +110:965.496 Sensors-Accelerometer.AccY -0.801025 +110:965.496 Sensors-Accelerometer.AccZ 0.0415039 +111:008.019 Sensors-Accelerometer.AccX 0.418457 +111:008.019 Sensors-Accelerometer.AccY -0.493896 +111:008.019 Sensors-Accelerometer.AccZ -0.786865 +111:044.817 Sensors-Accelerometer.AccX 0.377441 +111:044.817 Sensors-Accelerometer.AccY -0.915771 +111:044.817 Sensors-Accelerometer.AccZ 0.512695 +111:055.613 Sensors-Magnetometer.MagX 0xfecc +111:055.737 Sensors-Magnetometer.MagY 0x2d6 +111:055.858 Sensors-Magnetometer.MagZ 0xab8 +111:085.494 Sensors-Accelerometer.AccX 0.806641 +111:085.494 Sensors-Accelerometer.AccY -0.339111 +111:085.494 Sensors-Accelerometer.AccZ -0.498779 +111:125.495 Sensors-Accelerometer.AccX 0.640625 +111:125.495 Sensors-Accelerometer.AccY -0.749268 +111:125.495 Sensors-Accelerometer.AccZ -0.0065918 +111:165.496 Sensors-Accelerometer.AccX 0.71875 +111:165.496 Sensors-Accelerometer.AccY -0.159424 +111:165.496 Sensors-Accelerometer.AccZ -0.107666 +111:203.226 Sensors-Light 0.72752 +111:205.920 Sensors-Magnetometer.MagX 0xfe72 +111:206.044 Sensors-Magnetometer.MagY 0x2fd +111:206.165 Sensors-Magnetometer.MagZ 0xa89 +111:208.614 Sensors-Accelerometer.AccX 1.06055 +111:208.614 Sensors-Accelerometer.AccY -0.0905762 +111:208.614 Sensors-Accelerometer.AccZ -0.251221 +111:244.816 Sensors-Accelerometer.AccX 1.08936 +111:244.816 Sensors-Accelerometer.AccY 0.0898438 +111:244.816 Sensors-Accelerometer.AccZ -0.456299 +111:255.577 Sensors-Magnetometer.MagX 0xfe30 +111:255.701 Sensors-Magnetometer.MagY 0x2f1 +111:255.822 Sensors-Magnetometer.MagZ 0xa4d +111:285.494 Sensors-Accelerometer.AccX 0.896484 +111:285.494 Sensors-Accelerometer.AccY 0.220215 +111:285.494 Sensors-Accelerometer.AccZ -0.716064 +111:325.499 Sensors-Accelerometer.AccX 0.80957 +111:325.499 Sensors-Accelerometer.AccY 0.274414 +111:325.499 Sensors-Accelerometer.AccZ -0.887939 +111:355.596 Sensors-Magnetometer.MagX 0xfdd8 +111:355.720 Sensors-Magnetometer.MagY 0x28f +111:355.841 Sensors-Magnetometer.MagZ 0x9ff +111:365.495 Sensors-Accelerometer.AccX 0.594727 +111:365.495 Sensors-Accelerometer.AccY 0.0673828 +111:365.495 Sensors-Accelerometer.AccZ -0.52124 +111:408.010 Sensors-Accelerometer.AccX 0.339844 +111:408.010 Sensors-Accelerometer.AccY 0.506836 +111:408.010 Sensors-Accelerometer.AccZ -0.737549 +111:444.816 Sensors-Accelerometer.AccX 0.538086 +111:444.816 Sensors-Accelerometer.AccY 0.609863 +111:444.816 Sensors-Accelerometer.AccZ -0.812256 +111:485.497 Sensors-Accelerometer.AccX 0.604492 +111:485.497 Sensors-Accelerometer.AccY 0.416992 +111:485.497 Sensors-Accelerometer.AccZ -0.566162 +111:505.583 Sensors-Magnetometer.MagX 0xfd89 +111:505.707 Sensors-Magnetometer.MagY 0x2ac +111:505.828 Sensors-Magnetometer.MagZ 0xa08 +111:525.495 Sensors-Accelerometer.AccX 0.40625 +111:525.495 Sensors-Accelerometer.AccY 0.566895 +111:525.495 Sensors-Accelerometer.AccZ -0.655518 +111:553.226 Sensors-Light 0.513603 +111:555.973 Sensors-Magnetometer.MagX 0xfd68 +111:556.097 Sensors-Magnetometer.MagY 0x2e9 +111:556.218 Sensors-Magnetometer.MagZ 0xa2b +111:565.497 Sensors-Accelerometer.AccX 0.464844 +111:565.497 Sensors-Accelerometer.AccY 0.666992 +111:565.497 Sensors-Accelerometer.AccZ -0.608643 +111:605.610 Sensors-Magnetometer.MagX 0xfd41 +111:605.734 Sensors-Magnetometer.MagY 0x31f +111:605.855 Sensors-Magnetometer.MagZ 0xa61 +111:608.306 Sensors-Accelerometer.AccX 0.550781 +111:608.306 Sensors-Accelerometer.AccY 0.65332 +111:608.306 Sensors-Accelerometer.AccZ -0.33667 +111:644.819 Sensors-Accelerometer.AccX 0.499023 +111:644.819 Sensors-Accelerometer.AccY 0.759277 +111:644.819 Sensors-Accelerometer.AccZ -0.25415 +111:653.226 Sensors-Light 0.392065 +111:656.010 Sensors-Magnetometer.MagX 0xfd01 +111:656.135 Sensors-Magnetometer.MagY 0x324 +111:656.256 Sensors-Magnetometer.MagZ 0xa78 +111:685.495 Sensors-Accelerometer.AccX 0.664062 +111:685.495 Sensors-Accelerometer.AccY 1.10205 +111:685.495 Sensors-Accelerometer.AccZ -0.581787 +111:705.620 Sensors-Magnetometer.MagX 0xfcc5 +111:705.744 Sensors-Magnetometer.MagY 0x34b +111:705.865 Sensors-Magnetometer.MagZ 0xacf +111:725.494 Sensors-Accelerometer.AccX 0.478516 +111:725.494 Sensors-Accelerometer.AccY 0.831055 +111:725.494 Sensors-Accelerometer.AccZ -0.174072 +111:755.550 Sensors-Magnetometer.MagX 0xfca5 +111:755.674 Sensors-Magnetometer.MagY 0x358 +111:755.795 Sensors-Magnetometer.MagZ 0xb0f +111:763.184 Sensors-Slider 0x0 +111:765.595 Sensors-Accelerometer.AccX 0.355469 +111:765.595 Sensors-Accelerometer.AccY 0.90332 +111:765.595 Sensors-Accelerometer.AccZ 0.0581055 +111:805.670 Sensors-Magnetometer.MagX 0xfc84 +111:805.794 Sensors-Magnetometer.MagY 0x353 +111:805.915 Sensors-Magnetometer.MagZ 0xb64 +111:808.366 Sensors-Accelerometer.AccX 0.317871 +111:808.366 Sensors-Accelerometer.AccY 0.865234 +111:808.366 Sensors-Accelerometer.AccZ 0.166016 +111:844.818 Sensors-Accelerometer.AccX 0.324219 +111:844.818 Sensors-Accelerometer.AccY 1.03955 +111:844.818 Sensors-Accelerometer.AccZ 0.229004 +111:853.226 Sensors-Light 0.289708 +111:856.001 Sensors-Magnetometer.MagX 0xfc59 +111:856.125 Sensors-Magnetometer.MagY 0x330 +111:856.246 Sensors-Magnetometer.MagZ 0xba6 +111:885.497 Sensors-Accelerometer.AccX 0.29541 +111:885.497 Sensors-Accelerometer.AccY 0.890625 +111:885.497 Sensors-Accelerometer.AccZ 0.155273 +111:905.592 Sensors-Magnetometer.MagX 0xfc35 +111:905.716 Sensors-Magnetometer.MagY 0x2fc +111:905.837 Sensors-Magnetometer.MagZ 0xbe1 +111:925.495 Sensors-Accelerometer.AccX 0.0527344 +111:925.495 Sensors-Accelerometer.AccY 1.00488 +111:925.495 Sensors-Accelerometer.AccZ 0.400879 +111:965.496 Sensors-Accelerometer.AccX 0.0566406 +111:965.496 Sensors-Accelerometer.AccY 1.14062 +111:965.496 Sensors-Accelerometer.AccZ 0.121094 +112:005.559 Sensors-Magnetometer.MagX 0xfc21 +112:005.684 Sensors-Magnetometer.MagY 0x2b0 +112:005.805 Sensors-Magnetometer.MagZ 0xc29 +112:008.255 Sensors-Accelerometer.AccX -0.0178223 +112:008.255 Sensors-Accelerometer.AccY 0.98291 +112:008.255 Sensors-Accelerometer.AccZ 0.154297 +112:044.816 Sensors-Accelerometer.AccX -0.24585 +112:044.816 Sensors-Accelerometer.AccY 1.10303 +112:044.816 Sensors-Accelerometer.AccZ 0.241699 +112:085.495 Sensors-Accelerometer.AccX 0.00195312 +112:085.495 Sensors-Accelerometer.AccY 1.06738 +112:085.495 Sensors-Accelerometer.AccZ 0.253418 +112:105.585 Sensors-Magnetometer.MagX 0xfc1d +112:105.709 Sensors-Magnetometer.MagY 0x257 +112:105.830 Sensors-Magnetometer.MagZ 0xc61 +112:125.494 Sensors-Accelerometer.AccX -0.11499 +112:125.494 Sensors-Accelerometer.AccY 0.938965 +112:125.494 Sensors-Accelerometer.AccZ 0.274414 +112:155.611 Sensors-Magnetometer.MagX 0xfc28 +112:155.736 Sensors-Magnetometer.MagY 0x21f +112:155.856 Sensors-Magnetometer.MagZ 0xc5d +112:165.493 Sensors-Accelerometer.AccX -0.422607 +112:165.493 Sensors-Accelerometer.AccY 0.980957 +112:165.493 Sensors-Accelerometer.AccZ 0.220703 +112:207.880 Sensors-Accelerometer.AccX -0.20874 +112:207.880 Sensors-Accelerometer.AccY 0.932617 +112:207.880 Sensors-Accelerometer.AccZ 0.218262 +112:255.675 Sensors-Magnetometer.MagX 0xfc29 +112:255.799 Sensors-Magnetometer.MagY 0x1d2 +112:255.920 Sensors-Magnetometer.MagZ 0xc68 +112:285.494 Sensors-Accelerometer.AccX -0.546631 +112:285.494 Sensors-Accelerometer.AccY 0.928711 +112:285.494 Sensors-Accelerometer.AccZ 0.519043 +112:325.499 Sensors-Accelerometer.AccX -0.593994 +112:325.499 Sensors-Accelerometer.AccY 0.957031 +112:325.499 Sensors-Accelerometer.AccZ 0.758301 +112:365.494 Sensors-Accelerometer.AccX -0.307373 +112:365.494 Sensors-Accelerometer.AccY 0.90332 +112:365.494 Sensors-Accelerometer.AccZ 0.367676 +112:405.684 Sensors-Magnetometer.MagX 0xfc39 +112:405.808 Sensors-Magnetometer.MagY 0x18f +112:405.929 Sensors-Magnetometer.MagZ 0xc76 +112:408.377 Sensors-Accelerometer.AccX -0.493896 +112:408.377 Sensors-Accelerometer.AccY 0.696289 +112:408.377 Sensors-Accelerometer.AccZ 0.213867 +112:444.815 Sensors-Accelerometer.AccX -0.783936 +112:444.815 Sensors-Accelerometer.AccY 0.707031 +112:444.815 Sensors-Accelerometer.AccZ 0.354492 +112:485.498 Sensors-Accelerometer.AccX -0.773193 +112:485.498 Sensors-Accelerometer.AccY 0.652344 +112:485.498 Sensors-Accelerometer.AccZ 0.632324 +112:505.584 Sensors-Magnetometer.MagX 0xfc6e +112:505.708 Sensors-Magnetometer.MagY 0x16d +112:505.829 Sensors-Magnetometer.MagZ 0xcaa +112:565.497 Sensors-Accelerometer.AccX -0.758545 +112:565.497 Sensors-Accelerometer.AccY 0.464844 +112:565.497 Sensors-Accelerometer.AccZ 0.212891 +112:605.613 Sensors-Magnetometer.MagX 0xfcc2 +112:605.737 Sensors-Magnetometer.MagY 0x11c +112:605.858 Sensors-Magnetometer.MagZ 0xcc3 +112:608.305 Sensors-Accelerometer.AccX -0.609131 +112:608.305 Sensors-Accelerometer.AccY 0.555176 +112:608.305 Sensors-Accelerometer.AccZ 0.751953 +112:644.816 Sensors-Accelerometer.AccX -0.865967 +112:644.816 Sensors-Accelerometer.AccY 0.320312 +112:644.816 Sensors-Accelerometer.AccZ 0.592773 +112:653.226 Sensors-Light 0.40647 +112:685.498 Sensors-Accelerometer.AccX -0.782959 +112:685.498 Sensors-Accelerometer.AccY 0.233398 +112:685.498 Sensors-Accelerometer.AccZ 0.130859 +112:705.622 Sensors-Magnetometer.MagX 0xfd22 +112:705.746 Sensors-Magnetometer.MagY 0xd2 +112:705.867 Sensors-Magnetometer.MagZ 0xcba +112:725.495 Sensors-Accelerometer.AccX -0.674561 +112:725.495 Sensors-Accelerometer.AccY 0.385742 +112:725.495 Sensors-Accelerometer.AccZ 1.05176 +112:765.495 Sensors-Accelerometer.AccX -0.778564 +112:765.495 Sensors-Accelerometer.AccY 0.0839844 +112:765.495 Sensors-Accelerometer.AccZ -0.181396 +112:805.683 Sensors-Magnetometer.MagX 0xfd8c +112:805.807 Sensors-Magnetometer.MagY 0xc4 +112:805.928 Sensors-Magnetometer.MagZ 0xcd3 +112:808.379 Sensors-Accelerometer.AccX -0.798096 +112:808.379 Sensors-Accelerometer.AccY 0.142578 +112:808.379 Sensors-Accelerometer.AccZ 0.779297 +112:844.816 Sensors-Accelerometer.AccX -1.04565 +112:844.816 Sensors-Accelerometer.AccY 0.0712891 +112:844.816 Sensors-Accelerometer.AccZ 1.10596 +112:885.495 Sensors-Accelerometer.AccX -0.868896 +112:885.495 Sensors-Accelerometer.AccY 0.123047 +112:885.495 Sensors-Accelerometer.AccZ 0.187988 +112:903.227 Sensors-Light 0.587259 +112:905.995 Sensors-Magnetometer.MagX 0xfde1 +112:906.119 Sensors-Magnetometer.MagY 0xa7 +112:906.240 Sensors-Magnetometer.MagZ 0xcc7 +112:925.494 Sensors-Accelerometer.AccX -0.584717 +112:925.494 Sensors-Accelerometer.AccY -0.0578613 +112:925.494 Sensors-Accelerometer.AccZ 0.973633 +112:955.610 Sensors-Magnetometer.MagX 0xfe34 +112:955.734 Sensors-Magnetometer.MagY 0x8c +112:955.856 Sensors-Magnetometer.MagZ 0xca7 +112:965.494 Sensors-Accelerometer.AccX -0.847412 +112:965.494 Sensors-Accelerometer.AccY -0.349365 +112:965.494 Sensors-Accelerometer.AccZ -0.213623 +113:003.226 Sensors-Light 0.759396 +113:006.006 Sensors-Magnetometer.MagX 0xfe8b +113:006.131 Sensors-Magnetometer.MagY 0x9d +113:006.252 Sensors-Magnetometer.MagZ 0xc89 +113:008.699 Sensors-Accelerometer.AccX -1.11255 +113:008.699 Sensors-Accelerometer.AccY -0.433838 +113:008.699 Sensors-Accelerometer.AccZ 0.330566 +113:044.816 Sensors-Accelerometer.AccX -0.619385 +113:044.816 Sensors-Accelerometer.AccY -0.578857 +113:044.816 Sensors-Accelerometer.AccZ 0.0883789 +113:055.664 Sensors-Magnetometer.MagX 0xfece +113:055.788 Sensors-Magnetometer.MagY 0xa4 +113:055.909 Sensors-Magnetometer.MagZ 0xc61 +113:085.494 Sensors-Accelerometer.AccX -0.836182 +113:085.494 Sensors-Accelerometer.AccY -0.455322 +113:085.494 Sensors-Accelerometer.AccZ 0.081543 +113:105.600 Sensors-Magnetometer.MagX 0xff13 +113:105.725 Sensors-Magnetometer.MagY 0xb4 +113:105.846 Sensors-Magnetometer.MagZ 0xc20 +113:125.495 Sensors-Accelerometer.AccX -0.64917 +113:125.495 Sensors-Accelerometer.AccY -0.349365 +113:125.495 Sensors-Accelerometer.AccZ 0.168945 +113:155.643 Sensors-Magnetometer.MagX 0xff47 +113:155.767 Sensors-Magnetometer.MagY 0xce +113:155.888 Sensors-Magnetometer.MagZ 0xbcb +113:165.495 Sensors-Accelerometer.AccX -0.188232 +113:165.495 Sensors-Accelerometer.AccY -0.573975 +113:165.495 Sensors-Accelerometer.AccZ -0.395264 +113:205.655 Sensors-Magnetometer.MagX 0xff75 +113:205.779 Sensors-Magnetometer.MagY 0x11e +113:205.900 Sensors-Magnetometer.MagZ 0xb4b +113:208.347 Sensors-Accelerometer.AccX 0.275879 +113:208.347 Sensors-Accelerometer.AccY -0.605225 +113:208.347 Sensors-Accelerometer.AccZ -0.629639 +113:244.819 Sensors-Accelerometer.AccX 0.196777 +113:244.819 Sensors-Accelerometer.AccY -0.703369 +113:244.819 Sensors-Accelerometer.AccZ -0.746338 +113:255.585 Sensors-Magnetometer.MagX 0xff77 +113:255.709 Sensors-Magnetometer.MagY 0x15a +113:255.830 Sensors-Magnetometer.MagZ 0xb1f +113:285.495 Sensors-Accelerometer.AccX -0.351318 +113:285.495 Sensors-Accelerometer.AccY -0.630615 +113:285.495 Sensors-Accelerometer.AccZ -0.563232 +113:325.494 Sensors-Accelerometer.AccX -0.562256 +113:325.494 Sensors-Accelerometer.AccY -0.480225 +113:325.494 Sensors-Accelerometer.AccZ -0.828369 +113:355.579 Sensors-Magnetometer.MagX 0xff4e +113:355.703 Sensors-Magnetometer.MagY 0x12b +113:355.824 Sensors-Magnetometer.MagZ 0xacc +113:405.692 Sensors-Magnetometer.MagX 0xff34 +113:405.816 Sensors-Magnetometer.MagY 0x138 +113:405.937 Sensors-Magnetometer.MagZ 0xa95 +113:408.385 Sensors-Accelerometer.AccX -0.438721 +113:408.385 Sensors-Accelerometer.AccY -0.474365 +113:408.385 Sensors-Accelerometer.AccZ -1.13013 +113:444.819 Sensors-Accelerometer.AccX -0.37085 +113:444.819 Sensors-Accelerometer.AccY -0.383545 +113:444.819 Sensors-Accelerometer.AccZ -1.32837 +113:485.494 Sensors-Accelerometer.AccX -0.80835 +113:485.494 Sensors-Accelerometer.AccY -0.450439 +113:485.494 Sensors-Accelerometer.AccZ -0.871826 +113:525.494 Sensors-Accelerometer.AccX -0.452881 +113:525.494 Sensors-Accelerometer.AccY -0.582275 +113:525.494 Sensors-Accelerometer.AccZ -0.821045 +113:555.647 Sensors-Magnetometer.MagX 0xff34 +113:555.771 Sensors-Magnetometer.MagY 0xde +113:555.892 Sensors-Magnetometer.MagZ 0xac5 +113:565.495 Sensors-Accelerometer.AccX -0.846436 +113:565.495 Sensors-Accelerometer.AccY -0.536865 +113:565.495 Sensors-Accelerometer.AccZ -0.504639 +113:607.920 Sensors-Accelerometer.AccX -0.909424 +113:607.920 Sensors-Accelerometer.AccY -0.367432 +113:607.920 Sensors-Accelerometer.AccZ -0.705811 +113:644.816 Sensors-Accelerometer.AccX -0.463623 +113:644.816 Sensors-Accelerometer.AccY -0.426025 +113:644.816 Sensors-Accelerometer.AccZ -0.195068 +113:655.639 Sensors-Magnetometer.MagX 0xff35 +113:655.763 Sensors-Magnetometer.MagY 0xa2 +113:655.884 Sensors-Magnetometer.MagZ 0xb8d +113:685.494 Sensors-Accelerometer.AccX -0.847412 +113:685.494 Sensors-Accelerometer.AccY -0.390381 +113:685.494 Sensors-Accelerometer.AccZ 1.26074 +113:705.611 Sensors-Magnetometer.MagX 0xff10 +113:705.735 Sensors-Magnetometer.MagY 0xd4 +113:705.856 Sensors-Magnetometer.MagZ 0xc3d +113:723.184 Sensors-Slider 0x0 +113:725.599 Sensors-Accelerometer.AccX -0.868896 +113:725.599 Sensors-Accelerometer.AccY -0.404053 +113:725.599 Sensors-Accelerometer.AccZ 0.952148 +113:765.494 Sensors-Accelerometer.AccX -0.261475 +113:765.494 Sensors-Accelerometer.AccY -0.486572 +113:765.494 Sensors-Accelerometer.AccZ 0.236328 +113:807.939 Sensors-Accelerometer.AccX -0.516846 +113:807.939 Sensors-Accelerometer.AccY -0.457764 +113:807.939 Sensors-Accelerometer.AccZ 0.528809 +113:844.816 Sensors-Accelerometer.AccX -0.673584 +113:844.816 Sensors-Accelerometer.AccY -0.424072 +113:844.816 Sensors-Accelerometer.AccZ 1.02148 +113:885.495 Sensors-Accelerometer.AccX -0.454346 +113:885.495 Sensors-Accelerometer.AccY -0.422119 +113:885.495 Sensors-Accelerometer.AccZ 1.08984 +113:905.607 Sensors-Magnetometer.MagX 0xff18 +113:905.732 Sensors-Magnetometer.MagY 0x148 +113:905.853 Sensors-Magnetometer.MagZ 0xc8b +113:925.498 Sensors-Accelerometer.AccX -0.369873 +113:925.498 Sensors-Accelerometer.AccY -0.510498 +113:925.498 Sensors-Accelerometer.AccZ 0.780762 +113:965.494 Sensors-Accelerometer.AccX -0.18335 +113:965.494 Sensors-Accelerometer.AccY -0.54126 +113:965.494 Sensors-Accelerometer.AccZ 1.11426 +114:003.226 Sensors-Light 0.624933 +114:006.011 Sensors-Magnetometer.MagX 0xff1c +114:006.135 Sensors-Magnetometer.MagY 0x1c6 +114:006.257 Sensors-Magnetometer.MagZ 0xc7c +114:008.706 Sensors-Accelerometer.AccX -0.127686 +114:008.706 Sensors-Accelerometer.AccY -0.431396 +114:008.706 Sensors-Accelerometer.AccZ 1.03223 +114:044.817 Sensors-Accelerometer.AccX 0.249023 +114:044.817 Sensors-Accelerometer.AccY -0.409424 +114:044.817 Sensors-Accelerometer.AccZ 0.929688 +114:055.598 Sensors-Magnetometer.MagX 0xff18 +114:055.722 Sensors-Magnetometer.MagY 0x203 +114:055.843 Sensors-Magnetometer.MagZ 0xc69 +114:085.498 Sensors-Accelerometer.AccX 0.299805 +114:085.498 Sensors-Accelerometer.AccY -0.475342 +114:085.498 Sensors-Accelerometer.AccZ 0.619629 +114:125.494 Sensors-Accelerometer.AccX 0.0737305 +114:125.494 Sensors-Accelerometer.AccY -0.377197 +114:125.494 Sensors-Accelerometer.AccZ 0.19043 +114:153.226 Sensors-Light 0.524666 +114:155.909 Sensors-Magnetometer.MagX 0xff27 +114:156.033 Sensors-Magnetometer.MagY 0x247 +114:156.154 Sensors-Magnetometer.MagZ 0xc3c +114:165.495 Sensors-Accelerometer.AccX 0.0253906 +114:165.495 Sensors-Accelerometer.AccY -0.212646 +114:165.495 Sensors-Accelerometer.AccZ -0.599854 +114:205.550 Sensors-Magnetometer.MagX 0xff33 +114:205.674 Sensors-Magnetometer.MagY 0x261 +114:205.795 Sensors-Magnetometer.MagZ 0xc05 +114:208.242 Sensors-Accelerometer.AccX -0.133545 +114:208.242 Sensors-Accelerometer.AccY -0.12915 +114:208.242 Sensors-Accelerometer.AccZ -0.263428 +114:244.817 Sensors-Accelerometer.AccX 0.24707 +114:244.817 Sensors-Accelerometer.AccY -0.098877 +114:244.817 Sensors-Accelerometer.AccZ -0.0109863 +114:285.493 Sensors-Accelerometer.AccX 0.63623 +114:285.493 Sensors-Accelerometer.AccY -0.181396 +114:285.493 Sensors-Accelerometer.AccZ 1.04639 +114:305.610 Sensors-Magnetometer.MagX 0xfef8 +114:305.735 Sensors-Magnetometer.MagY 0x26c +114:305.856 Sensors-Magnetometer.MagZ 0xc5d +114:325.497 Sensors-Accelerometer.AccX 0.607422 +114:325.497 Sensors-Accelerometer.AccY -0.369873 +114:325.497 Sensors-Accelerometer.AccZ 1.99976 +114:355.580 Sensors-Magnetometer.MagX 0xfecd +114:355.704 Sensors-Magnetometer.MagY 0x24c +114:355.825 Sensors-Magnetometer.MagZ 0xc98 +114:365.495 Sensors-Accelerometer.AccX 0.484375 +114:365.495 Sensors-Accelerometer.AccY -0.386475 +114:365.495 Sensors-Accelerometer.AccZ 1.99976 +114:407.990 Sensors-Accelerometer.AccX 0.104492 +114:407.990 Sensors-Accelerometer.AccY -0.37085 +114:407.990 Sensors-Accelerometer.AccZ 1.99976 +114:444.816 Sensors-Accelerometer.AccX -0.139893 +114:444.816 Sensors-Accelerometer.AccY -0.238525 +114:444.816 Sensors-Accelerometer.AccZ 1.93311 +114:485.498 Sensors-Accelerometer.AccX -0.11499 +114:485.498 Sensors-Accelerometer.AccY -0.149658 +114:485.498 Sensors-Accelerometer.AccZ 0.719238 +114:525.495 Sensors-Accelerometer.AccX 0.100586 +114:525.495 Sensors-Accelerometer.AccY -0.105225 +114:525.495 Sensors-Accelerometer.AccZ 0.26709 +114:565.498 Sensors-Accelerometer.AccX 0.0180664 +114:565.498 Sensors-Accelerometer.AccY -0.0925293 +114:565.498 Sensors-Accelerometer.AccZ -0.357666 +114:605.550 Sensors-Magnetometer.MagX 0xfef9 +114:605.674 Sensors-Magnetometer.MagY 0x278 +114:605.795 Sensors-Magnetometer.MagZ 0xc4d +114:608.242 Sensors-Accelerometer.AccX -0.140869 +114:608.242 Sensors-Accelerometer.AccY 0.0390625 +114:608.242 Sensors-Accelerometer.AccZ -1.12817 +114:644.816 Sensors-Accelerometer.AccX 0.15332 +114:644.816 Sensors-Accelerometer.AccY 0.090332 +114:644.816 Sensors-Accelerometer.AccZ -0.486572 +114:685.493 Sensors-Accelerometer.AccX 0.383301 +114:685.493 Sensors-Accelerometer.AccY 0.0078125 +114:685.493 Sensors-Accelerometer.AccZ 0.95166 +114:705.612 Sensors-Magnetometer.MagX 0xfecd +114:705.736 Sensors-Magnetometer.MagY 0x27d +114:705.858 Sensors-Magnetometer.MagZ 0xc82 +114:725.496 Sensors-Accelerometer.AccX 0.418457 +114:725.496 Sensors-Accelerometer.AccY -0.169678 +114:725.496 Sensors-Accelerometer.AccZ 1.70654 +114:765.494 Sensors-Accelerometer.AccX 0.0693359 +114:765.494 Sensors-Accelerometer.AccY -0.338135 +114:765.494 Sensors-Accelerometer.AccZ 1.78955 +114:805.633 Sensors-Magnetometer.MagX 0xfe9b +114:805.758 Sensors-Magnetometer.MagY 0x248 +114:805.879 Sensors-Magnetometer.MagZ 0xcbe +114:808.326 Sensors-Accelerometer.AccX 0.45459 +114:808.326 Sensors-Accelerometer.AccY -0.371826 +114:808.326 Sensors-Accelerometer.AccZ 1.99976 +114:844.816 Sensors-Accelerometer.AccX 0.246582 +114:844.816 Sensors-Accelerometer.AccY -0.290283 +114:844.816 Sensors-Accelerometer.AccZ 1.99976 +114:885.498 Sensors-Accelerometer.AccX 0.204102 +114:885.498 Sensors-Accelerometer.AccY -0.210693 +114:885.498 Sensors-Accelerometer.AccZ 1.63232 +114:925.493 Sensors-Accelerometer.AccX 0.0791016 +114:925.493 Sensors-Accelerometer.AccY -0.064209 +114:925.493 Sensors-Accelerometer.AccZ 1.28418 +114:965.494 Sensors-Accelerometer.AccX -0.0554199 +114:965.494 Sensors-Accelerometer.AccY -0.0979004 +114:965.494 Sensors-Accelerometer.AccZ 0.632324 +115:005.587 Sensors-Magnetometer.MagX 0xfec6 +115:005.711 Sensors-Magnetometer.MagY 0x277 +115:005.832 Sensors-Magnetometer.MagZ 0xc86 +115:008.280 Sensors-Accelerometer.AccX -0.18335 +115:008.280 Sensors-Accelerometer.AccY -0.048584 +115:008.280 Sensors-Accelerometer.AccZ -0.418701 +115:044.817 Sensors-Accelerometer.AccX 0.00146484 +115:044.817 Sensors-Accelerometer.AccY 0.0131836 +115:044.817 Sensors-Accelerometer.AccZ -0.929443 +115:085.496 Sensors-Accelerometer.AccX -0.0549316 +115:085.496 Sensors-Accelerometer.AccY 0.059082 +115:085.496 Sensors-Accelerometer.AccZ -0.369385 +115:125.495 Sensors-Accelerometer.AccX 0.573242 +115:125.495 Sensors-Accelerometer.AccY 0.0820312 +115:125.495 Sensors-Accelerometer.AccZ 0.590332 +115:165.496 Sensors-Accelerometer.AccX 0.561035 +115:165.496 Sensors-Accelerometer.AccY -0.153076 +115:165.496 Sensors-Accelerometer.AccZ 1.10156 +115:207.980 Sensors-Accelerometer.AccX -0.106201 +115:207.980 Sensors-Accelerometer.AccY -0.280518 +115:207.980 Sensors-Accelerometer.AccZ 1.4707 +115:244.816 Sensors-Accelerometer.AccX 0.0917969 +115:244.816 Sensors-Accelerometer.AccY -0.303467 +115:244.816 Sensors-Accelerometer.AccZ 1.99976 +115:255.586 Sensors-Magnetometer.MagX 0xfe92 +115:255.710 Sensors-Magnetometer.MagY 0x23d +115:255.831 Sensors-Magnetometer.MagZ 0xccb +115:285.494 Sensors-Accelerometer.AccX 0.295898 +115:285.494 Sensors-Accelerometer.AccY -0.205811 +115:285.494 Sensors-Accelerometer.AccZ 1.99976 +115:365.494 Sensors-Accelerometer.AccX 0.0371094 +115:365.494 Sensors-Accelerometer.AccY -0.168701 +115:365.494 Sensors-Accelerometer.AccZ 1.42334 +115:407.922 Sensors-Accelerometer.AccX -0.0319824 +115:407.922 Sensors-Accelerometer.AccY -0.115479 +115:407.922 Sensors-Accelerometer.AccZ 0.777344 +115:444.818 Sensors-Accelerometer.AccX -0.114014 +115:444.818 Sensors-Accelerometer.AccY -0.0627441 +115:444.818 Sensors-Accelerometer.AccZ 0.324219 +115:485.495 Sensors-Accelerometer.AccX -0.00561523 +115:485.495 Sensors-Accelerometer.AccY -0.116455 +115:485.495 Sensors-Accelerometer.AccZ -0.153076 +115:505.577 Sensors-Magnetometer.MagX 0xfec5 +115:505.701 Sensors-Magnetometer.MagY 0x272 +115:505.822 Sensors-Magnetometer.MagZ 0xc9a +115:525.496 Sensors-Accelerometer.AccX -0.000244141 +115:525.496 Sensors-Accelerometer.AccY -0.0349121 +115:525.496 Sensors-Accelerometer.AccZ -0.824951 +115:565.494 Sensors-Accelerometer.AccX 0.150391 +115:565.494 Sensors-Accelerometer.AccY 0.043457 +115:565.494 Sensors-Accelerometer.AccZ 0.162109 +115:608.012 Sensors-Accelerometer.AccX 0.619141 +115:608.012 Sensors-Accelerometer.AccY 0.0263672 +115:608.012 Sensors-Accelerometer.AccZ 1.01172 +115:644.816 Sensors-Accelerometer.AccX 0.304688 +115:644.816 Sensors-Accelerometer.AccY -0.106201 +115:644.816 Sensors-Accelerometer.AccZ 1.44531 +115:655.576 Sensors-Magnetometer.MagX 0xfe92 +115:655.700 Sensors-Magnetometer.MagY 0x260 +115:655.822 Sensors-Magnetometer.MagZ 0xcc3 +115:683.183 Sensors-Slider 0x0 +115:685.594 Sensors-Accelerometer.AccX -0.203369 +115:685.594 Sensors-Accelerometer.AccY -0.270264 +115:685.594 Sensors-Accelerometer.AccZ 1.29932 +115:725.495 Sensors-Accelerometer.AccX 0.161133 +115:725.495 Sensors-Accelerometer.AccY -0.232666 +115:725.495 Sensors-Accelerometer.AccZ 1.52832 +115:765.497 Sensors-Accelerometer.AccX 0.123535 +115:765.497 Sensors-Accelerometer.AccY -0.114502 +115:765.497 Sensors-Accelerometer.AccZ 1.48779 +115:805.599 Sensors-Magnetometer.MagX 0xfe8a +115:805.723 Sensors-Magnetometer.MagY 0x22d +115:805.844 Sensors-Magnetometer.MagZ 0xce4 +115:808.296 Sensors-Accelerometer.AccX 0.107422 +115:808.296 Sensors-Accelerometer.AccY -0.202393 +115:808.296 Sensors-Accelerometer.AccZ 1.00244 +115:885.497 Sensors-Accelerometer.AccX 0.0371094 +115:885.497 Sensors-Accelerometer.AccY -0.173584 +115:885.497 Sensors-Accelerometer.AccZ 1.12402 +115:965.497 Sensors-Accelerometer.AccX 0.0966797 +115:965.497 Sensors-Accelerometer.AccY -0.145752 +115:965.497 Sensors-Accelerometer.AccZ 0.978516 +116:603.225 Sensors-Light 0.5579 +117:207.964 Sensors-Accelerometer.AccX -0.017334 +117:207.964 Sensors-Accelerometer.AccY -0.150146 +117:207.964 Sensors-Accelerometer.AccZ 0.933105 +117:365.495 Sensors-Accelerometer.AccX 0.0898438 +117:365.495 Sensors-Accelerometer.AccY -0.120361 +117:365.495 Sensors-Accelerometer.AccZ 0.973633 +117:407.970 Sensors-Accelerometer.AccX 0.0996094 +117:407.970 Sensors-Accelerometer.AccY -0.0964355 +117:407.970 Sensors-Accelerometer.AccZ 1.0752 +117:444.818 Sensors-Accelerometer.AccX 0.0410156 +117:444.818 Sensors-Accelerometer.AccY -0.098877 +117:444.818 Sensors-Accelerometer.AccZ 0.936035 +117:607.866 Sensors-Accelerometer.AccX 0.146484 +117:607.866 Sensors-Accelerometer.AccY -0.0808105 +117:607.866 Sensors-Accelerometer.AccZ 1.00977 +117:643.184 Sensors-Slider 0x0 +117:685.498 Sensors-Accelerometer.AccX 0.0551758 +117:685.498 Sensors-Accelerometer.AccY -0.0612793 +117:685.498 Sensors-Accelerometer.AccZ 0.870117 +117:725.498 Sensors-Accelerometer.AccX 0.0786133 +117:725.498 Sensors-Accelerometer.AccY -0.0983887 +117:725.498 Sensors-Accelerometer.AccZ 0.993164 +117:925.499 Sensors-Accelerometer.AccX 0.0839844 +117:925.499 Sensors-Accelerometer.AccY -0.0876465 +117:925.499 Sensors-Accelerometer.AccZ 1.09766 +117:965.495 Sensors-Accelerometer.AccX 0.19043 +117:965.495 Sensors-Accelerometer.AccY -0.194092 +117:965.495 Sensors-Accelerometer.AccZ 1.23633 +118:007.880 Sensors-Accelerometer.AccX 0.0200195 +118:007.880 Sensors-Accelerometer.AccY -0.0866699 +118:007.880 Sensors-Accelerometer.AccZ 1.58594 +118:085.494 Sensors-Accelerometer.AccX 0.125977 +118:085.494 Sensors-Accelerometer.AccY -0.154053 +118:085.494 Sensors-Accelerometer.AccZ 1.20996 +118:105.611 Sensors-Magnetometer.MagX 0xfe76 +118:105.735 Sensors-Magnetometer.MagY 0x261 +118:105.857 Sensors-Magnetometer.MagZ 0xcc6 +118:125.499 Sensors-Accelerometer.AccX 0.134766 +118:125.499 Sensors-Accelerometer.AccY -0.135986 +118:125.499 Sensors-Accelerometer.AccZ 0.92334 +118:165.497 Sensors-Accelerometer.AccX 0.0927734 +118:165.497 Sensors-Accelerometer.AccY -0.102295 +118:165.497 Sensors-Accelerometer.AccZ 0.501953 +118:205.660 Sensors-Magnetometer.MagX 0xfe79 +118:205.784 Sensors-Magnetometer.MagY 0x298 +118:205.905 Sensors-Magnetometer.MagZ 0xcaf +118:208.356 Sensors-Accelerometer.AccX -0.000732422 +118:208.356 Sensors-Accelerometer.AccY -0.0349121 +118:208.356 Sensors-Accelerometer.AccZ -0.151611 +118:244.819 Sensors-Accelerometer.AccX -0.00561523 +118:244.819 Sensors-Accelerometer.AccY 0.0439453 +118:244.819 Sensors-Accelerometer.AccZ -0.531494 +118:285.495 Sensors-Accelerometer.AccX -0.0231934 +118:285.495 Sensors-Accelerometer.AccY 0.171875 +118:285.495 Sensors-Accelerometer.AccZ 0.000976562 +118:325.497 Sensors-Accelerometer.AccX 0.0693359 +118:325.497 Sensors-Accelerometer.AccY 0.0957031 +118:325.497 Sensors-Accelerometer.AccZ 1.11475 +118:355.685 Sensors-Magnetometer.MagX 0xfe41 +118:355.809 Sensors-Magnetometer.MagY 0x26b +118:355.930 Sensors-Magnetometer.MagZ 0xcdb +118:365.496 Sensors-Accelerometer.AccX 0.00341797 +118:365.496 Sensors-Accelerometer.AccY 0.0507812 +118:365.496 Sensors-Accelerometer.AccZ 1.94238 +118:407.947 Sensors-Accelerometer.AccX 0.173828 +118:407.947 Sensors-Accelerometer.AccY 0.145996 +118:407.947 Sensors-Accelerometer.AccZ 1.76514 +118:444.815 Sensors-Accelerometer.AccX 0.0585938 +118:444.815 Sensors-Accelerometer.AccY 0.146973 +118:444.815 Sensors-Accelerometer.AccZ 1.59766 +118:485.497 Sensors-Accelerometer.AccX 0.0107422 +118:485.497 Sensors-Accelerometer.AccY 0.115723 +118:485.497 Sensors-Accelerometer.AccZ 1.21924 +118:525.498 Sensors-Accelerometer.AccX 0.0375977 +118:525.498 Sensors-Accelerometer.AccY 0.104492 +118:525.498 Sensors-Accelerometer.AccZ 1.104 +118:565.498 Sensors-Accelerometer.AccX 0.0405273 +118:565.498 Sensors-Accelerometer.AccY 0.0600586 +118:565.498 Sensors-Accelerometer.AccZ 0.930664 +118:807.994 Sensors-Accelerometer.AccX 0.0703125 +118:807.994 Sensors-Accelerometer.AccY -0.0495605 +118:807.994 Sensors-Accelerometer.AccZ 0.841309 +118:844.818 Sensors-Accelerometer.AccX 0.046875 +118:844.818 Sensors-Accelerometer.AccY -0.18335 +118:844.818 Sensors-Accelerometer.AccZ 1.02686 +118:885.496 Sensors-Accelerometer.AccX 0.0839844 +118:885.496 Sensors-Accelerometer.AccY -0.0612793 +118:885.496 Sensors-Accelerometer.AccZ 0.968262 +118:925.494 Sensors-Accelerometer.AccX -0.0217285 +118:925.494 Sensors-Accelerometer.AccY 0.00927734 +118:925.494 Sensors-Accelerometer.AccZ 1.02148 +118:965.493 Sensors-Accelerometer.AccX 0.0927734 +118:965.493 Sensors-Accelerometer.AccY 0.0166016 +118:965.493 Sensors-Accelerometer.AccZ 1.19336 +119:005.647 Sensors-Magnetometer.MagX 0xfe40 +119:005.771 Sensors-Magnetometer.MagY 0x235 +119:005.893 Sensors-Magnetometer.MagZ 0xcd8 +119:044.818 Sensors-Accelerometer.AccX 0.0361328 +119:044.818 Sensors-Accelerometer.AccY 0.0283203 +119:044.818 Sensors-Accelerometer.AccZ 0.866699 +119:053.226 Sensors-Light 0.604364 +119:085.494 Sensors-Accelerometer.AccX -0.0681152 +119:085.494 Sensors-Accelerometer.AccY -0.0383301 +119:085.494 Sensors-Accelerometer.AccZ 0.939453 +119:125.498 Sensors-Accelerometer.AccX 0.0136719 +119:125.498 Sensors-Accelerometer.AccY 0.0263672 +119:125.498 Sensors-Accelerometer.AccZ 1.18896 +119:165.497 Sensors-Accelerometer.AccX 0.0234375 +119:165.497 Sensors-Accelerometer.AccY -0.0603027 +119:165.497 Sensors-Accelerometer.AccZ 0.943359 +119:207.948 Sensors-Accelerometer.AccX 0.0117188 +119:207.948 Sensors-Accelerometer.AccY -0.0461426 +119:207.948 Sensors-Accelerometer.AccZ 1.06348 +119:244.820 Sensors-Accelerometer.AccX -0.0236816 +119:244.820 Sensors-Accelerometer.AccY 0.0107422 +119:244.820 Sensors-Accelerometer.AccZ 0.865723 +119:285.495 Sensors-Accelerometer.AccX -0.0065918 +119:285.495 Sensors-Accelerometer.AccY -0.0969238 +119:285.495 Sensors-Accelerometer.AccZ 1.0752 +119:303.226 Sensors-Light 0.709484 +119:444.817 Sensors-Accelerometer.AccX 0.0703125 +119:444.817 Sensors-Accelerometer.AccY 0.0146484 +119:444.817 Sensors-Accelerometer.AccZ 1.04395 +119:605.608 Sensors-Slider 0x0 +119:685.497 Sensors-Accelerometer.AccX 0.0844727 +119:685.497 Sensors-Accelerometer.AccY 0.0332031 +119:685.497 Sensors-Accelerometer.AccZ 1.28955 +119:725.498 Sensors-Accelerometer.AccX 0.00683594 +119:725.498 Sensors-Accelerometer.AccY 0.00976562 +119:725.498 Sensors-Accelerometer.AccZ 1.00146 +119:807.891 Sensors-Accelerometer.AccX 0.0566406 +119:807.891 Sensors-Accelerometer.AccY 0.000488281 +119:807.891 Sensors-Accelerometer.AccZ 0.853027 +119:844.818 Sensors-Accelerometer.AccX 0.015625 +119:844.818 Sensors-Accelerometer.AccY 0.00292969 +119:844.818 Sensors-Accelerometer.AccZ 1.02979 +119:953.226 Sensors-Light 0.810987 +120:603.226 Sensors-Light 0.690105 +121:455.577 Sensors-Magnetometer.MagX 0xfe3b +121:455.701 Sensors-Magnetometer.MagY 0x20e +121:455.822 Sensors-Magnetometer.MagZ 0xce4 +121:503.227 Sensors-Light 0.580713 +121:563.184 Sensors-Slider 0x0 +121:807.916 Sensors-Accelerometer.AccX -0.020752 +121:807.916 Sensors-Accelerometer.AccY 0.0419922 +121:807.916 Sensors-Accelerometer.AccZ 0.999512 +121:903.227 Sensors-Light 0.699062 +122:203.226 Sensors-Light 0.57998 +122:903.226 Sensors-Light 0.696406 +123:253.227 Sensors-Light 0.591012 +123:523.184 Sensors-Slider 0x0 +123:765.495 Sensors-Accelerometer.AccX -0.0114746 +123:765.495 Sensors-Accelerometer.AccY 0.0390625 +123:765.495 Sensors-Accelerometer.AccZ 1.00439 +123:903.226 Sensors-Light 0.724758 +123:905.913 Sensors-Magnetometer.MagX 0xfe3b +123:906.037 Sensors-Magnetometer.MagY 0x20c +123:906.158 Sensors-Magnetometer.MagZ 0xcd9 +124:053.228 Sensors-Light 0.607569 +124:853.228 Sensors-Light 0.751293 +125:003.227 Sensors-Light 0.617304 +125:483.183 Sensors-Slider 0x0 +125:725.493 Sensors-Accelerometer.AccX -0.0144043 +125:725.493 Sensors-Accelerometer.AccY 0.0390625 +125:725.493 Sensors-Accelerometer.AccZ 1.00293 +125:803.227 Sensors-Light 0.727642 +125:953.226 Sensors-Light 0.610193 +126:355.637 Sensors-Magnetometer.MagX 0xfe41 +126:355.761 Sensors-Magnetometer.MagY 0x20d +126:355.882 Sensors-Magnetometer.MagZ 0xcdc +126:853.226 Sensors-Light 0.739483 +127:103.227 Sensors-Light 0.627115 +127:443.184 Sensors-Slider 0x0 +127:685.492 Sensors-Accelerometer.AccX -0.0144043 +127:685.492 Sensors-Accelerometer.AccY 0.0371094 +127:685.492 Sensors-Accelerometer.AccZ 1.00244 +128:805.544 Sensors-Magnetometer.MagX 0xfe38 +128:805.668 Sensors-Magnetometer.MagY 0x209 +128:805.789 Sensors-Magnetometer.MagZ 0xcdb +128:903.226 Sensors-Light 0.758358 +129:053.226 Sensors-Light 0.629831 +129:405.588 Sensors-Slider 0x0 +129:644.815 Sensors-Accelerometer.AccX -0.017334 +129:644.815 Sensors-Accelerometer.AccY 0.0351562 +129:644.815 Sensors-Accelerometer.AccZ 0.998047 +130:003.226 Sensors-Light 0.7337 +130:253.227 Sensors-Light 0.622644 +131:255.620 Sensors-Magnetometer.MagX 0xfe3c +131:255.744 Sensors-Magnetometer.MagY 0x20e +131:255.865 Sensors-Magnetometer.MagZ 0xce3 +131:363.184 Sensors-Slider 0x0 +131:608.024 Sensors-Accelerometer.AccX -0.020752 +131:608.024 Sensors-Accelerometer.AccY 0.0400391 +131:608.024 Sensors-Accelerometer.AccZ 0.998047 +132:653.226 Sensors-Light 0.747478 +132:903.227 Sensors-Light 0.617975 +133:323.183 Sensors-Slider 0x0 +133:565.492 Sensors-Accelerometer.AccX -0.017334 +133:565.492 Sensors-Accelerometer.AccY 0.0400391 +133:565.492 Sensors-Accelerometer.AccZ 1.00391 +133:705.595 Sensors-Magnetometer.MagX 0xfe3c +133:705.719 Sensors-Magnetometer.MagY 0x20f +133:705.840 Sensors-Magnetometer.MagZ 0xce5 +134:353.227 Sensors-Light 0.725536 +135:003.226 Sensors-Light 0.62208 +135:283.183 Sensors-Slider 0x0 +135:525.493 Sensors-Accelerometer.AccX -0.0183105 +135:525.493 Sensors-Accelerometer.AccY 0.0341797 +135:525.493 Sensors-Accelerometer.AccZ 1.00098 +136:155.619 Sensors-Magnetometer.MagX 0xfe3d +136:155.743 Sensors-Magnetometer.MagY 0x210 +136:155.864 Sensors-Magnetometer.MagZ 0xcde +137:243.183 Sensors-Slider 0x0 +137:453.225 Sensors-Light 0.673152 +137:485.493 Sensors-Accelerometer.AccX -0.017334 +137:485.493 Sensors-Accelerometer.AccY 0.0390625 +137:485.493 Sensors-Accelerometer.AccZ 1.00293 +138:605.568 Sensors-Magnetometer.MagX 0xfe38 +138:605.693 Sensors-Magnetometer.MagY 0x20b +138:605.814 Sensors-Magnetometer.MagZ 0xce1 +139:205.607 Sensors-Slider 0x0 +139:444.813 Sensors-Accelerometer.AccX -0.0134277 +139:444.813 Sensors-Accelerometer.AccY 0.0361328 +139:444.813 Sensors-Accelerometer.AccZ 1.00586 +139:903.224 Sensors-Light 0.635645 +141:055.582 Sensors-Magnetometer.MagX 0xfe3b +141:055.706 Sensors-Magnetometer.MagY 0x20c +141:055.827 Sensors-Magnetometer.MagZ 0xcdc +141:163.184 Sensors-Slider 0x0 +141:407.916 Sensors-Accelerometer.AccX -0.0197754 +141:407.916 Sensors-Accelerometer.AccY 0.0390625 +141:407.916 Sensors-Accelerometer.AccZ 1.00586 +142:153.227 Sensors-Light 0.513893 +143:123.184 Sensors-Slider 0x0 +143:365.493 Sensors-Accelerometer.AccX -0.0153809 +143:365.493 Sensors-Accelerometer.AccY 0.0351562 +143:365.493 Sensors-Accelerometer.AccZ 1.00293 +143:505.544 Sensors-Magnetometer.MagX 0xfe3b +143:505.668 Sensors-Magnetometer.MagY 0x210 +143:505.789 Sensors-Magnetometer.MagZ 0xce3 +143:953.227 Sensors-Light 0.637903 +144:125.495 Sensors-Accelerometer.AccX 0.129883 +144:125.495 Sensors-Accelerometer.AccY 0.297852 +144:125.495 Sensors-Accelerometer.AccZ 0.915039 +144:165.495 Sensors-Accelerometer.AccX -0.00463867 +144:165.495 Sensors-Accelerometer.AccY 0.0390625 +144:165.495 Sensors-Accelerometer.AccZ 1.04248 +144:400.337 Buttons-SW3 0x1 +144:560.018 Buttons-SW3 0x0 +144:646.766 Buttons-SW3 0x1 +144:747.948 Buttons-SW3 0x0 +144:833.053 Buttons-SW3 0x1 +144:977.570 Buttons-SW3 0x0 +145:007.961 Sensors-Accelerometer.AccX -0.0476074 +145:007.961 Sensors-Accelerometer.AccY 0.0380859 +145:007.961 Sensors-Accelerometer.AccZ 0.84668 +145:044.820 Sensors-Accelerometer.AccX -0.00854492 +145:044.820 Sensors-Accelerometer.AccY 0.0244141 +145:044.820 Sensors-Accelerometer.AccZ 1.00342 +145:053.226 Sensors-Light 0.758038 +145:083.184 Sensors-Slider 0x0 +145:408.152 Buttons-SW1 0x1 +145:515.450 Buttons-SW1 0x0 +145:602.600 Buttons-SW1 0x1 +145:677.789 Buttons-SW1 0x0 +145:757.112 Buttons-SW1 0x1 +145:835.672 Buttons-SW1 0x0 +145:878.089 Buttons-SW1 0x1 +145:955.608 Sensors-Magnetometer.MagX 0xfe36 +145:955.733 Sensors-Magnetometer.MagY 0x218 +145:955.854 Sensors-Magnetometer.MagZ 0xcdf +145:956.412 Buttons-SW1 0x0 +146:103.227 Sensors-Light 0.618402 +146:165.498 Sensors-Accelerometer.AccX 0.00488281 +146:165.498 Sensors-Accelerometer.AccY -0.00952148 +146:165.498 Sensors-Accelerometer.AccZ 0.89502 +146:207.920 Sensors-Accelerometer.AccX -0.00317383 +146:207.920 Sensors-Accelerometer.AccY -0.013916 +146:207.920 Sensors-Accelerometer.AccZ 1.20215 +146:244.820 Sensors-Accelerometer.AccX -0.00366211 +146:244.820 Sensors-Accelerometer.AccY 0.0258789 +146:244.820 Sensors-Accelerometer.AccZ 1.01221 +146:253.226 Sensors-Light 0.491035 +147:043.183 Sensors-Slider 0x0 +147:965.494 Sensors-Accelerometer.AccX -0.239502 +147:965.494 Sensors-Accelerometer.AccY -0.000244141 +147:965.494 Sensors-Accelerometer.AccZ -0.083252 +148:008.013 Sensors-Accelerometer.AccX 0.0454102 +148:008.013 Sensors-Accelerometer.AccY 0.00146484 +148:008.013 Sensors-Accelerometer.AccZ 1.06152 +148:044.820 Sensors-Accelerometer.AccX -0.0373535 +148:044.820 Sensors-Accelerometer.AccY -0.0065918 +148:044.820 Sensors-Accelerometer.AccZ 0.858398 +148:085.497 Sensors-Accelerometer.AccX -0.020752 +148:085.497 Sensors-Accelerometer.AccY 0.0195312 +148:085.497 Sensors-Accelerometer.AccZ 1.03516 +148:405.680 Sensors-Magnetometer.MagX 0xfe3e +148:405.804 Sensors-Magnetometer.MagY 0x215 +148:405.925 Sensors-Magnetometer.MagZ 0xcdd +148:703.224 Sensors-Light 0.475715 +149:005.632 Sensors-Slider 0x0 +149:305.611 Sensors-Magnetometer.MagX 0xfe0f +149:305.735 Sensors-Magnetometer.MagY 0x256 +149:305.856 Sensors-Magnetometer.MagZ 0xce1 +149:339.968 Buttons-SW1 0x1 +149:605.614 Sensors-Magnetometer.MagX 0xfde3 +149:605.738 Sensors-Magnetometer.MagY 0x291 +149:605.859 Sensors-Magnetometer.MagZ 0xcdc +150:044.814 Sensors-Accelerometer.AccX -0.00854492 +150:044.814 Sensors-Accelerometer.AccY 0.0175781 +150:044.814 Sensors-Accelerometer.AccZ 1.00439 +150:963.184 Sensors-Slider 0x0 +151:153.224 Sensors-Light 0.530449 +152:007.997 Sensors-Accelerometer.AccX -0.0124512 +152:007.997 Sensors-Accelerometer.AccY 0.0224609 +152:007.997 Sensors-Accelerometer.AccZ 0.99707 +152:055.582 Sensors-Magnetometer.MagX 0xfde3 +152:055.706 Sensors-Magnetometer.MagY 0x292 +152:055.827 Sensors-Magnetometer.MagZ 0xcd1 +152:485.494 Sensors-Accelerometer.AccX -0.14624 +152:485.494 Sensors-Accelerometer.AccY -0.00268555 +152:485.494 Sensors-Accelerometer.AccZ 0.810547 +152:486.538 Buttons-SW1 0x0 diff --git a/sources/common/doc/examples/system1_time1_user.txt b/sources/common/doc/examples/system1_time1_user.txt new file mode 100644 index 0000000..291cca9 --- /dev/null +++ b/sources/common/doc/examples/system1_time1_user.txt @@ -0,0 +1,7255 @@ +22:800.725 Sensors-Accelerometer.AccX -15106.000000 +22:801.269 Sensors-Accelerometer.AccY -465.000000 +22:801.758 Sensors-Accelerometer.AccZ 2590.000000 +22:840.690 Sensors-Accelerometer.AccX -15184.000000 +22:841.231 Sensors-Accelerometer.AccY -852.000000 +22:841.716 Sensors-Accelerometer.AccZ 4198.000000 +22:880.690 Sensors-Accelerometer.AccX -15314.000000 +22:881.237 Sensors-Accelerometer.AccY -135.000000 +22:881.729 Sensors-Accelerometer.AccZ 3034.000000 +22:920.690 Sensors-Accelerometer.AccX -15142.000000 +22:921.239 Sensors-Accelerometer.AccY -851.000000 +22:921.734 Sensors-Accelerometer.AccZ 2757.000000 +22:960.690 Sensors-Accelerometer.AccX -14551.000000 +22:961.236 Sensors-Accelerometer.AccY -151.000000 +22:961.727 Sensors-Accelerometer.AccZ 3209.000000 +23:000.725 Sensors-Accelerometer.AccX -15155.000000 +23:001.277 Sensors-Accelerometer.AccY -498.000000 +23:001.772 Sensors-Accelerometer.AccZ 2645.000000 +23:040.690 Sensors-Accelerometer.AccX -14795.000000 +23:041.230 Sensors-Accelerometer.AccY -373.000000 +23:041.717 Sensors-Accelerometer.AccZ 3017.000000 +23:120.690 Sensors-Accelerometer.AccX -14751.000000 +23:121.234 Sensors-Accelerometer.AccY -323.000000 +23:121.727 Sensors-Accelerometer.AccZ 3451.000000 +23:200.725 Sensors-Accelerometer.AccX -14839.000000 +23:201.268 Sensors-Accelerometer.AccY -463.000000 +23:201.760 Sensors-Accelerometer.AccZ 3248.000000 +23:240.690 Sensors-Accelerometer.AccX -15115.000000 +23:241.238 Sensors-Accelerometer.AccY -65.000000 +23:241.704 Sensors-Accelerometer.AccZ 3181.000000 +23:280.690 Sensors-Accelerometer.AccX -15087.000000 +23:281.240 Sensors-Accelerometer.AccY -367.000000 +23:281.738 Sensors-Accelerometer.AccZ 3227.000000 +23:320.690 Sensors-Accelerometer.AccX -14984.000000 +23:321.233 Sensors-Accelerometer.AccY -597.000000 +23:321.728 Sensors-Accelerometer.AccZ 3418.000000 +23:400.725 Sensors-Accelerometer.AccX -14952.000000 +23:401.267 Sensors-Accelerometer.AccY -570.000000 +23:401.758 Sensors-Accelerometer.AccZ 3164.000000 +23:440.690 Sensors-Accelerometer.AccX -14590.000000 +23:441.235 Sensors-Accelerometer.AccY 259.000000 +23:441.726 Sensors-Accelerometer.AccZ 3400.000000 +23:480.690 Sensors-Accelerometer.AccX -15286.000000 +23:481.239 Sensors-Accelerometer.AccY -93.000000 +23:481.705 Sensors-Accelerometer.AccZ 3053.000000 +23:520.690 Sensors-Accelerometer.AccX -15057.000000 +23:521.237 Sensors-Accelerometer.AccY -269.000000 +23:521.727 Sensors-Accelerometer.AccZ 3083.000000 +23:560.690 Sensors-Accelerometer.AccX -15113.000000 +23:561.236 Sensors-Accelerometer.AccY 128.000000 +23:561.716 Sensors-Accelerometer.AccZ 2973.000000 +23:600.725 Sensors-Accelerometer.AccX -14919.000000 +23:601.270 Sensors-Accelerometer.AccY 325.000000 +23:601.763 Sensors-Accelerometer.AccZ 2966.000000 +23:680.690 Sensors-Accelerometer.AccX -15103.000000 +23:681.234 Sensors-Accelerometer.AccY 95.000000 +23:681.701 Sensors-Accelerometer.AccZ 2759.000000 +23:760.690 Sensors-Accelerometer.AccX -14975.000000 +23:761.232 Sensors-Accelerometer.AccY 434.000000 +23:761.720 Sensors-Accelerometer.AccZ 2791.000000 +23:800.725 Sensors-Accelerometer.AccX -15485.000000 +23:801.270 Sensors-Accelerometer.AccY 518.000000 +23:801.764 Sensors-Accelerometer.AccZ 2774.000000 +23:840.690 Sensors-Accelerometer.AccX -14871.000000 +23:841.235 Sensors-Accelerometer.AccY 172.000000 +23:841.723 Sensors-Accelerometer.AccZ 2716.000000 +23:880.690 Sensors-Accelerometer.AccX -14999.000000 +23:881.239 Sensors-Accelerometer.AccY -257.000000 +23:881.728 Sensors-Accelerometer.AccZ 2772.000000 +23:920.690 Sensors-Accelerometer.AccX -15182.000000 +23:921.237 Sensors-Accelerometer.AccY -175.000000 +23:921.729 Sensors-Accelerometer.AccZ 3160.000000 +23:960.690 Sensors-Accelerometer.AccX -15029.000000 +23:961.242 Sensors-Accelerometer.AccY 48.000000 +23:961.706 Sensors-Accelerometer.AccZ 2829.000000 +24:000.725 Sensors-Accelerometer.AccX -15410.000000 +24:001.269 Sensors-Accelerometer.AccY -158.000000 +24:001.758 Sensors-Accelerometer.AccZ 2355.000000 +24:040.690 Sensors-Accelerometer.AccX -15519.000000 +24:041.237 Sensors-Accelerometer.AccY -111.000000 +24:041.729 Sensors-Accelerometer.AccZ 2596.000000 +24:080.690 Sensors-Accelerometer.AccX -14520.000000 +24:081.232 Sensors-Accelerometer.AccY -217.000000 +24:081.722 Sensors-Accelerometer.AccZ 3399.000000 +24:120.690 Sensors-Accelerometer.AccX -15493.000000 +24:121.236 Sensors-Accelerometer.AccY -430.000000 +24:121.728 Sensors-Accelerometer.AccZ 2957.000000 +24:160.690 Sensors-Accelerometer.AccX -15287.000000 +24:161.239 Sensors-Accelerometer.AccY 71.000000 +24:161.708 Sensors-Accelerometer.AccZ 2867.000000 +24:200.684 Sensors-Magnetometer.MagX 395.000000 +24:201.176 Sensors-Magnetometer.MagY -290.000000 +24:201.663 Sensors-Magnetometer.MagZ -106.000000 +24:202.184 Sensors-Accelerometer.AccX -14720.000000 +24:202.724 Sensors-Accelerometer.AccY 252.000000 +24:203.212 Sensors-Accelerometer.AccZ 1110.000000 +24:240.690 Sensors-Accelerometer.AccX -15923.000000 +24:241.243 Sensors-Accelerometer.AccY -178.000000 +24:241.733 Sensors-Accelerometer.AccZ 858.000000 +24:280.690 Sensors-Accelerometer.AccX -15666.000000 +24:281.238 Sensors-Accelerometer.AccY 188.000000 +24:281.730 Sensors-Accelerometer.AccZ 2362.000000 +24:320.690 Sensors-Accelerometer.AccX -15476.000000 +24:321.231 Sensors-Accelerometer.AccY -155.000000 +24:321.721 Sensors-Accelerometer.AccZ 1935.000000 +24:360.690 Sensors-Accelerometer.AccX -15491.000000 +24:361.241 Sensors-Accelerometer.AccY -464.000000 +24:361.725 Sensors-Accelerometer.AccZ 1905.000000 +24:400.725 Sensors-Accelerometer.AccX -15418.000000 +24:401.267 Sensors-Accelerometer.AccY -11.000000 +24:401.730 Sensors-Accelerometer.AccZ 1573.000000 +24:440.690 Sensors-Accelerometer.AccX -14622.000000 +24:441.240 Sensors-Accelerometer.AccY -283.000000 +24:441.734 Sensors-Accelerometer.AccZ 1162.000000 +24:480.690 Sensors-Accelerometer.AccX -14593.000000 +24:481.235 Sensors-Accelerometer.AccY -853.000000 +24:481.724 Sensors-Accelerometer.AccZ 732.000000 +24:520.690 Sensors-Accelerometer.AccX -15600.000000 +24:521.236 Sensors-Accelerometer.AccY -544.000000 +24:521.723 Sensors-Accelerometer.AccZ 309.000000 +24:550.684 Sensors-Magnetometer.MagX 432.000000 +24:551.172 Sensors-Magnetometer.MagY -279.000000 +24:551.667 Sensors-Magnetometer.MagZ -53.000000 +24:560.690 Sensors-Accelerometer.AccX -15296.000000 +24:561.236 Sensors-Accelerometer.AccY -149.000000 +24:561.728 Sensors-Accelerometer.AccZ -301.000000 +24:600.683 Sensors-Magnetometer.MagX 432.000000 +24:601.167 Sensors-Magnetometer.MagY -276.000000 +24:601.652 Sensors-Magnetometer.MagZ -45.000000 +24:602.149 Sensors-Accelerometer.AccX -15327.000000 +24:602.699 Sensors-Accelerometer.AccY -359.000000 +24:603.189 Sensors-Accelerometer.AccZ -544.000000 +24:640.690 Sensors-Accelerometer.AccX -15589.000000 +24:641.235 Sensors-Accelerometer.AccY -122.000000 +24:641.721 Sensors-Accelerometer.AccZ -1162.000000 +24:680.690 Sensors-Accelerometer.AccX -15290.000000 +24:681.233 Sensors-Accelerometer.AccY -428.000000 +24:681.719 Sensors-Accelerometer.AccZ -614.000000 +24:720.690 Sensors-Accelerometer.AccX -14866.000000 +24:721.234 Sensors-Accelerometer.AccY -879.000000 +24:721.731 Sensors-Accelerometer.AccZ 640.000000 +24:760.690 Sensors-Accelerometer.AccX -14947.000000 +24:761.239 Sensors-Accelerometer.AccY -366.000000 +24:761.733 Sensors-Accelerometer.AccZ 955.000000 +24:800.725 Sensors-Accelerometer.AccX -15417.000000 +24:801.270 Sensors-Accelerometer.AccY -795.000000 +24:801.766 Sensors-Accelerometer.AccZ 739.000000 +24:840.690 Sensors-Accelerometer.AccX -14655.000000 +24:841.239 Sensors-Accelerometer.AccY -1298.000000 +24:841.754 Sensors-Accelerometer.AccZ 879.000000 +24:880.690 Sensors-Accelerometer.AccX -15830.000000 +24:881.241 Sensors-Accelerometer.AccY -1358.000000 +24:881.757 Sensors-Accelerometer.AccZ 1980.000000 +24:900.684 Sensors-Magnetometer.MagX 423.000000 +24:901.174 Sensors-Magnetometer.MagY -254.000000 +24:901.665 Sensors-Magnetometer.MagZ -133.000000 +24:920.690 Sensors-Accelerometer.AccX -14570.000000 +24:921.234 Sensors-Accelerometer.AccY -2156.000000 +24:921.752 Sensors-Accelerometer.AccZ 3063.000000 +24:960.690 Sensors-Accelerometer.AccX -14617.000000 +24:961.234 Sensors-Accelerometer.AccY -1535.000000 +24:961.755 Sensors-Accelerometer.AccZ 3577.000000 +25:000.725 Sensors-Accelerometer.AccX -13680.000000 +25:001.264 Sensors-Accelerometer.AccY -2402.000000 +25:001.778 Sensors-Accelerometer.AccZ 3848.000000 +25:040.690 Sensors-Accelerometer.AccX -13921.000000 +25:041.234 Sensors-Accelerometer.AccY -1907.000000 +25:041.757 Sensors-Accelerometer.AccZ 3523.000000 +25:080.690 Sensors-Accelerometer.AccX -14104.000000 +25:081.232 Sensors-Accelerometer.AccY -751.000000 +25:081.733 Sensors-Accelerometer.AccZ 3890.000000 +25:100.684 Sensors-Magnetometer.MagX 428.000000 +25:101.173 Sensors-Magnetometer.MagY -228.000000 +25:101.661 Sensors-Magnetometer.MagZ -193.000000 +25:120.690 Sensors-Accelerometer.AccX -13869.000000 +25:121.233 Sensors-Accelerometer.AccY -1303.000000 +25:121.753 Sensors-Accelerometer.AccZ 4937.000000 +25:160.690 Sensors-Accelerometer.AccX -14348.000000 +25:161.235 Sensors-Accelerometer.AccY -1129.000000 +25:161.751 Sensors-Accelerometer.AccZ 5911.000000 +25:200.725 Sensors-Accelerometer.AccX -14689.000000 +25:201.269 Sensors-Accelerometer.AccY -872.000000 +25:201.757 Sensors-Accelerometer.AccZ 5023.000000 +25:240.690 Sensors-Accelerometer.AccX -14454.000000 +25:241.234 Sensors-Accelerometer.AccY -1279.000000 +25:241.758 Sensors-Accelerometer.AccZ 6383.000000 +25:280.690 Sensors-Accelerometer.AccX -13933.000000 +25:281.229 Sensors-Accelerometer.AccY -1988.000000 +25:281.745 Sensors-Accelerometer.AccZ 6768.000000 +25:300.683 Sensors-Magnetometer.MagX 377.000000 +25:301.174 Sensors-Magnetometer.MagY -237.000000 +25:301.665 Sensors-Magnetometer.MagZ -245.000000 +25:320.690 Sensors-Accelerometer.AccX -13570.000000 +25:321.233 Sensors-Accelerometer.AccY -2752.000000 +25:321.747 Sensors-Accelerometer.AccZ 7900.000000 +25:360.690 Sensors-Accelerometer.AccX -13815.000000 +25:361.234 Sensors-Accelerometer.AccY -754.000000 +25:361.728 Sensors-Accelerometer.AccZ 7007.000000 +25:400.725 Sensors-Accelerometer.AccX -12959.000000 +25:401.274 Sensors-Accelerometer.AccY -1131.000000 +25:401.794 Sensors-Accelerometer.AccZ 6774.000000 +25:440.690 Sensors-Accelerometer.AccX -12768.000000 +25:441.234 Sensors-Accelerometer.AccY -1789.000000 +25:441.754 Sensors-Accelerometer.AccZ 6533.000000 +25:480.690 Sensors-Accelerometer.AccX -12517.000000 +25:481.241 Sensors-Accelerometer.AccY -2160.000000 +25:481.757 Sensors-Accelerometer.AccZ 6919.000000 +25:520.690 Sensors-Accelerometer.AccX -13462.000000 +25:521.234 Sensors-Accelerometer.AccY -1153.000000 +25:521.755 Sensors-Accelerometer.AccZ 7125.000000 +25:550.684 Sensors-Magnetometer.MagX 367.000000 +25:551.186 Sensors-Magnetometer.MagY -222.000000 +25:551.683 Sensors-Magnetometer.MagZ -296.000000 +25:560.690 Sensors-Accelerometer.AccX -13680.000000 +25:561.232 Sensors-Accelerometer.AccY -2341.000000 +25:561.753 Sensors-Accelerometer.AccZ 7124.000000 +25:600.725 Sensors-Accelerometer.AccX -12790.000000 +25:601.268 Sensors-Accelerometer.AccY -2208.000000 +25:601.773 Sensors-Accelerometer.AccZ 7324.000000 +25:640.690 Sensors-Accelerometer.AccX -13275.000000 +25:641.233 Sensors-Accelerometer.AccY -1779.000000 +25:641.749 Sensors-Accelerometer.AccZ 7034.000000 +25:680.690 Sensors-Accelerometer.AccX -13130.000000 +25:681.227 Sensors-Accelerometer.AccY -1739.000000 +25:681.743 Sensors-Accelerometer.AccZ 7552.000000 +25:720.690 Sensors-Accelerometer.AccX -11453.000000 +25:721.236 Sensors-Accelerometer.AccY -1459.000000 +25:721.754 Sensors-Accelerometer.AccZ 8700.000000 +25:760.690 Sensors-Accelerometer.AccX -11702.000000 +25:761.236 Sensors-Accelerometer.AccY -764.000000 +25:761.727 Sensors-Accelerometer.AccZ 8640.000000 +25:800.725 Sensors-Accelerometer.AccX -12351.000000 +25:801.273 Sensors-Accelerometer.AccY -1893.000000 +25:801.792 Sensors-Accelerometer.AccZ 8862.000000 +25:840.690 Sensors-Accelerometer.AccX -12919.000000 +25:841.233 Sensors-Accelerometer.AccY -1923.000000 +25:841.753 Sensors-Accelerometer.AccZ 8307.000000 +25:880.690 Sensors-Accelerometer.AccX -13646.000000 +25:881.231 Sensors-Accelerometer.AccY -1989.000000 +25:881.753 Sensors-Accelerometer.AccZ 7923.000000 +25:920.690 Sensors-Accelerometer.AccX -13455.000000 +25:921.230 Sensors-Accelerometer.AccY -1528.000000 +25:921.744 Sensors-Accelerometer.AccZ 7507.000000 +25:960.690 Sensors-Accelerometer.AccX -13119.000000 +25:961.233 Sensors-Accelerometer.AccY -815.000000 +25:961.731 Sensors-Accelerometer.AccZ 6920.000000 +26:000.725 Sensors-Accelerometer.AccX -13372.000000 +26:001.267 Sensors-Accelerometer.AccY -1024.000000 +26:001.771 Sensors-Accelerometer.AccZ 7037.000000 +26:040.690 Sensors-Accelerometer.AccX -13711.000000 +26:041.237 Sensors-Accelerometer.AccY -39.000000 +26:041.704 Sensors-Accelerometer.AccZ 4915.000000 +26:080.690 Sensors-Accelerometer.AccX -12720.000000 +26:081.232 Sensors-Accelerometer.AccY -1651.000000 +26:081.752 Sensors-Accelerometer.AccZ 8156.000000 +26:120.690 Sensors-Accelerometer.AccX -13766.000000 +26:121.232 Sensors-Accelerometer.AccY -2350.000000 +26:121.753 Sensors-Accelerometer.AccZ 8091.000000 +26:160.690 Sensors-Accelerometer.AccX -13383.000000 +26:161.237 Sensors-Accelerometer.AccY -2784.000000 +26:161.752 Sensors-Accelerometer.AccZ 8413.000000 +26:200.725 Sensors-Accelerometer.AccX -12733.000000 +26:201.275 Sensors-Accelerometer.AccY -2859.000000 +26:201.803 Sensors-Accelerometer.AccZ 8242.000000 +26:240.690 Sensors-Accelerometer.AccX -11610.000000 +26:241.226 Sensors-Accelerometer.AccY -1951.000000 +26:241.741 Sensors-Accelerometer.AccZ 8549.000000 +26:250.684 Sensors-Magnetometer.MagX 323.000000 +26:251.172 Sensors-Magnetometer.MagY -197.000000 +26:251.657 Sensors-Magnetometer.MagZ -367.000000 +26:320.690 Sensors-Accelerometer.AccX -11940.000000 +26:321.229 Sensors-Accelerometer.AccY -2537.000000 +26:321.746 Sensors-Accelerometer.AccZ 8440.000000 +26:360.690 Sensors-Accelerometer.AccX -12990.000000 +26:361.236 Sensors-Accelerometer.AccY -3529.000000 +26:361.753 Sensors-Accelerometer.AccZ 7690.000000 +26:400.725 Sensors-Accelerometer.AccX -11802.000000 +26:401.260 Sensors-Accelerometer.AccY -3464.000000 +26:401.769 Sensors-Accelerometer.AccZ 9069.000000 +26:440.690 Sensors-Accelerometer.AccX -13558.000000 +26:441.230 Sensors-Accelerometer.AccY -4903.000000 +26:441.750 Sensors-Accelerometer.AccZ 8084.000000 +26:480.690 Sensors-Accelerometer.AccX -13718.000000 +26:481.230 Sensors-Accelerometer.AccY -4202.000000 +26:481.741 Sensors-Accelerometer.AccZ 8475.000000 +26:520.690 Sensors-Accelerometer.AccX -10700.000000 +26:521.234 Sensors-Accelerometer.AccY -2788.000000 +26:521.749 Sensors-Accelerometer.AccZ 7453.000000 +26:560.690 Sensors-Accelerometer.AccX -13936.000000 +26:561.225 Sensors-Accelerometer.AccY -5408.000000 +26:561.734 Sensors-Accelerometer.AccZ 7461.000000 +26:600.683 Sensors-Magnetometer.MagX 369.000000 +26:601.169 Sensors-Magnetometer.MagY -137.000000 +26:601.655 Sensors-Magnetometer.MagZ -339.000000 +26:602.180 Sensors-Accelerometer.AccX -12159.000000 +26:602.729 Sensors-Accelerometer.AccY -3326.000000 +26:603.246 Sensors-Accelerometer.AccZ 6021.000000 +26:640.690 Sensors-Accelerometer.AccX -13824.000000 +26:641.219 Sensors-Accelerometer.AccY -4462.000000 +26:641.735 Sensors-Accelerometer.AccZ 5711.000000 +26:680.690 Sensors-Accelerometer.AccX -11814.000000 +26:681.232 Sensors-Accelerometer.AccY -2593.000000 +26:681.748 Sensors-Accelerometer.AccZ 6329.000000 +26:700.684 Sensors-Magnetometer.MagX 416.000000 +26:701.169 Sensors-Magnetometer.MagY -102.000000 +26:701.656 Sensors-Magnetometer.MagZ -284.000000 +26:720.690 Sensors-Accelerometer.AccX -14856.000000 +26:721.228 Sensors-Accelerometer.AccY -4169.000000 +26:721.744 Sensors-Accelerometer.AccZ 5349.000000 +26:760.690 Sensors-Accelerometer.AccX -13497.000000 +26:761.231 Sensors-Accelerometer.AccY -4039.000000 +26:761.749 Sensors-Accelerometer.AccZ 4385.000000 +26:800.725 Sensors-Accelerometer.AccX -15369.000000 +26:801.267 Sensors-Accelerometer.AccY -5024.000000 +26:801.782 Sensors-Accelerometer.AccZ 3912.000000 +26:840.690 Sensors-Accelerometer.AccX -13012.000000 +26:841.232 Sensors-Accelerometer.AccY -4408.000000 +26:841.746 Sensors-Accelerometer.AccZ 2470.000000 +26:850.684 Sensors-Magnetometer.MagX 454.000000 +26:851.175 Sensors-Magnetometer.MagY -62.000000 +26:851.642 Sensors-Magnetometer.MagZ -229.000000 +26:880.690 Sensors-Accelerometer.AccX -13600.000000 +26:881.219 Sensors-Accelerometer.AccY -4765.000000 +26:881.732 Sensors-Accelerometer.AccZ 1582.000000 +26:920.690 Sensors-Accelerometer.AccX -12222.000000 +26:921.236 Sensors-Accelerometer.AccY -5381.000000 +26:921.749 Sensors-Accelerometer.AccZ 1381.000000 +26:960.690 Sensors-Accelerometer.AccX -13408.000000 +26:961.230 Sensors-Accelerometer.AccY -5647.000000 +26:961.750 Sensors-Accelerometer.AccZ 734.000000 +27:000.725 Sensors-Accelerometer.AccX -14240.000000 +27:001.263 Sensors-Accelerometer.AccY -5648.000000 +27:001.778 Sensors-Accelerometer.AccZ 1293.000000 +27:040.690 Sensors-Accelerometer.AccX -13403.000000 +27:041.233 Sensors-Accelerometer.AccY -6231.000000 +27:041.755 Sensors-Accelerometer.AccZ 1273.000000 +27:050.683 Sensors-Magnetometer.MagX 478.000000 +27:051.176 Sensors-Magnetometer.MagY -48.000000 +27:051.636 Sensors-Magnetometer.MagZ -171.000000 +27:080.690 Sensors-Accelerometer.AccX -13895.000000 +27:081.233 Sensors-Accelerometer.AccY -5239.000000 +27:081.756 Sensors-Accelerometer.AccZ 1247.000000 +27:120.690 Sensors-Accelerometer.AccX -14345.000000 +27:121.233 Sensors-Accelerometer.AccY -5947.000000 +27:121.756 Sensors-Accelerometer.AccZ 1727.000000 +27:160.690 Sensors-Accelerometer.AccX -14451.000000 +27:161.234 Sensors-Accelerometer.AccY -5577.000000 +27:161.756 Sensors-Accelerometer.AccZ 1205.000000 +27:200.725 Sensors-Accelerometer.AccX -13715.000000 +27:201.269 Sensors-Accelerometer.AccY -5710.000000 +27:201.785 Sensors-Accelerometer.AccZ 1717.000000 +27:240.690 Sensors-Accelerometer.AccX -13567.000000 +27:241.233 Sensors-Accelerometer.AccY -5635.000000 +27:241.752 Sensors-Accelerometer.AccZ 1363.000000 +27:280.690 Sensors-Accelerometer.AccX -13483.000000 +27:281.232 Sensors-Accelerometer.AccY -6281.000000 +27:281.753 Sensors-Accelerometer.AccZ 1040.000000 +27:320.690 Sensors-Accelerometer.AccX -13593.000000 +27:321.232 Sensors-Accelerometer.AccY -5623.000000 +27:321.751 Sensors-Accelerometer.AccZ 370.000000 +27:360.690 Sensors-Accelerometer.AccX -13361.000000 +27:361.235 Sensors-Accelerometer.AccY -5167.000000 +27:361.760 Sensors-Accelerometer.AccZ 422.000000 +27:400.684 Sensors-Magnetometer.MagX 493.000000 +27:401.172 Sensors-Magnetometer.MagY -37.000000 +27:401.634 Sensors-Magnetometer.MagZ -119.000000 +27:402.160 Sensors-Accelerometer.AccX -13658.000000 +27:402.701 Sensors-Accelerometer.AccY -5679.000000 +27:403.224 Sensors-Accelerometer.AccZ 1121.000000 +27:440.690 Sensors-Accelerometer.AccX -13996.000000 +27:441.237 Sensors-Accelerometer.AccY -5580.000000 +27:441.758 Sensors-Accelerometer.AccZ -952.000000 +27:480.690 Sensors-Accelerometer.AccX -14312.000000 +27:481.235 Sensors-Accelerometer.AccY -6445.000000 +27:481.758 Sensors-Accelerometer.AccZ -800.000000 +27:520.690 Sensors-Accelerometer.AccX -14279.000000 +27:521.235 Sensors-Accelerometer.AccY -6461.000000 +27:521.755 Sensors-Accelerometer.AccZ 470.000000 +27:560.690 Sensors-Accelerometer.AccX -13578.000000 +27:561.234 Sensors-Accelerometer.AccY -6042.000000 +27:561.751 Sensors-Accelerometer.AccZ 1199.000000 +27:600.725 Sensors-Accelerometer.AccX -14256.000000 +27:601.266 Sensors-Accelerometer.AccY -6529.000000 +27:601.789 Sensors-Accelerometer.AccZ 1114.000000 +27:640.690 Sensors-Accelerometer.AccX -14381.000000 +27:641.240 Sensors-Accelerometer.AccY -6388.000000 +27:641.763 Sensors-Accelerometer.AccZ 782.000000 +27:680.690 Sensors-Accelerometer.AccX -13953.000000 +27:681.230 Sensors-Accelerometer.AccY -6883.000000 +27:681.748 Sensors-Accelerometer.AccZ 1375.000000 +27:720.690 Sensors-Accelerometer.AccX -12614.000000 +27:721.238 Sensors-Accelerometer.AccY -5419.000000 +27:721.762 Sensors-Accelerometer.AccZ 1490.000000 +27:760.690 Sensors-Accelerometer.AccX -13876.000000 +27:761.230 Sensors-Accelerometer.AccY -4188.000000 +27:761.750 Sensors-Accelerometer.AccZ 1766.000000 +27:800.683 Sensors-Magnetometer.MagX 477.000000 +27:801.176 Sensors-Magnetometer.MagY -92.000000 +27:801.643 Sensors-Magnetometer.MagZ -123.000000 +27:802.167 Sensors-Accelerometer.AccX -14296.000000 +27:802.710 Sensors-Accelerometer.AccY -6801.000000 +27:803.225 Sensors-Accelerometer.AccZ 1289.000000 +27:840.690 Sensors-Accelerometer.AccX -14672.000000 +27:841.233 Sensors-Accelerometer.AccY -3619.000000 +27:841.754 Sensors-Accelerometer.AccZ 656.000000 +27:880.690 Sensors-Accelerometer.AccX -14576.000000 +27:881.231 Sensors-Accelerometer.AccY -2650.000000 +27:881.746 Sensors-Accelerometer.AccZ 279.000000 +27:920.690 Sensors-Accelerometer.AccX -15270.000000 +27:921.233 Sensors-Accelerometer.AccY -2766.000000 +27:921.749 Sensors-Accelerometer.AccZ 1149.000000 +27:950.683 Sensors-Magnetometer.MagX 465.000000 +27:951.174 Sensors-Magnetometer.MagY -174.000000 +27:951.664 Sensors-Magnetometer.MagZ -65.000000 +27:960.690 Sensors-Accelerometer.AccX -14047.000000 +27:961.239 Sensors-Accelerometer.AccY -3863.000000 +27:961.762 Sensors-Accelerometer.AccZ -1251.000000 +28:000.683 Sensors-Magnetometer.MagX 452.000000 +28:001.169 Sensors-Magnetometer.MagY -232.000000 +28:001.653 Sensors-Magnetometer.MagZ -1.000000 +28:002.123 Sensors-Accelerometer.AccX -13528.000000 +28:002.659 Sensors-Accelerometer.AccY -226.000000 +28:003.146 Sensors-Accelerometer.AccZ -1924.000000 +28:040.690 Sensors-Accelerometer.AccX -12942.000000 +28:041.237 Sensors-Accelerometer.AccY -1240.000000 +28:041.751 Sensors-Accelerometer.AccZ -2528.000000 +28:050.684 Sensors-Magnetometer.MagX 415.000000 +28:051.176 Sensors-Magnetometer.MagY -301.000000 +28:051.672 Sensors-Magnetometer.MagZ 53.000000 +28:080.690 Sensors-Accelerometer.AccX -13590.000000 +28:081.233 Sensors-Accelerometer.AccY 3277.000000 +28:081.745 Sensors-Accelerometer.AccZ -4041.000000 +28:100.683 Sensors-Magnetometer.MagX 367.000000 +28:101.181 Sensors-Magnetometer.MagY -366.000000 +28:101.674 Sensors-Magnetometer.MagZ 120.000000 +28:120.690 Sensors-Accelerometer.AccX -12749.000000 +28:121.238 Sensors-Accelerometer.AccY 3777.000000 +28:121.758 Sensors-Accelerometer.AccZ -5051.000000 +28:160.690 Sensors-Accelerometer.AccX -11404.000000 +28:161.230 Sensors-Accelerometer.AccY 1846.000000 +28:161.741 Sensors-Accelerometer.AccZ -4323.000000 +28:200.725 Sensors-Accelerometer.AccX -15574.000000 +28:201.270 Sensors-Accelerometer.AccY 2792.000000 +28:201.779 Sensors-Accelerometer.AccZ -4018.000000 +28:240.690 Sensors-Accelerometer.AccX -16238.000000 +28:241.236 Sensors-Accelerometer.AccY -1702.000000 +28:241.751 Sensors-Accelerometer.AccZ -5398.000000 +28:250.684 Sensors-Magnetometer.MagX 394.000000 +28:251.173 Sensors-Magnetometer.MagY -286.000000 +28:251.666 Sensors-Magnetometer.MagZ 154.000000 +28:280.690 Sensors-Accelerometer.AccX -16523.000000 +28:281.235 Sensors-Accelerometer.AccY -262.000000 +28:281.729 Sensors-Accelerometer.AccZ -4309.000000 +28:300.683 Sensors-Magnetometer.MagX 421.000000 +28:301.172 Sensors-Magnetometer.MagY -235.000000 +28:301.666 Sensors-Magnetometer.MagZ 142.000000 +28:320.690 Sensors-Accelerometer.AccX -21661.000000 +28:321.230 Sensors-Accelerometer.AccY -5788.000000 +28:321.748 Sensors-Accelerometer.AccZ -7189.000000 +28:360.690 Sensors-Accelerometer.AccX -19052.000000 +28:361.236 Sensors-Accelerometer.AccY -3540.000000 +28:361.750 Sensors-Accelerometer.AccZ -4390.000000 +28:400.684 Sensors-Magnetometer.MagX 436.000000 +28:401.168 Sensors-Magnetometer.MagY -230.000000 +28:401.659 Sensors-Magnetometer.MagZ 66.000000 +28:402.156 Sensors-Accelerometer.AccX -22341.000000 +28:402.705 Sensors-Accelerometer.AccY -2510.000000 +28:403.229 Sensors-Accelerometer.AccZ -2688.000000 +28:440.690 Sensors-Accelerometer.AccX -14872.000000 +28:441.235 Sensors-Accelerometer.AccY -2990.000000 +28:441.758 Sensors-Accelerometer.AccZ -3803.000000 +28:480.690 Sensors-Accelerometer.AccX -18038.000000 +28:481.232 Sensors-Accelerometer.AccY -2900.000000 +28:481.743 Sensors-Accelerometer.AccZ 532.000000 +28:500.684 Sensors-Magnetometer.MagX 479.000000 +28:501.179 Sensors-Magnetometer.MagY -196.000000 +28:501.668 Sensors-Magnetometer.MagZ -2.000000 +28:520.690 Sensors-Accelerometer.AccX -15290.000000 +28:521.234 Sensors-Accelerometer.AccY -3669.000000 +28:521.756 Sensors-Accelerometer.AccZ 953.000000 +28:560.690 Sensors-Accelerometer.AccX -14957.000000 +28:561.234 Sensors-Accelerometer.AccY -2620.000000 +28:561.757 Sensors-Accelerometer.AccZ 1948.000000 +28:600.684 Sensors-Magnetometer.MagX 488.000000 +28:601.171 Sensors-Magnetometer.MagY -185.000000 +28:601.661 Sensors-Magnetometer.MagZ -108.000000 +28:602.183 Sensors-Accelerometer.AccX -10096.000000 +28:602.725 Sensors-Accelerometer.AccY -565.000000 +28:603.219 Sensors-Accelerometer.AccZ 2257.000000 +28:640.690 Sensors-Accelerometer.AccX -2192.000000 +28:641.204 Sensors-Accelerometer.AccY 2794.000000 +28:641.721 Sensors-Accelerometer.AccZ 1936.000000 +28:680.690 Sensors-Accelerometer.AccX 1092.000000 +28:681.197 Sensors-Accelerometer.AccY 2525.000000 +28:681.713 Sensors-Accelerometer.AccZ 2185.000000 +28:720.690 Sensors-Accelerometer.AccX -6713.000000 +28:721.207 Sensors-Accelerometer.AccY -1886.000000 +28:721.727 Sensors-Accelerometer.AccZ 295.000000 +28:750.683 Sensors-Magnetometer.MagX 464.000000 +28:751.169 Sensors-Magnetometer.MagY -236.000000 +28:751.659 Sensors-Magnetometer.MagZ -9.000000 +28:760.690 Sensors-Accelerometer.AccX -19611.000000 +28:761.240 Sensors-Accelerometer.AccY -4018.000000 +28:761.761 Sensors-Accelerometer.AccZ -1389.000000 +28:800.684 Sensors-Magnetometer.MagX 433.000000 +28:801.167 Sensors-Magnetometer.MagY -239.000000 +28:801.658 Sensors-Magnetometer.MagZ 43.000000 +28:802.156 Sensors-Accelerometer.AccX -21765.000000 +28:802.697 Sensors-Accelerometer.AccY -4344.000000 +28:803.210 Sensors-Accelerometer.AccZ -1851.000000 +28:840.690 Sensors-Accelerometer.AccX -26626.000000 +28:841.229 Sensors-Accelerometer.AccY -4174.000000 +28:841.743 Sensors-Accelerometer.AccZ -1386.000000 +28:880.690 Sensors-Accelerometer.AccX -28257.000000 +28:881.233 Sensors-Accelerometer.AccY -5582.000000 +28:881.750 Sensors-Accelerometer.AccZ 933.000000 +28:920.690 Sensors-Accelerometer.AccX -29874.000000 +28:921.236 Sensors-Accelerometer.AccY -6854.000000 +28:921.757 Sensors-Accelerometer.AccZ -2469.000000 +28:960.690 Sensors-Accelerometer.AccX -20994.000000 +28:961.226 Sensors-Accelerometer.AccY -4248.000000 +28:961.738 Sensors-Accelerometer.AccZ -961.000000 +29:000.683 Sensors-Magnetometer.MagX 495.000000 +29:001.175 Sensors-Magnetometer.MagY -212.000000 +29:001.659 Sensors-Magnetometer.MagZ -11.000000 +29:002.156 Sensors-Accelerometer.AccX -3977.000000 +29:002.678 Sensors-Accelerometer.AccY 639.000000 +29:003.170 Sensors-Accelerometer.AccZ 194.000000 +29:040.690 Sensors-Accelerometer.AccX 7803.000000 +29:041.210 Sensors-Accelerometer.AccY 5123.000000 +29:041.727 Sensors-Accelerometer.AccZ 65.000000 +29:050.684 Sensors-Magnetometer.MagX 498.000000 +29:051.178 Sensors-Magnetometer.MagY -209.000000 +29:051.667 Sensors-Magnetometer.MagZ -62.000000 +29:080.690 Sensors-Accelerometer.AccX 3623.000000 +29:081.210 Sensors-Accelerometer.AccY 2444.000000 +29:081.732 Sensors-Accelerometer.AccZ 1932.000000 +29:120.690 Sensors-Accelerometer.AccX 3716.000000 +29:121.204 Sensors-Accelerometer.AccY 2090.000000 +29:121.718 Sensors-Accelerometer.AccZ 328.000000 +29:160.690 Sensors-Accelerometer.AccX -7718.000000 +29:161.214 Sensors-Accelerometer.AccY 631.000000 +29:161.708 Sensors-Accelerometer.AccZ -2164.000000 +29:200.684 Sensors-Magnetometer.MagX 466.000000 +29:201.170 Sensors-Magnetometer.MagY -223.000000 +29:201.659 Sensors-Magnetometer.MagZ 12.000000 +29:202.155 Sensors-Accelerometer.AccX -24634.000000 +29:202.700 Sensors-Accelerometer.AccY -7520.000000 +29:203.220 Sensors-Accelerometer.AccZ -3317.000000 +29:240.690 Sensors-Accelerometer.AccX -32764.000000 +29:241.242 Sensors-Accelerometer.AccY -8855.000000 +29:241.766 Sensors-Accelerometer.AccZ -6570.000000 +29:250.684 Sensors-Magnetometer.MagX 444.000000 +29:251.174 Sensors-Magnetometer.MagY -170.000000 +29:251.660 Sensors-Magnetometer.MagZ 22.000000 +29:280.690 Sensors-Accelerometer.AccX -28783.000000 +29:281.244 Sensors-Accelerometer.AccY -8082.000000 +29:281.764 Sensors-Accelerometer.AccZ 2016.000000 +29:320.690 Sensors-Accelerometer.AccX -24637.000000 +29:321.241 Sensors-Accelerometer.AccY -3638.000000 +29:321.761 Sensors-Accelerometer.AccZ -895.000000 +29:360.690 Sensors-Accelerometer.AccX -12192.000000 +29:361.228 Sensors-Accelerometer.AccY -4667.000000 +29:361.751 Sensors-Accelerometer.AccZ -763.000000 +29:400.684 Sensors-Magnetometer.MagX 469.000000 +29:401.175 Sensors-Magnetometer.MagY -185.000000 +29:401.665 Sensors-Magnetometer.MagZ -48.000000 +29:402.163 Sensors-Accelerometer.AccX -2181.000000 +29:402.684 Sensors-Accelerometer.AccY -3698.000000 +29:403.202 Sensors-Accelerometer.AccZ -2327.000000 +29:440.690 Sensors-Accelerometer.AccX -13071.000000 +29:441.238 Sensors-Accelerometer.AccY -5085.000000 +29:441.759 Sensors-Accelerometer.AccZ 5447.000000 +29:480.690 Sensors-Accelerometer.AccX -15951.000000 +29:481.243 Sensors-Accelerometer.AccY -2042.000000 +29:481.763 Sensors-Accelerometer.AccZ 2586.000000 +29:500.683 Sensors-Magnetometer.MagX 509.000000 +29:501.174 Sensors-Magnetometer.MagY -168.000000 +29:501.654 Sensors-Magnetometer.MagZ -88.000000 +29:520.690 Sensors-Accelerometer.AccX -15868.000000 +29:521.234 Sensors-Accelerometer.AccY -3430.000000 +29:521.753 Sensors-Accelerometer.AccZ 1407.000000 +29:560.690 Sensors-Accelerometer.AccX -15119.000000 +29:561.240 Sensors-Accelerometer.AccY -3348.000000 +29:561.759 Sensors-Accelerometer.AccZ 6062.000000 +29:600.725 Sensors-Accelerometer.AccX -15118.000000 +29:601.270 Sensors-Accelerometer.AccY -3631.000000 +29:601.791 Sensors-Accelerometer.AccZ 5451.000000 +29:640.690 Sensors-Accelerometer.AccX -13422.000000 +29:641.230 Sensors-Accelerometer.AccY -3049.000000 +29:641.750 Sensors-Accelerometer.AccZ 5411.000000 +29:650.684 Sensors-Magnetometer.MagX 501.000000 +29:651.177 Sensors-Magnetometer.MagY -156.000000 +29:651.668 Sensors-Magnetometer.MagZ -165.000000 +29:680.690 Sensors-Accelerometer.AccX -10500.000000 +29:681.227 Sensors-Accelerometer.AccY -1300.000000 +29:681.743 Sensors-Accelerometer.AccZ 6653.000000 +29:700.683 Sensors-Magnetometer.MagX 499.000000 +29:701.175 Sensors-Magnetometer.MagY -228.000000 +29:701.661 Sensors-Magnetometer.MagZ -153.000000 +29:720.690 Sensors-Accelerometer.AccX -13355.000000 +29:721.239 Sensors-Accelerometer.AccY 1575.000000 +29:721.757 Sensors-Accelerometer.AccZ 3623.000000 +29:750.683 Sensors-Magnetometer.MagX 468.000000 +29:751.172 Sensors-Magnetometer.MagY -305.000000 +29:751.664 Sensors-Magnetometer.MagZ -104.000000 +29:760.690 Sensors-Accelerometer.AccX -13769.000000 +29:761.229 Sensors-Accelerometer.AccY 2830.000000 +29:761.748 Sensors-Accelerometer.AccZ 2630.000000 +29:800.725 Sensors-Accelerometer.AccX -11949.000000 +29:801.272 Sensors-Accelerometer.AccY 3609.000000 +29:801.789 Sensors-Accelerometer.AccZ 3726.000000 +29:840.690 Sensors-Accelerometer.AccX -11788.000000 +29:841.234 Sensors-Accelerometer.AccY 1686.000000 +29:841.746 Sensors-Accelerometer.AccZ 5279.000000 +29:850.684 Sensors-Magnetometer.MagX 440.000000 +29:851.172 Sensors-Magnetometer.MagY -316.000000 +29:851.664 Sensors-Magnetometer.MagZ -161.000000 +29:880.690 Sensors-Accelerometer.AccX -13035.000000 +29:881.242 Sensors-Accelerometer.AccY -249.000000 +29:881.736 Sensors-Accelerometer.AccZ 7033.000000 +29:920.690 Sensors-Accelerometer.AccX -13763.000000 +29:921.230 Sensors-Accelerometer.AccY -487.000000 +29:921.725 Sensors-Accelerometer.AccZ 8278.000000 +29:950.684 Sensors-Magnetometer.MagX 427.000000 +29:951.179 Sensors-Magnetometer.MagY -278.000000 +29:951.674 Sensors-Magnetometer.MagZ -212.000000 +29:960.690 Sensors-Accelerometer.AccX -15338.000000 +29:961.239 Sensors-Accelerometer.AccY -3918.000000 +29:961.763 Sensors-Accelerometer.AccZ 10020.000000 +30:000.725 Sensors-Accelerometer.AccX -14533.000000 +30:001.273 Sensors-Accelerometer.AccY -1029.000000 +30:001.788 Sensors-Accelerometer.AccZ 7434.000000 +30:040.690 Sensors-Accelerometer.AccX -10739.000000 +30:041.237 Sensors-Accelerometer.AccY 2014.000000 +30:041.759 Sensors-Accelerometer.AccZ 6860.000000 +30:080.690 Sensors-Accelerometer.AccX -14053.000000 +30:081.234 Sensors-Accelerometer.AccY 554.000000 +30:081.724 Sensors-Accelerometer.AccZ 9165.000000 +30:120.690 Sensors-Accelerometer.AccX -14296.000000 +30:121.236 Sensors-Accelerometer.AccY -793.000000 +30:121.731 Sensors-Accelerometer.AccZ 7812.000000 +30:160.690 Sensors-Accelerometer.AccX -14803.000000 +30:161.234 Sensors-Accelerometer.AccY 2748.000000 +30:161.752 Sensors-Accelerometer.AccZ 8215.000000 +30:200.725 Sensors-Accelerometer.AccX -10488.000000 +30:201.264 Sensors-Accelerometer.AccY 6542.000000 +30:201.792 Sensors-Accelerometer.AccZ 13154.000000 +30:240.690 Sensors-Accelerometer.AccX -16250.000000 +30:241.237 Sensors-Accelerometer.AccY 10043.000000 +30:241.785 Sensors-Accelerometer.AccZ 11248.000000 +30:280.690 Sensors-Accelerometer.AccX -14337.000000 +30:281.234 Sensors-Accelerometer.AccY 8478.000000 +30:281.757 Sensors-Accelerometer.AccZ 8501.000000 +30:320.690 Sensors-Accelerometer.AccX -10623.000000 +30:321.235 Sensors-Accelerometer.AccY -1064.000000 +30:321.747 Sensors-Accelerometer.AccZ 7086.000000 +30:350.683 Sensors-Magnetometer.MagX 403.000000 +30:351.182 Sensors-Magnetometer.MagY -211.000000 +30:351.675 Sensors-Magnetometer.MagZ -304.000000 +30:360.691 Sensors-Accelerometer.AccX -10597.000000 +30:361.238 Sensors-Accelerometer.AccY -18163.000000 +30:361.790 Sensors-Accelerometer.AccZ 4896.000000 +30:400.725 Sensors-Accelerometer.AccX -7717.000000 +30:401.247 Sensors-Accelerometer.AccY -31394.000000 +30:401.796 Sensors-Accelerometer.AccZ 6365.000000 +30:440.690 Sensors-Accelerometer.AccX -12589.000000 +30:441.236 Sensors-Accelerometer.AccY -13277.000000 +30:441.781 Sensors-Accelerometer.AccZ 4623.000000 +30:450.684 Sensors-Magnetometer.MagX 371.000000 +30:451.179 Sensors-Magnetometer.MagY -275.000000 +30:451.677 Sensors-Magnetometer.MagZ -294.000000 +30:480.690 Sensors-Accelerometer.AccX -12304.000000 +30:481.230 Sensors-Accelerometer.AccY 8602.000000 +30:481.745 Sensors-Accelerometer.AccZ 5093.000000 +30:500.683 Sensors-Magnetometer.MagX 381.000000 +30:501.175 Sensors-Magnetometer.MagY -341.000000 +30:501.662 Sensors-Magnetometer.MagZ -254.000000 +30:520.690 Sensors-Accelerometer.AccX -7406.000000 +30:521.209 Sensors-Accelerometer.AccY 30184.000000 +30:521.756 Sensors-Accelerometer.AccZ 9149.000000 +30:550.684 Sensors-Magnetometer.MagX 398.000000 +30:551.180 Sensors-Magnetometer.MagY -353.000000 +30:551.675 Sensors-Magnetometer.MagZ -199.000000 +30:560.690 Sensors-Accelerometer.AccX -9032.000000 +30:561.209 Sensors-Accelerometer.AccY 31991.000000 +30:561.762 Sensors-Accelerometer.AccZ 8865.000000 +30:600.725 Sensors-Accelerometer.AccX -10191.000000 +30:601.276 Sensors-Accelerometer.AccY 29219.000000 +30:601.829 Sensors-Accelerometer.AccZ 7154.000000 +30:640.690 Sensors-Accelerometer.AccX -12644.000000 +30:641.235 Sensors-Accelerometer.AccY 9761.000000 +30:641.759 Sensors-Accelerometer.AccZ 5237.000000 +30:650.684 Sensors-Magnetometer.MagX 388.000000 +30:651.175 Sensors-Magnetometer.MagY -265.000000 +30:651.668 Sensors-Magnetometer.MagZ -289.000000 +30:680.690 Sensors-Accelerometer.AccX -12367.000000 +30:681.243 Sensors-Accelerometer.AccY -19071.000000 +30:681.794 Sensors-Accelerometer.AccZ 7423.000000 +30:700.683 Sensors-Magnetometer.MagX 384.000000 +30:701.173 Sensors-Magnetometer.MagY -208.000000 +30:701.662 Sensors-Magnetometer.MagZ -321.000000 +30:720.690 Sensors-Accelerometer.AccX -9745.000000 +30:721.208 Sensors-Accelerometer.AccY -32764.000000 +30:721.757 Sensors-Accelerometer.AccZ 9215.000000 +30:760.690 Sensors-Accelerometer.AccX -8901.000000 +30:761.214 Sensors-Accelerometer.AccY -27327.000000 +30:761.760 Sensors-Accelerometer.AccZ 6858.000000 +30:800.683 Sensors-Magnetometer.MagX 412.000000 +30:801.172 Sensors-Magnetometer.MagY -287.000000 +30:801.665 Sensors-Magnetometer.MagZ -235.000000 +30:802.197 Sensors-Accelerometer.AccX -11726.000000 +30:802.742 Sensors-Accelerometer.AccY 3922.000000 +30:803.260 Sensors-Accelerometer.AccZ 4076.000000 +30:840.690 Sensors-Accelerometer.AccX -8747.000000 +30:841.216 Sensors-Accelerometer.AccY 32764.000000 +30:841.769 Sensors-Accelerometer.AccZ 6900.000000 +30:850.684 Sensors-Magnetometer.MagX 393.000000 +30:851.178 Sensors-Magnetometer.MagY -380.000000 +30:851.670 Sensors-Magnetometer.MagZ -167.000000 +30:880.690 Sensors-Accelerometer.AccX -8908.000000 +30:881.212 Sensors-Accelerometer.AccY 32764.000000 +30:881.764 Sensors-Accelerometer.AccZ 5200.000000 +30:920.690 Sensors-Accelerometer.AccX -11696.000000 +30:921.234 Sensors-Accelerometer.AccY 18579.000000 +30:921.786 Sensors-Accelerometer.AccZ 4705.000000 +30:950.683 Sensors-Magnetometer.MagX 404.000000 +30:951.172 Sensors-Magnetometer.MagY -313.000000 +30:951.667 Sensors-Magnetometer.MagZ -232.000000 +30:960.690 Sensors-Accelerometer.AccX -13620.000000 +30:961.232 Sensors-Accelerometer.AccY -4145.000000 +30:961.753 Sensors-Accelerometer.AccZ 4761.000000 +31:000.683 Sensors-Magnetometer.MagX 398.000000 +31:001.179 Sensors-Magnetometer.MagY -229.000000 +31:001.674 Sensors-Magnetometer.MagZ -288.000000 +31:002.196 Sensors-Accelerometer.AccX -15841.000000 +31:002.746 Sensors-Accelerometer.AccY -30632.000000 +31:003.294 Sensors-Accelerometer.AccZ 8725.000000 +31:040.690 Sensors-Accelerometer.AccX -9338.000000 +31:041.213 Sensors-Accelerometer.AccY -32764.000000 +31:041.766 Sensors-Accelerometer.AccZ 10803.000000 +31:080.690 Sensors-Accelerometer.AccX -9715.000000 +31:081.220 Sensors-Accelerometer.AccY -10719.000000 +31:081.771 Sensors-Accelerometer.AccZ 4961.000000 +31:100.683 Sensors-Magnetometer.MagX 392.000000 +31:101.176 Sensors-Magnetometer.MagY -328.000000 +31:101.664 Sensors-Magnetometer.MagZ -219.000000 +31:120.690 Sensors-Accelerometer.AccX -10357.000000 +31:121.237 Sensors-Accelerometer.AccY 5049.000000 +31:121.759 Sensors-Accelerometer.AccZ 3857.000000 +31:150.683 Sensors-Magnetometer.MagX 366.000000 +31:151.178 Sensors-Magnetometer.MagY -431.000000 +31:151.673 Sensors-Magnetometer.MagZ -124.000000 +31:160.690 Sensors-Accelerometer.AccX -8419.000000 +31:161.212 Sensors-Accelerometer.AccY 31729.000000 +31:161.764 Sensors-Accelerometer.AccZ 5456.000000 +31:200.725 Sensors-Accelerometer.AccX -9651.000000 +31:201.248 Sensors-Accelerometer.AccY 27315.000000 +31:201.799 Sensors-Accelerometer.AccZ 6074.000000 +31:240.690 Sensors-Accelerometer.AccX -14804.000000 +31:241.232 Sensors-Accelerometer.AccY 12913.000000 +31:241.777 Sensors-Accelerometer.AccZ 9493.000000 +31:280.690 Sensors-Accelerometer.AccX -18437.000000 +31:281.235 Sensors-Accelerometer.AccY 5820.000000 +31:281.757 Sensors-Accelerometer.AccZ 11710.000000 +31:300.683 Sensors-Magnetometer.MagX 413.000000 +31:301.173 Sensors-Magnetometer.MagY -355.000000 +31:301.668 Sensors-Magnetometer.MagZ -194.000000 +31:320.690 Sensors-Accelerometer.AccX -18172.000000 +31:321.238 Sensors-Accelerometer.AccY -733.000000 +31:321.737 Sensors-Accelerometer.AccZ 12377.000000 +31:350.683 Sensors-Magnetometer.MagX 400.000000 +31:351.171 Sensors-Magnetometer.MagY -294.000000 +31:351.667 Sensors-Magnetometer.MagZ -275.000000 +31:360.690 Sensors-Accelerometer.AccX -13308.000000 +31:361.234 Sensors-Accelerometer.AccY -179.000000 +31:361.725 Sensors-Accelerometer.AccZ 11602.000000 +31:400.683 Sensors-Magnetometer.MagX 385.000000 +31:401.178 Sensors-Magnetometer.MagY -235.000000 +31:401.674 Sensors-Magnetometer.MagZ -371.000000 +31:402.205 Sensors-Accelerometer.AccX -1632.000000 +31:402.721 Sensors-Accelerometer.AccY 3161.000000 +31:403.243 Sensors-Accelerometer.AccZ 9364.000000 +31:440.690 Sensors-Accelerometer.AccX 10780.000000 +31:441.232 Sensors-Accelerometer.AccY -419.000000 +31:441.731 Sensors-Accelerometer.AccZ 7840.000000 +31:450.684 Sensors-Magnetometer.MagX 395.000000 +31:451.180 Sensors-Magnetometer.MagY -170.000000 +31:451.670 Sensors-Magnetometer.MagZ -398.000000 +31:480.690 Sensors-Accelerometer.AccX 14743.000000 +31:481.240 Sensors-Accelerometer.AccY -597.000000 +31:481.733 Sensors-Accelerometer.AccZ 4644.000000 +31:500.684 Sensors-Magnetometer.MagX 438.000000 +31:501.177 Sensors-Magnetometer.MagY -183.000000 +31:501.669 Sensors-Magnetometer.MagZ -330.000000 +31:520.690 Sensors-Accelerometer.AccX 3729.000000 +31:521.204 Sensors-Accelerometer.AccY -705.000000 +31:521.697 Sensors-Accelerometer.AccZ 1208.000000 +31:550.683 Sensors-Magnetometer.MagX 439.000000 +31:551.179 Sensors-Magnetometer.MagY -322.000000 +31:551.670 Sensors-Magnetometer.MagZ -164.000000 +31:560.690 Sensors-Accelerometer.AccX -15084.000000 +31:561.236 Sensors-Accelerometer.AccY 4802.000000 +31:561.755 Sensors-Accelerometer.AccZ 723.000000 +31:600.683 Sensors-Magnetometer.MagX 380.000000 +31:601.174 Sensors-Magnetometer.MagY -451.000000 +31:601.665 Sensors-Magnetometer.MagZ 25.000000 +31:602.164 Sensors-Accelerometer.AccX -32764.000000 +31:602.717 Sensors-Accelerometer.AccY 19312.000000 +31:603.264 Sensors-Accelerometer.AccZ 8149.000000 +31:640.690 Sensors-Accelerometer.AccX -32764.000000 +31:641.245 Sensors-Accelerometer.AccY 21515.000000 +31:641.793 Sensors-Accelerometer.AccZ 9285.000000 +31:680.690 Sensors-Accelerometer.AccX -32553.000000 +31:681.239 Sensors-Accelerometer.AccY 14345.000000 +31:681.785 Sensors-Accelerometer.AccZ 10314.000000 +31:700.683 Sensors-Magnetometer.MagX 462.000000 +31:701.176 Sensors-Magnetometer.MagY -336.000000 +31:701.660 Sensors-Magnetometer.MagZ -78.000000 +31:720.690 Sensors-Accelerometer.AccX -14675.000000 +31:721.243 Sensors-Accelerometer.AccY 7564.000000 +31:721.767 Sensors-Accelerometer.AccZ 7201.000000 +31:750.683 Sensors-Magnetometer.MagX 494.000000 +31:751.175 Sensors-Magnetometer.MagY -205.000000 +31:751.663 Sensors-Magnetometer.MagZ -227.000000 +31:760.690 Sensors-Accelerometer.AccX 1344.000000 +31:761.195 Sensors-Accelerometer.AccY 2862.000000 +31:761.717 Sensors-Accelerometer.AccZ 3844.000000 +31:800.683 Sensors-Magnetometer.MagX 491.000000 +31:801.181 Sensors-Magnetometer.MagY -112.000000 +31:801.667 Sensors-Magnetometer.MagZ -277.000000 +31:802.192 Sensors-Accelerometer.AccX 12566.000000 +31:802.744 Sensors-Accelerometer.AccY -834.000000 +31:803.236 Sensors-Accelerometer.AccZ 5310.000000 +31:840.690 Sensors-Accelerometer.AccX 10349.000000 +31:841.235 Sensors-Accelerometer.AccY -3466.000000 +31:841.754 Sensors-Accelerometer.AccZ 3259.000000 +31:880.690 Sensors-Accelerometer.AccX 8136.000000 +31:881.211 Sensors-Accelerometer.AccY -428.000000 +31:881.701 Sensors-Accelerometer.AccZ 3047.000000 +31:900.683 Sensors-Magnetometer.MagX 495.000000 +31:901.182 Sensors-Magnetometer.MagY -278.000000 +31:901.676 Sensors-Magnetometer.MagZ -79.000000 +31:920.690 Sensors-Accelerometer.AccX -24984.000000 +31:921.239 Sensors-Accelerometer.AccY 6215.000000 +31:921.767 Sensors-Accelerometer.AccZ 2701.000000 +31:950.683 Sensors-Magnetometer.MagX 417.000000 +31:951.174 Sensors-Magnetometer.MagY -395.000000 +31:951.670 Sensors-Magnetometer.MagZ 42.000000 +31:960.690 Sensors-Accelerometer.AccX -32764.000000 +31:961.245 Sensors-Accelerometer.AccY 14244.000000 +31:961.791 Sensors-Accelerometer.AccZ 10133.000000 +32:000.725 Sensors-Accelerometer.AccX -19744.000000 +32:001.260 Sensors-Accelerometer.AccY 12625.000000 +32:001.798 Sensors-Accelerometer.AccZ 10088.000000 +32:040.690 Sensors-Accelerometer.AccX -9164.000000 +32:041.213 Sensors-Accelerometer.AccY 4844.000000 +32:041.730 Sensors-Accelerometer.AccZ 7342.000000 +32:080.690 Sensors-Accelerometer.AccX -9055.000000 +32:081.212 Sensors-Accelerometer.AccY 635.000000 +32:081.706 Sensors-Accelerometer.AccZ 5360.000000 +32:100.683 Sensors-Magnetometer.MagX 484.000000 +32:101.172 Sensors-Magnetometer.MagY -292.000000 +32:101.660 Sensors-Magnetometer.MagZ 24.000000 +32:120.690 Sensors-Accelerometer.AccX -14180.000000 +32:121.232 Sensors-Accelerometer.AccY -1087.000000 +32:121.749 Sensors-Accelerometer.AccZ 5651.000000 +32:160.690 Sensors-Accelerometer.AccX -15622.000000 +32:161.236 Sensors-Accelerometer.AccY -311.000000 +32:161.729 Sensors-Accelerometer.AccZ 6419.000000 +32:200.725 Sensors-Accelerometer.AccX -18176.000000 +32:201.262 Sensors-Accelerometer.AccY 6106.000000 +32:201.780 Sensors-Accelerometer.AccZ 5608.000000 +32:240.690 Sensors-Accelerometer.AccX -15633.000000 +32:241.233 Sensors-Accelerometer.AccY 16989.000000 +32:241.774 Sensors-Accelerometer.AccZ 4682.000000 +32:280.690 Sensors-Accelerometer.AccX -16528.000000 +32:281.228 Sensors-Accelerometer.AccY 14471.000000 +32:281.772 Sensors-Accelerometer.AccZ 3689.000000 +32:300.684 Sensors-Magnetometer.MagX 478.000000 +32:301.180 Sensors-Magnetometer.MagY -281.000000 +32:301.670 Sensors-Magnetometer.MagZ -33.000000 +32:320.690 Sensors-Accelerometer.AccX -13901.000000 +32:321.233 Sensors-Accelerometer.AccY 2853.000000 +32:321.748 Sensors-Accelerometer.AccZ 4123.000000 +32:350.683 Sensors-Magnetometer.MagX 473.000000 +32:351.179 Sensors-Magnetometer.MagY -218.000000 +32:351.667 Sensors-Magnetometer.MagZ -111.000000 +32:360.690 Sensors-Accelerometer.AccX -9476.000000 +32:361.209 Sensors-Accelerometer.AccY -15334.000000 +32:361.759 Sensors-Accelerometer.AccZ 7123.000000 +32:400.683 Sensors-Magnetometer.MagX 484.000000 +32:401.169 Sensors-Magnetometer.MagY -154.000000 +32:401.657 Sensors-Magnetometer.MagZ -140.000000 +32:402.182 Sensors-Accelerometer.AccX -4489.000000 +32:402.701 Sensors-Accelerometer.AccY -32764.000000 +32:403.253 Sensors-Accelerometer.AccZ 9864.000000 +32:440.690 Sensors-Accelerometer.AccX -4873.000000 +32:441.211 Sensors-Accelerometer.AccY -24407.000000 +32:441.760 Sensors-Accelerometer.AccZ 6418.000000 +32:480.690 Sensors-Accelerometer.AccX -13131.000000 +32:481.232 Sensors-Accelerometer.AccY -5211.000000 +32:481.756 Sensors-Accelerometer.AccZ -29.000000 +32:500.683 Sensors-Magnetometer.MagX 494.000000 +32:501.175 Sensors-Magnetometer.MagY -237.000000 +32:501.667 Sensors-Magnetometer.MagZ -55.000000 +32:520.690 Sensors-Accelerometer.AccX -18771.000000 +32:521.240 Sensors-Accelerometer.AccY 28817.000000 +32:521.784 Sensors-Accelerometer.AccZ 67.000000 +32:550.683 Sensors-Magnetometer.MagX 476.000000 +32:551.175 Sensors-Magnetometer.MagY -326.000000 +32:551.671 Sensors-Magnetometer.MagZ 44.000000 +32:560.690 Sensors-Accelerometer.AccX -16906.000000 +32:561.232 Sensors-Accelerometer.AccY 32764.000000 +32:561.787 Sensors-Accelerometer.AccZ 1037.000000 +32:600.725 Sensors-Accelerometer.AccX -17709.000000 +32:601.273 Sensors-Accelerometer.AccY 23519.000000 +32:601.829 Sensors-Accelerometer.AccZ 2038.000000 +32:640.690 Sensors-Accelerometer.AccX -18588.000000 +32:641.232 Sensors-Accelerometer.AccY -6535.000000 +32:641.758 Sensors-Accelerometer.AccZ 8264.000000 +32:650.684 Sensors-Magnetometer.MagX 487.000000 +32:651.178 Sensors-Magnetometer.MagY -313.000000 +32:651.672 Sensors-Magnetometer.MagZ -59.000000 +32:680.690 Sensors-Accelerometer.AccX -13424.000000 +32:681.230 Sensors-Accelerometer.AccY -14954.000000 +32:681.775 Sensors-Accelerometer.AccZ 8277.000000 +32:700.683 Sensors-Magnetometer.MagX 500.000000 +32:701.176 Sensors-Magnetometer.MagY -183.000000 +32:701.672 Sensors-Magnetometer.MagZ -210.000000 +32:720.690 Sensors-Accelerometer.AccX -6657.000000 +32:721.210 Sensors-Accelerometer.AccY -11445.000000 +32:721.759 Sensors-Accelerometer.AccZ 9572.000000 +32:750.683 Sensors-Magnetometer.MagX 491.000000 +32:751.185 Sensors-Magnetometer.MagY -57.000000 +32:751.656 Sensors-Magnetometer.MagZ -273.000000 +32:760.690 Sensors-Accelerometer.AccX -30.000000 +32:761.160 Sensors-Accelerometer.AccY -1485.000000 +32:761.680 Sensors-Accelerometer.AccZ 10961.000000 +32:800.683 Sensors-Magnetometer.MagX 486.000000 +32:801.168 Sensors-Magnetometer.MagY 41.000000 +32:801.623 Sensors-Magnetometer.MagZ -319.000000 +32:802.147 Sensors-Accelerometer.AccX 2811.000000 +32:802.662 Sensors-Accelerometer.AccY 4472.000000 +32:803.175 Sensors-Accelerometer.AccZ 10502.000000 +32:840.690 Sensors-Accelerometer.AccX 10898.000000 +32:841.226 Sensors-Accelerometer.AccY 10226.000000 +32:841.767 Sensors-Accelerometer.AccZ 11378.000000 +32:850.683 Sensors-Magnetometer.MagX 551.000000 +32:851.169 Sensors-Magnetometer.MagY 85.000000 +32:851.628 Sensors-Magnetometer.MagZ -208.000000 +32:880.690 Sensors-Accelerometer.AccX -17050.000000 +32:881.224 Sensors-Accelerometer.AccY -5451.000000 +32:881.741 Sensors-Accelerometer.AccZ -4911.000000 +32:900.683 Sensors-Magnetometer.MagX 599.000000 +32:901.174 Sensors-Magnetometer.MagY 18.000000 +32:901.631 Sensors-Magnetometer.MagZ 95.000000 +32:920.690 Sensors-Accelerometer.AccX -22382.000000 +32:921.237 Sensors-Accelerometer.AccY -4128.000000 +32:921.750 Sensors-Accelerometer.AccZ 1686.000000 +32:950.683 Sensors-Magnetometer.MagX 506.000000 +32:951.171 Sensors-Magnetometer.MagY -252.000000 +32:951.659 Sensors-Magnetometer.MagZ 217.000000 +32:960.690 Sensors-Accelerometer.AccX -22967.000000 +32:961.235 Sensors-Accelerometer.AccY 11478.000000 +32:961.777 Sensors-Accelerometer.AccZ 2060.000000 +33:000.683 Sensors-Magnetometer.MagX 380.000000 +33:001.172 Sensors-Magnetometer.MagY -422.000000 +33:001.659 Sensors-Magnetometer.MagZ 214.000000 +33:002.181 Sensors-Accelerometer.AccX -25910.000000 +33:002.728 Sensors-Accelerometer.AccY 20194.000000 +33:003.269 Sensors-Accelerometer.AccZ 2562.000000 +33:040.690 Sensors-Accelerometer.AccX -18764.000000 +33:041.234 Sensors-Accelerometer.AccY 15082.000000 +33:041.776 Sensors-Accelerometer.AccZ 5373.000000 +33:050.684 Sensors-Magnetometer.MagX 400.000000 +33:051.166 Sensors-Magnetometer.MagY -412.000000 +33:051.654 Sensors-Magnetometer.MagZ 105.000000 +33:080.690 Sensors-Accelerometer.AccX -9015.000000 +33:081.212 Sensors-Accelerometer.AccY 5096.000000 +33:081.730 Sensors-Accelerometer.AccZ 3353.000000 +33:100.683 Sensors-Magnetometer.MagX 480.000000 +33:101.170 Sensors-Magnetometer.MagY -283.000000 +33:101.659 Sensors-Magnetometer.MagZ -80.000000 +33:120.690 Sensors-Accelerometer.AccX -9392.000000 +33:121.210 Sensors-Accelerometer.AccY -10313.000000 +33:121.753 Sensors-Accelerometer.AccZ -840.000000 +33:150.683 Sensors-Magnetometer.MagX 501.000000 +33:151.178 Sensors-Magnetometer.MagY -120.000000 +33:151.667 Sensors-Magnetometer.MagZ -186.000000 +33:160.690 Sensors-Accelerometer.AccX -5584.000000 +33:161.202 Sensors-Accelerometer.AccY -23152.000000 +33:161.745 Sensors-Accelerometer.AccZ -5657.000000 +33:200.725 Sensors-Accelerometer.AccX -3765.000000 +33:201.245 Sensors-Accelerometer.AccY -22722.000000 +33:201.789 Sensors-Accelerometer.AccZ -4984.000000 +33:240.690 Sensors-Accelerometer.AccX -5793.000000 +33:241.210 Sensors-Accelerometer.AccY -14906.000000 +33:241.754 Sensors-Accelerometer.AccZ -9747.000000 +33:250.683 Sensors-Magnetometer.MagX 560.000000 +33:251.172 Sensors-Magnetometer.MagY -146.000000 +33:251.662 Sensors-Magnetometer.MagZ 41.000000 +33:280.690 Sensors-Accelerometer.AccX -18988.000000 +33:281.230 Sensors-Accelerometer.AccY 14713.000000 +33:281.770 Sensors-Accelerometer.AccZ -4976.000000 +33:300.684 Sensors-Magnetometer.MagX 542.000000 +33:301.171 Sensors-Magnetometer.MagY -182.000000 +33:301.657 Sensors-Magnetometer.MagZ 268.000000 +33:320.690 Sensors-Accelerometer.AccX -26302.000000 +33:321.235 Sensors-Accelerometer.AccY 31686.000000 +33:321.785 Sensors-Accelerometer.AccZ 6106.000000 +33:360.690 Sensors-Accelerometer.AccX -27756.000000 +33:361.234 Sensors-Accelerometer.AccY 29786.000000 +33:361.779 Sensors-Accelerometer.AccZ 12091.000000 +33:400.683 Sensors-Magnetometer.MagX 573.000000 +33:401.177 Sensors-Magnetometer.MagY -113.000000 +33:401.665 Sensors-Magnetometer.MagZ 193.000000 +33:402.190 Sensors-Accelerometer.AccX -17965.000000 +33:402.737 Sensors-Accelerometer.AccY 12147.000000 +33:403.288 Sensors-Accelerometer.AccZ 7207.000000 +33:440.690 Sensors-Accelerometer.AccX -12545.000000 +33:441.232 Sensors-Accelerometer.AccY -3258.000000 +33:441.748 Sensors-Accelerometer.AccZ -5913.000000 +33:450.684 Sensors-Magnetometer.MagX 573.000000 +33:451.176 Sensors-Magnetometer.MagY -82.000000 +33:451.637 Sensors-Magnetometer.MagZ 15.000000 +33:480.690 Sensors-Accelerometer.AccX -5415.000000 +33:481.207 Sensors-Accelerometer.AccY -15178.000000 +33:481.754 Sensors-Accelerometer.AccZ -5916.000000 +33:500.684 Sensors-Magnetometer.MagX 566.000000 +33:501.177 Sensors-Magnetometer.MagY -32.000000 +33:501.634 Sensors-Magnetometer.MagZ -109.000000 +33:520.690 Sensors-Accelerometer.AccX -10099.000000 +33:521.236 Sensors-Accelerometer.AccY -17118.000000 +33:521.785 Sensors-Accelerometer.AccZ -11072.000000 +33:560.690 Sensors-Accelerometer.AccX -15654.000000 +33:561.240 Sensors-Accelerometer.AccY -14580.000000 +33:561.786 Sensors-Accelerometer.AccZ -11043.000000 +33:600.684 Sensors-Magnetometer.MagX 581.000000 +33:601.170 Sensors-Magnetometer.MagY -69.000000 +33:601.630 Sensors-Magnetometer.MagZ 24.000000 +33:602.122 Sensors-Accelerometer.AccX -10958.000000 +33:602.659 Sensors-Accelerometer.AccY -3625.000000 +33:603.171 Sensors-Accelerometer.AccZ -4357.000000 +33:640.690 Sensors-Accelerometer.AccX -18269.000000 +33:641.231 Sensors-Accelerometer.AccY 16047.000000 +33:641.777 Sensors-Accelerometer.AccZ 8321.000000 +33:650.684 Sensors-Magnetometer.MagX 576.000000 +33:651.168 Sensors-Magnetometer.MagY -126.000000 +33:651.656 Sensors-Magnetometer.MagZ 130.000000 +33:680.690 Sensors-Accelerometer.AccX -18952.000000 +33:681.231 Sensors-Accelerometer.AccY 27279.000000 +33:681.776 Sensors-Accelerometer.AccZ 12995.000000 +33:700.684 Sensors-Magnetometer.MagX 573.000000 +33:701.177 Sensors-Magnetometer.MagY -117.000000 +33:701.663 Sensors-Magnetometer.MagZ 197.000000 +33:720.690 Sensors-Accelerometer.AccX -20412.000000 +33:721.239 Sensors-Accelerometer.AccY 22973.000000 +33:721.785 Sensors-Accelerometer.AccZ 13946.000000 +33:750.684 Sensors-Magnetometer.MagX 589.000000 +33:751.179 Sensors-Magnetometer.MagY -71.000000 +33:751.645 Sensors-Magnetometer.MagZ 146.000000 +33:760.690 Sensors-Accelerometer.AccX -17476.000000 +33:761.228 Sensors-Accelerometer.AccY 8747.000000 +33:761.752 Sensors-Accelerometer.AccZ 10389.000000 +33:800.684 Sensors-Magnetometer.MagX 594.000000 +33:801.170 Sensors-Magnetometer.MagY -40.000000 +33:801.627 Sensors-Magnetometer.MagZ 30.000000 +33:802.124 Sensors-Accelerometer.AccX -14267.000000 +33:802.669 Sensors-Accelerometer.AccY 984.000000 +33:803.156 Sensors-Accelerometer.AccZ 6493.000000 +33:840.690 Sensors-Accelerometer.AccX -9010.000000 +33:841.212 Sensors-Accelerometer.AccY -9816.000000 +33:841.733 Sensors-Accelerometer.AccZ 1024.000000 +33:850.684 Sensors-Magnetometer.MagX 562.000000 +33:851.173 Sensors-Magnetometer.MagY -28.000000 +33:851.635 Sensors-Magnetometer.MagZ -96.000000 +33:880.690 Sensors-Accelerometer.AccX -10253.000000 +33:881.232 Sensors-Accelerometer.AccY -14918.000000 +33:881.779 Sensors-Accelerometer.AccZ -5070.000000 +33:900.683 Sensors-Magnetometer.MagX 562.000000 +33:901.175 Sensors-Magnetometer.MagY 36.000000 +33:901.637 Sensors-Magnetometer.MagZ -130.000000 +33:920.690 Sensors-Accelerometer.AccX -11541.000000 +33:921.226 Sensors-Accelerometer.AccY -19906.000000 +33:921.772 Sensors-Accelerometer.AccZ -4852.000000 +33:960.690 Sensors-Accelerometer.AccX -8100.000000 +33:961.210 Sensors-Accelerometer.AccY -7129.000000 +33:961.734 Sensors-Accelerometer.AccZ -2004.000000 +34:000.683 Sensors-Magnetometer.MagX 577.000000 +34:001.170 Sensors-Magnetometer.MagY -71.000000 +34:001.635 Sensors-Magnetometer.MagZ -46.000000 +34:002.133 Sensors-Accelerometer.AccX -11948.000000 +34:002.679 Sensors-Accelerometer.AccY -2787.000000 +34:003.196 Sensors-Accelerometer.AccZ -806.000000 +34:040.690 Sensors-Accelerometer.AccX -16587.000000 +34:041.239 Sensors-Accelerometer.AccY 7842.000000 +34:041.762 Sensors-Accelerometer.AccZ 5024.000000 +34:050.684 Sensors-Magnetometer.MagX 575.000000 +34:051.176 Sensors-Magnetometer.MagY -133.000000 +34:051.664 Sensors-Magnetometer.MagZ 74.000000 +34:080.690 Sensors-Accelerometer.AccX -18445.000000 +34:081.231 Sensors-Accelerometer.AccY 10856.000000 +34:081.766 Sensors-Accelerometer.AccZ 8311.000000 +34:100.684 Sensors-Magnetometer.MagX 564.000000 +34:101.168 Sensors-Magnetometer.MagY -166.000000 +34:101.653 Sensors-Magnetometer.MagZ 127.000000 +34:120.690 Sensors-Accelerometer.AccX -17720.000000 +34:121.231 Sensors-Accelerometer.AccY 14456.000000 +34:121.771 Sensors-Accelerometer.AccZ 12865.000000 +34:160.690 Sensors-Accelerometer.AccX -14890.000000 +34:161.227 Sensors-Accelerometer.AccY 12025.000000 +34:161.773 Sensors-Accelerometer.AccZ 13383.000000 +34:200.683 Sensors-Magnetometer.MagX 588.000000 +34:201.176 Sensors-Magnetometer.MagY -108.000000 +34:201.665 Sensors-Magnetometer.MagZ 94.000000 +34:202.166 Sensors-Accelerometer.AccX -12881.000000 +34:202.707 Sensors-Accelerometer.AccY 7969.000000 +34:203.232 Sensors-Accelerometer.AccZ 11968.000000 +34:240.690 Sensors-Accelerometer.AccX -14019.000000 +34:241.236 Sensors-Accelerometer.AccY 3999.000000 +34:241.759 Sensors-Accelerometer.AccZ 9837.000000 +34:250.684 Sensors-Magnetometer.MagX 577.000000 +34:251.173 Sensors-Magnetometer.MagY -102.000000 +34:251.664 Sensors-Magnetometer.MagZ 4.000000 +34:280.690 Sensors-Accelerometer.AccX -16306.000000 +34:281.237 Sensors-Accelerometer.AccY -5577.000000 +34:281.758 Sensors-Accelerometer.AccZ 4974.000000 +34:300.684 Sensors-Magnetometer.MagX 566.000000 +34:301.179 Sensors-Magnetometer.MagY -76.000000 +34:301.648 Sensors-Magnetometer.MagZ -57.000000 +34:320.690 Sensors-Accelerometer.AccX -11638.000000 +34:321.235 Sensors-Accelerometer.AccY -9033.000000 +34:321.757 Sensors-Accelerometer.AccZ 3960.000000 +34:350.683 Sensors-Magnetometer.MagX 562.000000 +34:351.175 Sensors-Magnetometer.MagY -14.000000 +34:351.640 Sensors-Magnetometer.MagZ -112.000000 +34:360.690 Sensors-Accelerometer.AccX -6232.000000 +34:361.212 Sensors-Accelerometer.AccY -18255.000000 +34:361.763 Sensors-Accelerometer.AccZ 180.000000 +34:400.683 Sensors-Magnetometer.MagX 573.000000 +34:401.177 Sensors-Magnetometer.MagY -15.000000 +34:401.643 Sensors-Magnetometer.MagZ -62.000000 +34:402.145 Sensors-Accelerometer.AccX -10380.000000 +34:402.694 Sensors-Accelerometer.AccY -12066.000000 +34:403.237 Sensors-Accelerometer.AccZ -1488.000000 +34:440.690 Sensors-Accelerometer.AccX -7263.000000 +34:441.213 Sensors-Accelerometer.AccY -3043.000000 +34:441.733 Sensors-Accelerometer.AccZ -889.000000 +34:450.684 Sensors-Magnetometer.MagX 586.000000 +34:451.174 Sensors-Magnetometer.MagY -100.000000 +34:451.659 Sensors-Magnetometer.MagZ 36.000000 +34:480.690 Sensors-Accelerometer.AccX -13958.000000 +34:481.234 Sensors-Accelerometer.AccY 6338.000000 +34:481.755 Sensors-Accelerometer.AccZ 1660.000000 +34:500.683 Sensors-Magnetometer.MagX 570.000000 +34:501.174 Sensors-Magnetometer.MagY -164.000000 +34:501.656 Sensors-Magnetometer.MagZ 156.000000 +34:520.690 Sensors-Accelerometer.AccX -13594.000000 +34:521.233 Sensors-Accelerometer.AccY 13654.000000 +34:521.778 Sensors-Accelerometer.AccZ 6090.000000 +34:550.684 Sensors-Magnetometer.MagX 561.000000 +34:551.175 Sensors-Magnetometer.MagY -172.000000 +34:551.666 Sensors-Magnetometer.MagZ 237.000000 +34:560.690 Sensors-Accelerometer.AccX -17276.000000 +34:561.232 Sensors-Accelerometer.AccY 12144.000000 +34:561.772 Sensors-Accelerometer.AccZ 6468.000000 +34:600.684 Sensors-Magnetometer.MagX 536.000000 +34:601.172 Sensors-Magnetometer.MagY -156.000000 +34:601.659 Sensors-Magnetometer.MagZ 295.000000 +34:602.183 Sensors-Accelerometer.AccX -19534.000000 +34:602.729 Sensors-Accelerometer.AccY 6067.000000 +34:603.250 Sensors-Accelerometer.AccZ 4097.000000 +34:640.690 Sensors-Accelerometer.AccX -18676.000000 +34:641.234 Sensors-Accelerometer.AccY 588.000000 +34:641.727 Sensors-Accelerometer.AccZ 2663.000000 +34:680.690 Sensors-Accelerometer.AccX -17596.000000 +34:681.240 Sensors-Accelerometer.AccY 540.000000 +34:681.734 Sensors-Accelerometer.AccZ 271.000000 +34:700.684 Sensors-Magnetometer.MagX 488.000000 +34:701.173 Sensors-Magnetometer.MagY -193.000000 +34:701.665 Sensors-Magnetometer.MagZ 376.000000 +34:720.690 Sensors-Accelerometer.AccX -13577.000000 +34:721.235 Sensors-Accelerometer.AccY 4824.000000 +34:721.752 Sensors-Accelerometer.AccZ -401.000000 +34:760.690 Sensors-Accelerometer.AccX -13775.000000 +34:761.236 Sensors-Accelerometer.AccY 4430.000000 +34:761.757 Sensors-Accelerometer.AccZ -367.000000 +34:800.683 Sensors-Magnetometer.MagX 417.000000 +34:801.172 Sensors-Magnetometer.MagY -225.000000 +34:801.664 Sensors-Magnetometer.MagZ 449.000000 +34:802.191 Sensors-Accelerometer.AccX -15541.000000 +34:802.741 Sensors-Accelerometer.AccY 1015.000000 +34:803.261 Sensors-Accelerometer.AccZ -1558.000000 +34:840.690 Sensors-Accelerometer.AccX -16698.000000 +34:841.233 Sensors-Accelerometer.AccY 1848.000000 +34:841.747 Sensors-Accelerometer.AccZ -1970.000000 +34:880.690 Sensors-Accelerometer.AccX -13832.000000 +34:881.228 Sensors-Accelerometer.AccY 3752.000000 +34:881.740 Sensors-Accelerometer.AccZ -995.000000 +34:920.690 Sensors-Accelerometer.AccX -14541.000000 +34:921.233 Sensors-Accelerometer.AccY 3929.000000 +34:921.755 Sensors-Accelerometer.AccZ -2533.000000 +34:950.683 Sensors-Magnetometer.MagX 363.000000 +34:951.176 Sensors-Magnetometer.MagY -247.000000 +34:951.667 Sensors-Magnetometer.MagZ 496.000000 +34:960.690 Sensors-Accelerometer.AccX -13768.000000 +34:961.225 Sensors-Accelerometer.AccY 3536.000000 +34:961.738 Sensors-Accelerometer.AccZ -2497.000000 +35:000.725 Sensors-Accelerometer.AccX -14872.000000 +35:001.270 Sensors-Accelerometer.AccY 3554.000000 +35:001.791 Sensors-Accelerometer.AccZ -3551.000000 +35:040.690 Sensors-Accelerometer.AccX -15864.000000 +35:041.236 Sensors-Accelerometer.AccY 6356.000000 +35:041.759 Sensors-Accelerometer.AccZ -3864.000000 +35:080.690 Sensors-Accelerometer.AccX -13594.000000 +35:081.233 Sensors-Accelerometer.AccY 5097.000000 +35:081.756 Sensors-Accelerometer.AccZ -3796.000000 +35:100.683 Sensors-Magnetometer.MagX 309.000000 +35:101.178 Sensors-Magnetometer.MagY -253.000000 +35:101.670 Sensors-Magnetometer.MagZ 545.000000 +35:120.690 Sensors-Accelerometer.AccX -14810.000000 +35:121.235 Sensors-Accelerometer.AccY 4805.000000 +35:121.758 Sensors-Accelerometer.AccZ -5268.000000 +35:160.690 Sensors-Accelerometer.AccX -14751.000000 +35:161.239 Sensors-Accelerometer.AccY 5613.000000 +35:161.762 Sensors-Accelerometer.AccZ -5267.000000 +35:200.683 Sensors-Magnetometer.MagX 235.000000 +35:201.175 Sensors-Magnetometer.MagY -271.000000 +35:201.665 Sensors-Magnetometer.MagZ 582.000000 +35:202.193 Sensors-Accelerometer.AccX -12385.000000 +35:202.740 Sensors-Accelerometer.AccY 4341.000000 +35:203.260 Sensors-Accelerometer.AccZ -6191.000000 +35:240.690 Sensors-Accelerometer.AccX -12814.000000 +35:241.230 Sensors-Accelerometer.AccY 4184.000000 +35:241.746 Sensors-Accelerometer.AccZ -5984.000000 +35:280.690 Sensors-Accelerometer.AccX -12075.000000 +35:281.242 Sensors-Accelerometer.AccY 6538.000000 +35:281.763 Sensors-Accelerometer.AccZ -7156.000000 +35:300.683 Sensors-Magnetometer.MagX 174.000000 +35:301.173 Sensors-Magnetometer.MagY -265.000000 +35:301.663 Sensors-Magnetometer.MagZ 629.000000 +35:320.690 Sensors-Accelerometer.AccX -12879.000000 +35:321.238 Sensors-Accelerometer.AccY 6822.000000 +35:321.758 Sensors-Accelerometer.AccZ -6676.000000 +35:360.690 Sensors-Accelerometer.AccX -11291.000000 +35:361.235 Sensors-Accelerometer.AccY 5339.000000 +35:361.757 Sensors-Accelerometer.AccZ -8502.000000 +35:400.683 Sensors-Magnetometer.MagX 98.000000 +35:401.147 Sensors-Magnetometer.MagY -232.000000 +35:401.630 Sensors-Magnetometer.MagZ 678.000000 +35:402.156 Sensors-Accelerometer.AccX -11675.000000 +35:402.703 Sensors-Accelerometer.AccY 5853.000000 +35:403.224 Sensors-Accelerometer.AccZ -9632.000000 +35:440.690 Sensors-Accelerometer.AccX -10048.000000 +35:441.226 Sensors-Accelerometer.AccY 2309.000000 +35:441.741 Sensors-Accelerometer.AccZ -5804.000000 +35:480.690 Sensors-Accelerometer.AccX -12574.000000 +35:481.242 Sensors-Accelerometer.AccY 3086.000000 +35:481.764 Sensors-Accelerometer.AccZ -11762.000000 +35:500.683 Sensors-Magnetometer.MagX 62.000000 +35:501.152 Sensors-Magnetometer.MagY -130.000000 +35:501.642 Sensors-Magnetometer.MagZ 721.000000 +35:520.690 Sensors-Accelerometer.AccX -12983.000000 +35:521.237 Sensors-Accelerometer.AccY 2044.000000 +35:521.758 Sensors-Accelerometer.AccZ -12174.000000 +35:550.683 Sensors-Magnetometer.MagX 4.000000 +35:551.121 Sensors-Magnetometer.MagY -96.000000 +35:551.586 Sensors-Magnetometer.MagZ 738.000000 +35:560.690 Sensors-Accelerometer.AccX -10358.000000 +35:561.236 Sensors-Accelerometer.AccY 1545.000000 +35:561.756 Sensors-Accelerometer.AccZ -12335.000000 +35:600.725 Sensors-Accelerometer.AccX -10033.000000 +35:601.272 Sensors-Accelerometer.AccY 2914.000000 +35:601.791 Sensors-Accelerometer.AccZ -11955.000000 +35:640.690 Sensors-Accelerometer.AccX -8848.000000 +35:641.204 Sensors-Accelerometer.AccY 1329.000000 +35:641.720 Sensors-Accelerometer.AccZ -12570.000000 +35:650.683 Sensors-Magnetometer.MagX -82.000000 +35:651.144 Sensors-Magnetometer.MagY -51.000000 +35:651.614 Sensors-Magnetometer.MagZ 774.000000 +35:680.690 Sensors-Accelerometer.AccX -7258.000000 +35:681.212 Sensors-Accelerometer.AccY 911.000000 +35:681.709 Sensors-Accelerometer.AccZ -13531.000000 +35:720.690 Sensors-Accelerometer.AccX -9135.000000 +35:721.217 Sensors-Accelerometer.AccY 516.000000 +35:721.708 Sensors-Accelerometer.AccZ -14247.000000 +35:750.683 Sensors-Magnetometer.MagX -170.000000 +35:751.170 Sensors-Magnetometer.MagY 22.000000 +35:751.635 Sensors-Magnetometer.MagZ 779.000000 +35:760.690 Sensors-Accelerometer.AccX -8724.000000 +35:761.211 Sensors-Accelerometer.AccY 338.000000 +35:761.700 Sensors-Accelerometer.AccZ -14011.000000 +35:800.683 Sensors-Magnetometer.MagX -227.000000 +35:801.178 Sensors-Magnetometer.MagY 43.000000 +35:801.647 Sensors-Magnetometer.MagZ 777.000000 +35:802.178 Sensors-Accelerometer.AccX -7353.000000 +35:802.705 Sensors-Accelerometer.AccY -509.000000 +35:803.200 Sensors-Accelerometer.AccZ -14730.000000 +35:840.690 Sensors-Accelerometer.AccX -2765.000000 +35:841.202 Sensors-Accelerometer.AccY -693.000000 +35:841.691 Sensors-Accelerometer.AccZ -15261.000000 +35:850.684 Sensors-Magnetometer.MagX -285.000000 +35:851.172 Sensors-Magnetometer.MagY 68.000000 +35:851.633 Sensors-Magnetometer.MagZ 777.000000 +35:880.690 Sensors-Accelerometer.AccX -3218.000000 +35:881.207 Sensors-Accelerometer.AccY -1022.000000 +35:881.725 Sensors-Accelerometer.AccZ -15825.000000 +35:920.690 Sensors-Accelerometer.AccX -4202.000000 +35:921.204 Sensors-Accelerometer.AccY -1831.000000 +35:921.726 Sensors-Accelerometer.AccZ -16418.000000 +35:960.690 Sensors-Accelerometer.AccX -3145.000000 +35:961.217 Sensors-Accelerometer.AccY -732.000000 +35:961.714 Sensors-Accelerometer.AccZ -16628.000000 +36:000.725 Sensors-Accelerometer.AccX -6162.000000 +36:001.244 Sensors-Accelerometer.AccY -708.000000 +36:001.733 Sensors-Accelerometer.AccZ -15202.000000 +36:040.690 Sensors-Accelerometer.AccX -6308.000000 +36:041.209 Sensors-Accelerometer.AccY -190.000000 +36:041.703 Sensors-Accelerometer.AccZ -15185.000000 +36:080.690 Sensors-Accelerometer.AccX -6454.000000 +36:081.208 Sensors-Accelerometer.AccY 1421.000000 +36:081.722 Sensors-Accelerometer.AccZ -14626.000000 +36:120.690 Sensors-Accelerometer.AccX -6979.000000 +36:121.212 Sensors-Accelerometer.AccY 1127.000000 +36:121.731 Sensors-Accelerometer.AccZ -14311.000000 +36:160.690 Sensors-Accelerometer.AccX -6638.000000 +36:161.207 Sensors-Accelerometer.AccY 1320.000000 +36:161.715 Sensors-Accelerometer.AccZ -13814.000000 +36:200.725 Sensors-Accelerometer.AccX -7355.000000 +36:201.250 Sensors-Accelerometer.AccY 1980.000000 +36:201.769 Sensors-Accelerometer.AccZ -13728.000000 +36:240.690 Sensors-Accelerometer.AccX -6619.000000 +36:241.214 Sensors-Accelerometer.AccY 1034.000000 +36:241.728 Sensors-Accelerometer.AccZ -13496.000000 +36:250.684 Sensors-Magnetometer.MagX -230.000000 +36:251.173 Sensors-Magnetometer.MagY 40.000000 +36:251.632 Sensors-Magnetometer.MagZ 774.000000 +36:280.690 Sensors-Accelerometer.AccX -7445.000000 +36:281.207 Sensors-Accelerometer.AccY 1133.000000 +36:281.722 Sensors-Accelerometer.AccZ -14027.000000 +36:320.690 Sensors-Accelerometer.AccX -7467.000000 +36:321.218 Sensors-Accelerometer.AccY 1541.000000 +36:321.736 Sensors-Accelerometer.AccZ -14540.000000 +36:360.690 Sensors-Accelerometer.AccX -6580.000000 +36:361.205 Sensors-Accelerometer.AccY 1608.000000 +36:361.717 Sensors-Accelerometer.AccZ -14882.000000 +36:400.725 Sensors-Accelerometer.AccX -6868.000000 +36:401.245 Sensors-Accelerometer.AccY 1756.000000 +36:401.764 Sensors-Accelerometer.AccZ -14600.000000 +36:440.690 Sensors-Accelerometer.AccX -6275.000000 +36:441.220 Sensors-Accelerometer.AccY 1951.000000 +36:441.743 Sensors-Accelerometer.AccZ -14585.000000 +36:480.690 Sensors-Accelerometer.AccX -7089.000000 +36:481.206 Sensors-Accelerometer.AccY 1655.000000 +36:481.720 Sensors-Accelerometer.AccZ -13879.000000 +36:520.690 Sensors-Accelerometer.AccX -7312.000000 +36:521.210 Sensors-Accelerometer.AccY 2183.000000 +36:521.728 Sensors-Accelerometer.AccZ -14087.000000 +36:550.683 Sensors-Magnetometer.MagX -216.000000 +36:551.171 Sensors-Magnetometer.MagY -14.000000 +36:551.636 Sensors-Magnetometer.MagZ 778.000000 +36:560.691 Sensors-Accelerometer.AccX -7224.000000 +36:561.208 Sensors-Accelerometer.AccY 2349.000000 +36:561.727 Sensors-Accelerometer.AccZ -13323.000000 +36:600.725 Sensors-Accelerometer.AccX -7156.000000 +36:601.249 Sensors-Accelerometer.AccY 2601.000000 +36:601.768 Sensors-Accelerometer.AccZ -13585.000000 +36:640.690 Sensors-Accelerometer.AccX -6696.000000 +36:641.209 Sensors-Accelerometer.AccY 2494.000000 +36:641.730 Sensors-Accelerometer.AccZ -13927.000000 +36:680.690 Sensors-Accelerometer.AccX -7820.000000 +36:681.216 Sensors-Accelerometer.AccY 2241.000000 +36:681.736 Sensors-Accelerometer.AccZ -14098.000000 +36:720.690 Sensors-Accelerometer.AccX -7109.000000 +36:721.214 Sensors-Accelerometer.AccY 1962.000000 +36:721.731 Sensors-Accelerometer.AccZ -14319.000000 +36:760.690 Sensors-Accelerometer.AccX -6618.000000 +36:761.212 Sensors-Accelerometer.AccY 2401.000000 +36:761.734 Sensors-Accelerometer.AccZ -14095.000000 +36:800.725 Sensors-Accelerometer.AccX -6758.000000 +36:801.245 Sensors-Accelerometer.AccY 2073.000000 +36:801.761 Sensors-Accelerometer.AccZ -14062.000000 +36:840.690 Sensors-Accelerometer.AccX -7305.000000 +36:841.214 Sensors-Accelerometer.AccY 2211.000000 +36:841.738 Sensors-Accelerometer.AccZ -14156.000000 +36:850.683 Sensors-Magnetometer.MagX -210.000000 +36:851.170 Sensors-Magnetometer.MagY -17.000000 +36:851.635 Sensors-Magnetometer.MagZ 775.000000 +36:880.690 Sensors-Accelerometer.AccX -7012.000000 +36:881.208 Sensors-Accelerometer.AccY 2367.000000 +36:881.725 Sensors-Accelerometer.AccZ -14072.000000 +36:920.690 Sensors-Accelerometer.AccX -7273.000000 +36:921.211 Sensors-Accelerometer.AccY 2473.000000 +36:921.730 Sensors-Accelerometer.AccZ -13891.000000 +36:960.690 Sensors-Accelerometer.AccX -7006.000000 +36:961.210 Sensors-Accelerometer.AccY 2420.000000 +36:961.725 Sensors-Accelerometer.AccZ -14339.000000 +37:000.725 Sensors-Accelerometer.AccX -7281.000000 +37:001.247 Sensors-Accelerometer.AccY 2333.000000 +37:001.767 Sensors-Accelerometer.AccZ -14013.000000 +37:040.690 Sensors-Accelerometer.AccX -7046.000000 +37:041.210 Sensors-Accelerometer.AccY 2417.000000 +37:041.725 Sensors-Accelerometer.AccZ -13776.000000 +37:080.690 Sensors-Accelerometer.AccX -6619.000000 +37:081.215 Sensors-Accelerometer.AccY 2233.000000 +37:081.734 Sensors-Accelerometer.AccZ -14183.000000 +37:120.690 Sensors-Accelerometer.AccX -7386.000000 +37:121.203 Sensors-Accelerometer.AccY 2044.000000 +37:121.719 Sensors-Accelerometer.AccZ -13955.000000 +37:160.690 Sensors-Accelerometer.AccX -7496.000000 +37:161.211 Sensors-Accelerometer.AccY 2382.000000 +37:161.729 Sensors-Accelerometer.AccZ -14047.000000 +37:200.725 Sensors-Accelerometer.AccX -7492.000000 +37:201.243 Sensors-Accelerometer.AccY 2725.000000 +37:201.759 Sensors-Accelerometer.AccZ -13884.000000 +37:240.690 Sensors-Accelerometer.AccX -7680.000000 +37:241.203 Sensors-Accelerometer.AccY 2486.000000 +37:241.724 Sensors-Accelerometer.AccZ -13805.000000 +37:320.690 Sensors-Accelerometer.AccX -7261.000000 +37:321.212 Sensors-Accelerometer.AccY 2614.000000 +37:321.734 Sensors-Accelerometer.AccZ -13937.000000 +37:360.690 Sensors-Accelerometer.AccX -7110.000000 +37:361.215 Sensors-Accelerometer.AccY 2344.000000 +37:361.731 Sensors-Accelerometer.AccZ -13945.000000 +37:400.725 Sensors-Accelerometer.AccX -6819.000000 +37:401.247 Sensors-Accelerometer.AccY 2381.000000 +37:401.766 Sensors-Accelerometer.AccZ -13980.000000 +37:440.690 Sensors-Accelerometer.AccX -7201.000000 +37:441.209 Sensors-Accelerometer.AccY 2383.000000 +37:441.729 Sensors-Accelerometer.AccZ -13790.000000 +37:480.690 Sensors-Accelerometer.AccX -7545.000000 +37:481.213 Sensors-Accelerometer.AccY 2412.000000 +37:481.728 Sensors-Accelerometer.AccZ -13909.000000 +37:600.725 Sensors-Accelerometer.AccX -7473.000000 +37:601.248 Sensors-Accelerometer.AccY 2712.000000 +37:601.765 Sensors-Accelerometer.AccZ -13684.000000 +37:640.690 Sensors-Accelerometer.AccX -7718.000000 +37:641.214 Sensors-Accelerometer.AccY 3052.000000 +37:641.735 Sensors-Accelerometer.AccZ -13564.000000 +37:680.690 Sensors-Accelerometer.AccX -7658.000000 +37:681.215 Sensors-Accelerometer.AccY 2461.000000 +37:681.735 Sensors-Accelerometer.AccZ -14142.000000 +37:720.690 Sensors-Accelerometer.AccX -7368.000000 +37:721.210 Sensors-Accelerometer.AccY 2556.000000 +37:721.731 Sensors-Accelerometer.AccZ -14211.000000 +37:760.690 Sensors-Accelerometer.AccX -6817.000000 +37:761.204 Sensors-Accelerometer.AccY 2697.000000 +37:761.720 Sensors-Accelerometer.AccZ -13678.000000 +37:800.725 Sensors-Accelerometer.AccX -7374.000000 +37:801.246 Sensors-Accelerometer.AccY 2609.000000 +37:801.765 Sensors-Accelerometer.AccZ -13926.000000 +37:880.690 Sensors-Accelerometer.AccX -7876.000000 +37:881.212 Sensors-Accelerometer.AccY 2566.000000 +37:881.733 Sensors-Accelerometer.AccZ -13867.000000 +37:920.690 Sensors-Accelerometer.AccX -7657.000000 +37:921.214 Sensors-Accelerometer.AccY 2618.000000 +37:921.735 Sensors-Accelerometer.AccZ -13896.000000 +37:960.690 Sensors-Accelerometer.AccX -7256.000000 +37:961.213 Sensors-Accelerometer.AccY 2870.000000 +37:961.734 Sensors-Accelerometer.AccZ -13718.000000 +38:040.690 Sensors-Accelerometer.AccX -7501.000000 +38:041.215 Sensors-Accelerometer.AccY 2865.000000 +38:041.738 Sensors-Accelerometer.AccZ -13832.000000 +38:080.690 Sensors-Accelerometer.AccX -7774.000000 +38:081.216 Sensors-Accelerometer.AccY 2465.000000 +38:081.733 Sensors-Accelerometer.AccZ -14025.000000 +38:120.690 Sensors-Accelerometer.AccX -7495.000000 +38:121.218 Sensors-Accelerometer.AccY 2769.000000 +38:121.731 Sensors-Accelerometer.AccZ -13879.000000 +38:160.690 Sensors-Accelerometer.AccX -7374.000000 +38:161.211 Sensors-Accelerometer.AccY 2479.000000 +38:161.734 Sensors-Accelerometer.AccZ -13706.000000 +38:240.690 Sensors-Accelerometer.AccX -7916.000000 +38:241.216 Sensors-Accelerometer.AccY 2819.000000 +38:241.738 Sensors-Accelerometer.AccZ -13607.000000 +38:280.690 Sensors-Accelerometer.AccX -7850.000000 +38:281.215 Sensors-Accelerometer.AccY 3057.000000 +38:281.737 Sensors-Accelerometer.AccZ -13821.000000 +38:320.690 Sensors-Accelerometer.AccX -7852.000000 +38:321.219 Sensors-Accelerometer.AccY 2798.000000 +38:321.742 Sensors-Accelerometer.AccZ -14075.000000 +38:360.690 Sensors-Accelerometer.AccX -7645.000000 +38:361.216 Sensors-Accelerometer.AccY 2968.000000 +38:361.736 Sensors-Accelerometer.AccZ -14014.000000 +38:400.725 Sensors-Accelerometer.AccX -7046.000000 +38:401.242 Sensors-Accelerometer.AccY 2727.000000 +38:401.753 Sensors-Accelerometer.AccZ -13786.000000 +38:480.690 Sensors-Accelerometer.AccX -7127.000000 +38:481.219 Sensors-Accelerometer.AccY 2516.000000 +38:481.740 Sensors-Accelerometer.AccZ -13602.000000 +38:520.690 Sensors-Accelerometer.AccX -7371.000000 +38:521.217 Sensors-Accelerometer.AccY 2659.000000 +38:521.738 Sensors-Accelerometer.AccZ -13917.000000 +38:600.725 Sensors-Accelerometer.AccX -7656.000000 +38:601.245 Sensors-Accelerometer.AccY 2758.000000 +38:601.764 Sensors-Accelerometer.AccZ -14015.000000 +38:680.690 Sensors-Accelerometer.AccX -7453.000000 +38:681.213 Sensors-Accelerometer.AccY 2934.000000 +38:681.736 Sensors-Accelerometer.AccZ -13619.000000 +38:720.690 Sensors-Accelerometer.AccX -7712.000000 +38:721.205 Sensors-Accelerometer.AccY 2707.000000 +38:721.722 Sensors-Accelerometer.AccZ -13698.000000 +38:760.690 Sensors-Accelerometer.AccX -7448.000000 +38:761.210 Sensors-Accelerometer.AccY 2699.000000 +38:761.730 Sensors-Accelerometer.AccZ -14125.000000 +38:800.725 Sensors-Accelerometer.AccX -7120.000000 +38:801.242 Sensors-Accelerometer.AccY 2800.000000 +38:801.757 Sensors-Accelerometer.AccZ -13874.000000 +38:920.690 Sensors-Accelerometer.AccX -6916.000000 +38:921.208 Sensors-Accelerometer.AccY 2383.000000 +38:921.729 Sensors-Accelerometer.AccZ -14193.000000 +38:960.690 Sensors-Accelerometer.AccX -7404.000000 +38:961.210 Sensors-Accelerometer.AccY 2648.000000 +38:961.724 Sensors-Accelerometer.AccZ -13779.000000 +39:000.725 Sensors-Accelerometer.AccX -7929.000000 +39:001.252 Sensors-Accelerometer.AccY 2937.000000 +39:001.771 Sensors-Accelerometer.AccZ -13796.000000 +39:040.690 Sensors-Accelerometer.AccX -7671.000000 +39:041.213 Sensors-Accelerometer.AccY 2852.000000 +39:041.730 Sensors-Accelerometer.AccZ -13947.000000 +39:120.690 Sensors-Accelerometer.AccX -7265.000000 +39:121.212 Sensors-Accelerometer.AccY 2765.000000 +39:121.730 Sensors-Accelerometer.AccZ -14009.000000 +39:200.725 Sensors-Accelerometer.AccX -7204.000000 +39:201.245 Sensors-Accelerometer.AccY 2668.000000 +39:201.763 Sensors-Accelerometer.AccZ -13702.000000 +39:240.690 Sensors-Accelerometer.AccX -7509.000000 +39:241.213 Sensors-Accelerometer.AccY 2615.000000 +39:241.736 Sensors-Accelerometer.AccZ -13774.000000 +39:280.690 Sensors-Accelerometer.AccX -7465.000000 +39:281.213 Sensors-Accelerometer.AccY 2765.000000 +39:281.731 Sensors-Accelerometer.AccZ -13840.000000 +39:300.683 Sensors-Magnetometer.MagX -195.000000 +39:301.179 Sensors-Magnetometer.MagY -29.000000 +39:301.643 Sensors-Magnetometer.MagZ 766.000000 +39:400.725 Sensors-Accelerometer.AccX -7631.000000 +39:401.253 Sensors-Accelerometer.AccY 2844.000000 +39:401.773 Sensors-Accelerometer.AccZ -13620.000000 +39:480.690 Sensors-Accelerometer.AccX -7689.000000 +39:481.213 Sensors-Accelerometer.AccY 2785.000000 +39:481.734 Sensors-Accelerometer.AccZ -14216.000000 +39:520.690 Sensors-Accelerometer.AccX -7499.000000 +39:521.214 Sensors-Accelerometer.AccY 2940.000000 +39:521.734 Sensors-Accelerometer.AccZ -13795.000000 +39:560.690 Sensors-Accelerometer.AccX -6926.000000 +39:561.210 Sensors-Accelerometer.AccY 2721.000000 +39:561.728 Sensors-Accelerometer.AccZ -13617.000000 +39:600.725 Sensors-Accelerometer.AccX -7129.000000 +39:601.251 Sensors-Accelerometer.AccY 2427.000000 +39:601.773 Sensors-Accelerometer.AccZ -13673.000000 +39:640.690 Sensors-Accelerometer.AccX -7565.000000 +39:641.214 Sensors-Accelerometer.AccY 2441.000000 +39:641.738 Sensors-Accelerometer.AccZ -13694.000000 +39:680.690 Sensors-Accelerometer.AccX -7605.000000 +39:681.208 Sensors-Accelerometer.AccY 2789.000000 +39:681.724 Sensors-Accelerometer.AccZ -13710.000000 +39:720.690 Sensors-Accelerometer.AccX -7701.000000 +39:721.212 Sensors-Accelerometer.AccY 2726.000000 +39:721.731 Sensors-Accelerometer.AccZ -14007.000000 +39:800.725 Sensors-Accelerometer.AccX -8010.000000 +39:801.248 Sensors-Accelerometer.AccY 2985.000000 +39:801.770 Sensors-Accelerometer.AccZ -13696.000000 +39:840.690 Sensors-Accelerometer.AccX -7266.000000 +39:841.210 Sensors-Accelerometer.AccY 2822.000000 +39:841.729 Sensors-Accelerometer.AccZ -13963.000000 +39:920.690 Sensors-Accelerometer.AccX -7201.000000 +39:921.214 Sensors-Accelerometer.AccY 2511.000000 +39:921.741 Sensors-Accelerometer.AccZ -13848.000000 +40:000.725 Sensors-Accelerometer.AccX -7297.000000 +40:001.245 Sensors-Accelerometer.AccY 2416.000000 +40:001.757 Sensors-Accelerometer.AccZ -14144.000000 +40:040.690 Sensors-Accelerometer.AccX -7230.000000 +40:041.209 Sensors-Accelerometer.AccY 2681.000000 +40:041.725 Sensors-Accelerometer.AccZ -13672.000000 +40:080.690 Sensors-Accelerometer.AccX -8071.000000 +40:081.211 Sensors-Accelerometer.AccY 3022.000000 +40:081.730 Sensors-Accelerometer.AccZ -13608.000000 +40:120.690 Sensors-Accelerometer.AccX -7723.000000 +40:121.216 Sensors-Accelerometer.AccY 2672.000000 +40:121.732 Sensors-Accelerometer.AccZ -14015.000000 +40:160.690 Sensors-Accelerometer.AccX -7240.000000 +40:161.206 Sensors-Accelerometer.AccY 2814.000000 +40:161.725 Sensors-Accelerometer.AccZ -13739.000000 +40:240.690 Sensors-Accelerometer.AccX -7258.000000 +40:241.212 Sensors-Accelerometer.AccY 2574.000000 +40:241.731 Sensors-Accelerometer.AccZ -13781.000000 +40:320.690 Sensors-Accelerometer.AccX -7560.000000 +40:321.206 Sensors-Accelerometer.AccY 2611.000000 +40:321.726 Sensors-Accelerometer.AccZ -14313.000000 +40:440.690 Sensors-Accelerometer.AccX -7281.000000 +40:441.215 Sensors-Accelerometer.AccY 2860.000000 +40:441.735 Sensors-Accelerometer.AccZ -13513.000000 +40:480.690 Sensors-Accelerometer.AccX -7135.000000 +40:481.214 Sensors-Accelerometer.AccY 2917.000000 +40:481.733 Sensors-Accelerometer.AccZ -13041.000000 +40:520.690 Sensors-Accelerometer.AccX -7345.000000 +40:521.212 Sensors-Accelerometer.AccY 2637.000000 +40:521.732 Sensors-Accelerometer.AccZ -13425.000000 +40:560.690 Sensors-Accelerometer.AccX -7460.000000 +40:561.209 Sensors-Accelerometer.AccY 2430.000000 +40:561.730 Sensors-Accelerometer.AccZ -14270.000000 +40:600.725 Sensors-Accelerometer.AccX -7407.000000 +40:601.252 Sensors-Accelerometer.AccY 2224.000000 +40:601.771 Sensors-Accelerometer.AccZ -14531.000000 +40:640.690 Sensors-Accelerometer.AccX -7296.000000 +40:641.203 Sensors-Accelerometer.AccY 2327.000000 +40:641.723 Sensors-Accelerometer.AccZ -14224.000000 +40:680.690 Sensors-Accelerometer.AccX -7270.000000 +40:681.215 Sensors-Accelerometer.AccY 2640.000000 +40:681.727 Sensors-Accelerometer.AccZ -13900.000000 +40:720.690 Sensors-Accelerometer.AccX -7597.000000 +40:721.214 Sensors-Accelerometer.AccY 2894.000000 +40:721.734 Sensors-Accelerometer.AccZ -13526.000000 +40:840.690 Sensors-Accelerometer.AccX -7698.000000 +40:841.214 Sensors-Accelerometer.AccY 2539.000000 +40:841.740 Sensors-Accelerometer.AccZ -13612.000000 +40:880.690 Sensors-Accelerometer.AccX -7168.000000 +40:881.202 Sensors-Accelerometer.AccY 2506.000000 +40:881.724 Sensors-Accelerometer.AccZ -14074.000000 +40:960.690 Sensors-Accelerometer.AccX -7751.000000 +40:961.207 Sensors-Accelerometer.AccY 2874.000000 +40:961.715 Sensors-Accelerometer.AccZ -13691.000000 +41:000.725 Sensors-Accelerometer.AccX -7573.000000 +41:001.246 Sensors-Accelerometer.AccY 2457.000000 +41:001.764 Sensors-Accelerometer.AccZ -13825.000000 +41:040.690 Sensors-Accelerometer.AccX -7660.000000 +41:041.209 Sensors-Accelerometer.AccY 2947.000000 +41:041.728 Sensors-Accelerometer.AccZ -13300.000000 +41:080.690 Sensors-Accelerometer.AccX -7591.000000 +41:081.215 Sensors-Accelerometer.AccY 2418.000000 +41:081.731 Sensors-Accelerometer.AccZ -13955.000000 +41:120.690 Sensors-Accelerometer.AccX -8113.000000 +41:121.211 Sensors-Accelerometer.AccY 2047.000000 +41:121.733 Sensors-Accelerometer.AccZ -13992.000000 +41:160.690 Sensors-Accelerometer.AccX -7268.000000 +41:161.208 Sensors-Accelerometer.AccY 2104.000000 +41:161.719 Sensors-Accelerometer.AccZ -13787.000000 +41:200.725 Sensors-Accelerometer.AccX -7954.000000 +41:201.248 Sensors-Accelerometer.AccY 2556.000000 +41:201.765 Sensors-Accelerometer.AccZ -13402.000000 +41:240.690 Sensors-Accelerometer.AccX -7923.000000 +41:241.216 Sensors-Accelerometer.AccY 2381.000000 +41:241.735 Sensors-Accelerometer.AccZ -13802.000000 +41:280.690 Sensors-Accelerometer.AccX -7811.000000 +41:281.215 Sensors-Accelerometer.AccY 2884.000000 +41:281.723 Sensors-Accelerometer.AccZ -13456.000000 +41:320.690 Sensors-Accelerometer.AccX -7713.000000 +41:321.211 Sensors-Accelerometer.AccY 2561.000000 +41:321.724 Sensors-Accelerometer.AccZ -13976.000000 +41:360.690 Sensors-Accelerometer.AccX -7891.000000 +41:361.211 Sensors-Accelerometer.AccY 1071.000000 +41:361.729 Sensors-Accelerometer.AccZ -15558.000000 +41:400.725 Sensors-Accelerometer.AccX -7015.000000 +41:401.245 Sensors-Accelerometer.AccY 2023.000000 +41:401.766 Sensors-Accelerometer.AccZ -13941.000000 +41:440.690 Sensors-Accelerometer.AccX -7167.000000 +41:441.219 Sensors-Accelerometer.AccY 2554.000000 +41:441.740 Sensors-Accelerometer.AccZ -12908.000000 +41:480.690 Sensors-Accelerometer.AccX -7212.000000 +41:481.208 Sensors-Accelerometer.AccY 3212.000000 +41:481.723 Sensors-Accelerometer.AccZ -12183.000000 +41:520.690 Sensors-Accelerometer.AccX -7944.000000 +41:521.210 Sensors-Accelerometer.AccY 1955.000000 +41:521.733 Sensors-Accelerometer.AccZ -13912.000000 +41:560.690 Sensors-Accelerometer.AccX -8213.000000 +41:561.208 Sensors-Accelerometer.AccY 1655.000000 +41:561.727 Sensors-Accelerometer.AccZ -14564.000000 +41:600.725 Sensors-Accelerometer.AccX -8158.000000 +41:601.247 Sensors-Accelerometer.AccY 2170.000000 +41:601.761 Sensors-Accelerometer.AccZ -13651.000000 +41:640.690 Sensors-Accelerometer.AccX -7181.000000 +41:641.210 Sensors-Accelerometer.AccY 2986.000000 +41:641.724 Sensors-Accelerometer.AccZ -13330.000000 +41:680.690 Sensors-Accelerometer.AccX -8064.000000 +41:681.200 Sensors-Accelerometer.AccY 4031.000000 +41:681.718 Sensors-Accelerometer.AccZ -13205.000000 +41:720.690 Sensors-Accelerometer.AccX -8336.000000 +41:721.209 Sensors-Accelerometer.AccY 2886.000000 +41:721.728 Sensors-Accelerometer.AccZ -13742.000000 +41:750.683 Sensors-Magnetometer.MagX -188.000000 +41:751.175 Sensors-Magnetometer.MagY -14.000000 +41:751.639 Sensors-Magnetometer.MagZ 787.000000 +41:760.691 Sensors-Accelerometer.AccX -8224.000000 +41:761.203 Sensors-Accelerometer.AccY 1288.000000 +41:761.713 Sensors-Accelerometer.AccZ -14962.000000 +41:800.725 Sensors-Accelerometer.AccX -6942.000000 +41:801.245 Sensors-Accelerometer.AccY 1967.000000 +41:801.762 Sensors-Accelerometer.AccZ -14769.000000 +41:840.690 Sensors-Accelerometer.AccX -7339.000000 +41:841.219 Sensors-Accelerometer.AccY 2425.000000 +41:841.735 Sensors-Accelerometer.AccZ -13165.000000 +41:880.690 Sensors-Accelerometer.AccX -7571.000000 +41:881.217 Sensors-Accelerometer.AccY 2056.000000 +41:881.731 Sensors-Accelerometer.AccZ -12122.000000 +41:920.690 Sensors-Accelerometer.AccX -7107.000000 +41:921.214 Sensors-Accelerometer.AccY 2662.000000 +41:921.735 Sensors-Accelerometer.AccZ -12757.000000 +41:960.690 Sensors-Accelerometer.AccX -8460.000000 +41:961.207 Sensors-Accelerometer.AccY 2481.000000 +41:961.722 Sensors-Accelerometer.AccZ -12804.000000 +42:000.725 Sensors-Accelerometer.AccX -7428.000000 +42:001.238 Sensors-Accelerometer.AccY 1728.000000 +42:001.745 Sensors-Accelerometer.AccZ -13589.000000 +42:040.690 Sensors-Accelerometer.AccX -8892.000000 +42:041.207 Sensors-Accelerometer.AccY 1955.000000 +42:041.726 Sensors-Accelerometer.AccZ -14883.000000 +42:080.690 Sensors-Accelerometer.AccX -8186.000000 +42:081.210 Sensors-Accelerometer.AccY 2009.000000 +42:081.727 Sensors-Accelerometer.AccZ -15386.000000 +42:120.690 Sensors-Accelerometer.AccX -7154.000000 +42:121.209 Sensors-Accelerometer.AccY 1352.000000 +42:121.717 Sensors-Accelerometer.AccZ -15008.000000 +42:160.690 Sensors-Accelerometer.AccX -6870.000000 +42:161.210 Sensors-Accelerometer.AccY 2219.000000 +42:161.731 Sensors-Accelerometer.AccZ -13603.000000 +42:200.725 Sensors-Accelerometer.AccX -7141.000000 +42:201.245 Sensors-Accelerometer.AccY 2352.000000 +42:201.760 Sensors-Accelerometer.AccZ -12489.000000 +42:240.690 Sensors-Accelerometer.AccX -7113.000000 +42:241.208 Sensors-Accelerometer.AccY 2560.000000 +42:241.708 Sensors-Accelerometer.AccZ -12105.000000 +42:280.690 Sensors-Accelerometer.AccX -7423.000000 +42:281.212 Sensors-Accelerometer.AccY 1195.000000 +42:281.731 Sensors-Accelerometer.AccZ -14243.000000 +42:320.690 Sensors-Accelerometer.AccX -8004.000000 +42:321.203 Sensors-Accelerometer.AccY 1808.000000 +42:321.712 Sensors-Accelerometer.AccZ -13246.000000 +42:360.690 Sensors-Accelerometer.AccX -8409.000000 +42:361.207 Sensors-Accelerometer.AccY 2153.000000 +42:361.722 Sensors-Accelerometer.AccZ -14044.000000 +42:400.725 Sensors-Accelerometer.AccX -8698.000000 +42:401.242 Sensors-Accelerometer.AccY 3315.000000 +42:401.759 Sensors-Accelerometer.AccZ -14549.000000 +42:440.690 Sensors-Accelerometer.AccX -8248.000000 +42:441.206 Sensors-Accelerometer.AccY 2507.000000 +42:441.724 Sensors-Accelerometer.AccZ -14886.000000 +42:480.690 Sensors-Accelerometer.AccX -7435.000000 +42:481.212 Sensors-Accelerometer.AccY 1966.000000 +42:481.736 Sensors-Accelerometer.AccZ -14547.000000 +42:520.690 Sensors-Accelerometer.AccX -6858.000000 +42:521.208 Sensors-Accelerometer.AccY 707.000000 +42:521.702 Sensors-Accelerometer.AccZ -14460.000000 +42:560.690 Sensors-Accelerometer.AccX -7129.000000 +42:561.213 Sensors-Accelerometer.AccY 2253.000000 +42:561.727 Sensors-Accelerometer.AccZ -12526.000000 +42:600.725 Sensors-Accelerometer.AccX -6486.000000 +42:601.245 Sensors-Accelerometer.AccY 2573.000000 +42:601.755 Sensors-Accelerometer.AccZ -12141.000000 +42:640.690 Sensors-Accelerometer.AccX -7589.000000 +42:641.210 Sensors-Accelerometer.AccY 1463.000000 +42:641.726 Sensors-Accelerometer.AccZ -13806.000000 +42:680.690 Sensors-Accelerometer.AccX -8165.000000 +42:681.211 Sensors-Accelerometer.AccY 2397.000000 +42:681.726 Sensors-Accelerometer.AccZ -13564.000000 +42:720.690 Sensors-Accelerometer.AccX -8473.000000 +42:721.207 Sensors-Accelerometer.AccY 2335.000000 +42:721.726 Sensors-Accelerometer.AccZ -13665.000000 +42:760.690 Sensors-Accelerometer.AccX -8119.000000 +42:761.215 Sensors-Accelerometer.AccY 2326.000000 +42:761.735 Sensors-Accelerometer.AccZ -14802.000000 +42:800.725 Sensors-Accelerometer.AccX -8486.000000 +42:801.245 Sensors-Accelerometer.AccY 1768.000000 +42:801.756 Sensors-Accelerometer.AccZ -15111.000000 +42:840.690 Sensors-Accelerometer.AccX -7406.000000 +42:841.209 Sensors-Accelerometer.AccY 1338.000000 +42:841.722 Sensors-Accelerometer.AccZ -14500.000000 +42:880.690 Sensors-Accelerometer.AccX -6761.000000 +42:881.203 Sensors-Accelerometer.AccY 1285.000000 +42:881.714 Sensors-Accelerometer.AccZ -13234.000000 +42:920.690 Sensors-Accelerometer.AccX -6768.000000 +42:921.205 Sensors-Accelerometer.AccY 2350.000000 +42:921.724 Sensors-Accelerometer.AccZ -12192.000000 +42:960.690 Sensors-Accelerometer.AccX -6593.000000 +42:961.207 Sensors-Accelerometer.AccY 2122.000000 +42:961.721 Sensors-Accelerometer.AccZ -12487.000000 +43:000.725 Sensors-Accelerometer.AccX -6740.000000 +43:001.241 Sensors-Accelerometer.AccY 1930.000000 +43:001.761 Sensors-Accelerometer.AccZ -13062.000000 +43:040.690 Sensors-Accelerometer.AccX -9099.000000 +43:041.213 Sensors-Accelerometer.AccY 2048.000000 +43:041.715 Sensors-Accelerometer.AccZ -13430.000000 +43:080.690 Sensors-Accelerometer.AccX -9030.000000 +43:081.213 Sensors-Accelerometer.AccY 3259.000000 +43:081.735 Sensors-Accelerometer.AccZ -14276.000000 +43:120.690 Sensors-Accelerometer.AccX -9196.000000 +43:121.213 Sensors-Accelerometer.AccY 2981.000000 +43:121.731 Sensors-Accelerometer.AccZ -14446.000000 +43:160.690 Sensors-Accelerometer.AccX -8096.000000 +43:161.206 Sensors-Accelerometer.AccY 1624.000000 +43:161.724 Sensors-Accelerometer.AccZ -15728.000000 +43:200.725 Sensors-Accelerometer.AccX -7898.000000 +43:201.242 Sensors-Accelerometer.AccY 820.000000 +43:201.728 Sensors-Accelerometer.AccZ -14699.000000 +43:240.690 Sensors-Accelerometer.AccX -6495.000000 +43:241.214 Sensors-Accelerometer.AccY 1685.000000 +43:241.726 Sensors-Accelerometer.AccZ -12056.000000 +43:280.690 Sensors-Accelerometer.AccX -6504.000000 +43:281.204 Sensors-Accelerometer.AccY 2550.000000 +43:281.723 Sensors-Accelerometer.AccZ -11355.000000 +43:320.690 Sensors-Accelerometer.AccX -8400.000000 +43:321.199 Sensors-Accelerometer.AccY 2345.000000 +43:321.718 Sensors-Accelerometer.AccZ -12547.000000 +43:360.690 Sensors-Accelerometer.AccX -9511.000000 +43:361.211 Sensors-Accelerometer.AccY 2699.000000 +43:361.731 Sensors-Accelerometer.AccZ -13880.000000 +43:400.725 Sensors-Accelerometer.AccX -9747.000000 +43:401.252 Sensors-Accelerometer.AccY 2643.000000 +43:401.769 Sensors-Accelerometer.AccZ -13766.000000 +43:440.690 Sensors-Accelerometer.AccX -8756.000000 +43:441.205 Sensors-Accelerometer.AccY 3192.000000 +43:441.724 Sensors-Accelerometer.AccZ -13458.000000 +43:480.690 Sensors-Accelerometer.AccX -8509.000000 +43:481.212 Sensors-Accelerometer.AccY 3200.000000 +43:481.720 Sensors-Accelerometer.AccZ -12878.000000 +43:560.690 Sensors-Accelerometer.AccX -8480.000000 +43:561.203 Sensors-Accelerometer.AccY 2853.000000 +43:561.718 Sensors-Accelerometer.AccZ -12875.000000 +43:600.725 Sensors-Accelerometer.AccX -8271.000000 +43:601.245 Sensors-Accelerometer.AccY 2513.000000 +43:601.764 Sensors-Accelerometer.AccZ -12915.000000 +43:640.690 Sensors-Accelerometer.AccX -8450.000000 +43:641.208 Sensors-Accelerometer.AccY 2596.000000 +43:641.723 Sensors-Accelerometer.AccZ -13267.000000 +43:720.690 Sensors-Accelerometer.AccX -8679.000000 +43:721.214 Sensors-Accelerometer.AccY 2623.000000 +43:721.731 Sensors-Accelerometer.AccZ -13456.000000 +43:750.683 Sensors-Magnetometer.MagX -123.000000 +43:751.172 Sensors-Magnetometer.MagY -49.000000 +43:751.638 Sensors-Magnetometer.MagZ 767.000000 +43:760.690 Sensors-Accelerometer.AccX -9054.000000 +43:761.213 Sensors-Accelerometer.AccY 3117.000000 +43:761.735 Sensors-Accelerometer.AccZ -12663.000000 +43:800.725 Sensors-Accelerometer.AccX -8827.000000 +43:801.249 Sensors-Accelerometer.AccY 3572.000000 +43:801.766 Sensors-Accelerometer.AccZ -12183.000000 +43:840.690 Sensors-Accelerometer.AccX -9026.000000 +43:841.206 Sensors-Accelerometer.AccY 3377.000000 +43:841.720 Sensors-Accelerometer.AccZ -12459.000000 +43:880.690 Sensors-Accelerometer.AccX -8196.000000 +43:881.205 Sensors-Accelerometer.AccY 2962.000000 +43:881.722 Sensors-Accelerometer.AccZ -12639.000000 +43:920.690 Sensors-Accelerometer.AccX -9390.000000 +43:921.214 Sensors-Accelerometer.AccY 2901.000000 +43:921.729 Sensors-Accelerometer.AccZ -13180.000000 +43:960.690 Sensors-Accelerometer.AccX -9735.000000 +43:961.215 Sensors-Accelerometer.AccY 2575.000000 +43:961.735 Sensors-Accelerometer.AccZ -14339.000000 +44:000.725 Sensors-Accelerometer.AccX -8814.000000 +44:001.245 Sensors-Accelerometer.AccY 2656.000000 +44:001.757 Sensors-Accelerometer.AccZ -14144.000000 +44:040.690 Sensors-Accelerometer.AccX -9069.000000 +44:041.210 Sensors-Accelerometer.AccY 3001.000000 +44:041.728 Sensors-Accelerometer.AccZ -13532.000000 +44:080.690 Sensors-Accelerometer.AccX -8432.000000 +44:081.203 Sensors-Accelerometer.AccY 3263.000000 +44:081.726 Sensors-Accelerometer.AccZ -11337.000000 +44:120.690 Sensors-Accelerometer.AccX -8161.000000 +44:121.213 Sensors-Accelerometer.AccY 3909.000000 +44:121.736 Sensors-Accelerometer.AccZ -10938.000000 +44:160.690 Sensors-Accelerometer.AccX -9005.000000 +44:161.210 Sensors-Accelerometer.AccY 1866.000000 +44:161.725 Sensors-Accelerometer.AccZ -12543.000000 +44:200.683 Sensors-Magnetometer.MagX -122.000000 +44:201.171 Sensors-Magnetometer.MagY -64.000000 +44:201.629 Sensors-Magnetometer.MagZ 774.000000 +44:202.159 Sensors-Accelerometer.AccX -9006.000000 +44:202.685 Sensors-Accelerometer.AccY 3200.000000 +44:203.193 Sensors-Accelerometer.AccZ -12681.000000 +44:240.690 Sensors-Accelerometer.AccX -8951.000000 +44:241.211 Sensors-Accelerometer.AccY 4021.000000 +44:241.729 Sensors-Accelerometer.AccZ -12536.000000 +44:280.690 Sensors-Accelerometer.AccX -9974.000000 +44:281.214 Sensors-Accelerometer.AccY 3192.000000 +44:281.734 Sensors-Accelerometer.AccZ -13648.000000 +44:320.690 Sensors-Accelerometer.AccX -9433.000000 +44:321.215 Sensors-Accelerometer.AccY 2713.000000 +44:321.734 Sensors-Accelerometer.AccZ -14460.000000 +44:360.690 Sensors-Accelerometer.AccX -8774.000000 +44:361.212 Sensors-Accelerometer.AccY 3348.000000 +44:361.730 Sensors-Accelerometer.AccZ -12317.000000 +44:400.725 Sensors-Accelerometer.AccX -8574.000000 +44:401.245 Sensors-Accelerometer.AccY 3434.000000 +44:401.764 Sensors-Accelerometer.AccZ -11266.000000 +44:440.690 Sensors-Accelerometer.AccX -8698.000000 +44:441.213 Sensors-Accelerometer.AccY 2864.000000 +44:441.732 Sensors-Accelerometer.AccZ -11929.000000 +44:480.690 Sensors-Accelerometer.AccX -9361.000000 +44:481.210 Sensors-Accelerometer.AccY 2720.000000 +44:481.720 Sensors-Accelerometer.AccZ -13096.000000 +44:520.690 Sensors-Accelerometer.AccX -9509.000000 +44:521.215 Sensors-Accelerometer.AccY 3984.000000 +44:521.736 Sensors-Accelerometer.AccZ -12306.000000 +44:560.690 Sensors-Accelerometer.AccX -9572.000000 +44:561.213 Sensors-Accelerometer.AccY 3509.000000 +44:561.734 Sensors-Accelerometer.AccZ -12503.000000 +44:600.725 Sensors-Accelerometer.AccX -9707.000000 +44:601.254 Sensors-Accelerometer.AccY 3040.000000 +44:601.771 Sensors-Accelerometer.AccZ -13236.000000 +44:640.690 Sensors-Accelerometer.AccX -9512.000000 +44:641.210 Sensors-Accelerometer.AccY 3175.000000 +44:641.733 Sensors-Accelerometer.AccZ -12293.000000 +44:680.690 Sensors-Accelerometer.AccX -8902.000000 +44:681.215 Sensors-Accelerometer.AccY 3118.000000 +44:681.738 Sensors-Accelerometer.AccZ -12568.000000 +44:720.690 Sensors-Accelerometer.AccX -9085.000000 +44:721.213 Sensors-Accelerometer.AccY 3270.000000 +44:721.739 Sensors-Accelerometer.AccZ -12873.000000 +44:760.690 Sensors-Accelerometer.AccX -9237.000000 +44:761.212 Sensors-Accelerometer.AccY 2816.000000 +44:761.723 Sensors-Accelerometer.AccZ -12792.000000 +44:800.725 Sensors-Accelerometer.AccX -8790.000000 +44:801.246 Sensors-Accelerometer.AccY 2891.000000 +44:801.762 Sensors-Accelerometer.AccZ -12651.000000 +44:840.690 Sensors-Accelerometer.AccX -8951.000000 +44:841.214 Sensors-Accelerometer.AccY 3119.000000 +44:841.739 Sensors-Accelerometer.AccZ -11701.000000 +44:880.690 Sensors-Accelerometer.AccX -8866.000000 +44:881.207 Sensors-Accelerometer.AccY 2955.000000 +44:881.727 Sensors-Accelerometer.AccZ -12176.000000 +44:920.690 Sensors-Accelerometer.AccX -9548.000000 +44:921.213 Sensors-Accelerometer.AccY 3772.000000 +44:921.735 Sensors-Accelerometer.AccZ -12550.000000 +44:960.690 Sensors-Accelerometer.AccX -9620.000000 +44:961.211 Sensors-Accelerometer.AccY 3280.000000 +44:961.720 Sensors-Accelerometer.AccZ -14018.000000 +45:000.725 Sensors-Accelerometer.AccX -9825.000000 +45:001.253 Sensors-Accelerometer.AccY 2710.000000 +45:001.772 Sensors-Accelerometer.AccZ -13936.000000 +45:040.690 Sensors-Accelerometer.AccX -8736.000000 +45:041.203 Sensors-Accelerometer.AccY 2603.000000 +45:041.727 Sensors-Accelerometer.AccZ -13009.000000 +45:080.690 Sensors-Accelerometer.AccX -8718.000000 +45:081.210 Sensors-Accelerometer.AccY 2826.000000 +45:081.727 Sensors-Accelerometer.AccZ -12166.000000 +45:120.690 Sensors-Accelerometer.AccX -9151.000000 +45:121.213 Sensors-Accelerometer.AccY 4229.000000 +45:121.728 Sensors-Accelerometer.AccZ -9980.000000 +45:160.690 Sensors-Accelerometer.AccX -8879.000000 +45:161.215 Sensors-Accelerometer.AccY 3266.000000 +45:161.733 Sensors-Accelerometer.AccZ -11042.000000 +45:200.725 Sensors-Accelerometer.AccX -9272.000000 +45:201.245 Sensors-Accelerometer.AccY 3645.000000 +45:201.766 Sensors-Accelerometer.AccZ -12154.000000 +45:240.690 Sensors-Accelerometer.AccX -10005.000000 +45:241.232 Sensors-Accelerometer.AccY 2858.000000 +45:241.748 Sensors-Accelerometer.AccZ -13338.000000 +45:280.690 Sensors-Accelerometer.AccX -9905.000000 +45:281.212 Sensors-Accelerometer.AccY 2531.000000 +45:281.736 Sensors-Accelerometer.AccZ -13751.000000 +45:320.690 Sensors-Accelerometer.AccX -9392.000000 +45:321.212 Sensors-Accelerometer.AccY 3052.000000 +45:321.731 Sensors-Accelerometer.AccZ -13066.000000 +45:360.690 Sensors-Accelerometer.AccX -9189.000000 +45:361.213 Sensors-Accelerometer.AccY 2499.000000 +45:361.734 Sensors-Accelerometer.AccZ -13926.000000 +45:400.725 Sensors-Accelerometer.AccX -9702.000000 +45:401.249 Sensors-Accelerometer.AccY 2551.000000 +45:401.773 Sensors-Accelerometer.AccZ -12028.000000 +45:440.690 Sensors-Accelerometer.AccX -9117.000000 +45:441.212 Sensors-Accelerometer.AccY 3306.000000 +45:441.727 Sensors-Accelerometer.AccZ -11280.000000 +45:480.690 Sensors-Accelerometer.AccX -9355.000000 +45:481.217 Sensors-Accelerometer.AccY 3630.000000 +45:481.737 Sensors-Accelerometer.AccZ -11095.000000 +45:520.690 Sensors-Accelerometer.AccX -10173.000000 +45:521.235 Sensors-Accelerometer.AccY 3096.000000 +45:521.755 Sensors-Accelerometer.AccZ -12495.000000 +45:560.690 Sensors-Accelerometer.AccX -10507.000000 +45:561.234 Sensors-Accelerometer.AccY 2916.000000 +45:561.755 Sensors-Accelerometer.AccZ -12975.000000 +45:600.725 Sensors-Accelerometer.AccX -9729.000000 +45:601.245 Sensors-Accelerometer.AccY 3068.000000 +45:601.764 Sensors-Accelerometer.AccZ -12775.000000 +45:640.690 Sensors-Accelerometer.AccX -9377.000000 +45:641.213 Sensors-Accelerometer.AccY 3120.000000 +45:641.730 Sensors-Accelerometer.AccZ -12355.000000 +45:680.690 Sensors-Accelerometer.AccX -9309.000000 +45:681.211 Sensors-Accelerometer.AccY 3080.000000 +45:681.729 Sensors-Accelerometer.AccZ -11871.000000 +45:720.690 Sensors-Accelerometer.AccX -9127.000000 +45:721.216 Sensors-Accelerometer.AccY 2848.000000 +45:721.732 Sensors-Accelerometer.AccZ -12372.000000 +45:760.690 Sensors-Accelerometer.AccX -9337.000000 +45:761.214 Sensors-Accelerometer.AccY 2580.000000 +45:761.731 Sensors-Accelerometer.AccZ -12796.000000 +45:800.725 Sensors-Accelerometer.AccX -9237.000000 +45:801.247 Sensors-Accelerometer.AccY 2887.000000 +45:801.766 Sensors-Accelerometer.AccZ -12751.000000 +45:840.690 Sensors-Accelerometer.AccX -9375.000000 +45:841.216 Sensors-Accelerometer.AccY 3301.000000 +45:841.737 Sensors-Accelerometer.AccZ -11847.000000 +45:880.690 Sensors-Accelerometer.AccX -8723.000000 +45:881.212 Sensors-Accelerometer.AccY 2957.000000 +45:881.727 Sensors-Accelerometer.AccZ -12113.000000 +45:920.690 Sensors-Accelerometer.AccX -9658.000000 +45:921.210 Sensors-Accelerometer.AccY 3077.000000 +45:921.728 Sensors-Accelerometer.AccZ -11796.000000 +45:950.683 Sensors-Magnetometer.MagX -71.000000 +45:951.154 Sensors-Magnetometer.MagY -61.000000 +45:951.624 Sensors-Magnetometer.MagZ 768.000000 +45:960.690 Sensors-Accelerometer.AccX -10181.000000 +45:961.239 Sensors-Accelerometer.AccY 3897.000000 +45:961.759 Sensors-Accelerometer.AccZ -11869.000000 +46:000.725 Sensors-Accelerometer.AccX -10144.000000 +46:001.265 Sensors-Accelerometer.AccY 3106.000000 +46:001.784 Sensors-Accelerometer.AccZ -11925.000000 +46:040.690 Sensors-Accelerometer.AccX -10325.000000 +46:041.233 Sensors-Accelerometer.AccY 2682.000000 +46:041.752 Sensors-Accelerometer.AccZ -12385.000000 +46:080.690 Sensors-Accelerometer.AccX -10188.000000 +46:081.231 Sensors-Accelerometer.AccY 2392.000000 +46:081.746 Sensors-Accelerometer.AccZ -12488.000000 +46:120.690 Sensors-Accelerometer.AccX -11355.000000 +46:121.237 Sensors-Accelerometer.AccY 3168.000000 +46:121.751 Sensors-Accelerometer.AccZ -12135.000000 +46:160.690 Sensors-Accelerometer.AccX -9909.000000 +46:161.216 Sensors-Accelerometer.AccY 3333.000000 +46:161.735 Sensors-Accelerometer.AccZ -14365.000000 +46:200.683 Sensors-Magnetometer.MagX -7.000000 +46:201.123 Sensors-Magnetometer.MagY 7.000000 +46:201.564 Sensors-Magnetometer.MagZ 767.000000 +46:202.099 Sensors-Accelerometer.AccX -7174.000000 +46:202.622 Sensors-Accelerometer.AccY 4140.000000 +46:203.143 Sensors-Accelerometer.AccZ -13941.000000 +46:240.690 Sensors-Accelerometer.AccX -7484.000000 +46:241.212 Sensors-Accelerometer.AccY 3328.000000 +46:241.720 Sensors-Accelerometer.AccZ -8850.000000 +46:250.684 Sensors-Magnetometer.MagX 116.000000 +46:251.167 Sensors-Magnetometer.MagY 37.000000 +46:251.631 Sensors-Magnetometer.MagZ 743.000000 +46:280.690 Sensors-Accelerometer.AccX -16115.000000 +46:281.240 Sensors-Accelerometer.AccY 2992.000000 +46:281.756 Sensors-Accelerometer.AccZ -6112.000000 +46:300.683 Sensors-Magnetometer.MagX 208.000000 +46:301.168 Sensors-Magnetometer.MagY 27.000000 +46:301.632 Sensors-Magnetometer.MagZ 689.000000 +46:320.690 Sensors-Accelerometer.AccX -13909.000000 +46:321.235 Sensors-Accelerometer.AccY 1181.000000 +46:321.749 Sensors-Accelerometer.AccZ -7430.000000 +46:350.683 Sensors-Magnetometer.MagX 299.000000 +46:351.179 Sensors-Magnetometer.MagY -5.000000 +46:351.619 Sensors-Magnetometer.MagZ 633.000000 +46:360.690 Sensors-Accelerometer.AccX -18775.000000 +46:361.244 Sensors-Accelerometer.AccY 3387.000000 +46:361.763 Sensors-Accelerometer.AccZ -3384.000000 +46:400.725 Sensors-Accelerometer.AccX -13312.000000 +46:401.255 Sensors-Accelerometer.AccY 2880.000000 +46:401.764 Sensors-Accelerometer.AccZ -2839.000000 +46:440.690 Sensors-Accelerometer.AccX -16837.000000 +46:441.232 Sensors-Accelerometer.AccY 4602.000000 +46:441.751 Sensors-Accelerometer.AccZ -4381.000000 +46:480.690 Sensors-Accelerometer.AccX -15377.000000 +46:481.233 Sensors-Accelerometer.AccY 1844.000000 +46:481.748 Sensors-Accelerometer.AccZ -2697.000000 +46:500.683 Sensors-Magnetometer.MagX 354.000000 +46:501.170 Sensors-Magnetometer.MagY 5.000000 +46:501.608 Sensors-Magnetometer.MagZ 580.000000 +46:520.690 Sensors-Accelerometer.AccX -15237.000000 +46:521.241 Sensors-Accelerometer.AccY 823.000000 +46:521.736 Sensors-Accelerometer.AccZ -3121.000000 +46:560.690 Sensors-Accelerometer.AccX -14108.000000 +46:561.233 Sensors-Accelerometer.AccY 2122.000000 +46:561.748 Sensors-Accelerometer.AccZ -3466.000000 +46:600.725 Sensors-Accelerometer.AccX -13680.000000 +46:601.265 Sensors-Accelerometer.AccY 3398.000000 +46:601.784 Sensors-Accelerometer.AccZ -2700.000000 +46:640.690 Sensors-Accelerometer.AccX -15847.000000 +46:641.239 Sensors-Accelerometer.AccY 2951.000000 +46:641.760 Sensors-Accelerometer.AccZ -3761.000000 +46:650.683 Sensors-Magnetometer.MagX 379.000000 +46:651.177 Sensors-Magnetometer.MagY 29.000000 +46:651.640 Sensors-Magnetometer.MagZ 550.000000 +46:680.690 Sensors-Accelerometer.AccX -14356.000000 +46:681.235 Sensors-Accelerometer.AccY 3798.000000 +46:681.760 Sensors-Accelerometer.AccZ -2046.000000 +46:720.690 Sensors-Accelerometer.AccX -14954.000000 +46:721.232 Sensors-Accelerometer.AccY 3946.000000 +46:721.748 Sensors-Accelerometer.AccZ -2961.000000 +46:760.690 Sensors-Accelerometer.AccX -15428.000000 +46:761.233 Sensors-Accelerometer.AccY 4745.000000 +46:761.752 Sensors-Accelerometer.AccZ -6041.000000 +46:800.683 Sensors-Magnetometer.MagX 441.000000 +46:801.171 Sensors-Magnetometer.MagY 48.000000 +46:801.632 Sensors-Magnetometer.MagZ 494.000000 +46:802.159 Sensors-Accelerometer.AccX -17863.000000 +46:802.707 Sensors-Accelerometer.AccY 2308.000000 +46:803.221 Sensors-Accelerometer.AccZ -821.000000 +46:840.690 Sensors-Accelerometer.AccX -15417.000000 +46:841.239 Sensors-Accelerometer.AccY 3345.000000 +46:841.758 Sensors-Accelerometer.AccZ 694.000000 +46:880.690 Sensors-Accelerometer.AccX -15000.000000 +46:881.233 Sensors-Accelerometer.AccY 4116.000000 +46:881.747 Sensors-Accelerometer.AccZ -753.000000 +46:900.684 Sensors-Magnetometer.MagX 464.000000 +46:901.167 Sensors-Magnetometer.MagY 5.000000 +46:901.603 Sensors-Magnetometer.MagZ 441.000000 +46:920.690 Sensors-Accelerometer.AccX -13628.000000 +46:921.236 Sensors-Accelerometer.AccY 4068.000000 +46:921.755 Sensors-Accelerometer.AccZ 2649.000000 +46:960.690 Sensors-Accelerometer.AccX -14805.000000 +46:961.233 Sensors-Accelerometer.AccY 3567.000000 +46:961.756 Sensors-Accelerometer.AccZ 3516.000000 +47:000.725 Sensors-Accelerometer.AccX -15835.000000 +47:001.279 Sensors-Accelerometer.AccY 4095.000000 +47:001.811 Sensors-Accelerometer.AccZ 1868.000000 +47:040.690 Sensors-Accelerometer.AccX -14286.000000 +47:041.239 Sensors-Accelerometer.AccY 4111.000000 +47:041.761 Sensors-Accelerometer.AccZ 731.000000 +47:080.690 Sensors-Accelerometer.AccX -13759.000000 +47:081.241 Sensors-Accelerometer.AccY 5549.000000 +47:081.765 Sensors-Accelerometer.AccZ 317.000000 +47:100.684 Sensors-Magnetometer.MagX 502.000000 +47:101.184 Sensors-Magnetometer.MagY -24.000000 +47:101.652 Sensors-Magnetometer.MagZ 381.000000 +47:120.690 Sensors-Accelerometer.AccX -13579.000000 +47:121.238 Sensors-Accelerometer.AccY 4770.000000 +47:121.760 Sensors-Accelerometer.AccZ 477.000000 +47:160.690 Sensors-Accelerometer.AccX -13821.000000 +47:161.238 Sensors-Accelerometer.AccY 4547.000000 +47:161.762 Sensors-Accelerometer.AccZ 1838.000000 +47:200.725 Sensors-Accelerometer.AccX -12738.000000 +47:201.272 Sensors-Accelerometer.AccY 4195.000000 +47:201.789 Sensors-Accelerometer.AccZ 4200.000000 +47:240.690 Sensors-Accelerometer.AccX -14391.000000 +47:241.240 Sensors-Accelerometer.AccY 3858.000000 +47:241.761 Sensors-Accelerometer.AccZ 2338.000000 +47:280.690 Sensors-Accelerometer.AccX -14947.000000 +47:281.239 Sensors-Accelerometer.AccY 3836.000000 +47:281.761 Sensors-Accelerometer.AccZ 2784.000000 +47:320.690 Sensors-Accelerometer.AccX -16644.000000 +47:321.234 Sensors-Accelerometer.AccY 3767.000000 +47:321.762 Sensors-Accelerometer.AccZ 2852.000000 +47:360.690 Sensors-Accelerometer.AccX -14513.000000 +47:361.230 Sensors-Accelerometer.AccY 3852.000000 +47:361.748 Sensors-Accelerometer.AccZ 3094.000000 +47:400.725 Sensors-Accelerometer.AccX -17826.000000 +47:401.264 Sensors-Accelerometer.AccY 3975.000000 +47:401.787 Sensors-Accelerometer.AccZ 1766.000000 +47:440.690 Sensors-Accelerometer.AccX -14025.000000 +47:441.233 Sensors-Accelerometer.AccY 5096.000000 +47:441.754 Sensors-Accelerometer.AccZ 740.000000 +47:480.690 Sensors-Accelerometer.AccX -15398.000000 +47:481.242 Sensors-Accelerometer.AccY 3384.000000 +47:481.758 Sensors-Accelerometer.AccZ 2065.000000 +47:520.690 Sensors-Accelerometer.AccX -14828.000000 +47:521.230 Sensors-Accelerometer.AccY 4374.000000 +47:521.750 Sensors-Accelerometer.AccZ 2119.000000 +47:560.690 Sensors-Accelerometer.AccX -15949.000000 +47:561.238 Sensors-Accelerometer.AccY 4078.000000 +47:561.760 Sensors-Accelerometer.AccZ 825.000000 +47:600.725 Sensors-Accelerometer.AccX -13716.000000 +47:601.267 Sensors-Accelerometer.AccY 3884.000000 +47:601.787 Sensors-Accelerometer.AccZ -482.000000 +47:640.690 Sensors-Accelerometer.AccX -14787.000000 +47:641.234 Sensors-Accelerometer.AccY 4699.000000 +47:641.758 Sensors-Accelerometer.AccZ 2104.000000 +47:650.684 Sensors-Magnetometer.MagX 486.000000 +47:651.177 Sensors-Magnetometer.MagY -40.000000 +47:651.640 Sensors-Magnetometer.MagZ 437.000000 +47:680.690 Sensors-Accelerometer.AccX -15524.000000 +47:681.231 Sensors-Accelerometer.AccY 4145.000000 +47:681.750 Sensors-Accelerometer.AccZ 1354.000000 +47:720.690 Sensors-Accelerometer.AccX -16171.000000 +47:721.242 Sensors-Accelerometer.AccY 3335.000000 +47:721.762 Sensors-Accelerometer.AccZ 6.000000 +47:760.690 Sensors-Accelerometer.AccX -14790.000000 +47:761.236 Sensors-Accelerometer.AccY 4813.000000 +47:761.755 Sensors-Accelerometer.AccZ -682.000000 +47:800.684 Sensors-Magnetometer.MagX 438.000000 +47:801.177 Sensors-Magnetometer.MagY -56.000000 +47:801.641 Sensors-Magnetometer.MagZ 504.000000 +47:802.167 Sensors-Accelerometer.AccX -13993.000000 +47:802.715 Sensors-Accelerometer.AccY 5685.000000 +47:803.240 Sensors-Accelerometer.AccZ -1436.000000 +47:840.690 Sensors-Accelerometer.AccX -14930.000000 +47:841.237 Sensors-Accelerometer.AccY 5389.000000 +47:841.760 Sensors-Accelerometer.AccZ -1663.000000 +47:880.690 Sensors-Accelerometer.AccX -14676.000000 +47:881.238 Sensors-Accelerometer.AccY 4751.000000 +47:881.766 Sensors-Accelerometer.AccZ -2514.000000 +47:920.690 Sensors-Accelerometer.AccX -14305.000000 +47:921.240 Sensors-Accelerometer.AccY 5432.000000 +47:921.761 Sensors-Accelerometer.AccZ -2291.000000 +47:960.690 Sensors-Accelerometer.AccX -14125.000000 +47:961.239 Sensors-Accelerometer.AccY 5637.000000 +47:961.760 Sensors-Accelerometer.AccZ -3010.000000 +48:000.725 Sensors-Accelerometer.AccX -15117.000000 +48:001.269 Sensors-Accelerometer.AccY 5198.000000 +48:001.789 Sensors-Accelerometer.AccZ -2891.000000 +48:040.690 Sensors-Accelerometer.AccX -13794.000000 +48:041.233 Sensors-Accelerometer.AccY 6754.000000 +48:041.749 Sensors-Accelerometer.AccZ -3213.000000 +48:080.690 Sensors-Accelerometer.AccX -14568.000000 +48:081.230 Sensors-Accelerometer.AccY 5963.000000 +48:081.755 Sensors-Accelerometer.AccZ -3165.000000 +48:108.701 Buttons-Down 0x1 +48:120.690 Sensors-Accelerometer.AccX -14919.000000 +48:121.240 Sensors-Accelerometer.AccY 5677.000000 +48:121.765 Sensors-Accelerometer.AccZ -3246.000000 +48:160.690 Sensors-Accelerometer.AccX -13975.000000 +48:161.236 Sensors-Accelerometer.AccY 6629.000000 +48:161.755 Sensors-Accelerometer.AccZ -2710.000000 +48:200.683 Sensors-Magnetometer.MagX 410.000000 +48:201.169 Sensors-Magnetometer.MagY -118.000000 +48:201.656 Sensors-Magnetometer.MagZ 528.000000 +48:202.176 Sensors-Accelerometer.AccX -14518.000000 +48:202.723 Sensors-Accelerometer.AccY 5523.000000 +48:203.246 Sensors-Accelerometer.AccZ -1155.000000 +48:240.690 Sensors-Accelerometer.AccX -14825.000000 +48:241.234 Sensors-Accelerometer.AccY 6078.000000 +48:241.760 Sensors-Accelerometer.AccZ -862.000000 +48:267.475 Buttons-Down 0x0 +48:280.690 Sensors-Accelerometer.AccX -14844.000000 +48:281.235 Sensors-Accelerometer.AccY 5723.000000 +48:281.762 Sensors-Accelerometer.AccZ -1985.000000 +48:320.690 Sensors-Accelerometer.AccX -14002.000000 +48:321.235 Sensors-Accelerometer.AccY 6159.000000 +48:321.763 Sensors-Accelerometer.AccZ -1772.000000 +48:360.690 Sensors-Accelerometer.AccX -14977.000000 +48:361.236 Sensors-Accelerometer.AccY 5887.000000 +48:361.760 Sensors-Accelerometer.AccZ -2288.000000 +48:400.725 Sensors-Accelerometer.AccX -14411.000000 +48:401.273 Sensors-Accelerometer.AccY 6490.000000 +48:401.795 Sensors-Accelerometer.AccZ -2778.000000 +48:440.690 Sensors-Accelerometer.AccX -14123.000000 +48:441.243 Sensors-Accelerometer.AccY 5998.000000 +48:441.766 Sensors-Accelerometer.AccZ -1564.000000 +48:480.690 Sensors-Accelerometer.AccX -14014.000000 +48:481.238 Sensors-Accelerometer.AccY 7012.000000 +48:481.763 Sensors-Accelerometer.AccZ -3324.000000 +48:520.690 Sensors-Accelerometer.AccX -15021.000000 +48:521.237 Sensors-Accelerometer.AccY 5983.000000 +48:521.762 Sensors-Accelerometer.AccZ -1469.000000 +48:560.690 Sensors-Accelerometer.AccX -14934.000000 +48:561.240 Sensors-Accelerometer.AccY 6376.000000 +48:561.758 Sensors-Accelerometer.AccZ -1022.000000 +48:600.725 Sensors-Accelerometer.AccX -13905.000000 +48:601.272 Sensors-Accelerometer.AccY 6615.000000 +48:601.800 Sensors-Accelerometer.AccZ -1784.000000 +48:640.690 Sensors-Accelerometer.AccX -13835.000000 +48:641.233 Sensors-Accelerometer.AccY 7019.000000 +48:641.755 Sensors-Accelerometer.AccZ -1734.000000 +48:680.690 Sensors-Accelerometer.AccX -14591.000000 +48:681.239 Sensors-Accelerometer.AccY 5872.000000 +48:681.762 Sensors-Accelerometer.AccZ 96.000000 +48:720.690 Sensors-Accelerometer.AccX -15739.000000 +48:721.238 Sensors-Accelerometer.AccY 6137.000000 +48:721.764 Sensors-Accelerometer.AccZ -964.000000 +48:760.690 Sensors-Accelerometer.AccX -14614.000000 +48:761.241 Sensors-Accelerometer.AccY 5868.000000 +48:761.765 Sensors-Accelerometer.AccZ -484.000000 +48:800.725 Sensors-Accelerometer.AccX -14754.000000 +48:801.265 Sensors-Accelerometer.AccY 6534.000000 +48:801.788 Sensors-Accelerometer.AccZ -1680.000000 +48:840.690 Sensors-Accelerometer.AccX -13639.000000 +48:841.235 Sensors-Accelerometer.AccY 7600.000000 +48:841.756 Sensors-Accelerometer.AccZ -4030.000000 +48:880.690 Sensors-Accelerometer.AccX -14219.000000 +48:881.239 Sensors-Accelerometer.AccY 6862.000000 +48:881.759 Sensors-Accelerometer.AccZ -768.000000 +48:920.690 Sensors-Accelerometer.AccX -14008.000000 +48:921.238 Sensors-Accelerometer.AccY 7224.000000 +48:921.759 Sensors-Accelerometer.AccZ -3979.000000 +48:960.690 Sensors-Accelerometer.AccX -14795.000000 +48:961.236 Sensors-Accelerometer.AccY 7307.000000 +48:961.763 Sensors-Accelerometer.AccZ -4334.000000 +49:000.725 Sensors-Accelerometer.AccX -14522.000000 +49:001.271 Sensors-Accelerometer.AccY 4587.000000 +49:001.801 Sensors-Accelerometer.AccZ 2282.000000 +49:040.690 Sensors-Accelerometer.AccX -14384.000000 +49:041.236 Sensors-Accelerometer.AccY 6471.000000 +49:041.764 Sensors-Accelerometer.AccZ -500.000000 +49:080.690 Sensors-Accelerometer.AccX -15343.000000 +49:081.246 Sensors-Accelerometer.AccY 5635.000000 +49:081.772 Sensors-Accelerometer.AccZ 110.000000 +49:100.683 Sensors-Magnetometer.MagX 436.000000 +49:101.176 Sensors-Magnetometer.MagY -107.000000 +49:101.667 Sensors-Magnetometer.MagZ 496.000000 +49:120.690 Sensors-Accelerometer.AccX -14197.000000 +49:121.239 Sensors-Accelerometer.AccY 6031.000000 +49:121.768 Sensors-Accelerometer.AccZ -586.000000 +49:160.690 Sensors-Accelerometer.AccX -13346.000000 +49:161.230 Sensors-Accelerometer.AccY 6891.000000 +49:161.750 Sensors-Accelerometer.AccZ -2187.000000 +49:200.725 Sensors-Accelerometer.AccX -13745.000000 +49:201.268 Sensors-Accelerometer.AccY 6833.000000 +49:201.785 Sensors-Accelerometer.AccZ -1021.000000 +49:240.690 Sensors-Accelerometer.AccX -14655.000000 +49:241.240 Sensors-Accelerometer.AccY 6535.000000 +49:241.765 Sensors-Accelerometer.AccZ -2797.000000 +49:280.690 Sensors-Accelerometer.AccX -14502.000000 +49:281.230 Sensors-Accelerometer.AccY 6785.000000 +49:281.746 Sensors-Accelerometer.AccZ -1463.000000 +49:320.690 Sensors-Accelerometer.AccX -15087.000000 +49:321.241 Sensors-Accelerometer.AccY 6782.000000 +49:321.760 Sensors-Accelerometer.AccZ -581.000000 +49:360.690 Sensors-Accelerometer.AccX -14051.000000 +49:361.234 Sensors-Accelerometer.AccY 6493.000000 +49:361.753 Sensors-Accelerometer.AccZ -735.000000 +49:400.642 Buttons-Up 0x1 +49:401.012 Sensors-Accelerometer.AccX -14194.000000 +49:401.557 Sensors-Accelerometer.AccY 7007.000000 +49:402.084 Sensors-Accelerometer.AccZ -1693.000000 +49:440.690 Sensors-Accelerometer.AccX -13378.000000 +49:441.232 Sensors-Accelerometer.AccY 6871.000000 +49:441.756 Sensors-Accelerometer.AccZ -2428.000000 +49:480.690 Sensors-Accelerometer.AccX -14106.000000 +49:481.230 Sensors-Accelerometer.AccY 7510.000000 +49:481.757 Sensors-Accelerometer.AccZ -1654.000000 +49:520.690 Sensors-Accelerometer.AccX -13895.000000 +49:521.234 Sensors-Accelerometer.AccY 6746.000000 +49:521.753 Sensors-Accelerometer.AccZ -2291.000000 +49:542.648 Buttons-Up 0x0 +49:560.690 Sensors-Accelerometer.AccX -14137.000000 +49:561.238 Sensors-Accelerometer.AccY 6936.000000 +49:561.763 Sensors-Accelerometer.AccZ -1461.000000 +49:600.725 Sensors-Accelerometer.AccX -15416.000000 +49:601.268 Sensors-Accelerometer.AccY 5822.000000 +49:601.790 Sensors-Accelerometer.AccZ -810.000000 +49:640.690 Sensors-Accelerometer.AccX -15093.000000 +49:641.240 Sensors-Accelerometer.AccY 5275.000000 +49:641.761 Sensors-Accelerometer.AccZ -1211.000000 +49:680.690 Sensors-Accelerometer.AccX -14508.000000 +49:681.236 Sensors-Accelerometer.AccY 7251.000000 +49:681.757 Sensors-Accelerometer.AccZ -1886.000000 +49:720.690 Sensors-Accelerometer.AccX -13812.000000 +49:721.233 Sensors-Accelerometer.AccY 7010.000000 +49:721.755 Sensors-Accelerometer.AccZ -1536.000000 +49:760.690 Sensors-Accelerometer.AccX -15323.000000 +49:761.241 Sensors-Accelerometer.AccY 6695.000000 +49:761.766 Sensors-Accelerometer.AccZ -2033.000000 +49:800.725 Sensors-Accelerometer.AccX -13241.000000 +49:801.270 Sensors-Accelerometer.AccY 7173.000000 +49:801.792 Sensors-Accelerometer.AccZ -1601.000000 +49:840.690 Sensors-Accelerometer.AccX -15642.000000 +49:841.237 Sensors-Accelerometer.AccY 7010.000000 +49:841.758 Sensors-Accelerometer.AccZ -1442.000000 +49:880.690 Sensors-Accelerometer.AccX -13997.000000 +49:881.240 Sensors-Accelerometer.AccY 6489.000000 +49:881.763 Sensors-Accelerometer.AccZ -330.000000 +49:902.657 Buttons-Right 0x1 +49:920.690 Sensors-Accelerometer.AccX -13351.000000 +49:921.234 Sensors-Accelerometer.AccY 6360.000000 +49:921.753 Sensors-Accelerometer.AccZ -1262.000000 +49:950.684 Sensors-Magnetometer.MagX 409.000000 +49:951.179 Sensors-Magnetometer.MagY -77.000000 +49:951.649 Sensors-Magnetometer.MagZ 557.000000 +49:960.690 Sensors-Accelerometer.AccX -14643.000000 +49:961.244 Sensors-Accelerometer.AccY 6337.000000 +49:961.768 Sensors-Accelerometer.AccZ -2979.000000 +50:000.725 Sensors-Accelerometer.AccX -13733.000000 +50:001.270 Sensors-Accelerometer.AccY 7588.000000 +50:001.790 Sensors-Accelerometer.AccZ -4745.000000 +50:040.690 Sensors-Accelerometer.AccX -14614.000000 +50:041.241 Sensors-Accelerometer.AccY 7188.000000 +50:041.762 Sensors-Accelerometer.AccZ -2772.000000 +50:080.690 Sensors-Accelerometer.AccX -14085.000000 +50:081.233 Sensors-Accelerometer.AccY 7427.000000 +50:081.755 Sensors-Accelerometer.AccZ -3049.000000 +50:099.902 Buttons-Right 0x0 +50:120.690 Sensors-Accelerometer.AccX -14793.000000 +50:121.237 Sensors-Accelerometer.AccY 6887.000000 +50:121.759 Sensors-Accelerometer.AccZ -2628.000000 +50:160.690 Sensors-Accelerometer.AccX -14655.000000 +50:161.241 Sensors-Accelerometer.AccY 4942.000000 +50:161.764 Sensors-Accelerometer.AccZ 466.000000 +50:200.725 Sensors-Accelerometer.AccX -13956.000000 +50:201.268 Sensors-Accelerometer.AccY 7090.000000 +50:201.791 Sensors-Accelerometer.AccZ -1904.000000 +50:240.690 Sensors-Accelerometer.AccX -14031.000000 +50:241.237 Sensors-Accelerometer.AccY 7020.000000 +50:241.760 Sensors-Accelerometer.AccZ -2766.000000 +50:280.690 Sensors-Accelerometer.AccX -14761.000000 +50:281.237 Sensors-Accelerometer.AccY 7671.000000 +50:281.762 Sensors-Accelerometer.AccZ -2293.000000 +50:320.690 Sensors-Accelerometer.AccX -14544.000000 +50:321.231 Sensors-Accelerometer.AccY 6676.000000 +50:321.753 Sensors-Accelerometer.AccZ -3032.000000 +50:360.690 Sensors-Accelerometer.AccX -13026.000000 +50:361.236 Sensors-Accelerometer.AccY 6088.000000 +50:361.756 Sensors-Accelerometer.AccZ -4359.000000 +50:400.725 Sensors-Accelerometer.AccX -15139.000000 +50:401.274 Sensors-Accelerometer.AccY 6643.000000 +50:401.799 Sensors-Accelerometer.AccZ -2953.000000 +50:440.690 Sensors-Accelerometer.AccX -14619.000000 +50:441.240 Sensors-Accelerometer.AccY 6125.000000 +50:441.763 Sensors-Accelerometer.AccZ -2131.000000 +50:480.690 Sensors-Accelerometer.AccX -13720.000000 +50:481.234 Sensors-Accelerometer.AccY 7321.000000 +50:481.761 Sensors-Accelerometer.AccZ -1622.000000 +50:520.690 Sensors-Accelerometer.AccX -14639.000000 +50:521.246 Sensors-Accelerometer.AccY 7485.000000 +50:521.772 Sensors-Accelerometer.AccZ -1942.000000 +50:560.690 Sensors-Accelerometer.AccX -14880.000000 +50:561.227 Sensors-Accelerometer.AccY 6037.000000 +50:561.751 Sensors-Accelerometer.AccZ -1206.000000 +50:600.725 Sensors-Accelerometer.AccX -13313.000000 +50:601.270 Sensors-Accelerometer.AccY 8154.000000 +50:601.793 Sensors-Accelerometer.AccZ -1205.000000 +50:640.690 Sensors-Accelerometer.AccX -13538.000000 +50:641.231 Sensors-Accelerometer.AccY 7014.000000 +50:641.755 Sensors-Accelerometer.AccZ -2509.000000 +50:680.690 Sensors-Accelerometer.AccX -13884.000000 +50:681.238 Sensors-Accelerometer.AccY 7353.000000 +50:681.767 Sensors-Accelerometer.AccZ -1636.000000 +50:720.690 Sensors-Accelerometer.AccX -13802.000000 +50:721.233 Sensors-Accelerometer.AccY 7513.000000 +50:721.761 Sensors-Accelerometer.AccZ -1984.000000 +50:750.683 Sensors-Magnetometer.MagX 418.000000 +50:751.177 Sensors-Magnetometer.MagY -129.000000 +50:751.671 Sensors-Magnetometer.MagZ 522.000000 +50:760.690 Sensors-Accelerometer.AccX -14713.000000 +50:761.239 Sensors-Accelerometer.AccY 6686.000000 +50:761.764 Sensors-Accelerometer.AccZ 275.000000 +50:800.725 Sensors-Accelerometer.AccX -14859.000000 +50:801.271 Sensors-Accelerometer.AccY 7290.000000 +50:801.795 Sensors-Accelerometer.AccZ -1287.000000 +50:840.690 Sensors-Accelerometer.AccX -13578.000000 +50:841.238 Sensors-Accelerometer.AccY 6935.000000 +50:841.765 Sensors-Accelerometer.AccZ -1002.000000 +50:880.690 Sensors-Accelerometer.AccX -14814.000000 +50:881.237 Sensors-Accelerometer.AccY 7778.000000 +50:881.761 Sensors-Accelerometer.AccZ -1550.000000 +50:920.690 Sensors-Accelerometer.AccX -13890.000000 +50:921.237 Sensors-Accelerometer.AccY 7258.000000 +50:921.762 Sensors-Accelerometer.AccZ -1997.000000 +50:922.293 Buttons-Left 0x1 +50:960.690 Sensors-Accelerometer.AccX -14777.000000 +50:961.237 Sensors-Accelerometer.AccY 7355.000000 +50:961.764 Sensors-Accelerometer.AccZ -1533.000000 +51:000.725 Sensors-Accelerometer.AccX -13317.000000 +51:001.269 Sensors-Accelerometer.AccY 8113.000000 +51:001.796 Sensors-Accelerometer.AccZ -1285.000000 +51:040.690 Sensors-Accelerometer.AccX -12347.000000 +51:041.238 Sensors-Accelerometer.AccY 8486.000000 +51:041.763 Sensors-Accelerometer.AccZ -2962.000000 +51:062.427 Buttons-Left 0x0 +51:080.690 Sensors-Accelerometer.AccX -13937.000000 +51:081.237 Sensors-Accelerometer.AccY 7168.000000 +51:081.752 Sensors-Accelerometer.AccZ -420.000000 +51:120.690 Sensors-Accelerometer.AccX -14981.000000 +51:121.241 Sensors-Accelerometer.AccY 6759.000000 +51:121.762 Sensors-Accelerometer.AccZ 74.000000 +51:160.690 Sensors-Accelerometer.AccX -13969.000000 +51:161.235 Sensors-Accelerometer.AccY 7515.000000 +51:161.769 Sensors-Accelerometer.AccZ -728.000000 +51:200.725 Sensors-Accelerometer.AccX -13970.000000 +51:201.261 Sensors-Accelerometer.AccY 7418.000000 +51:201.776 Sensors-Accelerometer.AccZ -513.000000 +51:240.690 Sensors-Accelerometer.AccX -13337.000000 +51:241.233 Sensors-Accelerometer.AccY 8179.000000 +51:241.753 Sensors-Accelerometer.AccZ -1835.000000 +51:280.690 Sensors-Accelerometer.AccX -14661.000000 +51:281.237 Sensors-Accelerometer.AccY 7459.000000 +51:281.759 Sensors-Accelerometer.AccZ 81.000000 +51:301.916 Buttons-Left 0x1 +51:320.690 Sensors-Accelerometer.AccX -15486.000000 +51:321.237 Sensors-Accelerometer.AccY 8031.000000 +51:321.762 Sensors-Accelerometer.AccZ -204.000000 +51:360.690 Sensors-Accelerometer.AccX -13117.000000 +51:361.233 Sensors-Accelerometer.AccY 8366.000000 +51:361.755 Sensors-Accelerometer.AccZ -3319.000000 +51:397.672 Buttons-Left 0x0 +51:400.725 Sensors-Accelerometer.AccX -12375.000000 +51:401.273 Sensors-Accelerometer.AccY 8917.000000 +51:401.792 Sensors-Accelerometer.AccZ -2539.000000 +51:440.690 Sensors-Accelerometer.AccX -15299.000000 +51:441.239 Sensors-Accelerometer.AccY 6486.000000 +51:441.764 Sensors-Accelerometer.AccZ -282.000000 +51:480.690 Sensors-Accelerometer.AccX -14328.000000 +51:481.236 Sensors-Accelerometer.AccY 7801.000000 +51:481.761 Sensors-Accelerometer.AccZ -355.000000 +51:520.690 Sensors-Accelerometer.AccX -12965.000000 +51:521.232 Sensors-Accelerometer.AccY 8132.000000 +51:521.750 Sensors-Accelerometer.AccZ -813.000000 +51:550.683 Sensors-Magnetometer.MagX 417.000000 +51:551.175 Sensors-Magnetometer.MagY -164.000000 +51:551.661 Sensors-Magnetometer.MagZ 514.000000 +51:560.690 Sensors-Accelerometer.AccX -14038.000000 +51:561.238 Sensors-Accelerometer.AccY 7625.000000 +51:561.762 Sensors-Accelerometer.AccZ -1837.000000 +51:600.725 Sensors-Accelerometer.AccX -14415.000000 +51:601.275 Sensors-Accelerometer.AccY 7799.000000 +51:601.800 Sensors-Accelerometer.AccZ -556.000000 +51:640.690 Sensors-Accelerometer.AccX -14772.000000 +51:641.229 Sensors-Accelerometer.AccY 7277.000000 +51:641.751 Sensors-Accelerometer.AccZ -1846.000000 +51:662.631 Buttons-Left 0x1 +51:680.690 Sensors-Accelerometer.AccX -12703.000000 +51:681.239 Sensors-Accelerometer.AccY 9908.000000 +51:681.763 Sensors-Accelerometer.AccZ -4018.000000 +51:720.690 Sensors-Accelerometer.AccX -12482.000000 +51:721.234 Sensors-Accelerometer.AccY 8866.000000 +51:721.752 Sensors-Accelerometer.AccZ -3915.000000 +51:760.690 Sensors-Accelerometer.AccX -15005.000000 +51:761.238 Sensors-Accelerometer.AccY 6514.000000 +51:761.762 Sensors-Accelerometer.AccZ 1120.000000 +51:762.286 Buttons-Left 0x0 +51:800.725 Sensors-Accelerometer.AccX -14627.000000 +51:801.276 Sensors-Accelerometer.AccY 7718.000000 +51:801.801 Sensors-Accelerometer.AccZ -744.000000 +51:840.690 Sensors-Accelerometer.AccX -14425.000000 +51:841.232 Sensors-Accelerometer.AccY 6983.000000 +51:841.753 Sensors-Accelerometer.AccZ -55.000000 +51:880.690 Sensors-Accelerometer.AccX -12751.000000 +51:881.239 Sensors-Accelerometer.AccY 8812.000000 +51:881.756 Sensors-Accelerometer.AccZ -115.000000 +51:920.690 Sensors-Accelerometer.AccX -12120.000000 +51:921.237 Sensors-Accelerometer.AccY 8968.000000 +51:921.755 Sensors-Accelerometer.AccZ -3000.000000 +51:960.690 Sensors-Accelerometer.AccX -11208.000000 +51:961.231 Sensors-Accelerometer.AccY 8793.000000 +51:961.758 Sensors-Accelerometer.AccZ -1422.000000 +52:000.725 Sensors-Accelerometer.AccX -15395.000000 +52:001.274 Sensors-Accelerometer.AccY 5815.000000 +52:001.800 Sensors-Accelerometer.AccZ 1879.000000 +52:040.690 Sensors-Accelerometer.AccX -16274.000000 +52:041.233 Sensors-Accelerometer.AccY 6255.000000 +52:041.759 Sensors-Accelerometer.AccZ 1063.000000 +52:050.683 Sensors-Magnetometer.MagX 468.000000 +52:051.172 Sensors-Magnetometer.MagY -106.000000 +52:051.660 Sensors-Magnetometer.MagZ 467.000000 +52:080.690 Sensors-Accelerometer.AccX -16470.000000 +52:081.235 Sensors-Accelerometer.AccY 4192.000000 +52:081.754 Sensors-Accelerometer.AccZ 1344.000000 +52:120.690 Sensors-Accelerometer.AccX -14865.000000 +52:121.236 Sensors-Accelerometer.AccY 7289.000000 +52:121.761 Sensors-Accelerometer.AccZ -1588.000000 +52:160.690 Sensors-Accelerometer.AccX -14292.000000 +52:161.234 Sensors-Accelerometer.AccY 6815.000000 +52:161.759 Sensors-Accelerometer.AccZ -2036.000000 +52:200.684 Sensors-Magnetometer.MagX 428.000000 +52:201.174 Sensors-Magnetometer.MagY -120.000000 +52:201.663 Sensors-Magnetometer.MagZ 525.000000 +52:202.188 Sensors-Accelerometer.AccX -13090.000000 +52:202.736 Sensors-Accelerometer.AccY 8481.000000 +52:203.256 Sensors-Accelerometer.AccZ -2271.000000 +52:240.690 Sensors-Accelerometer.AccX -13760.000000 +52:241.227 Sensors-Accelerometer.AccY 6361.000000 +52:241.751 Sensors-Accelerometer.AccZ -39.000000 +52:280.690 Sensors-Accelerometer.AccX -15020.000000 +52:281.240 Sensors-Accelerometer.AccY 6219.000000 +52:281.767 Sensors-Accelerometer.AccZ -548.000000 +52:320.690 Sensors-Accelerometer.AccX -14024.000000 +52:321.237 Sensors-Accelerometer.AccY 5943.000000 +52:321.762 Sensors-Accelerometer.AccZ -836.000000 +52:360.690 Sensors-Accelerometer.AccX -15604.000000 +52:361.237 Sensors-Accelerometer.AccY 6930.000000 +52:361.759 Sensors-Accelerometer.AccZ -1344.000000 +52:400.725 Sensors-Accelerometer.AccX -13765.000000 +52:401.269 Sensors-Accelerometer.AccY 6900.000000 +52:401.788 Sensors-Accelerometer.AccZ -1930.000000 +52:440.690 Sensors-Accelerometer.AccX -14658.000000 +52:441.233 Sensors-Accelerometer.AccY 5604.000000 +52:441.747 Sensors-Accelerometer.AccZ -490.000000 +52:480.690 Sensors-Accelerometer.AccX -15657.000000 +52:481.230 Sensors-Accelerometer.AccY 6595.000000 +52:481.744 Sensors-Accelerometer.AccZ -746.000000 +52:520.690 Sensors-Accelerometer.AccX -14169.000000 +52:521.231 Sensors-Accelerometer.AccY 5780.000000 +52:521.745 Sensors-Accelerometer.AccZ -987.000000 +52:560.690 Sensors-Accelerometer.AccX -14907.000000 +52:561.234 Sensors-Accelerometer.AccY 6828.000000 +52:561.751 Sensors-Accelerometer.AccZ -1946.000000 +52:600.725 Sensors-Accelerometer.AccX -13994.000000 +52:601.266 Sensors-Accelerometer.AccY 6123.000000 +52:601.793 Sensors-Accelerometer.AccZ -1060.000000 +52:640.690 Sensors-Accelerometer.AccX -14869.000000 +52:641.228 Sensors-Accelerometer.AccY 6391.000000 +52:641.749 Sensors-Accelerometer.AccZ -912.000000 +52:680.690 Sensors-Accelerometer.AccX -14113.000000 +52:681.233 Sensors-Accelerometer.AccY 5691.000000 +52:681.755 Sensors-Accelerometer.AccZ -902.000000 +52:720.690 Sensors-Accelerometer.AccX -15103.000000 +52:721.237 Sensors-Accelerometer.AccY 6191.000000 +52:721.763 Sensors-Accelerometer.AccZ -1941.000000 +52:745.357 Buttons-Right 0x1 +52:760.690 Sensors-Accelerometer.AccX -14280.000000 +52:761.231 Sensors-Accelerometer.AccY 6979.000000 +52:761.752 Sensors-Accelerometer.AccZ -2363.000000 +52:800.725 Sensors-Accelerometer.AccX -13575.000000 +52:801.265 Sensors-Accelerometer.AccY 7135.000000 +52:801.786 Sensors-Accelerometer.AccZ -4438.000000 +52:840.690 Sensors-Accelerometer.AccX -13870.000000 +52:841.232 Sensors-Accelerometer.AccY 7025.000000 +52:841.751 Sensors-Accelerometer.AccZ -2770.000000 +52:865.370 Buttons-Right 0x0 +52:880.690 Sensors-Accelerometer.AccX -16036.000000 +52:881.229 Sensors-Accelerometer.AccY 6375.000000 +52:881.753 Sensors-Accelerometer.AccZ -1235.000000 +52:920.690 Sensors-Accelerometer.AccX -13970.000000 +52:921.230 Sensors-Accelerometer.AccY 7228.000000 +52:921.748 Sensors-Accelerometer.AccZ 464.000000 +52:960.690 Sensors-Accelerometer.AccX -13772.000000 +52:961.231 Sensors-Accelerometer.AccY 6516.000000 +52:961.749 Sensors-Accelerometer.AccZ -2270.000000 +53:000.725 Sensors-Accelerometer.AccX -13096.000000 +53:001.270 Sensors-Accelerometer.AccY 6152.000000 +53:001.788 Sensors-Accelerometer.AccZ -1386.000000 +53:040.690 Sensors-Accelerometer.AccX -14423.000000 +53:041.236 Sensors-Accelerometer.AccY 6167.000000 +53:041.758 Sensors-Accelerometer.AccZ -1165.000000 +53:049.522 Buttons-Right 0x1 +53:080.690 Sensors-Accelerometer.AccX -14624.000000 +53:081.232 Sensors-Accelerometer.AccY 7487.000000 +53:081.758 Sensors-Accelerometer.AccZ -3178.000000 +53:120.690 Sensors-Accelerometer.AccX -14183.000000 +53:121.231 Sensors-Accelerometer.AccY 7369.000000 +53:121.752 Sensors-Accelerometer.AccZ -3603.000000 +53:153.698 Buttons-Right 0x0 +53:160.690 Sensors-Accelerometer.AccX -15865.000000 +53:161.237 Sensors-Accelerometer.AccY 6273.000000 +53:161.761 Sensors-Accelerometer.AccZ -2228.000000 +53:200.725 Sensors-Accelerometer.AccX -14966.000000 +53:201.270 Sensors-Accelerometer.AccY 6319.000000 +53:201.795 Sensors-Accelerometer.AccZ -25.000000 +53:240.690 Sensors-Accelerometer.AccX -13214.000000 +53:241.235 Sensors-Accelerometer.AccY 5994.000000 +53:241.759 Sensors-Accelerometer.AccZ -1425.000000 +53:280.690 Sensors-Accelerometer.AccX -13719.000000 +53:281.234 Sensors-Accelerometer.AccY 5894.000000 +53:281.753 Sensors-Accelerometer.AccZ -1181.000000 +53:306.286 Buttons-Right 0x1 +53:320.690 Sensors-Accelerometer.AccX -15394.000000 +53:321.233 Sensors-Accelerometer.AccY 5925.000000 +53:321.750 Sensors-Accelerometer.AccZ -1169.000000 +53:360.690 Sensors-Accelerometer.AccX -14218.000000 +53:361.235 Sensors-Accelerometer.AccY 7179.000000 +53:361.757 Sensors-Accelerometer.AccZ -4033.000000 +53:400.683 Sensors-Magnetometer.MagX 403.000000 +53:401.179 Sensors-Magnetometer.MagY -68.000000 +53:401.641 Sensors-Magnetometer.MagZ 550.000000 +53:402.169 Sensors-Accelerometer.AccX -14481.000000 +53:402.708 Sensors-Accelerometer.AccY 7453.000000 +53:403.229 Sensors-Accelerometer.AccZ -4203.000000 +53:440.690 Sensors-Accelerometer.AccX -15723.000000 +53:441.242 Sensors-Accelerometer.AccY 6044.000000 +53:441.760 Sensors-Accelerometer.AccZ -1024.000000 +53:449.887 Buttons-Right 0x0 +53:480.690 Sensors-Accelerometer.AccX -15165.000000 +53:481.238 Sensors-Accelerometer.AccY 6609.000000 +53:481.754 Sensors-Accelerometer.AccZ -1974.000000 +53:520.690 Sensors-Accelerometer.AccX -14258.000000 +53:521.237 Sensors-Accelerometer.AccY 7183.000000 +53:521.759 Sensors-Accelerometer.AccZ 992.000000 +53:560.690 Sensors-Accelerometer.AccX -13195.000000 +53:561.238 Sensors-Accelerometer.AccY 4989.000000 +53:561.759 Sensors-Accelerometer.AccZ -467.000000 +53:600.725 Sensors-Accelerometer.AccX -13315.000000 +53:601.270 Sensors-Accelerometer.AccY 7232.000000 +53:601.784 Sensors-Accelerometer.AccZ -3222.000000 +53:640.690 Sensors-Accelerometer.AccX -15115.000000 +53:641.238 Sensors-Accelerometer.AccY 5791.000000 +53:641.760 Sensors-Accelerometer.AccZ 285.000000 +53:680.690 Sensors-Accelerometer.AccX -14010.000000 +53:681.230 Sensors-Accelerometer.AccY 6648.000000 +53:681.748 Sensors-Accelerometer.AccZ -1672.000000 +53:720.690 Sensors-Accelerometer.AccX -15178.000000 +53:721.240 Sensors-Accelerometer.AccY 6856.000000 +53:721.758 Sensors-Accelerometer.AccZ -884.000000 +53:760.690 Sensors-Accelerometer.AccX -14268.000000 +53:761.230 Sensors-Accelerometer.AccY 6907.000000 +53:761.748 Sensors-Accelerometer.AccZ -1877.000000 +53:800.725 Sensors-Accelerometer.AccX -14099.000000 +53:801.269 Sensors-Accelerometer.AccY 6400.000000 +53:801.774 Sensors-Accelerometer.AccZ -1571.000000 +53:840.690 Sensors-Accelerometer.AccX -15801.000000 +53:841.234 Sensors-Accelerometer.AccY 6519.000000 +53:841.759 Sensors-Accelerometer.AccZ -319.000000 +53:860.348 Buttons-Up 0x1 +53:880.690 Sensors-Accelerometer.AccX -14611.000000 +53:881.240 Sensors-Accelerometer.AccY 5400.000000 +53:881.759 Sensors-Accelerometer.AccZ 1733.000000 +53:920.690 Sensors-Accelerometer.AccX -13275.000000 +53:921.234 Sensors-Accelerometer.AccY 6353.000000 +53:921.755 Sensors-Accelerometer.AccZ -1018.000000 +53:960.690 Sensors-Accelerometer.AccX -13992.000000 +53:961.230 Sensors-Accelerometer.AccY 6634.000000 +53:961.751 Sensors-Accelerometer.AccZ -3719.000000 +54:000.683 Sensors-Magnetometer.MagX 428.000000 +54:001.170 Sensors-Magnetometer.MagY -81.000000 +54:001.636 Sensors-Magnetometer.MagZ 529.000000 +54:002.161 Sensors-Accelerometer.AccX -14522.000000 +54:002.705 Sensors-Accelerometer.AccY 7305.000000 +54:003.230 Sensors-Accelerometer.AccZ -3708.000000 +54:003.757 Buttons-Up 0x0 +54:040.690 Sensors-Accelerometer.AccX -15506.000000 +54:041.237 Sensors-Accelerometer.AccY 5993.000000 +54:041.761 Sensors-Accelerometer.AccZ -934.000000 +54:080.690 Sensors-Accelerometer.AccX -14233.000000 +54:081.236 Sensors-Accelerometer.AccY 6769.000000 +54:081.749 Sensors-Accelerometer.AccZ -1468.000000 +54:120.690 Sensors-Accelerometer.AccX -13412.000000 +54:121.234 Sensors-Accelerometer.AccY 6036.000000 +54:121.752 Sensors-Accelerometer.AccZ -868.000000 +54:160.690 Sensors-Accelerometer.AccX -15200.000000 +54:161.231 Sensors-Accelerometer.AccY 6162.000000 +54:161.751 Sensors-Accelerometer.AccZ -565.000000 +54:184.487 Buttons-Up 0x1 +54:240.690 Sensors-Accelerometer.AccX -13965.000000 +54:241.234 Sensors-Accelerometer.AccY 8448.000000 +54:241.743 Sensors-Accelerometer.AccZ -5987.000000 +54:280.690 Sensors-Accelerometer.AccX -14423.000000 +54:281.234 Sensors-Accelerometer.AccY 7601.000000 +54:281.757 Sensors-Accelerometer.AccZ -2697.000000 +54:300.893 Buttons-Up 0x0 +54:320.690 Sensors-Accelerometer.AccX -14856.000000 +54:321.231 Sensors-Accelerometer.AccY 7672.000000 +54:321.754 Sensors-Accelerometer.AccZ -649.000000 +54:360.690 Sensors-Accelerometer.AccX -14789.000000 +54:361.236 Sensors-Accelerometer.AccY 6037.000000 +54:361.762 Sensors-Accelerometer.AccZ -133.000000 +54:400.725 Sensors-Accelerometer.AccX -15168.000000 +54:401.259 Sensors-Accelerometer.AccY 6625.000000 +54:401.777 Sensors-Accelerometer.AccZ -543.000000 +54:440.690 Sensors-Accelerometer.AccX -13683.000000 +54:441.234 Sensors-Accelerometer.AccY 6215.000000 +54:441.757 Sensors-Accelerometer.AccZ -513.000000 +54:450.684 Sensors-Magnetometer.MagX 490.000000 +54:451.176 Sensors-Magnetometer.MagY -99.000000 +54:451.646 Sensors-Magnetometer.MagZ 430.000000 +54:480.690 Sensors-Accelerometer.AccX -13064.000000 +54:481.230 Sensors-Accelerometer.AccY 4545.000000 +54:481.748 Sensors-Accelerometer.AccZ 4114.000000 +54:520.690 Sensors-Accelerometer.AccX -15679.000000 +54:521.241 Sensors-Accelerometer.AccY 5777.000000 +54:521.756 Sensors-Accelerometer.AccZ 1823.000000 +54:560.690 Sensors-Accelerometer.AccX -13956.000000 +54:561.229 Sensors-Accelerometer.AccY 6583.000000 +54:561.749 Sensors-Accelerometer.AccZ 947.000000 +54:600.725 Sensors-Accelerometer.AccX -15811.000000 +54:601.272 Sensors-Accelerometer.AccY 5812.000000 +54:601.790 Sensors-Accelerometer.AccZ 1710.000000 +54:640.690 Sensors-Accelerometer.AccX -13753.000000 +54:641.235 Sensors-Accelerometer.AccY 5770.000000 +54:641.751 Sensors-Accelerometer.AccZ 1008.000000 +54:680.690 Sensors-Accelerometer.AccX -14281.000000 +54:681.239 Sensors-Accelerometer.AccY 5922.000000 +54:681.759 Sensors-Accelerometer.AccZ 1481.000000 +54:720.690 Sensors-Accelerometer.AccX -14140.000000 +54:721.236 Sensors-Accelerometer.AccY 6260.000000 +54:721.755 Sensors-Accelerometer.AccZ 1212.000000 +54:760.690 Sensors-Accelerometer.AccX -15383.000000 +54:761.239 Sensors-Accelerometer.AccY 6054.000000 +54:761.763 Sensors-Accelerometer.AccZ 1333.000000 +54:800.725 Sensors-Accelerometer.AccX -13941.000000 +54:801.268 Sensors-Accelerometer.AccY 5761.000000 +54:801.788 Sensors-Accelerometer.AccZ 2487.000000 +54:840.690 Sensors-Accelerometer.AccX -15167.000000 +54:841.239 Sensors-Accelerometer.AccY 7008.000000 +54:841.758 Sensors-Accelerometer.AccZ -1389.000000 +54:880.690 Sensors-Accelerometer.AccX -14579.000000 +54:881.241 Sensors-Accelerometer.AccY 5316.000000 +54:881.761 Sensors-Accelerometer.AccZ 2128.000000 +54:904.649 Buttons-Left 0x1 +54:920.690 Sensors-Accelerometer.AccX -15047.000000 +54:921.244 Sensors-Accelerometer.AccY 5762.000000 +54:921.762 Sensors-Accelerometer.AccZ 2024.000000 +54:960.690 Sensors-Accelerometer.AccX -15134.000000 +54:961.239 Sensors-Accelerometer.AccY 6396.000000 +54:961.766 Sensors-Accelerometer.AccZ 876.000000 +55:000.725 Sensors-Accelerometer.AccX -14686.000000 +55:001.274 Sensors-Accelerometer.AccY 6215.000000 +55:001.803 Sensors-Accelerometer.AccZ 1317.000000 +55:040.690 Sensors-Accelerometer.AccX -13979.000000 +55:041.233 Sensors-Accelerometer.AccY 6417.000000 +55:041.752 Sensors-Accelerometer.AccZ -500.000000 +55:058.681 Buttons-Left 0x0 +55:080.690 Sensors-Accelerometer.AccX -14664.000000 +55:081.234 Sensors-Accelerometer.AccY 5635.000000 +55:081.757 Sensors-Accelerometer.AccZ 1444.000000 +55:120.690 Sensors-Accelerometer.AccX -13786.000000 +55:121.232 Sensors-Accelerometer.AccY 5990.000000 +55:121.754 Sensors-Accelerometer.AccZ 1594.000000 +55:160.690 Sensors-Accelerometer.AccX -15355.000000 +55:161.246 Sensors-Accelerometer.AccY 6218.000000 +55:161.771 Sensors-Accelerometer.AccZ 2035.000000 +55:200.725 Sensors-Accelerometer.AccX -14481.000000 +55:201.265 Sensors-Accelerometer.AccY 6234.000000 +55:201.787 Sensors-Accelerometer.AccZ 312.000000 +55:240.690 Sensors-Accelerometer.AccX -15187.000000 +55:241.240 Sensors-Accelerometer.AccY 6396.000000 +55:241.766 Sensors-Accelerometer.AccZ 1691.000000 +55:280.690 Sensors-Accelerometer.AccX -14603.000000 +55:281.238 Sensors-Accelerometer.AccY 6630.000000 +55:281.762 Sensors-Accelerometer.AccZ -1005.000000 +55:320.690 Sensors-Accelerometer.AccX -15143.000000 +55:321.237 Sensors-Accelerometer.AccY 6814.000000 +55:321.761 Sensors-Accelerometer.AccZ -1381.000000 +55:360.690 Sensors-Accelerometer.AccX -14975.000000 +55:361.234 Sensors-Accelerometer.AccY 6329.000000 +55:361.755 Sensors-Accelerometer.AccZ 617.000000 +55:400.725 Sensors-Accelerometer.AccX -13154.000000 +55:401.266 Sensors-Accelerometer.AccY 6233.000000 +55:401.789 Sensors-Accelerometer.AccZ 1365.000000 +55:440.690 Sensors-Accelerometer.AccX -13385.000000 +55:441.236 Sensors-Accelerometer.AccY 6355.000000 +55:441.761 Sensors-Accelerometer.AccZ 211.000000 +55:480.690 Sensors-Accelerometer.AccX -14663.000000 +55:481.244 Sensors-Accelerometer.AccY 5254.000000 +55:481.763 Sensors-Accelerometer.AccZ 2148.000000 +55:520.690 Sensors-Accelerometer.AccX -14626.000000 +55:521.235 Sensors-Accelerometer.AccY 6534.000000 +55:521.760 Sensors-Accelerometer.AccZ 2264.000000 +55:560.690 Sensors-Accelerometer.AccX -14921.000000 +55:561.237 Sensors-Accelerometer.AccY 6051.000000 +55:561.763 Sensors-Accelerometer.AccZ 1558.000000 +55:600.725 Sensors-Accelerometer.AccX -15151.000000 +55:601.281 Sensors-Accelerometer.AccY 5869.000000 +55:601.805 Sensors-Accelerometer.AccZ 468.000000 +55:640.690 Sensors-Accelerometer.AccX -14172.000000 +55:641.239 Sensors-Accelerometer.AccY 6507.000000 +55:641.767 Sensors-Accelerometer.AccZ 1233.000000 +55:680.690 Sensors-Accelerometer.AccX -15067.000000 +55:681.242 Sensors-Accelerometer.AccY 5754.000000 +55:681.765 Sensors-Accelerometer.AccZ 795.000000 +55:720.690 Sensors-Accelerometer.AccX -14383.000000 +55:721.241 Sensors-Accelerometer.AccY 6101.000000 +55:721.761 Sensors-Accelerometer.AccZ 1249.000000 +55:734.579 Buttons-Down 0x1 +55:760.690 Sensors-Accelerometer.AccX -15049.000000 +55:761.237 Sensors-Accelerometer.AccY 6657.000000 +55:761.757 Sensors-Accelerometer.AccZ 513.000000 +55:800.725 Sensors-Accelerometer.AccX -13778.000000 +55:801.269 Sensors-Accelerometer.AccY 6386.000000 +55:801.794 Sensors-Accelerometer.AccZ 2117.000000 +55:840.690 Sensors-Accelerometer.AccX -15158.000000 +55:841.236 Sensors-Accelerometer.AccY 6384.000000 +55:841.757 Sensors-Accelerometer.AccZ 63.000000 +55:880.690 Sensors-Accelerometer.AccX -14199.000000 +55:881.238 Sensors-Accelerometer.AccY 6118.000000 +55:881.764 Sensors-Accelerometer.AccZ 1169.000000 +55:917.278 Buttons-Down 0x0 +55:920.691 Sensors-Accelerometer.AccX -14350.000000 +55:921.237 Sensors-Accelerometer.AccY 5276.000000 +55:921.754 Sensors-Accelerometer.AccZ 1715.000000 +55:960.690 Sensors-Accelerometer.AccX -14517.000000 +55:961.239 Sensors-Accelerometer.AccY 5099.000000 +55:961.769 Sensors-Accelerometer.AccZ 488.000000 +56:000.725 Sensors-Accelerometer.AccX -14863.000000 +56:001.272 Sensors-Accelerometer.AccY 6189.000000 +56:001.795 Sensors-Accelerometer.AccZ 527.000000 +56:040.690 Sensors-Accelerometer.AccX -13391.000000 +56:041.238 Sensors-Accelerometer.AccY 5704.000000 +56:041.757 Sensors-Accelerometer.AccZ 2026.000000 +56:080.690 Sensors-Accelerometer.AccX -14908.000000 +56:081.237 Sensors-Accelerometer.AccY 5403.000000 +56:081.757 Sensors-Accelerometer.AccZ 2348.000000 +56:120.690 Sensors-Accelerometer.AccX -14950.000000 +56:121.239 Sensors-Accelerometer.AccY 6971.000000 +56:121.761 Sensors-Accelerometer.AccZ -1687.000000 +56:150.684 Sensors-Magnetometer.MagX 471.000000 +56:151.184 Sensors-Magnetometer.MagY -81.000000 +56:151.652 Sensors-Magnetometer.MagZ 483.000000 +56:160.690 Sensors-Accelerometer.AccX -14617.000000 +56:161.238 Sensors-Accelerometer.AccY 7217.000000 +56:161.757 Sensors-Accelerometer.AccZ -2104.000000 +56:200.725 Sensors-Accelerometer.AccX -14858.000000 +56:201.269 Sensors-Accelerometer.AccY 6379.000000 +56:201.797 Sensors-Accelerometer.AccZ 1520.000000 +56:240.690 Sensors-Accelerometer.AccX -14438.000000 +56:241.235 Sensors-Accelerometer.AccY 6878.000000 +56:241.763 Sensors-Accelerometer.AccZ -1455.000000 +56:280.690 Sensors-Accelerometer.AccX -14348.000000 +56:281.237 Sensors-Accelerometer.AccY 5719.000000 +56:281.764 Sensors-Accelerometer.AccZ -78.000000 +56:320.690 Sensors-Accelerometer.AccX -15375.000000 +56:321.233 Sensors-Accelerometer.AccY 6154.000000 +56:321.750 Sensors-Accelerometer.AccZ 628.000000 +56:360.690 Sensors-Accelerometer.AccX -15658.000000 +56:361.238 Sensors-Accelerometer.AccY 7119.000000 +56:361.761 Sensors-Accelerometer.AccZ 2364.000000 +56:400.725 Sensors-Accelerometer.AccX -14852.000000 +56:401.265 Sensors-Accelerometer.AccY 6414.000000 +56:401.786 Sensors-Accelerometer.AccZ -836.000000 +56:440.690 Sensors-Accelerometer.AccX -13815.000000 +56:441.234 Sensors-Accelerometer.AccY 6762.000000 +56:441.753 Sensors-Accelerometer.AccZ -3104.000000 +56:450.683 Sensors-Magnetometer.MagX 401.000000 +56:451.171 Sensors-Magnetometer.MagY -109.000000 +56:451.657 Sensors-Magnetometer.MagZ 570.000000 +56:480.690 Sensors-Accelerometer.AccX -14030.000000 +56:481.233 Sensors-Accelerometer.AccY 7089.000000 +56:481.752 Sensors-Accelerometer.AccZ -3982.000000 +56:520.690 Sensors-Accelerometer.AccX -13251.000000 +56:521.240 Sensors-Accelerometer.AccY 7233.000000 +56:521.763 Sensors-Accelerometer.AccZ -4345.000000 +56:550.684 Sensors-Magnetometer.MagX 355.000000 +56:551.177 Sensors-Magnetometer.MagY -97.000000 +56:551.643 Sensors-Magnetometer.MagZ 622.000000 +56:560.691 Sensors-Accelerometer.AccX -13148.000000 +56:561.233 Sensors-Accelerometer.AccY 7791.000000 +56:561.759 Sensors-Accelerometer.AccZ -5461.000000 +56:600.725 Sensors-Accelerometer.AccX -11139.000000 +56:601.276 Sensors-Accelerometer.AccY 7821.000000 +56:601.803 Sensors-Accelerometer.AccZ -4675.000000 +56:640.690 Sensors-Accelerometer.AccX -13431.000000 +56:641.233 Sensors-Accelerometer.AccY 7976.000000 +56:641.751 Sensors-Accelerometer.AccZ -5283.000000 +56:680.690 Sensors-Accelerometer.AccX -12958.000000 +56:681.239 Sensors-Accelerometer.AccY 8565.000000 +56:681.758 Sensors-Accelerometer.AccZ -3794.000000 +56:720.690 Sensors-Accelerometer.AccX -14259.000000 +56:721.239 Sensors-Accelerometer.AccY 7712.000000 +56:721.757 Sensors-Accelerometer.AccZ -3861.000000 +56:760.690 Sensors-Accelerometer.AccX -13487.000000 +56:761.237 Sensors-Accelerometer.AccY 7332.000000 +56:761.761 Sensors-Accelerometer.AccZ -3469.000000 +56:800.725 Sensors-Accelerometer.AccX -13785.000000 +56:801.270 Sensors-Accelerometer.AccY 8516.000000 +56:801.790 Sensors-Accelerometer.AccZ -4741.000000 +56:840.690 Sensors-Accelerometer.AccX -12578.000000 +56:841.236 Sensors-Accelerometer.AccY 8851.000000 +56:841.758 Sensors-Accelerometer.AccZ -3907.000000 +56:880.690 Sensors-Accelerometer.AccX -13781.000000 +56:881.230 Sensors-Accelerometer.AccY 8075.000000 +56:881.755 Sensors-Accelerometer.AccZ -4234.000000 +56:920.690 Sensors-Accelerometer.AccX -13268.000000 +56:921.235 Sensors-Accelerometer.AccY 8151.000000 +56:921.768 Sensors-Accelerometer.AccZ -3446.000000 +56:960.690 Sensors-Accelerometer.AccX -13130.000000 +56:961.229 Sensors-Accelerometer.AccY 7952.000000 +56:961.747 Sensors-Accelerometer.AccZ -3097.000000 +57:000.683 Sensors-Magnetometer.MagX 323.000000 +57:001.178 Sensors-Magnetometer.MagY -151.000000 +57:001.672 Sensors-Magnetometer.MagZ 624.000000 +57:002.200 Sensors-Accelerometer.AccX -12754.000000 +57:002.747 Sensors-Accelerometer.AccY 7923.000000 +57:003.276 Sensors-Accelerometer.AccZ -4639.000000 +57:040.690 Sensors-Accelerometer.AccX -13522.000000 +57:041.230 Sensors-Accelerometer.AccY 7318.000000 +57:041.755 Sensors-Accelerometer.AccZ -2227.000000 +57:080.690 Sensors-Accelerometer.AccX -12706.000000 +57:081.237 Sensors-Accelerometer.AccY 8621.000000 +57:081.762 Sensors-Accelerometer.AccZ -5216.000000 +57:120.690 Sensors-Accelerometer.AccX -11739.000000 +57:121.242 Sensors-Accelerometer.AccY 8410.000000 +57:121.757 Sensors-Accelerometer.AccZ -5922.000000 +57:160.690 Sensors-Accelerometer.AccX -13559.000000 +57:161.237 Sensors-Accelerometer.AccY 9345.000000 +57:161.763 Sensors-Accelerometer.AccZ -5491.000000 +57:196.983 Buttons-Right 0x1 +57:200.725 Sensors-Accelerometer.AccX -13901.000000 +57:201.272 Sensors-Accelerometer.AccY 9269.000000 +57:201.798 Sensors-Accelerometer.AccZ -3779.000000 +57:240.690 Sensors-Accelerometer.AccX -12861.000000 +57:241.240 Sensors-Accelerometer.AccY 8559.000000 +57:241.771 Sensors-Accelerometer.AccZ -3540.000000 +57:280.690 Sensors-Accelerometer.AccX -11878.000000 +57:281.240 Sensors-Accelerometer.AccY 9435.000000 +57:281.771 Sensors-Accelerometer.AccZ -5971.000000 +57:304.178 Buttons-Right 0x0 +57:320.690 Sensors-Accelerometer.AccX -13541.000000 +57:321.239 Sensors-Accelerometer.AccY 8272.000000 +57:321.759 Sensors-Accelerometer.AccZ -4906.000000 +57:360.690 Sensors-Accelerometer.AccX -14030.000000 +57:361.232 Sensors-Accelerometer.AccY 7681.000000 +57:361.749 Sensors-Accelerometer.AccZ -1358.000000 +57:400.725 Sensors-Accelerometer.AccX -12425.000000 +57:401.273 Sensors-Accelerometer.AccY 7988.000000 +57:401.796 Sensors-Accelerometer.AccZ -3663.000000 +57:440.690 Sensors-Accelerometer.AccX -13699.000000 +57:441.235 Sensors-Accelerometer.AccY 7812.000000 +57:441.755 Sensors-Accelerometer.AccZ -2751.000000 +57:480.690 Sensors-Accelerometer.AccX -13453.000000 +57:481.232 Sensors-Accelerometer.AccY 7816.000000 +57:481.751 Sensors-Accelerometer.AccZ -3830.000000 +57:515.654 Buttons-Right 0x1 +57:520.690 Sensors-Accelerometer.AccX -12885.000000 +57:521.234 Sensors-Accelerometer.AccY 9318.000000 +57:521.761 Sensors-Accelerometer.AccZ -5123.000000 +57:560.690 Sensors-Accelerometer.AccX -11514.000000 +57:561.238 Sensors-Accelerometer.AccY 10288.000000 +57:561.782 Sensors-Accelerometer.AccZ -6490.000000 +57:600.725 Sensors-Accelerometer.AccX -12689.000000 +57:601.266 Sensors-Accelerometer.AccY 9579.000000 +57:601.790 Sensors-Accelerometer.AccZ -4857.000000 +57:638.607 Buttons-Right 0x0 +57:640.690 Sensors-Accelerometer.AccX -14352.000000 +57:641.233 Sensors-Accelerometer.AccY 8650.000000 +57:641.754 Sensors-Accelerometer.AccZ -4376.000000 +57:680.690 Sensors-Accelerometer.AccX -13863.000000 +57:681.230 Sensors-Accelerometer.AccY 8690.000000 +57:681.749 Sensors-Accelerometer.AccZ -3553.000000 +57:720.690 Sensors-Accelerometer.AccX -11412.000000 +57:721.231 Sensors-Accelerometer.AccY 8505.000000 +57:721.751 Sensors-Accelerometer.AccZ -2992.000000 +57:760.690 Sensors-Accelerometer.AccX -12765.000000 +57:761.234 Sensors-Accelerometer.AccY 7449.000000 +57:761.753 Sensors-Accelerometer.AccZ -2418.000000 +57:767.371 Buttons-Right 0x1 +57:800.725 Sensors-Accelerometer.AccX -12651.000000 +57:801.274 Sensors-Accelerometer.AccY 8792.000000 +57:801.795 Sensors-Accelerometer.AccZ -4627.000000 +57:840.690 Sensors-Accelerometer.AccX -13546.000000 +57:841.231 Sensors-Accelerometer.AccY 9553.000000 +57:841.753 Sensors-Accelerometer.AccZ -4662.000000 +57:880.690 Sensors-Accelerometer.AccX -12057.000000 +57:881.239 Sensors-Accelerometer.AccY 9690.000000 +57:881.760 Sensors-Accelerometer.AccZ -5525.000000 +57:920.690 Sensors-Accelerometer.AccX -13563.000000 +57:921.235 Sensors-Accelerometer.AccY 9241.000000 +57:921.752 Sensors-Accelerometer.AccZ -5908.000000 +57:960.690 Sensors-Accelerometer.AccX -12635.000000 +57:961.241 Sensors-Accelerometer.AccY 8958.000000 +57:961.764 Sensors-Accelerometer.AccZ -3577.000000 +58:000.725 Sensors-Accelerometer.AccX -11991.000000 +58:001.275 Sensors-Accelerometer.AccY 9363.000000 +58:001.801 Sensors-Accelerometer.AccZ -3697.000000 +58:033.420 Buttons-Right 0x0 +58:040.690 Sensors-Accelerometer.AccX -13808.000000 +58:041.231 Sensors-Accelerometer.AccY 8850.000000 +58:041.748 Sensors-Accelerometer.AccZ -4552.000000 +58:080.690 Sensors-Accelerometer.AccX -14096.000000 +58:081.227 Sensors-Accelerometer.AccY 9235.000000 +58:081.752 Sensors-Accelerometer.AccZ -3345.000000 +58:120.690 Sensors-Accelerometer.AccX -10757.000000 +58:121.232 Sensors-Accelerometer.AccY 8903.000000 +58:121.759 Sensors-Accelerometer.AccZ -1944.000000 +58:160.690 Sensors-Accelerometer.AccX -13094.000000 +58:161.244 Sensors-Accelerometer.AccY 8999.000000 +58:161.769 Sensors-Accelerometer.AccZ -3368.000000 +58:200.725 Sensors-Accelerometer.AccX -12325.000000 +58:201.271 Sensors-Accelerometer.AccY 9021.000000 +58:201.795 Sensors-Accelerometer.AccZ -3613.000000 +58:240.690 Sensors-Accelerometer.AccX -14315.000000 +58:241.240 Sensors-Accelerometer.AccY 9038.000000 +58:241.763 Sensors-Accelerometer.AccZ -3602.000000 +58:280.690 Sensors-Accelerometer.AccX -13511.000000 +58:281.237 Sensors-Accelerometer.AccY 9148.000000 +58:281.763 Sensors-Accelerometer.AccZ -3740.000000 +58:320.690 Sensors-Accelerometer.AccX -13654.000000 +58:321.236 Sensors-Accelerometer.AccY 8133.000000 +58:321.764 Sensors-Accelerometer.AccZ -3863.000000 +58:360.690 Sensors-Accelerometer.AccX -13694.000000 +58:361.238 Sensors-Accelerometer.AccY 7578.000000 +58:361.760 Sensors-Accelerometer.AccZ -2060.000000 +58:400.725 Sensors-Accelerometer.AccX -13355.000000 +58:401.273 Sensors-Accelerometer.AccY 7768.000000 +58:401.793 Sensors-Accelerometer.AccZ -2871.000000 +58:440.690 Sensors-Accelerometer.AccX -12974.000000 +58:441.238 Sensors-Accelerometer.AccY 8874.000000 +58:441.757 Sensors-Accelerometer.AccZ -3501.000000 +58:480.690 Sensors-Accelerometer.AccX -13650.000000 +58:481.230 Sensors-Accelerometer.AccY 9055.000000 +58:481.755 Sensors-Accelerometer.AccZ -2970.000000 +58:520.690 Sensors-Accelerometer.AccX -13243.000000 +58:521.239 Sensors-Accelerometer.AccY 7752.000000 +58:521.762 Sensors-Accelerometer.AccZ -2920.000000 +58:560.690 Sensors-Accelerometer.AccX -13205.000000 +58:561.236 Sensors-Accelerometer.AccY 8448.000000 +58:561.746 Sensors-Accelerometer.AccZ -3433.000000 +58:600.725 Sensors-Accelerometer.AccX -13349.000000 +58:601.272 Sensors-Accelerometer.AccY 8444.000000 +58:601.791 Sensors-Accelerometer.AccZ -4243.000000 +58:613.643 Buttons-Center 0x1 +58:640.690 Sensors-Accelerometer.AccX -12497.000000 +58:641.235 Sensors-Accelerometer.AccY 9198.000000 +58:641.760 Sensors-Accelerometer.AccZ -4966.000000 +58:680.690 Sensors-Accelerometer.AccX -13353.000000 +58:681.234 Sensors-Accelerometer.AccY 9863.000000 +58:681.761 Sensors-Accelerometer.AccZ -6210.000000 +58:720.690 Sensors-Accelerometer.AccX -13796.000000 +58:721.232 Sensors-Accelerometer.AccY 7448.000000 +58:721.755 Sensors-Accelerometer.AccZ -2237.000000 +58:730.666 Buttons-Center 0x0 +58:760.690 Sensors-Accelerometer.AccX -14315.000000 +58:761.244 Sensors-Accelerometer.AccY 7644.000000 +58:761.770 Sensors-Accelerometer.AccZ -2205.000000 +58:800.684 Sensors-Magnetometer.MagX 354.000000 +58:801.172 Sensors-Magnetometer.MagY -157.000000 +58:801.666 Sensors-Magnetometer.MagZ 570.000000 +58:802.197 Sensors-Accelerometer.AccX -12958.000000 +58:802.748 Sensors-Accelerometer.AccY 7861.000000 +58:803.280 Sensors-Accelerometer.AccZ -2286.000000 +58:840.690 Sensors-Accelerometer.AccX -12615.000000 +58:841.243 Sensors-Accelerometer.AccY 8550.000000 +58:841.768 Sensors-Accelerometer.AccZ -2614.000000 +58:880.690 Sensors-Accelerometer.AccX -13301.000000 +58:881.235 Sensors-Accelerometer.AccY 8471.000000 +58:881.756 Sensors-Accelerometer.AccZ -3285.000000 +58:900.683 Sensors-Magnetometer.MagX 348.000000 +58:901.171 Sensors-Magnetometer.MagY -164.000000 +58:901.655 Sensors-Magnetometer.MagZ 582.000000 +58:920.690 Sensors-Accelerometer.AccX -13229.000000 +58:921.239 Sensors-Accelerometer.AccY 8007.000000 +58:921.764 Sensors-Accelerometer.AccZ -2829.000000 +58:945.285 Buttons-Center 0x1 +58:960.690 Sensors-Accelerometer.AccX -13253.000000 +58:961.240 Sensors-Accelerometer.AccY 7560.000000 +58:961.760 Sensors-Accelerometer.AccZ -2124.000000 +58:963.782 Buttons-Right 0x1 +59:000.725 Sensors-Accelerometer.AccX -11858.000000 +59:001.269 Sensors-Accelerometer.AccY 10929.000000 +59:001.810 Sensors-Accelerometer.AccZ -7249.000000 +59:040.690 Sensors-Accelerometer.AccX -13336.000000 +59:041.234 Sensors-Accelerometer.AccY 8949.000000 +59:041.756 Sensors-Accelerometer.AccZ -3904.000000 +59:080.690 Sensors-Accelerometer.AccX -13967.000000 +59:081.240 Sensors-Accelerometer.AccY 8426.000000 +59:081.757 Sensors-Accelerometer.AccZ -2036.000000 +59:120.690 Sensors-Accelerometer.AccX -14209.000000 +59:121.237 Sensors-Accelerometer.AccY 8165.000000 +59:121.762 Sensors-Accelerometer.AccZ -2703.000000 +59:149.388 Buttons-Right 0x0 +59:153.379 Buttons-Center 0x0 +59:160.690 Sensors-Accelerometer.AccX -13766.000000 +59:161.234 Sensors-Accelerometer.AccY 7943.000000 +59:161.761 Sensors-Accelerometer.AccZ -2642.000000 +59:200.725 Sensors-Accelerometer.AccX -12981.000000 +59:201.270 Sensors-Accelerometer.AccY 8063.000000 +59:201.792 Sensors-Accelerometer.AccZ -2274.000000 +59:240.690 Sensors-Accelerometer.AccX -12767.000000 +59:241.240 Sensors-Accelerometer.AccY 7905.000000 +59:241.764 Sensors-Accelerometer.AccZ -1838.000000 +59:280.690 Sensors-Accelerometer.AccX -13584.000000 +59:281.229 Sensors-Accelerometer.AccY 8192.000000 +59:281.734 Sensors-Accelerometer.AccZ -3567.000000 +59:320.690 Sensors-Accelerometer.AccX -14358.000000 +59:321.237 Sensors-Accelerometer.AccY 8882.000000 +59:321.760 Sensors-Accelerometer.AccZ -2578.000000 +59:360.690 Sensors-Accelerometer.AccX -13919.000000 +59:361.243 Sensors-Accelerometer.AccY 8354.000000 +59:361.766 Sensors-Accelerometer.AccZ -2288.000000 +59:400.725 Sensors-Accelerometer.AccX -14959.000000 +59:401.273 Sensors-Accelerometer.AccY 9429.000000 +59:401.794 Sensors-Accelerometer.AccZ -3248.000000 +59:440.690 Sensors-Accelerometer.AccX -12258.000000 +59:441.234 Sensors-Accelerometer.AccY 7454.000000 +59:441.761 Sensors-Accelerometer.AccZ -326.000000 +59:450.683 Sensors-Magnetometer.MagX 408.000000 +59:451.175 Sensors-Magnetometer.MagY -182.000000 +59:451.668 Sensors-Magnetometer.MagZ 520.000000 +59:480.690 Sensors-Accelerometer.AccX -12885.000000 +59:481.234 Sensors-Accelerometer.AccY 7849.000000 +59:481.759 Sensors-Accelerometer.AccZ -712.000000 +59:520.690 Sensors-Accelerometer.AccX -13657.000000 +59:521.233 Sensors-Accelerometer.AccY 7972.000000 +59:521.752 Sensors-Accelerometer.AccZ -1595.000000 +59:560.690 Sensors-Accelerometer.AccX -13118.000000 +59:561.234 Sensors-Accelerometer.AccY 6717.000000 +59:561.755 Sensors-Accelerometer.AccZ 1966.000000 +59:600.725 Sensors-Accelerometer.AccX -13176.000000 +59:601.268 Sensors-Accelerometer.AccY 9742.000000 +59:601.791 Sensors-Accelerometer.AccZ -3072.000000 +59:640.690 Sensors-Accelerometer.AccX -13041.000000 +59:641.240 Sensors-Accelerometer.AccY 8602.000000 +59:641.757 Sensors-Accelerometer.AccZ -1071.000000 +59:680.690 Sensors-Accelerometer.AccX -14305.000000 +59:681.236 Sensors-Accelerometer.AccY 7937.000000 +59:681.760 Sensors-Accelerometer.AccZ -703.000000 +59:720.690 Sensors-Accelerometer.AccX -14722.000000 +59:721.237 Sensors-Accelerometer.AccY 7977.000000 +59:721.762 Sensors-Accelerometer.AccZ -492.000000 +59:760.690 Sensors-Accelerometer.AccX -14628.000000 +59:761.234 Sensors-Accelerometer.AccY 7665.000000 +59:761.761 Sensors-Accelerometer.AccZ -1599.000000 +59:800.725 Sensors-Accelerometer.AccX -13769.000000 +59:801.272 Sensors-Accelerometer.AccY 8278.000000 +59:801.803 Sensors-Accelerometer.AccZ -1252.000000 +59:821.970 Buttons-Up 0x1 +59:840.690 Sensors-Accelerometer.AccX -14417.000000 +59:841.238 Sensors-Accelerometer.AccY 8783.000000 +59:841.764 Sensors-Accelerometer.AccZ -3574.000000 +59:880.690 Sensors-Accelerometer.AccX -14014.000000 +59:881.240 Sensors-Accelerometer.AccY 7368.000000 +59:881.762 Sensors-Accelerometer.AccZ -1245.000000 +59:920.690 Sensors-Accelerometer.AccX -13830.000000 +59:921.237 Sensors-Accelerometer.AccY 7737.000000 +59:921.762 Sensors-Accelerometer.AccZ 204.000000 +59:948.648 Buttons-Up 0x0 +59:960.690 Sensors-Accelerometer.AccX -12636.000000 +59:961.238 Sensors-Accelerometer.AccY 8975.000000 +59:961.768 Sensors-Accelerometer.AccZ -1724.000000 +60:000.725 Sensors-Accelerometer.AccX -13179.000000 +60:001.272 Sensors-Accelerometer.AccY 11343.000000 +60:001.822 Sensors-Accelerometer.AccZ -3026.000000 +60:040.690 Sensors-Accelerometer.AccX -14510.000000 +60:041.238 Sensors-Accelerometer.AccY 5235.000000 +60:041.767 Sensors-Accelerometer.AccZ -1848.000000 +60:050.684 Sensors-Magnetometer.MagX 471.000000 +60:051.183 Sensors-Magnetometer.MagY -134.000000 +60:051.675 Sensors-Magnetometer.MagZ 442.000000 +60:080.690 Sensors-Accelerometer.AccX -13512.000000 +60:081.232 Sensors-Accelerometer.AccY 1278.000000 +60:081.753 Sensors-Accelerometer.AccZ 6164.000000 +60:120.690 Sensors-Accelerometer.AccX -18259.000000 +60:121.241 Sensors-Accelerometer.AccY 1846.000000 +60:121.761 Sensors-Accelerometer.AccZ 5559.000000 +60:160.690 Sensors-Accelerometer.AccX -14669.000000 +60:161.237 Sensors-Accelerometer.AccY 5199.000000 +60:161.763 Sensors-Accelerometer.AccZ 2856.000000 +60:200.725 Sensors-Accelerometer.AccX -14304.000000 +60:201.269 Sensors-Accelerometer.AccY 6861.000000 +60:201.790 Sensors-Accelerometer.AccZ -364.000000 +60:240.690 Sensors-Accelerometer.AccX -13655.000000 +60:241.237 Sensors-Accelerometer.AccY 7107.000000 +60:241.764 Sensors-Accelerometer.AccZ -1219.000000 +60:280.690 Sensors-Accelerometer.AccX -14568.000000 +60:281.235 Sensors-Accelerometer.AccY 5788.000000 +60:281.759 Sensors-Accelerometer.AccZ -287.000000 +60:320.690 Sensors-Accelerometer.AccX -14944.000000 +60:321.230 Sensors-Accelerometer.AccY 5090.000000 +60:321.752 Sensors-Accelerometer.AccZ 1726.000000 +60:360.690 Sensors-Accelerometer.AccX -15047.000000 +60:361.246 Sensors-Accelerometer.AccY 5850.000000 +60:361.768 Sensors-Accelerometer.AccZ 1276.000000 +60:400.725 Sensors-Accelerometer.AccX -14339.000000 +60:401.275 Sensors-Accelerometer.AccY 6210.000000 +60:401.798 Sensors-Accelerometer.AccZ 169.000000 +60:440.690 Sensors-Accelerometer.AccX -15027.000000 +60:441.243 Sensors-Accelerometer.AccY 5570.000000 +60:441.767 Sensors-Accelerometer.AccZ 1294.000000 +60:480.690 Sensors-Accelerometer.AccX -15117.000000 +60:481.236 Sensors-Accelerometer.AccY 5689.000000 +60:481.756 Sensors-Accelerometer.AccZ 991.000000 +60:520.690 Sensors-Accelerometer.AccX -14051.000000 +60:521.238 Sensors-Accelerometer.AccY 6498.000000 +60:521.760 Sensors-Accelerometer.AccZ 630.000000 +60:560.690 Sensors-Accelerometer.AccX -15292.000000 +60:561.241 Sensors-Accelerometer.AccY 5769.000000 +60:561.760 Sensors-Accelerometer.AccZ 385.000000 +60:600.725 Sensors-Accelerometer.AccX -13832.000000 +60:601.270 Sensors-Accelerometer.AccY 6637.000000 +60:601.794 Sensors-Accelerometer.AccZ 162.000000 +60:640.690 Sensors-Accelerometer.AccX -14531.000000 +60:641.238 Sensors-Accelerometer.AccY 6320.000000 +60:641.759 Sensors-Accelerometer.AccZ -283.000000 +60:680.690 Sensors-Accelerometer.AccX -14098.000000 +60:681.235 Sensors-Accelerometer.AccY 6098.000000 +60:681.757 Sensors-Accelerometer.AccZ 237.000000 +60:720.690 Sensors-Accelerometer.AccX -14751.000000 +60:721.239 Sensors-Accelerometer.AccY 6310.000000 +60:721.764 Sensors-Accelerometer.AccZ -19.000000 +60:760.690 Sensors-Accelerometer.AccX -15104.000000 +60:761.231 Sensors-Accelerometer.AccY 6054.000000 +60:761.759 Sensors-Accelerometer.AccZ 263.000000 +60:800.725 Sensors-Accelerometer.AccX -14683.000000 +60:801.271 Sensors-Accelerometer.AccY 5841.000000 +60:801.788 Sensors-Accelerometer.AccZ 342.000000 +60:840.690 Sensors-Accelerometer.AccX -14834.000000 +60:841.237 Sensors-Accelerometer.AccY 6169.000000 +60:841.757 Sensors-Accelerometer.AccZ -14.000000 +60:880.690 Sensors-Accelerometer.AccX -14131.000000 +60:881.240 Sensors-Accelerometer.AccY 5763.000000 +60:881.765 Sensors-Accelerometer.AccZ -393.000000 +60:920.690 Sensors-Accelerometer.AccX -15218.000000 +60:921.238 Sensors-Accelerometer.AccY 5839.000000 +60:921.767 Sensors-Accelerometer.AccZ -444.000000 +60:960.690 Sensors-Accelerometer.AccX -14400.000000 +60:961.227 Sensors-Accelerometer.AccY 5709.000000 +60:961.749 Sensors-Accelerometer.AccZ 544.000000 +61:000.725 Sensors-Accelerometer.AccX -14568.000000 +61:001.269 Sensors-Accelerometer.AccY 6087.000000 +61:001.792 Sensors-Accelerometer.AccZ -337.000000 +61:040.690 Sensors-Accelerometer.AccX -15078.000000 +61:041.240 Sensors-Accelerometer.AccY 6088.000000 +61:041.758 Sensors-Accelerometer.AccZ 502.000000 +61:080.690 Sensors-Accelerometer.AccX -14855.000000 +61:081.240 Sensors-Accelerometer.AccY 5873.000000 +61:081.765 Sensors-Accelerometer.AccZ 77.000000 +61:120.690 Sensors-Accelerometer.AccX -14231.000000 +61:121.242 Sensors-Accelerometer.AccY 5865.000000 +61:121.768 Sensors-Accelerometer.AccZ 559.000000 +61:160.690 Sensors-Accelerometer.AccX -14598.000000 +61:161.241 Sensors-Accelerometer.AccY 5815.000000 +61:161.769 Sensors-Accelerometer.AccZ 579.000000 +61:200.725 Sensors-Accelerometer.AccX -14048.000000 +61:201.270 Sensors-Accelerometer.AccY 5886.000000 +61:201.794 Sensors-Accelerometer.AccZ 603.000000 +61:240.690 Sensors-Accelerometer.AccX -15443.000000 +61:241.239 Sensors-Accelerometer.AccY 5231.000000 +61:241.770 Sensors-Accelerometer.AccZ 869.000000 +61:260.769 Buttons-Center 0x1 +61:280.690 Sensors-Accelerometer.AccX -14682.000000 +61:281.235 Sensors-Accelerometer.AccY 5508.000000 +61:281.755 Sensors-Accelerometer.AccZ 85.000000 +61:300.683 Sensors-Magnetometer.MagX 464.000000 +61:301.172 Sensors-Magnetometer.MagY -83.000000 +61:301.642 Sensors-Magnetometer.MagZ 447.000000 +61:320.690 Sensors-Accelerometer.AccX -14120.000000 +61:321.235 Sensors-Accelerometer.AccY 6857.000000 +61:321.760 Sensors-Accelerometer.AccZ -63.000000 +61:350.683 Sensors-Magnetometer.MagX 478.000000 +61:351.183 Sensors-Magnetometer.MagY -106.000000 +61:351.674 Sensors-Magnetometer.MagZ 438.000000 +61:360.690 Sensors-Accelerometer.AccX -15833.000000 +61:361.246 Sensors-Accelerometer.AccY 5760.000000 +61:361.761 Sensors-Accelerometer.AccZ 2205.000000 +61:394.778 Buttons-Center 0x0 +61:400.725 Sensors-Accelerometer.AccX -14674.000000 +61:401.279 Sensors-Accelerometer.AccY 6228.000000 +61:401.804 Sensors-Accelerometer.AccZ 901.000000 +61:440.690 Sensors-Accelerometer.AccX -13518.000000 +61:441.227 Sensors-Accelerometer.AccY 5364.000000 +61:441.743 Sensors-Accelerometer.AccZ 1169.000000 +61:480.690 Sensors-Accelerometer.AccX -13804.000000 +61:481.233 Sensors-Accelerometer.AccY 3838.000000 +61:481.754 Sensors-Accelerometer.AccZ 4095.000000 +61:520.690 Sensors-Accelerometer.AccX -15221.000000 +61:521.236 Sensors-Accelerometer.AccY 4929.000000 +61:521.756 Sensors-Accelerometer.AccZ 552.000000 +61:560.690 Sensors-Accelerometer.AccX -13790.000000 +61:561.239 Sensors-Accelerometer.AccY 4731.000000 +61:561.764 Sensors-Accelerometer.AccZ 2548.000000 +61:600.684 Sensors-Magnetometer.MagX 501.000000 +61:601.177 Sensors-Magnetometer.MagY -94.000000 +61:601.647 Sensors-Magnetometer.MagZ 362.000000 +61:602.173 Sensors-Accelerometer.AccX -14773.000000 +61:602.719 Sensors-Accelerometer.AccY 5659.000000 +61:603.245 Sensors-Accelerometer.AccZ 1772.000000 +61:640.690 Sensors-Accelerometer.AccX -15665.000000 +61:641.240 Sensors-Accelerometer.AccY 4816.000000 +61:641.757 Sensors-Accelerometer.AccZ 3024.000000 +61:680.690 Sensors-Accelerometer.AccX -15049.000000 +61:681.238 Sensors-Accelerometer.AccY 5091.000000 +61:681.765 Sensors-Accelerometer.AccZ 3952.000000 +61:720.690 Sensors-Accelerometer.AccX -14567.000000 +61:721.241 Sensors-Accelerometer.AccY 4350.000000 +61:721.764 Sensors-Accelerometer.AccZ 3450.000000 +61:760.690 Sensors-Accelerometer.AccX -14636.000000 +61:761.237 Sensors-Accelerometer.AccY 5543.000000 +61:761.759 Sensors-Accelerometer.AccZ 0.000000 +61:800.725 Sensors-Accelerometer.AccX -13585.000000 +61:801.269 Sensors-Accelerometer.AccY 5452.000000 +61:801.790 Sensors-Accelerometer.AccZ 1237.000000 +61:834.892 Buttons-Down 0x1 +61:840.690 Sensors-Accelerometer.AccX -15311.000000 +61:841.241 Sensors-Accelerometer.AccY 5448.000000 +61:841.758 Sensors-Accelerometer.AccZ 3178.000000 +61:842.456 Buttons-Center 0x1 +61:880.690 Sensors-Accelerometer.AccX -14910.000000 +61:881.238 Sensors-Accelerometer.AccY 4874.000000 +61:881.762 Sensors-Accelerometer.AccZ 2116.000000 +61:920.690 Sensors-Accelerometer.AccX -15526.000000 +61:921.239 Sensors-Accelerometer.AccY 4776.000000 +61:921.760 Sensors-Accelerometer.AccZ 3978.000000 +61:960.690 Sensors-Accelerometer.AccX -14297.000000 +61:961.239 Sensors-Accelerometer.AccY 5436.000000 +61:961.762 Sensors-Accelerometer.AccZ 2222.000000 +62:000.725 Sensors-Accelerometer.AccX -14771.000000 +62:001.272 Sensors-Accelerometer.AccY 5791.000000 +62:001.797 Sensors-Accelerometer.AccZ 2187.000000 +62:016.921 Buttons-Center 0x0 +62:021.656 Buttons-Down 0x0 +62:040.690 Sensors-Accelerometer.AccX -13961.000000 +62:041.237 Sensors-Accelerometer.AccY 5999.000000 +62:041.769 Sensors-Accelerometer.AccZ 1579.000000 +62:080.690 Sensors-Accelerometer.AccX -14363.000000 +62:081.237 Sensors-Accelerometer.AccY 5550.000000 +62:081.761 Sensors-Accelerometer.AccZ 4339.000000 +62:120.690 Sensors-Accelerometer.AccX -14915.000000 +62:121.241 Sensors-Accelerometer.AccY 4783.000000 +62:121.768 Sensors-Accelerometer.AccZ 3509.000000 +62:150.684 Sensors-Magnetometer.MagX 524.000000 +62:151.181 Sensors-Magnetometer.MagY -99.000000 +62:151.655 Sensors-Magnetometer.MagZ 311.000000 +62:160.690 Sensors-Accelerometer.AccX -15569.000000 +62:161.236 Sensors-Accelerometer.AccY 4470.000000 +62:161.759 Sensors-Accelerometer.AccZ 2987.000000 +62:200.684 Sensors-Magnetometer.MagX 541.000000 +62:201.176 Sensors-Magnetometer.MagY -78.000000 +62:201.647 Sensors-Magnetometer.MagZ 254.000000 +62:202.177 Sensors-Accelerometer.AccX -15488.000000 +62:202.720 Sensors-Accelerometer.AccY 4164.000000 +62:203.239 Sensors-Accelerometer.AccZ 4191.000000 +62:240.690 Sensors-Accelerometer.AccX -14166.000000 +62:241.240 Sensors-Accelerometer.AccY 4882.000000 +62:241.764 Sensors-Accelerometer.AccZ 5119.000000 +62:250.684 Sensors-Magnetometer.MagX 563.000000 +62:251.184 Sensors-Magnetometer.MagY -67.000000 +62:251.656 Sensors-Magnetometer.MagZ 191.000000 +62:280.690 Sensors-Accelerometer.AccX -14204.000000 +62:281.237 Sensors-Accelerometer.AccY 4026.000000 +62:281.758 Sensors-Accelerometer.AccZ 5959.000000 +62:300.684 Sensors-Magnetometer.MagX 566.000000 +62:301.179 Sensors-Magnetometer.MagY -55.000000 +62:301.648 Sensors-Magnetometer.MagZ 136.000000 +62:320.690 Sensors-Accelerometer.AccX -13940.000000 +62:321.231 Sensors-Accelerometer.AccY 3403.000000 +62:321.751 Sensors-Accelerometer.AccZ 8038.000000 +62:350.684 Sensors-Magnetometer.MagX 568.000000 +62:351.177 Sensors-Magnetometer.MagY -72.000000 +62:351.646 Sensors-Magnetometer.MagZ 85.000000 +62:360.690 Sensors-Accelerometer.AccX -12232.000000 +62:361.238 Sensors-Accelerometer.AccY 2578.000000 +62:361.761 Sensors-Accelerometer.AccZ 9776.000000 +62:400.725 Sensors-Accelerometer.AccX -9750.000000 +62:401.251 Sensors-Accelerometer.AccY 2577.000000 +62:401.768 Sensors-Accelerometer.AccZ 10082.000000 +62:440.690 Sensors-Accelerometer.AccX -10380.000000 +62:441.240 Sensors-Accelerometer.AccY 4445.000000 +62:441.760 Sensors-Accelerometer.AccZ 9585.000000 +62:450.684 Sensors-Magnetometer.MagX 553.000000 +62:451.178 Sensors-Magnetometer.MagY -125.000000 +62:451.672 Sensors-Magnetometer.MagZ 71.000000 +62:480.690 Sensors-Accelerometer.AccX -12321.000000 +62:481.230 Sensors-Accelerometer.AccY 4434.000000 +62:481.749 Sensors-Accelerometer.AccZ 8543.000000 +62:520.690 Sensors-Accelerometer.AccX -11681.000000 +62:521.237 Sensors-Accelerometer.AccY 5186.000000 +62:521.758 Sensors-Accelerometer.AccZ 8383.000000 +62:550.683 Sensors-Magnetometer.MagX 541.000000 +62:551.175 Sensors-Magnetometer.MagY -189.000000 +62:551.668 Sensors-Magnetometer.MagZ 100.000000 +62:560.690 Sensors-Accelerometer.AccX -12082.000000 +62:561.237 Sensors-Accelerometer.AccY 5362.000000 +62:561.760 Sensors-Accelerometer.AccZ 7784.000000 +62:600.683 Sensors-Magnetometer.MagX 518.000000 +62:601.177 Sensors-Magnetometer.MagY -243.000000 +62:601.672 Sensors-Magnetometer.MagZ 141.000000 +62:602.198 Sensors-Accelerometer.AccX -12104.000000 +62:602.744 Sensors-Accelerometer.AccY 8237.000000 +62:603.266 Sensors-Accelerometer.AccZ 8592.000000 +62:640.690 Sensors-Accelerometer.AccX -10532.000000 +62:641.232 Sensors-Accelerometer.AccY 6572.000000 +62:641.753 Sensors-Accelerometer.AccZ 6176.000000 +62:680.690 Sensors-Accelerometer.AccX -9807.000000 +62:681.220 Sensors-Accelerometer.AccY 6966.000000 +62:681.741 Sensors-Accelerometer.AccZ 7834.000000 +62:720.690 Sensors-Accelerometer.AccX -12467.000000 +62:721.238 Sensors-Accelerometer.AccY 8440.000000 +62:721.755 Sensors-Accelerometer.AccZ 8424.000000 +62:750.683 Sensors-Magnetometer.MagX 482.000000 +62:751.179 Sensors-Magnetometer.MagY -308.000000 +62:751.673 Sensors-Magnetometer.MagZ 213.000000 +62:760.690 Sensors-Accelerometer.AccX -10464.000000 +62:761.236 Sensors-Accelerometer.AccY 9146.000000 +62:761.759 Sensors-Accelerometer.AccZ 4200.000000 +62:800.725 Sensors-Accelerometer.AccX -12880.000000 +62:801.264 Sensors-Accelerometer.AccY 8220.000000 +62:801.786 Sensors-Accelerometer.AccZ 5015.000000 +62:840.690 Sensors-Accelerometer.AccX -12240.000000 +62:841.235 Sensors-Accelerometer.AccY 10840.000000 +62:841.780 Sensors-Accelerometer.AccZ 3017.000000 +62:850.684 Sensors-Magnetometer.MagX 454.000000 +62:851.179 Sensors-Magnetometer.MagY -310.000000 +62:851.677 Sensors-Magnetometer.MagZ 298.000000 +62:880.690 Sensors-Accelerometer.AccX -10920.000000 +62:881.227 Sensors-Accelerometer.AccY 9066.000000 +62:881.750 Sensors-Accelerometer.AccZ 2355.000000 +62:920.690 Sensors-Accelerometer.AccX -13301.000000 +62:921.238 Sensors-Accelerometer.AccY 9267.000000 +62:921.763 Sensors-Accelerometer.AccZ 2147.000000 +62:960.690 Sensors-Accelerometer.AccX -12860.000000 +62:961.234 Sensors-Accelerometer.AccY 9166.000000 +62:961.761 Sensors-Accelerometer.AccZ 2248.000000 +63:000.684 Sensors-Magnetometer.MagX 436.000000 +63:001.171 Sensors-Magnetometer.MagY -282.000000 +63:001.662 Sensors-Magnetometer.MagZ 363.000000 +63:002.191 Sensors-Accelerometer.AccX -14304.000000 +63:002.733 Sensors-Accelerometer.AccY 8987.000000 +63:003.256 Sensors-Accelerometer.AccZ 3019.000000 +63:040.690 Sensors-Accelerometer.AccX -13281.000000 +63:041.233 Sensors-Accelerometer.AccY 9316.000000 +63:041.754 Sensors-Accelerometer.AccZ 2782.000000 +63:080.690 Sensors-Accelerometer.AccX -12579.000000 +63:081.241 Sensors-Accelerometer.AccY 9210.000000 +63:081.763 Sensors-Accelerometer.AccZ 1884.000000 +63:120.690 Sensors-Accelerometer.AccX -13374.000000 +63:121.236 Sensors-Accelerometer.AccY 10704.000000 +63:121.775 Sensors-Accelerometer.AccZ 1105.000000 +63:160.690 Sensors-Accelerometer.AccX -13654.000000 +63:161.237 Sensors-Accelerometer.AccY 10019.000000 +63:161.788 Sensors-Accelerometer.AccZ 1954.000000 +63:200.684 Sensors-Magnetometer.MagX 415.000000 +63:201.177 Sensors-Magnetometer.MagY -282.000000 +63:201.668 Sensors-Magnetometer.MagZ 419.000000 +63:202.201 Sensors-Accelerometer.AccX -12279.000000 +63:202.751 Sensors-Accelerometer.AccY 8445.000000 +63:203.271 Sensors-Accelerometer.AccZ 697.000000 +63:240.690 Sensors-Accelerometer.AccX -12482.000000 +63:241.236 Sensors-Accelerometer.AccY 9663.000000 +63:241.764 Sensors-Accelerometer.AccZ 2264.000000 +63:280.690 Sensors-Accelerometer.AccX -12986.000000 +63:281.235 Sensors-Accelerometer.AccY 9678.000000 +63:281.763 Sensors-Accelerometer.AccZ 892.000000 +63:320.690 Sensors-Accelerometer.AccX -12511.000000 +63:321.243 Sensors-Accelerometer.AccY 9444.000000 +63:321.764 Sensors-Accelerometer.AccZ 2324.000000 +63:360.690 Sensors-Accelerometer.AccX -12983.000000 +63:361.239 Sensors-Accelerometer.AccY 8910.000000 +63:361.764 Sensors-Accelerometer.AccZ 1518.000000 +63:400.725 Sensors-Accelerometer.AccX -12560.000000 +63:401.270 Sensors-Accelerometer.AccY 9535.000000 +63:401.800 Sensors-Accelerometer.AccZ 1598.000000 +63:440.690 Sensors-Accelerometer.AccX -12858.000000 +63:441.234 Sensors-Accelerometer.AccY 9663.000000 +63:441.763 Sensors-Accelerometer.AccZ 1995.000000 +63:480.690 Sensors-Accelerometer.AccX -13488.000000 +63:481.233 Sensors-Accelerometer.AccY 8830.000000 +63:481.761 Sensors-Accelerometer.AccZ 2039.000000 +63:520.690 Sensors-Accelerometer.AccX -13142.000000 +63:521.235 Sensors-Accelerometer.AccY 9239.000000 +63:521.760 Sensors-Accelerometer.AccZ 2466.000000 +63:560.690 Sensors-Accelerometer.AccX -13281.000000 +63:561.237 Sensors-Accelerometer.AccY 8859.000000 +63:561.763 Sensors-Accelerometer.AccZ 2210.000000 +63:600.725 Sensors-Accelerometer.AccX -11078.000000 +63:601.271 Sensors-Accelerometer.AccY 9806.000000 +63:601.796 Sensors-Accelerometer.AccZ 1939.000000 +63:640.690 Sensors-Accelerometer.AccX -12059.000000 +63:641.239 Sensors-Accelerometer.AccY 9031.000000 +63:641.766 Sensors-Accelerometer.AccZ 3668.000000 +63:650.683 Sensors-Magnetometer.MagX 467.000000 +63:651.178 Sensors-Magnetometer.MagY -267.000000 +63:651.675 Sensors-Magnetometer.MagZ 353.000000 +63:680.690 Sensors-Accelerometer.AccX -14150.000000 +63:681.240 Sensors-Accelerometer.AccY 7897.000000 +63:681.767 Sensors-Accelerometer.AccZ 4598.000000 +63:720.690 Sensors-Accelerometer.AccX -13971.000000 +63:721.241 Sensors-Accelerometer.AccY 7332.000000 +63:721.765 Sensors-Accelerometer.AccZ 4330.000000 +63:760.690 Sensors-Accelerometer.AccX -14517.000000 +63:761.237 Sensors-Accelerometer.AccY 5778.000000 +63:761.757 Sensors-Accelerometer.AccZ 2377.000000 +63:800.683 Sensors-Magnetometer.MagX 470.000000 +63:801.181 Sensors-Magnetometer.MagY -190.000000 +63:801.677 Sensors-Magnetometer.MagZ 408.000000 +63:802.207 Sensors-Accelerometer.AccX -13639.000000 +63:802.756 Sensors-Accelerometer.AccY 7314.000000 +63:803.281 Sensors-Accelerometer.AccZ 2530.000000 +63:840.690 Sensors-Accelerometer.AccX -14009.000000 +63:841.236 Sensors-Accelerometer.AccY 8170.000000 +63:841.763 Sensors-Accelerometer.AccZ -179.000000 +63:880.690 Sensors-Accelerometer.AccX -16450.000000 +63:881.234 Sensors-Accelerometer.AccY 6384.000000 +63:881.760 Sensors-Accelerometer.AccZ 1178.000000 +63:920.690 Sensors-Accelerometer.AccX -17227.000000 +63:921.238 Sensors-Accelerometer.AccY 7810.000000 +63:921.764 Sensors-Accelerometer.AccZ 399.000000 +63:950.683 Sensors-Magnetometer.MagX 532.000000 +63:951.176 Sensors-Magnetometer.MagY -106.000000 +63:951.667 Sensors-Magnetometer.MagZ 319.000000 +63:960.690 Sensors-Accelerometer.AccX -16538.000000 +63:961.239 Sensors-Accelerometer.AccY 5910.000000 +63:961.768 Sensors-Accelerometer.AccZ 109.000000 +64:000.684 Sensors-Magnetometer.MagX 577.000000 +64:001.167 Sensors-Magnetometer.MagY -77.000000 +64:001.630 Sensors-Magnetometer.MagZ 210.000000 +64:002.145 Sensors-Accelerometer.AccX -13656.000000 +64:002.683 Sensors-Accelerometer.AccY 4795.000000 +64:003.201 Sensors-Accelerometer.AccZ 4841.000000 +64:040.690 Sensors-Accelerometer.AccX -13430.000000 +64:041.231 Sensors-Accelerometer.AccY 3868.000000 +64:041.747 Sensors-Accelerometer.AccZ 7202.000000 +64:050.684 Sensors-Magnetometer.MagX 584.000000 +64:051.172 Sensors-Magnetometer.MagY -71.000000 +64:051.642 Sensors-Magnetometer.MagZ 142.000000 +64:080.690 Sensors-Accelerometer.AccX -12760.000000 +64:081.232 Sensors-Accelerometer.AccY 4017.000000 +64:081.751 Sensors-Accelerometer.AccZ 7408.000000 +64:120.690 Sensors-Accelerometer.AccX -10723.000000 +64:121.239 Sensors-Accelerometer.AccY 2330.000000 +64:121.756 Sensors-Accelerometer.AccZ 8302.000000 +64:150.684 Sensors-Magnetometer.MagX 591.000000 +64:151.178 Sensors-Magnetometer.MagY -58.000000 +64:151.641 Sensors-Magnetometer.MagZ 66.000000 +64:160.690 Sensors-Accelerometer.AccX -10063.000000 +64:161.241 Sensors-Accelerometer.AccY 3481.000000 +64:161.760 Sensors-Accelerometer.AccZ 9929.000000 +64:200.683 Sensors-Magnetometer.MagX 585.000000 +64:201.175 Sensors-Magnetometer.MagY -6.000000 +64:201.615 Sensors-Magnetometer.MagZ -45.000000 +64:202.116 Sensors-Accelerometer.AccX -8874.000000 +64:202.636 Sensors-Accelerometer.AccY 4638.000000 +64:203.158 Sensors-Accelerometer.AccZ 10480.000000 +64:240.690 Sensors-Accelerometer.AccX -9471.000000 +64:241.213 Sensors-Accelerometer.AccY 2281.000000 +64:241.729 Sensors-Accelerometer.AccZ 11128.000000 +64:250.684 Sensors-Magnetometer.MagX 575.000000 +64:251.179 Sensors-Magnetometer.MagY 71.000000 +64:251.647 Sensors-Magnetometer.MagZ -132.000000 +64:280.690 Sensors-Accelerometer.AccX -11701.000000 +64:281.237 Sensors-Accelerometer.AccY -720.000000 +64:281.726 Sensors-Accelerometer.AccZ 14068.000000 +64:320.690 Sensors-Accelerometer.AccX -10458.000000 +64:321.231 Sensors-Accelerometer.AccY 459.000000 +64:321.721 Sensors-Accelerometer.AccZ 13955.000000 +64:360.690 Sensors-Accelerometer.AccX -10345.000000 +64:361.233 Sensors-Accelerometer.AccY 1076.000000 +64:361.744 Sensors-Accelerometer.AccZ 11286.000000 +64:400.725 Sensors-Accelerometer.AccX -11083.000000 +64:401.268 Sensors-Accelerometer.AccY 1973.000000 +64:401.784 Sensors-Accelerometer.AccZ 11228.000000 +64:440.690 Sensors-Accelerometer.AccX -8103.000000 +64:441.212 Sensors-Accelerometer.AccY 884.000000 +64:441.702 Sensors-Accelerometer.AccZ 14173.000000 +64:450.684 Sensors-Magnetometer.MagX 533.000000 +64:451.171 Sensors-Magnetometer.MagY 75.000000 +64:451.640 Sensors-Magnetometer.MagZ -223.000000 +64:480.690 Sensors-Accelerometer.AccX -6320.000000 +64:481.209 Sensors-Accelerometer.AccY 787.000000 +64:481.703 Sensors-Accelerometer.AccZ 16196.000000 +64:500.684 Sensors-Magnetometer.MagX 495.000000 +64:501.180 Sensors-Magnetometer.MagY 96.000000 +64:501.644 Sensors-Magnetometer.MagZ -318.000000 +64:520.690 Sensors-Accelerometer.AccX -3203.000000 +64:521.210 Sensors-Accelerometer.AccY 205.000000 +64:521.696 Sensors-Accelerometer.AccZ 14814.000000 +64:550.684 Sensors-Magnetometer.MagX 448.000000 +64:551.169 Sensors-Magnetometer.MagY 78.000000 +64:551.637 Sensors-Magnetometer.MagZ -374.000000 +64:560.691 Sensors-Accelerometer.AccX -3308.000000 +64:561.207 Sensors-Accelerometer.AccY 2483.000000 +64:561.727 Sensors-Accelerometer.AccZ 14176.000000 +64:600.684 Sensors-Magnetometer.MagX 401.000000 +64:601.173 Sensors-Magnetometer.MagY 81.000000 +64:601.640 Sensors-Magnetometer.MagZ -440.000000 +64:602.165 Sensors-Accelerometer.AccX 1452.000000 +64:602.682 Sensors-Accelerometer.AccY 2252.000000 +64:603.201 Sensors-Accelerometer.AccZ 14248.000000 +64:640.690 Sensors-Accelerometer.AccX -996.000000 +64:641.182 Sensors-Accelerometer.AccY 2520.000000 +64:641.695 Sensors-Accelerometer.AccZ 14497.000000 +64:680.690 Sensors-Accelerometer.AccX -151.000000 +64:681.183 Sensors-Accelerometer.AccY 1277.000000 +64:681.703 Sensors-Accelerometer.AccZ 15627.000000 +64:700.683 Sensors-Magnetometer.MagX 350.000000 +64:701.178 Sensors-Magnetometer.MagY 59.000000 +64:701.645 Sensors-Magnetometer.MagZ -472.000000 +64:720.690 Sensors-Accelerometer.AccX -455.000000 +64:721.182 Sensors-Accelerometer.AccY 1968.000000 +64:721.695 Sensors-Accelerometer.AccZ 15163.000000 +64:760.690 Sensors-Accelerometer.AccX -3389.000000 +64:761.208 Sensors-Accelerometer.AccY 2647.000000 +64:761.728 Sensors-Accelerometer.AccZ 14467.000000 +64:800.683 Sensors-Magnetometer.MagX 461.000000 +64:801.171 Sensors-Magnetometer.MagY -5.000000 +64:801.608 Sensors-Magnetometer.MagZ -362.000000 +64:802.131 Sensors-Accelerometer.AccX -7288.000000 +64:802.649 Sensors-Accelerometer.AccY 3922.000000 +64:803.167 Sensors-Accelerometer.AccZ 10839.000000 +64:840.690 Sensors-Accelerometer.AccX 1707.000000 +64:841.208 Sensors-Accelerometer.AccY 2292.000000 +64:841.725 Sensors-Accelerometer.AccZ 11339.000000 +64:850.683 Sensors-Magnetometer.MagX 516.000000 +64:851.174 Sensors-Magnetometer.MagY -37.000000 +64:851.640 Sensors-Magnetometer.MagZ -259.000000 +64:880.690 Sensors-Accelerometer.AccX -8125.000000 +64:881.213 Sensors-Accelerometer.AccY 2983.000000 +64:881.731 Sensors-Accelerometer.AccZ 12328.000000 +64:900.683 Sensors-Magnetometer.MagX 584.000000 +64:901.173 Sensors-Magnetometer.MagY -77.000000 +64:901.639 Sensors-Magnetometer.MagZ -97.000000 +64:920.690 Sensors-Accelerometer.AccX -9459.000000 +64:921.217 Sensors-Accelerometer.AccY 6774.000000 +64:921.738 Sensors-Accelerometer.AccZ 6557.000000 +64:950.684 Sensors-Magnetometer.MagX 597.000000 +64:951.178 Sensors-Magnetometer.MagY -101.000000 +64:951.670 Sensors-Magnetometer.MagZ 78.000000 +64:960.690 Sensors-Accelerometer.AccX -10253.000000 +64:961.232 Sensors-Accelerometer.AccY 7133.000000 +64:961.752 Sensors-Accelerometer.AccZ 5414.000000 +65:000.684 Sensors-Magnetometer.MagX 600.000000 +65:001.176 Sensors-Magnetometer.MagY -86.000000 +65:001.645 Sensors-Magnetometer.MagZ 191.000000 +65:002.174 Sensors-Accelerometer.AccX -12981.000000 +65:002.724 Sensors-Accelerometer.AccY 5432.000000 +65:003.243 Sensors-Accelerometer.AccZ 5224.000000 +65:040.690 Sensors-Accelerometer.AccX -18059.000000 +65:041.239 Sensors-Accelerometer.AccY 6879.000000 +65:041.763 Sensors-Accelerometer.AccZ 2578.000000 +65:050.684 Sensors-Magnetometer.MagX 568.000000 +65:051.174 Sensors-Magnetometer.MagY -60.000000 +65:051.641 Sensors-Magnetometer.MagZ 300.000000 +65:080.690 Sensors-Accelerometer.AccX -16768.000000 +65:081.233 Sensors-Accelerometer.AccY 1891.000000 +65:081.756 Sensors-Accelerometer.AccZ 978.000000 +65:100.684 Sensors-Magnetometer.MagX 548.000000 +65:101.177 Sensors-Magnetometer.MagY -16.000000 +65:101.636 Sensors-Magnetometer.MagZ 366.000000 +65:120.690 Sensors-Accelerometer.AccX -19699.000000 +65:121.242 Sensors-Accelerometer.AccY 4100.000000 +65:121.759 Sensors-Accelerometer.AccZ 2799.000000 +65:150.684 Sensors-Magnetometer.MagX 502.000000 +65:151.182 Sensors-Magnetometer.MagY 28.000000 +65:151.649 Sensors-Magnetometer.MagZ 425.000000 +65:160.690 Sensors-Accelerometer.AccX -18121.000000 +65:161.236 Sensors-Accelerometer.AccY 5209.000000 +65:161.761 Sensors-Accelerometer.AccZ -74.000000 +65:200.725 Sensors-Accelerometer.AccX -11497.000000 +65:201.272 Sensors-Accelerometer.AccY 4221.000000 +65:201.791 Sensors-Accelerometer.AccZ -84.000000 +65:240.690 Sensors-Accelerometer.AccX -17099.000000 +65:241.239 Sensors-Accelerometer.AccY 5692.000000 +65:241.764 Sensors-Accelerometer.AccZ -4987.000000 +65:250.684 Sensors-Magnetometer.MagX 455.000000 +65:251.179 Sensors-Magnetometer.MagY 67.000000 +65:251.649 Sensors-Magnetometer.MagZ 513.000000 +65:280.690 Sensors-Accelerometer.AccX -16249.000000 +65:281.236 Sensors-Accelerometer.AccY 2856.000000 +65:281.751 Sensors-Accelerometer.AccZ -1479.000000 +65:300.683 Sensors-Magnetometer.MagX 437.000000 +65:301.175 Sensors-Magnetometer.MagY 118.000000 +65:301.663 Sensors-Magnetometer.MagZ 543.000000 +65:320.690 Sensors-Accelerometer.AccX -15818.000000 +65:321.239 Sensors-Accelerometer.AccY 3517.000000 +65:321.762 Sensors-Accelerometer.AccZ -1969.000000 +65:360.690 Sensors-Accelerometer.AccX -16196.000000 +65:361.233 Sensors-Accelerometer.AccY 5072.000000 +65:361.754 Sensors-Accelerometer.AccZ -6605.000000 +65:400.683 Sensors-Magnetometer.MagX 367.000000 +65:401.184 Sensors-Magnetometer.MagY 155.000000 +65:401.680 Sensors-Magnetometer.MagZ 594.000000 +65:402.208 Sensors-Accelerometer.AccX -16208.000000 +65:402.753 Sensors-Accelerometer.AccY 3258.000000 +65:403.276 Sensors-Accelerometer.AccZ -4618.000000 +65:440.690 Sensors-Accelerometer.AccX -14230.000000 +65:441.239 Sensors-Accelerometer.AccY 3485.000000 +65:441.758 Sensors-Accelerometer.AccZ -5023.000000 +65:480.690 Sensors-Accelerometer.AccX -12105.000000 +65:481.239 Sensors-Accelerometer.AccY 3362.000000 +65:481.753 Sensors-Accelerometer.AccZ -5836.000000 +65:500.683 Sensors-Magnetometer.MagX 296.000000 +65:501.174 Sensors-Magnetometer.MagY 182.000000 +65:501.669 Sensors-Magnetometer.MagZ 664.000000 +65:520.690 Sensors-Accelerometer.AccX -13571.000000 +65:521.240 Sensors-Accelerometer.AccY 5377.000000 +65:521.761 Sensors-Accelerometer.AccZ -7632.000000 +65:550.683 Sensors-Magnetometer.MagX 248.000000 +65:551.168 Sensors-Magnetometer.MagY 248.000000 +65:551.654 Sensors-Magnetometer.MagZ 684.000000 +65:560.690 Sensors-Accelerometer.AccX -12834.000000 +65:561.229 Sensors-Accelerometer.AccY 627.000000 +65:561.723 Sensors-Accelerometer.AccZ -6817.000000 +65:600.683 Sensors-Magnetometer.MagX 170.000000 +65:601.161 Sensors-Magnetometer.MagY 321.000000 +65:601.647 Sensors-Magnetometer.MagZ 699.000000 +65:602.169 Sensors-Accelerometer.AccX -11433.000000 +65:602.709 Sensors-Accelerometer.AccY -1930.000000 +65:603.221 Sensors-Accelerometer.AccZ -9165.000000 +65:640.690 Sensors-Accelerometer.AccX -10916.000000 +65:641.223 Sensors-Accelerometer.AccY -3042.000000 +65:641.735 Sensors-Accelerometer.AccZ -10388.000000 +65:650.683 Sensors-Magnetometer.MagX 118.000000 +65:651.167 Sensors-Magnetometer.MagY 384.000000 +65:651.650 Sensors-Magnetometer.MagZ 698.000000 +65:680.690 Sensors-Accelerometer.AccX -10875.000000 +65:681.232 Sensors-Accelerometer.AccY -5009.000000 +65:681.749 Sensors-Accelerometer.AccZ -10327.000000 +65:720.690 Sensors-Accelerometer.AccX -11665.000000 +65:721.233 Sensors-Accelerometer.AccY -4737.000000 +65:721.751 Sensors-Accelerometer.AccZ -10807.000000 +65:760.690 Sensors-Accelerometer.AccX -12085.000000 +65:761.229 Sensors-Accelerometer.AccY -3883.000000 +65:761.753 Sensors-Accelerometer.AccZ -10467.000000 +65:800.683 Sensors-Magnetometer.MagX 67.000000 +65:801.146 Sensors-Magnetometer.MagY 408.000000 +65:801.633 Sensors-Magnetometer.MagZ 705.000000 +65:802.159 Sensors-Accelerometer.AccX -11587.000000 +65:802.702 Sensors-Accelerometer.AccY -2395.000000 +65:803.223 Sensors-Accelerometer.AccZ -10395.000000 +65:840.690 Sensors-Accelerometer.AccX -10433.000000 +65:841.237 Sensors-Accelerometer.AccY -2057.000000 +65:841.753 Sensors-Accelerometer.AccZ -10552.000000 +65:880.690 Sensors-Accelerometer.AccX -11929.000000 +65:881.234 Sensors-Accelerometer.AccY -1375.000000 +65:881.753 Sensors-Accelerometer.AccZ -10289.000000 +65:920.690 Sensors-Accelerometer.AccX -11996.000000 +65:921.233 Sensors-Accelerometer.AccY -1306.000000 +65:921.746 Sensors-Accelerometer.AccZ -9749.000000 +65:960.690 Sensors-Accelerometer.AccX -10014.000000 +65:961.234 Sensors-Accelerometer.AccY -1080.000000 +65:961.746 Sensors-Accelerometer.AccZ -10133.000000 +66:000.683 Sensors-Magnetometer.MagX 77.000000 +66:001.147 Sensors-Magnetometer.MagY 352.000000 +66:001.631 Sensors-Magnetometer.MagZ 725.000000 +66:002.154 Sensors-Accelerometer.AccX -10405.000000 +66:002.694 Sensors-Accelerometer.AccY -94.000000 +66:003.162 Sensors-Accelerometer.AccZ -10797.000000 +66:040.690 Sensors-Accelerometer.AccX -10441.000000 +66:041.236 Sensors-Accelerometer.AccY -366.000000 +66:041.730 Sensors-Accelerometer.AccZ -10570.000000 +66:080.690 Sensors-Accelerometer.AccX -11098.000000 +66:081.231 Sensors-Accelerometer.AccY 704.000000 +66:081.716 Sensors-Accelerometer.AccZ -10882.000000 +66:100.683 Sensors-Magnetometer.MagX 91.000000 +66:101.149 Sensors-Magnetometer.MagY 286.000000 +66:101.640 Sensors-Magnetometer.MagZ 756.000000 +66:120.690 Sensors-Accelerometer.AccX -11562.000000 +66:121.230 Sensors-Accelerometer.AccY 923.000000 +66:121.722 Sensors-Accelerometer.AccZ -11455.000000 +66:160.690 Sensors-Accelerometer.AccX -11540.000000 +66:161.228 Sensors-Accelerometer.AccY 704.000000 +66:161.714 Sensors-Accelerometer.AccZ -10901.000000 +66:200.725 Sensors-Accelerometer.AccX -10264.000000 +66:201.266 Sensors-Accelerometer.AccY 2283.000000 +66:201.789 Sensors-Accelerometer.AccZ -11496.000000 +66:240.690 Sensors-Accelerometer.AccX -10739.000000 +66:241.232 Sensors-Accelerometer.AccY 2191.000000 +66:241.752 Sensors-Accelerometer.AccZ -11820.000000 +66:250.683 Sensors-Magnetometer.MagX 81.000000 +66:251.148 Sensors-Magnetometer.MagY 247.000000 +66:251.640 Sensors-Magnetometer.MagZ 770.000000 +66:280.690 Sensors-Accelerometer.AccX -10191.000000 +66:281.238 Sensors-Accelerometer.AccY 2805.000000 +66:281.753 Sensors-Accelerometer.AccZ -11578.000000 +66:320.690 Sensors-Accelerometer.AccX -10798.000000 +66:321.234 Sensors-Accelerometer.AccY 2649.000000 +66:321.751 Sensors-Accelerometer.AccZ -11267.000000 +66:360.690 Sensors-Accelerometer.AccX -10237.000000 +66:361.236 Sensors-Accelerometer.AccY 2700.000000 +66:361.755 Sensors-Accelerometer.AccZ -11225.000000 +66:400.725 Sensors-Accelerometer.AccX -9679.000000 +66:401.249 Sensors-Accelerometer.AccY 2044.000000 +66:401.767 Sensors-Accelerometer.AccZ -11085.000000 +66:440.690 Sensors-Accelerometer.AccX -8412.000000 +66:441.206 Sensors-Accelerometer.AccY 1429.000000 +66:441.720 Sensors-Accelerometer.AccZ -11428.000000 +66:450.684 Sensors-Magnetometer.MagX 56.000000 +66:451.146 Sensors-Magnetometer.MagY 341.000000 +66:451.633 Sensors-Magnetometer.MagZ 743.000000 +66:480.690 Sensors-Accelerometer.AccX -9332.000000 +66:481.211 Sensors-Accelerometer.AccY -1553.000000 +66:481.728 Sensors-Accelerometer.AccZ -10518.000000 +66:500.683 Sensors-Magnetometer.MagX 26.000000 +66:501.146 Sensors-Magnetometer.MagY 402.000000 +66:501.636 Sensors-Magnetometer.MagZ 726.000000 +66:520.690 Sensors-Accelerometer.AccX -12233.000000 +66:521.237 Sensors-Accelerometer.AccY -2612.000000 +66:521.755 Sensors-Accelerometer.AccZ -11169.000000 +66:560.690 Sensors-Accelerometer.AccX -11920.000000 +66:561.224 Sensors-Accelerometer.AccY -3513.000000 +66:561.737 Sensors-Accelerometer.AccZ -11780.000000 +66:600.683 Sensors-Magnetometer.MagX 13.000000 +66:601.144 Sensors-Magnetometer.MagY 471.000000 +66:601.637 Sensors-Magnetometer.MagZ 686.000000 +66:602.161 Sensors-Accelerometer.AccX -13166.000000 +66:602.704 Sensors-Accelerometer.AccY -3265.000000 +66:603.223 Sensors-Accelerometer.AccZ -11969.000000 +66:640.690 Sensors-Accelerometer.AccX -11118.000000 +66:641.234 Sensors-Accelerometer.AccY -2953.000000 +66:641.752 Sensors-Accelerometer.AccZ -12129.000000 +66:680.690 Sensors-Accelerometer.AccX -11253.000000 +66:681.236 Sensors-Accelerometer.AccY -2100.000000 +66:681.747 Sensors-Accelerometer.AccZ -10943.000000 +66:720.690 Sensors-Accelerometer.AccX -10260.000000 +66:721.228 Sensors-Accelerometer.AccY -1968.000000 +66:721.741 Sensors-Accelerometer.AccZ -11381.000000 +66:760.690 Sensors-Accelerometer.AccX -10201.000000 +66:761.239 Sensors-Accelerometer.AccY -1235.000000 +66:761.760 Sensors-Accelerometer.AccZ -11576.000000 +66:800.725 Sensors-Accelerometer.AccX -8590.000000 +66:801.246 Sensors-Accelerometer.AccY -1115.000000 +66:801.764 Sensors-Accelerometer.AccZ -11603.000000 +66:880.690 Sensors-Accelerometer.AccX -10675.000000 +66:881.231 Sensors-Accelerometer.AccY -424.000000 +66:881.715 Sensors-Accelerometer.AccZ -10657.000000 +66:900.683 Sensors-Magnetometer.MagX -1.000000 +66:901.116 Sensors-Magnetometer.MagY 415.000000 +66:901.609 Sensors-Magnetometer.MagZ 718.000000 +66:920.690 Sensors-Accelerometer.AccX -9889.000000 +66:921.212 Sensors-Accelerometer.AccY -1292.000000 +66:921.727 Sensors-Accelerometer.AccZ -11772.000000 +66:960.690 Sensors-Accelerometer.AccX -11517.000000 +66:961.237 Sensors-Accelerometer.AccY -2509.000000 +66:961.757 Sensors-Accelerometer.AccZ -11789.000000 +67:000.725 Sensors-Accelerometer.AccX -11348.000000 +67:001.267 Sensors-Accelerometer.AccY -1893.000000 +67:001.787 Sensors-Accelerometer.AccZ -12155.000000 +67:040.690 Sensors-Accelerometer.AccX -9330.000000 +67:041.213 Sensors-Accelerometer.AccY -1474.000000 +67:041.731 Sensors-Accelerometer.AccZ -12143.000000 +67:080.690 Sensors-Accelerometer.AccX -10646.000000 +67:081.235 Sensors-Accelerometer.AccY -1443.000000 +67:081.754 Sensors-Accelerometer.AccZ -11547.000000 +67:120.690 Sensors-Accelerometer.AccX -9139.000000 +67:121.216 Sensors-Accelerometer.AccY -1629.000000 +67:121.735 Sensors-Accelerometer.AccZ -11986.000000 +67:160.690 Sensors-Accelerometer.AccX -9659.000000 +67:161.218 Sensors-Accelerometer.AccY -888.000000 +67:161.714 Sensors-Accelerometer.AccZ -11595.000000 +67:200.683 Sensors-Magnetometer.MagX -66.000000 +67:201.139 Sensors-Magnetometer.MagY 431.000000 +67:201.626 Sensors-Magnetometer.MagZ 722.000000 +67:202.147 Sensors-Accelerometer.AccX -8929.000000 +67:202.667 Sensors-Accelerometer.AccY -1387.000000 +67:203.180 Sensors-Accelerometer.AccZ -12377.000000 +67:240.690 Sensors-Accelerometer.AccX -9944.000000 +67:241.211 Sensors-Accelerometer.AccY -1273.000000 +67:241.728 Sensors-Accelerometer.AccZ -12157.000000 +67:280.690 Sensors-Accelerometer.AccX -7783.000000 +67:281.210 Sensors-Accelerometer.AccY -1527.000000 +67:281.726 Sensors-Accelerometer.AccZ -12835.000000 +67:300.683 Sensors-Magnetometer.MagX -128.000000 +67:301.162 Sensors-Magnetometer.MagY 454.000000 +67:301.655 Sensors-Magnetometer.MagZ 714.000000 +67:360.690 Sensors-Accelerometer.AccX -9438.000000 +67:361.210 Sensors-Accelerometer.AccY -3319.000000 +67:361.728 Sensors-Accelerometer.AccZ -12469.000000 +67:400.683 Sensors-Magnetometer.MagX -185.000000 +67:401.170 Sensors-Magnetometer.MagY 484.000000 +67:401.658 Sensors-Magnetometer.MagZ 704.000000 +67:402.180 Sensors-Accelerometer.AccX -7849.000000 +67:402.703 Sensors-Accelerometer.AccY -3365.000000 +67:403.219 Sensors-Accelerometer.AccZ -13253.000000 +67:440.690 Sensors-Accelerometer.AccX -6751.000000 +67:441.210 Sensors-Accelerometer.AccY -3757.000000 +67:441.732 Sensors-Accelerometer.AccZ -13185.000000 +67:480.690 Sensors-Accelerometer.AccX -7165.000000 +67:481.217 Sensors-Accelerometer.AccY -4477.000000 +67:481.741 Sensors-Accelerometer.AccZ -12858.000000 +67:520.690 Sensors-Accelerometer.AccX -7242.000000 +67:521.206 Sensors-Accelerometer.AccY -5330.000000 +67:521.723 Sensors-Accelerometer.AccZ -12929.000000 +67:550.683 Sensors-Magnetometer.MagX -254.000000 +67:551.176 Sensors-Magnetometer.MagY 522.000000 +67:551.670 Sensors-Magnetometer.MagZ 671.000000 +67:560.690 Sensors-Accelerometer.AccX -7015.000000 +67:561.213 Sensors-Accelerometer.AccY -5565.000000 +67:561.735 Sensors-Accelerometer.AccZ -13186.000000 +67:600.725 Sensors-Accelerometer.AccX -5555.000000 +67:601.245 Sensors-Accelerometer.AccY -6304.000000 +67:601.758 Sensors-Accelerometer.AccZ -13493.000000 +67:640.690 Sensors-Accelerometer.AccX -5883.000000 +67:641.212 Sensors-Accelerometer.AccY -6455.000000 +67:641.736 Sensors-Accelerometer.AccZ -13082.000000 +67:680.690 Sensors-Accelerometer.AccX -5484.000000 +67:681.209 Sensors-Accelerometer.AccY -6795.000000 +67:681.730 Sensors-Accelerometer.AccZ -13161.000000 +67:700.683 Sensors-Magnetometer.MagX -308.000000 +67:701.174 Sensors-Magnetometer.MagY 541.000000 +67:701.663 Sensors-Magnetometer.MagZ 661.000000 +67:760.690 Sensors-Accelerometer.AccX -4363.000000 +67:761.210 Sensors-Accelerometer.AccY -6347.000000 +67:761.737 Sensors-Accelerometer.AccZ -13034.000000 +67:800.725 Sensors-Accelerometer.AccX -5549.000000 +67:801.248 Sensors-Accelerometer.AccY -6693.000000 +67:801.770 Sensors-Accelerometer.AccZ -12851.000000 +67:840.690 Sensors-Accelerometer.AccX -5339.000000 +67:841.209 Sensors-Accelerometer.AccY -6630.000000 +67:841.727 Sensors-Accelerometer.AccZ -12849.000000 +67:880.690 Sensors-Accelerometer.AccX -4312.000000 +67:881.209 Sensors-Accelerometer.AccY -6224.000000 +67:881.727 Sensors-Accelerometer.AccZ -13154.000000 +67:920.690 Sensors-Accelerometer.AccX -4920.000000 +67:921.207 Sensors-Accelerometer.AccY -6813.000000 +67:921.727 Sensors-Accelerometer.AccZ -13049.000000 +67:960.690 Sensors-Accelerometer.AccX -4630.000000 +67:961.213 Sensors-Accelerometer.AccY -6595.000000 +67:961.736 Sensors-Accelerometer.AccZ -13106.000000 +68:040.690 Sensors-Accelerometer.AccX -4671.000000 +68:041.213 Sensors-Accelerometer.AccY -6691.000000 +68:041.737 Sensors-Accelerometer.AccZ -13321.000000 +68:080.690 Sensors-Accelerometer.AccX -4750.000000 +68:081.214 Sensors-Accelerometer.AccY -6359.000000 +68:081.739 Sensors-Accelerometer.AccZ -13296.000000 +68:120.690 Sensors-Accelerometer.AccX -4450.000000 +68:121.209 Sensors-Accelerometer.AccY -6392.000000 +68:121.731 Sensors-Accelerometer.AccZ -13452.000000 +68:160.690 Sensors-Accelerometer.AccX -4775.000000 +68:161.208 Sensors-Accelerometer.AccY -6359.000000 +68:161.730 Sensors-Accelerometer.AccZ -13277.000000 +68:200.725 Sensors-Accelerometer.AccX -4429.000000 +68:201.241 Sensors-Accelerometer.AccY -6603.000000 +68:201.760 Sensors-Accelerometer.AccZ -13320.000000 +68:240.690 Sensors-Accelerometer.AccX -4517.000000 +68:241.207 Sensors-Accelerometer.AccY -6703.000000 +68:241.733 Sensors-Accelerometer.AccZ -13013.000000 +68:280.690 Sensors-Accelerometer.AccX -4170.000000 +68:281.207 Sensors-Accelerometer.AccY -6754.000000 +68:281.723 Sensors-Accelerometer.AccZ -13248.000000 +68:320.690 Sensors-Accelerometer.AccX -4429.000000 +68:321.209 Sensors-Accelerometer.AccY -6741.000000 +68:321.727 Sensors-Accelerometer.AccZ -13285.000000 +68:360.690 Sensors-Accelerometer.AccX -4685.000000 +68:361.214 Sensors-Accelerometer.AccY -6894.000000 +68:361.734 Sensors-Accelerometer.AccZ -13311.000000 +68:400.725 Sensors-Accelerometer.AccX -4118.000000 +68:401.245 Sensors-Accelerometer.AccY -6514.000000 +68:401.769 Sensors-Accelerometer.AccZ -13482.000000 +68:480.690 Sensors-Accelerometer.AccX -4376.000000 +68:481.207 Sensors-Accelerometer.AccY -6564.000000 +68:481.721 Sensors-Accelerometer.AccZ -13372.000000 +68:550.683 Sensors-Magnetometer.MagX -361.000000 +68:551.174 Sensors-Magnetometer.MagY 506.000000 +68:551.667 Sensors-Magnetometer.MagZ 681.000000 +68:560.691 Sensors-Accelerometer.AccX -4318.000000 +68:561.214 Sensors-Accelerometer.AccY -6802.000000 +68:561.731 Sensors-Accelerometer.AccZ -13334.000000 +68:600.725 Sensors-Accelerometer.AccX -4112.000000 +68:601.241 Sensors-Accelerometer.AccY -6599.000000 +68:601.766 Sensors-Accelerometer.AccZ -13272.000000 +68:680.690 Sensors-Accelerometer.AccX -4250.000000 +68:681.207 Sensors-Accelerometer.AccY -6451.000000 +68:681.733 Sensors-Accelerometer.AccZ -13397.000000 +68:700.683 Sensors-Magnetometer.MagX -344.000000 +68:701.174 Sensors-Magnetometer.MagY 491.000000 +68:701.675 Sensors-Magnetometer.MagZ 690.000000 +68:720.690 Sensors-Accelerometer.AccX -4917.000000 +68:721.210 Sensors-Accelerometer.AccY -6331.000000 +68:721.735 Sensors-Accelerometer.AccZ -13886.000000 +68:760.690 Sensors-Accelerometer.AccX -4979.000000 +68:761.220 Sensors-Accelerometer.AccY -6167.000000 +68:761.745 Sensors-Accelerometer.AccZ -13344.000000 +68:800.725 Sensors-Accelerometer.AccX -4467.000000 +68:801.246 Sensors-Accelerometer.AccY -5404.000000 +68:801.766 Sensors-Accelerometer.AccZ -13572.000000 +68:840.690 Sensors-Accelerometer.AccX -4544.000000 +68:841.203 Sensors-Accelerometer.AccY -5983.000000 +68:841.725 Sensors-Accelerometer.AccZ -13094.000000 +68:880.690 Sensors-Accelerometer.AccX -4854.000000 +68:881.209 Sensors-Accelerometer.AccY -5998.000000 +68:881.729 Sensors-Accelerometer.AccZ -13520.000000 +68:920.690 Sensors-Accelerometer.AccX -4875.000000 +68:921.213 Sensors-Accelerometer.AccY -6133.000000 +68:921.738 Sensors-Accelerometer.AccZ -13272.000000 +69:000.725 Sensors-Accelerometer.AccX -4108.000000 +69:001.243 Sensors-Accelerometer.AccY -6065.000000 +69:001.765 Sensors-Accelerometer.AccZ -13824.000000 +69:040.690 Sensors-Accelerometer.AccX -4967.000000 +69:041.212 Sensors-Accelerometer.AccY -6506.000000 +69:041.734 Sensors-Accelerometer.AccZ -13061.000000 +69:080.690 Sensors-Accelerometer.AccX -5089.000000 +69:081.213 Sensors-Accelerometer.AccY -6296.000000 +69:081.735 Sensors-Accelerometer.AccZ -13125.000000 +69:120.690 Sensors-Accelerometer.AccX -5019.000000 +69:121.212 Sensors-Accelerometer.AccY -6166.000000 +69:121.730 Sensors-Accelerometer.AccZ -13463.000000 +69:160.690 Sensors-Accelerometer.AccX -5188.000000 +69:161.208 Sensors-Accelerometer.AccY -6559.000000 +69:161.726 Sensors-Accelerometer.AccZ -13360.000000 +69:240.690 Sensors-Accelerometer.AccX -5360.000000 +69:241.209 Sensors-Accelerometer.AccY -6443.000000 +69:241.735 Sensors-Accelerometer.AccZ -13094.000000 +69:280.690 Sensors-Accelerometer.AccX -4881.000000 +69:281.209 Sensors-Accelerometer.AccY -6468.000000 +69:281.727 Sensors-Accelerometer.AccZ -13141.000000 +69:320.690 Sensors-Accelerometer.AccX -4569.000000 +69:321.215 Sensors-Accelerometer.AccY -6620.000000 +69:321.734 Sensors-Accelerometer.AccZ -13131.000000 +69:360.690 Sensors-Accelerometer.AccX -4969.000000 +69:361.211 Sensors-Accelerometer.AccY -6561.000000 +69:361.729 Sensors-Accelerometer.AccZ -12815.000000 +69:400.725 Sensors-Accelerometer.AccX -4843.000000 +69:401.254 Sensors-Accelerometer.AccY -6391.000000 +69:401.783 Sensors-Accelerometer.AccZ -13019.000000 +69:480.690 Sensors-Accelerometer.AccX -5339.000000 +69:481.213 Sensors-Accelerometer.AccY -6584.000000 +69:481.731 Sensors-Accelerometer.AccZ -13181.000000 +69:560.690 Sensors-Accelerometer.AccX -5176.000000 +69:561.213 Sensors-Accelerometer.AccY -6211.000000 +69:561.740 Sensors-Accelerometer.AccZ -12949.000000 +69:600.725 Sensors-Accelerometer.AccX -5111.000000 +69:601.254 Sensors-Accelerometer.AccY -6997.000000 +69:601.777 Sensors-Accelerometer.AccZ -13174.000000 +69:640.690 Sensors-Accelerometer.AccX -5038.000000 +69:641.212 Sensors-Accelerometer.AccY -6576.000000 +69:641.725 Sensors-Accelerometer.AccZ -13104.000000 +69:680.690 Sensors-Accelerometer.AccX -5249.000000 +69:681.205 Sensors-Accelerometer.AccY -6673.000000 +69:681.724 Sensors-Accelerometer.AccZ -12798.000000 +69:760.690 Sensors-Accelerometer.AccX -5541.000000 +69:761.207 Sensors-Accelerometer.AccY -6662.000000 +69:761.726 Sensors-Accelerometer.AccZ -12831.000000 +69:800.725 Sensors-Accelerometer.AccX -5581.000000 +69:801.244 Sensors-Accelerometer.AccY -6335.000000 +69:801.768 Sensors-Accelerometer.AccZ -13088.000000 +69:840.690 Sensors-Accelerometer.AccX -5967.000000 +69:841.213 Sensors-Accelerometer.AccY -6591.000000 +69:841.733 Sensors-Accelerometer.AccZ -12762.000000 +69:880.690 Sensors-Accelerometer.AccX -5685.000000 +69:881.213 Sensors-Accelerometer.AccY -6824.000000 +69:881.726 Sensors-Accelerometer.AccZ -13116.000000 +69:920.690 Sensors-Accelerometer.AccX -5441.000000 +69:921.208 Sensors-Accelerometer.AccY -7070.000000 +69:921.731 Sensors-Accelerometer.AccZ -12825.000000 +69:960.690 Sensors-Accelerometer.AccX -5520.000000 +69:961.206 Sensors-Accelerometer.AccY -6373.000000 +69:961.732 Sensors-Accelerometer.AccZ -12656.000000 +70:080.690 Sensors-Accelerometer.AccX -5653.000000 +70:081.209 Sensors-Accelerometer.AccY -6593.000000 +70:081.729 Sensors-Accelerometer.AccZ -12713.000000 +70:100.683 Sensors-Magnetometer.MagX -292.000000 +70:101.174 Sensors-Magnetometer.MagY 461.000000 +70:101.668 Sensors-Magnetometer.MagZ 686.000000 +70:120.690 Sensors-Accelerometer.AccX -5388.000000 +70:121.212 Sensors-Accelerometer.AccY -6936.000000 +70:121.735 Sensors-Accelerometer.AccZ -13012.000000 +70:160.690 Sensors-Accelerometer.AccX -5569.000000 +70:161.212 Sensors-Accelerometer.AccY -6720.000000 +70:161.722 Sensors-Accelerometer.AccZ -12650.000000 +70:200.725 Sensors-Accelerometer.AccX -5456.000000 +70:201.238 Sensors-Accelerometer.AccY -7095.000000 +70:201.764 Sensors-Accelerometer.AccZ -12465.000000 +70:240.690 Sensors-Accelerometer.AccX -5409.000000 +70:241.211 Sensors-Accelerometer.AccY -6556.000000 +70:241.730 Sensors-Accelerometer.AccZ -12697.000000 +70:280.690 Sensors-Accelerometer.AccX -5701.000000 +70:281.217 Sensors-Accelerometer.AccY -6543.000000 +70:281.749 Sensors-Accelerometer.AccZ -12661.000000 +70:320.690 Sensors-Accelerometer.AccX -5736.000000 +70:321.209 Sensors-Accelerometer.AccY -6723.000000 +70:321.731 Sensors-Accelerometer.AccZ -12931.000000 +70:360.690 Sensors-Accelerometer.AccX -5758.000000 +70:361.217 Sensors-Accelerometer.AccY -6681.000000 +70:361.744 Sensors-Accelerometer.AccZ -12543.000000 +70:400.725 Sensors-Accelerometer.AccX -5520.000000 +70:401.238 Sensors-Accelerometer.AccY -6710.000000 +70:401.764 Sensors-Accelerometer.AccZ -12669.000000 +70:440.690 Sensors-Accelerometer.AccX -5294.000000 +70:441.213 Sensors-Accelerometer.AccY -7102.000000 +70:441.738 Sensors-Accelerometer.AccZ -13051.000000 +70:480.690 Sensors-Accelerometer.AccX -5541.000000 +70:481.209 Sensors-Accelerometer.AccY -6994.000000 +70:481.729 Sensors-Accelerometer.AccZ -12795.000000 +70:520.690 Sensors-Accelerometer.AccX -5612.000000 +70:521.211 Sensors-Accelerometer.AccY -6427.000000 +70:521.734 Sensors-Accelerometer.AccZ -12632.000000 +70:560.690 Sensors-Accelerometer.AccX -5479.000000 +70:561.208 Sensors-Accelerometer.AccY -6798.000000 +70:561.730 Sensors-Accelerometer.AccZ -12781.000000 +70:640.690 Sensors-Accelerometer.AccX -5409.000000 +70:641.209 Sensors-Accelerometer.AccY -6468.000000 +70:641.729 Sensors-Accelerometer.AccZ -12521.000000 +70:680.690 Sensors-Accelerometer.AccX -5784.000000 +70:681.209 Sensors-Accelerometer.AccY -6878.000000 +70:681.738 Sensors-Accelerometer.AccZ -12584.000000 +70:720.690 Sensors-Accelerometer.AccX -5447.000000 +70:721.212 Sensors-Accelerometer.AccY -7020.000000 +70:721.736 Sensors-Accelerometer.AccZ -13022.000000 +70:760.690 Sensors-Accelerometer.AccX -5712.000000 +70:761.209 Sensors-Accelerometer.AccY -6806.000000 +70:761.728 Sensors-Accelerometer.AccZ -12787.000000 +70:840.690 Sensors-Accelerometer.AccX -5667.000000 +70:841.214 Sensors-Accelerometer.AccY -7435.000000 +70:841.740 Sensors-Accelerometer.AccZ -12453.000000 +70:880.690 Sensors-Accelerometer.AccX -5478.000000 +70:881.212 Sensors-Accelerometer.AccY -6536.000000 +70:881.732 Sensors-Accelerometer.AccZ -12395.000000 +70:920.690 Sensors-Accelerometer.AccX -5682.000000 +70:921.210 Sensors-Accelerometer.AccY -6571.000000 +70:921.733 Sensors-Accelerometer.AccZ -12394.000000 +70:960.690 Sensors-Accelerometer.AccX -5546.000000 +70:961.208 Sensors-Accelerometer.AccY -6764.000000 +70:961.725 Sensors-Accelerometer.AccZ -12679.000000 +71:040.690 Sensors-Accelerometer.AccX -5791.000000 +71:041.212 Sensors-Accelerometer.AccY -6677.000000 +71:041.732 Sensors-Accelerometer.AccZ -12865.000000 +71:050.601 Sync Key pressed +71:050.903 Sync Key pressed +71:080.690 Sensors-Accelerometer.AccX -5709.000000 +71:081.215 Sensors-Accelerometer.AccY -6807.000000 +71:081.738 Sensors-Accelerometer.AccZ -13090.000000 +71:120.690 Sensors-Accelerometer.AccX -6294.000000 +71:121.212 Sensors-Accelerometer.AccY -7569.000000 +71:121.737 Sensors-Accelerometer.AccZ -12666.000000 +71:150.683 Sensors-Magnetometer.MagX -273.000000 +71:151.174 Sensors-Magnetometer.MagY 447.000000 +71:151.671 Sensors-Magnetometer.MagZ 699.000000 +71:160.690 Sensors-Accelerometer.AccX -5639.000000 +71:161.216 Sensors-Accelerometer.AccY -5745.000000 +71:161.741 Sensors-Accelerometer.AccZ -12440.000000 +71:200.725 Sensors-Accelerometer.AccX -6322.000000 +71:201.248 Sensors-Accelerometer.AccY -6197.000000 +71:201.773 Sensors-Accelerometer.AccZ -12480.000000 +71:240.690 Sensors-Accelerometer.AccX -6027.000000 +71:241.220 Sensors-Accelerometer.AccY -6514.000000 +71:241.744 Sensors-Accelerometer.AccZ -12842.000000 +71:280.690 Sensors-Accelerometer.AccX -6105.000000 +71:281.214 Sensors-Accelerometer.AccY -6360.000000 +71:281.735 Sensors-Accelerometer.AccZ -12470.000000 +71:320.690 Sensors-Accelerometer.AccX -6198.000000 +71:321.218 Sensors-Accelerometer.AccY -5622.000000 +71:321.743 Sensors-Accelerometer.AccZ -12528.000000 +71:360.690 Sensors-Accelerometer.AccX -6014.000000 +71:361.215 Sensors-Accelerometer.AccY -6151.000000 +71:361.740 Sensors-Accelerometer.AccZ -12289.000000 +71:400.725 Sensors-Accelerometer.AccX -6168.000000 +71:401.248 Sensors-Accelerometer.AccY -5863.000000 +71:401.776 Sensors-Accelerometer.AccZ -12395.000000 +71:440.690 Sensors-Accelerometer.AccX -6455.000000 +71:441.215 Sensors-Accelerometer.AccY -6296.000000 +71:441.736 Sensors-Accelerometer.AccZ -12351.000000 +71:480.690 Sensors-Accelerometer.AccX -6314.000000 +71:481.212 Sensors-Accelerometer.AccY -6194.000000 +71:481.736 Sensors-Accelerometer.AccZ -12691.000000 +71:520.690 Sensors-Accelerometer.AccX -6739.000000 +71:521.211 Sensors-Accelerometer.AccY -6584.000000 +71:521.733 Sensors-Accelerometer.AccZ -12424.000000 +71:560.690 Sensors-Accelerometer.AccX -6718.000000 +71:561.211 Sensors-Accelerometer.AccY -6251.000000 +71:561.739 Sensors-Accelerometer.AccZ -11927.000000 +71:594.272 Sync Key pressed +71:594.579 Sync Key pressed +71:600.725 Sensors-Accelerometer.AccX -6260.000000 +71:601.246 Sensors-Accelerometer.AccY -6543.000000 +71:601.778 Sensors-Accelerometer.AccZ -12984.000000 +71:640.690 Sensors-Accelerometer.AccX -6444.000000 +71:641.215 Sensors-Accelerometer.AccY -7398.000000 +71:641.741 Sensors-Accelerometer.AccZ -12582.000000 +71:680.690 Sensors-Accelerometer.AccX -6015.000000 +71:681.212 Sensors-Accelerometer.AccY -6376.000000 +71:681.727 Sensors-Accelerometer.AccZ -12268.000000 +71:720.690 Sensors-Accelerometer.AccX -6726.000000 +71:721.209 Sensors-Accelerometer.AccY -6616.000000 +71:721.727 Sensors-Accelerometer.AccZ -11530.000000 +71:760.690 Sensors-Accelerometer.AccX -6034.000000 +71:761.214 Sensors-Accelerometer.AccY -6722.000000 +71:761.730 Sensors-Accelerometer.AccZ -12306.000000 +71:800.725 Sensors-Accelerometer.AccX -5771.000000 +71:801.249 Sensors-Accelerometer.AccY -6550.000000 +71:801.778 Sensors-Accelerometer.AccZ -12753.000000 +71:840.690 Sensors-Accelerometer.AccX -6641.000000 +71:841.211 Sensors-Accelerometer.AccY -7309.000000 +71:841.735 Sensors-Accelerometer.AccZ -12541.000000 +71:880.690 Sensors-Accelerometer.AccX -6882.000000 +71:881.207 Sensors-Accelerometer.AccY -7446.000000 +71:881.732 Sensors-Accelerometer.AccZ -12601.000000 +71:920.690 Sensors-Accelerometer.AccX -6268.000000 +71:921.215 Sensors-Accelerometer.AccY -6830.000000 +71:921.740 Sensors-Accelerometer.AccZ -12157.000000 +71:960.690 Sensors-Accelerometer.AccX -5602.000000 +71:961.214 Sensors-Accelerometer.AccY -6401.000000 +71:961.736 Sensors-Accelerometer.AccZ -12136.000000 +72:080.690 Sensors-Accelerometer.AccX -5856.000000 +72:081.210 Sensors-Accelerometer.AccY -6906.000000 +72:081.731 Sensors-Accelerometer.AccZ -12887.000000 +72:120.690 Sensors-Accelerometer.AccX -6040.000000 +72:121.208 Sensors-Accelerometer.AccY -7284.000000 +72:121.726 Sensors-Accelerometer.AccZ -12755.000000 +72:160.690 Sensors-Accelerometer.AccX -6115.000000 +72:161.217 Sensors-Accelerometer.AccY -7153.000000 +72:161.740 Sensors-Accelerometer.AccZ -12521.000000 +72:200.725 Sensors-Accelerometer.AccX -5614.000000 +72:201.244 Sensors-Accelerometer.AccY -6790.000000 +72:201.763 Sensors-Accelerometer.AccZ -12542.000000 +72:240.690 Sensors-Accelerometer.AccX -6091.000000 +72:241.213 Sensors-Accelerometer.AccY -6641.000000 +72:241.734 Sensors-Accelerometer.AccZ -12198.000000 +72:280.690 Sensors-Accelerometer.AccX -5773.000000 +72:281.210 Sensors-Accelerometer.AccY -6497.000000 +72:281.734 Sensors-Accelerometer.AccZ -12325.000000 +72:320.690 Sensors-Accelerometer.AccX -5661.000000 +72:321.208 Sensors-Accelerometer.AccY -6762.000000 +72:321.724 Sensors-Accelerometer.AccZ -12526.000000 +72:360.690 Sensors-Accelerometer.AccX -5506.000000 +72:361.208 Sensors-Accelerometer.AccY -7013.000000 +72:361.730 Sensors-Accelerometer.AccZ -12646.000000 +72:440.690 Sensors-Accelerometer.AccX -5708.000000 +72:441.213 Sensors-Accelerometer.AccY -7001.000000 +72:441.738 Sensors-Accelerometer.AccZ -12669.000000 +72:480.690 Sensors-Accelerometer.AccX -5420.000000 +72:481.208 Sensors-Accelerometer.AccY -6860.000000 +72:481.728 Sensors-Accelerometer.AccZ -12709.000000 +72:520.690 Sensors-Accelerometer.AccX -5652.000000 +72:521.209 Sensors-Accelerometer.AccY -6972.000000 +72:521.730 Sensors-Accelerometer.AccZ -12545.000000 +72:600.725 Sensors-Accelerometer.AccX -5702.000000 +72:601.250 Sensors-Accelerometer.AccY -6715.000000 +72:601.774 Sensors-Accelerometer.AccZ -12666.000000 +72:640.690 Sensors-Accelerometer.AccX -6275.000000 +72:641.219 Sensors-Accelerometer.AccY -6619.000000 +72:641.746 Sensors-Accelerometer.AccZ -12523.000000 +72:680.690 Sensors-Accelerometer.AccX -6374.000000 +72:681.220 Sensors-Accelerometer.AccY -6587.000000 +72:681.742 Sensors-Accelerometer.AccZ -12843.000000 +72:720.690 Sensors-Accelerometer.AccX -6214.000000 +72:721.215 Sensors-Accelerometer.AccY -6370.000000 +72:721.741 Sensors-Accelerometer.AccZ -13099.000000 +72:760.690 Sensors-Accelerometer.AccX -7141.000000 +72:761.213 Sensors-Accelerometer.AccY -6078.000000 +72:761.741 Sensors-Accelerometer.AccZ -12765.000000 +72:800.683 Sensors-Magnetometer.MagX -199.000000 +72:801.176 Sensors-Magnetometer.MagY 437.000000 +72:801.670 Sensors-Magnetometer.MagZ 738.000000 +72:802.196 Sensors-Accelerometer.AccX -6721.000000 +72:802.714 Sensors-Accelerometer.AccY -5292.000000 +72:803.238 Sensors-Accelerometer.AccZ -12847.000000 +72:840.690 Sensors-Accelerometer.AccX -7294.000000 +72:841.215 Sensors-Accelerometer.AccY -5261.000000 +72:841.734 Sensors-Accelerometer.AccZ -12760.000000 +72:880.690 Sensors-Accelerometer.AccX -8713.000000 +72:881.216 Sensors-Accelerometer.AccY -4461.000000 +72:881.738 Sensors-Accelerometer.AccZ -12132.000000 +72:900.683 Sensors-Magnetometer.MagX -98.000000 +72:901.153 Sensors-Magnetometer.MagY 394.000000 +72:901.646 Sensors-Magnetometer.MagZ 753.000000 +72:920.690 Sensors-Accelerometer.AccX -9478.000000 +72:921.216 Sensors-Accelerometer.AccY -3595.000000 +72:921.740 Sensors-Accelerometer.AccZ -12003.000000 +72:950.683 Sensors-Magnetometer.MagX -32.000000 +72:951.144 Sensors-Magnetometer.MagY 346.000000 +72:951.637 Sensors-Magnetometer.MagZ 763.000000 +72:960.690 Sensors-Accelerometer.AccX -9879.000000 +72:961.214 Sensors-Accelerometer.AccY -2842.000000 +72:961.730 Sensors-Accelerometer.AccZ -11902.000000 +73:000.683 Sensors-Magnetometer.MagX 59.000000 +73:001.149 Sensors-Magnetometer.MagY 287.000000 +73:001.642 Sensors-Magnetometer.MagZ 767.000000 +73:002.174 Sensors-Accelerometer.AccX -13774.000000 +73:002.720 Sensors-Accelerometer.AccY -2151.000000 +73:003.238 Sensors-Accelerometer.AccZ -10403.000000 +73:040.690 Sensors-Accelerometer.AccX -13008.000000 +73:041.231 Sensors-Accelerometer.AccY -1563.000000 +73:041.755 Sensors-Accelerometer.AccZ -10144.000000 +73:050.683 Sensors-Magnetometer.MagX 155.000000 +73:051.178 Sensors-Magnetometer.MagY 192.000000 +73:051.667 Sensors-Magnetometer.MagZ 746.000000 +73:080.690 Sensors-Accelerometer.AccX -12811.000000 +73:081.237 Sensors-Accelerometer.AccY 1015.000000 +73:081.759 Sensors-Accelerometer.AccZ -9363.000000 +73:100.683 Sensors-Magnetometer.MagX 252.000000 +73:101.176 Sensors-Magnetometer.MagY 78.000000 +73:101.645 Sensors-Magnetometer.MagZ 705.000000 +73:120.690 Sensors-Accelerometer.AccX -14539.000000 +73:121.240 Sensors-Accelerometer.AccY 2963.000000 +73:121.762 Sensors-Accelerometer.AccZ -6622.000000 +73:150.683 Sensors-Magnetometer.MagX 332.000000 +73:151.177 Sensors-Magnetometer.MagY -78.000000 +73:151.650 Sensors-Magnetometer.MagZ 636.000000 +73:160.690 Sensors-Accelerometer.AccX -12653.000000 +73:161.239 Sensors-Accelerometer.AccY 4891.000000 +73:161.765 Sensors-Accelerometer.AccZ -5306.000000 +73:200.683 Sensors-Magnetometer.MagX 378.000000 +73:201.175 Sensors-Magnetometer.MagY -218.000000 +73:201.665 Sensors-Magnetometer.MagZ 551.000000 +73:202.196 Sensors-Accelerometer.AccX -12145.000000 +73:202.747 Sensors-Accelerometer.AccY 9006.000000 +73:203.276 Sensors-Accelerometer.AccZ -1368.000000 +73:240.690 Sensors-Accelerometer.AccX -11355.000000 +73:241.241 Sensors-Accelerometer.AccY 11434.000000 +73:241.788 Sensors-Accelerometer.AccZ 2367.000000 +73:250.684 Sensors-Magnetometer.MagX 372.000000 +73:251.174 Sensors-Magnetometer.MagY -346.000000 +73:251.669 Sensors-Magnetometer.MagZ 445.000000 +73:280.690 Sensors-Accelerometer.AccX -9838.000000 +73:281.213 Sensors-Accelerometer.AccY 12613.000000 +73:281.762 Sensors-Accelerometer.AccZ 2787.000000 +73:300.683 Sensors-Magnetometer.MagX 357.000000 +73:301.179 Sensors-Magnetometer.MagY -419.000000 +73:301.678 Sensors-Magnetometer.MagZ 354.000000 +73:320.690 Sensors-Accelerometer.AccX -9648.000000 +73:321.210 Sensors-Accelerometer.AccY 12096.000000 +73:321.748 Sensors-Accelerometer.AccZ 4798.000000 +73:350.683 Sensors-Magnetometer.MagX 351.000000 +73:351.180 Sensors-Magnetometer.MagY -470.000000 +73:351.680 Sensors-Magnetometer.MagZ 264.000000 +73:360.690 Sensors-Accelerometer.AccX -8840.000000 +73:361.209 Sensors-Accelerometer.AccY 11818.000000 +73:361.753 Sensors-Accelerometer.AccZ 5931.000000 +73:400.684 Sensors-Magnetometer.MagX 336.000000 +73:401.166 Sensors-Magnetometer.MagY -505.000000 +73:401.658 Sensors-Magnetometer.MagZ 204.000000 +73:402.185 Sensors-Accelerometer.AccX -9569.000000 +73:402.709 Sensors-Accelerometer.AccY 16404.000000 +73:403.249 Sensors-Accelerometer.AccZ 10423.000000 +73:440.690 Sensors-Accelerometer.AccX -7477.000000 +73:441.213 Sensors-Accelerometer.AccY 16136.000000 +73:441.758 Sensors-Accelerometer.AccZ 10791.000000 +73:480.690 Sensors-Accelerometer.AccX -6180.000000 +73:481.214 Sensors-Accelerometer.AccY 11547.000000 +73:481.762 Sensors-Accelerometer.AccZ 4315.000000 +73:500.683 Sensors-Magnetometer.MagX 382.000000 +73:501.179 Sensors-Magnetometer.MagY -372.000000 +73:501.671 Sensors-Magnetometer.MagZ 443.000000 +73:520.690 Sensors-Accelerometer.AccX -7723.000000 +73:521.219 Sensors-Accelerometer.AccY 10476.000000 +73:521.769 Sensors-Accelerometer.AccZ 275.000000 +73:550.683 Sensors-Magnetometer.MagX 366.000000 +73:551.181 Sensors-Magnetometer.MagY -169.000000 +73:551.673 Sensors-Magnetometer.MagZ 608.000000 +73:560.690 Sensors-Accelerometer.AccX -8653.000000 +73:561.213 Sensors-Accelerometer.AccY 7560.000000 +73:561.736 Sensors-Accelerometer.AccZ -3220.000000 +73:600.683 Sensors-Magnetometer.MagX 285.000000 +73:601.172 Sensors-Magnetometer.MagY 68.000000 +73:601.633 Sensors-Magnetometer.MagZ 712.000000 +73:602.159 Sensors-Accelerometer.AccX -9212.000000 +73:602.683 Sensors-Accelerometer.AccY 2608.000000 +73:603.200 Sensors-Accelerometer.AccZ -2948.000000 +73:640.690 Sensors-Accelerometer.AccX -6699.000000 +73:641.219 Sensors-Accelerometer.AccY -3404.000000 +73:641.737 Sensors-Accelerometer.AccZ -8875.000000 +73:650.683 Sensors-Magnetometer.MagX 86.000000 +73:651.152 Sensors-Magnetometer.MagY 292.000000 +73:651.645 Sensors-Magnetometer.MagZ 762.000000 +73:680.690 Sensors-Accelerometer.AccX -9455.000000 +73:681.217 Sensors-Accelerometer.AccY -10581.000000 +73:681.760 Sensors-Accelerometer.AccZ -12101.000000 +73:700.683 Sensors-Magnetometer.MagX 25.000000 +73:701.149 Sensors-Magnetometer.MagY 376.000000 +73:701.644 Sensors-Magnetometer.MagZ 756.000000 +73:720.690 Sensors-Accelerometer.AccX -14978.000000 +73:721.240 Sensors-Accelerometer.AccY -16730.000000 +73:721.792 Sensors-Accelerometer.AccZ -13287.000000 +73:750.683 Sensors-Magnetometer.MagX 86.000000 +73:751.149 Sensors-Magnetometer.MagY 357.000000 +73:751.640 Sensors-Magnetometer.MagZ 742.000000 +73:760.690 Sensors-Accelerometer.AccX -12976.000000 +73:761.234 Sensors-Accelerometer.AccY -8474.000000 +73:761.749 Sensors-Accelerometer.AccZ -11322.000000 +73:800.683 Sensors-Magnetometer.MagX 236.000000 +73:801.170 Sensors-Magnetometer.MagY 259.000000 +73:801.661 Sensors-Magnetometer.MagZ 714.000000 +73:802.189 Sensors-Accelerometer.AccX -15668.000000 +73:802.736 Sensors-Accelerometer.AccY 145.000000 +73:803.223 Sensors-Accelerometer.AccZ -11346.000000 +73:840.690 Sensors-Accelerometer.AccX -14812.000000 +73:841.230 Sensors-Accelerometer.AccY -1750.000000 +73:841.749 Sensors-Accelerometer.AccZ -4479.000000 +73:850.683 Sensors-Magnetometer.MagX 352.000000 +73:851.172 Sensors-Magnetometer.MagY 113.000000 +73:851.661 Sensors-Magnetometer.MagZ 657.000000 +73:880.690 Sensors-Accelerometer.AccX -12545.000000 +73:881.238 Sensors-Accelerometer.AccY 5081.000000 +73:881.764 Sensors-Accelerometer.AccZ -1867.000000 +73:900.683 Sensors-Magnetometer.MagX 424.000000 +73:901.171 Sensors-Magnetometer.MagY -124.000000 +73:901.662 Sensors-Magnetometer.MagZ 558.000000 +73:920.690 Sensors-Accelerometer.AccX -10288.000000 +73:921.230 Sensors-Accelerometer.AccY 11014.000000 +73:921.774 Sensors-Accelerometer.AccZ -1659.000000 +73:950.683 Sensors-Magnetometer.MagX 411.000000 +73:951.177 Sensors-Magnetometer.MagY -317.000000 +73:951.674 Sensors-Magnetometer.MagZ 439.000000 +73:960.690 Sensors-Accelerometer.AccX -7811.000000 +73:961.219 Sensors-Accelerometer.AccY 10306.000000 +73:961.761 Sensors-Accelerometer.AccZ 4108.000000 +74:000.683 Sensors-Magnetometer.MagX 362.000000 +74:001.171 Sensors-Magnetometer.MagY -470.000000 +74:001.667 Sensors-Magnetometer.MagZ 290.000000 +74:002.191 Sensors-Accelerometer.AccX -4820.000000 +74:002.712 Sensors-Accelerometer.AccY 14937.000000 +74:003.260 Sensors-Accelerometer.AccZ 7819.000000 +74:040.690 Sensors-Accelerometer.AccX -3197.000000 +74:041.213 Sensors-Accelerometer.AccY 16309.000000 +74:041.762 Sensors-Accelerometer.AccZ 8616.000000 +74:050.683 Sensors-Magnetometer.MagX 271.000000 +74:051.176 Sensors-Magnetometer.MagY -569.000000 +74:051.672 Sensors-Magnetometer.MagZ 194.000000 +74:080.690 Sensors-Accelerometer.AccX -3590.000000 +74:081.211 Sensors-Accelerometer.AccY 14078.000000 +74:081.760 Sensors-Accelerometer.AccZ 8110.000000 +74:120.690 Sensors-Accelerometer.AccX -6144.000000 +74:121.202 Sensors-Accelerometer.AccY 14222.000000 +74:121.748 Sensors-Accelerometer.AccZ 7873.000000 +74:150.683 Sensors-Magnetometer.MagX 326.000000 +74:151.178 Sensors-Magnetometer.MagY -540.000000 +74:151.672 Sensors-Magnetometer.MagZ 172.000000 +74:160.690 Sensors-Accelerometer.AccX -10016.000000 +74:161.230 Sensors-Accelerometer.AccY 12903.000000 +74:161.776 Sensors-Accelerometer.AccZ 10240.000000 +74:200.683 Sensors-Magnetometer.MagX 416.000000 +74:201.170 Sensors-Magnetometer.MagY -438.000000 +74:201.666 Sensors-Magnetometer.MagZ 276.000000 +74:202.191 Sensors-Accelerometer.AccX -10656.000000 +74:202.730 Sensors-Accelerometer.AccY 11854.000000 +74:203.277 Sensors-Accelerometer.AccZ 7022.000000 +74:240.690 Sensors-Accelerometer.AccX -13057.000000 +74:241.233 Sensors-Accelerometer.AccY 7052.000000 +74:241.750 Sensors-Accelerometer.AccZ 1088.000000 +74:250.684 Sensors-Magnetometer.MagX 451.000000 +74:251.174 Sensors-Magnetometer.MagY -261.000000 +74:251.665 Sensors-Magnetometer.MagZ 464.000000 +74:280.690 Sensors-Accelerometer.AccX -12133.000000 +74:281.238 Sensors-Accelerometer.AccY 3884.000000 +74:281.757 Sensors-Accelerometer.AccZ -1938.000000 +74:300.683 Sensors-Magnetometer.MagX 371.000000 +74:301.179 Sensors-Magnetometer.MagY -65.000000 +74:301.649 Sensors-Magnetometer.MagZ 645.000000 +74:320.690 Sensors-Accelerometer.AccX -8618.000000 +74:321.206 Sensors-Accelerometer.AccY -1842.000000 +74:321.725 Sensors-Accelerometer.AccZ -8532.000000 +74:350.683 Sensors-Magnetometer.MagX 150.000000 +74:351.176 Sensors-Magnetometer.MagY 160.000000 +74:351.662 Sensors-Magnetometer.MagZ 782.000000 +74:360.690 Sensors-Accelerometer.AccX -6457.000000 +74:361.213 Sensors-Accelerometer.AccY -3452.000000 +74:361.734 Sensors-Accelerometer.AccZ -12122.000000 +74:400.683 Sensors-Magnetometer.MagX -63.000000 +74:401.148 Sensors-Magnetometer.MagY 266.000000 +74:401.636 Sensors-Magnetometer.MagZ 815.000000 +74:402.170 Sensors-Accelerometer.AccX -4138.000000 +74:402.686 Sensors-Accelerometer.AccY -6400.000000 +74:403.194 Sensors-Accelerometer.AccZ -13792.000000 +74:440.690 Sensors-Accelerometer.AccX -6462.000000 +74:441.212 Sensors-Accelerometer.AccY -9511.000000 +74:441.736 Sensors-Accelerometer.AccZ -15675.000000 +74:450.683 Sensors-Magnetometer.MagX -120.000000 +74:451.172 Sensors-Magnetometer.MagY 311.000000 +74:451.671 Sensors-Magnetometer.MagZ 808.000000 +74:480.690 Sensors-Accelerometer.AccX -8015.000000 +74:481.217 Sensors-Accelerometer.AccY -8151.000000 +74:481.748 Sensors-Accelerometer.AccZ -13958.000000 +74:500.683 Sensors-Magnetometer.MagX 33.000000 +74:501.146 Sensors-Magnetometer.MagY 275.000000 +74:501.640 Sensors-Magnetometer.MagZ 792.000000 +74:520.690 Sensors-Accelerometer.AccX -11443.000000 +74:521.241 Sensors-Accelerometer.AccY -2988.000000 +74:521.767 Sensors-Accelerometer.AccZ -11671.000000 +74:550.683 Sensors-Magnetometer.MagX 231.000000 +74:551.176 Sensors-Magnetometer.MagY 180.000000 +74:551.665 Sensors-Magnetometer.MagZ 726.000000 +74:560.690 Sensors-Accelerometer.AccX -13759.000000 +74:561.237 Sensors-Accelerometer.AccY -757.000000 +74:561.730 Sensors-Accelerometer.AccZ -9235.000000 +74:600.683 Sensors-Magnetometer.MagX 411.000000 +74:601.175 Sensors-Magnetometer.MagY -45.000000 +74:601.641 Sensors-Magnetometer.MagZ 589.000000 +74:602.171 Sensors-Accelerometer.AccX -14973.000000 +74:602.721 Sensors-Accelerometer.AccY -90.000000 +74:603.188 Sensors-Accelerometer.AccZ -3643.000000 +74:640.690 Sensors-Accelerometer.AccX -11028.000000 +74:641.233 Sensors-Accelerometer.AccY 9554.000000 +74:641.758 Sensors-Accelerometer.AccZ 1576.000000 +74:650.684 Sensors-Magnetometer.MagX 458.000000 +74:651.177 Sensors-Magnetometer.MagY -301.000000 +74:651.673 Sensors-Magnetometer.MagZ 408.000000 +74:680.690 Sensors-Accelerometer.AccX -9325.000000 +74:681.215 Sensors-Accelerometer.AccY 10667.000000 +74:681.764 Sensors-Accelerometer.AccZ 5356.000000 +74:700.683 Sensors-Magnetometer.MagX 381.000000 +74:701.180 Sensors-Magnetometer.MagY -477.000000 +74:701.676 Sensors-Magnetometer.MagZ 229.000000 +74:720.690 Sensors-Accelerometer.AccX -5885.000000 +74:721.214 Sensors-Accelerometer.AccY 12771.000000 +74:721.770 Sensors-Accelerometer.AccZ 8729.000000 +74:750.683 Sensors-Magnetometer.MagX 282.000000 +74:751.177 Sensors-Magnetometer.MagY -576.000000 +74:751.670 Sensors-Magnetometer.MagZ 76.000000 +74:760.690 Sensors-Accelerometer.AccX -2153.000000 +74:761.206 Sensors-Accelerometer.AccY 9724.000000 +74:761.730 Sensors-Accelerometer.AccZ 10256.000000 +74:800.683 Sensors-Magnetometer.MagX 172.000000 +74:801.172 Sensors-Magnetometer.MagY -615.000000 +74:801.668 Sensors-Magnetometer.MagZ -70.000000 +74:802.173 Sensors-Accelerometer.AccX 199.000000 +74:802.668 Sensors-Accelerometer.AccY 13461.000000 +74:803.212 Sensors-Accelerometer.AccZ 10961.000000 +74:840.690 Sensors-Accelerometer.AccX 1482.000000 +74:841.207 Sensors-Accelerometer.AccY 9489.000000 +74:841.731 Sensors-Accelerometer.AccZ 13171.000000 +74:850.683 Sensors-Magnetometer.MagX 59.000000 +74:851.151 Sensors-Magnetometer.MagY -627.000000 +74:851.653 Sensors-Magnetometer.MagZ -172.000000 +74:880.690 Sensors-Accelerometer.AccX 1532.000000 +74:881.206 Sensors-Accelerometer.AccY 10636.000000 +74:881.750 Sensors-Accelerometer.AccZ 15184.000000 +74:900.683 Sensors-Magnetometer.MagX -122.000000 +74:901.173 Sensors-Magnetometer.MagY -623.000000 +74:901.672 Sensors-Magnetometer.MagZ -207.000000 +74:920.690 Sensors-Accelerometer.AccX 8756.000000 +74:921.209 Sensors-Accelerometer.AccY 9948.000000 +74:921.735 Sensors-Accelerometer.AccZ 11279.000000 +74:950.683 Sensors-Magnetometer.MagX -256.000000 +74:951.167 Sensors-Magnetometer.MagY -596.000000 +74:951.662 Sensors-Magnetometer.MagZ -215.000000 +74:960.690 Sensors-Accelerometer.AccX 5745.000000 +74:961.210 Sensors-Accelerometer.AccY 10372.000000 +74:961.753 Sensors-Accelerometer.AccZ 14869.000000 +75:000.683 Sensors-Magnetometer.MagX -409.000000 +75:001.179 Sensors-Magnetometer.MagY -555.000000 +75:001.681 Sensors-Magnetometer.MagZ -217.000000 +75:002.210 Sensors-Accelerometer.AccX 9048.000000 +75:002.734 Sensors-Accelerometer.AccY 8516.000000 +75:003.256 Sensors-Accelerometer.AccZ 11927.000000 +75:040.690 Sensors-Accelerometer.AccX 15485.000000 +75:041.236 Sensors-Accelerometer.AccY 11545.000000 +75:041.779 Sensors-Accelerometer.AccZ 13060.000000 +75:050.683 Sensors-Magnetometer.MagX -538.000000 +75:051.175 Sensors-Magnetometer.MagY -475.000000 +75:051.675 Sensors-Magnetometer.MagZ -188.000000 +75:080.690 Sensors-Accelerometer.AccX 12276.000000 +75:081.238 Sensors-Accelerometer.AccY 8183.000000 +75:081.764 Sensors-Accelerometer.AccZ 12332.000000 +75:100.683 Sensors-Magnetometer.MagX -658.000000 +75:101.175 Sensors-Magnetometer.MagY -391.000000 +75:101.675 Sensors-Magnetometer.MagZ -152.000000 +75:120.690 Sensors-Accelerometer.AccX 15038.000000 +75:121.242 Sensors-Accelerometer.AccY 3736.000000 +75:121.761 Sensors-Accelerometer.AccZ 11049.000000 +75:150.683 Sensors-Magnetometer.MagX -757.000000 +75:151.182 Sensors-Magnetometer.MagY -305.000000 +75:151.681 Sensors-Magnetometer.MagZ -67.000000 +75:160.690 Sensors-Accelerometer.AccX 15628.000000 +75:161.243 Sensors-Accelerometer.AccY 4779.000000 +75:161.776 Sensors-Accelerometer.AccZ 6254.000000 +75:200.684 Sensors-Magnetometer.MagX -788.000000 +75:201.176 Sensors-Magnetometer.MagY -286.000000 +75:201.672 Sensors-Magnetometer.MagZ 61.000000 +75:202.177 Sensors-Accelerometer.AccX 11031.000000 +75:202.730 Sensors-Accelerometer.AccY 3371.000000 +75:203.251 Sensors-Accelerometer.AccZ 7971.000000 +75:240.690 Sensors-Accelerometer.AccX 17743.000000 +75:241.243 Sensors-Accelerometer.AccY 4922.000000 +75:241.763 Sensors-Accelerometer.AccZ 4361.000000 +75:250.684 Sensors-Magnetometer.MagX -780.000000 +75:251.182 Sensors-Magnetometer.MagY -275.000000 +75:251.682 Sensors-Magnetometer.MagZ 135.000000 +75:280.690 Sensors-Accelerometer.AccX 15774.000000 +75:281.238 Sensors-Accelerometer.AccY 4376.000000 +75:281.760 Sensors-Accelerometer.AccZ 4792.000000 +75:320.690 Sensors-Accelerometer.AccX 20618.000000 +75:321.238 Sensors-Accelerometer.AccY 3168.000000 +75:321.760 Sensors-Accelerometer.AccZ 2680.000000 +75:350.683 Sensors-Magnetometer.MagX -695.000000 +75:351.183 Sensors-Magnetometer.MagY -397.000000 +75:351.682 Sensors-Magnetometer.MagZ 164.000000 +75:360.690 Sensors-Accelerometer.AccX 10279.000000 +75:361.238 Sensors-Accelerometer.AccY 6022.000000 +75:361.767 Sensors-Accelerometer.AccZ 4354.000000 +75:400.683 Sensors-Magnetometer.MagX -478.000000 +75:401.180 Sensors-Magnetometer.MagY -570.000000 +75:401.674 Sensors-Magnetometer.MagZ 115.000000 +75:402.203 Sensors-Accelerometer.AccX 13119.000000 +75:402.750 Sensors-Accelerometer.AccY 9803.000000 +75:403.279 Sensors-Accelerometer.AccZ 5617.000000 +75:440.690 Sensors-Accelerometer.AccX 6300.000000 +75:441.211 Sensors-Accelerometer.AccY 11344.000000 +75:441.754 Sensors-Accelerometer.AccZ 5160.000000 +75:450.683 Sensors-Magnetometer.MagX -224.000000 +75:451.172 Sensors-Magnetometer.MagY -660.000000 +75:451.664 Sensors-Magnetometer.MagZ 53.000000 +75:480.690 Sensors-Accelerometer.AccX 3159.000000 +75:481.214 Sensors-Accelerometer.AccY 18027.000000 +75:481.764 Sensors-Accelerometer.AccZ 9278.000000 +75:500.683 Sensors-Magnetometer.MagX 82.000000 +75:501.149 Sensors-Magnetometer.MagY -657.000000 +75:501.639 Sensors-Magnetometer.MagZ 65.000000 +75:520.690 Sensors-Accelerometer.AccX -2215.000000 +75:521.210 Sensors-Accelerometer.AccY 10435.000000 +75:521.757 Sensors-Accelerometer.AccZ 4478.000000 +75:550.683 Sensors-Magnetometer.MagX 375.000000 +75:551.181 Sensors-Magnetometer.MagY -534.000000 +75:551.677 Sensors-Magnetometer.MagZ 164.000000 +75:560.690 Sensors-Accelerometer.AccX -10740.000000 +75:561.234 Sensors-Accelerometer.AccY 12058.000000 +75:561.784 Sensors-Accelerometer.AccZ 5384.000000 +75:600.683 Sensors-Magnetometer.MagX 521.000000 +75:601.179 Sensors-Magnetometer.MagY -311.000000 +75:601.677 Sensors-Magnetometer.MagZ 291.000000 +75:602.209 Sensors-Accelerometer.AccX -12586.000000 +75:602.753 Sensors-Accelerometer.AccY 6120.000000 +75:603.275 Sensors-Accelerometer.AccZ -909.000000 +75:640.690 Sensors-Accelerometer.AccX -13183.000000 +75:641.240 Sensors-Accelerometer.AccY 216.000000 +75:641.732 Sensors-Accelerometer.AccZ -2523.000000 +75:650.684 Sensors-Magnetometer.MagX 513.000000 +75:651.177 Sensors-Magnetometer.MagY -171.000000 +75:651.673 Sensors-Magnetometer.MagZ 430.000000 +75:680.690 Sensors-Accelerometer.AccX -16764.000000 +75:681.242 Sensors-Accelerometer.AccY 2300.000000 +75:681.764 Sensors-Accelerometer.AccZ -4590.000000 +75:720.690 Sensors-Accelerometer.AccX -15621.000000 +75:721.242 Sensors-Accelerometer.AccY 2571.000000 +75:721.764 Sensors-Accelerometer.AccZ -2098.000000 +75:760.690 Sensors-Accelerometer.AccX -17660.000000 +75:761.238 Sensors-Accelerometer.AccY 3710.000000 +75:761.763 Sensors-Accelerometer.AccZ -2217.000000 +75:800.725 Sensors-Accelerometer.AccX -16520.000000 +75:801.267 Sensors-Accelerometer.AccY 5761.000000 +75:801.790 Sensors-Accelerometer.AccZ 460.000000 +75:840.690 Sensors-Accelerometer.AccX -14470.000000 +75:841.239 Sensors-Accelerometer.AccY 2856.000000 +75:841.757 Sensors-Accelerometer.AccZ 801.000000 +75:880.690 Sensors-Accelerometer.AccX -14953.000000 +75:881.236 Sensors-Accelerometer.AccY 3723.000000 +75:881.759 Sensors-Accelerometer.AccZ 620.000000 +75:900.683 Sensors-Magnetometer.MagX 495.000000 +75:901.183 Sensors-Magnetometer.MagY -242.000000 +75:901.677 Sensors-Magnetometer.MagZ 381.000000 +75:920.690 Sensors-Accelerometer.AccX -13503.000000 +75:921.239 Sensors-Accelerometer.AccY 4204.000000 +75:921.758 Sensors-Accelerometer.AccZ 1983.000000 +75:950.684 Sensors-Magnetometer.MagX 495.000000 +75:951.184 Sensors-Magnetometer.MagY -271.000000 +75:951.682 Sensors-Magnetometer.MagZ 328.000000 +75:960.690 Sensors-Accelerometer.AccX -14249.000000 +75:961.242 Sensors-Accelerometer.AccY 1651.000000 +75:961.766 Sensors-Accelerometer.AccZ 1830.000000 +76:000.684 Sensors-Magnetometer.MagX 503.000000 +76:001.180 Sensors-Magnetometer.MagY -296.000000 +76:001.671 Sensors-Magnetometer.MagZ 255.000000 +76:002.203 Sensors-Accelerometer.AccX -14760.000000 +76:002.747 Sensors-Accelerometer.AccY 4268.000000 +76:003.268 Sensors-Accelerometer.AccZ 4076.000000 +76:040.690 Sensors-Accelerometer.AccX -14157.000000 +76:041.234 Sensors-Accelerometer.AccY 5325.000000 +76:041.752 Sensors-Accelerometer.AccZ 6035.000000 +76:050.683 Sensors-Magnetometer.MagX 491.000000 +76:051.183 Sensors-Magnetometer.MagY -350.000000 +76:051.679 Sensors-Magnetometer.MagZ 197.000000 +76:080.690 Sensors-Accelerometer.AccX -14344.000000 +76:081.235 Sensors-Accelerometer.AccY 5000.000000 +76:081.757 Sensors-Accelerometer.AccZ 7936.000000 +76:120.690 Sensors-Accelerometer.AccX -14275.000000 +76:121.241 Sensors-Accelerometer.AccY 3082.000000 +76:121.763 Sensors-Accelerometer.AccZ 5702.000000 +76:160.690 Sensors-Accelerometer.AccX -13097.000000 +76:161.238 Sensors-Accelerometer.AccY 4601.000000 +76:161.761 Sensors-Accelerometer.AccZ 5170.000000 +76:200.684 Sensors-Magnetometer.MagX 482.000000 +76:201.176 Sensors-Magnetometer.MagY -385.000000 +76:201.671 Sensors-Magnetometer.MagZ 105.000000 +76:202.192 Sensors-Accelerometer.AccX -14511.000000 +76:202.744 Sensors-Accelerometer.AccY 8449.000000 +76:203.262 Sensors-Accelerometer.AccZ 6915.000000 +76:240.690 Sensors-Accelerometer.AccX -14378.000000 +76:241.235 Sensors-Accelerometer.AccY 2108.000000 +76:241.752 Sensors-Accelerometer.AccZ 6564.000000 +76:280.690 Sensors-Accelerometer.AccX -17682.000000 +76:281.237 Sensors-Accelerometer.AccY 2674.000000 +76:281.757 Sensors-Accelerometer.AccZ 4344.000000 +76:320.690 Sensors-Accelerometer.AccX -13617.000000 +76:321.236 Sensors-Accelerometer.AccY 7207.000000 +76:321.762 Sensors-Accelerometer.AccZ 6131.000000 +76:360.690 Sensors-Accelerometer.AccX -14213.000000 +76:361.241 Sensors-Accelerometer.AccY 6409.000000 +76:361.764 Sensors-Accelerometer.AccZ 4257.000000 +76:400.683 Sensors-Magnetometer.MagX 452.000000 +76:401.172 Sensors-Magnetometer.MagY -437.000000 +76:401.666 Sensors-Magnetometer.MagZ 118.000000 +76:402.192 Sensors-Accelerometer.AccX -11557.000000 +76:402.739 Sensors-Accelerometer.AccY 13757.000000 +76:403.290 Sensors-Accelerometer.AccZ 5024.000000 +76:440.690 Sensors-Accelerometer.AccX -14938.000000 +76:441.241 Sensors-Accelerometer.AccY 15469.000000 +76:441.790 Sensors-Accelerometer.AccZ 3292.000000 +76:480.690 Sensors-Accelerometer.AccX -18174.000000 +76:481.240 Sensors-Accelerometer.AccY 16013.000000 +76:481.788 Sensors-Accelerometer.AccZ 5562.000000 +76:500.684 Sensors-Magnetometer.MagX 438.000000 +76:501.179 Sensors-Magnetometer.MagY -412.000000 +76:501.673 Sensors-Magnetometer.MagZ 20.000000 +76:520.690 Sensors-Accelerometer.AccX -15617.000000 +76:521.241 Sensors-Accelerometer.AccY 7808.000000 +76:521.758 Sensors-Accelerometer.AccZ 5653.000000 +76:550.683 Sensors-Magnetometer.MagX 469.000000 +76:551.178 Sensors-Magnetometer.MagY -302.000000 +76:551.676 Sensors-Magnetometer.MagZ -142.000000 +76:560.690 Sensors-Accelerometer.AccX -9074.000000 +76:561.214 Sensors-Accelerometer.AccY 730.000000 +76:561.710 Sensors-Accelerometer.AccZ 6232.000000 +76:600.683 Sensors-Magnetometer.MagX 466.000000 +76:601.176 Sensors-Magnetometer.MagY -170.000000 +76:601.666 Sensors-Magnetometer.MagZ -257.000000 +76:602.194 Sensors-Accelerometer.AccX -3719.000000 +76:602.722 Sensors-Accelerometer.AccY -10339.000000 +76:603.273 Sensors-Accelerometer.AccZ 7435.000000 +76:640.690 Sensors-Accelerometer.AccX -1144.000000 +76:641.210 Sensors-Accelerometer.AccY -16981.000000 +76:641.758 Sensors-Accelerometer.AccZ 7553.000000 +76:650.684 Sensors-Magnetometer.MagX 457.000000 +76:651.181 Sensors-Magnetometer.MagY -90.000000 +76:651.653 Sensors-Magnetometer.MagZ -303.000000 +76:680.690 Sensors-Accelerometer.AccX -2585.000000 +76:681.212 Sensors-Accelerometer.AccY -26378.000000 +76:681.763 Sensors-Accelerometer.AccZ 9492.000000 +76:720.690 Sensors-Accelerometer.AccX -8299.000000 +76:721.217 Sensors-Accelerometer.AccY -14511.000000 +76:721.772 Sensors-Accelerometer.AccZ 8139.000000 +76:750.683 Sensors-Magnetometer.MagX 461.000000 +76:751.181 Sensors-Magnetometer.MagY -244.000000 +76:751.677 Sensors-Magnetometer.MagZ -243.000000 +76:760.690 Sensors-Accelerometer.AccX -15946.000000 +76:761.242 Sensors-Accelerometer.AccY 4666.000000 +76:761.769 Sensors-Accelerometer.AccZ 6989.000000 +76:800.683 Sensors-Magnetometer.MagX 445.000000 +76:801.170 Sensors-Magnetometer.MagY -333.000000 +76:801.656 Sensors-Magnetometer.MagZ -183.000000 +76:802.183 Sensors-Accelerometer.AccX -10215.000000 +76:802.732 Sensors-Accelerometer.AccY 23355.000000 +76:803.279 Sensors-Accelerometer.AccZ 8539.000000 +76:840.690 Sensors-Accelerometer.AccX -9169.000000 +76:841.215 Sensors-Accelerometer.AccY 27751.000000 +76:841.761 Sensors-Accelerometer.AccZ 7600.000000 +76:850.684 Sensors-Magnetometer.MagX 399.000000 +76:851.179 Sensors-Magnetometer.MagY -334.000000 +76:851.674 Sensors-Magnetometer.MagZ -248.000000 +76:880.690 Sensors-Accelerometer.AccX -5863.000000 +76:881.215 Sensors-Accelerometer.AccY 14925.000000 +76:881.763 Sensors-Accelerometer.AccZ 8283.000000 +76:920.690 Sensors-Accelerometer.AccX -6890.000000 +76:921.209 Sensors-Accelerometer.AccY -4151.000000 +76:921.735 Sensors-Accelerometer.AccZ 7164.000000 +76:950.683 Sensors-Magnetometer.MagX 402.000000 +76:951.176 Sensors-Magnetometer.MagY -126.000000 +76:951.668 Sensors-Magnetometer.MagZ -388.000000 +76:960.690 Sensors-Accelerometer.AccX -3382.000000 +76:961.206 Sensors-Accelerometer.AccY -20696.000000 +76:961.753 Sensors-Accelerometer.AccZ 10323.000000 +77:000.683 Sensors-Magnetometer.MagX 399.000000 +77:001.181 Sensors-Magnetometer.MagY -23.000000 +77:001.649 Sensors-Magnetometer.MagZ -397.000000 +77:002.181 Sensors-Accelerometer.AccX -3804.000000 +77:002.706 Sensors-Accelerometer.AccY -27611.000000 +77:003.258 Sensors-Accelerometer.AccZ 12069.000000 +77:040.690 Sensors-Accelerometer.AccX -10211.000000 +77:041.242 Sensors-Accelerometer.AccY -12458.000000 +77:041.786 Sensors-Accelerometer.AccZ 10221.000000 +77:050.684 Sensors-Magnetometer.MagX 397.000000 +77:051.178 Sensors-Magnetometer.MagY -114.000000 +77:051.669 Sensors-Magnetometer.MagZ -365.000000 +77:080.690 Sensors-Accelerometer.AccX -10581.000000 +77:081.233 Sensors-Accelerometer.AccY 438.000000 +77:081.729 Sensors-Accelerometer.AccZ 9798.000000 +77:100.683 Sensors-Magnetometer.MagX 402.000000 +77:101.177 Sensors-Magnetometer.MagY -227.000000 +77:101.673 Sensors-Magnetometer.MagZ -338.000000 +77:120.690 Sensors-Accelerometer.AccX -11670.000000 +77:121.237 Sensors-Accelerometer.AccY 14484.000000 +77:121.777 Sensors-Accelerometer.AccZ 9760.000000 +77:150.683 Sensors-Magnetometer.MagX 416.000000 +77:151.173 Sensors-Magnetometer.MagY -293.000000 +77:151.669 Sensors-Magnetometer.MagZ -288.000000 +77:160.690 Sensors-Accelerometer.AccX -9422.000000 +77:161.216 Sensors-Accelerometer.AccY 21494.000000 +77:161.766 Sensors-Accelerometer.AccZ 9729.000000 +77:200.725 Sensors-Accelerometer.AccX -7150.000000 +77:201.248 Sensors-Accelerometer.AccY 24529.000000 +77:201.797 Sensors-Accelerometer.AccZ 9541.000000 +77:240.690 Sensors-Accelerometer.AccX -6037.000000 +77:241.217 Sensors-Accelerometer.AccY 13109.000000 +77:241.759 Sensors-Accelerometer.AccZ 9371.000000 +77:250.684 Sensors-Magnetometer.MagX 369.000000 +77:251.173 Sensors-Magnetometer.MagY -245.000000 +77:251.668 Sensors-Magnetometer.MagZ -380.000000 +77:280.690 Sensors-Accelerometer.AccX -4990.000000 +77:281.216 Sensors-Accelerometer.AccY -1383.000000 +77:281.736 Sensors-Accelerometer.AccZ 7910.000000 +77:300.683 Sensors-Magnetometer.MagX 342.000000 +77:301.179 Sensors-Magnetometer.MagY -15.000000 +77:301.648 Sensors-Magnetometer.MagZ -470.000000 +77:320.690 Sensors-Accelerometer.AccX 2072.000000 +77:321.209 Sensors-Accelerometer.AccY -13942.000000 +77:321.756 Sensors-Accelerometer.AccZ 8440.000000 +77:350.683 Sensors-Magnetometer.MagX 290.000000 +77:351.172 Sensors-Magnetometer.MagY 243.000000 +77:351.668 Sensors-Magnetometer.MagZ -482.000000 +77:360.690 Sensors-Accelerometer.AccX 2664.000000 +77:361.205 Sensors-Accelerometer.AccY -19207.000000 +77:361.754 Sensors-Accelerometer.AccZ 10059.000000 +77:400.683 Sensors-Magnetometer.MagX 257.000000 +77:401.175 Sensors-Magnetometer.MagY 368.000000 +77:401.666 Sensors-Magnetometer.MagZ -469.000000 +77:402.195 Sensors-Accelerometer.AccX -3414.000000 +77:402.719 Sensors-Accelerometer.AccY -16223.000000 +77:403.273 Sensors-Accelerometer.AccZ 11665.000000 +77:440.690 Sensors-Accelerometer.AccX -4064.000000 +77:441.203 Sensors-Accelerometer.AccY -12753.000000 +77:441.749 Sensors-Accelerometer.AccZ 13316.000000 +77:480.690 Sensors-Accelerometer.AccX -2063.000000 +77:481.213 Sensors-Accelerometer.AccY -11600.000000 +77:481.750 Sensors-Accelerometer.AccZ 10767.000000 +77:500.683 Sensors-Magnetometer.MagX 186.000000 +77:501.174 Sensors-Magnetometer.MagY 423.000000 +77:501.667 Sensors-Magnetometer.MagZ -467.000000 +77:520.690 Sensors-Accelerometer.AccX 9809.000000 +77:521.216 Sensors-Accelerometer.AccY -13080.000000 +77:521.767 Sensors-Accelerometer.AccZ 8235.000000 +77:550.683 Sensors-Magnetometer.MagX 130.000000 +77:551.176 Sensors-Magnetometer.MagY 442.000000 +77:551.671 Sensors-Magnetometer.MagZ -503.000000 +77:560.690 Sensors-Accelerometer.AccX 18435.000000 +77:561.241 Sensors-Accelerometer.AccY -11197.000000 +77:561.793 Sensors-Accelerometer.AccZ 7145.000000 +77:600.683 Sensors-Magnetometer.MagX 192.000000 +77:601.168 Sensors-Magnetometer.MagY 361.000000 +77:601.659 Sensors-Magnetometer.MagZ -499.000000 +77:602.192 Sensors-Accelerometer.AccX 14240.000000 +77:602.733 Sensors-Accelerometer.AccY -5867.000000 +77:603.261 Sensors-Accelerometer.AccZ 6209.000000 +77:640.690 Sensors-Accelerometer.AccX -2771.000000 +77:641.211 Sensors-Accelerometer.AccY -1730.000000 +77:641.730 Sensors-Accelerometer.AccZ 3997.000000 +77:650.683 Sensors-Magnetometer.MagX 386.000000 +77:651.178 Sensors-Magnetometer.MagY 216.000000 +77:651.670 Sensors-Magnetometer.MagZ -413.000000 +77:680.690 Sensors-Accelerometer.AccX -18604.000000 +77:681.240 Sensors-Accelerometer.AccY 2103.000000 +77:681.758 Sensors-Accelerometer.AccZ 2384.000000 +77:700.683 Sensors-Magnetometer.MagX 505.000000 +77:701.179 Sensors-Magnetometer.MagY 30.000000 +77:701.646 Sensors-Magnetometer.MagZ -256.000000 +77:720.690 Sensors-Accelerometer.AccX -32749.000000 +77:721.246 Sensors-Accelerometer.AccY 5598.000000 +77:721.777 Sensors-Accelerometer.AccZ 11715.000000 +77:750.683 Sensors-Magnetometer.MagX 478.000000 +77:751.184 Sensors-Magnetometer.MagY -73.000000 +77:751.656 Sensors-Magnetometer.MagZ -282.000000 +77:760.690 Sensors-Accelerometer.AccX -28116.000000 +77:761.237 Sensors-Accelerometer.AccY -1127.000000 +77:761.760 Sensors-Accelerometer.AccZ 13977.000000 +77:800.683 Sensors-Magnetometer.MagX 440.000000 +77:801.177 Sensors-Magnetometer.MagY 130.000000 +77:801.671 Sensors-Magnetometer.MagZ -362.000000 +77:802.201 Sensors-Accelerometer.AccX -9880.000000 +77:802.728 Sensors-Accelerometer.AccY -6873.000000 +77:803.257 Sensors-Accelerometer.AccZ 9734.000000 +77:840.690 Sensors-Accelerometer.AccX 14354.000000 +77:841.235 Sensors-Accelerometer.AccY -6144.000000 +77:841.746 Sensors-Accelerometer.AccZ 10116.000000 +77:850.683 Sensors-Magnetometer.MagX 333.000000 +77:851.174 Sensors-Magnetometer.MagY 270.000000 +77:851.668 Sensors-Magnetometer.MagZ -458.000000 +77:880.690 Sensors-Accelerometer.AccX 16874.000000 +77:881.235 Sensors-Accelerometer.AccY 1847.000000 +77:881.755 Sensors-Accelerometer.AccZ 6550.000000 +77:900.683 Sensors-Magnetometer.MagX 391.000000 +77:901.184 Sensors-Magnetometer.MagY 139.000000 +77:901.677 Sensors-Magnetometer.MagZ -427.000000 +77:920.690 Sensors-Accelerometer.AccX 9706.000000 +77:921.214 Sensors-Accelerometer.AccY 4009.000000 +77:921.737 Sensors-Accelerometer.AccZ 5173.000000 +77:950.683 Sensors-Magnetometer.MagX 467.000000 +77:951.180 Sensors-Magnetometer.MagY -87.000000 +77:951.652 Sensors-Magnetometer.MagZ -296.000000 +77:960.690 Sensors-Accelerometer.AccX -32519.000000 +77:961.242 Sensors-Accelerometer.AccY 6330.000000 +77:961.766 Sensors-Accelerometer.AccZ 3864.000000 +78:000.683 Sensors-Magnetometer.MagX 455.000000 +78:001.178 Sensors-Magnetometer.MagY -183.000000 +78:001.674 Sensors-Magnetometer.MagZ -267.000000 +78:002.205 Sensors-Accelerometer.AccX -32764.000000 +78:002.761 Sensors-Accelerometer.AccY -933.000000 +78:003.260 Sensors-Accelerometer.AccZ 13939.000000 +78:040.690 Sensors-Accelerometer.AccX -21374.000000 +78:041.240 Sensors-Accelerometer.AccY -9553.000000 +78:041.767 Sensors-Accelerometer.AccZ 10821.000000 +78:050.684 Sensors-Magnetometer.MagX 475.000000 +78:051.182 Sensors-Magnetometer.MagY -20.000000 +78:051.647 Sensors-Magnetometer.MagZ -312.000000 +78:080.690 Sensors-Accelerometer.AccX -488.000000 +78:081.177 Sensors-Accelerometer.AccY -4157.000000 +78:081.699 Sensors-Accelerometer.AccZ 9152.000000 +78:100.683 Sensors-Magnetometer.MagX 402.000000 +78:101.174 Sensors-Magnetometer.MagY 169.000000 +78:101.662 Sensors-Magnetometer.MagZ -403.000000 +78:120.690 Sensors-Accelerometer.AccX 21459.000000 +78:121.243 Sensors-Accelerometer.AccY 1990.000000 +78:121.767 Sensors-Accelerometer.AccZ 13600.000000 +78:160.690 Sensors-Accelerometer.AccX 5256.000000 +78:161.202 Sensors-Accelerometer.AccY 2626.000000 +78:161.718 Sensors-Accelerometer.AccZ 6187.000000 +78:200.683 Sensors-Magnetometer.MagX 470.000000 +78:201.182 Sensors-Magnetometer.MagY 12.000000 +78:201.648 Sensors-Magnetometer.MagZ -303.000000 +78:202.184 Sensors-Accelerometer.AccX -29062.000000 +78:202.737 Sensors-Accelerometer.AccY -2177.000000 +78:203.260 Sensors-Accelerometer.AccZ 4321.000000 +78:240.690 Sensors-Accelerometer.AccX -32764.000000 +78:241.244 Sensors-Accelerometer.AccY 87.000000 +78:241.712 Sensors-Accelerometer.AccZ 10340.000000 +78:250.684 Sensors-Magnetometer.MagX 474.000000 +78:251.177 Sensors-Magnetometer.MagY -122.000000 +78:251.670 Sensors-Magnetometer.MagZ -259.000000 +78:280.690 Sensors-Accelerometer.AccX -25593.000000 +78:281.245 Sensors-Accelerometer.AccY 10135.000000 +78:281.798 Sensors-Accelerometer.AccZ 12722.000000 +78:300.683 Sensors-Magnetometer.MagX 466.000000 +78:301.179 Sensors-Magnetometer.MagY -53.000000 +78:301.647 Sensors-Magnetometer.MagZ -287.000000 +78:320.690 Sensors-Accelerometer.AccX -9908.000000 +78:321.216 Sensors-Accelerometer.AccY -698.000000 +78:321.708 Sensors-Accelerometer.AccZ 7623.000000 +78:350.683 Sensors-Magnetometer.MagX 413.000000 +78:351.176 Sensors-Magnetometer.MagY 85.000000 +78:351.645 Sensors-Magnetometer.MagZ -385.000000 +78:360.690 Sensors-Accelerometer.AccX 3865.000000 +78:361.215 Sensors-Accelerometer.AccY -13107.000000 +78:361.776 Sensors-Accelerometer.AccZ 5295.000000 +78:400.683 Sensors-Magnetometer.MagX 379.000000 +78:401.175 Sensors-Magnetometer.MagY 170.000000 +78:401.662 Sensors-Magnetometer.MagZ -406.000000 +78:402.193 Sensors-Accelerometer.AccX 7634.000000 +78:402.717 Sensors-Accelerometer.AccY -32764.000000 +78:403.271 Sensors-Accelerometer.AccZ 4574.000000 +78:440.690 Sensors-Accelerometer.AccX -3981.000000 +78:441.215 Sensors-Accelerometer.AccY -27134.000000 +78:441.764 Sensors-Accelerometer.AccZ -794.000000 +78:450.683 Sensors-Magnetometer.MagX 431.000000 +78:451.180 Sensors-Magnetometer.MagY 73.000000 +78:451.651 Sensors-Magnetometer.MagZ -363.000000 +78:480.690 Sensors-Accelerometer.AccX -21800.000000 +78:481.231 Sensors-Accelerometer.AccY -2013.000000 +78:481.754 Sensors-Accelerometer.AccZ -101.000000 +78:500.683 Sensors-Magnetometer.MagX 464.000000 +78:501.171 Sensors-Magnetometer.MagY -119.000000 +78:501.664 Sensors-Magnetometer.MagZ -269.000000 +78:520.690 Sensors-Accelerometer.AccX -18216.000000 +78:521.239 Sensors-Accelerometer.AccY 29612.000000 +78:521.789 Sensors-Accelerometer.AccZ 10420.000000 +78:550.683 Sensors-Magnetometer.MagX 428.000000 +78:551.179 Sensors-Magnetometer.MagY -282.000000 +78:551.673 Sensors-Magnetometer.MagZ -226.000000 +78:560.690 Sensors-Accelerometer.AccX -8335.000000 +78:561.221 Sensors-Accelerometer.AccY 32061.000000 +78:561.774 Sensors-Accelerometer.AccZ 9124.000000 +78:600.683 Sensors-Magnetometer.MagX 400.000000 +78:601.173 Sensors-Magnetometer.MagY -206.000000 +78:601.667 Sensors-Magnetometer.MagZ -335.000000 +78:602.203 Sensors-Accelerometer.AccX -4116.000000 +78:602.724 Sensors-Accelerometer.AccY 9612.000000 +78:603.250 Sensors-Accelerometer.AccZ 6008.000000 +78:640.690 Sensors-Accelerometer.AccX 1871.000000 +78:641.218 Sensors-Accelerometer.AccY -15223.000000 +78:641.774 Sensors-Accelerometer.AccZ 3834.000000 +78:650.684 Sensors-Magnetometer.MagX 385.000000 +78:651.177 Sensors-Magnetometer.MagY 60.000000 +78:651.643 Sensors-Magnetometer.MagZ -413.000000 +78:680.690 Sensors-Accelerometer.AccX 4436.000000 +78:681.207 Sensors-Accelerometer.AccY -32764.000000 +78:681.761 Sensors-Accelerometer.AccZ 6654.000000 +78:700.683 Sensors-Magnetometer.MagX 376.000000 +78:701.178 Sensors-Magnetometer.MagY 206.000000 +78:701.668 Sensors-Magnetometer.MagZ -409.000000 +78:720.690 Sensors-Accelerometer.AccX 1722.000000 +78:721.200 Sensors-Accelerometer.AccY -32192.000000 +78:721.741 Sensors-Accelerometer.AccZ 4729.000000 +78:750.683 Sensors-Magnetometer.MagX 426.000000 +78:751.169 Sensors-Magnetometer.MagY 85.000000 +78:751.633 Sensors-Magnetometer.MagZ -366.000000 +78:760.690 Sensors-Accelerometer.AccX -10145.000000 +78:761.236 Sensors-Accelerometer.AccY -14160.000000 +78:761.774 Sensors-Accelerometer.AccZ 6990.000000 +78:800.683 Sensors-Magnetometer.MagX 440.000000 +78:801.172 Sensors-Magnetometer.MagY -113.000000 +78:801.662 Sensors-Magnetometer.MagZ -325.000000 +78:802.194 Sensors-Accelerometer.AccX -15989.000000 +78:802.746 Sensors-Accelerometer.AccY 8278.000000 +78:803.271 Sensors-Accelerometer.AccZ 9735.000000 +78:840.690 Sensors-Accelerometer.AccX -13664.000000 +78:841.232 Sensors-Accelerometer.AccY 22167.000000 +78:841.782 Sensors-Accelerometer.AccZ 12722.000000 +78:850.684 Sensors-Magnetometer.MagX 429.000000 +78:851.172 Sensors-Magnetometer.MagY -213.000000 +78:851.656 Sensors-Magnetometer.MagZ -306.000000 +78:880.690 Sensors-Accelerometer.AccX -10258.000000 +78:881.230 Sensors-Accelerometer.AccY 17722.000000 +78:881.772 Sensors-Accelerometer.AccZ 10451.000000 +78:900.683 Sensors-Magnetometer.MagX 405.000000 +78:901.175 Sensors-Magnetometer.MagY -135.000000 +78:901.667 Sensors-Magnetometer.MagZ -385.000000 +78:920.690 Sensors-Accelerometer.AccX -3702.000000 +78:921.210 Sensors-Accelerometer.AccY 2542.000000 +78:921.732 Sensors-Accelerometer.AccZ 8254.000000 +78:950.683 Sensors-Magnetometer.MagX 358.000000 +78:951.175 Sensors-Magnetometer.MagY 86.000000 +78:951.644 Sensors-Magnetometer.MagZ -439.000000 +78:960.690 Sensors-Accelerometer.AccX 1866.000000 +78:961.208 Sensors-Accelerometer.AccY -11038.000000 +78:961.755 Sensors-Accelerometer.AccZ 7473.000000 +79:000.683 Sensors-Magnetometer.MagX 321.000000 +79:001.178 Sensors-Magnetometer.MagY 271.000000 +79:001.673 Sensors-Magnetometer.MagZ -434.000000 +79:002.201 Sensors-Accelerometer.AccX 1406.000000 +79:002.719 Sensors-Accelerometer.AccY -20799.000000 +79:003.274 Sensors-Accelerometer.AccZ 7024.000000 +79:040.690 Sensors-Accelerometer.AccX 1197.000000 +79:041.209 Sensors-Accelerometer.AccY -18289.000000 +79:041.756 Sensors-Accelerometer.AccZ 9248.000000 +79:050.684 Sensors-Magnetometer.MagX 308.000000 +79:051.178 Sensors-Magnetometer.MagY 322.000000 +79:051.672 Sensors-Magnetometer.MagZ -424.000000 +79:080.690 Sensors-Accelerometer.AccX -6216.000000 +79:081.212 Sensors-Accelerometer.AccY -11989.000000 +79:081.760 Sensors-Accelerometer.AccZ 9462.000000 +79:120.690 Sensors-Accelerometer.AccX -12163.000000 +79:121.242 Sensors-Accelerometer.AccY -13549.000000 +79:121.787 Sensors-Accelerometer.AccZ 11906.000000 +79:150.683 Sensors-Magnetometer.MagX 360.000000 +79:151.175 Sensors-Magnetometer.MagY 234.000000 +79:151.669 Sensors-Magnetometer.MagZ -400.000000 +79:160.690 Sensors-Accelerometer.AccX -9209.000000 +79:161.217 Sensors-Accelerometer.AccY -12347.000000 +79:161.765 Sensors-Accelerometer.AccZ 11050.000000 +79:200.683 Sensors-Magnetometer.MagX 325.000000 +79:201.178 Sensors-Magnetometer.MagY 183.000000 +79:201.674 Sensors-Magnetometer.MagZ -458.000000 +79:202.205 Sensors-Accelerometer.AccX -4587.000000 +79:202.737 Sensors-Accelerometer.AccY -4210.000000 +79:203.256 Sensors-Accelerometer.AccZ 11907.000000 +79:240.690 Sensors-Accelerometer.AccX -1027.000000 +79:241.210 Sensors-Accelerometer.AccY -1570.000000 +79:241.731 Sensors-Accelerometer.AccZ 12958.000000 +79:280.690 Sensors-Accelerometer.AccX 9840.000000 +79:281.211 Sensors-Accelerometer.AccY 5644.000000 +79:281.732 Sensors-Accelerometer.AccZ 13823.000000 +79:300.683 Sensors-Magnetometer.MagX 378.000000 +79:301.175 Sensors-Magnetometer.MagY 106.000000 +79:301.662 Sensors-Magnetometer.MagZ -414.000000 +79:320.690 Sensors-Accelerometer.AccX 3366.000000 +79:321.209 Sensors-Accelerometer.AccY 214.000000 +79:321.701 Sensors-Accelerometer.AccZ 7384.000000 +79:350.683 Sensors-Magnetometer.MagX 451.000000 +79:351.179 Sensors-Magnetometer.MagY 21.000000 +79:351.644 Sensors-Magnetometer.MagZ -305.000000 +79:360.690 Sensors-Accelerometer.AccX -13068.000000 +79:361.234 Sensors-Accelerometer.AccY -4910.000000 +79:361.758 Sensors-Accelerometer.AccZ 4338.000000 +79:400.683 Sensors-Magnetometer.MagX 488.000000 +79:401.173 Sensors-Magnetometer.MagY -66.000000 +79:401.636 Sensors-Magnetometer.MagZ -229.000000 +79:402.165 Sensors-Accelerometer.AccX -22830.000000 +79:402.716 Sensors-Accelerometer.AccY -5894.000000 +79:403.241 Sensors-Accelerometer.AccZ 7019.000000 +79:440.690 Sensors-Accelerometer.AccX -22057.000000 +79:441.236 Sensors-Accelerometer.AccY -5714.000000 +79:441.760 Sensors-Accelerometer.AccZ 8764.000000 +79:480.690 Sensors-Accelerometer.AccX -23159.000000 +79:481.240 Sensors-Accelerometer.AccY -1553.000000 +79:481.760 Sensors-Accelerometer.AccZ 8555.000000 +79:520.690 Sensors-Accelerometer.AccX -12520.000000 +79:521.232 Sensors-Accelerometer.AccY 4727.000000 +79:521.755 Sensors-Accelerometer.AccZ 9700.000000 +79:550.683 Sensors-Magnetometer.MagX 410.000000 +79:551.175 Sensors-Magnetometer.MagY -75.000000 +79:551.649 Sensors-Magnetometer.MagZ -359.000000 +79:560.690 Sensors-Accelerometer.AccX -5068.000000 +79:561.216 Sensors-Accelerometer.AccY 3085.000000 +79:561.738 Sensors-Accelerometer.AccZ 8425.000000 +79:600.683 Sensors-Magnetometer.MagX 373.000000 +79:601.176 Sensors-Magnetometer.MagY 34.000000 +79:601.640 Sensors-Magnetometer.MagZ -407.000000 +79:602.174 Sensors-Accelerometer.AccX -2591.000000 +79:602.699 Sensors-Accelerometer.AccY -5907.000000 +79:603.226 Sensors-Accelerometer.AccZ 8037.000000 +79:640.690 Sensors-Accelerometer.AccX -9222.000000 +79:641.217 Sensors-Accelerometer.AccY -11397.000000 +79:641.769 Sensors-Accelerometer.AccZ 5515.000000 +79:680.690 Sensors-Accelerometer.AccX -14931.000000 +79:681.240 Sensors-Accelerometer.AccY -22505.000000 +79:681.790 Sensors-Accelerometer.AccZ 6303.000000 +79:720.690 Sensors-Accelerometer.AccX -15766.000000 +79:721.241 Sensors-Accelerometer.AccY -19310.000000 +79:721.792 Sensors-Accelerometer.AccZ 6576.000000 +79:750.683 Sensors-Magnetometer.MagX 265.000000 +79:751.175 Sensors-Magnetometer.MagY -179.000000 +79:751.671 Sensors-Magnetometer.MagZ -431.000000 +79:760.690 Sensors-Accelerometer.AccX -11564.000000 +79:761.236 Sensors-Accelerometer.AccY -9726.000000 +79:761.766 Sensors-Accelerometer.AccZ 6185.000000 +79:800.683 Sensors-Magnetometer.MagX 87.000000 +79:801.152 Sensors-Magnetometer.MagY -425.000000 +79:801.646 Sensors-Magnetometer.MagZ -368.000000 +79:802.173 Sensors-Accelerometer.AccX -4198.000000 +79:802.694 Sensors-Accelerometer.AccY 6095.000000 +79:803.220 Sensors-Accelerometer.AccZ 8792.000000 +79:840.690 Sensors-Accelerometer.AccX -4095.000000 +79:841.220 Sensors-Accelerometer.AccY 10948.000000 +79:841.764 Sensors-Accelerometer.AccZ 9447.000000 +79:850.683 Sensors-Magnetometer.MagX -174.000000 +79:851.178 Sensors-Magnetometer.MagY -510.000000 +79:851.680 Sensors-Magnetometer.MagZ -318.000000 +79:880.690 Sensors-Accelerometer.AccX 3772.000000 +79:881.214 Sensors-Accelerometer.AccY 7472.000000 +79:881.733 Sensors-Accelerometer.AccZ 8813.000000 +79:900.683 Sensors-Magnetometer.MagX -487.000000 +79:901.182 Sensors-Magnetometer.MagY -469.000000 +79:901.676 Sensors-Magnetometer.MagZ -198.000000 +79:920.690 Sensors-Accelerometer.AccX 9930.000000 +79:921.218 Sensors-Accelerometer.AccY 11239.000000 +79:921.771 Sensors-Accelerometer.AccZ 6738.000000 +79:950.683 Sensors-Magnetometer.MagX -686.000000 +79:951.182 Sensors-Magnetometer.MagY -351.000000 +79:951.683 Sensors-Magnetometer.MagZ -70.000000 +79:960.690 Sensors-Accelerometer.AccX 7927.000000 +79:961.220 Sensors-Accelerometer.AccY 9615.000000 +79:961.749 Sensors-Accelerometer.AccZ 7298.000000 +80:000.683 Sensors-Magnetometer.MagX -753.000000 +80:001.175 Sensors-Magnetometer.MagY -276.000000 +80:001.659 Sensors-Magnetometer.MagZ 29.000000 +80:002.154 Sensors-Accelerometer.AccX 14757.000000 +80:002.697 Sensors-Accelerometer.AccY 11252.000000 +80:003.236 Sensors-Accelerometer.AccZ 5256.000000 +80:040.690 Sensors-Accelerometer.AccX 17177.000000 +80:041.233 Sensors-Accelerometer.AccY 9902.000000 +80:041.756 Sensors-Accelerometer.AccZ 3843.000000 +80:050.684 Sensors-Magnetometer.MagX -831.000000 +80:051.178 Sensors-Magnetometer.MagY -125.000000 +80:051.670 Sensors-Magnetometer.MagZ 162.000000 +80:080.690 Sensors-Accelerometer.AccX 20850.000000 +80:081.232 Sensors-Accelerometer.AccY 6399.000000 +80:081.756 Sensors-Accelerometer.AccZ 348.000000 +80:100.683 Sensors-Magnetometer.MagX -842.000000 +80:101.172 Sensors-Magnetometer.MagY 78.000000 +80:101.639 Sensors-Magnetometer.MagZ 275.000000 +80:120.690 Sensors-Accelerometer.AccX 23736.000000 +80:121.237 Sensors-Accelerometer.AccY 3338.000000 +80:121.757 Sensors-Accelerometer.AccZ 266.000000 +80:150.683 Sensors-Magnetometer.MagX -814.000000 +80:151.180 Sensors-Magnetometer.MagY 239.000000 +80:151.677 Sensors-Magnetometer.MagZ 328.000000 +80:160.690 Sensors-Accelerometer.AccX 21453.000000 +80:161.237 Sensors-Accelerometer.AccY -178.000000 +80:161.726 Sensors-Accelerometer.AccZ -335.000000 +80:200.683 Sensors-Magnetometer.MagX -792.000000 +80:201.176 Sensors-Magnetometer.MagY 350.000000 +80:201.668 Sensors-Magnetometer.MagZ 352.000000 +80:202.190 Sensors-Accelerometer.AccX 23054.000000 +80:202.739 Sensors-Accelerometer.AccY -3706.000000 +80:203.258 Sensors-Accelerometer.AccZ -387.000000 +80:240.690 Sensors-Accelerometer.AccX 16336.000000 +80:241.232 Sensors-Accelerometer.AccY -4200.000000 +80:241.744 Sensors-Accelerometer.AccZ 2208.000000 +80:250.684 Sensors-Magnetometer.MagX -782.000000 +80:251.183 Sensors-Magnetometer.MagY 425.000000 +80:251.675 Sensors-Magnetometer.MagZ 324.000000 +80:280.690 Sensors-Accelerometer.AccX 18593.000000 +80:281.240 Sensors-Accelerometer.AccY -2993.000000 +80:281.765 Sensors-Accelerometer.AccZ 2336.000000 +80:300.683 Sensors-Magnetometer.MagX -757.000000 +80:301.178 Sensors-Magnetometer.MagY 501.000000 +80:301.673 Sensors-Magnetometer.MagZ 306.000000 +80:320.690 Sensors-Accelerometer.AccX 15863.000000 +80:321.236 Sensors-Accelerometer.AccY -3177.000000 +80:321.758 Sensors-Accelerometer.AccZ 3709.000000 +80:350.684 Sensors-Magnetometer.MagX -756.000000 +80:351.177 Sensors-Magnetometer.MagY 534.000000 +80:351.672 Sensors-Magnetometer.MagZ 244.000000 +80:360.690 Sensors-Accelerometer.AccX 8354.000000 +80:361.213 Sensors-Accelerometer.AccY -3274.000000 +80:361.736 Sensors-Accelerometer.AccZ 5792.000000 +80:400.725 Sensors-Accelerometer.AccX 9414.000000 +80:401.250 Sensors-Accelerometer.AccY -2741.000000 +80:401.769 Sensors-Accelerometer.AccZ 5361.000000 +80:440.690 Sensors-Accelerometer.AccX 10743.000000 +80:441.234 Sensors-Accelerometer.AccY 2472.000000 +80:441.752 Sensors-Accelerometer.AccZ 4002.000000 +80:450.684 Sensors-Magnetometer.MagX -858.000000 +80:451.174 Sensors-Magnetometer.MagY 362.000000 +80:451.665 Sensors-Magnetometer.MagZ 147.000000 +80:480.690 Sensors-Accelerometer.AccX 12585.000000 +80:481.232 Sensors-Accelerometer.AccY 3829.000000 +80:481.755 Sensors-Accelerometer.AccZ 1904.000000 +80:500.683 Sensors-Magnetometer.MagX -872.000000 +80:501.172 Sensors-Magnetometer.MagY 87.000000 +80:501.639 Sensors-Magnetometer.MagZ 170.000000 +80:520.690 Sensors-Accelerometer.AccX 18917.000000 +80:521.237 Sensors-Accelerometer.AccY 19384.000000 +80:521.784 Sensors-Accelerometer.AccZ 1694.000000 +80:550.683 Sensors-Magnetometer.MagX -736.000000 +80:551.173 Sensors-Magnetometer.MagY -299.000000 +80:551.671 Sensors-Magnetometer.MagZ 180.000000 +80:560.690 Sensors-Accelerometer.AccX 4320.000000 +80:561.207 Sensors-Accelerometer.AccY 10322.000000 +80:561.748 Sensors-Accelerometer.AccZ 1339.000000 +80:600.683 Sensors-Magnetometer.MagX -404.000000 +80:601.175 Sensors-Magnetometer.MagY -573.000000 +80:601.675 Sensors-Magnetometer.MagZ 246.000000 +80:602.203 Sensors-Accelerometer.AccX -4891.000000 +80:602.729 Sensors-Accelerometer.AccY 20429.000000 +80:603.281 Sensors-Accelerometer.AccZ 1064.000000 +80:640.690 Sensors-Accelerometer.AccX -1686.000000 +80:641.202 Sensors-Accelerometer.AccY 22855.000000 +80:641.752 Sensors-Accelerometer.AccZ 644.000000 +80:650.683 Sensors-Magnetometer.MagX -121.000000 +80:651.172 Sensors-Magnetometer.MagY -603.000000 +80:651.667 Sensors-Magnetometer.MagZ 341.000000 +80:680.690 Sensors-Accelerometer.AccX -12417.000000 +80:681.238 Sensors-Accelerometer.AccY 18002.000000 +80:681.784 Sensors-Accelerometer.AccZ 3029.000000 +80:700.683 Sensors-Magnetometer.MagX 203.000000 +80:701.178 Sensors-Magnetometer.MagY -534.000000 +80:701.672 Sensors-Magnetometer.MagZ 329.000000 +80:720.690 Sensors-Accelerometer.AccX -6975.000000 +80:721.211 Sensors-Accelerometer.AccY 7217.000000 +80:721.731 Sensors-Accelerometer.AccZ 3161.000000 +80:750.683 Sensors-Magnetometer.MagX 439.000000 +80:751.181 Sensors-Magnetometer.MagY -346.000000 +80:751.676 Sensors-Magnetometer.MagZ 312.000000 +80:760.690 Sensors-Accelerometer.AccX -13089.000000 +80:761.240 Sensors-Accelerometer.AccY -382.000000 +80:761.736 Sensors-Accelerometer.AccZ 914.000000 +80:800.683 Sensors-Magnetometer.MagX 494.000000 +80:801.174 Sensors-Magnetometer.MagY -182.000000 +80:801.665 Sensors-Magnetometer.MagZ 362.000000 +80:802.190 Sensors-Accelerometer.AccX -13327.000000 +80:802.738 Sensors-Accelerometer.AccY -1514.000000 +80:803.255 Sensors-Accelerometer.AccZ -947.000000 +80:840.690 Sensors-Accelerometer.AccX -13669.000000 +80:841.237 Sensors-Accelerometer.AccY -1626.000000 +80:841.756 Sensors-Accelerometer.AccZ 100.000000 +80:850.684 Sensors-Magnetometer.MagX 486.000000 +80:851.179 Sensors-Magnetometer.MagY -142.000000 +80:851.674 Sensors-Magnetometer.MagZ 419.000000 +80:880.690 Sensors-Accelerometer.AccX -16841.000000 +80:881.233 Sensors-Accelerometer.AccY 1760.000000 +80:881.749 Sensors-Accelerometer.AccZ -1636.000000 +80:900.683 Sensors-Magnetometer.MagX 467.000000 +80:901.175 Sensors-Magnetometer.MagY -83.000000 +80:901.641 Sensors-Magnetometer.MagZ 457.000000 +80:920.690 Sensors-Accelerometer.AccX -16641.000000 +80:921.235 Sensors-Accelerometer.AccY -38.000000 +80:921.706 Sensors-Accelerometer.AccZ -2493.000000 +80:950.683 Sensors-Magnetometer.MagX 493.000000 +80:951.175 Sensors-Magnetometer.MagY -50.000000 +80:951.640 Sensors-Magnetometer.MagZ 447.000000 +80:960.690 Sensors-Accelerometer.AccX -19505.000000 +80:961.236 Sensors-Accelerometer.AccY 1933.000000 +80:961.755 Sensors-Accelerometer.AccZ -1443.000000 +81:000.683 Sensors-Magnetometer.MagX 542.000000 +81:001.176 Sensors-Magnetometer.MagY 13.000000 +81:001.640 Sensors-Magnetometer.MagZ 372.000000 +81:002.165 Sensors-Accelerometer.AccX -9336.000000 +81:002.689 Sensors-Accelerometer.AccY 5973.000000 +81:003.211 Sensors-Accelerometer.AccZ 617.000000 +81:040.690 Sensors-Accelerometer.AccX -14093.000000 +81:041.232 Sensors-Accelerometer.AccY -7381.000000 +81:041.752 Sensors-Accelerometer.AccZ 1273.000000 +81:050.684 Sensors-Magnetometer.MagX 557.000000 +81:051.181 Sensors-Magnetometer.MagY 47.000000 +81:051.653 Sensors-Magnetometer.MagZ 301.000000 +81:080.690 Sensors-Accelerometer.AccX -10075.000000 +81:081.242 Sensors-Accelerometer.AccY -8626.000000 +81:081.766 Sensors-Accelerometer.AccZ 652.000000 +81:120.690 Sensors-Accelerometer.AccX -16836.000000 +81:121.231 Sensors-Accelerometer.AccY -5981.000000 +81:121.753 Sensors-Accelerometer.AccZ 1435.000000 +81:150.683 Sensors-Magnetometer.MagX 544.000000 +81:151.173 Sensors-Magnetometer.MagY -25.000000 +81:151.643 Sensors-Magnetometer.MagZ 302.000000 +81:160.690 Sensors-Accelerometer.AccX -14157.000000 +81:161.236 Sensors-Accelerometer.AccY -4109.000000 +81:161.759 Sensors-Accelerometer.AccZ 139.000000 +81:200.725 Sensors-Accelerometer.AccX -17017.000000 +81:201.273 Sensors-Accelerometer.AccY -420.000000 +81:201.763 Sensors-Accelerometer.AccZ -652.000000 +81:240.690 Sensors-Accelerometer.AccX -17254.000000 +81:241.240 Sensors-Accelerometer.AccY -811.000000 +81:241.746 Sensors-Accelerometer.AccZ -1665.000000 +81:250.684 Sensors-Magnetometer.MagX 495.000000 +81:251.184 Sensors-Magnetometer.MagY -143.000000 +81:251.683 Sensors-Magnetometer.MagZ 363.000000 +81:280.690 Sensors-Accelerometer.AccX -17170.000000 +81:281.237 Sensors-Accelerometer.AccY -1100.000000 +81:281.755 Sensors-Accelerometer.AccZ -2286.000000 +81:300.683 Sensors-Magnetometer.MagX 459.000000 +81:301.177 Sensors-Magnetometer.MagY -201.000000 +81:301.670 Sensors-Magnetometer.MagZ 377.000000 +81:320.690 Sensors-Accelerometer.AccX -17978.000000 +81:321.236 Sensors-Accelerometer.AccY 5.000000 +81:321.676 Sensors-Accelerometer.AccZ -2117.000000 +81:360.690 Sensors-Accelerometer.AccX -16508.000000 +81:361.236 Sensors-Accelerometer.AccY 1771.000000 +81:361.758 Sensors-Accelerometer.AccZ -2396.000000 +81:400.725 Sensors-Accelerometer.AccX -15949.000000 +81:401.277 Sensors-Accelerometer.AccY 1517.000000 +81:401.801 Sensors-Accelerometer.AccZ -2409.000000 +81:440.690 Sensors-Accelerometer.AccX -15354.000000 +81:441.240 Sensors-Accelerometer.AccY 1158.000000 +81:441.759 Sensors-Accelerometer.AccZ -2600.000000 +81:480.690 Sensors-Accelerometer.AccX -14648.000000 +81:481.237 Sensors-Accelerometer.AccY -251.000000 +81:481.736 Sensors-Accelerometer.AccZ -2456.000000 +81:520.690 Sensors-Accelerometer.AccX -15066.000000 +81:521.240 Sensors-Accelerometer.AccY -251.000000 +81:521.737 Sensors-Accelerometer.AccZ -2159.000000 +81:560.690 Sensors-Accelerometer.AccX -15861.000000 +81:561.243 Sensors-Accelerometer.AccY -777.000000 +81:561.744 Sensors-Accelerometer.AccZ -2166.000000 +81:600.725 Sensors-Accelerometer.AccX -15341.000000 +81:601.273 Sensors-Accelerometer.AccY -386.000000 +81:601.768 Sensors-Accelerometer.AccZ -1981.000000 +81:680.690 Sensors-Accelerometer.AccX -15104.000000 +81:681.228 Sensors-Accelerometer.AccY -261.000000 +81:681.722 Sensors-Accelerometer.AccZ -1958.000000 +81:720.690 Sensors-Accelerometer.AccX -15083.000000 +81:721.245 Sensors-Accelerometer.AccY -583.000000 +81:721.745 Sensors-Accelerometer.AccZ -2068.000000 +81:760.690 Sensors-Accelerometer.AccX -15124.000000 +81:761.237 Sensors-Accelerometer.AccY -97.000000 +81:761.707 Sensors-Accelerometer.AccZ -2126.000000 +81:800.725 Sensors-Accelerometer.AccX -15054.000000 +81:801.277 Sensors-Accelerometer.AccY -338.000000 +81:801.770 Sensors-Accelerometer.AccZ -2121.000000 +81:840.690 Sensors-Accelerometer.AccX -15298.000000 +81:841.242 Sensors-Accelerometer.AccY -279.000000 +81:841.739 Sensors-Accelerometer.AccZ -2106.000000 +81:880.690 Sensors-Accelerometer.AccX -15604.000000 +81:881.240 Sensors-Accelerometer.AccY -57.000000 +81:881.713 Sensors-Accelerometer.AccZ -2049.000000 +81:920.690 Sensors-Accelerometer.AccX -15435.000000 +81:921.234 Sensors-Accelerometer.AccY -521.000000 +81:921.723 Sensors-Accelerometer.AccZ -2053.000000 +81:960.690 Sensors-Accelerometer.AccX -15041.000000 +81:961.235 Sensors-Accelerometer.AccY -276.000000 +81:961.719 Sensors-Accelerometer.AccZ -1972.000000 +82:000.725 Sensors-Accelerometer.AccX -14825.000000 +82:001.267 Sensors-Accelerometer.AccY -184.000000 +82:001.752 Sensors-Accelerometer.AccZ -2108.000000 +82:040.690 Sensors-Accelerometer.AccX -15275.000000 +82:041.240 Sensors-Accelerometer.AccY -161.000000 +82:041.728 Sensors-Accelerometer.AccZ -2167.000000 +82:080.690 Sensors-Accelerometer.AccX -15032.000000 +82:081.235 Sensors-Accelerometer.AccY -497.000000 +82:081.727 Sensors-Accelerometer.AccZ -2125.000000 +82:120.690 Sensors-Accelerometer.AccX -15478.000000 +82:121.236 Sensors-Accelerometer.AccY -340.000000 +82:121.723 Sensors-Accelerometer.AccZ -2118.000000 +82:200.725 Sensors-Accelerometer.AccX -15051.000000 +82:201.276 Sensors-Accelerometer.AccY -168.000000 +82:201.759 Sensors-Accelerometer.AccZ -1904.000000 +82:240.690 Sensors-Accelerometer.AccX -15174.000000 +82:241.238 Sensors-Accelerometer.AccY -455.000000 +82:241.731 Sensors-Accelerometer.AccZ -2020.000000 +82:280.690 Sensors-Accelerometer.AccX -15021.000000 +82:281.236 Sensors-Accelerometer.AccY -227.000000 +82:281.729 Sensors-Accelerometer.AccZ -1947.000000 +82:320.690 Sensors-Accelerometer.AccX -15395.000000 +82:321.240 Sensors-Accelerometer.AccY -372.000000 +82:321.729 Sensors-Accelerometer.AccZ -2048.000000 +82:400.725 Sensors-Accelerometer.AccX -15200.000000 +82:401.267 Sensors-Accelerometer.AccY -144.000000 +82:401.754 Sensors-Accelerometer.AccZ -1988.000000 +82:480.690 Sensors-Accelerometer.AccX -15274.000000 +82:481.233 Sensors-Accelerometer.AccY -467.000000 +82:481.726 Sensors-Accelerometer.AccZ -1974.000000 +82:520.690 Sensors-Accelerometer.AccX -15540.000000 +82:521.236 Sensors-Accelerometer.AccY -327.000000 +82:521.735 Sensors-Accelerometer.AccZ -2012.000000 +82:560.690 Sensors-Accelerometer.AccX -15246.000000 +82:561.236 Sensors-Accelerometer.AccY -227.000000 +82:561.728 Sensors-Accelerometer.AccZ -2036.000000 +82:640.690 Sensors-Accelerometer.AccX -14964.000000 +82:641.230 Sensors-Accelerometer.AccY -293.000000 +82:641.722 Sensors-Accelerometer.AccZ -2031.000000 +82:760.690 Sensors-Accelerometer.AccX -15297.000000 +82:761.238 Sensors-Accelerometer.AccY -76.000000 +82:761.705 Sensors-Accelerometer.AccZ -1918.000000 +82:840.690 Sensors-Accelerometer.AccX -15539.000000 +82:841.242 Sensors-Accelerometer.AccY -113.000000 +82:841.734 Sensors-Accelerometer.AccZ -1992.000000 +82:920.690 Sensors-Accelerometer.AccX -15145.000000 +82:921.238 Sensors-Accelerometer.AccY -129.000000 +82:921.729 Sensors-Accelerometer.AccZ -1981.000000 +83:200.725 Sensors-Accelerometer.AccX -15468.000000 +83:201.265 Sensors-Accelerometer.AccY -252.000000 +83:201.752 Sensors-Accelerometer.AccZ -1963.000000 +83:240.690 Sensors-Accelerometer.AccX -15227.000000 +83:241.237 Sensors-Accelerometer.AccY -79.000000 +83:241.704 Sensors-Accelerometer.AccZ -1977.000000 +83:360.690 Sensors-Accelerometer.AccX -15015.000000 +83:361.238 Sensors-Accelerometer.AccY -192.000000 +83:361.723 Sensors-Accelerometer.AccZ -1990.000000 +83:400.683 Sensors-Magnetometer.MagX 440.000000 +83:401.172 Sensors-Magnetometer.MagY -212.000000 +83:401.659 Sensors-Magnetometer.MagZ 383.000000 +83:480.690 Sensors-Accelerometer.AccX -15439.000000 +83:481.240 Sensors-Accelerometer.AccY -39.000000 +83:481.708 Sensors-Accelerometer.AccZ -2128.000000 +83:560.690 Sensors-Accelerometer.AccX -15135.000000 +83:561.238 Sensors-Accelerometer.AccY -200.000000 +83:561.722 Sensors-Accelerometer.AccZ -2082.000000 +83:720.690 Sensors-Accelerometer.AccX -15127.000000 +83:721.241 Sensors-Accelerometer.AccY 7.000000 +83:721.683 Sensors-Accelerometer.AccZ -1950.000000 +83:760.690 Sensors-Accelerometer.AccX -15442.000000 +83:761.234 Sensors-Accelerometer.AccY -14.000000 +83:761.700 Sensors-Accelerometer.AccZ -2013.000000 +83:800.725 Sensors-Accelerometer.AccX -15171.000000 +83:801.279 Sensors-Accelerometer.AccY -71.000000 +83:801.752 Sensors-Accelerometer.AccZ -1980.000000 +83:840.690 Sensors-Accelerometer.AccX -15300.000000 +83:841.237 Sensors-Accelerometer.AccY -306.000000 +83:841.731 Sensors-Accelerometer.AccZ -1993.000000 +83:880.690 Sensors-Accelerometer.AccX -15131.000000 +83:881.241 Sensors-Accelerometer.AccY -81.000000 +83:881.709 Sensors-Accelerometer.AccZ -1947.000000 +83:920.690 Sensors-Accelerometer.AccX -15037.000000 +83:921.238 Sensors-Accelerometer.AccY 200.000000 +83:921.722 Sensors-Accelerometer.AccZ -2072.000000 +83:960.690 Sensors-Accelerometer.AccX -15276.000000 +83:961.240 Sensors-Accelerometer.AccY -35.000000 +83:961.709 Sensors-Accelerometer.AccZ -2072.000000 +84:120.690 Sensors-Accelerometer.AccX -15062.000000 +84:121.240 Sensors-Accelerometer.AccY 25.000000 +84:121.703 Sensors-Accelerometer.AccZ -2074.000000 +84:160.690 Sensors-Accelerometer.AccX -15509.000000 +84:161.236 Sensors-Accelerometer.AccY 244.000000 +84:161.723 Sensors-Accelerometer.AccZ -2153.000000 +84:200.725 Sensors-Accelerometer.AccX -15203.000000 +84:201.277 Sensors-Accelerometer.AccY 862.000000 +84:201.769 Sensors-Accelerometer.AccZ -2290.000000 +84:240.690 Sensors-Accelerometer.AccX -15879.000000 +84:241.237 Sensors-Accelerometer.AccY 732.000000 +84:241.730 Sensors-Accelerometer.AccZ -2244.000000 +84:280.690 Sensors-Accelerometer.AccX -15243.000000 +84:281.239 Sensors-Accelerometer.AccY 819.000000 +84:281.738 Sensors-Accelerometer.AccZ -2136.000000 +84:360.690 Sensors-Accelerometer.AccX -15069.000000 +84:361.240 Sensors-Accelerometer.AccY 508.000000 +84:361.732 Sensors-Accelerometer.AccZ -2187.000000 +84:480.690 Sensors-Accelerometer.AccX -15393.000000 +84:481.232 Sensors-Accelerometer.AccY 724.000000 +84:481.717 Sensors-Accelerometer.AccZ -2227.000000 +84:520.690 Sensors-Accelerometer.AccX -15316.000000 +84:521.235 Sensors-Accelerometer.AccY 929.000000 +84:521.726 Sensors-Accelerometer.AccZ -2262.000000 +84:640.690 Sensors-Accelerometer.AccX -15061.000000 +84:641.233 Sensors-Accelerometer.AccY 930.000000 +84:641.722 Sensors-Accelerometer.AccZ -2296.000000 +84:680.690 Sensors-Accelerometer.AccX -15402.000000 +84:681.232 Sensors-Accelerometer.AccY 865.000000 +84:681.726 Sensors-Accelerometer.AccZ -2245.000000 +84:800.725 Sensors-Accelerometer.AccX -15137.000000 +84:801.269 Sensors-Accelerometer.AccY 809.000000 +84:801.759 Sensors-Accelerometer.AccZ -2262.000000 +85:000.725 Sensors-Accelerometer.AccX -15307.000000 +85:001.276 Sensors-Accelerometer.AccY 1051.000000 +85:001.791 Sensors-Accelerometer.AccZ -2179.000000 +85:080.690 Sensors-Accelerometer.AccX -15289.000000 +85:081.238 Sensors-Accelerometer.AccY 694.000000 +85:081.734 Sensors-Accelerometer.AccZ -2092.000000 +85:200.725 Sensors-Accelerometer.AccX -15054.000000 +85:201.268 Sensors-Accelerometer.AccY 795.000000 +85:201.760 Sensors-Accelerometer.AccZ -2249.000000 +85:240.690 Sensors-Accelerometer.AccX -15283.000000 +85:241.235 Sensors-Accelerometer.AccY 860.000000 +85:241.725 Sensors-Accelerometer.AccZ -2250.000000 +85:480.690 Sensors-Accelerometer.AccX -15437.000000 +85:481.239 Sensors-Accelerometer.AccY 659.000000 +85:481.733 Sensors-Accelerometer.AccZ -2162.000000 +85:600.725 Sensors-Accelerometer.AccX -15051.000000 +85:601.275 Sensors-Accelerometer.AccY 605.000000 +85:601.770 Sensors-Accelerometer.AccZ -2219.000000 +85:720.690 Sensors-Accelerometer.AccX -15483.000000 +85:721.237 Sensors-Accelerometer.AccY 880.000000 +85:721.729 Sensors-Accelerometer.AccZ -2230.000000 +85:800.725 Sensors-Accelerometer.AccX -15219.000000 +85:801.276 Sensors-Accelerometer.AccY 698.000000 +85:801.764 Sensors-Accelerometer.AccZ -2074.000000 +85:850.683 Sensors-Magnetometer.MagX 428.000000 +85:851.174 Sensors-Magnetometer.MagY -233.000000 +85:851.667 Sensors-Magnetometer.MagZ 382.000000 +85:880.690 Sensors-Accelerometer.AccX -15214.000000 +85:881.239 Sensors-Accelerometer.AccY 494.000000 +85:881.733 Sensors-Accelerometer.AccZ -2165.000000 +85:960.690 Sensors-Accelerometer.AccX -15290.000000 +85:961.237 Sensors-Accelerometer.AccY 811.000000 +85:961.740 Sensors-Accelerometer.AccZ -2178.000000 +86:040.690 Sensors-Accelerometer.AccX -15016.000000 +86:041.230 Sensors-Accelerometer.AccY 1057.000000 +86:041.743 Sensors-Accelerometer.AccZ -2074.000000 +86:080.690 Sensors-Accelerometer.AccX -15148.000000 +86:081.234 Sensors-Accelerometer.AccY 605.000000 +86:081.725 Sensors-Accelerometer.AccZ -2210.000000 +86:120.690 Sensors-Accelerometer.AccX -15212.000000 +86:121.235 Sensors-Accelerometer.AccY 2418.000000 +86:121.752 Sensors-Accelerometer.AccZ -2960.000000 +86:150.683 Sensors-Magnetometer.MagX 311.000000 +86:151.178 Sensors-Magnetometer.MagY -356.000000 +86:151.669 Sensors-Magnetometer.MagZ 427.000000 +86:160.690 Sensors-Accelerometer.AccX -14763.000000 +86:161.238 Sensors-Accelerometer.AccY 6948.000000 +86:161.755 Sensors-Accelerometer.AccZ -4634.000000 +86:200.683 Sensors-Magnetometer.MagX 125.000000 +86:201.171 Sensors-Magnetometer.MagY -447.000000 +86:201.664 Sensors-Magnetometer.MagZ 475.000000 +86:202.195 Sensors-Accelerometer.AccX -12098.000000 +86:202.738 Sensors-Accelerometer.AccY 10638.000000 +86:203.285 Sensors-Accelerometer.AccZ -5573.000000 +86:240.690 Sensors-Accelerometer.AccX -7234.000000 +86:241.210 Sensors-Accelerometer.AccY 14831.000000 +86:241.758 Sensors-Accelerometer.AccZ -5888.000000 +86:250.683 Sensors-Magnetometer.MagX -137.000000 +86:251.173 Sensors-Magnetometer.MagY -502.000000 +86:251.671 Sensors-Magnetometer.MagZ 483.000000 +86:280.690 Sensors-Accelerometer.AccX -9743.000000 +86:281.216 Sensors-Accelerometer.AccY 17031.000000 +86:281.765 Sensors-Accelerometer.AccZ -8148.000000 +86:300.683 Sensors-Magnetometer.MagX -265.000000 +86:301.175 Sensors-Magnetometer.MagY -467.000000 +86:301.669 Sensors-Magnetometer.MagZ 492.000000 +86:320.690 Sensors-Accelerometer.AccX -4793.000000 +86:321.213 Sensors-Accelerometer.AccY 10509.000000 +86:321.756 Sensors-Accelerometer.AccZ -7957.000000 +86:360.690 Sensors-Accelerometer.AccX -3458.000000 +86:361.210 Sensors-Accelerometer.AccY 13165.000000 +86:361.755 Sensors-Accelerometer.AccZ -6963.000000 +86:400.725 Sensors-Accelerometer.AccX -3804.000000 +86:401.242 Sensors-Accelerometer.AccY 13099.000000 +86:401.796 Sensors-Accelerometer.AccZ -8247.000000 +86:440.690 Sensors-Accelerometer.AccX -3298.000000 +86:441.205 Sensors-Accelerometer.AccY 13339.000000 +86:441.749 Sensors-Accelerometer.AccZ -8860.000000 +86:480.690 Sensors-Accelerometer.AccX -5765.000000 +86:481.211 Sensors-Accelerometer.AccY 14038.000000 +86:481.758 Sensors-Accelerometer.AccZ -9571.000000 +86:520.690 Sensors-Accelerometer.AccX -5400.000000 +86:521.210 Sensors-Accelerometer.AccY 13345.000000 +86:521.754 Sensors-Accelerometer.AccZ -10293.000000 +86:550.684 Sensors-Magnetometer.MagX -314.000000 +86:551.175 Sensors-Magnetometer.MagY -418.000000 +86:551.664 Sensors-Magnetometer.MagZ 555.000000 +86:560.691 Sensors-Accelerometer.AccX -5269.000000 +86:561.208 Sensors-Accelerometer.AccY 13890.000000 +86:561.750 Sensors-Accelerometer.AccZ -10728.000000 +86:600.725 Sensors-Accelerometer.AccX -3330.000000 +86:601.241 Sensors-Accelerometer.AccY 10703.000000 +86:601.787 Sensors-Accelerometer.AccZ -10916.000000 +86:640.690 Sensors-Accelerometer.AccX 711.000000 +86:641.185 Sensors-Accelerometer.AccY 11265.000000 +86:641.726 Sensors-Accelerometer.AccZ -11106.000000 +86:650.683 Sensors-Magnetometer.MagX -424.000000 +86:651.171 Sensors-Magnetometer.MagY -289.000000 +86:651.662 Sensors-Magnetometer.MagZ 608.000000 +86:680.690 Sensors-Accelerometer.AccX -571.000000 +86:681.186 Sensors-Accelerometer.AccY 9033.000000 +86:681.709 Sensors-Accelerometer.AccZ -12805.000000 +86:700.683 Sensors-Magnetometer.MagX -509.000000 +86:701.178 Sensors-Magnetometer.MagY -171.000000 +86:701.671 Sensors-Magnetometer.MagZ 641.000000 +86:720.690 Sensors-Accelerometer.AccX 6313.000000 +86:721.210 Sensors-Accelerometer.AccY 8713.000000 +86:721.734 Sensors-Accelerometer.AccZ -15866.000000 +86:750.683 Sensors-Magnetometer.MagX -576.000000 +86:751.173 Sensors-Magnetometer.MagY -24.000000 +86:751.638 Sensors-Magnetometer.MagZ 636.000000 +86:760.690 Sensors-Accelerometer.AccX 5945.000000 +86:761.212 Sensors-Accelerometer.AccY 6378.000000 +86:761.733 Sensors-Accelerometer.AccZ -15377.000000 +86:800.683 Sensors-Magnetometer.MagX -629.000000 +86:801.179 Sensors-Magnetometer.MagY 178.000000 +86:801.668 Sensors-Magnetometer.MagZ 590.000000 +86:802.195 Sensors-Accelerometer.AccX 5091.000000 +86:802.722 Sensors-Accelerometer.AccY 8333.000000 +86:803.242 Sensors-Accelerometer.AccZ -17317.000000 +86:840.690 Sensors-Accelerometer.AccX 4040.000000 +86:841.203 Sensors-Accelerometer.AccY 2467.000000 +86:841.722 Sensors-Accelerometer.AccZ -16968.000000 +86:850.684 Sensors-Magnetometer.MagX -642.000000 +86:851.173 Sensors-Magnetometer.MagY 359.000000 +86:851.666 Sensors-Magnetometer.MagZ 522.000000 +86:880.690 Sensors-Accelerometer.AccX 5205.000000 +86:881.207 Sensors-Accelerometer.AccY 1529.000000 +86:881.724 Sensors-Accelerometer.AccZ -17265.000000 +86:900.683 Sensors-Magnetometer.MagX -644.000000 +86:901.173 Sensors-Magnetometer.MagY 458.000000 +86:901.666 Sensors-Magnetometer.MagZ 470.000000 +86:920.690 Sensors-Accelerometer.AccX 3305.000000 +86:921.207 Sensors-Accelerometer.AccY -1671.000000 +86:921.729 Sensors-Accelerometer.AccZ -15390.000000 +86:960.690 Sensors-Accelerometer.AccX 8270.000000 +86:961.211 Sensors-Accelerometer.AccY -2065.000000 +86:961.726 Sensors-Accelerometer.AccZ -12683.000000 +87:000.725 Sensors-Accelerometer.AccX 83.000000 +87:001.193 Sensors-Accelerometer.AccY -2427.000000 +87:001.717 Sensors-Accelerometer.AccZ -13503.000000 +87:040.690 Sensors-Accelerometer.AccX -2579.000000 +87:041.207 Sensors-Accelerometer.AccY -2463.000000 +87:041.724 Sensors-Accelerometer.AccZ -13576.000000 +87:050.683 Sensors-Magnetometer.MagX -549.000000 +87:051.172 Sensors-Magnetometer.MagY 501.000000 +87:051.665 Sensors-Magnetometer.MagZ 545.000000 +87:080.690 Sensors-Accelerometer.AccX 2675.000000 +87:081.210 Sensors-Accelerometer.AccY -72.000000 +87:081.671 Sensors-Accelerometer.AccZ -14938.000000 +87:100.683 Sensors-Magnetometer.MagX -413.000000 +87:101.173 Sensors-Magnetometer.MagY 498.000000 +87:101.668 Sensors-Magnetometer.MagZ 635.000000 +87:120.690 Sensors-Accelerometer.AccX 94.000000 +87:121.159 Sensors-Accelerometer.AccY -2896.000000 +87:121.673 Sensors-Accelerometer.AccZ -17294.000000 +87:150.683 Sensors-Magnetometer.MagX -316.000000 +87:151.176 Sensors-Magnetometer.MagY 476.000000 +87:151.670 Sensors-Magnetometer.MagZ 679.000000 +87:160.690 Sensors-Accelerometer.AccX -4571.000000 +87:161.219 Sensors-Accelerometer.AccY -2995.000000 +87:161.742 Sensors-Accelerometer.AccZ -17995.000000 +87:200.683 Sensors-Magnetometer.MagX -223.000000 +87:201.172 Sensors-Magnetometer.MagY 451.000000 +87:201.662 Sensors-Magnetometer.MagZ 720.000000 +87:202.185 Sensors-Accelerometer.AccX -12413.000000 +87:202.731 Sensors-Accelerometer.AccY -1415.000000 +87:203.251 Sensors-Accelerometer.AccZ -16626.000000 +87:240.690 Sensors-Accelerometer.AccX -8014.000000 +87:241.212 Sensors-Accelerometer.AccY -4197.000000 +87:241.728 Sensors-Accelerometer.AccZ -17146.000000 +87:250.683 Sensors-Magnetometer.MagX -62.000000 +87:251.148 Sensors-Magnetometer.MagY 405.000000 +87:251.641 Sensors-Magnetometer.MagZ 739.000000 +87:280.690 Sensors-Accelerometer.AccX -9955.000000 +87:281.217 Sensors-Accelerometer.AccY -1142.000000 +87:281.734 Sensors-Accelerometer.AccZ -10079.000000 +87:300.683 Sensors-Magnetometer.MagX 139.000000 +87:301.174 Sensors-Magnetometer.MagY 377.000000 +87:301.663 Sensors-Magnetometer.MagZ 695.000000 +87:320.690 Sensors-Accelerometer.AccX -7561.000000 +87:321.214 Sensors-Accelerometer.AccY -2029.000000 +87:321.734 Sensors-Accelerometer.AccZ -10952.000000 +87:350.683 Sensors-Magnetometer.MagX 300.000000 +87:351.175 Sensors-Magnetometer.MagY 427.000000 +87:351.668 Sensors-Magnetometer.MagZ 580.000000 +87:360.690 Sensors-Accelerometer.AccX -9913.000000 +87:361.211 Sensors-Accelerometer.AccY -5153.000000 +87:361.729 Sensors-Accelerometer.AccZ -6140.000000 +87:400.683 Sensors-Magnetometer.MagX 373.000000 +87:401.174 Sensors-Magnetometer.MagY 527.000000 +87:401.665 Sensors-Magnetometer.MagZ 417.000000 +87:402.192 Sensors-Accelerometer.AccX -8079.000000 +87:402.717 Sensors-Accelerometer.AccY -4879.000000 +87:403.243 Sensors-Accelerometer.AccZ -2519.000000 +87:440.690 Sensors-Accelerometer.AccX 1819.000000 +87:441.210 Sensors-Accelerometer.AccY -8789.000000 +87:441.732 Sensors-Accelerometer.AccZ 3088.000000 +87:450.684 Sensors-Magnetometer.MagX 336.000000 +87:451.165 Sensors-Magnetometer.MagY 644.000000 +87:451.655 Sensors-Magnetometer.MagZ 279.000000 +87:480.690 Sensors-Accelerometer.AccX -1067.000000 +87:481.209 Sensors-Accelerometer.AccY -16354.000000 +87:481.759 Sensors-Accelerometer.AccZ 6812.000000 +87:500.683 Sensors-Magnetometer.MagX 247.000000 +87:501.178 Sensors-Magnetometer.MagY 722.000000 +87:501.668 Sensors-Magnetometer.MagZ 259.000000 +87:520.690 Sensors-Accelerometer.AccX 374.000000 +87:521.183 Sensors-Accelerometer.AccY -17870.000000 +87:521.733 Sensors-Accelerometer.AccZ 5933.000000 +87:550.684 Sensors-Magnetometer.MagX 198.000000 +87:551.180 Sensors-Magnetometer.MagY 728.000000 +87:551.677 Sensors-Magnetometer.MagZ 332.000000 +87:560.690 Sensors-Accelerometer.AccX -4727.000000 +87:561.212 Sensors-Accelerometer.AccY -21446.000000 +87:561.763 Sensors-Accelerometer.AccZ 4388.000000 +87:600.683 Sensors-Magnetometer.MagX 121.000000 +87:601.173 Sensors-Magnetometer.MagY 735.000000 +87:601.669 Sensors-Magnetometer.MagZ 414.000000 +87:602.200 Sensors-Accelerometer.AccX -10821.000000 +87:602.746 Sensors-Accelerometer.AccY -15629.000000 +87:603.297 Sensors-Accelerometer.AccZ -1126.000000 +87:640.690 Sensors-Accelerometer.AccX -7431.000000 +87:641.217 Sensors-Accelerometer.AccY -17652.000000 +87:641.765 Sensors-Accelerometer.AccZ -1901.000000 +87:650.683 Sensors-Magnetometer.MagX -30.000000 +87:651.152 Sensors-Magnetometer.MagY 759.000000 +87:651.653 Sensors-Magnetometer.MagZ 445.000000 +87:680.690 Sensors-Accelerometer.AccX -5936.000000 +87:681.206 Sensors-Accelerometer.AccY -18786.000000 +87:681.751 Sensors-Accelerometer.AccZ -646.000000 +87:700.683 Sensors-Magnetometer.MagX -160.000000 +87:701.166 Sensors-Magnetometer.MagY 789.000000 +87:701.658 Sensors-Magnetometer.MagZ 424.000000 +87:720.690 Sensors-Accelerometer.AccX -4672.000000 +87:721.205 Sensors-Accelerometer.AccY -14915.000000 +87:721.754 Sensors-Accelerometer.AccZ -3302.000000 +87:750.683 Sensors-Magnetometer.MagX -268.000000 +87:751.174 Sensors-Magnetometer.MagY 802.000000 +87:751.668 Sensors-Magnetometer.MagZ 384.000000 +87:760.690 Sensors-Accelerometer.AccX -1490.000000 +87:761.207 Sensors-Accelerometer.AccY -16072.000000 +87:761.751 Sensors-Accelerometer.AccZ -379.000000 +87:800.683 Sensors-Magnetometer.MagX -378.000000 +87:801.176 Sensors-Magnetometer.MagY 811.000000 +87:801.680 Sensors-Magnetometer.MagZ 308.000000 +87:802.209 Sensors-Accelerometer.AccX 39.000000 +87:802.679 Sensors-Accelerometer.AccY -12429.000000 +87:803.228 Sensors-Accelerometer.AccZ -1654.000000 +87:840.690 Sensors-Accelerometer.AccX -697.000000 +87:841.181 Sensors-Accelerometer.AccY -13792.000000 +87:841.722 Sensors-Accelerometer.AccZ -3277.000000 +87:850.683 Sensors-Magnetometer.MagX -456.000000 +87:851.174 Sensors-Magnetometer.MagY 814.000000 +87:851.672 Sensors-Magnetometer.MagZ 246.000000 +87:880.690 Sensors-Accelerometer.AccX 2508.000000 +87:881.211 Sensors-Accelerometer.AccY -19443.000000 +87:881.764 Sensors-Accelerometer.AccZ -1391.000000 +87:900.683 Sensors-Magnetometer.MagX -511.000000 +87:901.183 Sensors-Magnetometer.MagY 802.000000 +87:901.675 Sensors-Magnetometer.MagZ 147.000000 +87:920.690 Sensors-Accelerometer.AccX 605.000000 +87:921.183 Sensors-Accelerometer.AccY -12566.000000 +87:921.736 Sensors-Accelerometer.AccZ -2810.000000 +87:950.684 Sensors-Magnetometer.MagX -551.000000 +87:951.179 Sensors-Magnetometer.MagY 784.000000 +87:951.674 Sensors-Magnetometer.MagZ 45.000000 +87:960.690 Sensors-Accelerometer.AccX 4851.000000 +87:961.217 Sensors-Accelerometer.AccY -12272.000000 +87:961.766 Sensors-Accelerometer.AccZ -2667.000000 +88:000.684 Sensors-Magnetometer.MagX -562.000000 +88:001.173 Sensors-Magnetometer.MagY 753.000000 +88:001.669 Sensors-Magnetometer.MagZ -70.000000 +88:002.172 Sensors-Accelerometer.AccX 5277.000000 +88:002.690 Sensors-Accelerometer.AccY -21026.000000 +88:003.228 Sensors-Accelerometer.AccZ 635.000000 +88:040.690 Sensors-Accelerometer.AccX 653.000000 +88:041.185 Sensors-Accelerometer.AccY -20052.000000 +88:041.733 Sensors-Accelerometer.AccZ 1218.000000 +88:050.684 Sensors-Magnetometer.MagX -538.000000 +88:051.176 Sensors-Magnetometer.MagY 722.000000 +88:051.671 Sensors-Magnetometer.MagZ -200.000000 +88:080.690 Sensors-Accelerometer.AccX -3814.000000 +88:081.212 Sensors-Accelerometer.AccY -18124.000000 +88:081.754 Sensors-Accelerometer.AccZ -941.000000 +88:100.684 Sensors-Magnetometer.MagX -496.000000 +88:101.173 Sensors-Magnetometer.MagY 675.000000 +88:101.669 Sensors-Magnetometer.MagZ -299.000000 +88:120.690 Sensors-Accelerometer.AccX -2509.000000 +88:121.210 Sensors-Accelerometer.AccY -14090.000000 +88:121.759 Sensors-Accelerometer.AccZ 107.000000 +88:150.683 Sensors-Magnetometer.MagX -491.000000 +88:151.183 Sensors-Magnetometer.MagY 608.000000 +88:151.674 Sensors-Magnetometer.MagZ -394.000000 +88:160.690 Sensors-Accelerometer.AccX -2042.000000 +88:161.209 Sensors-Accelerometer.AccY -16793.000000 +88:161.752 Sensors-Accelerometer.AccZ 6048.000000 +88:200.683 Sensors-Magnetometer.MagX -469.000000 +88:201.174 Sensors-Magnetometer.MagY 527.000000 +88:201.665 Sensors-Magnetometer.MagZ -457.000000 +88:202.195 Sensors-Accelerometer.AccX 346.000000 +88:202.687 Sensors-Accelerometer.AccY -12823.000000 +88:203.231 Sensors-Accelerometer.AccZ 5231.000000 +88:240.690 Sensors-Accelerometer.AccX -252.000000 +88:241.179 Sensors-Accelerometer.AccY -8586.000000 +88:241.700 Sensors-Accelerometer.AccZ 2176.000000 +88:280.690 Sensors-Accelerometer.AccX -2700.000000 +88:281.211 Sensors-Accelerometer.AccY -12899.000000 +88:281.761 Sensors-Accelerometer.AccZ 7418.000000 +88:300.683 Sensors-Magnetometer.MagX -479.000000 +88:301.183 Sensors-Magnetometer.MagY 468.000000 +88:301.674 Sensors-Magnetometer.MagZ -499.000000 +88:320.690 Sensors-Accelerometer.AccX 1568.000000 +88:321.200 Sensors-Accelerometer.AccY -11660.000000 +88:321.746 Sensors-Accelerometer.AccZ 7093.000000 +88:360.690 Sensors-Accelerometer.AccX 3764.000000 +88:361.212 Sensors-Accelerometer.AccY -6413.000000 +88:361.731 Sensors-Accelerometer.AccZ 5581.000000 +88:400.683 Sensors-Magnetometer.MagX -539.000000 +88:401.176 Sensors-Magnetometer.MagY 518.000000 +88:401.670 Sensors-Magnetometer.MagZ -452.000000 +88:402.196 Sensors-Accelerometer.AccX -493.000000 +88:402.687 Sensors-Accelerometer.AccY -8718.000000 +88:403.209 Sensors-Accelerometer.AccZ 8874.000000 +88:440.690 Sensors-Accelerometer.AccX 4263.000000 +88:441.210 Sensors-Accelerometer.AccY -16255.000000 +88:441.760 Sensors-Accelerometer.AccZ 12196.000000 +88:450.684 Sensors-Magnetometer.MagX -560.000000 +88:451.175 Sensors-Magnetometer.MagY 610.000000 +88:451.671 Sensors-Magnetometer.MagZ -383.000000 +88:480.690 Sensors-Accelerometer.AccX 2954.000000 +88:481.205 Sensors-Accelerometer.AccY -14705.000000 +88:481.747 Sensors-Accelerometer.AccZ 10293.000000 +88:500.683 Sensors-Magnetometer.MagX -531.000000 +88:501.175 Sensors-Magnetometer.MagY 681.000000 +88:501.665 Sensors-Magnetometer.MagZ -336.000000 +88:520.690 Sensors-Accelerometer.AccX -1629.000000 +88:521.207 Sensors-Accelerometer.AccY -9881.000000 +88:521.731 Sensors-Accelerometer.AccZ 6972.000000 +88:550.683 Sensors-Magnetometer.MagX -431.000000 +88:551.176 Sensors-Magnetometer.MagY 772.000000 +88:551.671 Sensors-Magnetometer.MagZ -259.000000 +88:560.690 Sensors-Accelerometer.AccX 2171.000000 +88:561.207 Sensors-Accelerometer.AccY -12793.000000 +88:561.753 Sensors-Accelerometer.AccZ 6849.000000 +88:600.683 Sensors-Magnetometer.MagX -294.000000 +88:601.176 Sensors-Magnetometer.MagY 852.000000 +88:601.661 Sensors-Magnetometer.MagZ -152.000000 +88:602.186 Sensors-Accelerometer.AccX 5661.000000 +88:602.705 Sensors-Accelerometer.AccY -14962.000000 +88:603.249 Sensors-Accelerometer.AccZ 8957.000000 +88:640.690 Sensors-Accelerometer.AccX 5963.000000 +88:641.212 Sensors-Accelerometer.AccY -14438.000000 +88:641.755 Sensors-Accelerometer.AccZ 8913.000000 +88:650.683 Sensors-Magnetometer.MagX -115.000000 +88:651.175 Sensors-Magnetometer.MagY 884.000000 +88:651.666 Sensors-Magnetometer.MagZ -95.000000 +88:680.690 Sensors-Accelerometer.AccX -1048.000000 +88:681.206 Sensors-Accelerometer.AccY -14237.000000 +88:681.753 Sensors-Accelerometer.AccZ 8527.000000 +88:700.683 Sensors-Magnetometer.MagX 139.000000 +88:701.176 Sensors-Magnetometer.MagY 842.000000 +88:701.666 Sensors-Magnetometer.MagZ 6.000000 +88:720.690 Sensors-Accelerometer.AccX -4691.000000 +88:721.214 Sensors-Accelerometer.AccY -15353.000000 +88:721.765 Sensors-Accelerometer.AccZ 9666.000000 +88:750.683 Sensors-Magnetometer.MagX 345.000000 +88:751.176 Sensors-Magnetometer.MagY 708.000000 +88:751.668 Sensors-Magnetometer.MagZ 53.000000 +88:760.690 Sensors-Accelerometer.AccX -11210.000000 +88:761.234 Sensors-Accelerometer.AccY -12275.000000 +88:761.787 Sensors-Accelerometer.AccZ 10608.000000 +88:800.683 Sensors-Magnetometer.MagX 485.000000 +88:801.174 Sensors-Magnetometer.MagY 538.000000 +88:801.666 Sensors-Magnetometer.MagZ 41.000000 +88:802.162 Sensors-Accelerometer.AccX -11689.000000 +88:802.708 Sensors-Accelerometer.AccY -11575.000000 +88:803.255 Sensors-Accelerometer.AccZ 9214.000000 +88:840.690 Sensors-Accelerometer.AccX -13730.000000 +88:841.232 Sensors-Accelerometer.AccY -12103.000000 +88:841.783 Sensors-Accelerometer.AccZ 9371.000000 +88:850.684 Sensors-Magnetometer.MagX 547.000000 +88:851.179 Sensors-Magnetometer.MagY 458.000000 +88:851.675 Sensors-Magnetometer.MagZ 33.000000 +88:880.690 Sensors-Accelerometer.AccX -10283.000000 +88:881.238 Sensors-Accelerometer.AccY -5100.000000 +88:881.764 Sensors-Accelerometer.AccZ 9204.000000 +88:900.683 Sensors-Magnetometer.MagX 595.000000 +88:901.179 Sensors-Magnetometer.MagY 286.000000 +88:901.673 Sensors-Magnetometer.MagZ -54.000000 +88:920.690 Sensors-Accelerometer.AccX -9189.000000 +88:921.216 Sensors-Accelerometer.AccY -1869.000000 +88:921.737 Sensors-Accelerometer.AccZ 9111.000000 +88:950.683 Sensors-Magnetometer.MagX 593.000000 +88:951.179 Sensors-Magnetometer.MagY 143.000000 +88:951.676 Sensors-Magnetometer.MagZ -159.000000 +88:960.690 Sensors-Accelerometer.AccX -9698.000000 +88:961.215 Sensors-Accelerometer.AccY -2404.000000 +88:961.732 Sensors-Accelerometer.AccZ 10035.000000 +89:000.683 Sensors-Magnetometer.MagX 533.000000 +89:001.173 Sensors-Magnetometer.MagY 46.000000 +89:001.639 Sensors-Magnetometer.MagZ -271.000000 +89:002.168 Sensors-Accelerometer.AccX -8624.000000 +89:002.689 Sensors-Accelerometer.AccY -646.000000 +89:003.185 Sensors-Accelerometer.AccZ 13109.000000 +89:040.690 Sensors-Accelerometer.AccX -6062.000000 +89:041.218 Sensors-Accelerometer.AccY -1338.000000 +89:041.735 Sensors-Accelerometer.AccZ 12923.000000 +89:050.683 Sensors-Magnetometer.MagX 465.000000 +89:051.176 Sensors-Magnetometer.MagY 34.000000 +89:051.641 Sensors-Magnetometer.MagZ -393.000000 +89:080.690 Sensors-Accelerometer.AccX -1826.000000 +89:081.209 Sensors-Accelerometer.AccY -4566.000000 +89:081.738 Sensors-Accelerometer.AccZ 14034.000000 +89:100.683 Sensors-Magnetometer.MagX 384.000000 +89:101.171 Sensors-Magnetometer.MagY 75.000000 +89:101.641 Sensors-Magnetometer.MagZ -452.000000 +89:120.690 Sensors-Accelerometer.AccX -3306.000000 +89:121.208 Sensors-Accelerometer.AccY -6244.000000 +89:121.730 Sensors-Accelerometer.AccZ 13736.000000 +89:150.683 Sensors-Magnetometer.MagX 362.000000 +89:151.174 Sensors-Magnetometer.MagY 147.000000 +89:151.668 Sensors-Magnetometer.MagZ -469.000000 +89:160.690 Sensors-Accelerometer.AccX -5983.000000 +89:161.216 Sensors-Accelerometer.AccY -8642.000000 +89:161.736 Sensors-Accelerometer.AccZ 15260.000000 +89:200.683 Sensors-Magnetometer.MagX 337.000000 +89:201.170 Sensors-Magnetometer.MagY 217.000000 +89:201.660 Sensors-Magnetometer.MagZ -474.000000 +89:202.188 Sensors-Accelerometer.AccX -5635.000000 +89:202.713 Sensors-Accelerometer.AccY -8586.000000 +89:203.235 Sensors-Accelerometer.AccZ 13792.000000 +89:240.690 Sensors-Accelerometer.AccX -6998.000000 +89:241.217 Sensors-Accelerometer.AccY -9206.000000 +89:241.746 Sensors-Accelerometer.AccZ 10811.000000 +89:250.684 Sensors-Magnetometer.MagX 313.000000 +89:251.179 Sensors-Magnetometer.MagY 280.000000 +89:251.672 Sensors-Magnetometer.MagZ -465.000000 +89:280.690 Sensors-Accelerometer.AccX -3603.000000 +89:281.215 Sensors-Accelerometer.AccY -11864.000000 +89:281.759 Sensors-Accelerometer.AccZ 7437.000000 +89:300.683 Sensors-Magnetometer.MagX 259.000000 +89:301.174 Sensors-Magnetometer.MagY 386.000000 +89:301.666 Sensors-Magnetometer.MagZ -470.000000 +89:320.690 Sensors-Accelerometer.AccX -2086.000000 +89:321.211 Sensors-Accelerometer.AccY -12494.000000 +89:321.757 Sensors-Accelerometer.AccZ 4701.000000 +89:350.683 Sensors-Magnetometer.MagX 208.000000 +89:351.169 Sensors-Magnetometer.MagY 493.000000 +89:351.661 Sensors-Magnetometer.MagZ -434.000000 +89:360.690 Sensors-Accelerometer.AccX -2548.000000 +89:361.209 Sensors-Accelerometer.AccY -10203.000000 +89:361.759 Sensors-Accelerometer.AccZ 6782.000000 +89:400.725 Sensors-Accelerometer.AccX -2945.000000 +89:401.248 Sensors-Accelerometer.AccY -11231.000000 +89:401.798 Sensors-Accelerometer.AccZ 6315.000000 +89:440.690 Sensors-Accelerometer.AccX -2760.000000 +89:441.207 Sensors-Accelerometer.AccY -13661.000000 +89:441.750 Sensors-Accelerometer.AccZ 2109.000000 +89:450.683 Sensors-Magnetometer.MagX 151.000000 +89:451.179 Sensors-Magnetometer.MagY 573.000000 +89:451.679 Sensors-Magnetometer.MagZ -414.000000 +89:480.690 Sensors-Accelerometer.AccX -994.000000 +89:481.186 Sensors-Accelerometer.AccY -15466.000000 +89:481.737 Sensors-Accelerometer.AccZ 2191.000000 +89:520.690 Sensors-Accelerometer.AccX -2339.000000 +89:521.213 Sensors-Accelerometer.AccY -14032.000000 +89:521.757 Sensors-Accelerometer.AccZ 3507.000000 +89:560.690 Sensors-Accelerometer.AccX -5139.000000 +89:561.215 Sensors-Accelerometer.AccY -15014.000000 +89:561.769 Sensors-Accelerometer.AccZ 2087.000000 +89:600.725 Sensors-Accelerometer.AccX -6508.000000 +89:601.242 Sensors-Accelerometer.AccY -14032.000000 +89:601.779 Sensors-Accelerometer.AccZ 4189.000000 +89:640.690 Sensors-Accelerometer.AccX -4935.000000 +89:641.212 Sensors-Accelerometer.AccY -13287.000000 +89:641.758 Sensors-Accelerometer.AccZ 2940.000000 +89:650.684 Sensors-Magnetometer.MagX 179.000000 +89:651.175 Sensors-Magnetometer.MagY 453.000000 +89:651.670 Sensors-Magnetometer.MagZ -464.000000 +89:680.690 Sensors-Accelerometer.AccX -9015.000000 +89:681.214 Sensors-Accelerometer.AccY -11914.000000 +89:681.760 Sensors-Accelerometer.AccZ 4440.000000 +89:700.683 Sensors-Magnetometer.MagX 191.000000 +89:701.178 Sensors-Magnetometer.MagY 375.000000 +89:701.673 Sensors-Magnetometer.MagZ -509.000000 +89:720.690 Sensors-Accelerometer.AccX -7394.000000 +89:721.208 Sensors-Accelerometer.AccY -8523.000000 +89:721.727 Sensors-Accelerometer.AccZ 5846.000000 +89:750.683 Sensors-Magnetometer.MagX 149.000000 +89:751.174 Sensors-Magnetometer.MagY 293.000000 +89:751.668 Sensors-Magnetometer.MagZ -547.000000 +89:760.690 Sensors-Accelerometer.AccX -7732.000000 +89:761.211 Sensors-Accelerometer.AccY -9356.000000 +89:761.734 Sensors-Accelerometer.AccZ 5567.000000 +89:800.683 Sensors-Magnetometer.MagX 141.000000 +89:801.171 Sensors-Magnetometer.MagY 214.000000 +89:801.660 Sensors-Magnetometer.MagZ -566.000000 +89:802.191 Sensors-Accelerometer.AccX -9601.000000 +89:802.717 Sensors-Accelerometer.AccY -5149.000000 +89:803.237 Sensors-Accelerometer.AccZ 8293.000000 +89:840.690 Sensors-Accelerometer.AccX -11917.000000 +89:841.237 Sensors-Accelerometer.AccY -4150.000000 +89:841.759 Sensors-Accelerometer.AccZ 7706.000000 +89:850.684 Sensors-Magnetometer.MagX 177.000000 +89:851.173 Sensors-Magnetometer.MagY 105.000000 +89:851.659 Sensors-Magnetometer.MagZ -555.000000 +89:880.690 Sensors-Accelerometer.AccX -13864.000000 +89:881.232 Sensors-Accelerometer.AccY 3189.000000 +89:881.754 Sensors-Accelerometer.AccZ 8738.000000 +89:900.683 Sensors-Magnetometer.MagX 224.000000 +89:901.172 Sensors-Magnetometer.MagY -31.000000 +89:901.641 Sensors-Magnetometer.MagZ -517.000000 +89:920.690 Sensors-Accelerometer.AccX -13096.000000 +89:921.234 Sensors-Accelerometer.AccY 3447.000000 +89:921.754 Sensors-Accelerometer.AccZ 9350.000000 +89:950.683 Sensors-Magnetometer.MagX 267.000000 +89:951.177 Sensors-Magnetometer.MagY -122.000000 +89:951.668 Sensors-Magnetometer.MagZ -460.000000 +89:960.690 Sensors-Accelerometer.AccX -14091.000000 +89:961.236 Sensors-Accelerometer.AccY 952.000000 +89:961.729 Sensors-Accelerometer.AccZ 5593.000000 +90:000.683 Sensors-Magnetometer.MagX 303.000000 +90:001.180 Sensors-Magnetometer.MagY -186.000000 +90:001.670 Sensors-Magnetometer.MagZ -390.000000 +90:002.201 Sensors-Accelerometer.AccX -13716.000000 +90:002.746 Sensors-Accelerometer.AccY 1197.000000 +90:003.266 Sensors-Accelerometer.AccZ 5839.000000 +90:040.690 Sensors-Accelerometer.AccX -12660.000000 +90:041.236 Sensors-Accelerometer.AccY 5028.000000 +90:041.759 Sensors-Accelerometer.AccZ 7024.000000 +90:050.684 Sensors-Magnetometer.MagX 322.000000 +90:051.174 Sensors-Magnetometer.MagY -249.000000 +90:051.671 Sensors-Magnetometer.MagZ -332.000000 +90:080.690 Sensors-Accelerometer.AccX -12848.000000 +90:081.232 Sensors-Accelerometer.AccY 3780.000000 +90:081.752 Sensors-Accelerometer.AccZ 7301.000000 +90:100.683 Sensors-Magnetometer.MagX 325.000000 +90:101.181 Sensors-Magnetometer.MagY -317.000000 +90:101.680 Sensors-Magnetometer.MagZ -282.000000 +90:120.690 Sensors-Accelerometer.AccX -11533.000000 +90:121.236 Sensors-Accelerometer.AccY 3242.000000 +90:121.752 Sensors-Accelerometer.AccZ 6996.000000 +90:150.683 Sensors-Magnetometer.MagX 344.000000 +90:151.172 Sensors-Magnetometer.MagY -378.000000 +90:151.663 Sensors-Magnetometer.MagZ -163.000000 +90:160.690 Sensors-Accelerometer.AccX -16264.000000 +90:161.231 Sensors-Accelerometer.AccY 6507.000000 +90:161.755 Sensors-Accelerometer.AccZ 4239.000000 +90:200.684 Sensors-Magnetometer.MagX 390.000000 +90:201.176 Sensors-Magnetometer.MagY -382.000000 +90:201.670 Sensors-Magnetometer.MagZ -52.000000 +90:202.170 Sensors-Accelerometer.AccX -13043.000000 +90:202.719 Sensors-Accelerometer.AccY 759.000000 +90:203.216 Sensors-Accelerometer.AccZ 3574.000000 +90:240.690 Sensors-Accelerometer.AccX -16508.000000 +90:241.231 Sensors-Accelerometer.AccY 2447.000000 +90:241.753 Sensors-Accelerometer.AccZ 1173.000000 +90:250.684 Sensors-Magnetometer.MagX 405.000000 +90:251.176 Sensors-Magnetometer.MagY -379.000000 +90:251.670 Sensors-Magnetometer.MagZ 104.000000 +90:280.690 Sensors-Accelerometer.AccX -14310.000000 +90:281.239 Sensors-Accelerometer.AccY 10310.000000 +90:281.785 Sensors-Accelerometer.AccZ 1341.000000 +90:300.684 Sensors-Magnetometer.MagX 409.000000 +90:301.179 Sensors-Magnetometer.MagY -373.000000 +90:301.672 Sensors-Magnetometer.MagZ 197.000000 +90:320.690 Sensors-Accelerometer.AccX -14525.000000 +90:321.234 Sensors-Accelerometer.AccY 3587.000000 +90:321.755 Sensors-Accelerometer.AccZ -1333.000000 +90:350.684 Sensors-Magnetometer.MagX 379.000000 +90:351.179 Sensors-Magnetometer.MagY -354.000000 +90:351.671 Sensors-Magnetometer.MagZ 277.000000 +90:360.690 Sensors-Accelerometer.AccX -16652.000000 +90:361.235 Sensors-Accelerometer.AccY 5394.000000 +90:361.755 Sensors-Accelerometer.AccZ -2030.000000 +90:400.684 Sensors-Magnetometer.MagX 358.000000 +90:401.173 Sensors-Magnetometer.MagY -340.000000 +90:401.660 Sensors-Magnetometer.MagZ 373.000000 +90:402.186 Sensors-Accelerometer.AccX -12751.000000 +90:402.735 Sensors-Accelerometer.AccY 3244.000000 +90:403.258 Sensors-Accelerometer.AccZ -2996.000000 +90:440.690 Sensors-Accelerometer.AccX -16043.000000 +90:441.240 Sensors-Accelerometer.AccY 5787.000000 +90:441.759 Sensors-Accelerometer.AccZ -4592.000000 +90:450.684 Sensors-Magnetometer.MagX 341.000000 +90:451.169 Sensors-Magnetometer.MagY -312.000000 +90:451.660 Sensors-Magnetometer.MagZ 431.000000 +90:480.690 Sensors-Accelerometer.AccX -15416.000000 +90:481.233 Sensors-Accelerometer.AccY 4039.000000 +90:481.753 Sensors-Accelerometer.AccZ -5140.000000 +90:500.684 Sensors-Magnetometer.MagX 315.000000 +90:501.177 Sensors-Magnetometer.MagY -283.000000 +90:501.670 Sensors-Magnetometer.MagZ 484.000000 +90:520.690 Sensors-Accelerometer.AccX -15676.000000 +90:521.245 Sensors-Accelerometer.AccY 2397.000000 +90:521.767 Sensors-Accelerometer.AccZ -6791.000000 +90:560.690 Sensors-Accelerometer.AccX -12848.000000 +90:561.229 Sensors-Accelerometer.AccY 3109.000000 +90:561.751 Sensors-Accelerometer.AccZ -7390.000000 +90:600.683 Sensors-Magnetometer.MagX 259.000000 +90:601.176 Sensors-Magnetometer.MagY -234.000000 +90:601.667 Sensors-Magnetometer.MagZ 560.000000 +90:602.194 Sensors-Accelerometer.AccX -13483.000000 +90:602.744 Sensors-Accelerometer.AccY 4311.000000 +90:603.268 Sensors-Accelerometer.AccZ -8153.000000 +90:640.690 Sensors-Accelerometer.AccX -11855.000000 +90:641.237 Sensors-Accelerometer.AccY 5786.000000 +90:641.756 Sensors-Accelerometer.AccZ -6894.000000 +90:680.690 Sensors-Accelerometer.AccX -11088.000000 +90:681.231 Sensors-Accelerometer.AccY 4094.000000 +90:681.758 Sensors-Accelerometer.AccZ -8245.000000 +90:700.684 Sensors-Magnetometer.MagX 214.000000 +90:701.177 Sensors-Magnetometer.MagY -194.000000 +90:701.666 Sensors-Magnetometer.MagZ 616.000000 +90:720.690 Sensors-Accelerometer.AccX -13034.000000 +90:721.237 Sensors-Accelerometer.AccY 4889.000000 +90:721.759 Sensors-Accelerometer.AccZ -8476.000000 +90:750.683 Sensors-Magnetometer.MagX 179.000000 +90:751.178 Sensors-Magnetometer.MagY -191.000000 +90:751.676 Sensors-Magnetometer.MagZ 636.000000 +90:760.690 Sensors-Accelerometer.AccX -12268.000000 +90:761.242 Sensors-Accelerometer.AccY 4191.000000 +90:761.771 Sensors-Accelerometer.AccZ -10636.000000 +90:800.725 Sensors-Accelerometer.AccX -12353.000000 +90:801.273 Sensors-Accelerometer.AccY 6100.000000 +90:801.796 Sensors-Accelerometer.AccZ -8417.000000 +90:840.690 Sensors-Accelerometer.AccX -13737.000000 +90:841.237 Sensors-Accelerometer.AccY 2802.000000 +90:841.757 Sensors-Accelerometer.AccZ -7987.000000 +90:850.684 Sensors-Magnetometer.MagX 112.000000 +90:851.170 Sensors-Magnetometer.MagY -176.000000 +90:851.660 Sensors-Magnetometer.MagZ 668.000000 +90:880.690 Sensors-Accelerometer.AccX -10498.000000 +90:881.228 Sensors-Accelerometer.AccY 4166.000000 +90:881.748 Sensors-Accelerometer.AccZ -10391.000000 +90:920.690 Sensors-Accelerometer.AccX -9965.000000 +90:921.215 Sensors-Accelerometer.AccY 3888.000000 +90:921.735 Sensors-Accelerometer.AccZ -12167.000000 +90:950.683 Sensors-Magnetometer.MagX -7.000000 +90:951.125 Sensors-Magnetometer.MagY -128.000000 +90:951.607 Sensors-Magnetometer.MagZ 716.000000 +90:960.690 Sensors-Accelerometer.AccX -8914.000000 +90:961.209 Sensors-Accelerometer.AccY 2314.000000 +90:961.727 Sensors-Accelerometer.AccZ -15195.000000 +91:000.683 Sensors-Magnetometer.MagX -67.000000 +91:001.152 Sensors-Magnetometer.MagY -125.000000 +91:001.646 Sensors-Magnetometer.MagZ 734.000000 +91:002.184 Sensors-Accelerometer.AccX -8475.000000 +91:002.709 Sensors-Accelerometer.AccY 171.000000 +91:003.206 Sensors-Accelerometer.AccZ -12545.000000 +91:040.690 Sensors-Accelerometer.AccX -6009.000000 +91:041.213 Sensors-Accelerometer.AccY 6293.000000 +91:041.733 Sensors-Accelerometer.AccZ -17352.000000 +91:080.690 Sensors-Accelerometer.AccX -7901.000000 +91:081.218 Sensors-Accelerometer.AccY -649.000000 +91:081.715 Sensors-Accelerometer.AccZ -12142.000000 +91:100.683 Sensors-Magnetometer.MagX -94.000000 +91:101.156 Sensors-Magnetometer.MagY -65.000000 +91:101.625 Sensors-Magnetometer.MagZ 740.000000 +91:120.690 Sensors-Accelerometer.AccX -9318.000000 +91:121.217 Sensors-Accelerometer.AccY 625.000000 +91:121.715 Sensors-Accelerometer.AccZ -14643.000000 +91:160.690 Sensors-Accelerometer.AccX -9244.000000 +91:161.212 Sensors-Accelerometer.AccY 966.000000 +91:161.713 Sensors-Accelerometer.AccZ -13717.000000 +91:200.683 Sensors-Magnetometer.MagX -134.000000 +91:201.171 Sensors-Magnetometer.MagY 50.000000 +91:201.634 Sensors-Magnetometer.MagZ 764.000000 +91:202.162 Sensors-Accelerometer.AccX -6554.000000 +91:202.676 Sensors-Accelerometer.AccY -264.000000 +91:203.160 Sensors-Accelerometer.AccZ -14542.000000 +91:240.690 Sensors-Accelerometer.AccX -8218.000000 +91:241.211 Sensors-Accelerometer.AccY -3376.000000 +91:241.725 Sensors-Accelerometer.AccZ -12813.000000 +91:250.684 Sensors-Magnetometer.MagX -126.000000 +91:251.175 Sensors-Magnetometer.MagY 114.000000 +91:251.668 Sensors-Magnetometer.MagZ 760.000000 +91:280.690 Sensors-Accelerometer.AccX -7813.000000 +91:281.214 Sensors-Accelerometer.AccY -2423.000000 +91:281.737 Sensors-Accelerometer.AccZ -13060.000000 +91:320.690 Sensors-Accelerometer.AccX -4829.000000 +91:321.214 Sensors-Accelerometer.AccY -3613.000000 +91:321.733 Sensors-Accelerometer.AccZ -13400.000000 +91:350.683 Sensors-Magnetometer.MagX -121.000000 +91:351.176 Sensors-Magnetometer.MagY 219.000000 +91:351.671 Sensors-Magnetometer.MagZ 757.000000 +91:360.690 Sensors-Accelerometer.AccX -7325.000000 +91:361.215 Sensors-Accelerometer.AccY -2979.000000 +91:361.739 Sensors-Accelerometer.AccZ -13470.000000 +91:400.725 Sensors-Accelerometer.AccX -7061.000000 +91:401.249 Sensors-Accelerometer.AccY -3166.000000 +91:401.776 Sensors-Accelerometer.AccZ -12768.000000 +91:440.690 Sensors-Accelerometer.AccX -7785.000000 +91:441.215 Sensors-Accelerometer.AccY -5551.000000 +91:441.742 Sensors-Accelerometer.AccZ -12567.000000 +91:450.684 Sensors-Magnetometer.MagX -122.000000 +91:451.175 Sensors-Magnetometer.MagY 309.000000 +91:451.672 Sensors-Magnetometer.MagZ 738.000000 +91:480.690 Sensors-Accelerometer.AccX -9232.000000 +91:481.210 Sensors-Accelerometer.AccY -6918.000000 +91:481.737 Sensors-Accelerometer.AccZ -12667.000000 +91:520.690 Sensors-Accelerometer.AccX -7062.000000 +91:521.213 Sensors-Accelerometer.AccY -6856.000000 +91:521.732 Sensors-Accelerometer.AccZ -12745.000000 +91:550.683 Sensors-Magnetometer.MagX -154.000000 +91:551.178 Sensors-Magnetometer.MagY 391.000000 +91:551.678 Sensors-Magnetometer.MagZ 703.000000 +91:560.690 Sensors-Accelerometer.AccX -6237.000000 +91:561.217 Sensors-Accelerometer.AccY -8039.000000 +91:561.743 Sensors-Accelerometer.AccZ -12047.000000 +91:600.725 Sensors-Accelerometer.AccX -6921.000000 +91:601.245 Sensors-Accelerometer.AccY -8566.000000 +91:601.769 Sensors-Accelerometer.AccZ -11041.000000 +91:640.690 Sensors-Accelerometer.AccX -5081.000000 +91:641.218 Sensors-Accelerometer.AccY -9130.000000 +91:641.744 Sensors-Accelerometer.AccZ -10821.000000 +91:680.690 Sensors-Accelerometer.AccX -4529.000000 +91:681.212 Sensors-Accelerometer.AccY -9039.000000 +91:681.741 Sensors-Accelerometer.AccZ -10808.000000 +91:700.683 Sensors-Magnetometer.MagX -189.000000 +91:701.176 Sensors-Magnetometer.MagY 455.000000 +91:701.674 Sensors-Magnetometer.MagZ 683.000000 +91:720.690 Sensors-Accelerometer.AccX -6155.000000 +91:721.220 Sensors-Accelerometer.AccY -8731.000000 +91:721.746 Sensors-Accelerometer.AccZ -10689.000000 +91:760.690 Sensors-Accelerometer.AccX -5306.000000 +91:761.206 Sensors-Accelerometer.AccY -8845.000000 +91:761.727 Sensors-Accelerometer.AccZ -9704.000000 +91:840.690 Sensors-Accelerometer.AccX -5590.000000 +91:841.213 Sensors-Accelerometer.AccY -9747.000000 +91:841.741 Sensors-Accelerometer.AccZ -9521.000000 +91:880.690 Sensors-Accelerometer.AccX -5090.000000 +91:881.213 Sensors-Accelerometer.AccY -10516.000000 +91:881.754 Sensors-Accelerometer.AccZ -10328.000000 +91:900.683 Sensors-Magnetometer.MagX -239.000000 +91:901.183 Sensors-Magnetometer.MagY 528.000000 +91:901.672 Sensors-Magnetometer.MagZ 638.000000 +91:920.690 Sensors-Accelerometer.AccX -5430.000000 +91:921.210 Sensors-Accelerometer.AccY -11009.000000 +91:921.758 Sensors-Accelerometer.AccZ -9617.000000 +91:950.683 Sensors-Magnetometer.MagX -290.000000 +91:951.174 Sensors-Magnetometer.MagY 571.000000 +91:951.674 Sensors-Magnetometer.MagZ 616.000000 +91:960.690 Sensors-Accelerometer.AccX -3306.000000 +91:961.208 Sensors-Accelerometer.AccY -11799.000000 +91:961.755 Sensors-Accelerometer.AccZ -9271.000000 +92:000.683 Sensors-Magnetometer.MagX -346.000000 +92:001.173 Sensors-Magnetometer.MagY 590.000000 +92:001.664 Sensors-Magnetometer.MagZ 567.000000 +92:002.194 Sensors-Accelerometer.AccX -2310.000000 +92:002.715 Sensors-Accelerometer.AccY -11873.000000 +92:003.263 Sensors-Accelerometer.AccZ -9248.000000 +92:040.690 Sensors-Accelerometer.AccX -2509.000000 +92:041.212 Sensors-Accelerometer.AccY -12445.000000 +92:041.761 Sensors-Accelerometer.AccZ -7634.000000 +92:080.690 Sensors-Accelerometer.AccX -192.000000 +92:081.175 Sensors-Accelerometer.AccY -12901.000000 +92:081.723 Sensors-Accelerometer.AccZ -8506.000000 +92:100.683 Sensors-Magnetometer.MagX -404.000000 +92:101.175 Sensors-Magnetometer.MagY 623.000000 +92:101.674 Sensors-Magnetometer.MagZ 510.000000 +92:120.690 Sensors-Accelerometer.AccX 34.000000 +92:121.154 Sensors-Accelerometer.AccY -13348.000000 +92:121.702 Sensors-Accelerometer.AccZ -8089.000000 +92:160.690 Sensors-Accelerometer.AccX -292.000000 +92:161.174 Sensors-Accelerometer.AccY -13554.000000 +92:161.712 Sensors-Accelerometer.AccZ -8441.000000 +92:200.725 Sensors-Accelerometer.AccX -438.000000 +92:201.217 Sensors-Accelerometer.AccY -13368.000000 +92:201.761 Sensors-Accelerometer.AccZ -7998.000000 +92:240.690 Sensors-Accelerometer.AccX -766.000000 +92:241.184 Sensors-Accelerometer.AccY -13241.000000 +92:241.728 Sensors-Accelerometer.AccZ -7589.000000 +92:280.690 Sensors-Accelerometer.AccX -983.000000 +92:281.193 Sensors-Accelerometer.AccY -13197.000000 +92:281.740 Sensors-Accelerometer.AccZ -7574.000000 +92:320.690 Sensors-Accelerometer.AccX -1001.000000 +92:321.208 Sensors-Accelerometer.AccY -13435.000000 +92:321.748 Sensors-Accelerometer.AccZ -8278.000000 +92:360.690 Sensors-Accelerometer.AccX -1022.000000 +92:361.213 Sensors-Accelerometer.AccY -13061.000000 +92:361.762 Sensors-Accelerometer.AccZ -8107.000000 +92:400.725 Sensors-Accelerometer.AccX -1238.000000 +92:401.245 Sensors-Accelerometer.AccY -13540.000000 +92:401.785 Sensors-Accelerometer.AccZ -8502.000000 +92:440.690 Sensors-Accelerometer.AccX -1712.000000 +92:441.204 Sensors-Accelerometer.AccY -13345.000000 +92:441.750 Sensors-Accelerometer.AccZ -9709.000000 +92:450.684 Sensors-Magnetometer.MagX -380.000000 +92:451.177 Sensors-Magnetometer.MagY 598.000000 +92:451.675 Sensors-Magnetometer.MagZ 563.000000 +92:480.690 Sensors-Accelerometer.AccX -1927.000000 +92:481.208 Sensors-Accelerometer.AccY -11568.000000 +92:481.748 Sensors-Accelerometer.AccZ -8156.000000 +92:520.690 Sensors-Accelerometer.AccX -2304.000000 +92:521.202 Sensors-Accelerometer.AccY -12101.000000 +92:521.748 Sensors-Accelerometer.AccZ -10328.000000 +92:560.690 Sensors-Accelerometer.AccX -2830.000000 +92:561.212 Sensors-Accelerometer.AccY -11233.000000 +92:561.759 Sensors-Accelerometer.AccZ -10044.000000 +92:600.683 Sensors-Magnetometer.MagX -296.000000 +92:601.170 Sensors-Magnetometer.MagY 556.000000 +92:601.663 Sensors-Magnetometer.MagZ 640.000000 +92:602.182 Sensors-Accelerometer.AccX -3421.000000 +92:602.698 Sensors-Accelerometer.AccY -10809.000000 +92:603.243 Sensors-Accelerometer.AccZ -10157.000000 +92:640.690 Sensors-Accelerometer.AccX -4406.000000 +92:641.209 Sensors-Accelerometer.AccY -9813.000000 +92:641.736 Sensors-Accelerometer.AccZ -10448.000000 +92:650.683 Sensors-Magnetometer.MagX -240.000000 +92:651.174 Sensors-Magnetometer.MagY 525.000000 +92:651.665 Sensors-Magnetometer.MagZ 656.000000 +92:680.690 Sensors-Accelerometer.AccX -4950.000000 +92:681.213 Sensors-Accelerometer.AccY -8781.000000 +92:681.739 Sensors-Accelerometer.AccZ -10946.000000 +92:700.683 Sensors-Magnetometer.MagX -177.000000 +92:701.173 Sensors-Magnetometer.MagY 488.000000 +92:701.663 Sensors-Magnetometer.MagZ 691.000000 +92:720.690 Sensors-Accelerometer.AccX -5650.000000 +92:721.213 Sensors-Accelerometer.AccY -8080.000000 +92:721.731 Sensors-Accelerometer.AccZ -10732.000000 +92:750.683 Sensors-Magnetometer.MagX -111.000000 +92:751.179 Sensors-Magnetometer.MagY 443.000000 +92:751.676 Sensors-Magnetometer.MagZ 712.000000 +92:760.690 Sensors-Accelerometer.AccX -7136.000000 +92:761.210 Sensors-Accelerometer.AccY -7262.000000 +92:761.737 Sensors-Accelerometer.AccZ -10525.000000 +92:800.683 Sensors-Magnetometer.MagX -43.000000 +92:801.146 Sensors-Magnetometer.MagY 392.000000 +92:801.633 Sensors-Magnetometer.MagZ 717.000000 +92:802.159 Sensors-Accelerometer.AccX -8931.000000 +92:802.683 Sensors-Accelerometer.AccY -6638.000000 +92:803.201 Sensors-Accelerometer.AccZ -11254.000000 +92:840.690 Sensors-Accelerometer.AccX -9704.000000 +92:841.210 Sensors-Accelerometer.AccY -5457.000000 +92:841.725 Sensors-Accelerometer.AccZ -11007.000000 +92:850.683 Sensors-Magnetometer.MagX 32.000000 +92:851.143 Sensors-Magnetometer.MagY 342.000000 +92:851.638 Sensors-Magnetometer.MagZ 729.000000 +92:880.690 Sensors-Accelerometer.AccX -10796.000000 +92:881.234 Sensors-Accelerometer.AccY -4435.000000 +92:881.757 Sensors-Accelerometer.AccZ -11723.000000 +92:900.683 Sensors-Magnetometer.MagX 92.000000 +92:901.148 Sensors-Magnetometer.MagY 298.000000 +92:901.638 Sensors-Magnetometer.MagZ 725.000000 +92:920.690 Sensors-Accelerometer.AccX -11504.000000 +92:921.236 Sensors-Accelerometer.AccY -3170.000000 +92:921.759 Sensors-Accelerometer.AccZ -11430.000000 +92:960.690 Sensors-Accelerometer.AccX -11213.000000 +92:961.235 Sensors-Accelerometer.AccY -1938.000000 +92:961.755 Sensors-Accelerometer.AccZ -11157.000000 +93:000.683 Sensors-Magnetometer.MagX 128.000000 +93:001.164 Sensors-Magnetometer.MagY 211.000000 +93:001.654 Sensors-Magnetometer.MagZ 732.000000 +93:002.185 Sensors-Accelerometer.AccX -11254.000000 +93:002.735 Sensors-Accelerometer.AccY -2230.000000 +93:003.255 Sensors-Accelerometer.AccZ -11847.000000 +93:040.690 Sensors-Accelerometer.AccX -11040.000000 +93:041.229 Sensors-Accelerometer.AccY -2630.000000 +93:041.748 Sensors-Accelerometer.AccZ -11906.000000 +93:080.690 Sensors-Accelerometer.AccX -11324.000000 +93:081.240 Sensors-Accelerometer.AccY -829.000000 +93:081.737 Sensors-Accelerometer.AccZ -11767.000000 +93:100.683 Sensors-Magnetometer.MagX 159.000000 +93:101.179 Sensors-Magnetometer.MagY 151.000000 +93:101.674 Sensors-Magnetometer.MagZ 723.000000 +93:120.690 Sensors-Accelerometer.AccX -10671.000000 +93:121.237 Sensors-Accelerometer.AccY 849.000000 +93:121.730 Sensors-Accelerometer.AccZ -11054.000000 +93:160.690 Sensors-Accelerometer.AccX -11262.000000 +93:161.241 Sensors-Accelerometer.AccY 375.000000 +93:161.737 Sensors-Accelerometer.AccZ -11217.000000 +93:200.683 Sensors-Magnetometer.MagX 181.000000 +93:201.171 Sensors-Magnetometer.MagY 79.000000 +93:201.639 Sensors-Magnetometer.MagZ 703.000000 +93:202.170 Sensors-Accelerometer.AccX -12370.000000 +93:202.716 Sensors-Accelerometer.AccY 1226.000000 +93:203.236 Sensors-Accelerometer.AccZ -10718.000000 +93:240.690 Sensors-Accelerometer.AccX -11732.000000 +93:241.236 Sensors-Accelerometer.AccY 1570.000000 +93:241.755 Sensors-Accelerometer.AccZ -9650.000000 +93:280.690 Sensors-Accelerometer.AccX -11449.000000 +93:281.239 Sensors-Accelerometer.AccY 2209.000000 +93:281.759 Sensors-Accelerometer.AccZ -9651.000000 +93:320.690 Sensors-Accelerometer.AccX -12253.000000 +93:321.239 Sensors-Accelerometer.AccY 2851.000000 +93:321.763 Sensors-Accelerometer.AccZ -9751.000000 +93:360.690 Sensors-Accelerometer.AccX -12869.000000 +93:361.237 Sensors-Accelerometer.AccY 4734.000000 +93:361.763 Sensors-Accelerometer.AccZ -9484.000000 +93:400.725 Sensors-Accelerometer.AccX -14274.000000 +93:401.270 Sensors-Accelerometer.AccY 5938.000000 +93:401.794 Sensors-Accelerometer.AccZ -8892.000000 +93:440.690 Sensors-Accelerometer.AccX -13857.000000 +93:441.230 Sensors-Accelerometer.AccY 6482.000000 +93:441.747 Sensors-Accelerometer.AccZ -9584.000000 +93:450.684 Sensors-Magnetometer.MagX 202.000000 +93:451.172 Sensors-Magnetometer.MagY 18.000000 +93:451.636 Sensors-Magnetometer.MagZ 690.000000 +93:480.690 Sensors-Accelerometer.AccX -11769.000000 +93:481.238 Sensors-Accelerometer.AccY 4044.000000 +93:481.758 Sensors-Accelerometer.AccZ -8529.000000 +93:520.690 Sensors-Accelerometer.AccX -12375.000000 +93:521.238 Sensors-Accelerometer.AccY 2628.000000 +93:521.751 Sensors-Accelerometer.AccZ -8777.000000 +93:560.690 Sensors-Accelerometer.AccX -13278.000000 +93:561.240 Sensors-Accelerometer.AccY 2936.000000 +93:561.766 Sensors-Accelerometer.AccZ -6665.000000 +93:600.725 Sensors-Accelerometer.AccX -10411.000000 +93:601.274 Sensors-Accelerometer.AccY 1483.000000 +93:601.793 Sensors-Accelerometer.AccZ -6328.000000 +93:640.690 Sensors-Accelerometer.AccX -9067.000000 +93:641.216 Sensors-Accelerometer.AccY 4174.000000 +93:641.737 Sensors-Accelerometer.AccZ -6649.000000 +93:680.690 Sensors-Accelerometer.AccX -9861.000000 +93:681.215 Sensors-Accelerometer.AccY 4037.000000 +93:681.741 Sensors-Accelerometer.AccZ -6096.000000 +93:720.690 Sensors-Accelerometer.AccX -9351.000000 +93:721.219 Sensors-Accelerometer.AccY 4215.000000 +93:721.740 Sensors-Accelerometer.AccZ -7934.000000 +93:750.683 Sensors-Magnetometer.MagX 210.000000 +93:751.171 Sensors-Magnetometer.MagY 73.000000 +93:751.641 Sensors-Magnetometer.MagZ 700.000000 +93:760.691 Sensors-Accelerometer.AccX -9467.000000 +93:761.216 Sensors-Accelerometer.AccY 3875.000000 +93:761.739 Sensors-Accelerometer.AccZ -7668.000000 +93:800.725 Sensors-Accelerometer.AccX -13163.000000 +93:801.271 Sensors-Accelerometer.AccY 4043.000000 +93:801.793 Sensors-Accelerometer.AccZ -8341.000000 +93:840.690 Sensors-Accelerometer.AccX -16055.000000 +93:841.242 Sensors-Accelerometer.AccY 3925.000000 +93:841.764 Sensors-Accelerometer.AccZ -7004.000000 +93:880.690 Sensors-Accelerometer.AccX -15482.000000 +93:881.239 Sensors-Accelerometer.AccY 4226.000000 +93:881.758 Sensors-Accelerometer.AccZ -9879.000000 +93:900.683 Sensors-Magnetometer.MagX 158.000000 +93:901.180 Sensors-Magnetometer.MagY 142.000000 +93:901.671 Sensors-Magnetometer.MagZ 704.000000 +93:920.690 Sensors-Accelerometer.AccX -13326.000000 +93:921.239 Sensors-Accelerometer.AccY 4590.000000 +93:921.764 Sensors-Accelerometer.AccZ -9707.000000 +93:960.690 Sensors-Accelerometer.AccX -12670.000000 +93:961.242 Sensors-Accelerometer.AccY 2684.000000 +93:961.765 Sensors-Accelerometer.AccZ -11398.000000 +94:000.683 Sensors-Magnetometer.MagX 92.000000 +94:001.151 Sensors-Magnetometer.MagY 147.000000 +94:001.648 Sensors-Magnetometer.MagZ 721.000000 +94:002.176 Sensors-Accelerometer.AccX -13114.000000 +94:002.721 Sensors-Accelerometer.AccY 4285.000000 +94:003.245 Sensors-Accelerometer.AccZ -12611.000000 +94:040.690 Sensors-Accelerometer.AccX -11770.000000 +94:041.242 Sensors-Accelerometer.AccY 4055.000000 +94:041.774 Sensors-Accelerometer.AccZ -11455.000000 +94:080.690 Sensors-Accelerometer.AccX -10329.000000 +94:081.235 Sensors-Accelerometer.AccY 5333.000000 +94:081.754 Sensors-Accelerometer.AccZ -13563.000000 +94:100.683 Sensors-Magnetometer.MagX 32.000000 +94:101.144 Sensors-Magnetometer.MagY 128.000000 +94:101.628 Sensors-Magnetometer.MagZ 746.000000 +94:120.690 Sensors-Accelerometer.AccX -10683.000000 +94:121.240 Sensors-Accelerometer.AccY 5046.000000 +94:121.767 Sensors-Accelerometer.AccZ -12030.000000 +94:160.690 Sensors-Accelerometer.AccX -9264.000000 +94:161.214 Sensors-Accelerometer.AccY 1881.000000 +94:161.738 Sensors-Accelerometer.AccZ -12633.000000 +94:200.683 Sensors-Magnetometer.MagX -48.000000 +94:201.151 Sensors-Magnetometer.MagY 150.000000 +94:201.649 Sensors-Magnetometer.MagZ 752.000000 +94:202.184 Sensors-Accelerometer.AccX -5433.000000 +94:202.710 Sensors-Accelerometer.AccY 1602.000000 +94:203.233 Sensors-Accelerometer.AccZ -13832.000000 +94:240.690 Sensors-Accelerometer.AccX -4291.000000 +94:241.211 Sensors-Accelerometer.AccY 3002.000000 +94:241.730 Sensors-Accelerometer.AccZ -14338.000000 +94:280.690 Sensors-Accelerometer.AccX -3140.000000 +94:281.212 Sensors-Accelerometer.AccY 1792.000000 +94:281.723 Sensors-Accelerometer.AccZ -13588.000000 +94:300.683 Sensors-Magnetometer.MagX 103.000000 +94:301.176 Sensors-Magnetometer.MagY 126.000000 +94:301.668 Sensors-Magnetometer.MagZ 723.000000 +94:320.690 Sensors-Accelerometer.AccX -4537.000000 +94:321.213 Sensors-Accelerometer.AccY 592.000000 +94:321.704 Sensors-Accelerometer.AccZ -10141.000000 +94:350.683 Sensors-Magnetometer.MagX 241.000000 +94:351.180 Sensors-Magnetometer.MagY 92.000000 +94:351.651 Sensors-Magnetometer.MagZ 664.000000 +94:360.690 Sensors-Accelerometer.AccX -10016.000000 +94:361.236 Sensors-Accelerometer.AccY 5484.000000 +94:361.763 Sensors-Accelerometer.AccZ -7869.000000 +94:400.683 Sensors-Magnetometer.MagX 333.000000 +94:401.171 Sensors-Magnetometer.MagY 66.000000 +94:401.632 Sensors-Magnetometer.MagZ 595.000000 +94:402.162 Sensors-Accelerometer.AccX -19023.000000 +94:402.712 Sensors-Accelerometer.AccY 6359.000000 +94:403.238 Sensors-Accelerometer.AccZ -6762.000000 +94:440.690 Sensors-Accelerometer.AccX -15294.000000 +94:441.241 Sensors-Accelerometer.AccY 5085.000000 +94:441.763 Sensors-Accelerometer.AccZ -7109.000000 +94:480.690 Sensors-Accelerometer.AccX -17380.000000 +94:481.234 Sensors-Accelerometer.AccY 3182.000000 +94:481.758 Sensors-Accelerometer.AccZ -6147.000000 +94:500.683 Sensors-Magnetometer.MagX 364.000000 +94:501.175 Sensors-Magnetometer.MagY 120.000000 +94:501.664 Sensors-Magnetometer.MagZ 556.000000 +94:520.690 Sensors-Accelerometer.AccX -15922.000000 +94:521.240 Sensors-Accelerometer.AccY 2836.000000 +94:521.759 Sensors-Accelerometer.AccZ -5425.000000 +94:560.690 Sensors-Accelerometer.AccX -15214.000000 +94:561.239 Sensors-Accelerometer.AccY 2695.000000 +94:561.760 Sensors-Accelerometer.AccZ -6438.000000 +94:600.683 Sensors-Magnetometer.MagX 289.000000 +94:601.174 Sensors-Magnetometer.MagY 96.000000 +94:601.639 Sensors-Magnetometer.MagZ 631.000000 +94:602.171 Sensors-Accelerometer.AccX -15700.000000 +94:602.719 Sensors-Accelerometer.AccY 2925.000000 +94:603.242 Sensors-Accelerometer.AccZ -6057.000000 +94:640.690 Sensors-Accelerometer.AccX -10758.000000 +94:641.233 Sensors-Accelerometer.AccY 4808.000000 +94:641.753 Sensors-Accelerometer.AccZ -6627.000000 +94:650.683 Sensors-Magnetometer.MagX 194.000000 +94:651.175 Sensors-Magnetometer.MagY 82.000000 +94:651.640 Sensors-Magnetometer.MagZ 686.000000 +94:680.690 Sensors-Accelerometer.AccX -11566.000000 +94:681.239 Sensors-Accelerometer.AccY 6092.000000 +94:681.765 Sensors-Accelerometer.AccZ -10703.000000 +94:700.683 Sensors-Magnetometer.MagX 73.000000 +94:701.153 Sensors-Magnetometer.MagY 98.000000 +94:701.621 Sensors-Magnetometer.MagZ 747.000000 +94:720.690 Sensors-Accelerometer.AccX -8663.000000 +94:721.212 Sensors-Accelerometer.AccY 3839.000000 +94:721.735 Sensors-Accelerometer.AccZ -11516.000000 +94:750.683 Sensors-Magnetometer.MagX -31.000000 +94:751.153 Sensors-Magnetometer.MagY 87.000000 +94:751.621 Sensors-Magnetometer.MagZ 769.000000 +94:760.690 Sensors-Accelerometer.AccX -9273.000000 +94:761.217 Sensors-Accelerometer.AccY 3651.000000 +94:761.740 Sensors-Accelerometer.AccZ -13205.000000 +94:800.683 Sensors-Magnetometer.MagX -93.000000 +94:801.149 Sensors-Magnetometer.MagY 52.000000 +94:801.613 Sensors-Magnetometer.MagZ 762.000000 +94:802.142 Sensors-Accelerometer.AccX -3233.000000 +94:802.661 Sensors-Accelerometer.AccY 3953.000000 +94:803.182 Sensors-Accelerometer.AccZ -14231.000000 +94:840.690 Sensors-Accelerometer.AccX -2208.000000 +94:841.204 Sensors-Accelerometer.AccY 5032.000000 +94:841.727 Sensors-Accelerometer.AccZ -15074.000000 +94:850.683 Sensors-Magnetometer.MagX -28.000000 +94:851.147 Sensors-Magnetometer.MagY -20.000000 +94:851.610 Sensors-Magnetometer.MagZ 755.000000 +94:880.690 Sensors-Accelerometer.AccX -926.000000 +94:881.184 Sensors-Accelerometer.AccY 6576.000000 +94:881.701 Sensors-Accelerometer.AccZ -12266.000000 +94:900.683 Sensors-Magnetometer.MagX 166.000000 +94:901.174 Sensors-Magnetometer.MagY -56.000000 +94:901.639 Sensors-Magnetometer.MagZ 686.000000 +94:920.690 Sensors-Accelerometer.AccX -12444.000000 +94:921.239 Sensors-Accelerometer.AccY 6930.000000 +94:921.762 Sensors-Accelerometer.AccZ -4759.000000 +94:950.683 Sensors-Magnetometer.MagX 250.000000 +94:951.175 Sensors-Magnetometer.MagY -66.000000 +94:951.640 Sensors-Magnetometer.MagZ 638.000000 +94:960.690 Sensors-Accelerometer.AccX -17070.000000 +94:961.239 Sensors-Accelerometer.AccY 4397.000000 +94:961.765 Sensors-Accelerometer.AccZ -2622.000000 +95:000.683 Sensors-Magnetometer.MagX 358.000000 +95:001.179 Sensors-Magnetometer.MagY -83.000000 +95:001.651 Sensors-Magnetometer.MagZ 563.000000 +95:002.186 Sensors-Accelerometer.AccX -14933.000000 +95:002.735 Sensors-Accelerometer.AccY 8187.000000 +95:003.267 Sensors-Accelerometer.AccZ -5711.000000 +95:040.690 Sensors-Accelerometer.AccX -17359.000000 +95:041.238 Sensors-Accelerometer.AccY 7919.000000 +95:041.766 Sensors-Accelerometer.AccZ -1953.000000 +95:050.683 Sensors-Magnetometer.MagX 414.000000 +95:051.176 Sensors-Magnetometer.MagY -48.000000 +95:051.640 Sensors-Magnetometer.MagZ 492.000000 +95:080.690 Sensors-Accelerometer.AccX -14824.000000 +95:081.233 Sensors-Accelerometer.AccY 2410.000000 +95:081.754 Sensors-Accelerometer.AccZ -2793.000000 +95:100.683 Sensors-Magnetometer.MagX 442.000000 +95:101.177 Sensors-Magnetometer.MagY 36.000000 +95:101.644 Sensors-Magnetometer.MagZ 473.000000 +95:120.690 Sensors-Accelerometer.AccX -15620.000000 +95:121.237 Sensors-Accelerometer.AccY 915.000000 +95:121.737 Sensors-Accelerometer.AccZ -3154.000000 +95:160.690 Sensors-Accelerometer.AccX -17098.000000 +95:161.238 Sensors-Accelerometer.AccY 2323.000000 +95:161.763 Sensors-Accelerometer.AccZ -2007.000000 +95:200.725 Sensors-Accelerometer.AccX -16040.000000 +95:201.267 Sensors-Accelerometer.AccY 3662.000000 +95:201.791 Sensors-Accelerometer.AccZ -1147.000000 +95:240.690 Sensors-Accelerometer.AccX -14315.000000 +95:241.243 Sensors-Accelerometer.AccY 5228.000000 +95:241.765 Sensors-Accelerometer.AccZ -791.000000 +95:250.684 Sensors-Magnetometer.MagX 472.000000 +95:251.174 Sensors-Magnetometer.MagY -25.000000 +95:251.640 Sensors-Magnetometer.MagZ 429.000000 +95:280.690 Sensors-Accelerometer.AccX -15047.000000 +95:281.244 Sensors-Accelerometer.AccY 5070.000000 +95:281.769 Sensors-Accelerometer.AccZ 242.000000 +95:320.690 Sensors-Accelerometer.AccX -14799.000000 +95:321.241 Sensors-Accelerometer.AccY 5207.000000 +95:321.767 Sensors-Accelerometer.AccZ 715.000000 +95:360.690 Sensors-Accelerometer.AccX -15083.000000 +95:361.241 Sensors-Accelerometer.AccY 5431.000000 +95:361.763 Sensors-Accelerometer.AccZ -533.000000 +95:400.725 Sensors-Accelerometer.AccX -15547.000000 +95:401.277 Sensors-Accelerometer.AccY 5013.000000 +95:401.803 Sensors-Accelerometer.AccZ -103.000000 +95:440.690 Sensors-Accelerometer.AccX -15235.000000 +95:441.241 Sensors-Accelerometer.AccY 4916.000000 +95:441.758 Sensors-Accelerometer.AccZ 75.000000 +95:480.690 Sensors-Accelerometer.AccX -14547.000000 +95:481.243 Sensors-Accelerometer.AccY 6685.000000 +95:481.763 Sensors-Accelerometer.AccZ 777.000000 +95:520.690 Sensors-Accelerometer.AccX -16773.000000 +95:521.242 Sensors-Accelerometer.AccY 6342.000000 +95:521.770 Sensors-Accelerometer.AccZ 103.000000 +95:560.690 Sensors-Accelerometer.AccX -15946.000000 +95:561.239 Sensors-Accelerometer.AccY 5288.000000 +95:561.756 Sensors-Accelerometer.AccZ 381.000000 +95:600.684 Sensors-Magnetometer.MagX 434.000000 +95:601.175 Sensors-Magnetometer.MagY -72.000000 +95:601.642 Sensors-Magnetometer.MagZ 495.000000 +95:602.177 Sensors-Accelerometer.AccX -14211.000000 +95:602.729 Sensors-Accelerometer.AccY 5168.000000 +95:603.250 Sensors-Accelerometer.AccZ -695.000000 +95:640.690 Sensors-Accelerometer.AccX -11675.000000 +95:641.243 Sensors-Accelerometer.AccY 8014.000000 +95:641.771 Sensors-Accelerometer.AccZ -2520.000000 +95:650.683 Sensors-Magnetometer.MagX 331.000000 +95:651.177 Sensors-Magnetometer.MagY -96.000000 +95:651.645 Sensors-Magnetometer.MagZ 585.000000 +95:680.690 Sensors-Accelerometer.AccX -11121.000000 +95:681.237 Sensors-Accelerometer.AccY 6494.000000 +95:681.765 Sensors-Accelerometer.AccZ -5251.000000 +95:700.683 Sensors-Magnetometer.MagX 198.000000 +95:701.177 Sensors-Magnetometer.MagY -84.000000 +95:701.639 Sensors-Magnetometer.MagZ 684.000000 +95:720.690 Sensors-Accelerometer.AccX -7189.000000 +95:721.215 Sensors-Accelerometer.AccY 6810.000000 +95:721.737 Sensors-Accelerometer.AccZ -9293.000000 +95:750.683 Sensors-Magnetometer.MagX 68.000000 +95:751.147 Sensors-Magnetometer.MagY -43.000000 +95:751.617 Sensors-Magnetometer.MagZ 740.000000 +95:760.690 Sensors-Accelerometer.AccX -8137.000000 +95:761.214 Sensors-Accelerometer.AccY 7051.000000 +95:761.741 Sensors-Accelerometer.AccZ -12570.000000 +95:800.683 Sensors-Magnetometer.MagX -45.000000 +95:801.152 Sensors-Magnetometer.MagY -14.000000 +95:801.619 Sensors-Magnetometer.MagZ 774.000000 +95:802.153 Sensors-Accelerometer.AccX -8504.000000 +95:802.675 Sensors-Accelerometer.AccY 5306.000000 +95:803.197 Sensors-Accelerometer.AccZ -13149.000000 +95:840.690 Sensors-Accelerometer.AccX -3500.000000 +95:841.214 Sensors-Accelerometer.AccY 5485.000000 +95:841.739 Sensors-Accelerometer.AccZ -13236.000000 +95:850.684 Sensors-Magnetometer.MagX -118.000000 +95:851.173 Sensors-Magnetometer.MagY 48.000000 +95:851.639 Sensors-Magnetometer.MagZ 783.000000 +95:880.690 Sensors-Accelerometer.AccX -6444.000000 +95:881.213 Sensors-Accelerometer.AccY 5620.000000 +95:881.735 Sensors-Accelerometer.AccZ -16226.000000 +95:900.683 Sensors-Magnetometer.MagX -196.000000 +95:901.176 Sensors-Magnetometer.MagY 77.000000 +95:901.648 Sensors-Magnetometer.MagZ 770.000000 +95:920.690 Sensors-Accelerometer.AccX -4449.000000 +95:921.214 Sensors-Accelerometer.AccY 5218.000000 +95:921.739 Sensors-Accelerometer.AccZ -15851.000000 +95:960.690 Sensors-Accelerometer.AccX -4942.000000 +95:961.217 Sensors-Accelerometer.AccY 4990.000000 +95:961.746 Sensors-Accelerometer.AccZ -15467.000000 +96:000.725 Sensors-Accelerometer.AccX -5388.000000 +96:001.241 Sensors-Accelerometer.AccY 4784.000000 +96:001.760 Sensors-Accelerometer.AccZ -15601.000000 +96:040.690 Sensors-Accelerometer.AccX -1903.000000 +96:041.215 Sensors-Accelerometer.AccY 5466.000000 +96:041.731 Sensors-Accelerometer.AccZ -16108.000000 +96:050.684 Sensors-Magnetometer.MagX -268.000000 +96:051.175 Sensors-Magnetometer.MagY 94.000000 +96:051.648 Sensors-Magnetometer.MagZ 761.000000 +96:080.690 Sensors-Accelerometer.AccX -3262.000000 +96:081.212 Sensors-Accelerometer.AccY 5321.000000 +96:081.734 Sensors-Accelerometer.AccZ -15567.000000 +96:120.690 Sensors-Accelerometer.AccX -6269.000000 +96:121.215 Sensors-Accelerometer.AccY 5857.000000 +96:121.741 Sensors-Accelerometer.AccZ -14796.000000 +96:160.690 Sensors-Accelerometer.AccX -3213.000000 +96:161.207 Sensors-Accelerometer.AccY 7026.000000 +96:161.728 Sensors-Accelerometer.AccZ -14447.000000 +96:200.725 Sensors-Accelerometer.AccX -4704.000000 +96:201.245 Sensors-Accelerometer.AccY 6400.000000 +96:201.755 Sensors-Accelerometer.AccZ -13604.000000 +96:240.690 Sensors-Accelerometer.AccX -3072.000000 +96:241.202 Sensors-Accelerometer.AccY 8015.000000 +96:241.730 Sensors-Accelerometer.AccZ -13597.000000 +96:280.690 Sensors-Accelerometer.AccX -3630.000000 +96:281.213 Sensors-Accelerometer.AccY 6536.000000 +96:281.734 Sensors-Accelerometer.AccZ -13755.000000 +96:320.690 Sensors-Accelerometer.AccX -4367.000000 +96:321.210 Sensors-Accelerometer.AccY 5518.000000 +96:321.732 Sensors-Accelerometer.AccZ -15361.000000 +96:360.690 Sensors-Accelerometer.AccX -4763.000000 +96:361.212 Sensors-Accelerometer.AccY 6015.000000 +96:361.737 Sensors-Accelerometer.AccZ -15876.000000 +96:400.725 Sensors-Accelerometer.AccX -4583.000000 +96:401.249 Sensors-Accelerometer.AccY 7272.000000 +96:401.768 Sensors-Accelerometer.AccZ -14551.000000 +96:440.690 Sensors-Accelerometer.AccX -4055.000000 +96:441.217 Sensors-Accelerometer.AccY 5640.000000 +96:441.735 Sensors-Accelerometer.AccZ -13795.000000 +96:480.690 Sensors-Accelerometer.AccX -3095.000000 +96:481.213 Sensors-Accelerometer.AccY 6515.000000 +96:481.739 Sensors-Accelerometer.AccZ -13957.000000 +96:520.690 Sensors-Accelerometer.AccX -3045.000000 +96:521.212 Sensors-Accelerometer.AccY 6630.000000 +96:521.735 Sensors-Accelerometer.AccZ -13668.000000 +96:560.690 Sensors-Accelerometer.AccX -2592.000000 +96:561.205 Sensors-Accelerometer.AccY 4519.000000 +96:561.730 Sensors-Accelerometer.AccZ -14776.000000 +96:600.725 Sensors-Accelerometer.AccX -1546.000000 +96:601.247 Sensors-Accelerometer.AccY 6302.000000 +96:601.773 Sensors-Accelerometer.AccZ -15807.000000 +96:640.690 Sensors-Accelerometer.AccX -4076.000000 +96:641.213 Sensors-Accelerometer.AccY 5370.000000 +96:641.731 Sensors-Accelerometer.AccZ -14865.000000 +96:680.690 Sensors-Accelerometer.AccX -2740.000000 +96:681.206 Sensors-Accelerometer.AccY 6221.000000 +96:681.729 Sensors-Accelerometer.AccZ -14869.000000 +96:720.690 Sensors-Accelerometer.AccX -4627.000000 +96:721.212 Sensors-Accelerometer.AccY 4988.000000 +96:721.735 Sensors-Accelerometer.AccZ -14975.000000 +96:750.683 Sensors-Magnetometer.MagX -320.000000 +96:751.169 Sensors-Magnetometer.MagY 59.000000 +96:751.638 Sensors-Magnetometer.MagZ 768.000000 +96:760.690 Sensors-Accelerometer.AccX -2986.000000 +96:761.210 Sensors-Accelerometer.AccY 3858.000000 +96:761.735 Sensors-Accelerometer.AccZ -15884.000000 +96:800.725 Sensors-Accelerometer.AccX -3667.000000 +96:801.249 Sensors-Accelerometer.AccY 4002.000000 +96:801.766 Sensors-Accelerometer.AccZ -16678.000000 +96:840.690 Sensors-Accelerometer.AccX -1755.000000 +96:841.213 Sensors-Accelerometer.AccY 2484.000000 +96:841.730 Sensors-Accelerometer.AccZ -16506.000000 +96:880.690 Sensors-Accelerometer.AccX -3047.000000 +96:881.213 Sensors-Accelerometer.AccY 2927.000000 +96:881.738 Sensors-Accelerometer.AccZ -15911.000000 +96:900.683 Sensors-Magnetometer.MagX -337.000000 +96:901.174 Sensors-Magnetometer.MagY -1.000000 +96:901.610 Sensors-Magnetometer.MagZ 762.000000 +96:920.690 Sensors-Accelerometer.AccX -193.000000 +96:921.186 Sensors-Accelerometer.AccY 3223.000000 +96:921.713 Sensors-Accelerometer.AccZ -14978.000000 +96:960.690 Sensors-Accelerometer.AccX -3124.000000 +96:961.210 Sensors-Accelerometer.AccY 3911.000000 +96:961.738 Sensors-Accelerometer.AccZ -14634.000000 +97:000.683 Sensors-Magnetometer.MagX -282.000000 +97:001.173 Sensors-Magnetometer.MagY -41.000000 +97:001.635 Sensors-Magnetometer.MagZ 757.000000 +97:002.166 Sensors-Accelerometer.AccX -4815.000000 +97:002.692 Sensors-Accelerometer.AccY 3653.000000 +97:003.214 Sensors-Accelerometer.AccZ -15311.000000 +97:040.690 Sensors-Accelerometer.AccX -6559.000000 +97:041.210 Sensors-Accelerometer.AccY 4299.000000 +97:041.735 Sensors-Accelerometer.AccZ -15253.000000 +97:080.690 Sensors-Accelerometer.AccX -5992.000000 +97:081.210 Sensors-Accelerometer.AccY 3246.000000 +97:081.732 Sensors-Accelerometer.AccZ -15168.000000 +97:120.690 Sensors-Accelerometer.AccX -4670.000000 +97:121.213 Sensors-Accelerometer.AccY 3640.000000 +97:121.734 Sensors-Accelerometer.AccZ -15105.000000 +97:160.690 Sensors-Accelerometer.AccX -5252.000000 +97:161.207 Sensors-Accelerometer.AccY 3823.000000 +97:161.735 Sensors-Accelerometer.AccZ -15368.000000 +97:200.725 Sensors-Accelerometer.AccX -4161.000000 +97:201.247 Sensors-Accelerometer.AccY 3463.000000 +97:201.769 Sensors-Accelerometer.AccZ -15396.000000 +97:240.690 Sensors-Accelerometer.AccX -3221.000000 +97:241.213 Sensors-Accelerometer.AccY 3076.000000 +97:241.735 Sensors-Accelerometer.AccZ -15236.000000 +97:280.690 Sensors-Accelerometer.AccX -3697.000000 +97:281.203 Sensors-Accelerometer.AccY 3393.000000 +97:281.719 Sensors-Accelerometer.AccZ -15711.000000 +97:320.690 Sensors-Accelerometer.AccX -2289.000000 +97:321.213 Sensors-Accelerometer.AccY 3815.000000 +97:321.735 Sensors-Accelerometer.AccZ -15616.000000 +97:360.690 Sensors-Accelerometer.AccX -2655.000000 +97:361.211 Sensors-Accelerometer.AccY 3423.000000 +97:361.734 Sensors-Accelerometer.AccZ -15628.000000 +97:400.725 Sensors-Accelerometer.AccX -3065.000000 +97:401.250 Sensors-Accelerometer.AccY 3652.000000 +97:401.770 Sensors-Accelerometer.AccZ -15533.000000 +97:440.690 Sensors-Accelerometer.AccX -3896.000000 +97:441.211 Sensors-Accelerometer.AccY 3245.000000 +97:441.734 Sensors-Accelerometer.AccZ -15813.000000 +97:480.690 Sensors-Accelerometer.AccX -3309.000000 +97:481.213 Sensors-Accelerometer.AccY 3543.000000 +97:481.740 Sensors-Accelerometer.AccZ -15737.000000 +97:520.690 Sensors-Accelerometer.AccX -3057.000000 +97:521.213 Sensors-Accelerometer.AccY 3958.000000 +97:521.738 Sensors-Accelerometer.AccZ -15497.000000 +97:560.690 Sensors-Accelerometer.AccX -2936.000000 +97:561.218 Sensors-Accelerometer.AccY 3392.000000 +97:561.732 Sensors-Accelerometer.AccZ -15336.000000 +97:600.725 Sensors-Accelerometer.AccX -2880.000000 +97:601.236 Sensors-Accelerometer.AccY 3584.000000 +97:601.747 Sensors-Accelerometer.AccZ -15120.000000 +97:640.690 Sensors-Accelerometer.AccX -3177.000000 +97:641.214 Sensors-Accelerometer.AccY 3240.000000 +97:641.732 Sensors-Accelerometer.AccZ -15402.000000 +97:680.690 Sensors-Accelerometer.AccX -2328.000000 +97:681.207 Sensors-Accelerometer.AccY 3508.000000 +97:681.725 Sensors-Accelerometer.AccZ -15637.000000 +97:720.690 Sensors-Accelerometer.AccX -4579.000000 +97:721.220 Sensors-Accelerometer.AccY 3084.000000 +97:721.741 Sensors-Accelerometer.AccZ -15154.000000 +97:760.690 Sensors-Accelerometer.AccX -4676.000000 +97:761.210 Sensors-Accelerometer.AccY 3005.000000 +97:761.734 Sensors-Accelerometer.AccZ -15511.000000 +97:800.683 Sensors-Magnetometer.MagX -220.000000 +97:801.175 Sensors-Magnetometer.MagY -84.000000 +97:801.637 Sensors-Magnetometer.MagZ 771.000000 +97:802.171 Sensors-Accelerometer.AccX -5990.000000 +97:802.696 Sensors-Accelerometer.AccY 2752.000000 +97:803.212 Sensors-Accelerometer.AccZ -14600.000000 +97:840.690 Sensors-Accelerometer.AccX -6474.000000 +97:841.213 Sensors-Accelerometer.AccY 2139.000000 +97:841.736 Sensors-Accelerometer.AccZ -14606.000000 +97:880.690 Sensors-Accelerometer.AccX -5814.000000 +97:881.218 Sensors-Accelerometer.AccY 3343.000000 +97:881.744 Sensors-Accelerometer.AccZ -14578.000000 +97:900.683 Sensors-Magnetometer.MagX -153.000000 +97:901.180 Sensors-Magnetometer.MagY -86.000000 +97:901.649 Sensors-Magnetometer.MagZ 757.000000 +97:920.690 Sensors-Accelerometer.AccX -7387.000000 +97:921.213 Sensors-Accelerometer.AccY 2607.000000 +97:921.738 Sensors-Accelerometer.AccZ -13473.000000 +97:960.690 Sensors-Accelerometer.AccX -7123.000000 +97:961.219 Sensors-Accelerometer.AccY 2793.000000 +97:961.740 Sensors-Accelerometer.AccZ -13987.000000 +98:000.725 Sensors-Accelerometer.AccX -6886.000000 +98:001.245 Sensors-Accelerometer.AccY 3115.000000 +98:001.771 Sensors-Accelerometer.AccZ -13472.000000 +98:040.690 Sensors-Accelerometer.AccX -7927.000000 +98:041.220 Sensors-Accelerometer.AccY 2184.000000 +98:041.736 Sensors-Accelerometer.AccZ -13887.000000 +98:080.690 Sensors-Accelerometer.AccX -9227.000000 +98:081.218 Sensors-Accelerometer.AccY 2455.000000 +98:081.744 Sensors-Accelerometer.AccZ -13591.000000 +98:100.683 Sensors-Magnetometer.MagX -88.000000 +98:101.148 Sensors-Magnetometer.MagY -61.000000 +98:101.617 Sensors-Magnetometer.MagZ 769.000000 +98:120.690 Sensors-Accelerometer.AccX -8216.000000 +98:121.212 Sensors-Accelerometer.AccY 2681.000000 +98:121.734 Sensors-Accelerometer.AccZ -12880.000000 +98:160.690 Sensors-Accelerometer.AccX -9342.000000 +98:161.217 Sensors-Accelerometer.AccY 1708.000000 +98:161.736 Sensors-Accelerometer.AccZ -13492.000000 +98:200.725 Sensors-Accelerometer.AccX -9312.000000 +98:201.250 Sensors-Accelerometer.AccY 2405.000000 +98:201.779 Sensors-Accelerometer.AccZ -12724.000000 +98:240.690 Sensors-Accelerometer.AccX -9297.000000 +98:241.216 Sensors-Accelerometer.AccY 1724.000000 +98:241.736 Sensors-Accelerometer.AccZ -13030.000000 +98:280.690 Sensors-Accelerometer.AccX -9118.000000 +98:281.222 Sensors-Accelerometer.AccY 1773.000000 +98:281.744 Sensors-Accelerometer.AccZ -12786.000000 +98:320.690 Sensors-Accelerometer.AccX -9091.000000 +98:321.215 Sensors-Accelerometer.AccY 1394.000000 +98:321.727 Sensors-Accelerometer.AccZ -12913.000000 +98:360.690 Sensors-Accelerometer.AccX -9553.000000 +98:361.213 Sensors-Accelerometer.AccY 2071.000000 +98:361.731 Sensors-Accelerometer.AccZ -12442.000000 +98:400.725 Sensors-Accelerometer.AccX -8722.000000 +98:401.245 Sensors-Accelerometer.AccY 2000.000000 +98:401.758 Sensors-Accelerometer.AccZ -12693.000000 +98:440.690 Sensors-Accelerometer.AccX -8483.000000 +98:441.210 Sensors-Accelerometer.AccY 1365.000000 +98:441.721 Sensors-Accelerometer.AccZ -13070.000000 +98:480.690 Sensors-Accelerometer.AccX -8855.000000 +98:481.213 Sensors-Accelerometer.AccY 849.000000 +98:481.704 Sensors-Accelerometer.AccZ -12921.000000 +98:520.690 Sensors-Accelerometer.AccX -8936.000000 +98:521.209 Sensors-Accelerometer.AccY 937.000000 +98:521.705 Sensors-Accelerometer.AccZ -13339.000000 +98:560.690 Sensors-Accelerometer.AccX -9051.000000 +98:561.212 Sensors-Accelerometer.AccY 955.000000 +98:561.707 Sensors-Accelerometer.AccZ -13016.000000 +98:600.725 Sensors-Accelerometer.AccX -8467.000000 +98:601.250 Sensors-Accelerometer.AccY 1362.000000 +98:601.764 Sensors-Accelerometer.AccZ -12922.000000 +98:640.690 Sensors-Accelerometer.AccX -8987.000000 +98:641.211 Sensors-Accelerometer.AccY 1120.000000 +98:641.724 Sensors-Accelerometer.AccZ -13041.000000 +98:680.690 Sensors-Accelerometer.AccX -8629.000000 +98:681.213 Sensors-Accelerometer.AccY 1311.000000 +98:681.729 Sensors-Accelerometer.AccZ -13070.000000 +98:720.690 Sensors-Accelerometer.AccX -9012.000000 +98:721.207 Sensors-Accelerometer.AccY 1072.000000 +98:721.719 Sensors-Accelerometer.AccZ -13025.000000 +98:760.690 Sensors-Accelerometer.AccX -8710.000000 +98:761.213 Sensors-Accelerometer.AccY 1196.000000 +98:761.734 Sensors-Accelerometer.AccZ -13163.000000 +98:840.690 Sensors-Accelerometer.AccX -8884.000000 +98:841.213 Sensors-Accelerometer.AccY 1033.000000 +98:841.731 Sensors-Accelerometer.AccZ -12945.000000 +98:960.690 Sensors-Accelerometer.AccX -8773.000000 +98:961.212 Sensors-Accelerometer.AccY 1234.000000 +98:961.728 Sensors-Accelerometer.AccZ -12989.000000 +99:000.725 Sensors-Accelerometer.AccX -9106.000000 +99:001.250 Sensors-Accelerometer.AccY 945.000000 +99:001.746 Sensors-Accelerometer.AccZ -13003.000000 +99:040.690 Sensors-Accelerometer.AccX -8938.000000 +99:041.214 Sensors-Accelerometer.AccY 1149.000000 +99:041.734 Sensors-Accelerometer.AccZ -13032.000000 +99:240.690 Sensors-Accelerometer.AccX -9099.000000 +99:241.219 Sensors-Accelerometer.AccY 984.000000 +99:241.711 Sensors-Accelerometer.AccZ -12803.000000 +99:280.690 Sensors-Accelerometer.AccX -8752.000000 +99:281.211 Sensors-Accelerometer.AccY 1256.000000 +99:281.728 Sensors-Accelerometer.AccZ -12819.000000 +99:320.690 Sensors-Accelerometer.AccX -9041.000000 +99:321.215 Sensors-Accelerometer.AccY 935.000000 +99:321.715 Sensors-Accelerometer.AccZ -12833.000000 +99:400.725 Sensors-Accelerometer.AccX -8800.000000 +99:401.245 Sensors-Accelerometer.AccY 1226.000000 +99:401.765 Sensors-Accelerometer.AccZ -12994.000000 +99:440.690 Sensors-Accelerometer.AccX -9033.000000 +99:441.213 Sensors-Accelerometer.AccY 1251.000000 +99:441.738 Sensors-Accelerometer.AccZ -12908.000000 +99:480.690 Sensors-Accelerometer.AccX -8877.000000 +99:481.217 Sensors-Accelerometer.AccY 934.000000 +99:481.715 Sensors-Accelerometer.AccZ -12947.000000 +99:520.690 Sensors-Accelerometer.AccX -8905.000000 +99:521.217 Sensors-Accelerometer.AccY 1227.000000 +99:521.741 Sensors-Accelerometer.AccZ -12873.000000 +99:600.725 Sensors-Accelerometer.AccX -8947.000000 +99:601.251 Sensors-Accelerometer.AccY 1000.000000 +99:601.767 Sensors-Accelerometer.AccZ -12961.000000 +100:040.690 Sensors-Accelerometer.AccX -8876.000000 +100:041.237 Sensors-Accelerometer.AccY 851.000000 +100:041.754 Sensors-Accelerometer.AccZ -13019.000000 +100:550.683 Sensors-Magnetometer.MagX -40.000000 +100:551.169 Sensors-Magnetometer.MagY -26.000000 +100:551.658 Sensors-Magnetometer.MagZ 764.000000 +100:640.690 Sensors-Accelerometer.AccX -8958.000000 +100:641.238 Sensors-Accelerometer.AccY 871.000000 +100:641.755 Sensors-Accelerometer.AccZ -12751.000000 +100:720.690 Sensors-Accelerometer.AccX -9040.000000 +100:721.232 Sensors-Accelerometer.AccY 817.000000 +100:721.753 Sensors-Accelerometer.AccZ -12997.000000 +100:800.725 Sensors-Accelerometer.AccX -8958.000000 +100:801.273 Sensors-Accelerometer.AccY 1075.000000 +100:801.814 Sensors-Accelerometer.AccZ -12836.000000 +100:880.690 Sensors-Accelerometer.AccX -9057.000000 +100:881.238 Sensors-Accelerometer.AccY 836.000000 +100:881.752 Sensors-Accelerometer.AccZ -12884.000000 +100:960.690 Sensors-Accelerometer.AccX -8853.000000 +100:961.234 Sensors-Accelerometer.AccY 976.000000 +100:961.748 Sensors-Accelerometer.AccZ -12812.000000 +101:120.690 Sensors-Accelerometer.AccX -9075.000000 +101:121.238 Sensors-Accelerometer.AccY 1053.000000 +101:121.773 Sensors-Accelerometer.AccZ -12789.000000 +101:280.690 Sensors-Accelerometer.AccX -9192.000000 +101:281.233 Sensors-Accelerometer.AccY 828.000000 +101:281.751 Sensors-Accelerometer.AccZ -12863.000000 +101:640.690 Sensors-Accelerometer.AccX -9181.000000 +101:641.237 Sensors-Accelerometer.AccY 1027.000000 +101:641.778 Sensors-Accelerometer.AccZ -12533.000000 +101:760.690 Sensors-Accelerometer.AccX -9422.000000 +101:761.236 Sensors-Accelerometer.AccY 979.000000 +101:761.758 Sensors-Accelerometer.AccZ -12687.000000 +101:800.725 Sensors-Accelerometer.AccX -8957.000000 +101:801.276 Sensors-Accelerometer.AccY 822.000000 +101:801.793 Sensors-Accelerometer.AccZ -12786.000000 +101:840.690 Sensors-Accelerometer.AccX -9635.000000 +101:841.241 Sensors-Accelerometer.AccY 1176.000000 +101:841.783 Sensors-Accelerometer.AccZ -12368.000000 +101:880.690 Sensors-Accelerometer.AccX -9425.000000 +101:881.239 Sensors-Accelerometer.AccY 998.000000 +101:881.764 Sensors-Accelerometer.AccZ -12379.000000 +101:920.690 Sensors-Accelerometer.AccX -9677.000000 +101:921.237 Sensors-Accelerometer.AccY 1242.000000 +101:921.779 Sensors-Accelerometer.AccZ -12561.000000 +101:960.690 Sensors-Accelerometer.AccX -9720.000000 +101:961.240 Sensors-Accelerometer.AccY 970.000000 +101:961.758 Sensors-Accelerometer.AccZ -12403.000000 +102:000.725 Sensors-Accelerometer.AccX -9460.000000 +102:001.270 Sensors-Accelerometer.AccY 1305.000000 +102:001.814 Sensors-Accelerometer.AccZ -12428.000000 +102:080.690 Sensors-Accelerometer.AccX -9456.000000 +102:081.235 Sensors-Accelerometer.AccY 1954.000000 +102:081.777 Sensors-Accelerometer.AccZ -12393.000000 +102:100.683 Sensors-Magnetometer.MagX 18.000000 +102:101.172 Sensors-Magnetometer.MagY -43.000000 +102:101.666 Sensors-Magnetometer.MagZ 757.000000 +102:120.690 Sensors-Accelerometer.AccX -9439.000000 +102:121.240 Sensors-Accelerometer.AccY 3390.000000 +102:121.786 Sensors-Accelerometer.AccZ -12002.000000 +102:160.690 Sensors-Accelerometer.AccX -8600.000000 +102:161.234 Sensors-Accelerometer.AccY 2828.000000 +102:161.779 Sensors-Accelerometer.AccZ -10822.000000 +102:200.683 Sensors-Magnetometer.MagX 110.000000 +102:201.199 Sensors-Magnetometer.MagY -13.000000 +102:201.691 Sensors-Magnetometer.MagZ 732.000000 +102:202.248 Sensors-Accelerometer.AccX -10816.000000 +102:202.810 Sensors-Accelerometer.AccY 619.000000 +102:203.335 Sensors-Accelerometer.AccZ -9839.000000 +102:240.690 Sensors-Accelerometer.AccX -12716.000000 +102:241.262 Sensors-Accelerometer.AccY 1322.000000 +102:241.802 Sensors-Accelerometer.AccZ -9209.000000 +102:250.683 Sensors-Magnetometer.MagX 177.000000 +102:251.197 Sensors-Magnetometer.MagY -1.000000 +102:251.660 Sensors-Magnetometer.MagZ 700.000000 +102:280.690 Sensors-Accelerometer.AccX -12786.000000 +102:281.265 Sensors-Accelerometer.AccY 1405.000000 +102:281.810 Sensors-Accelerometer.AccZ -8479.000000 +102:300.683 Sensors-Magnetometer.MagX 239.000000 +102:301.206 Sensors-Magnetometer.MagY 13.000000 +102:301.695 Sensors-Magnetometer.MagZ 650.000000 +102:320.690 Sensors-Accelerometer.AccX -16540.000000 +102:321.260 Sensors-Accelerometer.AccY 1070.000000 +102:321.803 Sensors-Accelerometer.AccZ -6282.000000 +102:350.683 Sensors-Magnetometer.MagX 319.000000 +102:351.207 Sensors-Magnetometer.MagY 23.000000 +102:351.699 Sensors-Magnetometer.MagZ 608.000000 +102:360.690 Sensors-Accelerometer.AccX -17452.000000 +102:361.262 Sensors-Accelerometer.AccY -502.000000 +102:361.787 Sensors-Accelerometer.AccZ -5089.000000 +102:400.725 Sensors-Accelerometer.AccX -15849.000000 +102:401.289 Sensors-Accelerometer.AccY 2398.000000 +102:401.826 Sensors-Accelerometer.AccZ -4578.000000 +102:440.690 Sensors-Accelerometer.AccX -16161.000000 +102:441.255 Sensors-Accelerometer.AccY 4608.000000 +102:441.784 Sensors-Accelerometer.AccZ -2824.000000 +102:450.683 Sensors-Magnetometer.MagX 375.000000 +102:451.198 Sensors-Magnetometer.MagY -59.000000 +102:451.686 Sensors-Magnetometer.MagZ 531.000000 +102:480.690 Sensors-Accelerometer.AccX -14820.000000 +102:481.252 Sensors-Accelerometer.AccY 3381.000000 +102:481.790 Sensors-Accelerometer.AccZ -1450.000000 +102:520.690 Sensors-Accelerometer.AccX -15251.000000 +102:521.263 Sensors-Accelerometer.AccY 4884.000000 +102:521.804 Sensors-Accelerometer.AccZ -1260.000000 +102:560.690 Sensors-Accelerometer.AccX -14405.000000 +102:561.256 Sensors-Accelerometer.AccY 4825.000000 +102:561.799 Sensors-Accelerometer.AccZ -651.000000 +102:600.683 Sensors-Magnetometer.MagX 432.000000 +102:601.192 Sensors-Magnetometer.MagY -93.000000 +102:601.679 Sensors-Magnetometer.MagZ 483.000000 +102:602.234 Sensors-Accelerometer.AccX -13914.000000 +102:602.804 Sensors-Accelerometer.AccY 4796.000000 +102:603.349 Sensors-Accelerometer.AccZ -981.000000 +102:640.690 Sensors-Accelerometer.AccX -15620.000000 +102:641.256 Sensors-Accelerometer.AccY 4187.000000 +102:641.802 Sensors-Accelerometer.AccZ -1025.000000 +102:680.690 Sensors-Accelerometer.AccX -15368.000000 +102:681.255 Sensors-Accelerometer.AccY 4700.000000 +102:681.800 Sensors-Accelerometer.AccZ -926.000000 +102:720.690 Sensors-Accelerometer.AccX -16444.000000 +102:721.253 Sensors-Accelerometer.AccY 5303.000000 +102:721.798 Sensors-Accelerometer.AccZ -2287.000000 +102:750.684 Sensors-Magnetometer.MagX 475.000000 +102:751.203 Sensors-Magnetometer.MagY -110.000000 +102:751.715 Sensors-Magnetometer.MagZ 403.000000 +102:760.691 Sensors-Accelerometer.AccX -16352.000000 +102:761.257 Sensors-Accelerometer.AccY 4964.000000 +102:761.800 Sensors-Accelerometer.AccZ 450.000000 +102:800.725 Sensors-Accelerometer.AccX -13792.000000 +102:801.287 Sensors-Accelerometer.AccY 4755.000000 +102:801.832 Sensors-Accelerometer.AccZ 2083.000000 +102:840.690 Sensors-Accelerometer.AccX -14693.000000 +102:841.261 Sensors-Accelerometer.AccY 4761.000000 +102:841.806 Sensors-Accelerometer.AccZ 1868.000000 +102:850.684 Sensors-Magnetometer.MagX 507.000000 +102:851.201 Sensors-Magnetometer.MagY -105.000000 +102:851.705 Sensors-Magnetometer.MagZ 351.000000 +102:880.690 Sensors-Accelerometer.AccX -13119.000000 +102:881.256 Sensors-Accelerometer.AccY 3001.000000 +102:881.801 Sensors-Accelerometer.AccZ 5790.000000 +102:920.690 Sensors-Accelerometer.AccX -13800.000000 +102:921.250 Sensors-Accelerometer.AccY 4114.000000 +102:921.790 Sensors-Accelerometer.AccZ 4978.000000 +102:960.690 Sensors-Accelerometer.AccX -14841.000000 +102:961.258 Sensors-Accelerometer.AccY 3870.000000 +102:961.802 Sensors-Accelerometer.AccZ 2544.000000 +103:000.683 Sensors-Magnetometer.MagX 539.000000 +103:001.200 Sensors-Magnetometer.MagY -80.000000 +103:001.684 Sensors-Magnetometer.MagZ 291.000000 +103:002.236 Sensors-Accelerometer.AccX -11692.000000 +103:002.806 Sensors-Accelerometer.AccY 4324.000000 +103:003.347 Sensors-Accelerometer.AccZ 4280.000000 +103:040.690 Sensors-Accelerometer.AccX -13644.000000 +103:041.251 Sensors-Accelerometer.AccY 3418.000000 +103:041.790 Sensors-Accelerometer.AccZ 3650.000000 +103:080.690 Sensors-Accelerometer.AccX -15171.000000 +103:081.264 Sensors-Accelerometer.AccY 3003.000000 +103:081.809 Sensors-Accelerometer.AccZ 4027.000000 +103:120.690 Sensors-Accelerometer.AccX -15890.000000 +103:121.261 Sensors-Accelerometer.AccY 4660.000000 +103:121.803 Sensors-Accelerometer.AccZ 1138.000000 +103:160.690 Sensors-Accelerometer.AccX -15179.000000 +103:161.265 Sensors-Accelerometer.AccY 3836.000000 +103:161.812 Sensors-Accelerometer.AccZ 4293.000000 +103:200.725 Sensors-Accelerometer.AccX -14630.000000 +103:201.297 Sensors-Accelerometer.AccY 3753.000000 +103:201.840 Sensors-Accelerometer.AccZ 4387.000000 +103:240.690 Sensors-Accelerometer.AccX -14429.000000 +103:241.252 Sensors-Accelerometer.AccY 4158.000000 +103:241.795 Sensors-Accelerometer.AccZ 4247.000000 +103:280.690 Sensors-Accelerometer.AccX -14787.000000 +103:281.255 Sensors-Accelerometer.AccY 4254.000000 +103:281.797 Sensors-Accelerometer.AccZ 3228.000000 +103:320.690 Sensors-Accelerometer.AccX -15203.000000 +103:321.268 Sensors-Accelerometer.AccY 4146.000000 +103:321.812 Sensors-Accelerometer.AccZ 3260.000000 +103:360.690 Sensors-Accelerometer.AccX -14952.000000 +103:361.256 Sensors-Accelerometer.AccY 4377.000000 +103:361.800 Sensors-Accelerometer.AccZ 2314.000000 +103:400.725 Sensors-Accelerometer.AccX -14219.000000 +103:401.298 Sensors-Accelerometer.AccY 3929.000000 +103:401.846 Sensors-Accelerometer.AccZ 3440.000000 +103:440.690 Sensors-Accelerometer.AccX -14857.000000 +103:441.259 Sensors-Accelerometer.AccY 4065.000000 +103:441.802 Sensors-Accelerometer.AccZ 3717.000000 +103:480.690 Sensors-Accelerometer.AccX -14436.000000 +103:481.255 Sensors-Accelerometer.AccY 4050.000000 +103:481.799 Sensors-Accelerometer.AccZ 3486.000000 +103:520.690 Sensors-Accelerometer.AccX -14909.000000 +103:521.264 Sensors-Accelerometer.AccY 4154.000000 +103:521.807 Sensors-Accelerometer.AccZ 2985.000000 +103:560.690 Sensors-Accelerometer.AccX -14930.000000 +103:561.259 Sensors-Accelerometer.AccY 3973.000000 +103:561.805 Sensors-Accelerometer.AccZ 3221.000000 +103:640.690 Sensors-Accelerometer.AccX -14756.000000 +103:641.257 Sensors-Accelerometer.AccY 4342.000000 +103:641.799 Sensors-Accelerometer.AccZ 3134.000000 +103:680.690 Sensors-Accelerometer.AccX -15235.000000 +103:681.260 Sensors-Accelerometer.AccY 4243.000000 +103:681.802 Sensors-Accelerometer.AccZ 3319.000000 +103:720.690 Sensors-Accelerometer.AccX -14436.000000 +103:721.255 Sensors-Accelerometer.AccY 4047.000000 +103:721.799 Sensors-Accelerometer.AccZ 3191.000000 +103:800.725 Sensors-Accelerometer.AccX -14678.000000 +103:801.304 Sensors-Accelerometer.AccY 4156.000000 +103:801.849 Sensors-Accelerometer.AccZ 3188.000000 +103:840.690 Sensors-Accelerometer.AccX -15066.000000 +103:841.261 Sensors-Accelerometer.AccY 3934.000000 +103:841.805 Sensors-Accelerometer.AccZ 3402.000000 +103:880.690 Sensors-Accelerometer.AccX -14527.000000 +103:881.262 Sensors-Accelerometer.AccY 4331.000000 +103:881.808 Sensors-Accelerometer.AccZ 3165.000000 +103:960.690 Sensors-Accelerometer.AccX -14842.000000 +103:961.260 Sensors-Accelerometer.AccY 4239.000000 +103:961.807 Sensors-Accelerometer.AccZ 3101.000000 +104:000.725 Sensors-Accelerometer.AccX -14818.000000 +104:001.289 Sensors-Accelerometer.AccY 4190.000000 +104:001.833 Sensors-Accelerometer.AccZ 3448.000000 +104:040.690 Sensors-Accelerometer.AccX -15059.000000 +104:041.260 Sensors-Accelerometer.AccY 4025.000000 +104:041.802 Sensors-Accelerometer.AccZ 3526.000000 +104:064.814 Buttons-Center 0x1 +104:080.690 Sensors-Accelerometer.AccX -14748.000000 +104:081.254 Sensors-Accelerometer.AccY 4742.000000 +104:081.798 Sensors-Accelerometer.AccZ 3169.000000 +104:120.690 Sensors-Accelerometer.AccX -14563.000000 +104:121.262 Sensors-Accelerometer.AccY 3818.000000 +104:121.805 Sensors-Accelerometer.AccZ 3596.000000 +104:160.690 Sensors-Accelerometer.AccX -14662.000000 +104:161.265 Sensors-Accelerometer.AccY 4222.000000 +104:161.807 Sensors-Accelerometer.AccZ 3350.000000 +104:200.725 Sensors-Accelerometer.AccX -14245.000000 +104:201.296 Sensors-Accelerometer.AccY 4293.000000 +104:201.839 Sensors-Accelerometer.AccZ 3235.000000 +104:240.690 Sensors-Accelerometer.AccX -14833.000000 +104:241.259 Sensors-Accelerometer.AccY 4026.000000 +104:241.805 Sensors-Accelerometer.AccZ 3542.000000 +104:280.690 Sensors-Accelerometer.AccX -14540.000000 +104:281.262 Sensors-Accelerometer.AccY 4250.000000 +104:281.806 Sensors-Accelerometer.AccZ 3396.000000 +104:400.725 Sensors-Accelerometer.AccX -14950.000000 +104:401.298 Sensors-Accelerometer.AccY 4052.000000 +104:401.839 Sensors-Accelerometer.AccZ 3695.000000 +104:440.690 Sensors-Accelerometer.AccX -14715.000000 +104:441.266 Sensors-Accelerometer.AccY 4133.000000 +104:441.812 Sensors-Accelerometer.AccZ 3509.000000 +105:040.690 Sensors-Accelerometer.AccX -14456.000000 +105:041.252 Sensors-Accelerometer.AccY 4300.000000 +105:041.789 Sensors-Accelerometer.AccZ 3380.000000 +105:080.690 Sensors-Accelerometer.AccX -14793.000000 +105:081.255 Sensors-Accelerometer.AccY 4193.000000 +105:081.799 Sensors-Accelerometer.AccZ 3361.000000 +105:200.725 Sensors-Accelerometer.AccX -14583.000000 +105:201.292 Sensors-Accelerometer.AccY 4187.000000 +105:201.835 Sensors-Accelerometer.AccZ 3378.000000 +105:450.683 Sensors-Magnetometer.MagX 530.000000 +105:451.196 Sensors-Magnetometer.MagY -90.000000 +105:451.687 Sensors-Magnetometer.MagZ 305.000000 +105:840.690 Sensors-Accelerometer.AccX -14950.000000 +105:841.259 Sensors-Accelerometer.AccY 4063.000000 +105:841.805 Sensors-Accelerometer.AccZ 3528.000000 +105:920.690 Sensors-Accelerometer.AccX -14458.000000 +105:921.254 Sensors-Accelerometer.AccY 4110.000000 +105:921.796 Sensors-Accelerometer.AccZ 3489.000000 +105:960.690 Sensors-Accelerometer.AccX -14685.000000 +105:961.256 Sensors-Accelerometer.AccY 4067.000000 +105:961.803 Sensors-Accelerometer.AccZ 3393.000000 +106:120.690 Sensors-Accelerometer.AccX -14638.000000 +106:121.264 Sensors-Accelerometer.AccY 4092.000000 +106:121.808 Sensors-Accelerometer.AccZ 3611.000000 +106:200.725 Sensors-Accelerometer.AccX -14667.000000 +106:201.297 Sensors-Accelerometer.AccY 4130.000000 +106:201.835 Sensors-Accelerometer.AccZ 3389.000000 +106:240.690 Sensors-Accelerometer.AccX -14892.000000 +106:241.253 Sensors-Accelerometer.AccY 3932.000000 +106:241.800 Sensors-Accelerometer.AccZ 3631.000000 +106:280.690 Sensors-Accelerometer.AccX -14709.000000 +106:281.259 Sensors-Accelerometer.AccY 4144.000000 +106:281.797 Sensors-Accelerometer.AccZ 3480.000000 +106:760.690 Sensors-Accelerometer.AccX -14465.000000 +106:761.258 Sensors-Accelerometer.AccY 4175.000000 +106:761.802 Sensors-Accelerometer.AccZ 3368.000000 +106:800.725 Sensors-Accelerometer.AccX -14834.000000 +106:801.293 Sensors-Accelerometer.AccY 3954.000000 +106:801.834 Sensors-Accelerometer.AccZ 3685.000000 +106:840.690 Sensors-Accelerometer.AccX -14653.000000 +106:841.263 Sensors-Accelerometer.AccY 4147.000000 +106:841.809 Sensors-Accelerometer.AccZ 3433.000000 +107:040.690 Sensors-Accelerometer.AccX -14770.000000 +107:041.255 Sensors-Accelerometer.AccY 3832.000000 +107:041.799 Sensors-Accelerometer.AccZ 3550.000000 +107:080.690 Sensors-Accelerometer.AccX -14552.000000 +107:081.257 Sensors-Accelerometer.AccY 4071.000000 +107:081.804 Sensors-Accelerometer.AccZ 3476.000000 +107:200.725 Sensors-Accelerometer.AccX -14770.000000 +107:201.290 Sensors-Accelerometer.AccY 4164.000000 +107:201.825 Sensors-Accelerometer.AccZ 3521.000000 +107:360.690 Sensors-Accelerometer.AccX -14378.000000 +107:361.256 Sensors-Accelerometer.AccY 4077.000000 +107:361.800 Sensors-Accelerometer.AccZ 3619.000000 +107:480.690 Sensors-Accelerometer.AccX -14671.000000 +107:481.265 Sensors-Accelerometer.AccY 4043.000000 +107:481.809 Sensors-Accelerometer.AccZ 3702.000000 +107:560.690 Sensors-Accelerometer.AccX -14367.000000 +107:561.259 Sensors-Accelerometer.AccY 4344.000000 +107:561.795 Sensors-Accelerometer.AccZ 3503.000000 +107:600.725 Sensors-Accelerometer.AccX -14657.000000 +107:601.294 Sensors-Accelerometer.AccY 4352.000000 +107:601.823 Sensors-Accelerometer.AccZ 2845.000000 +107:640.690 Sensors-Accelerometer.AccX -14875.000000 +107:641.262 Sensors-Accelerometer.AccY 4190.000000 +107:641.810 Sensors-Accelerometer.AccZ 3530.000000 +107:704.381 Buttons-Center 0x0 diff --git a/sources/common/doc/examples/user1.xml b/sources/common/doc/examples/user1.xml new file mode 100644 index 0000000..8386ed7 --- /dev/null +++ b/sources/common/doc/examples/user1.xml @@ -0,0 +1,36 @@ + + + + + + ([[:d:]]+):([[:d:]]+)\.([[:d:]]+) Sensors-Magnetometer.Mag([XYZ]+) 0x([0-9a-fA-F]+) + 1000000*dec(/1) + 1000*dec(/2) + dec(/3) + FRDM.Sensors.Magnetometer.Mag/4 + hex(/5) + 32 + + + + ([[:d:]]+):([[:d:]]+)\.([[:d:]]+) Sensors-Slider 0x([0-9a-fA-F]+) + 1000000*dec(/1) + 1000*dec(/2) + dec(/3) + FRDM.Sensors.Slider + hex(/4) + 7 + + + + ([[:d:]]+):([[:d:]]+)\.([[:d:]]+) Buttons-SW([13]+) ([[:d:]]+) + 1000000*dec(/1) + 1000*dec(/2) + dec(/3) + FRDM.Buttons-SW/4 + dec(/5) + 1 + + + + ([[:digit:]]+):([[:digit:]]+)\.([[:digit:]]+) ([[:graph:]]+)-([[:graph:]]+) ([[:digit:][:punct:]]+) + 1000000*dec(/1) + 1000*dec(/2) + dec(/3) + FRDM./4./5 + /6 + + + diff --git a/sources/common/doc/examples/user2.xml b/sources/common/doc/examples/user2.xml new file mode 100644 index 0000000..c4705bf --- /dev/null +++ b/sources/common/doc/examples/user2.xml @@ -0,0 +1,26 @@ + + + + + + ([[:digit:]]+):([[:digit:]]+)\.([[:digit:]]+) Buttons-([[:graph:]]+) 0x([0-9a-fA-F]+) + 1000000*dec(/1) + 1000*dec(/2) + dec(/3) + Disco.Buttons./4 + dec(/5) + 1 + + + + ([[:digit:]]+):([[:digit:]]+)\.([[:digit:]]+) ([[:graph:]]+)-([[:graph:]]+) ([[:digit:][:punct:]]+) + 1000000*dec(/1) + 1000*dec(/2) + dec(/3) + Disco./4./5 + /6 + + + + ([[:digit:]]+):([[:digit:]]+)\.([[:digit:]]+) Sync.* + 1000000*dec(/1) + 1000*dec(/2) + dec(/3) + Disco.Sync + + + diff --git a/sources/common/doc/examples/vcdMaker.xml b/sources/common/doc/examples/vcdMaker.xml index 6e17964..3910481 100644 --- a/sources/common/doc/examples/vcdMaker.xml +++ b/sources/common/doc/examples/vcdMaker.xml @@ -3,24 +3,24 @@ - ^#([[:d:]]+) ([[:graph:]]+) ([[:d:]]+) ([[:d:]]+)( +.*)? - 1 - 2 - 3 - 4 + #([[:d:]]+) ([[:graph:]]+) ([[:d:]]+) ([[:d:]]+) + dec(/1) + /2 + dec(/3) + dec(/4) - ^#([[:d:]]+) ([[:graph:]]+) ([[:d:][:punct:]]+) f( +.*)? - 1 - 2 - 3 + #([[:d:]]+) ([[:graph:]]+) ([[:d:][:punct:]]+) f( +.*)? + dec(/1) + /2 + /3 - ^#([[:d:]]+) ([[:graph:]]+) e( +.*)? - 1 - 2 + #([[:d:]]+) ([[:graph:]]+) e( +.*)? + dec(/1) + /2 From 81adee108a11fb1cb0a51c2f9c1c76827195cdb2 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Fri, 11 May 2018 21:08:56 +0200 Subject: [PATCH 092/143] #44 Removed old tclap reference --- .gitmodules | 3 --- sources/3rdParty/tclap | 1 - 2 files changed, 4 deletions(-) delete mode 160000 sources/3rdParty/tclap diff --git a/.gitmodules b/.gitmodules index 79f60a7..1c86440 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ -[submodule "sources/3rdParty/tclap"] - path = sources/3rdParty/tclap - url = https://github.com/sjm324/tclap [submodule "sources/3rdParty/catch"] path = sources/3rdParty/catch url = https://github.com/philsquared/Catch diff --git a/sources/3rdParty/tclap b/sources/3rdParty/tclap deleted file mode 160000 index 67907b9..0000000 --- a/sources/3rdParty/tclap +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 67907b92dd2989d20404b84a885b71403c91ef93 From 367d27f515b0f84756ad6d98d42e44023c166005 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Fri, 11 May 2018 21:29:55 +0200 Subject: [PATCH 093/143] #44 Tclap added --- .gitmodules | 3 +++ sources/3rdParty/tclap | 1 + 2 files changed, 4 insertions(+) create mode 160000 sources/3rdParty/tclap diff --git a/.gitmodules b/.gitmodules index 1c86440..f643e5a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "sources/3rdParty/pugixml"] path = sources/3rdParty/pugixml url = https://github.com/zeux/pugixml +[submodule "sources/3rdParty/tclap"] + path = sources/3rdParty/tclap + url = https://github.com/mirror/tclap diff --git a/sources/3rdParty/tclap b/sources/3rdParty/tclap new file mode 160000 index 0000000..1e1cc4f --- /dev/null +++ b/sources/3rdParty/tclap @@ -0,0 +1 @@ +Subproject commit 1e1cc4fb9abbc4bfcd62c73085c3c446fca681dd From b7fbc1955b4142711a4f3c7449754ff6b02985d3 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Fri, 11 May 2018 21:34:34 +0200 Subject: [PATCH 094/143] #44 Release name update --- sources/common/inc/Version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/common/inc/Version.h b/sources/common/inc/Version.h index 9135cad..bb64eb7 100644 --- a/sources/common/inc/Version.h +++ b/sources/common/inc/Version.h @@ -33,7 +33,7 @@ #define D_VERSION_MAJOR 3 #define D_VERSION_MINOR 0 #define D_VERSION_PATCH 1 -#define D_RELEASE_NAME "Perun" +#define D_RELEASE_NAME "Nestor" /// @} /// Stringification helpers. From c9f7540667650fd8f465f841ac649a30e0492b17 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Mon, 13 Aug 2018 18:54:17 +0200 Subject: [PATCH 095/143] #25 User expressions. Initial. --- development/config/Doxyfile.in | 3 +- sources/common/doc/manual.odt | Bin 558988 -> 559357 bytes sources/common/doc/manual.pdf | Bin 861645 -> 863310 bytes sources/common/inc/EventSignalCreator.h | 3 +- sources/common/inc/FSignalCreator.h | 3 +- sources/common/inc/ISignalCreator.h | 3 +- sources/common/inc/SafeUInt.h | 10 +- sources/common/inc/SignalCreator.h | 5 +- sources/common/inc/SignalFactory.h | 4 +- sources/common/inc/XmlEventSignalCreator.h | 3 +- sources/common/inc/XmlFSignalCreator.h | 4 +- sources/common/inc/XmlISignalCreator.h | 5 +- sources/common/inc/XmlSignalCreator.h | 42 +- sources/common/src/EventSignalCreator.cpp | 3 +- sources/common/src/FSignalCreator.cpp | 3 +- sources/common/src/ISignalCreator.cpp | 3 +- sources/common/src/SignalFactory.cpp | 7 +- sources/common/src/TxtParser.cpp | 10 +- sources/common/src/XmlEventSignalCreator.cpp | 5 +- sources/common/src/XmlFSignalCreator.cpp | 7 +- sources/common/src/XmlISignalCreator.cpp | 7 +- sources/common/src/XmlSignalCreator.cpp | 32 +- sources/parsers/auto/DecimalParser.cpp | 1213 +++++++++ sources/parsers/auto/DecimalParser.hpp | 275 ++ sources/parsers/auto/DecimalScanner.cpp | 2239 +++++++++++++++++ sources/parsers/auto/FlexLexer.h | 220 ++ sources/parsers/auto/FloatParser.cpp | 1185 +++++++++ sources/parsers/auto/FloatParser.hpp | 273 ++ sources/parsers/auto/FloatScanner.cpp | 2048 +++++++++++++++ sources/parsers/auto/StringParser.cpp | 1103 ++++++++ sources/parsers/auto/StringParser.hpp | 272 ++ sources/parsers/auto/StringScanner.cpp | 1977 +++++++++++++++ sources/parsers/auto/location.hh | 181 ++ sources/parsers/auto/position.hh | 172 ++ sources/parsers/auto/stack.hh | 133 + sources/parsers/inc/DecimalNode.h | 270 ++ sources/parsers/inc/DecimalScanner.h | 87 + sources/parsers/inc/Evaluator.h | 134 + sources/parsers/inc/ExpressionContext.h | 130 + sources/parsers/inc/ExpressionNode.h | 92 + sources/parsers/inc/FloatNode.h | 253 ++ sources/parsers/inc/FloatScanner.h | 89 + sources/parsers/inc/StringNode.h | 122 + sources/parsers/inc/StringScanner.h | 87 + sources/parsers/model/DecimalParser.yy | 196 ++ sources/parsers/model/DecimalScanner.ll | 156 ++ sources/parsers/model/FloatParser.yy | 185 ++ sources/parsers/model/FloatScanner.ll | 146 ++ sources/parsers/model/StringParser.yy | 148 ++ sources/parsers/model/StringScanner.ll | 146 ++ sources/parsers/src/Evaluator.cpp | 145 ++ windows/Bootstrapper/Bootstrapper.sln | 27 +- windows/Bootstrapper/Bundle.wxs | 6 +- windows/Installer/Installer.sln | 27 +- windows/vcdMaker/vcdMaker.sln | 19 +- windows/vcdMaker/vcdMaker/vcdMaker.vcxproj | 6 +- .../vcdMakerCore/vcdMakerCore.vcxproj | 6 +- .../vcdMakerParsers/vcdMakerParsers.vcxproj | 149 ++ .../vcdMakerParsers.vcxproj.filters | 89 + 59 files changed, 14108 insertions(+), 60 deletions(-) create mode 100644 sources/parsers/auto/DecimalParser.cpp create mode 100644 sources/parsers/auto/DecimalParser.hpp create mode 100644 sources/parsers/auto/DecimalScanner.cpp create mode 100644 sources/parsers/auto/FlexLexer.h create mode 100644 sources/parsers/auto/FloatParser.cpp create mode 100644 sources/parsers/auto/FloatParser.hpp create mode 100644 sources/parsers/auto/FloatScanner.cpp create mode 100644 sources/parsers/auto/StringParser.cpp create mode 100644 sources/parsers/auto/StringParser.hpp create mode 100644 sources/parsers/auto/StringScanner.cpp create mode 100644 sources/parsers/auto/location.hh create mode 100644 sources/parsers/auto/position.hh create mode 100644 sources/parsers/auto/stack.hh create mode 100644 sources/parsers/inc/DecimalNode.h create mode 100644 sources/parsers/inc/DecimalScanner.h create mode 100644 sources/parsers/inc/Evaluator.h create mode 100644 sources/parsers/inc/ExpressionContext.h create mode 100644 sources/parsers/inc/ExpressionNode.h create mode 100644 sources/parsers/inc/FloatNode.h create mode 100644 sources/parsers/inc/FloatScanner.h create mode 100644 sources/parsers/inc/StringNode.h create mode 100644 sources/parsers/inc/StringScanner.h create mode 100644 sources/parsers/model/DecimalParser.yy create mode 100644 sources/parsers/model/DecimalScanner.ll create mode 100644 sources/parsers/model/FloatParser.yy create mode 100644 sources/parsers/model/FloatScanner.ll create mode 100644 sources/parsers/model/StringParser.yy create mode 100644 sources/parsers/model/StringScanner.ll create mode 100644 sources/parsers/src/Evaluator.cpp create mode 100644 windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj create mode 100644 windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj.filters diff --git a/development/config/Doxyfile.in b/development/config/Doxyfile.in index c50d8d3..a820f73 100644 --- a/development/config/Doxyfile.in +++ b/development/config/Doxyfile.in @@ -861,7 +861,8 @@ RECURSIVE = YES # Note that relative paths are relative to the directory from which doxygen is # run. -EXCLUDE = ${PROJECT_SOURCE_DIR}/3rdParty +EXCLUDE = ${PROJECT_SOURCE_DIR}/3rdParty \ + ${PROJECT_SOURCE_DIR}/parsers/auto # 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 diff --git a/sources/common/doc/manual.odt b/sources/common/doc/manual.odt index 7389210630129d61f07c46923d262b75f6008508..f502bb1683ee4ab93dd7d5dec1b876f894707020 100644 GIT binary patch delta 23668 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 MkO|c?_#W+l0PIb0l>h($ delta 23287 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 diff --git a/sources/common/doc/manual.pdf b/sources/common/doc/manual.pdf index bd0726c175e93fd508312c6abd73899f877786dd..e23acc91f3e528d4de7d7514d00c3a2e7091f14c 100644 GIT binary patch delta 124343 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

5hnA_q>rHHf#$FGRwS~+LquXh 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 z�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 xQpDEmdwbKT^4$KZr;OU0*x#GR3Z=BE*Jl;r= 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 M&A3!mUH#p-0I$+(`~Uy| diff --git a/sources/common/inc/EventSignalCreator.h b/sources/common/inc/EventSignalCreator.h index 291febe..07598ee 100644 --- a/sources/common/inc/EventSignalCreator.h +++ b/sources/common/inc/EventSignalCreator.h @@ -4,7 +4,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -44,6 +44,7 @@ namespace PARSER /// @copydoc SignalCreator::Create() virtual SIGNAL::Signal *Create(const std::string &rLogLine, + INSTRUMENT::Instrument::LineNumberT lineNumber, SIGNAL::SourceRegistry::HandleT sourceHandle) const; }; diff --git a/sources/common/inc/FSignalCreator.h b/sources/common/inc/FSignalCreator.h index 9884929..d9ec005 100644 --- a/sources/common/inc/FSignalCreator.h +++ b/sources/common/inc/FSignalCreator.h @@ -4,7 +4,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -46,6 +46,7 @@ namespace PARSER /// @copydoc SignalCreator::Create() virtual SIGNAL::Signal *Create(const std::string &rLogLine, + INSTRUMENT::Instrument::LineNumberT lineNumber, SIGNAL::SourceRegistry::HandleT sourceHandle) const; }; diff --git a/sources/common/inc/ISignalCreator.h b/sources/common/inc/ISignalCreator.h index 441ce04..b36a6d9 100644 --- a/sources/common/inc/ISignalCreator.h +++ b/sources/common/inc/ISignalCreator.h @@ -4,7 +4,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -44,6 +44,7 @@ namespace PARSER /// @copydoc SignalCreator::Create() virtual SIGNAL::Signal *Create(const std::string &rLogLine, + INSTRUMENT::Instrument::LineNumberT lineNumber, SIGNAL::SourceRegistry::HandleT sourceHandle) const; }; diff --git a/sources/common/inc/SafeUInt.h b/sources/common/inc/SafeUInt.h index e687d84..e95f8de 100644 --- a/sources/common/inc/SafeUInt.h +++ b/sources/common/inc/SafeUInt.h @@ -8,7 +8,7 @@ /// /// @ingroup Generic /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -56,7 +56,7 @@ template class SafeUInt } /// The default constructor. - SafeUInt() = default; + SafeUInt() = default; /// Returns the integer value. T GetValue() const @@ -89,7 +89,7 @@ template class SafeUInt /// Overrides the multiplication operator '*='. SafeUInt &operator*=(const SafeUInt &rhs) { - if ((std::numeric_limits::max() / m_Value) > rhs.m_Value) + if ((std::numeric_limits::max() / m_Value) < rhs.m_Value) { throw std::out_of_range("Arthmetic overflow"); } @@ -172,8 +172,8 @@ template SafeUInt operator/(SafeUInt lhs, const SafeUInt &rhs } /// Overrides the output stream operator. -template std::ostream &operator<<(std::ostream &out, SafeUInt &ts) +template std::ostream &operator<<(std::ostream &out, const SafeUInt &ts) { - out << ts.m_Value; + out << ts.GetValue(); return out; } diff --git a/sources/common/inc/SignalCreator.h b/sources/common/inc/SignalCreator.h index 97140af..1dc91af 100644 --- a/sources/common/inc/SignalCreator.h +++ b/sources/common/inc/SignalCreator.h @@ -8,7 +8,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -33,6 +33,7 @@ #include #include "Signal.h" +#include "Instrument.h" namespace PARSER { @@ -64,9 +65,11 @@ namespace PARSER /// then nullptr is returned. /// /// @param rLogLine The log line serving as the creation specification. + /// @param lineNumber The log line number. /// @param sourceHandle Signal source handle. /// @return Signal pointer if the object has been created or nullptr. virtual SIGNAL::Signal *Create(const std::string &rLogLine, + INSTRUMENT::Instrument::LineNumberT lineNumber, SIGNAL::SourceRegistry::HandleT sourceHandle) const = 0; protected: diff --git a/sources/common/inc/SignalFactory.h b/sources/common/inc/SignalFactory.h index 476ce6d..e5eda52 100644 --- a/sources/common/inc/SignalFactory.h +++ b/sources/common/inc/SignalFactory.h @@ -7,7 +7,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2016 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -52,8 +52,10 @@ namespace PARSER /// Or nullptr if it couldn't be created. /// /// @param logLine One line from the log. + /// @param lineNumber The log line number. /// @param sourceHandle Signal source handle. SIGNAL::Signal *Create(std::string &logLine, + INSTRUMENT::Instrument::LineNumberT lineNumber, SIGNAL::SourceRegistry::HandleT sourceHandle) const; protected: diff --git a/sources/common/inc/XmlEventSignalCreator.h b/sources/common/inc/XmlEventSignalCreator.h index cf0b53e..21fc3cb 100644 --- a/sources/common/inc/XmlEventSignalCreator.h +++ b/sources/common/inc/XmlEventSignalCreator.h @@ -4,7 +4,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -50,6 +50,7 @@ namespace PARSER /// @copydoc SignalCreator::Create() virtual SIGNAL::Signal *Create(const std::string &rLogLine, + INSTRUMENT::Instrument::LineNumberT lineNumber, SIGNAL::SourceRegistry::HandleT sourceHandle) const; }; diff --git a/sources/common/inc/XmlFSignalCreator.h b/sources/common/inc/XmlFSignalCreator.h index 4e6d09b..0efe424 100644 --- a/sources/common/inc/XmlFSignalCreator.h +++ b/sources/common/inc/XmlFSignalCreator.h @@ -4,7 +4,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -50,10 +50,12 @@ namespace PARSER const std::string &rValue) : XmlSignalCreator(rRegEx, rTimestamp, rName, rValue, "") { + bool resultFloat = m_FloatEvaluator.ParseFloatString(rValue); } /// @copydoc SignalCreator::Create() virtual SIGNAL::Signal *Create(const std::string &rLogLine, + INSTRUMENT::Instrument::LineNumberT lineNumber, SIGNAL::SourceRegistry::HandleT sourceHandle) const; }; diff --git a/sources/common/inc/XmlISignalCreator.h b/sources/common/inc/XmlISignalCreator.h index 8d0ebc74..c087bb8 100644 --- a/sources/common/inc/XmlISignalCreator.h +++ b/sources/common/inc/XmlISignalCreator.h @@ -4,7 +4,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -44,10 +44,13 @@ namespace PARSER const std::string &rSize) : XmlSignalCreator(rRegEx, rTimestamp, rName, rValue, rSize) { + bool resultDecimal = m_DecimalEvaluator.ParseDecimalString(rValue); + bool resultSize = m_SizeEvaluator.ParseDecimalString(rSize); } /// @copydoc SignalCreator::Create() virtual SIGNAL::Signal *Create(const std::string &rLogLine, + INSTRUMENT::Instrument::LineNumberT lineNumber, SIGNAL::SourceRegistry::HandleT sourceHandle) const; }; diff --git a/sources/common/inc/XmlSignalCreator.h b/sources/common/inc/XmlSignalCreator.h index d6d329e..0498aa4 100644 --- a/sources/common/inc/XmlSignalCreator.h +++ b/sources/common/inc/XmlSignalCreator.h @@ -4,7 +4,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -27,6 +27,9 @@ #pragma once #include "SignalCreator.h" +#include "Evaluator.h" +#include "ExpressionContext.h" +#include "ExpressionNode.h" namespace PARSER { @@ -52,25 +55,39 @@ namespace PARSER m_Timestamp(rTimestamp), m_Name(rName), m_Value(rValue), - m_Size(rSize) + m_Size(rSize), + m_TimestampEvaluator ("XML"), + m_DecimalEvaluator ("XML"), + m_FloatEvaluator ("XML"), + m_SizeEvaluator ("XML"), + m_NameEvaluator("XML") { + bool resultTimestamp = m_TimestampEvaluator.ParseDecimalString(rTimestamp); + bool resultName = m_NameEvaluator.ParseStringString(rName); } protected: /// Returns the timestamp of the signal. /// /// @param rMatch The regular expression groups. - TIME::Timestamp GetTimestamp(const std::smatch &rMatch) const; + /// @param lineNumber The log line number. + TIME::Timestamp GetTimestamp(const std::smatch &rMatch, + INSTRUMENT::Instrument::LineNumberT lineNumber) const; /// Returns the name of the signal. /// /// @param rMatch The regular expression groups. std::string GetName(const std::smatch &rMatch) const; - /// Returns the value of the signal. + /// Returns the decimal value of the signal. /// /// @param rMatch The regular expression groups. - std::string GetValue(const std::smatch &rMatch) const; + SafeUInt GetDecimalValue(const std::smatch &rMatch) const; + + /// Returns the float value of the signal. + /// + /// @param rMatch The regular expression groups. + std::string GetFloatValue(const std::smatch &rMatch) const; /// Returns the size of the signal. /// @@ -88,5 +105,20 @@ namespace PARSER /// The expression to create the size of the signal. const std::string m_Size; + + /// The timestamp evaluator. + Evaluator m_TimestampEvaluator; + + /// The decimal(vector) value evaluator. + Evaluator m_DecimalEvaluator; + + /// The float value evaluator. + Evaluator m_FloatEvaluator; + + /// The size evaluator. + Evaluator m_SizeEvaluator; + + /// The name evaluator. + Evaluator m_NameEvaluator; }; } diff --git a/sources/common/src/EventSignalCreator.cpp b/sources/common/src/EventSignalCreator.cpp index f0d107f..3b97ded 100644 --- a/sources/common/src/EventSignalCreator.cpp +++ b/sources/common/src/EventSignalCreator.cpp @@ -4,7 +4,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -28,6 +28,7 @@ #include "EventSignal.h" SIGNAL::Signal *PARSER::EventSignalCreator::Create(const std::string &rLogLine, + INSTRUMENT::Instrument::LineNumberT lineNumber, SIGNAL::SourceRegistry::HandleT sourceHandle) const { std::smatch result; diff --git a/sources/common/src/FSignalCreator.cpp b/sources/common/src/FSignalCreator.cpp index 6bd0af5..ac06c9f 100644 --- a/sources/common/src/FSignalCreator.cpp +++ b/sources/common/src/FSignalCreator.cpp @@ -4,7 +4,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -28,6 +28,7 @@ #include "FSignal.h" SIGNAL::Signal *PARSER::FSignalCreator::Create(const std::string &rLogLine, + INSTRUMENT::Instrument::LineNumberT lineNumber, SIGNAL::SourceRegistry::HandleT sourceHandle) const { std::smatch result; diff --git a/sources/common/src/ISignalCreator.cpp b/sources/common/src/ISignalCreator.cpp index aae6046..4d035da 100644 --- a/sources/common/src/ISignalCreator.cpp +++ b/sources/common/src/ISignalCreator.cpp @@ -4,7 +4,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -28,6 +28,7 @@ #include "ISignal.h" SIGNAL::Signal *PARSER::ISignalCreator::Create(const std::string &rLogLine, + INSTRUMENT::Instrument::LineNumberT lineNumber, SIGNAL::SourceRegistry::HandleT sourceHandle) const { std::smatch result; diff --git a/sources/common/src/SignalFactory.cpp b/sources/common/src/SignalFactory.cpp index c6e48c7..5c05d46 100644 --- a/sources/common/src/SignalFactory.cpp +++ b/sources/common/src/SignalFactory.cpp @@ -7,7 +7,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2016 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -39,17 +39,18 @@ PARSER::SignalFactory::SignalFactory() : } SIGNAL::Signal *PARSER::SignalFactory::Create(std::string &logLine, + INSTRUMENT::Instrument::LineNumberT lineNumber, SIGNAL::SourceRegistry::HandleT sourceHandle) const { if (m_vpSignalCreators.empty()) { throw EXCEPTION::VcdException(EXCEPTION::Error::NO_SIGNALS_CREATORS, - "No signals creators. Hint: Verify the correctness of the XML file specifying the user log format."); + "No signals creators. Hint: Verify the correctness of the XML file specifying the user log format."); } for (const auto &creator : m_vpSignalCreators) { // Try to use creator. - SIGNAL::Signal *pSignal = creator->Create(logLine, sourceHandle); + SIGNAL::Signal *pSignal = creator->Create(logLine, lineNumber, sourceHandle); // If successful return created Signal, if not try next one. if (pSignal != nullptr) diff --git a/sources/common/src/TxtParser.cpp b/sources/common/src/TxtParser.cpp index b4277df..b9045d1 100644 --- a/sources/common/src/TxtParser.cpp +++ b/sources/common/src/TxtParser.cpp @@ -55,14 +55,14 @@ PARSER::TxtParser::~TxtParser() void PARSER::TxtParser::Parse() { // Line counter. - INSTRUMENT::Instrument::LineNumberT line_number = 1; + INSTRUMENT::Instrument::LineNumberT lineNumber = 1; // Process the log file. std::string input_line; while (std::getline(m_LogFile, input_line)) { const SIGNAL::Signal *pSignal = - m_rSignalFactory.Create(input_line, m_SourceHandle); + m_rSignalFactory.Create(input_line, lineNumber, m_SourceHandle); if (pSignal) { @@ -76,7 +76,7 @@ void PARSER::TxtParser::Parse() if (EXCEPTION::Error::INCONSISTENT_SIGNAL == rException.GetId()) { throw EXCEPTION::VcdException(rException.GetId(), std::string(rException.what()) + - " At line " + std::to_string(line_number) + "."); + " At line " + std::to_string(lineNumber) + "."); } else { @@ -86,7 +86,7 @@ void PARSER::TxtParser::Parse() for (auto instrument : m_vpInstruments) { - instrument->Notify(line_number, *pSignal); + instrument->Notify(lineNumber, *pSignal); } ++m_ValidLines; } @@ -103,6 +103,6 @@ void PARSER::TxtParser::Parse() ++m_InvalidLines; } - ++line_number; + ++lineNumber; } } diff --git a/sources/common/src/XmlEventSignalCreator.cpp b/sources/common/src/XmlEventSignalCreator.cpp index abefac4..8bef82a 100644 --- a/sources/common/src/XmlEventSignalCreator.cpp +++ b/sources/common/src/XmlEventSignalCreator.cpp @@ -4,7 +4,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -28,6 +28,7 @@ #include "EventSignal.h" SIGNAL::Signal *PARSER::XmlEventSignalCreator::Create(const std::string &rLogLine, + INSTRUMENT::Instrument::LineNumberT lineNumber, SIGNAL::SourceRegistry::HandleT sourceHandle) const { std::smatch result; @@ -35,7 +36,7 @@ SIGNAL::Signal *PARSER::XmlEventSignalCreator::Create(const std::string &rLogLin if (std::regex_search(rLogLine, result, m_SignalRegEx)) { return new SIGNAL::EventSignal(GetName(result), - GetTimestamp(result), + GetTimestamp(result, lineNumber), sourceHandle); } else diff --git a/sources/common/src/XmlFSignalCreator.cpp b/sources/common/src/XmlFSignalCreator.cpp index 1b9d1ed..657ef7f 100644 --- a/sources/common/src/XmlFSignalCreator.cpp +++ b/sources/common/src/XmlFSignalCreator.cpp @@ -4,7 +4,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -28,6 +28,7 @@ #include "FSignal.h" SIGNAL::Signal *PARSER::XmlFSignalCreator::Create(const std::string &rLogLine, + INSTRUMENT::Instrument::LineNumberT lineNumber, SIGNAL::SourceRegistry::HandleT sourceHandle) const { std::smatch result; @@ -35,8 +36,8 @@ SIGNAL::Signal *PARSER::XmlFSignalCreator::Create(const std::string &rLogLine, if (true == std::regex_search(rLogLine, result, m_SignalRegEx)) { return new SIGNAL::FSignal(GetName(result), - GetTimestamp(result), - GetValue(result), + GetTimestamp(result, lineNumber), + GetFloatValue(result), sourceHandle); } else diff --git a/sources/common/src/XmlISignalCreator.cpp b/sources/common/src/XmlISignalCreator.cpp index c7ab21e..410131f 100644 --- a/sources/common/src/XmlISignalCreator.cpp +++ b/sources/common/src/XmlISignalCreator.cpp @@ -4,7 +4,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -28,6 +28,7 @@ #include "ISignal.h" SIGNAL::Signal *PARSER::XmlISignalCreator::Create(const std::string &rLogLine, + INSTRUMENT::Instrument::LineNumberT lineNumber, SIGNAL::SourceRegistry::HandleT sourceHandle) const { std::smatch result; @@ -36,8 +37,8 @@ SIGNAL::Signal *PARSER::XmlISignalCreator::Create(const std::string &rLogLine, { return new SIGNAL::ISignal(GetName(result), GetSize(result), - GetTimestamp(result), - std::stoll(GetValue(result)), + GetTimestamp(result, lineNumber), + GetDecimalValue(result).GetValue(), sourceHandle); } else diff --git a/sources/common/src/XmlSignalCreator.cpp b/sources/common/src/XmlSignalCreator.cpp index 7e57c03..67c2669 100644 --- a/sources/common/src/XmlSignalCreator.cpp +++ b/sources/common/src/XmlSignalCreator.cpp @@ -4,7 +4,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -24,24 +24,42 @@ /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS /// IN THE SOFTWARE. +#include + #include "XmlSignalCreator.h" -TIME::Timestamp PARSER::XmlSignalCreator::GetTimestamp(const std::smatch &rMatch) const +TIME::Timestamp PARSER::XmlSignalCreator::GetTimestamp(const std::smatch &rMatch, + INSTRUMENT::Instrument::LineNumberT lineNumber) const { - return std::stoull(rMatch[std::stoi(m_Timestamp)].str()); + m_TimestampEvaluator.SetContext(&rMatch, lineNumber); + return m_TimestampEvaluator.EvaluateUint(); } std::string PARSER::XmlSignalCreator::GetName(const std::smatch &rMatch) const { - return rMatch[std::stoi(m_Name)].str(); + m_NameEvaluator.SetContext(&rMatch, 0); + return m_NameEvaluator.EvaluateString(); +} + +SafeUInt PARSER::XmlSignalCreator::GetDecimalValue(const std::smatch &rMatch) const +{ + m_DecimalEvaluator.SetContext(&rMatch, 0); + return m_DecimalEvaluator.EvaluateUint(); } -std::string PARSER::XmlSignalCreator::GetValue(const std::smatch &rMatch) const +std::string PARSER::XmlSignalCreator::GetFloatValue(const std::smatch &rMatch) const { - return rMatch[std::stoi(m_Value)].str(); + m_FloatEvaluator.SetContext(&rMatch, 0); + + std::ostringstream strStream; + strStream << m_FloatEvaluator.EvaluateDouble(); + std::string doubleStr = strStream.str(); + + return doubleStr; } size_t PARSER::XmlSignalCreator::GetSize(const std::smatch &rMatch) const { - return std::stoi(rMatch[std::stoi(m_Size)].str()); + m_SizeEvaluator.SetContext(&rMatch, 0); + return static_cast(m_SizeEvaluator.EvaluateUint()); } diff --git a/sources/parsers/auto/DecimalParser.cpp b/sources/parsers/auto/DecimalParser.cpp new file mode 100644 index 0000000..6d4bc8d --- /dev/null +++ b/sources/parsers/auto/DecimalParser.cpp @@ -0,0 +1,1213 @@ +/* A Bison parser, made by GNU Bison 2.7. */ + +/* Skeleton implementation for Bison LALR(1) parsers in C++ + + Copyright (C) 2002-2012 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +// Take the name prefix into account. +#define yylex PARSERlex + +/* First part of user declarations. */ +/* Line 279 of lalr1.cc */ +#line 23 "DecimalParser.yy" + /*** C/C++ Declarations ***/ + +#include "ExpressionNode.h" +#include "DecimalNode.h" + + +/* Line 279 of lalr1.cc */ +#line 47 "DecimalParser.cpp" + + +#include "DecimalParser.hpp" + +/* User implementation prologue. */ +/* Line 285 of lalr1.cc */ +#line 94 "DecimalParser.yy" + + +#include "evaluator.h" +#include "DecimalScanner.h" + +/* this "connects" the bison parser in the driver to the flex scanner class + * object. it defines the yylex() function call to pull the next token from the + * current lexer object of the driver context. */ +#undef yylex +#define yylex evaluator.m_pDecimalLexer->lex + + +/* Line 285 of lalr1.cc */ +#line 68 "DecimalParser.cpp" + + +# ifndef YY_NULL +# if defined __cplusplus && 201103L <= __cplusplus +# define YY_NULL nullptr +# else +# define YY_NULL 0 +# endif +# endif + +#ifndef YY_ +# if defined YYENABLE_NLS && YYENABLE_NLS +# if ENABLE_NLS +# include /* FIXME: INFRINGES ON USER NAME SPACE */ +# define YY_(msgid) dgettext ("bison-runtime", msgid) +# endif +# endif +# ifndef YY_ +# define YY_(msgid) msgid +# endif +#endif + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +# ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (N) \ + { \ + (Current).begin = YYRHSLOC (Rhs, 1).begin; \ + (Current).end = YYRHSLOC (Rhs, N).end; \ + } \ + else \ + { \ + (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end; \ + } \ + while (/*CONSTCOND*/ false) +# endif + + +/* Suppress unused-variable warnings by "using" E. */ +#define YYUSE(e) ((void) (e)) + +/* Enable debugging if requested. */ +#if YYDEBUG + +/* A pseudo ostream that takes yydebug_ into account. */ +# define YYCDEBUG if (yydebug_) (*yycdebug_) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug_) \ + { \ + *yycdebug_ << Title << ' '; \ + yy_symbol_print_ ((Type), (Value), (Location)); \ + *yycdebug_ << std::endl; \ + } \ +} while (false) + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug_) \ + yy_reduce_print_ (Rule); \ +} while (false) + +# define YY_STACK_PRINT() \ +do { \ + if (yydebug_) \ + yystack_print_ (); \ +} while (false) + +#else /* !YYDEBUG */ + +# define YYCDEBUG if (false) std::cerr +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) YYUSE(Type) +# define YY_REDUCE_PRINT(Rule) static_cast(0) +# define YY_STACK_PRINT() static_cast(0) + +#endif /* !YYDEBUG */ + +#define yyerrok (yyerrstatus_ = 0) +#define yyclearin (yychar = yyempty_) + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab +#define YYRECOVERING() (!!yyerrstatus_) + + +namespace PARSER { +/* Line 353 of lalr1.cc */ +#line 163 "DecimalParser.cpp" + + /* Return YYSTR after stripping away unnecessary quotes and + backslashes, so that it's suitable for yyerror. The heuristic is + that double-quoting is unnecessary unless the string contains an + apostrophe, a comma, or backslash (other than backslash-backslash). + YYSTR is taken from yytname. */ + std::string + DecimalParser::yytnamerr_ (const char *yystr) + { + if (*yystr == '"') + { + std::string yyr = ""; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + yyr += *yyp; + break; + + case '"': + return yyr; + } + do_not_strip_quotes: ; + } + + return yystr; + } + + + /// Build a parser object. + DecimalParser::DecimalParser (class Evaluator& evaluator_yyarg) + : +#if YYDEBUG + yydebug_ (false), + yycdebug_ (&std::cerr), +#endif + evaluator (evaluator_yyarg) + { + } + + DecimalParser::~DecimalParser () + { + } + +#if YYDEBUG + /*--------------------------------. + | Print this symbol on YYOUTPUT. | + `--------------------------------*/ + + inline void + DecimalParser::yy_symbol_value_print_ (int yytype, + const semantic_type* yyvaluep, const location_type* yylocationp) + { + YYUSE (yylocationp); + YYUSE (yyvaluep); + std::ostream& yyo = debug_stream (); + std::ostream& yyoutput = yyo; + YYUSE (yyoutput); + switch (yytype) + { + default: + break; + } + } + + + void + DecimalParser::yy_symbol_print_ (int yytype, + const semantic_type* yyvaluep, const location_type* yylocationp) + { + *yycdebug_ << (yytype < yyntokens_ ? "token" : "nterm") + << ' ' << yytname_[yytype] << " (" + << *yylocationp << ": "; + yy_symbol_value_print_ (yytype, yyvaluep, yylocationp); + *yycdebug_ << ')'; + } +#endif + + void + DecimalParser::yydestruct_ (const char* yymsg, + int yytype, semantic_type* yyvaluep, location_type* yylocationp) + { + YYUSE (yylocationp); + YYUSE (yymsg); + YYUSE (yyvaluep); + + if (yymsg) + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + switch (yytype) + { + case 4: /* "hex" */ +/* Line 455 of lalr1.cc */ +#line 81 "DecimalParser.yy" + { delete ((*yyvaluep).pString); }; +/* Line 455 of lalr1.cc */ +#line 270 "DecimalParser.cpp" + break; + case 5: /* "dec" */ +/* Line 455 of lalr1.cc */ +#line 82 "DecimalParser.yy" + { delete ((*yyvaluep).pString); }; +/* Line 455 of lalr1.cc */ +#line 277 "DecimalParser.cpp" + break; + case 6: /* "line" */ +/* Line 455 of lalr1.cc */ +#line 83 "DecimalParser.yy" + { delete ((*yyvaluep).pString); }; +/* Line 455 of lalr1.cc */ +#line 284 "DecimalParser.cpp" + break; + case 14: /* constant */ +/* Line 455 of lalr1.cc */ +#line 84 "DecimalParser.yy" + { delete ((*yyvaluep).pExprNode); }; +/* Line 455 of lalr1.cc */ +#line 291 "DecimalParser.cpp" + break; + case 15: /* variable */ +/* Line 455 of lalr1.cc */ +#line 85 "DecimalParser.yy" + { delete ((*yyvaluep).pExprNode); }; +/* Line 455 of lalr1.cc */ +#line 298 "DecimalParser.cpp" + break; + case 16: /* atomexpr */ +/* Line 455 of lalr1.cc */ +#line 86 "DecimalParser.yy" + { delete ((*yyvaluep).pExprNode); }; +/* Line 455 of lalr1.cc */ +#line 305 "DecimalParser.cpp" + break; + case 17: /* unaryexpr */ +/* Line 455 of lalr1.cc */ +#line 87 "DecimalParser.yy" + { delete ((*yyvaluep).pExprNode); }; +/* Line 455 of lalr1.cc */ +#line 312 "DecimalParser.cpp" + break; + case 18: /* mulexpr */ +/* Line 455 of lalr1.cc */ +#line 88 "DecimalParser.yy" + { delete ((*yyvaluep).pExprNode); }; +/* Line 455 of lalr1.cc */ +#line 319 "DecimalParser.cpp" + break; + case 19: /* addexpr */ +/* Line 455 of lalr1.cc */ +#line 89 "DecimalParser.yy" + { delete ((*yyvaluep).pExprNode); }; +/* Line 455 of lalr1.cc */ +#line 326 "DecimalParser.cpp" + break; + case 20: /* expr */ +/* Line 455 of lalr1.cc */ +#line 90 "DecimalParser.yy" + { delete ((*yyvaluep).pExprNode); }; +/* Line 455 of lalr1.cc */ +#line 333 "DecimalParser.cpp" + break; + + default: + break; + } + } + + void + DecimalParser::yypop_ (unsigned int n) + { + yystate_stack_.pop (n); + yysemantic_stack_.pop (n); + yylocation_stack_.pop (n); + } + +#if YYDEBUG + std::ostream& + DecimalParser::debug_stream () const + { + return *yycdebug_; + } + + void + DecimalParser::set_debug_stream (std::ostream& o) + { + yycdebug_ = &o; + } + + + DecimalParser::debug_level_type + DecimalParser::debug_level () const + { + return yydebug_; + } + + void + DecimalParser::set_debug_level (debug_level_type l) + { + yydebug_ = l; + } +#endif + + inline bool + DecimalParser::yy_pact_value_is_default_ (int yyvalue) + { + return yyvalue == yypact_ninf_; + } + + inline bool + DecimalParser::yy_table_value_is_error_ (int yyvalue) + { + return yyvalue == yytable_ninf_; + } + + int + DecimalParser::parse () + { + /// Lookahead and lookahead in internal form. + int yychar = yyempty_; + int yytoken = 0; + + // State. + int yyn; + int yylen = 0; + int yystate = 0; + + // Error handling. + int yynerrs_ = 0; + int yyerrstatus_ = 0; + + /// Semantic value of the lookahead. + static semantic_type yyval_default; + semantic_type yylval = yyval_default; + /// Location of the lookahead. + location_type yylloc; + /// The locations where the error started and ended. + location_type yyerror_range[3]; + + /// $$. + semantic_type yyval; + /// @$. + location_type yyloc; + + int yyresult; + + // FIXME: This shoud be completely indented. It is not yet to + // avoid gratuitous conflicts when merging into the master branch. + try + { + YYCDEBUG << "Starting parse" << std::endl; + + + /* Initialize the stacks. The initial state will be pushed in + yynewstate, since the latter expects the semantical and the + location values to have been already stored, initialize these + stacks with a primary value. */ + yystate_stack_ = state_stack_type (0); + yysemantic_stack_ = semantic_stack_type (0); + yylocation_stack_ = location_stack_type (0); + yysemantic_stack_.push (yylval); + yylocation_stack_.push (yylloc); + + /* New state. */ + yynewstate: + yystate_stack_.push (yystate); + YYCDEBUG << "Entering state " << yystate << std::endl; + + /* Accept? */ + if (yystate == yyfinal_) + goto yyacceptlab; + + goto yybackup; + + /* Backup. */ + yybackup: + + /* Try to take a decision without lookahead. */ + yyn = yypact_[yystate]; + if (yy_pact_value_is_default_ (yyn)) + goto yydefault; + + /* Read a lookahead token. */ + if (yychar == yyempty_) + { + YYCDEBUG << "Reading a token: "; + yychar = yylex (&yylval, &yylloc); + } + + /* Convert token to internal form. */ + if (yychar <= yyeof_) + { + yychar = yytoken = yyeof_; + YYCDEBUG << "Now at end of input." << std::endl; + } + else + { + yytoken = yytranslate_ (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yytoken) + goto yydefault; + + /* Reduce or error. */ + yyn = yytable_[yyn]; + if (yyn <= 0) + { + if (yy_table_value_is_error_ (yyn)) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + /* Shift the lookahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the token being shifted. */ + yychar = yyempty_; + + yysemantic_stack_.push (yylval); + yylocation_stack_.push (yylloc); + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus_) + --yyerrstatus_; + + yystate = yyn; + goto yynewstate; + + /*-----------------------------------------------------------. + | yydefault -- do the default action for the current state. | + `-----------------------------------------------------------*/ + yydefault: + yyn = yydefact_[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + /*-----------------------------. + | yyreduce -- Do a reduction. | + `-----------------------------*/ + yyreduce: + yylen = yyr2_[yyn]; + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. Otherwise, use the top of the stack. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. */ + if (yylen) + yyval = yysemantic_stack_[yylen - 1]; + else + yyval = yysemantic_stack_[0]; + + // Compute the default @$. + { + slice slice (yylocation_stack_, yylen); + YYLLOC_DEFAULT (yyloc, slice, yylen); + } + + // Perform the reduction. + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 2: +/* Line 670 of lalr1.cc */ +#line 110 "DecimalParser.yy" + { + (yyval.pExprNode) = new DNConstant(evaluator.GetContext(), (yysemantic_stack_[(1) - (1)].integer)); + } + break; + + case 3: +/* Line 670 of lalr1.cc */ +#line 115 "DecimalParser.yy" + { + (yyval.pExprNode) = new DNHex(evaluator.GetContext(), *(yysemantic_stack_[(1) - (1)].pString)); + delete (yysemantic_stack_[(1) - (1)].pString); + } + break; + + case 4: +/* Line 670 of lalr1.cc */ +#line 120 "DecimalParser.yy" + { + (yyval.pExprNode) = new DNDec(evaluator.GetContext(), *(yysemantic_stack_[(1) - (1)].pString)); + delete (yysemantic_stack_[(1) - (1)].pString); + } + break; + + case 5: +/* Line 670 of lalr1.cc */ +#line 125 "DecimalParser.yy" + { + (yyval.pExprNode) = new DNLine(evaluator.GetContext()); + delete (yysemantic_stack_[(1) - (1)].pString); + } + break; + + case 6: +/* Line 670 of lalr1.cc */ +#line 131 "DecimalParser.yy" + { + (yyval.pExprNode) = (yysemantic_stack_[(1) - (1)].pExprNode); + } + break; + + case 7: +/* Line 670 of lalr1.cc */ +#line 135 "DecimalParser.yy" + { + (yyval.pExprNode) = (yysemantic_stack_[(1) - (1)].pExprNode); + } + break; + + case 8: +/* Line 670 of lalr1.cc */ +#line 139 "DecimalParser.yy" + { + (yyval.pExprNode) = (yysemantic_stack_[(3) - (2)].pExprNode); + } + break; + + case 9: +/* Line 670 of lalr1.cc */ +#line 144 "DecimalParser.yy" + { + (yyval.pExprNode) = (yysemantic_stack_[(1) - (1)].pExprNode); + } + break; + + case 10: +/* Line 670 of lalr1.cc */ +#line 148 "DecimalParser.yy" + { + (yyval.pExprNode) = (yysemantic_stack_[(2) - (2)].pExprNode); + } + break; + + case 11: +/* Line 670 of lalr1.cc */ +#line 153 "DecimalParser.yy" + { + (yyval.pExprNode) = (yysemantic_stack_[(1) - (1)].pExprNode); + } + break; + + case 12: +/* Line 670 of lalr1.cc */ +#line 157 "DecimalParser.yy" + { + (yyval.pExprNode) = new DNMultiply(evaluator.GetContext(), (yysemantic_stack_[(3) - (1)].pExprNode), (yysemantic_stack_[(3) - (3)].pExprNode)); + } + break; + + case 13: +/* Line 670 of lalr1.cc */ +#line 161 "DecimalParser.yy" + { + (yyval.pExprNode) = new DNDivide(evaluator.GetContext(), (yysemantic_stack_[(3) - (1)].pExprNode), (yysemantic_stack_[(3) - (3)].pExprNode)); + } + break; + + case 14: +/* Line 670 of lalr1.cc */ +#line 166 "DecimalParser.yy" + { + (yyval.pExprNode) = (yysemantic_stack_[(1) - (1)].pExprNode); + } + break; + + case 15: +/* Line 670 of lalr1.cc */ +#line 170 "DecimalParser.yy" + { + (yyval.pExprNode) = new DNAdd(evaluator.GetContext(), (yysemantic_stack_[(3) - (1)].pExprNode), (yysemantic_stack_[(3) - (3)].pExprNode)); + } + break; + + case 16: +/* Line 670 of lalr1.cc */ +#line 174 "DecimalParser.yy" + { + (yyval.pExprNode) = new DNSubtract(evaluator.GetContext(), (yysemantic_stack_[(3) - (1)].pExprNode), (yysemantic_stack_[(3) - (3)].pExprNode)); + } + break; + + case 17: +/* Line 670 of lalr1.cc */ +#line 179 "DecimalParser.yy" + { + (yyval.pExprNode) = (yysemantic_stack_[(1) - (1)].pExprNode); + } + break; + + case 19: +/* Line 670 of lalr1.cc */ +#line 186 "DecimalParser.yy" + { + evaluator.GetContext().SetExpression((yysemantic_stack_[(3) - (2)].pExprNode)); + } + break; + + +/* Line 670 of lalr1.cc */ +#line 683 "DecimalParser.cpp" + default: + break; + } + + /* User semantic actions sometimes alter yychar, and that requires + that yytoken be updated with the new translation. We take the + approach of translating immediately before every use of yytoken. + One alternative is translating here after every semantic action, + but that translation would be missed if the semantic action + invokes YYABORT, YYACCEPT, or YYERROR immediately after altering + yychar. In the case of YYABORT or YYACCEPT, an incorrect + destructor might then be invoked immediately. In the case of + YYERROR, subsequent parser actions might lead to an incorrect + destructor call or verbose syntax error message before the + lookahead is translated. */ + YY_SYMBOL_PRINT ("-> $$ =", yyr1_[yyn], &yyval, &yyloc); + + yypop_ (yylen); + yylen = 0; + YY_STACK_PRINT (); + + yysemantic_stack_.push (yyval); + yylocation_stack_.push (yyloc); + + /* Shift the result of the reduction. */ + yyn = yyr1_[yyn]; + yystate = yypgoto_[yyn - yyntokens_] + yystate_stack_[0]; + if (0 <= yystate && yystate <= yylast_ + && yycheck_[yystate] == yystate_stack_[0]) + yystate = yytable_[yystate]; + else + yystate = yydefgoto_[yyn - yyntokens_]; + goto yynewstate; + + /*------------------------------------. + | yyerrlab -- here on detecting error | + `------------------------------------*/ + yyerrlab: + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = yytranslate_ (yychar); + + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus_) + { + ++yynerrs_; + if (yychar == yyempty_) + yytoken = yyempty_; + error (yylloc, yysyntax_error_ (yystate, yytoken)); + } + + yyerror_range[1] = yylloc; + if (yyerrstatus_ == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + if (yychar <= yyeof_) + { + /* Return failure if at end of input. */ + if (yychar == yyeof_) + YYABORT; + } + else + { + yydestruct_ ("Error: discarding", yytoken, &yylval, &yylloc); + yychar = yyempty_; + } + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto yyerrlab1; + + + /*---------------------------------------------------. + | yyerrorlab -- error raised explicitly by YYERROR. | + `---------------------------------------------------*/ + yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (false) + goto yyerrorlab; + + yyerror_range[1] = yylocation_stack_[yylen - 1]; + /* Do not reclaim the symbols of the rule which action triggered + this YYERROR. */ + yypop_ (yylen); + yylen = 0; + yystate = yystate_stack_[0]; + goto yyerrlab1; + + /*-------------------------------------------------------------. + | yyerrlab1 -- common code for both syntax error and YYERROR. | + `-------------------------------------------------------------*/ + yyerrlab1: + yyerrstatus_ = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact_[yystate]; + if (!yy_pact_value_is_default_ (yyn)) + { + yyn += yyterror_; + if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_) + { + yyn = yytable_[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yystate_stack_.height () == 1) + YYABORT; + + yyerror_range[1] = yylocation_stack_[0]; + yydestruct_ ("Error: popping", + yystos_[yystate], + &yysemantic_stack_[0], &yylocation_stack_[0]); + yypop_ (); + yystate = yystate_stack_[0]; + YY_STACK_PRINT (); + } + + yyerror_range[2] = yylloc; + // Using YYLLOC is tempting, but would change the location of + // the lookahead. YYLOC is available though. + YYLLOC_DEFAULT (yyloc, yyerror_range, 2); + yysemantic_stack_.push (yylval); + yylocation_stack_.push (yyloc); + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos_[yyn], + &yysemantic_stack_[0], &yylocation_stack_[0]); + + yystate = yyn; + goto yynewstate; + + /* Accept. */ + yyacceptlab: + yyresult = 0; + goto yyreturn; + + /* Abort. */ + yyabortlab: + yyresult = 1; + goto yyreturn; + + yyreturn: + if (yychar != yyempty_) + { + /* Make sure we have latest lookahead translation. See comments + at user semantic actions for why this is necessary. */ + yytoken = yytranslate_ (yychar); + yydestruct_ ("Cleanup: discarding lookahead", yytoken, &yylval, + &yylloc); + } + + /* Do not reclaim the symbols of the rule which action triggered + this YYABORT or YYACCEPT. */ + yypop_ (yylen); + while (1 < yystate_stack_.height ()) + { + yydestruct_ ("Cleanup: popping", + yystos_[yystate_stack_[0]], + &yysemantic_stack_[0], + &yylocation_stack_[0]); + yypop_ (); + } + + return yyresult; + } + catch (...) + { + YYCDEBUG << "Exception caught: cleaning lookahead and stack" + << std::endl; + // Do not try to display the values of the reclaimed symbols, + // as their printer might throw an exception. + if (yychar != yyempty_) + { + /* Make sure we have latest lookahead translation. See + comments at user semantic actions for why this is + necessary. */ + yytoken = yytranslate_ (yychar); + yydestruct_ (YY_NULL, yytoken, &yylval, &yylloc); + } + + while (1 < yystate_stack_.height ()) + { + yydestruct_ (YY_NULL, + yystos_[yystate_stack_[0]], + &yysemantic_stack_[0], + &yylocation_stack_[0]); + yypop_ (); + } + throw; + } + } + + // Generate an error message. + std::string + DecimalParser::yysyntax_error_ (int yystate, int yytoken) + { + std::string yyres; + // Number of reported tokens (one for the "unexpected", one per + // "expected"). + size_t yycount = 0; + // Its maximum. + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + // Arguments of yyformat. + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + + /* There are many possibilities here to consider: + - If this state is a consistent state with a default action, then + the only way this function was invoked is if the default action + is an error action. In that case, don't check for expected + tokens because there are none. + - The only way there can be no lookahead present (in yytoken) is + if this state is a consistent state with a default action. + Thus, detecting the absence of a lookahead is sufficient to + determine that there is no unexpected or expected token to + report. In that case, just report a simple "syntax error". + - Don't assume there isn't a lookahead just because this state is + a consistent state with a default action. There might have + been a previous inconsistent state, consistent state with a + non-default action, or user semantic action that manipulated + yychar. + - Of course, the expected token list depends on states to have + correct lookahead information, and it depends on the parser not + to perform extra reductions after fetching a lookahead from the + scanner and before detecting a syntax error. Thus, state + merging (from LALR or IELR) and default reductions corrupt the + expected token list. However, the list is correct for + canonical LR with one exception: it will still contain any + token that will not be accepted due to an error action in a + later state. + */ + if (yytoken != yyempty_) + { + yyarg[yycount++] = yytname_[yytoken]; + int yyn = yypact_[yystate]; + if (!yy_pact_value_is_default_ (yyn)) + { + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. In other words, skip the first -YYN actions for + this state because they are default actions. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = yylast_ - yyn + 1; + int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_; + for (int yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck_[yyx + yyn] == yyx && yyx != yyterror_ + && !yy_table_value_is_error_ (yytable_[yyx + yyn])) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + break; + } + else + yyarg[yycount++] = yytname_[yyx]; + } + } + } + + char const* yyformat = YY_NULL; + switch (yycount) + { +#define YYCASE_(N, S) \ + case N: \ + yyformat = S; \ + break + YYCASE_(0, YY_("syntax error")); + YYCASE_(1, YY_("syntax error, unexpected %s")); + YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); + YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); + YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); + YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); +#undef YYCASE_ + } + + // Argument number. + size_t yyi = 0; + for (char const* yyp = yyformat; *yyp; ++yyp) + if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount) + { + yyres += yytnamerr_ (yyarg[yyi++]); + ++yyp; + } + else + yyres += *yyp; + return yyres; + } + + + /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ + const signed char DecimalParser::yypact_ninf_ = -10; + const signed char + DecimalParser::yypact_[] = + { + -10, 0, -10, -10, -10, -10, -10, 7, 14, -10, + -10, -10, -10, -9, 13, 8, 20, -10, 7, 7, + 7, 7, -10, -10, -10, -10, -9, -9 + }; + + /* YYDEFACT[S] -- default reduction number in state S. Performed when + YYTABLE doesn't specify something else to do. Zero means the + default is an error. */ + const unsigned char + DecimalParser::yydefact_[] = + { + 18, 0, 1, 2, 3, 4, 5, 0, 0, 6, + 7, 9, 11, 14, 17, 0, 0, 10, 0, 0, + 0, 0, 19, 8, 12, 13, 15, 16 + }; + + /* YYPGOTO[NTERM-NUM]. */ + const signed char + DecimalParser::yypgoto_[] = + { + -10, -10, -10, 21, 5, 6, -10, 23, -10 + }; + + /* YYDEFGOTO[NTERM-NUM]. */ + const signed char + DecimalParser::yydefgoto_[] = + { + -1, 9, 10, 11, 12, 13, 14, 15, 1 + }; + + /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If YYTABLE_NINF_, syntax error. */ + const signed char DecimalParser::yytable_ninf_ = -1; + const unsigned char + DecimalParser::yytable_[] = + { + 2, 18, 19, 3, 4, 5, 6, 7, 22, 8, + 3, 4, 5, 6, 7, 0, 8, 3, 4, 5, + 6, 7, 20, 24, 25, 21, 26, 27, 23, 17, + 16 + }; + + /* YYCHECK. */ + const signed char + DecimalParser::yycheck_[] = + { + 0, 10, 11, 3, 4, 5, 6, 7, 0, 9, + 3, 4, 5, 6, 7, -1, 9, 3, 4, 5, + 6, 7, 9, 18, 19, 12, 20, 21, 8, 8, + 7 + }; + + /* STOS_[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ + const unsigned char + DecimalParser::yystos_[] = + { + 0, 21, 0, 3, 4, 5, 6, 7, 9, 14, + 15, 16, 17, 18, 19, 20, 20, 16, 10, 11, + 9, 12, 0, 8, 17, 17, 18, 18 + }; + +#if YYDEBUG + /* TOKEN_NUMBER_[YYLEX-NUM] -- Internal symbol number corresponding + to YYLEX-NUM. */ + const unsigned short int + DecimalParser::yytoken_number_[] = + { + 0, 256, 257, 258, 259, 260, 261, 40, 41, 43, + 42, 47, 45 + }; +#endif + + /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ + const unsigned char + DecimalParser::yyr1_[] = + { + 0, 13, 14, 15, 15, 15, 16, 16, 16, 17, + 17, 18, 18, 18, 19, 19, 19, 20, 21, 21 + }; + + /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ + const unsigned char + DecimalParser::yyr2_[] = + { + 0, 2, 1, 1, 1, 1, 1, 1, 3, 1, + 2, 1, 3, 3, 1, 3, 3, 1, 0, 3 + }; + + + /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at \a yyntokens_, nonterminals. */ + const char* + const DecimalParser::yytname_[] = + { + "\"end of stream\"", "error", "$undefined", "\"integer\"", "\"hex\"", + "\"dec\"", "\"line\"", "'('", "')'", "'+'", "'*'", "'/'", "'-'", + "$accept", "constant", "variable", "atomexpr", "unaryexpr", "mulexpr", + "addexpr", "expr", "start", YY_NULL + }; + +#if YYDEBUG + /* YYRHS -- A `-1'-separated list of the rules' RHS. */ + const DecimalParser::rhs_number_type + DecimalParser::yyrhs_[] = + { + 21, 0, -1, 3, -1, 4, -1, 5, -1, 6, + -1, 14, -1, 15, -1, 7, 20, 8, -1, 16, + -1, 9, 16, -1, 17, -1, 18, 10, 17, -1, + 18, 11, 17, -1, 18, -1, 19, 9, 18, -1, + 19, 12, 18, -1, 19, -1, -1, 21, 20, 0, + -1 + }; + + /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ + const unsigned char + DecimalParser::yyprhs_[] = + { + 0, 0, 3, 5, 7, 9, 11, 13, 15, 19, + 21, 24, 26, 30, 34, 36, 40, 44, 46, 47 + }; + + /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ + const unsigned char + DecimalParser::yyrline_[] = + { + 0, 109, 109, 114, 119, 124, 130, 134, 138, 143, + 147, 152, 156, 160, 165, 169, 173, 178, 184, 185 + }; + + // Print the state stack on the debug stream. + void + DecimalParser::yystack_print_ () + { + *yycdebug_ << "Stack now"; + for (state_stack_type::const_iterator i = yystate_stack_.begin (); + i != yystate_stack_.end (); ++i) + *yycdebug_ << ' ' << *i; + *yycdebug_ << std::endl; + } + + // Report on the debug stream that the rule \a yyrule is going to be reduced. + void + DecimalParser::yy_reduce_print_ (int yyrule) + { + unsigned int yylno = yyrline_[yyrule]; + int yynrhs = yyr2_[yyrule]; + /* Print the symbols being reduced, and their result. */ + *yycdebug_ << "Reducing stack by rule " << yyrule - 1 + << " (line " << yylno << "):" << std::endl; + /* The symbols being reduced. */ + for (int yyi = 0; yyi < yynrhs; yyi++) + YY_SYMBOL_PRINT (" $" << yyi + 1 << " =", + yyrhs_[yyprhs_[yyrule] + yyi], + &(yysemantic_stack_[(yynrhs) - (yyi + 1)]), + &(yylocation_stack_[(yynrhs) - (yyi + 1)])); + } +#endif // YYDEBUG + + /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ + DecimalParser::token_number_type + DecimalParser::yytranslate_ (int t) + { + static + const token_number_type + translate_table[] = + { + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 7, 8, 10, 9, 2, 12, 2, 11, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6 + }; + if ((unsigned int) t <= yyuser_token_number_max_) + return translate_table[t]; + else + return yyundef_token_; + } + + const int DecimalParser::yyeof_ = 0; + const int DecimalParser::yylast_ = 30; + const int DecimalParser::yynnts_ = 9; + const int DecimalParser::yyempty_ = -2; + const int DecimalParser::yyfinal_ = 2; + const int DecimalParser::yyterror_ = 1; + const int DecimalParser::yyerrcode_ = 256; + const int DecimalParser::yyntokens_ = 13; + + const unsigned int DecimalParser::yyuser_token_number_max_ = 261; + const DecimalParser::token_number_type DecimalParser::yyundef_token_ = 2; + + +} // PARSER +/* Line 1141 of lalr1.cc */ +#line 1205 "DecimalParser.cpp" +/* Line 1142 of lalr1.cc */ +#line 190 "DecimalParser.yy" + /*** Additional Code ***/ + +void PARSER::DecimalParser::error(const DecimalParser::location_type& l, + const std::string& m) +{ + std::cout << "Error: " << m << '\n'; +} diff --git a/sources/parsers/auto/DecimalParser.hpp b/sources/parsers/auto/DecimalParser.hpp new file mode 100644 index 0000000..6f62605 --- /dev/null +++ b/sources/parsers/auto/DecimalParser.hpp @@ -0,0 +1,275 @@ +/* A Bison parser, made by GNU Bison 2.7. */ + +/* Skeleton interface for Bison LALR(1) parsers in C++ + + Copyright (C) 2002-2012 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/** + ** \file DecimalParser.hpp + ** Define the PARSER::parser class. + */ + +/* C++ LALR(1) parser skeleton written by Akim Demaille. */ + +#ifndef YY_PARSER_DECIMALPARSER_HPP_INCLUDED +# define YY_PARSER_DECIMALPARSER_HPP_INCLUDED + + + +#include +#include +#include "stack.hh" +#include "location.hh" + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + + +namespace PARSER { +/* Line 33 of lalr1.cc */ +#line 59 "DecimalParser.hpp" + + /// A Bison parser. + class DecimalParser + { + public: + /// Symbol semantic values. +#ifndef YYSTYPE + union semantic_type + { +/* Line 33 of lalr1.cc */ +#line 66 "DecimalParser.yy" + + uint64_t integer; + std::string* pString; + class PARSER::ExpressionNode* pExprNode; + + +/* Line 33 of lalr1.cc */ +#line 78 "DecimalParser.hpp" + }; +#else + typedef YYSTYPE semantic_type; +#endif + /// Symbol locations. + typedef location location_type; + /// Tokens. + struct token + { + /* Tokens. */ + enum yytokentype { + END = 0, + INTEGER = 258, + HEX = 259, + DEC = 260, + LINE = 261 + }; + + }; + /// Token type. + typedef token::yytokentype token_type; + + /// Build a parser object. + DecimalParser (class Evaluator& evaluator_yyarg); + virtual ~DecimalParser (); + + /// Parse. + /// \returns 0 iff parsing succeeded. + virtual int parse (); + +#if YYDEBUG + /// The current debugging stream. + std::ostream& debug_stream () const; + /// Set the current debugging stream. + void set_debug_stream (std::ostream &); + + /// Type for debugging levels. + typedef int debug_level_type; + /// The current debugging level. + debug_level_type debug_level () const; + /// Set the current debugging level. + void set_debug_level (debug_level_type l); +#endif + + private: + /// Report a syntax error. + /// \param loc where the syntax error is found. + /// \param msg a description of the syntax error. + virtual void error (const location_type& loc, const std::string& msg); + + /// Generate an error message. + /// \param state the state where the error occurred. + /// \param tok the lookahead token. + virtual std::string yysyntax_error_ (int yystate, int tok); + +#if YYDEBUG + /// \brief Report a symbol value on the debug stream. + /// \param yytype The token type. + /// \param yyvaluep Its semantic value. + /// \param yylocationp Its location. + virtual void yy_symbol_value_print_ (int yytype, + const semantic_type* yyvaluep, + const location_type* yylocationp); + /// \brief Report a symbol on the debug stream. + /// \param yytype The token type. + /// \param yyvaluep Its semantic value. + /// \param yylocationp Its location. + virtual void yy_symbol_print_ (int yytype, + const semantic_type* yyvaluep, + const location_type* yylocationp); +#endif + + + /// State numbers. + typedef int state_type; + /// State stack type. + typedef stack state_stack_type; + /// Semantic value stack type. + typedef stack semantic_stack_type; + /// location stack type. + typedef stack location_stack_type; + + /// The state stack. + state_stack_type yystate_stack_; + /// The semantic value stack. + semantic_stack_type yysemantic_stack_; + /// The location stack. + location_stack_type yylocation_stack_; + + /// Whether the given \c yypact_ value indicates a defaulted state. + /// \param yyvalue the value to check + static bool yy_pact_value_is_default_ (int yyvalue); + + /// Whether the given \c yytable_ value indicates a syntax error. + /// \param yyvalue the value to check + static bool yy_table_value_is_error_ (int yyvalue); + + /// Internal symbol numbers. + typedef unsigned char token_number_type; + /* Tables. */ + /// For a state, the index in \a yytable_ of its portion. + static const signed char yypact_[]; + static const signed char yypact_ninf_; + + /// For a state, default reduction number. + /// Unless\a yytable_ specifies something else to do. + /// Zero means the default is an error. + static const unsigned char yydefact_[]; + + static const signed char yypgoto_[]; + static const signed char yydefgoto_[]; + + /// What to do in a state. + /// \a yytable_[yypact_[s]]: what to do in state \a s. + /// - if positive, shift that token. + /// - if negative, reduce the rule which number is the opposite. + /// - if zero, do what YYDEFACT says. + static const unsigned char yytable_[]; + static const signed char yytable_ninf_; + + static const signed char yycheck_[]; + + /// For a state, its accessing symbol. + static const unsigned char yystos_[]; + + /// For a rule, its LHS. + static const unsigned char yyr1_[]; + /// For a rule, its RHS length. + static const unsigned char yyr2_[]; + + /// Convert the symbol name \a n to a form suitable for a diagnostic. + static std::string yytnamerr_ (const char *n); + + + /// For a symbol, its name in clear. + static const char* const yytname_[]; +#if YYDEBUG + /// A type to store symbol numbers and -1. + typedef signed char rhs_number_type; + /// A `-1'-separated list of the rules' RHS. + static const rhs_number_type yyrhs_[]; + /// For each rule, the index of the first RHS symbol in \a yyrhs_. + static const unsigned char yyprhs_[]; + /// For each rule, its source line number. + static const unsigned char yyrline_[]; + /// For each scanner token number, its symbol number. + static const unsigned short int yytoken_number_[]; + /// Report on the debug stream that the rule \a r is going to be reduced. + virtual void yy_reduce_print_ (int r); + /// Print the state stack on the debug stream. + virtual void yystack_print_ (); + + /* Debugging. */ + int yydebug_; + std::ostream* yycdebug_; +#endif + + /// Convert a scanner token number \a t to a symbol number. + token_number_type yytranslate_ (int t); + + /// \brief Reclaim the memory associated to a symbol. + /// \param yymsg Why this token is reclaimed. + /// If null, do not display the symbol, just free it. + /// \param yytype The symbol type. + /// \param yyvaluep Its semantic value. + /// \param yylocationp Its location. + inline void yydestruct_ (const char* yymsg, + int yytype, + semantic_type* yyvaluep, + location_type* yylocationp); + + /// Pop \a n symbols the three stacks. + inline void yypop_ (unsigned int n = 1); + + /* Constants. */ + static const int yyeof_; + /* LAST_ -- Last index in TABLE_. */ + static const int yylast_; + static const int yynnts_; + static const int yyempty_; + static const int yyfinal_; + static const int yyterror_; + static const int yyerrcode_; + static const int yyntokens_; + static const unsigned int yyuser_token_number_max_; + static const token_number_type yyundef_token_; + + /* User arguments. */ + class Evaluator& evaluator; + }; + +} // PARSER +/* Line 33 of lalr1.cc */ +#line 272 "DecimalParser.hpp" + + + +#endif /* !YY_PARSER_DECIMALPARSER_HPP_INCLUDED */ diff --git a/sources/parsers/auto/DecimalScanner.cpp b/sources/parsers/auto/DecimalScanner.cpp new file mode 100644 index 0000000..517c2d8 --- /dev/null +++ b/sources/parsers/auto/DecimalScanner.cpp @@ -0,0 +1,2239 @@ +#line 1 "DecimalScanner.cpp" + +#line 3 "DecimalScanner.cpp" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 6 +#define YY_FLEX_SUBMINOR_VERSION 4 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + + /* The c++ scanner is a mess. The FlexLexer.h header file relies on the + * following macro. This is required in order to pass the c++-multiple-scanners + * test in the regression suite. We get reports that it breaks inheritance. + * We will address this in a future release of flex, or omit the C++ scanner + * altogether. + */ + #define yyFlexLexer DecimalFlexLexer + +#ifdef yyalloc +#define Decimalalloc_ALREADY_DEFINED +#else +#define yyalloc Decimalalloc +#endif + +#ifdef yyrealloc +#define Decimalrealloc_ALREADY_DEFINED +#else +#define yyrealloc Decimalrealloc +#endif + +#ifdef yyfree +#define Decimalfree_ALREADY_DEFINED +#else +#define yyfree Decimalfree +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#ifndef SIZE_MAX +#define SIZE_MAX (~(size_t)0) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +/* begin standard C++ headers. */ +#include +#include +#include +#include +#include +/* end standard C++ headers. */ + +/* TODO: this is always defined, so inline it */ +#define yyconst const + +#if defined(__GNUC__) && __GNUC__ >= 3 +#define yynoreturn __attribute__((__noreturn__)) +#else +#define yynoreturn +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an + * integer in range [0..255] for use as an array index. + */ +#define YY_SC_TO_UI(c) ((YY_CHAR) (c)) + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN (yy_start) = 1 + 2 * +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START (((yy_start) - 1) / 2) +#define YYSTATE YY_START +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE yyrestart( yyin ) +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else +#define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +extern int yyleng; + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + #define YY_LINENO_REWIND_TO(ptr) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = (yy_hold_char); \ + YY_RESTORE_YY_MORE_OFFSET \ + (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) +#define unput(c) yyunput( c, (yytext_ptr) ) + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + + std::streambuf* yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + int yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ + ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ + : NULL) +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] + +void *yyalloc ( yy_size_t ); +void *yyrealloc ( void *, yy_size_t ); +void yyfree ( void * ); + +#define yy_new_buffer yy_create_buffer +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ +typedef flex_uint8_t YY_CHAR; + +#define yytext_ptr yytext + +#include + +static const flex_int16_t yy_nxt[][128] = + { + { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 + }, + + { + 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, + 6, 4, 4, 5, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 8, 4, 4, 4, 9, 4, 4, 4, 10, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4 + }, + + { + 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, + 6, 4, 4, 5, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, + + 4, 4, 4, 4, 4, 4, 4, 4, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 8, 4, 4, 4, 9, 4, 4, 4, 10, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4 + }, + + { + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3 + }, + + { + 3, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4 + }, + + { + 3, -5, -5, -5, -5, -5, -5, -5, -5, 11, + -5, -5, -5, 11, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + -5, -5, 11, -5, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5 + }, + + { + 3, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + + -6, -6, -6, -6, -6, -6, -6, -6 + }, + + { + 3, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7 + }, + + { + 3, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, 13, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8 + }, + + { + 3, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, 14, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9 + + }, + + { + 3, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + + -10, -10, -10, -10, -10, 15, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10 + }, + + { + 3, -11, -11, -11, -11, -11, -11, -11, -11, 11, + -11, -11, -11, 11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, 11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11 + }, + + { + 3, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + + -12, -12, -12, -12, -12, -12, -12, -12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12 + }, + + { + 3, -13, -13, -13, -13, -13, -13, -13, -13, -13, + + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, 16, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13 + }, + + { + 3, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + 17, -14, -14, -14, -14, -14, -14, -14 + }, + + { + 3, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + 18, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15 + }, + + { + 3, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + 19, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + + -16, -16, -16, -16, -16, -16, -16, -16 + }, + + { + 3, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + 20, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17 + }, + + { + 3, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, 21, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18 + }, + + { + 3, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + + -19, -19, 22, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19 + + }, + + { + 3, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, 24, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20 + }, + + { + 3, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + 26, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21 + }, + + { + 3, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, 22, -22, -22, -22, -22, -22, -22, -22, + + -22, -22, -22, -22, -22, -22, -22, -22, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22 + }, + + { + 3, -23, -23, -23, -23, -23, -23, -23, -23, -23, + + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, 27, -23, -23, -23, -23, -23, -23, -23, + -23, 28, -23, -23, -23, -23, -23, -23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23 + }, + + { + 3, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, 24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24 + }, + + { + 3, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, 29, -25, -25, -25, -25, -25, -25, -25, + -25, 30, -25, -25, -25, -25, -25, -25, 25, 25, + + 25, 25, 25, 25, 25, 25, 25, 25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25 + }, + + { + 3, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, 31, -26, -26, -26, -26, -26, -26, -26, + -26, 32, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + + -26, -26, -26, -26, -26, -26, -26, -26 + }, + + { + 3, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, 27, -27, -27, -27, -27, -27, -27, -27, + -27, 28, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27 + }, + + { + 3, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28 + }, + + { + 3, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + + -29, -29, 29, -29, -29, -29, -29, -29, -29, -29, + -29, 30, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29 + + }, + + { + 3, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30 + }, + + { + 3, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, 31, -31, -31, -31, -31, -31, -31, -31, + -31, 32, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31 + }, + + { + 3, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32 + }, + + } ; + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + (yytext_ptr) = yy_bp; \ + yyleng = (int) (yy_cp - yy_bp); \ + (yy_hold_char) = *yy_cp; \ + *yy_cp = '\0'; \ + (yy_c_buf_p) = yy_cp; +#define YY_NUM_RULES 7 +#define YY_END_OF_BUFFER 8 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static const flex_int16_t yy_accept[33] = + { 0, + 0, 0, 8, 6, 5, 7, 1, 6, 6, 6, + 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 0, 2, + 0, 4 + } ; + +static const yy_state_type yy_NUL_trans[33] = + { 0, + 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0 + } ; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +#line 1 "DecimalScanner.ll" +/** Define the decimal expression Flex lexical scanner. + + Copyright (c) 2018 vcdMaker team + 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. +*/ +#line 24 "DecimalScanner.ll" + +#include "DecimalNode.h" +#include "DecimalScanner.h" + +/* Import the parser's token type into a local typedef. */ +typedef PARSER::DecimalParser::token token; +typedef PARSER::DecimalParser::token_type token_type; + +/* By default yylex returns int, we use token_type. Unfortunately yyterminate + * by default returns 0, which is not of token_type. */ +#define yyterminate() return token::END + +/* This disables inclusion of unistd.h, which is not available under Visual C++ + * on Win32. The C++ scanner uses STL streams instead. */ +#define YY_NO_UNISTD_H + +#line 976 "DecimalScanner.cpp" +/*** Flex Declarations and Options ***/ +/* Enable c++ scanner class generation. */ +/* Change the name of the scanner class. Results in "DecimalFlexLexer". */ +/* The manual says "somewhat more optimized". */ +/* Enable scanner to generate debug output. disable this for release versions. */ +/* %option debug */ +/* No support for include files is planned. */ +/* Let the scanner be fast. */ +/* The following paragraph suffices to track locations accurately. Each time + * yylex is invoked, the begin position is moved onto the end position. */ +#line 65 "DecimalScanner.ll" +#define YY_USER_ACTION yylloc->columns(yyleng); +#line 989 "DecimalScanner.cpp" +#line 990 "DecimalScanner.cpp" + +#define INITIAL 0 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy ( char *, const char *, int ); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen ( const char * ); +#endif + +#ifndef YY_NO_INPUT + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else +#define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +#define ECHO LexerOutput( yytext, yyleng ) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ +\ + if ( (int)(result = LexerInput( (char *) buf, max_size )) < 0 ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) LexerError( msg ) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 +#define YY_DECL int yyFlexLexer::yylex() +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK /*LINTED*/break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + yy_state_type yy_current_state; + char *yy_cp, *yy_bp; + int yy_act; + + if ( !(yy_init) ) + { + (yy_init) = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! (yy_start) ) + (yy_start) = 1; /* first start state */ + + if ( ! yyin ) + yyin.rdbuf(std::cin.rdbuf()); + + if ( ! yyout ) + yyout.rdbuf(std::cout.rdbuf()); + + if ( ! YY_CURRENT_BUFFER ) { + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE ); + } + + yy_load_buffer_state( ); + } + + { +#line 68 "DecimalScanner.ll" + + +#line 71 "DecimalScanner.ll" + /* Code to place at the beginning of yylex(). */ + + // reset location + yylloc->step(); + + + /*** Lexer rules ***/ + +#line 1134 "DecimalScanner.cpp" + + while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ + { + yy_cp = (yy_c_buf_p); + + /* Support of yytext. */ + *yy_cp = (yy_hold_char); + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = (yy_start); +yy_match: + while ( (yy_current_state = yy_nxt[yy_current_state][ YY_SC_TO_UI(*yy_cp) ]) > 0 ) + { + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + + ++yy_cp; + } + + yy_current_state = -yy_current_state; + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = (yy_hold_char); + yy_cp = (yy_last_accepting_cpos) + 1; + yy_current_state = (yy_last_accepting_state); + goto yy_find_action; + +case 1: +YY_RULE_SETUP +#line 79 "DecimalScanner.ll" +{ + yylval->integer = atoi(yytext); + return token::INTEGER; +} + YY_BREAK +case 2: +YY_RULE_SETUP +#line 84 "DecimalScanner.ll" +{ + yylval->pString = new std::string(yytext, yyleng); + return token::HEX; +} + YY_BREAK +case 3: +YY_RULE_SETUP +#line 89 "DecimalScanner.ll" +{ + yylval->pString = new std::string(yytext, yyleng); + return token::DEC; +} + YY_BREAK +case 4: +YY_RULE_SETUP +#line 94 "DecimalScanner.ll" +{ + yylval->pString = new std::string(yytext, yyleng); + return token::LINE; +} + YY_BREAK +/* gobble up white-spaces */ +case 5: +YY_RULE_SETUP +#line 100 "DecimalScanner.ll" +{ + yylloc->step(); +} + YY_BREAK +/* pass all other characters up to bison */ +case 6: +YY_RULE_SETUP +#line 105 "DecimalScanner.ll" +{ + return static_cast(*yytext); +} + YY_BREAK +/*** End of lexer rules ***/ +case 7: +YY_RULE_SETUP +#line 111 "DecimalScanner.ll" +ECHO; + YY_BREAK +#line 1233 "DecimalScanner.cpp" +case YY_STATE_EOF(INITIAL): + yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = (yy_hold_char); + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin.rdbuf(); + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state ); + + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++(yy_c_buf_p); + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = (yy_c_buf_p); + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_END_OF_FILE: + { + (yy_did_buffer_switch_on_eof) = 0; + + if ( yywrap( ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = + (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + (yy_c_buf_p) = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ + } /* end of user's declarations */ +} /* end of yylex */ + +/* The contents of this function are C++ specific, so the () macro is not used. + * This constructor simply maintains backward compatibility. + * DEPRECATED + */ +yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout ): + yyin(arg_yyin ? arg_yyin->rdbuf() : std::cin.rdbuf()), + yyout(arg_yyout ? arg_yyout->rdbuf() : std::cout.rdbuf()) +{ + ctor_common(); +} + +/* The contents of this function are C++ specific, so the () macro is not used. + */ +yyFlexLexer::yyFlexLexer( std::istream& arg_yyin, std::ostream& arg_yyout ): + yyin(arg_yyin.rdbuf()), + yyout(arg_yyout.rdbuf()) +{ + ctor_common(); +} + +/* The contents of this function are C++ specific, so the () macro is not used. + */ +void yyFlexLexer::ctor_common() +{ + yy_c_buf_p = 0; + yy_init = 0; + yy_start = 0; + yy_flex_debug = 0; + yylineno = 1; // this will only get updated if %option yylineno + + yy_did_buffer_switch_on_eof = 0; + + yy_looking_for_trail_begin = 0; + yy_more_flag = 0; + yy_more_len = 0; + yy_more_offset = yy_prev_more_offset = 0; + + yy_start_stack_ptr = yy_start_stack_depth = 0; + yy_start_stack = NULL; + + yy_buffer_stack = NULL; + yy_buffer_stack_top = 0; + yy_buffer_stack_max = 0; + + yy_state_buf = 0; + +} + +/* The contents of this function are C++ specific, so the () macro is not used. + */ +yyFlexLexer::~yyFlexLexer() +{ + delete [] yy_state_buf; + yyfree( yy_start_stack ); + yy_delete_buffer( YY_CURRENT_BUFFER ); + yyfree( yy_buffer_stack ); +} + +/* The contents of this function are C++ specific, so the () macro is not used. + */ +void yyFlexLexer::switch_streams( std::istream& new_in, std::ostream& new_out ) +{ + // was if( new_in ) + yy_delete_buffer( YY_CURRENT_BUFFER ); + yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE ) ); + + // was if( new_out ) + yyout.rdbuf(new_out.rdbuf()); +} + +/* The contents of this function are C++ specific, so the () macro is not used. + */ +void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out ) +{ + if( ! new_in ) { + new_in = &yyin; + } + + if ( ! new_out ) { + new_out = &yyout; + } + + switch_streams(*new_in, *new_out); +} + +#ifdef YY_INTERACTIVE +int yyFlexLexer::LexerInput( char* buf, int /* max_size */ ) +#else +int yyFlexLexer::LexerInput( char* buf, int max_size ) +#endif +{ + if ( yyin.eof() || yyin.fail() ) + return 0; + +#ifdef YY_INTERACTIVE + yyin.get( buf[0] ); + + if ( yyin.eof() ) + return 0; + + if ( yyin.bad() ) + return -1; + + return 1; + +#else + (void) yyin.read( buf, max_size ); + + if ( yyin.bad() ) + return -1; + else + return yyin.gcount(); +#endif +} + +void yyFlexLexer::LexerOutput( const char* buf, int size ) +{ + (void) yyout.write( buf, size ); +} + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +int yyFlexLexer::yy_get_next_buffer() +{ + char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + char *source = (yytext_ptr); + int number_to_move, i; + int ret_val; + + if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1); + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; + + int yy_c_buf_p_offset = + (int) ((yy_c_buf_p) - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + yyrealloc( (void *) b->yy_ch_buf, + (yy_size_t) (b->yy_buf_size + 2) ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = NULL; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + (yy_n_chars), num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + if ( (yy_n_chars) == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + yyrestart( yyin ); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( + (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + /* "- 2" to take care of EOB's */ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); + } + + (yy_n_chars) += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; + + (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + yy_state_type yyFlexLexer::yy_get_previous_state() +{ + yy_state_type yy_current_state; + char *yy_cp; + + yy_current_state = (yy_start); + + for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) + { + if ( *yy_cp ) + { + yy_current_state = yy_nxt[yy_current_state][YY_SC_TO_UI(*yy_cp)]; + } + else + yy_current_state = yy_NUL_trans[yy_current_state]; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state ) +{ + int yy_is_jam; + char *yy_cp = (yy_c_buf_p); + + yy_current_state = yy_NUL_trans[yy_current_state]; + yy_is_jam = (yy_current_state == 0); + + if ( ! yy_is_jam ) + { + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + } + + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_UNPUT + void yyFlexLexer::yyunput( int c, char* yy_bp) +{ + char *yy_cp; + + yy_cp = (yy_c_buf_p); + + /* undo effects of setting up yytext */ + *yy_cp = (yy_hold_char); + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + int number_to_move = (yy_n_chars) + 2; + char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + (yy_n_chars) = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + (yytext_ptr) = yy_bp; + (yy_hold_char) = *yy_cp; + (yy_c_buf_p) = yy_cp; +} +#endif + + int yyFlexLexer::yyinput() +{ + int c; + + *(yy_c_buf_p) = (yy_hold_char); + + if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + /* This was really a NUL. */ + *(yy_c_buf_p) = '\0'; + + else + { /* need more input */ + int offset = (int) ((yy_c_buf_p) - (yytext_ptr)); + ++(yy_c_buf_p); + + switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + yyrestart( yyin ); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( yywrap( ) ) + return 0; + + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(); +#else + return input(); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = (yytext_ptr) + offset; + break; + } + } + } + + c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ + *(yy_c_buf_p) = '\0'; /* preserve yytext */ + (yy_hold_char) = *++(yy_c_buf_p); + + return c; +} + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyFlexLexer::yyrestart( std::istream& input_file ) +{ + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE ); + } + + yy_init_buffer( YY_CURRENT_BUFFER, input_file ); + yy_load_buffer_state( ); +} + +/** Delegate to the new version that takes an istream reference. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ +void yyFlexLexer::yyrestart( std::istream* input_file ) +{ + if( ! input_file ) { + input_file = &yyin; + } + yyrestart( *input_file ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + yy_load_buffer_state( ); + + /* We don't actually know whether we did this switch during + * EOF (yywrap()) processing, but the only time this flag + * is looked at is after yywrap() is called, so it's safe + * to go ahead and always set it. + */ + (yy_did_buffer_switch_on_eof) = 1; +} + + void yyFlexLexer::yy_load_buffer_state() +{ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin.rdbuf(YY_CURRENT_BUFFER_LVALUE->yy_input_file); + (yy_hold_char) = *(yy_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream& file, int size ) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + yy_init_buffer( b, file ); + + return b; +} + +/** Delegate creation of buffers to the new version that takes an istream reference. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size ) +{ + return yy_create_buffer( *file, size ); +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * + */ + void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree( (void *) b->yy_ch_buf ); + + yyfree( (void *) b ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream& file ) + +{ + int oerrno = errno; + + yy_flush_buffer( b ); + + b->yy_input_file = file.rdbuf(); + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = 0; + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * + */ + void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b ) +{ + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + yy_load_buffer_state( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer) +{ + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + (yy_buffer_stack_top)++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void yyFlexLexer::yypop_buffer_state (void) +{ + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + if ((yy_buffer_stack_top) > 0) + --(yy_buffer_stack_top); + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +void yyFlexLexer::yyensure_buffer_stack(void) +{ + yy_size_t num_to_alloc; + + if (!(yy_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ + (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + (yy_buffer_stack_max) = num_to_alloc; + (yy_buffer_stack_top) = 0; + return; + } + + if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + yy_size_t grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (yy_buffer_stack_max) + grow_size; + (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc + ((yy_buffer_stack), + num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); + (yy_buffer_stack_max) = num_to_alloc; + } +} + + void yyFlexLexer::yy_push_state( int _new_state ) +{ + if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) ) + { + yy_size_t new_size; + + (yy_start_stack_depth) += YY_START_STACK_INCR; + new_size = (yy_size_t) (yy_start_stack_depth) * sizeof( int ); + + if ( ! (yy_start_stack) ) + (yy_start_stack) = (int *) yyalloc( new_size ); + + else + (yy_start_stack) = (int *) yyrealloc( + (void *) (yy_start_stack), new_size ); + + if ( ! (yy_start_stack) ) + YY_FATAL_ERROR( "out of memory expanding start-condition stack" ); + } + + (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START; + + BEGIN(_new_state); +} + + void yyFlexLexer::yy_pop_state() +{ + if ( --(yy_start_stack_ptr) < 0 ) + YY_FATAL_ERROR( "start-condition stack underflow" ); + + BEGIN((yy_start_stack)[(yy_start_stack_ptr)]); +} + + int yyFlexLexer::yy_top_state() +{ + return (yy_start_stack)[(yy_start_stack_ptr) - 1]; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +void yyFlexLexer::LexerError( const char* msg ) +{ + std::cerr << msg << std::endl; + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = (yy_hold_char); \ + (yy_c_buf_p) = yytext + yyless_macro_arg; \ + (yy_hold_char) = *(yy_c_buf_p); \ + *(yy_c_buf_p) = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, const char * s2, int n ) +{ + + int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (const char * s ) +{ + int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size ) +{ + return malloc(size); +} + +void *yyrealloc (void * ptr, yy_size_t size ) +{ + + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return realloc(ptr, size); +} + +void yyfree (void * ptr ) +{ + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 111 "DecimalScanner.ll" + + +namespace PARSER { + +DecimalScanner::DecimalScanner(std::istream* in, + std::ostream* out) + : DecimalFlexLexer(in, out) +{ +} + +DecimalScanner::~DecimalScanner() +{ +} + +/* +void DecimalScanner::set_debug(bool b) +{ + yy_flex_debug = b; +} +*/ + +} + +/* This implementation of DecimalFlexLexer::yylex() is required to fill the + * vtable of the class ExampleFlexLexer. We define the scanner's main yylex + * function via YY_DECL to reside in the Scanner class instead. */ + +#ifdef yylex +#undef yylex +#endif + +int DecimalFlexLexer::yylex() +{ + std::cerr << "in DecimalFlexLexer::yylex() !" << std::endl; + return 0; +} + +/* When the scanner receives an end-of-file indication from YY_INPUT, it then + * checks the yywrap() function. If yywrap() returns false (zero), then it is + * assumed that the function has gone ahead and set up `yyin' to point to + * another input file, and scanning continues. If it returns true (non-zero), + * then the scanner terminates, returning 0 to its caller. */ + +int DecimalFlexLexer::yywrap() +{ + return 1; +} + diff --git a/sources/parsers/auto/FlexLexer.h b/sources/parsers/auto/FlexLexer.h new file mode 100644 index 0000000..c4dad2b --- /dev/null +++ b/sources/parsers/auto/FlexLexer.h @@ -0,0 +1,220 @@ +// -*-C++-*- +// FlexLexer.h -- define interfaces for lexical analyzer classes generated +// by flex + +// Copyright (c) 1993 The Regents of the University of California. +// All rights reserved. +// +// This code is derived from software contributed to Berkeley by +// Kent Williams and Tom Epperly. +// +// 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. + +// Neither the name of the University 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE. + +// This file defines FlexLexer, an abstract class which specifies the +// external interface provided to flex C++ lexer objects, and yyFlexLexer, +// which defines a particular lexer class. +// +// If you want to create multiple lexer classes, you use the -P flag +// to rename each yyFlexLexer to some other xxFlexLexer. You then +// include in your other sources once per lexer class: +// +// #undef yyFlexLexer +// #define yyFlexLexer xxFlexLexer +// #include +// +// #undef yyFlexLexer +// #define yyFlexLexer zzFlexLexer +// #include +// ... + +#ifndef __FLEX_LEXER_H +// Never included before - need to define base class. +#define __FLEX_LEXER_H + +#include + +extern "C++" { + +struct yy_buffer_state; +typedef int yy_state_type; + +class FlexLexer +{ +public: + virtual ~FlexLexer() { } + + const char* YYText() const { return yytext; } + int YYLeng() const { return yyleng; } + + virtual void + yy_switch_to_buffer( yy_buffer_state* new_buffer ) = 0; + virtual yy_buffer_state* yy_create_buffer( std::istream* s, int size ) = 0; + virtual yy_buffer_state* yy_create_buffer( std::istream& s, int size ) = 0; + virtual void yy_delete_buffer( yy_buffer_state* b ) = 0; + virtual void yyrestart( std::istream* s ) = 0; + virtual void yyrestart( std::istream& s ) = 0; + + virtual int yylex() = 0; + + // Call yylex with new input/output sources. + int yylex( std::istream& new_in, std::ostream& new_out ) + { + switch_streams( new_in, new_out ); + return yylex(); + } + + int yylex( std::istream* new_in, std::ostream* new_out = 0) + { + switch_streams( new_in, new_out ); + return yylex(); + } + + // Switch to new input/output streams. A nil stream pointer + // indicates "keep the current one". + virtual void switch_streams( std::istream* new_in, + std::ostream* new_out ) = 0; + virtual void switch_streams( std::istream& new_in, + std::ostream& new_out ) = 0; + + int lineno() const { return yylineno; } + + int debug() const { return yy_flex_debug; } + void set_debug( int flag ) { yy_flex_debug = flag; } + +protected: + char* yytext; + int yyleng; + int yylineno; // only maintained if you use %option yylineno + int yy_flex_debug; // only has effect with -d or "%option debug" +}; + +} +#endif // FLEXLEXER_H + +#if defined(yyFlexLexer) || ! defined(yyFlexLexerOnce) +// Either this is the first time through (yyFlexLexerOnce not defined), +// or this is a repeated include to define a different flavor of +// yyFlexLexer, as discussed in the flex manual. +# define yyFlexLexerOnce + +extern "C++" { + +class yyFlexLexer : public FlexLexer { +public: + // arg_yyin and arg_yyout default to the cin and cout, but we + // only make that assignment when initializing in yylex(). + yyFlexLexer( std::istream& arg_yyin, std::ostream& arg_yyout ); + yyFlexLexer( std::istream* arg_yyin = 0, std::ostream* arg_yyout = 0 ); +private: + void ctor_common(); + +public: + + virtual ~yyFlexLexer(); + + void yy_switch_to_buffer( yy_buffer_state* new_buffer ); + yy_buffer_state* yy_create_buffer( std::istream* s, int size ); + yy_buffer_state* yy_create_buffer( std::istream& s, int size ); + void yy_delete_buffer( yy_buffer_state* b ); + void yyrestart( std::istream* s ); + void yyrestart( std::istream& s ); + + void yypush_buffer_state( yy_buffer_state* new_buffer ); + void yypop_buffer_state(); + + virtual int yylex(); + virtual void switch_streams( std::istream& new_in, std::ostream& new_out ); + virtual void switch_streams( std::istream* new_in = 0, std::ostream* new_out = 0 ); + virtual int yywrap(); + +protected: + virtual int LexerInput( char* buf, int max_size ); + virtual void LexerOutput( const char* buf, int size ); + virtual void LexerError( const char* msg ); + + void yyunput( int c, char* buf_ptr ); + int yyinput(); + + void yy_load_buffer_state(); + void yy_init_buffer( yy_buffer_state* b, std::istream& s ); + void yy_flush_buffer( yy_buffer_state* b ); + + int yy_start_stack_ptr; + int yy_start_stack_depth; + int* yy_start_stack; + + void yy_push_state( int new_state ); + void yy_pop_state(); + int yy_top_state(); + + yy_state_type yy_get_previous_state(); + yy_state_type yy_try_NUL_trans( yy_state_type current_state ); + int yy_get_next_buffer(); + + std::istream yyin; // input source for default LexerInput + std::ostream yyout; // output sink for default LexerOutput + + // yy_hold_char holds the character lost when yytext is formed. + char yy_hold_char; + + // Number of characters read into yy_ch_buf. + int yy_n_chars; + + // Points to current character in buffer. + char* yy_c_buf_p; + + int yy_init; // whether we need to initialize + int yy_start; // start state number + + // Flag which is used to allow yywrap()'s to do buffer switches + // instead of setting up a fresh yyin. A bit of a hack ... + int yy_did_buffer_switch_on_eof; + + + size_t yy_buffer_stack_top; /**< index of top of stack. */ + size_t yy_buffer_stack_max; /**< capacity of stack. */ + yy_buffer_state ** yy_buffer_stack; /**< Stack as an array. */ + void yyensure_buffer_stack(void); + + // The following are not always needed, but may be depending + // on use of certain flex features (like REJECT or yymore()). + + yy_state_type yy_last_accepting_state; + char* yy_last_accepting_cpos; + + yy_state_type* yy_state_buf; + yy_state_type* yy_state_ptr; + + char* yy_full_match; + int* yy_full_state; + int yy_full_lp; + + int yy_lp; + int yy_looking_for_trail_begin; + + int yy_more_flag; + int yy_more_len; + int yy_more_offset; + int yy_prev_more_offset; +}; + +} + +#endif // yyFlexLexer || ! yyFlexLexerOnce diff --git a/sources/parsers/auto/FloatParser.cpp b/sources/parsers/auto/FloatParser.cpp new file mode 100644 index 0000000..76c6f1d --- /dev/null +++ b/sources/parsers/auto/FloatParser.cpp @@ -0,0 +1,1185 @@ +/* A Bison parser, made by GNU Bison 2.7. */ + +/* Skeleton implementation for Bison LALR(1) parsers in C++ + + Copyright (C) 2002-2012 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +// Take the name prefix into account. +#define yylex PARSERlex + +/* First part of user declarations. */ +/* Line 279 of lalr1.cc */ +#line 23 "FloatParser.yy" + /*** C/C++ Declarations ***/ + +#include "ExpressionNode.h" +#include "FloatNode.h" + + +/* Line 279 of lalr1.cc */ +#line 47 "FloatParser.cpp" + + +#include "FloatParser.hpp" + +/* User implementation prologue. */ +/* Line 285 of lalr1.cc */ +#line 89 "FloatParser.yy" + + +#include "evaluator.h" +#include "FloatScanner.h" + +/* this "connects" the bison parser in the driver to the flex scanner class + * object. it defines the yylex() function call to pull the next token from the + * current lexer object of the driver context. */ +#undef yylex +#define yylex evaluator.m_pFloatLexer->lex + + +/* Line 285 of lalr1.cc */ +#line 68 "FloatParser.cpp" + + +# ifndef YY_NULL +# if defined __cplusplus && 201103L <= __cplusplus +# define YY_NULL nullptr +# else +# define YY_NULL 0 +# endif +# endif + +#ifndef YY_ +# if defined YYENABLE_NLS && YYENABLE_NLS +# if ENABLE_NLS +# include /* FIXME: INFRINGES ON USER NAME SPACE */ +# define YY_(msgid) dgettext ("bison-runtime", msgid) +# endif +# endif +# ifndef YY_ +# define YY_(msgid) msgid +# endif +#endif + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +# ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (N) \ + { \ + (Current).begin = YYRHSLOC (Rhs, 1).begin; \ + (Current).end = YYRHSLOC (Rhs, N).end; \ + } \ + else \ + { \ + (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end; \ + } \ + while (/*CONSTCOND*/ false) +# endif + + +/* Suppress unused-variable warnings by "using" E. */ +#define YYUSE(e) ((void) (e)) + +/* Enable debugging if requested. */ +#if YYDEBUG + +/* A pseudo ostream that takes yydebug_ into account. */ +# define YYCDEBUG if (yydebug_) (*yycdebug_) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug_) \ + { \ + *yycdebug_ << Title << ' '; \ + yy_symbol_print_ ((Type), (Value), (Location)); \ + *yycdebug_ << std::endl; \ + } \ +} while (false) + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug_) \ + yy_reduce_print_ (Rule); \ +} while (false) + +# define YY_STACK_PRINT() \ +do { \ + if (yydebug_) \ + yystack_print_ (); \ +} while (false) + +#else /* !YYDEBUG */ + +# define YYCDEBUG if (false) std::cerr +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) YYUSE(Type) +# define YY_REDUCE_PRINT(Rule) static_cast(0) +# define YY_STACK_PRINT() static_cast(0) + +#endif /* !YYDEBUG */ + +#define yyerrok (yyerrstatus_ = 0) +#define yyclearin (yychar = yyempty_) + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab +#define YYRECOVERING() (!!yyerrstatus_) + + +namespace PARSER { +/* Line 353 of lalr1.cc */ +#line 163 "FloatParser.cpp" + + /* Return YYSTR after stripping away unnecessary quotes and + backslashes, so that it's suitable for yyerror. The heuristic is + that double-quoting is unnecessary unless the string contains an + apostrophe, a comma, or backslash (other than backslash-backslash). + YYSTR is taken from yytname. */ + std::string + FloatParser::yytnamerr_ (const char *yystr) + { + if (*yystr == '"') + { + std::string yyr = ""; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + yyr += *yyp; + break; + + case '"': + return yyr; + } + do_not_strip_quotes: ; + } + + return yystr; + } + + + /// Build a parser object. + FloatParser::FloatParser (class Evaluator& evaluator_yyarg) + : +#if YYDEBUG + yydebug_ (false), + yycdebug_ (&std::cerr), +#endif + evaluator (evaluator_yyarg) + { + } + + FloatParser::~FloatParser () + { + } + +#if YYDEBUG + /*--------------------------------. + | Print this symbol on YYOUTPUT. | + `--------------------------------*/ + + inline void + FloatParser::yy_symbol_value_print_ (int yytype, + const semantic_type* yyvaluep, const location_type* yylocationp) + { + YYUSE (yylocationp); + YYUSE (yyvaluep); + std::ostream& yyo = debug_stream (); + std::ostream& yyoutput = yyo; + YYUSE (yyoutput); + switch (yytype) + { + default: + break; + } + } + + + void + FloatParser::yy_symbol_print_ (int yytype, + const semantic_type* yyvaluep, const location_type* yylocationp) + { + *yycdebug_ << (yytype < yyntokens_ ? "token" : "nterm") + << ' ' << yytname_[yytype] << " (" + << *yylocationp << ": "; + yy_symbol_value_print_ (yytype, yyvaluep, yylocationp); + *yycdebug_ << ')'; + } +#endif + + void + FloatParser::yydestruct_ (const char* yymsg, + int yytype, semantic_type* yyvaluep, location_type* yylocationp) + { + YYUSE (yylocationp); + YYUSE (yymsg); + YYUSE (yyvaluep); + + if (yymsg) + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + switch (yytype) + { + case 4: /* "flt" */ +/* Line 455 of lalr1.cc */ +#line 78 "FloatParser.yy" + { delete ((*yyvaluep).pString); }; +/* Line 455 of lalr1.cc */ +#line 270 "FloatParser.cpp" + break; + case 12: /* constant */ +/* Line 455 of lalr1.cc */ +#line 79 "FloatParser.yy" + { delete ((*yyvaluep).pExprNode); }; +/* Line 455 of lalr1.cc */ +#line 277 "FloatParser.cpp" + break; + case 13: /* variable */ +/* Line 455 of lalr1.cc */ +#line 80 "FloatParser.yy" + { delete ((*yyvaluep).pExprNode); }; +/* Line 455 of lalr1.cc */ +#line 284 "FloatParser.cpp" + break; + case 14: /* atomexpr */ +/* Line 455 of lalr1.cc */ +#line 81 "FloatParser.yy" + { delete ((*yyvaluep).pExprNode); }; +/* Line 455 of lalr1.cc */ +#line 291 "FloatParser.cpp" + break; + case 15: /* unaryexpr */ +/* Line 455 of lalr1.cc */ +#line 82 "FloatParser.yy" + { delete ((*yyvaluep).pExprNode); }; +/* Line 455 of lalr1.cc */ +#line 298 "FloatParser.cpp" + break; + case 16: /* mulexpr */ +/* Line 455 of lalr1.cc */ +#line 83 "FloatParser.yy" + { delete ((*yyvaluep).pExprNode); }; +/* Line 455 of lalr1.cc */ +#line 305 "FloatParser.cpp" + break; + case 17: /* addexpr */ +/* Line 455 of lalr1.cc */ +#line 84 "FloatParser.yy" + { delete ((*yyvaluep).pExprNode); }; +/* Line 455 of lalr1.cc */ +#line 312 "FloatParser.cpp" + break; + case 18: /* expr */ +/* Line 455 of lalr1.cc */ +#line 85 "FloatParser.yy" + { delete ((*yyvaluep).pExprNode); }; +/* Line 455 of lalr1.cc */ +#line 319 "FloatParser.cpp" + break; + + default: + break; + } + } + + void + FloatParser::yypop_ (unsigned int n) + { + yystate_stack_.pop (n); + yysemantic_stack_.pop (n); + yylocation_stack_.pop (n); + } + +#if YYDEBUG + std::ostream& + FloatParser::debug_stream () const + { + return *yycdebug_; + } + + void + FloatParser::set_debug_stream (std::ostream& o) + { + yycdebug_ = &o; + } + + + FloatParser::debug_level_type + FloatParser::debug_level () const + { + return yydebug_; + } + + void + FloatParser::set_debug_level (debug_level_type l) + { + yydebug_ = l; + } +#endif + + inline bool + FloatParser::yy_pact_value_is_default_ (int yyvalue) + { + return yyvalue == yypact_ninf_; + } + + inline bool + FloatParser::yy_table_value_is_error_ (int yyvalue) + { + return yyvalue == yytable_ninf_; + } + + int + FloatParser::parse () + { + /// Lookahead and lookahead in internal form. + int yychar = yyempty_; + int yytoken = 0; + + // State. + int yyn; + int yylen = 0; + int yystate = 0; + + // Error handling. + int yynerrs_ = 0; + int yyerrstatus_ = 0; + + /// Semantic value of the lookahead. + static semantic_type yyval_default; + semantic_type yylval = yyval_default; + /// Location of the lookahead. + location_type yylloc; + /// The locations where the error started and ended. + location_type yyerror_range[3]; + + /// $$. + semantic_type yyval; + /// @$. + location_type yyloc; + + int yyresult; + + // FIXME: This shoud be completely indented. It is not yet to + // avoid gratuitous conflicts when merging into the master branch. + try + { + YYCDEBUG << "Starting parse" << std::endl; + + + /* Initialize the stacks. The initial state will be pushed in + yynewstate, since the latter expects the semantical and the + location values to have been already stored, initialize these + stacks with a primary value. */ + yystate_stack_ = state_stack_type (0); + yysemantic_stack_ = semantic_stack_type (0); + yylocation_stack_ = location_stack_type (0); + yysemantic_stack_.push (yylval); + yylocation_stack_.push (yylloc); + + /* New state. */ + yynewstate: + yystate_stack_.push (yystate); + YYCDEBUG << "Entering state " << yystate << std::endl; + + /* Accept? */ + if (yystate == yyfinal_) + goto yyacceptlab; + + goto yybackup; + + /* Backup. */ + yybackup: + + /* Try to take a decision without lookahead. */ + yyn = yypact_[yystate]; + if (yy_pact_value_is_default_ (yyn)) + goto yydefault; + + /* Read a lookahead token. */ + if (yychar == yyempty_) + { + YYCDEBUG << "Reading a token: "; + yychar = yylex (&yylval, &yylloc); + } + + /* Convert token to internal form. */ + if (yychar <= yyeof_) + { + yychar = yytoken = yyeof_; + YYCDEBUG << "Now at end of input." << std::endl; + } + else + { + yytoken = yytranslate_ (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yytoken) + goto yydefault; + + /* Reduce or error. */ + yyn = yytable_[yyn]; + if (yyn <= 0) + { + if (yy_table_value_is_error_ (yyn)) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + /* Shift the lookahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the token being shifted. */ + yychar = yyempty_; + + yysemantic_stack_.push (yylval); + yylocation_stack_.push (yylloc); + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus_) + --yyerrstatus_; + + yystate = yyn; + goto yynewstate; + + /*-----------------------------------------------------------. + | yydefault -- do the default action for the current state. | + `-----------------------------------------------------------*/ + yydefault: + yyn = yydefact_[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + /*-----------------------------. + | yyreduce -- Do a reduction. | + `-----------------------------*/ + yyreduce: + yylen = yyr2_[yyn]; + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. Otherwise, use the top of the stack. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. */ + if (yylen) + yyval = yysemantic_stack_[yylen - 1]; + else + yyval = yysemantic_stack_[0]; + + // Compute the default @$. + { + slice slice (yylocation_stack_, yylen); + YYLLOC_DEFAULT (yyloc, slice, yylen); + } + + // Perform the reduction. + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 2: +/* Line 670 of lalr1.cc */ +#line 105 "FloatParser.yy" + { + (yyval.pExprNode) = new FNConstant(evaluator.GetContext(), (yysemantic_stack_[(1) - (1)].doubleValue)); + } + break; + + case 3: +/* Line 670 of lalr1.cc */ +#line 110 "FloatParser.yy" + { + (yyval.pExprNode) = new FNFlt(evaluator.GetContext(), *(yysemantic_stack_[(1) - (1)].pString)); + delete (yysemantic_stack_[(1) - (1)].pString); + } + break; + + case 4: +/* Line 670 of lalr1.cc */ +#line 116 "FloatParser.yy" + { + (yyval.pExprNode) = (yysemantic_stack_[(1) - (1)].pExprNode); + } + break; + + case 5: +/* Line 670 of lalr1.cc */ +#line 120 "FloatParser.yy" + { + (yyval.pExprNode) = (yysemantic_stack_[(1) - (1)].pExprNode); + } + break; + + case 6: +/* Line 670 of lalr1.cc */ +#line 124 "FloatParser.yy" + { + (yyval.pExprNode) = (yysemantic_stack_[(3) - (2)].pExprNode); + } + break; + + case 7: +/* Line 670 of lalr1.cc */ +#line 129 "FloatParser.yy" + { + (yyval.pExprNode) = (yysemantic_stack_[(1) - (1)].pExprNode); + } + break; + + case 8: +/* Line 670 of lalr1.cc */ +#line 133 "FloatParser.yy" + { + (yyval.pExprNode) = (yysemantic_stack_[(2) - (2)].pExprNode); + } + break; + + case 9: +/* Line 670 of lalr1.cc */ +#line 137 "FloatParser.yy" + { + (yyval.pExprNode) = new FNNegate(evaluator.GetContext(), (yysemantic_stack_[(2) - (2)].pExprNode)); + } + break; + + case 10: +/* Line 670 of lalr1.cc */ +#line 142 "FloatParser.yy" + { + (yyval.pExprNode) = (yysemantic_stack_[(1) - (1)].pExprNode); + } + break; + + case 11: +/* Line 670 of lalr1.cc */ +#line 146 "FloatParser.yy" + { + (yyval.pExprNode) = new FNMultiply(evaluator.GetContext(), (yysemantic_stack_[(3) - (1)].pExprNode), (yysemantic_stack_[(3) - (3)].pExprNode)); + } + break; + + case 12: +/* Line 670 of lalr1.cc */ +#line 150 "FloatParser.yy" + { + (yyval.pExprNode) = new FNDivide(evaluator.GetContext(), (yysemantic_stack_[(3) - (1)].pExprNode), (yysemantic_stack_[(3) - (3)].pExprNode)); + } + break; + + case 13: +/* Line 670 of lalr1.cc */ +#line 155 "FloatParser.yy" + { + (yyval.pExprNode) = (yysemantic_stack_[(1) - (1)].pExprNode); + } + break; + + case 14: +/* Line 670 of lalr1.cc */ +#line 159 "FloatParser.yy" + { + (yyval.pExprNode) = new FNAdd(evaluator.GetContext(), (yysemantic_stack_[(3) - (1)].pExprNode), (yysemantic_stack_[(3) - (3)].pExprNode)); + } + break; + + case 15: +/* Line 670 of lalr1.cc */ +#line 163 "FloatParser.yy" + { + (yyval.pExprNode) = new FNSubtract(evaluator.GetContext(), (yysemantic_stack_[(3) - (1)].pExprNode), (yysemantic_stack_[(3) - (3)].pExprNode)); + } + break; + + case 16: +/* Line 670 of lalr1.cc */ +#line 168 "FloatParser.yy" + { + (yyval.pExprNode) = (yysemantic_stack_[(1) - (1)].pExprNode); + } + break; + + case 18: +/* Line 670 of lalr1.cc */ +#line 175 "FloatParser.yy" + { + evaluator.GetContext().SetExpression((yysemantic_stack_[(3) - (2)].pExprNode)); + } + break; + + +/* Line 670 of lalr1.cc */ +#line 659 "FloatParser.cpp" + default: + break; + } + + /* User semantic actions sometimes alter yychar, and that requires + that yytoken be updated with the new translation. We take the + approach of translating immediately before every use of yytoken. + One alternative is translating here after every semantic action, + but that translation would be missed if the semantic action + invokes YYABORT, YYACCEPT, or YYERROR immediately after altering + yychar. In the case of YYABORT or YYACCEPT, an incorrect + destructor might then be invoked immediately. In the case of + YYERROR, subsequent parser actions might lead to an incorrect + destructor call or verbose syntax error message before the + lookahead is translated. */ + YY_SYMBOL_PRINT ("-> $$ =", yyr1_[yyn], &yyval, &yyloc); + + yypop_ (yylen); + yylen = 0; + YY_STACK_PRINT (); + + yysemantic_stack_.push (yyval); + yylocation_stack_.push (yyloc); + + /* Shift the result of the reduction. */ + yyn = yyr1_[yyn]; + yystate = yypgoto_[yyn - yyntokens_] + yystate_stack_[0]; + if (0 <= yystate && yystate <= yylast_ + && yycheck_[yystate] == yystate_stack_[0]) + yystate = yytable_[yystate]; + else + yystate = yydefgoto_[yyn - yyntokens_]; + goto yynewstate; + + /*------------------------------------. + | yyerrlab -- here on detecting error | + `------------------------------------*/ + yyerrlab: + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = yytranslate_ (yychar); + + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus_) + { + ++yynerrs_; + if (yychar == yyempty_) + yytoken = yyempty_; + error (yylloc, yysyntax_error_ (yystate, yytoken)); + } + + yyerror_range[1] = yylloc; + if (yyerrstatus_ == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + if (yychar <= yyeof_) + { + /* Return failure if at end of input. */ + if (yychar == yyeof_) + YYABORT; + } + else + { + yydestruct_ ("Error: discarding", yytoken, &yylval, &yylloc); + yychar = yyempty_; + } + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto yyerrlab1; + + + /*---------------------------------------------------. + | yyerrorlab -- error raised explicitly by YYERROR. | + `---------------------------------------------------*/ + yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (false) + goto yyerrorlab; + + yyerror_range[1] = yylocation_stack_[yylen - 1]; + /* Do not reclaim the symbols of the rule which action triggered + this YYERROR. */ + yypop_ (yylen); + yylen = 0; + yystate = yystate_stack_[0]; + goto yyerrlab1; + + /*-------------------------------------------------------------. + | yyerrlab1 -- common code for both syntax error and YYERROR. | + `-------------------------------------------------------------*/ + yyerrlab1: + yyerrstatus_ = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact_[yystate]; + if (!yy_pact_value_is_default_ (yyn)) + { + yyn += yyterror_; + if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_) + { + yyn = yytable_[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yystate_stack_.height () == 1) + YYABORT; + + yyerror_range[1] = yylocation_stack_[0]; + yydestruct_ ("Error: popping", + yystos_[yystate], + &yysemantic_stack_[0], &yylocation_stack_[0]); + yypop_ (); + yystate = yystate_stack_[0]; + YY_STACK_PRINT (); + } + + yyerror_range[2] = yylloc; + // Using YYLLOC is tempting, but would change the location of + // the lookahead. YYLOC is available though. + YYLLOC_DEFAULT (yyloc, yyerror_range, 2); + yysemantic_stack_.push (yylval); + yylocation_stack_.push (yyloc); + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos_[yyn], + &yysemantic_stack_[0], &yylocation_stack_[0]); + + yystate = yyn; + goto yynewstate; + + /* Accept. */ + yyacceptlab: + yyresult = 0; + goto yyreturn; + + /* Abort. */ + yyabortlab: + yyresult = 1; + goto yyreturn; + + yyreturn: + if (yychar != yyempty_) + { + /* Make sure we have latest lookahead translation. See comments + at user semantic actions for why this is necessary. */ + yytoken = yytranslate_ (yychar); + yydestruct_ ("Cleanup: discarding lookahead", yytoken, &yylval, + &yylloc); + } + + /* Do not reclaim the symbols of the rule which action triggered + this YYABORT or YYACCEPT. */ + yypop_ (yylen); + while (1 < yystate_stack_.height ()) + { + yydestruct_ ("Cleanup: popping", + yystos_[yystate_stack_[0]], + &yysemantic_stack_[0], + &yylocation_stack_[0]); + yypop_ (); + } + + return yyresult; + } + catch (...) + { + YYCDEBUG << "Exception caught: cleaning lookahead and stack" + << std::endl; + // Do not try to display the values of the reclaimed symbols, + // as their printer might throw an exception. + if (yychar != yyempty_) + { + /* Make sure we have latest lookahead translation. See + comments at user semantic actions for why this is + necessary. */ + yytoken = yytranslate_ (yychar); + yydestruct_ (YY_NULL, yytoken, &yylval, &yylloc); + } + + while (1 < yystate_stack_.height ()) + { + yydestruct_ (YY_NULL, + yystos_[yystate_stack_[0]], + &yysemantic_stack_[0], + &yylocation_stack_[0]); + yypop_ (); + } + throw; + } + } + + // Generate an error message. + std::string + FloatParser::yysyntax_error_ (int yystate, int yytoken) + { + std::string yyres; + // Number of reported tokens (one for the "unexpected", one per + // "expected"). + size_t yycount = 0; + // Its maximum. + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + // Arguments of yyformat. + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + + /* There are many possibilities here to consider: + - If this state is a consistent state with a default action, then + the only way this function was invoked is if the default action + is an error action. In that case, don't check for expected + tokens because there are none. + - The only way there can be no lookahead present (in yytoken) is + if this state is a consistent state with a default action. + Thus, detecting the absence of a lookahead is sufficient to + determine that there is no unexpected or expected token to + report. In that case, just report a simple "syntax error". + - Don't assume there isn't a lookahead just because this state is + a consistent state with a default action. There might have + been a previous inconsistent state, consistent state with a + non-default action, or user semantic action that manipulated + yychar. + - Of course, the expected token list depends on states to have + correct lookahead information, and it depends on the parser not + to perform extra reductions after fetching a lookahead from the + scanner and before detecting a syntax error. Thus, state + merging (from LALR or IELR) and default reductions corrupt the + expected token list. However, the list is correct for + canonical LR with one exception: it will still contain any + token that will not be accepted due to an error action in a + later state. + */ + if (yytoken != yyempty_) + { + yyarg[yycount++] = yytname_[yytoken]; + int yyn = yypact_[yystate]; + if (!yy_pact_value_is_default_ (yyn)) + { + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. In other words, skip the first -YYN actions for + this state because they are default actions. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = yylast_ - yyn + 1; + int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_; + for (int yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck_[yyx + yyn] == yyx && yyx != yyterror_ + && !yy_table_value_is_error_ (yytable_[yyx + yyn])) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + break; + } + else + yyarg[yycount++] = yytname_[yyx]; + } + } + } + + char const* yyformat = YY_NULL; + switch (yycount) + { +#define YYCASE_(N, S) \ + case N: \ + yyformat = S; \ + break + YYCASE_(0, YY_("syntax error")); + YYCASE_(1, YY_("syntax error, unexpected %s")); + YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); + YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); + YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); + YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); +#undef YYCASE_ + } + + // Argument number. + size_t yyi = 0; + for (char const* yyp = yyformat; *yyp; ++yyp) + if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount) + { + yyres += yytnamerr_ (yyarg[yyi++]); + ++yyp; + } + else + yyres += *yyp; + return yyres; + } + + + /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ + const signed char FloatParser::yypact_ninf_ = -9; + const signed char + FloatParser::yypact_[] = + { + -9, 0, -9, -9, -9, 6, 12, 12, -9, -9, + -9, -9, -8, 11, 24, 21, -9, -9, 6, 6, + 6, 6, -9, -9, -9, -9, -8, -8 + }; + + /* YYDEFACT[S] -- default reduction number in state S. Performed when + YYTABLE doesn't specify something else to do. Zero means the + default is an error. */ + const unsigned char + FloatParser::yydefact_[] = + { + 17, 0, 1, 2, 3, 0, 0, 0, 4, 5, + 7, 10, 13, 16, 0, 0, 8, 9, 0, 0, + 0, 0, 18, 6, 11, 12, 14, 15 + }; + + /* YYPGOTO[NTERM-NUM]. */ + const signed char + FloatParser::yypgoto_[] = + { + -9, -9, -9, 14, 4, 5, -9, 1, -9 + }; + + /* YYDEFGOTO[NTERM-NUM]. */ + const signed char + FloatParser::yydefgoto_[] = + { + -1, 8, 9, 10, 11, 12, 13, 14, 1 + }; + + /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If YYTABLE_NINF_, syntax error. */ + const signed char FloatParser::yytable_ninf_ = -1; + const unsigned char + FloatParser::yytable_[] = + { + 2, 18, 19, 3, 4, 5, 15, 6, 7, 3, + 4, 5, 0, 6, 7, 3, 4, 5, 20, 21, + 16, 17, 24, 25, 22, 26, 27, 23 + }; + + /* YYCHECK. */ + const signed char + FloatParser::yycheck_[] = + { + 0, 9, 10, 3, 4, 5, 5, 7, 8, 3, + 4, 5, -1, 7, 8, 3, 4, 5, 7, 8, + 6, 7, 18, 19, 0, 20, 21, 6 + }; + + /* STOS_[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ + const unsigned char + FloatParser::yystos_[] = + { + 0, 19, 0, 3, 4, 5, 7, 8, 12, 13, + 14, 15, 16, 17, 18, 18, 14, 14, 9, 10, + 7, 8, 0, 6, 15, 15, 16, 16 + }; + +#if YYDEBUG + /* TOKEN_NUMBER_[YYLEX-NUM] -- Internal symbol number corresponding + to YYLEX-NUM. */ + const unsigned short int + FloatParser::yytoken_number_[] = + { + 0, 256, 257, 258, 259, 40, 41, 43, 45, 42, + 47 + }; +#endif + + /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ + const unsigned char + FloatParser::yyr1_[] = + { + 0, 11, 12, 13, 14, 14, 14, 15, 15, 15, + 16, 16, 16, 17, 17, 17, 18, 19, 19 + }; + + /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ + const unsigned char + FloatParser::yyr2_[] = + { + 0, 2, 1, 1, 1, 1, 3, 1, 2, 2, + 1, 3, 3, 1, 3, 3, 1, 0, 3 + }; + + + /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at \a yyntokens_, nonterminals. */ + const char* + const FloatParser::yytname_[] = + { + "\"end of stream\"", "error", "$undefined", "\"Double\"", "\"flt\"", + "'('", "')'", "'+'", "'-'", "'*'", "'/'", "$accept", "constant", + "variable", "atomexpr", "unaryexpr", "mulexpr", "addexpr", "expr", + "start", YY_NULL + }; + +#if YYDEBUG + /* YYRHS -- A `-1'-separated list of the rules' RHS. */ + const FloatParser::rhs_number_type + FloatParser::yyrhs_[] = + { + 19, 0, -1, 3, -1, 4, -1, 12, -1, 13, + -1, 5, 18, 6, -1, 14, -1, 7, 14, -1, + 8, 14, -1, 15, -1, 16, 9, 15, -1, 16, + 10, 15, -1, 16, -1, 17, 7, 16, -1, 17, + 8, 16, -1, 17, -1, -1, 19, 18, 0, -1 + }; + + /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ + const unsigned char + FloatParser::yyprhs_[] = + { + 0, 0, 3, 5, 7, 9, 11, 15, 17, 20, + 23, 25, 29, 33, 35, 39, 43, 45, 46 + }; + + /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ + const unsigned char + FloatParser::yyrline_[] = + { + 0, 104, 104, 109, 115, 119, 123, 128, 132, 136, + 141, 145, 149, 154, 158, 162, 167, 173, 174 + }; + + // Print the state stack on the debug stream. + void + FloatParser::yystack_print_ () + { + *yycdebug_ << "Stack now"; + for (state_stack_type::const_iterator i = yystate_stack_.begin (); + i != yystate_stack_.end (); ++i) + *yycdebug_ << ' ' << *i; + *yycdebug_ << std::endl; + } + + // Report on the debug stream that the rule \a yyrule is going to be reduced. + void + FloatParser::yy_reduce_print_ (int yyrule) + { + unsigned int yylno = yyrline_[yyrule]; + int yynrhs = yyr2_[yyrule]; + /* Print the symbols being reduced, and their result. */ + *yycdebug_ << "Reducing stack by rule " << yyrule - 1 + << " (line " << yylno << "):" << std::endl; + /* The symbols being reduced. */ + for (int yyi = 0; yyi < yynrhs; yyi++) + YY_SYMBOL_PRINT (" $" << yyi + 1 << " =", + yyrhs_[yyprhs_[yyrule] + yyi], + &(yysemantic_stack_[(yynrhs) - (yyi + 1)]), + &(yylocation_stack_[(yynrhs) - (yyi + 1)])); + } +#endif // YYDEBUG + + /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ + FloatParser::token_number_type + FloatParser::yytranslate_ (int t) + { + static + const token_number_type + translate_table[] = + { + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 5, 6, 9, 7, 2, 8, 2, 10, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4 + }; + if ((unsigned int) t <= yyuser_token_number_max_) + return translate_table[t]; + else + return yyundef_token_; + } + + const int FloatParser::yyeof_ = 0; + const int FloatParser::yylast_ = 27; + const int FloatParser::yynnts_ = 9; + const int FloatParser::yyempty_ = -2; + const int FloatParser::yyfinal_ = 2; + const int FloatParser::yyterror_ = 1; + const int FloatParser::yyerrcode_ = 256; + const int FloatParser::yyntokens_ = 11; + + const unsigned int FloatParser::yyuser_token_number_max_ = 259; + const FloatParser::token_number_type FloatParser::yyundef_token_ = 2; + + +} // PARSER +/* Line 1141 of lalr1.cc */ +#line 1177 "FloatParser.cpp" +/* Line 1142 of lalr1.cc */ +#line 179 "FloatParser.yy" + /*** Additional Code ***/ + +void PARSER::FloatParser::error(const FloatParser::location_type& l, + const std::string& m) +{ + std::cout << "Error: " << m << '\n'; +} diff --git a/sources/parsers/auto/FloatParser.hpp b/sources/parsers/auto/FloatParser.hpp new file mode 100644 index 0000000..94a63ab --- /dev/null +++ b/sources/parsers/auto/FloatParser.hpp @@ -0,0 +1,273 @@ +/* A Bison parser, made by GNU Bison 2.7. */ + +/* Skeleton interface for Bison LALR(1) parsers in C++ + + Copyright (C) 2002-2012 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/** + ** \file FloatParser.hpp + ** Define the PARSER::parser class. + */ + +/* C++ LALR(1) parser skeleton written by Akim Demaille. */ + +#ifndef YY_PARSER_FLOATPARSER_HPP_INCLUDED +# define YY_PARSER_FLOATPARSER_HPP_INCLUDED + + + +#include +#include +#include "stack.hh" +#include "location.hh" + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + + +namespace PARSER { +/* Line 33 of lalr1.cc */ +#line 59 "FloatParser.hpp" + + /// A Bison parser. + class FloatParser + { + public: + /// Symbol semantic values. +#ifndef YYSTYPE + union semantic_type + { +/* Line 33 of lalr1.cc */ +#line 66 "FloatParser.yy" + + double doubleValue; + std::string* pString; + class PARSER::ExpressionNode* pExprNode; + + +/* Line 33 of lalr1.cc */ +#line 78 "FloatParser.hpp" + }; +#else + typedef YYSTYPE semantic_type; +#endif + /// Symbol locations. + typedef location location_type; + /// Tokens. + struct token + { + /* Tokens. */ + enum yytokentype { + END = 0, + DOUBLE = 258, + FLT = 259 + }; + + }; + /// Token type. + typedef token::yytokentype token_type; + + /// Build a parser object. + FloatParser (class Evaluator& evaluator_yyarg); + virtual ~FloatParser (); + + /// Parse. + /// \returns 0 iff parsing succeeded. + virtual int parse (); + +#if YYDEBUG + /// The current debugging stream. + std::ostream& debug_stream () const; + /// Set the current debugging stream. + void set_debug_stream (std::ostream &); + + /// Type for debugging levels. + typedef int debug_level_type; + /// The current debugging level. + debug_level_type debug_level () const; + /// Set the current debugging level. + void set_debug_level (debug_level_type l); +#endif + + private: + /// Report a syntax error. + /// \param loc where the syntax error is found. + /// \param msg a description of the syntax error. + virtual void error (const location_type& loc, const std::string& msg); + + /// Generate an error message. + /// \param state the state where the error occurred. + /// \param tok the lookahead token. + virtual std::string yysyntax_error_ (int yystate, int tok); + +#if YYDEBUG + /// \brief Report a symbol value on the debug stream. + /// \param yytype The token type. + /// \param yyvaluep Its semantic value. + /// \param yylocationp Its location. + virtual void yy_symbol_value_print_ (int yytype, + const semantic_type* yyvaluep, + const location_type* yylocationp); + /// \brief Report a symbol on the debug stream. + /// \param yytype The token type. + /// \param yyvaluep Its semantic value. + /// \param yylocationp Its location. + virtual void yy_symbol_print_ (int yytype, + const semantic_type* yyvaluep, + const location_type* yylocationp); +#endif + + + /// State numbers. + typedef int state_type; + /// State stack type. + typedef stack state_stack_type; + /// Semantic value stack type. + typedef stack semantic_stack_type; + /// location stack type. + typedef stack location_stack_type; + + /// The state stack. + state_stack_type yystate_stack_; + /// The semantic value stack. + semantic_stack_type yysemantic_stack_; + /// The location stack. + location_stack_type yylocation_stack_; + + /// Whether the given \c yypact_ value indicates a defaulted state. + /// \param yyvalue the value to check + static bool yy_pact_value_is_default_ (int yyvalue); + + /// Whether the given \c yytable_ value indicates a syntax error. + /// \param yyvalue the value to check + static bool yy_table_value_is_error_ (int yyvalue); + + /// Internal symbol numbers. + typedef unsigned char token_number_type; + /* Tables. */ + /// For a state, the index in \a yytable_ of its portion. + static const signed char yypact_[]; + static const signed char yypact_ninf_; + + /// For a state, default reduction number. + /// Unless\a yytable_ specifies something else to do. + /// Zero means the default is an error. + static const unsigned char yydefact_[]; + + static const signed char yypgoto_[]; + static const signed char yydefgoto_[]; + + /// What to do in a state. + /// \a yytable_[yypact_[s]]: what to do in state \a s. + /// - if positive, shift that token. + /// - if negative, reduce the rule which number is the opposite. + /// - if zero, do what YYDEFACT says. + static const unsigned char yytable_[]; + static const signed char yytable_ninf_; + + static const signed char yycheck_[]; + + /// For a state, its accessing symbol. + static const unsigned char yystos_[]; + + /// For a rule, its LHS. + static const unsigned char yyr1_[]; + /// For a rule, its RHS length. + static const unsigned char yyr2_[]; + + /// Convert the symbol name \a n to a form suitable for a diagnostic. + static std::string yytnamerr_ (const char *n); + + + /// For a symbol, its name in clear. + static const char* const yytname_[]; +#if YYDEBUG + /// A type to store symbol numbers and -1. + typedef signed char rhs_number_type; + /// A `-1'-separated list of the rules' RHS. + static const rhs_number_type yyrhs_[]; + /// For each rule, the index of the first RHS symbol in \a yyrhs_. + static const unsigned char yyprhs_[]; + /// For each rule, its source line number. + static const unsigned char yyrline_[]; + /// For each scanner token number, its symbol number. + static const unsigned short int yytoken_number_[]; + /// Report on the debug stream that the rule \a r is going to be reduced. + virtual void yy_reduce_print_ (int r); + /// Print the state stack on the debug stream. + virtual void yystack_print_ (); + + /* Debugging. */ + int yydebug_; + std::ostream* yycdebug_; +#endif + + /// Convert a scanner token number \a t to a symbol number. + token_number_type yytranslate_ (int t); + + /// \brief Reclaim the memory associated to a symbol. + /// \param yymsg Why this token is reclaimed. + /// If null, do not display the symbol, just free it. + /// \param yytype The symbol type. + /// \param yyvaluep Its semantic value. + /// \param yylocationp Its location. + inline void yydestruct_ (const char* yymsg, + int yytype, + semantic_type* yyvaluep, + location_type* yylocationp); + + /// Pop \a n symbols the three stacks. + inline void yypop_ (unsigned int n = 1); + + /* Constants. */ + static const int yyeof_; + /* LAST_ -- Last index in TABLE_. */ + static const int yylast_; + static const int yynnts_; + static const int yyempty_; + static const int yyfinal_; + static const int yyterror_; + static const int yyerrcode_; + static const int yyntokens_; + static const unsigned int yyuser_token_number_max_; + static const token_number_type yyundef_token_; + + /* User arguments. */ + class Evaluator& evaluator; + }; + +} // PARSER +/* Line 33 of lalr1.cc */ +#line 270 "FloatParser.hpp" + + + +#endif /* !YY_PARSER_FLOATPARSER_HPP_INCLUDED */ diff --git a/sources/parsers/auto/FloatScanner.cpp b/sources/parsers/auto/FloatScanner.cpp new file mode 100644 index 0000000..4b50464 --- /dev/null +++ b/sources/parsers/auto/FloatScanner.cpp @@ -0,0 +1,2048 @@ +#line 1 "FloatScanner.cpp" + +#line 3 "FloatScanner.cpp" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 6 +#define YY_FLEX_SUBMINOR_VERSION 4 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + + /* The c++ scanner is a mess. The FlexLexer.h header file relies on the + * following macro. This is required in order to pass the c++-multiple-scanners + * test in the regression suite. We get reports that it breaks inheritance. + * We will address this in a future release of flex, or omit the C++ scanner + * altogether. + */ + #define yyFlexLexer FloatFlexLexer + +#ifdef yyalloc +#define Floatalloc_ALREADY_DEFINED +#else +#define yyalloc Floatalloc +#endif + +#ifdef yyrealloc +#define Floatrealloc_ALREADY_DEFINED +#else +#define yyrealloc Floatrealloc +#endif + +#ifdef yyfree +#define Floatfree_ALREADY_DEFINED +#else +#define yyfree Floatfree +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#ifndef SIZE_MAX +#define SIZE_MAX (~(size_t)0) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +/* begin standard C++ headers. */ +#include +#include +#include +#include +#include +/* end standard C++ headers. */ + +/* TODO: this is always defined, so inline it */ +#define yyconst const + +#if defined(__GNUC__) && __GNUC__ >= 3 +#define yynoreturn __attribute__((__noreturn__)) +#else +#define yynoreturn +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an + * integer in range [0..255] for use as an array index. + */ +#define YY_SC_TO_UI(c) ((YY_CHAR) (c)) + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN (yy_start) = 1 + 2 * +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START (((yy_start) - 1) / 2) +#define YYSTATE YY_START +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE yyrestart( yyin ) +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else +#define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +extern int yyleng; + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + #define YY_LINENO_REWIND_TO(ptr) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = (yy_hold_char); \ + YY_RESTORE_YY_MORE_OFFSET \ + (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) +#define unput(c) yyunput( c, (yytext_ptr) ) + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + + std::streambuf* yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + int yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ + ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ + : NULL) +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] + +void *yyalloc ( yy_size_t ); +void *yyrealloc ( void *, yy_size_t ); +void yyfree ( void * ); + +#define yy_new_buffer yy_create_buffer +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ +typedef flex_uint8_t YY_CHAR; + +#define yytext_ptr yytext + +#include + +static const flex_int16_t yy_nxt[][128] = + { + { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 + }, + + { + 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, + 6, 4, 4, 5, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 7, 4, 4, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 9, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4 + }, + + { + 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, + 6, 4, 4, 5, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, + + 4, 4, 4, 4, 4, 7, 4, 4, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 9, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4 + }, + + { + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3 + }, + + { + 3, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4 + }, + + { + 3, -5, -5, -5, -5, -5, -5, -5, -5, 10, + -5, -5, -5, 10, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + -5, -5, 10, -5, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5 + }, + + { + 3, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + + -6, -6, -6, -6, -6, -6, -6, -6 + }, + + { + 3, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, 11, -7, -7, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7 + }, + + { + 3, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, 13, -8, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, -8, -8, + + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8 + }, + + { + 3, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, 15, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9 + + }, + + { + 3, -10, -10, -10, -10, -10, -10, -10, -10, 10, + -10, -10, -10, 10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, 10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10 + }, + + { + 3, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, 11, -11, -11, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11 + }, + + { + 3, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + + -12, -12, -12, -12, -12, -12, 13, -12, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12 + }, + + { + 3, -13, -13, -13, -13, -13, -13, -13, -13, -13, + + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, 13, -13, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13 + }, + + { + 3, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, 13, -14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14 + }, + + { + 3, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, 17, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15 + }, + + { + 3, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + + -16, -16, -16, -16, -16, -16, -16, -16 + }, + + { + 3, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + 18, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17 + }, + + { + 3, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, 19, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, -18, -18, + + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18 + }, + + { + 3, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + + -19, -19, 19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19 + + }, + + { + 3, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, 21, -20, -20, -20, -20, -20, -20, -20, + -20, 22, -20, -20, -20, -20, -20, -20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20 + }, + + { + 3, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, 21, -21, -21, -21, -21, -21, -21, -21, + -21, 22, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21 + }, + + { + 3, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22 + }, + + } ; + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + (yytext_ptr) = yy_bp; \ + yyleng = (int) (yy_cp - yy_bp); \ + (yy_hold_char) = *yy_cp; \ + *yy_cp = '\0'; \ + (yy_c_buf_p) = yy_cp; +#define YY_NUM_RULES 5 +#define YY_END_OF_BUFFER 6 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static const flex_int16_t yy_accept[23] = + { 0, + 0, 0, 6, 4, 3, 5, 4, 1, 4, 3, + 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, + 0, 2 + } ; + +static const yy_state_type yy_NUL_trans[23] = + { 0, + 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0 + } ; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +#line 1 "FloatScanner.ll" +/** Define the float expression Flex lexical scanner. + + Copyright (c) 2018 vcdMaker team + 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. +*/ +#line 24 "FloatScanner.ll" + +#include "FloatNode.h" +#include "FloatScanner.h" + +/* Import the parser's token type into a local typedef. */ +typedef PARSER::FloatParser::token token; +typedef PARSER::FloatParser::token_type token_type; + +/* By default yylex returns int, we use token_type. Unfortunately yyterminate + * by default returns 0, which is not of token_type. */ +#define yyterminate() return token::END + +/* This disables inclusion of unistd.h, which is not available under Visual C++ + * on Win32. The C++ scanner uses STL streams instead. */ +#define YY_NO_UNISTD_H + +#line 801 "FloatScanner.cpp" +/*** Flex Declarations and Options ***/ +/* Enable c++ scanner class generation. */ +/* Change the name of the scanner class. Results in "FloatFlexLexer". */ +/* The manual says "somewhat more optimized". */ +/* Enable scanner to generate debug output. disable this for release versions. */ +/* %option debug */ +/* No support for include files is planned. */ +/* Let the scanner be fast. */ +/* The following paragraph suffices to track locations accurately. Each time + * yylex is invoked, the begin position is moved onto the end position. */ +#line 65 "FloatScanner.ll" +#define YY_USER_ACTION yylloc->columns(yyleng); +#line 814 "FloatScanner.cpp" +#line 815 "FloatScanner.cpp" + +#define INITIAL 0 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy ( char *, const char *, int ); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen ( const char * ); +#endif + +#ifndef YY_NO_INPUT + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else +#define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +#define ECHO LexerOutput( yytext, yyleng ) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ +\ + if ( (int)(result = LexerInput( (char *) buf, max_size )) < 0 ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) LexerError( msg ) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 +#define YY_DECL int yyFlexLexer::yylex() +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK /*LINTED*/break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + yy_state_type yy_current_state; + char *yy_cp, *yy_bp; + int yy_act; + + if ( !(yy_init) ) + { + (yy_init) = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! (yy_start) ) + (yy_start) = 1; /* first start state */ + + if ( ! yyin ) + yyin.rdbuf(std::cin.rdbuf()); + + if ( ! yyout ) + yyout.rdbuf(std::cout.rdbuf()); + + if ( ! YY_CURRENT_BUFFER ) { + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE ); + } + + yy_load_buffer_state( ); + } + + { +#line 68 "FloatScanner.ll" + + +#line 71 "FloatScanner.ll" + /* Code to place at the beginning of yylex(). */ + + // reset location + yylloc->step(); + + + /*** Lexer rules ***/ + +#line 959 "FloatScanner.cpp" + + while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ + { + yy_cp = (yy_c_buf_p); + + /* Support of yytext. */ + *yy_cp = (yy_hold_char); + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = (yy_start); +yy_match: + while ( (yy_current_state = yy_nxt[yy_current_state][ YY_SC_TO_UI(*yy_cp) ]) > 0 ) + { + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + + ++yy_cp; + } + + yy_current_state = -yy_current_state; + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = (yy_hold_char); + yy_cp = (yy_last_accepting_cpos) + 1; + yy_current_state = (yy_last_accepting_state); + goto yy_find_action; + +case 1: +YY_RULE_SETUP +#line 79 "FloatScanner.ll" +{ + yylval->doubleValue = std::stod(yytext, NULL); + return token::DOUBLE; +} + YY_BREAK +case 2: +YY_RULE_SETUP +#line 84 "FloatScanner.ll" +{ + yylval->pString = new std::string(yytext, yyleng); + return token::FLT; +} + YY_BREAK +/* gobble up white-spaces */ +case 3: +YY_RULE_SETUP +#line 90 "FloatScanner.ll" +{ + yylloc->step(); +} + YY_BREAK +/* pass all other characters up to bison */ +case 4: +YY_RULE_SETUP +#line 95 "FloatScanner.ll" +{ + return static_cast(*yytext); +} + YY_BREAK +/*** End of lexer rules ***/ +case 5: +YY_RULE_SETUP +#line 101 "FloatScanner.ll" +ECHO; + YY_BREAK +#line 1042 "FloatScanner.cpp" +case YY_STATE_EOF(INITIAL): + yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = (yy_hold_char); + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin.rdbuf(); + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state ); + + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++(yy_c_buf_p); + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = (yy_c_buf_p); + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_END_OF_FILE: + { + (yy_did_buffer_switch_on_eof) = 0; + + if ( yywrap( ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = + (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + (yy_c_buf_p) = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ + } /* end of user's declarations */ +} /* end of yylex */ + +/* The contents of this function are C++ specific, so the () macro is not used. + * This constructor simply maintains backward compatibility. + * DEPRECATED + */ +yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout ): + yyin(arg_yyin ? arg_yyin->rdbuf() : std::cin.rdbuf()), + yyout(arg_yyout ? arg_yyout->rdbuf() : std::cout.rdbuf()) +{ + ctor_common(); +} + +/* The contents of this function are C++ specific, so the () macro is not used. + */ +yyFlexLexer::yyFlexLexer( std::istream& arg_yyin, std::ostream& arg_yyout ): + yyin(arg_yyin.rdbuf()), + yyout(arg_yyout.rdbuf()) +{ + ctor_common(); +} + +/* The contents of this function are C++ specific, so the () macro is not used. + */ +void yyFlexLexer::ctor_common() +{ + yy_c_buf_p = 0; + yy_init = 0; + yy_start = 0; + yy_flex_debug = 0; + yylineno = 1; // this will only get updated if %option yylineno + + yy_did_buffer_switch_on_eof = 0; + + yy_looking_for_trail_begin = 0; + yy_more_flag = 0; + yy_more_len = 0; + yy_more_offset = yy_prev_more_offset = 0; + + yy_start_stack_ptr = yy_start_stack_depth = 0; + yy_start_stack = NULL; + + yy_buffer_stack = NULL; + yy_buffer_stack_top = 0; + yy_buffer_stack_max = 0; + + yy_state_buf = 0; + +} + +/* The contents of this function are C++ specific, so the () macro is not used. + */ +yyFlexLexer::~yyFlexLexer() +{ + delete [] yy_state_buf; + yyfree( yy_start_stack ); + yy_delete_buffer( YY_CURRENT_BUFFER ); + yyfree( yy_buffer_stack ); +} + +/* The contents of this function are C++ specific, so the () macro is not used. + */ +void yyFlexLexer::switch_streams( std::istream& new_in, std::ostream& new_out ) +{ + // was if( new_in ) + yy_delete_buffer( YY_CURRENT_BUFFER ); + yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE ) ); + + // was if( new_out ) + yyout.rdbuf(new_out.rdbuf()); +} + +/* The contents of this function are C++ specific, so the () macro is not used. + */ +void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out ) +{ + if( ! new_in ) { + new_in = &yyin; + } + + if ( ! new_out ) { + new_out = &yyout; + } + + switch_streams(*new_in, *new_out); +} + +#ifdef YY_INTERACTIVE +int yyFlexLexer::LexerInput( char* buf, int /* max_size */ ) +#else +int yyFlexLexer::LexerInput( char* buf, int max_size ) +#endif +{ + if ( yyin.eof() || yyin.fail() ) + return 0; + +#ifdef YY_INTERACTIVE + yyin.get( buf[0] ); + + if ( yyin.eof() ) + return 0; + + if ( yyin.bad() ) + return -1; + + return 1; + +#else + (void) yyin.read( buf, max_size ); + + if ( yyin.bad() ) + return -1; + else + return yyin.gcount(); +#endif +} + +void yyFlexLexer::LexerOutput( const char* buf, int size ) +{ + (void) yyout.write( buf, size ); +} + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +int yyFlexLexer::yy_get_next_buffer() +{ + char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + char *source = (yytext_ptr); + int number_to_move, i; + int ret_val; + + if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1); + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; + + int yy_c_buf_p_offset = + (int) ((yy_c_buf_p) - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + yyrealloc( (void *) b->yy_ch_buf, + (yy_size_t) (b->yy_buf_size + 2) ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = NULL; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + (yy_n_chars), num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + if ( (yy_n_chars) == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + yyrestart( yyin ); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( + (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + /* "- 2" to take care of EOB's */ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); + } + + (yy_n_chars) += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; + + (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + yy_state_type yyFlexLexer::yy_get_previous_state() +{ + yy_state_type yy_current_state; + char *yy_cp; + + yy_current_state = (yy_start); + + for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) + { + if ( *yy_cp ) + { + yy_current_state = yy_nxt[yy_current_state][YY_SC_TO_UI(*yy_cp)]; + } + else + yy_current_state = yy_NUL_trans[yy_current_state]; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state ) +{ + int yy_is_jam; + char *yy_cp = (yy_c_buf_p); + + yy_current_state = yy_NUL_trans[yy_current_state]; + yy_is_jam = (yy_current_state == 0); + + if ( ! yy_is_jam ) + { + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + } + + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_UNPUT + void yyFlexLexer::yyunput( int c, char* yy_bp) +{ + char *yy_cp; + + yy_cp = (yy_c_buf_p); + + /* undo effects of setting up yytext */ + *yy_cp = (yy_hold_char); + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + int number_to_move = (yy_n_chars) + 2; + char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + (yy_n_chars) = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + (yytext_ptr) = yy_bp; + (yy_hold_char) = *yy_cp; + (yy_c_buf_p) = yy_cp; +} +#endif + + int yyFlexLexer::yyinput() +{ + int c; + + *(yy_c_buf_p) = (yy_hold_char); + + if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + /* This was really a NUL. */ + *(yy_c_buf_p) = '\0'; + + else + { /* need more input */ + int offset = (int) ((yy_c_buf_p) - (yytext_ptr)); + ++(yy_c_buf_p); + + switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + yyrestart( yyin ); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( yywrap( ) ) + return 0; + + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(); +#else + return input(); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = (yytext_ptr) + offset; + break; + } + } + } + + c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ + *(yy_c_buf_p) = '\0'; /* preserve yytext */ + (yy_hold_char) = *++(yy_c_buf_p); + + return c; +} + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyFlexLexer::yyrestart( std::istream& input_file ) +{ + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE ); + } + + yy_init_buffer( YY_CURRENT_BUFFER, input_file ); + yy_load_buffer_state( ); +} + +/** Delegate to the new version that takes an istream reference. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ +void yyFlexLexer::yyrestart( std::istream* input_file ) +{ + if( ! input_file ) { + input_file = &yyin; + } + yyrestart( *input_file ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + yy_load_buffer_state( ); + + /* We don't actually know whether we did this switch during + * EOF (yywrap()) processing, but the only time this flag + * is looked at is after yywrap() is called, so it's safe + * to go ahead and always set it. + */ + (yy_did_buffer_switch_on_eof) = 1; +} + + void yyFlexLexer::yy_load_buffer_state() +{ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin.rdbuf(YY_CURRENT_BUFFER_LVALUE->yy_input_file); + (yy_hold_char) = *(yy_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream& file, int size ) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + yy_init_buffer( b, file ); + + return b; +} + +/** Delegate creation of buffers to the new version that takes an istream reference. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size ) +{ + return yy_create_buffer( *file, size ); +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * + */ + void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree( (void *) b->yy_ch_buf ); + + yyfree( (void *) b ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream& file ) + +{ + int oerrno = errno; + + yy_flush_buffer( b ); + + b->yy_input_file = file.rdbuf(); + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = 0; + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * + */ + void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b ) +{ + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + yy_load_buffer_state( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer) +{ + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + (yy_buffer_stack_top)++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void yyFlexLexer::yypop_buffer_state (void) +{ + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + if ((yy_buffer_stack_top) > 0) + --(yy_buffer_stack_top); + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +void yyFlexLexer::yyensure_buffer_stack(void) +{ + yy_size_t num_to_alloc; + + if (!(yy_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ + (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + (yy_buffer_stack_max) = num_to_alloc; + (yy_buffer_stack_top) = 0; + return; + } + + if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + yy_size_t grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (yy_buffer_stack_max) + grow_size; + (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc + ((yy_buffer_stack), + num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); + (yy_buffer_stack_max) = num_to_alloc; + } +} + + void yyFlexLexer::yy_push_state( int _new_state ) +{ + if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) ) + { + yy_size_t new_size; + + (yy_start_stack_depth) += YY_START_STACK_INCR; + new_size = (yy_size_t) (yy_start_stack_depth) * sizeof( int ); + + if ( ! (yy_start_stack) ) + (yy_start_stack) = (int *) yyalloc( new_size ); + + else + (yy_start_stack) = (int *) yyrealloc( + (void *) (yy_start_stack), new_size ); + + if ( ! (yy_start_stack) ) + YY_FATAL_ERROR( "out of memory expanding start-condition stack" ); + } + + (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START; + + BEGIN(_new_state); +} + + void yyFlexLexer::yy_pop_state() +{ + if ( --(yy_start_stack_ptr) < 0 ) + YY_FATAL_ERROR( "start-condition stack underflow" ); + + BEGIN((yy_start_stack)[(yy_start_stack_ptr)]); +} + + int yyFlexLexer::yy_top_state() +{ + return (yy_start_stack)[(yy_start_stack_ptr) - 1]; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +void yyFlexLexer::LexerError( const char* msg ) +{ + std::cerr << msg << std::endl; + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = (yy_hold_char); \ + (yy_c_buf_p) = yytext + yyless_macro_arg; \ + (yy_hold_char) = *(yy_c_buf_p); \ + *(yy_c_buf_p) = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, const char * s2, int n ) +{ + + int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (const char * s ) +{ + int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size ) +{ + return malloc(size); +} + +void *yyrealloc (void * ptr, yy_size_t size ) +{ + + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return realloc(ptr, size); +} + +void yyfree (void * ptr ) +{ + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 101 "FloatScanner.ll" + + +namespace PARSER { + +FloatScanner::FloatScanner(std::istream* in, + std::ostream* out) + : FloatFlexLexer(in, out) +{ +} + +FloatScanner::~FloatScanner() +{ +} + +/* +void FloatScanner::set_debug(bool b) +{ + yy_flex_debug = b; +} +*/ + +} + +/* This implementation of DecimalFlexLexer::yylex() is required to fill the + * vtable of the class ExampleFlexLexer. We define the scanner's main yylex + * function via YY_DECL to reside in the Scanner class instead. */ + +#ifdef yylex +#undef yylex +#endif + +int FloatFlexLexer::yylex() +{ + std::cerr << "in FloatFlexLexer::yylex() !" << std::endl; + return 0; +} + +/* When the scanner receives an end-of-file indication from YY_INPUT, it then + * checks the yywrap() function. If yywrap() returns false (zero), then it is + * assumed that the function has gone ahead and set up `yyin' to point to + * another input file, and scanning continues. If it returns true (non-zero), + * then the scanner terminates, returning 0 to its caller. */ + +int FloatFlexLexer::yywrap() +{ + return 1; +} + diff --git a/sources/parsers/auto/StringParser.cpp b/sources/parsers/auto/StringParser.cpp new file mode 100644 index 0000000..1d63bb1 --- /dev/null +++ b/sources/parsers/auto/StringParser.cpp @@ -0,0 +1,1103 @@ +/* A Bison parser, made by GNU Bison 2.7. */ + +/* Skeleton implementation for Bison LALR(1) parsers in C++ + + Copyright (C) 2002-2012 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +// Take the name prefix into account. +#define yylex PARSERlex + +/* First part of user declarations. */ +/* Line 279 of lalr1.cc */ +#line 23 "StringParser.yy" + /*** C/C++ Declarations ***/ + +#include "ExpressionNode.h" +#include "StringNode.h" + + +/* Line 279 of lalr1.cc */ +#line 47 "StringParser.cpp" + + +#include "StringParser.hpp" + +/* User implementation prologue. */ +/* Line 285 of lalr1.cc */ +#line 87 "StringParser.yy" + + +#include "evaluator.h" +#include "StringScanner.h" + +/* this "connects" the bison parser in the driver to the flex scanner class + * object. it defines the yylex() function call to pull the next token from the + * current lexer object of the driver context. */ +#undef yylex +#define yylex evaluator.m_pStringLexer->lex + + +/* Line 285 of lalr1.cc */ +#line 68 "StringParser.cpp" + + +# ifndef YY_NULL +# if defined __cplusplus && 201103L <= __cplusplus +# define YY_NULL nullptr +# else +# define YY_NULL 0 +# endif +# endif + +#ifndef YY_ +# if defined YYENABLE_NLS && YYENABLE_NLS +# if ENABLE_NLS +# include /* FIXME: INFRINGES ON USER NAME SPACE */ +# define YY_(msgid) dgettext ("bison-runtime", msgid) +# endif +# endif +# ifndef YY_ +# define YY_(msgid) msgid +# endif +#endif + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +# ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (N) \ + { \ + (Current).begin = YYRHSLOC (Rhs, 1).begin; \ + (Current).end = YYRHSLOC (Rhs, N).end; \ + } \ + else \ + { \ + (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end; \ + } \ + while (/*CONSTCOND*/ false) +# endif + + +/* Suppress unused-variable warnings by "using" E. */ +#define YYUSE(e) ((void) (e)) + +/* Enable debugging if requested. */ +#if YYDEBUG + +/* A pseudo ostream that takes yydebug_ into account. */ +# define YYCDEBUG if (yydebug_) (*yycdebug_) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug_) \ + { \ + *yycdebug_ << Title << ' '; \ + yy_symbol_print_ ((Type), (Value), (Location)); \ + *yycdebug_ << std::endl; \ + } \ +} while (false) + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug_) \ + yy_reduce_print_ (Rule); \ +} while (false) + +# define YY_STACK_PRINT() \ +do { \ + if (yydebug_) \ + yystack_print_ (); \ +} while (false) + +#else /* !YYDEBUG */ + +# define YYCDEBUG if (false) std::cerr +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) YYUSE(Type) +# define YY_REDUCE_PRINT(Rule) static_cast(0) +# define YY_STACK_PRINT() static_cast(0) + +#endif /* !YYDEBUG */ + +#define yyerrok (yyerrstatus_ = 0) +#define yyclearin (yychar = yyempty_) + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab +#define YYRECOVERING() (!!yyerrstatus_) + + +namespace PARSER { +/* Line 353 of lalr1.cc */ +#line 163 "StringParser.cpp" + + /* Return YYSTR after stripping away unnecessary quotes and + backslashes, so that it's suitable for yyerror. The heuristic is + that double-quoting is unnecessary unless the string contains an + apostrophe, a comma, or backslash (other than backslash-backslash). + YYSTR is taken from yytname. */ + std::string + StringParser::yytnamerr_ (const char *yystr) + { + if (*yystr == '"') + { + std::string yyr = ""; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + yyr += *yyp; + break; + + case '"': + return yyr; + } + do_not_strip_quotes: ; + } + + return yystr; + } + + + /// Build a parser object. + StringParser::StringParser (class Evaluator& evaluator_yyarg) + : +#if YYDEBUG + yydebug_ (false), + yycdebug_ (&std::cerr), +#endif + evaluator (evaluator_yyarg) + { + } + + StringParser::~StringParser () + { + } + +#if YYDEBUG + /*--------------------------------. + | Print this symbol on YYOUTPUT. | + `--------------------------------*/ + + inline void + StringParser::yy_symbol_value_print_ (int yytype, + const semantic_type* yyvaluep, const location_type* yylocationp) + { + YYUSE (yylocationp); + YYUSE (yyvaluep); + std::ostream& yyo = debug_stream (); + std::ostream& yyoutput = yyo; + YYUSE (yyoutput); + switch (yytype) + { + default: + break; + } + } + + + void + StringParser::yy_symbol_print_ (int yytype, + const semantic_type* yyvaluep, const location_type* yylocationp) + { + *yycdebug_ << (yytype < yyntokens_ ? "token" : "nterm") + << ' ' << yytname_[yytype] << " (" + << *yylocationp << ": "; + yy_symbol_value_print_ (yytype, yyvaluep, yylocationp); + *yycdebug_ << ')'; + } +#endif + + void + StringParser::yydestruct_ (const char* yymsg, + int yytype, semantic_type* yyvaluep, location_type* yylocationp) + { + YYUSE (yylocationp); + YYUSE (yymsg); + YYUSE (yyvaluep); + + if (yymsg) + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + switch (yytype) + { + case 3: /* "text" */ +/* Line 455 of lalr1.cc */ +#line 77 "StringParser.yy" + { delete ((*yyvaluep).pString); }; +/* Line 455 of lalr1.cc */ +#line 270 "StringParser.cpp" + break; + case 4: /* "text constant" */ +/* Line 455 of lalr1.cc */ +#line 78 "StringParser.yy" + { delete ((*yyvaluep).pString); }; +/* Line 455 of lalr1.cc */ +#line 277 "StringParser.cpp" + break; + case 7: /* constant */ +/* Line 455 of lalr1.cc */ +#line 79 "StringParser.yy" + { delete ((*yyvaluep).pExprNode); }; +/* Line 455 of lalr1.cc */ +#line 284 "StringParser.cpp" + break; + case 8: /* variable */ +/* Line 455 of lalr1.cc */ +#line 80 "StringParser.yy" + { delete ((*yyvaluep).pExprNode); }; +/* Line 455 of lalr1.cc */ +#line 291 "StringParser.cpp" + break; + case 9: /* atomexpr */ +/* Line 455 of lalr1.cc */ +#line 81 "StringParser.yy" + { delete ((*yyvaluep).pExprNode); }; +/* Line 455 of lalr1.cc */ +#line 298 "StringParser.cpp" + break; + case 10: /* addexpr */ +/* Line 455 of lalr1.cc */ +#line 82 "StringParser.yy" + { delete ((*yyvaluep).pExprNode); }; +/* Line 455 of lalr1.cc */ +#line 305 "StringParser.cpp" + break; + case 11: /* expr */ +/* Line 455 of lalr1.cc */ +#line 83 "StringParser.yy" + { delete ((*yyvaluep).pExprNode); }; +/* Line 455 of lalr1.cc */ +#line 312 "StringParser.cpp" + break; + + default: + break; + } + } + + void + StringParser::yypop_ (unsigned int n) + { + yystate_stack_.pop (n); + yysemantic_stack_.pop (n); + yylocation_stack_.pop (n); + } + +#if YYDEBUG + std::ostream& + StringParser::debug_stream () const + { + return *yycdebug_; + } + + void + StringParser::set_debug_stream (std::ostream& o) + { + yycdebug_ = &o; + } + + + StringParser::debug_level_type + StringParser::debug_level () const + { + return yydebug_; + } + + void + StringParser::set_debug_level (debug_level_type l) + { + yydebug_ = l; + } +#endif + + inline bool + StringParser::yy_pact_value_is_default_ (int yyvalue) + { + return yyvalue == yypact_ninf_; + } + + inline bool + StringParser::yy_table_value_is_error_ (int yyvalue) + { + return yyvalue == yytable_ninf_; + } + + int + StringParser::parse () + { + /// Lookahead and lookahead in internal form. + int yychar = yyempty_; + int yytoken = 0; + + // State. + int yyn; + int yylen = 0; + int yystate = 0; + + // Error handling. + int yynerrs_ = 0; + int yyerrstatus_ = 0; + + /// Semantic value of the lookahead. + static semantic_type yyval_default; + semantic_type yylval = yyval_default; + /// Location of the lookahead. + location_type yylloc; + /// The locations where the error started and ended. + location_type yyerror_range[3]; + + /// $$. + semantic_type yyval; + /// @$. + location_type yyloc; + + int yyresult; + + // FIXME: This shoud be completely indented. It is not yet to + // avoid gratuitous conflicts when merging into the master branch. + try + { + YYCDEBUG << "Starting parse" << std::endl; + + + /* Initialize the stacks. The initial state will be pushed in + yynewstate, since the latter expects the semantical and the + location values to have been already stored, initialize these + stacks with a primary value. */ + yystate_stack_ = state_stack_type (0); + yysemantic_stack_ = semantic_stack_type (0); + yylocation_stack_ = location_stack_type (0); + yysemantic_stack_.push (yylval); + yylocation_stack_.push (yylloc); + + /* New state. */ + yynewstate: + yystate_stack_.push (yystate); + YYCDEBUG << "Entering state " << yystate << std::endl; + + /* Accept? */ + if (yystate == yyfinal_) + goto yyacceptlab; + + goto yybackup; + + /* Backup. */ + yybackup: + + /* Try to take a decision without lookahead. */ + yyn = yypact_[yystate]; + if (yy_pact_value_is_default_ (yyn)) + goto yydefault; + + /* Read a lookahead token. */ + if (yychar == yyempty_) + { + YYCDEBUG << "Reading a token: "; + yychar = yylex (&yylval, &yylloc); + } + + /* Convert token to internal form. */ + if (yychar <= yyeof_) + { + yychar = yytoken = yyeof_; + YYCDEBUG << "Now at end of input." << std::endl; + } + else + { + yytoken = yytranslate_ (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yytoken) + goto yydefault; + + /* Reduce or error. */ + yyn = yytable_[yyn]; + if (yyn <= 0) + { + if (yy_table_value_is_error_ (yyn)) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + /* Shift the lookahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the token being shifted. */ + yychar = yyempty_; + + yysemantic_stack_.push (yylval); + yylocation_stack_.push (yylloc); + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus_) + --yyerrstatus_; + + yystate = yyn; + goto yynewstate; + + /*-----------------------------------------------------------. + | yydefault -- do the default action for the current state. | + `-----------------------------------------------------------*/ + yydefault: + yyn = yydefact_[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + /*-----------------------------. + | yyreduce -- Do a reduction. | + `-----------------------------*/ + yyreduce: + yylen = yyr2_[yyn]; + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. Otherwise, use the top of the stack. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. */ + if (yylen) + yyval = yysemantic_stack_[yylen - 1]; + else + yyval = yysemantic_stack_[0]; + + // Compute the default @$. + { + slice slice (yylocation_stack_, yylen); + YYLLOC_DEFAULT (yyloc, slice, yylen); + } + + // Perform the reduction. + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 2: +/* Line 670 of lalr1.cc */ +#line 103 "StringParser.yy" + { + (yyval.pExprNode) = new SNConstant(evaluator.GetContext(), *(yysemantic_stack_[(1) - (1)].pString)); + } + break; + + case 3: +/* Line 670 of lalr1.cc */ +#line 108 "StringParser.yy" + { + (yyval.pExprNode) = new SNTxt(evaluator.GetContext(), *(yysemantic_stack_[(1) - (1)].pString)); + delete (yysemantic_stack_[(1) - (1)].pString); + } + break; + + case 4: +/* Line 670 of lalr1.cc */ +#line 114 "StringParser.yy" + { + (yyval.pExprNode) = (yysemantic_stack_[(1) - (1)].pExprNode); + } + break; + + case 5: +/* Line 670 of lalr1.cc */ +#line 118 "StringParser.yy" + { + (yyval.pExprNode) = (yysemantic_stack_[(1) - (1)].pExprNode); + } + break; + + case 6: +/* Line 670 of lalr1.cc */ +#line 123 "StringParser.yy" + { + (yyval.pExprNode) = (yysemantic_stack_[(1) - (1)].pExprNode); + } + break; + + case 7: +/* Line 670 of lalr1.cc */ +#line 127 "StringParser.yy" + { + (yyval.pExprNode) = new SNAdd(evaluator.GetContext(), (yysemantic_stack_[(3) - (1)].pExprNode), (yysemantic_stack_[(3) - (3)].pExprNode)); + } + break; + + case 8: +/* Line 670 of lalr1.cc */ +#line 132 "StringParser.yy" + { + (yyval.pExprNode) = (yysemantic_stack_[(1) - (1)].pExprNode); + } + break; + + case 10: +/* Line 670 of lalr1.cc */ +#line 138 "StringParser.yy" + { + evaluator.GetContext().SetExpression((yysemantic_stack_[(3) - (2)].pExprNode)); + } + break; + + +/* Line 670 of lalr1.cc */ +#line 588 "StringParser.cpp" + default: + break; + } + + /* User semantic actions sometimes alter yychar, and that requires + that yytoken be updated with the new translation. We take the + approach of translating immediately before every use of yytoken. + One alternative is translating here after every semantic action, + but that translation would be missed if the semantic action + invokes YYABORT, YYACCEPT, or YYERROR immediately after altering + yychar. In the case of YYABORT or YYACCEPT, an incorrect + destructor might then be invoked immediately. In the case of + YYERROR, subsequent parser actions might lead to an incorrect + destructor call or verbose syntax error message before the + lookahead is translated. */ + YY_SYMBOL_PRINT ("-> $$ =", yyr1_[yyn], &yyval, &yyloc); + + yypop_ (yylen); + yylen = 0; + YY_STACK_PRINT (); + + yysemantic_stack_.push (yyval); + yylocation_stack_.push (yyloc); + + /* Shift the result of the reduction. */ + yyn = yyr1_[yyn]; + yystate = yypgoto_[yyn - yyntokens_] + yystate_stack_[0]; + if (0 <= yystate && yystate <= yylast_ + && yycheck_[yystate] == yystate_stack_[0]) + yystate = yytable_[yystate]; + else + yystate = yydefgoto_[yyn - yyntokens_]; + goto yynewstate; + + /*------------------------------------. + | yyerrlab -- here on detecting error | + `------------------------------------*/ + yyerrlab: + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = yytranslate_ (yychar); + + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus_) + { + ++yynerrs_; + if (yychar == yyempty_) + yytoken = yyempty_; + error (yylloc, yysyntax_error_ (yystate, yytoken)); + } + + yyerror_range[1] = yylloc; + if (yyerrstatus_ == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + if (yychar <= yyeof_) + { + /* Return failure if at end of input. */ + if (yychar == yyeof_) + YYABORT; + } + else + { + yydestruct_ ("Error: discarding", yytoken, &yylval, &yylloc); + yychar = yyempty_; + } + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto yyerrlab1; + + + /*---------------------------------------------------. + | yyerrorlab -- error raised explicitly by YYERROR. | + `---------------------------------------------------*/ + yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (false) + goto yyerrorlab; + + yyerror_range[1] = yylocation_stack_[yylen - 1]; + /* Do not reclaim the symbols of the rule which action triggered + this YYERROR. */ + yypop_ (yylen); + yylen = 0; + yystate = yystate_stack_[0]; + goto yyerrlab1; + + /*-------------------------------------------------------------. + | yyerrlab1 -- common code for both syntax error and YYERROR. | + `-------------------------------------------------------------*/ + yyerrlab1: + yyerrstatus_ = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact_[yystate]; + if (!yy_pact_value_is_default_ (yyn)) + { + yyn += yyterror_; + if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_) + { + yyn = yytable_[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yystate_stack_.height () == 1) + YYABORT; + + yyerror_range[1] = yylocation_stack_[0]; + yydestruct_ ("Error: popping", + yystos_[yystate], + &yysemantic_stack_[0], &yylocation_stack_[0]); + yypop_ (); + yystate = yystate_stack_[0]; + YY_STACK_PRINT (); + } + + yyerror_range[2] = yylloc; + // Using YYLLOC is tempting, but would change the location of + // the lookahead. YYLOC is available though. + YYLLOC_DEFAULT (yyloc, yyerror_range, 2); + yysemantic_stack_.push (yylval); + yylocation_stack_.push (yyloc); + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos_[yyn], + &yysemantic_stack_[0], &yylocation_stack_[0]); + + yystate = yyn; + goto yynewstate; + + /* Accept. */ + yyacceptlab: + yyresult = 0; + goto yyreturn; + + /* Abort. */ + yyabortlab: + yyresult = 1; + goto yyreturn; + + yyreturn: + if (yychar != yyempty_) + { + /* Make sure we have latest lookahead translation. See comments + at user semantic actions for why this is necessary. */ + yytoken = yytranslate_ (yychar); + yydestruct_ ("Cleanup: discarding lookahead", yytoken, &yylval, + &yylloc); + } + + /* Do not reclaim the symbols of the rule which action triggered + this YYABORT or YYACCEPT. */ + yypop_ (yylen); + while (1 < yystate_stack_.height ()) + { + yydestruct_ ("Cleanup: popping", + yystos_[yystate_stack_[0]], + &yysemantic_stack_[0], + &yylocation_stack_[0]); + yypop_ (); + } + + return yyresult; + } + catch (...) + { + YYCDEBUG << "Exception caught: cleaning lookahead and stack" + << std::endl; + // Do not try to display the values of the reclaimed symbols, + // as their printer might throw an exception. + if (yychar != yyempty_) + { + /* Make sure we have latest lookahead translation. See + comments at user semantic actions for why this is + necessary. */ + yytoken = yytranslate_ (yychar); + yydestruct_ (YY_NULL, yytoken, &yylval, &yylloc); + } + + while (1 < yystate_stack_.height ()) + { + yydestruct_ (YY_NULL, + yystos_[yystate_stack_[0]], + &yysemantic_stack_[0], + &yylocation_stack_[0]); + yypop_ (); + } + throw; + } + } + + // Generate an error message. + std::string + StringParser::yysyntax_error_ (int yystate, int yytoken) + { + std::string yyres; + // Number of reported tokens (one for the "unexpected", one per + // "expected"). + size_t yycount = 0; + // Its maximum. + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + // Arguments of yyformat. + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + + /* There are many possibilities here to consider: + - If this state is a consistent state with a default action, then + the only way this function was invoked is if the default action + is an error action. In that case, don't check for expected + tokens because there are none. + - The only way there can be no lookahead present (in yytoken) is + if this state is a consistent state with a default action. + Thus, detecting the absence of a lookahead is sufficient to + determine that there is no unexpected or expected token to + report. In that case, just report a simple "syntax error". + - Don't assume there isn't a lookahead just because this state is + a consistent state with a default action. There might have + been a previous inconsistent state, consistent state with a + non-default action, or user semantic action that manipulated + yychar. + - Of course, the expected token list depends on states to have + correct lookahead information, and it depends on the parser not + to perform extra reductions after fetching a lookahead from the + scanner and before detecting a syntax error. Thus, state + merging (from LALR or IELR) and default reductions corrupt the + expected token list. However, the list is correct for + canonical LR with one exception: it will still contain any + token that will not be accepted due to an error action in a + later state. + */ + if (yytoken != yyempty_) + { + yyarg[yycount++] = yytname_[yytoken]; + int yyn = yypact_[yystate]; + if (!yy_pact_value_is_default_ (yyn)) + { + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. In other words, skip the first -YYN actions for + this state because they are default actions. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = yylast_ - yyn + 1; + int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_; + for (int yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck_[yyx + yyn] == yyx && yyx != yyterror_ + && !yy_table_value_is_error_ (yytable_[yyx + yyn])) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + break; + } + else + yyarg[yycount++] = yytname_[yyx]; + } + } + } + + char const* yyformat = YY_NULL; + switch (yycount) + { +#define YYCASE_(N, S) \ + case N: \ + yyformat = S; \ + break + YYCASE_(0, YY_("syntax error")); + YYCASE_(1, YY_("syntax error, unexpected %s")); + YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); + YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); + YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); + YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); +#undef YYCASE_ + } + + // Argument number. + size_t yyi = 0; + for (char const* yyp = yyformat; *yyp; ++yyp) + if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount) + { + yyres += yytnamerr_ (yyarg[yyi++]); + ++yyp; + } + else + yyres += *yyp; + return yyres; + } + + + /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ + const signed char StringParser::yypact_ninf_ = -4; + const signed char + StringParser::yypact_[] = + { + -4, 0, -4, -4, -4, -4, -4, -4, 1, 5, + -2, -4, -4 + }; + + /* YYDEFACT[S] -- default reduction number in state S. Performed when + YYTABLE doesn't specify something else to do. Zero means the + default is an error. */ + const unsigned char + StringParser::yydefact_[] = + { + 9, 0, 1, 3, 2, 4, 5, 6, 8, 0, + 0, 10, 7 + }; + + /* YYPGOTO[NTERM-NUM]. */ + const signed char + StringParser::yypgoto_[] = + { + -4, -4, -4, -3, -4, -4, -4 + }; + + /* YYDEFGOTO[NTERM-NUM]. */ + const signed char + StringParser::yydefgoto_[] = + { + -1, 5, 6, 7, 8, 9, 1 + }; + + /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If YYTABLE_NINF_, syntax error. */ + const signed char StringParser::yytable_ninf_ = -1; + const unsigned char + StringParser::yytable_[] = + { + 2, 3, 4, 3, 4, 11, 10, 12 + }; + + /* YYCHECK. */ + const unsigned char + StringParser::yycheck_[] = + { + 0, 3, 4, 3, 4, 0, 5, 10 + }; + + /* STOS_[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ + const unsigned char + StringParser::yystos_[] = + { + 0, 12, 0, 3, 4, 7, 8, 9, 10, 11, + 5, 0, 9 + }; + +#if YYDEBUG + /* TOKEN_NUMBER_[YYLEX-NUM] -- Internal symbol number corresponding + to YYLEX-NUM. */ + const unsigned short int + StringParser::yytoken_number_[] = + { + 0, 256, 257, 258, 259, 43 + }; +#endif + + /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ + const unsigned char + StringParser::yyr1_[] = + { + 0, 6, 7, 8, 9, 9, 10, 10, 11, 12, + 12 + }; + + /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ + const unsigned char + StringParser::yyr2_[] = + { + 0, 2, 1, 1, 1, 1, 1, 3, 1, 0, + 3 + }; + + + /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at \a yyntokens_, nonterminals. */ + const char* + const StringParser::yytname_[] = + { + "\"end of stream\"", "error", "$undefined", "\"text\"", + "\"text constant\"", "'+'", "$accept", "constant", "variable", + "atomexpr", "addexpr", "expr", "start", YY_NULL + }; + +#if YYDEBUG + /* YYRHS -- A `-1'-separated list of the rules' RHS. */ + const StringParser::rhs_number_type + StringParser::yyrhs_[] = + { + 12, 0, -1, 4, -1, 3, -1, 7, -1, 8, + -1, 9, -1, 10, 5, 9, -1, 10, -1, -1, + 12, 11, 0, -1 + }; + + /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ + const unsigned char + StringParser::yyprhs_[] = + { + 0, 0, 3, 5, 7, 9, 11, 13, 17, 19, + 20 + }; + + /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ + const unsigned char + StringParser::yyrline_[] = + { + 0, 102, 102, 107, 113, 117, 122, 126, 131, 136, + 137 + }; + + // Print the state stack on the debug stream. + void + StringParser::yystack_print_ () + { + *yycdebug_ << "Stack now"; + for (state_stack_type::const_iterator i = yystate_stack_.begin (); + i != yystate_stack_.end (); ++i) + *yycdebug_ << ' ' << *i; + *yycdebug_ << std::endl; + } + + // Report on the debug stream that the rule \a yyrule is going to be reduced. + void + StringParser::yy_reduce_print_ (int yyrule) + { + unsigned int yylno = yyrline_[yyrule]; + int yynrhs = yyr2_[yyrule]; + /* Print the symbols being reduced, and their result. */ + *yycdebug_ << "Reducing stack by rule " << yyrule - 1 + << " (line " << yylno << "):" << std::endl; + /* The symbols being reduced. */ + for (int yyi = 0; yyi < yynrhs; yyi++) + YY_SYMBOL_PRINT (" $" << yyi + 1 << " =", + yyrhs_[yyprhs_[yyrule] + yyi], + &(yysemantic_stack_[(yynrhs) - (yyi + 1)]), + &(yylocation_stack_[(yynrhs) - (yyi + 1)])); + } +#endif // YYDEBUG + + /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ + StringParser::token_number_type + StringParser::yytranslate_ (int t) + { + static + const token_number_type + translate_table[] = + { + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4 + }; + if ((unsigned int) t <= yyuser_token_number_max_) + return translate_table[t]; + else + return yyundef_token_; + } + + const int StringParser::yyeof_ = 0; + const int StringParser::yylast_ = 7; + const int StringParser::yynnts_ = 7; + const int StringParser::yyempty_ = -2; + const int StringParser::yyfinal_ = 2; + const int StringParser::yyterror_ = 1; + const int StringParser::yyerrcode_ = 256; + const int StringParser::yyntokens_ = 6; + + const unsigned int StringParser::yyuser_token_number_max_ = 259; + const StringParser::token_number_type StringParser::yyundef_token_ = 2; + + +} // PARSER +/* Line 1141 of lalr1.cc */ +#line 1095 "StringParser.cpp" +/* Line 1142 of lalr1.cc */ +#line 142 "StringParser.yy" + /*** Additional Code ***/ + +void PARSER::StringParser::error(const StringParser::location_type& l, + const std::string& m) +{ + std::cout << "Error: " << m << '\n'; +} diff --git a/sources/parsers/auto/StringParser.hpp b/sources/parsers/auto/StringParser.hpp new file mode 100644 index 0000000..8a2930c --- /dev/null +++ b/sources/parsers/auto/StringParser.hpp @@ -0,0 +1,272 @@ +/* A Bison parser, made by GNU Bison 2.7. */ + +/* Skeleton interface for Bison LALR(1) parsers in C++ + + Copyright (C) 2002-2012 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/** + ** \file StringParser.hpp + ** Define the PARSER::parser class. + */ + +/* C++ LALR(1) parser skeleton written by Akim Demaille. */ + +#ifndef YY_PARSER_STRINGPARSER_HPP_INCLUDED +# define YY_PARSER_STRINGPARSER_HPP_INCLUDED + + + +#include +#include +#include "stack.hh" +#include "location.hh" + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + + +namespace PARSER { +/* Line 33 of lalr1.cc */ +#line 59 "StringParser.hpp" + + /// A Bison parser. + class StringParser + { + public: + /// Symbol semantic values. +#ifndef YYSTYPE + union semantic_type + { +/* Line 33 of lalr1.cc */ +#line 66 "StringParser.yy" + + std::string* pString; + class PARSER::ExpressionNode* pExprNode; + + +/* Line 33 of lalr1.cc */ +#line 77 "StringParser.hpp" + }; +#else + typedef YYSTYPE semantic_type; +#endif + /// Symbol locations. + typedef location location_type; + /// Tokens. + struct token + { + /* Tokens. */ + enum yytokentype { + END = 0, + TXT = 258, + TXT_CONSTANT = 259 + }; + + }; + /// Token type. + typedef token::yytokentype token_type; + + /// Build a parser object. + StringParser (class Evaluator& evaluator_yyarg); + virtual ~StringParser (); + + /// Parse. + /// \returns 0 iff parsing succeeded. + virtual int parse (); + +#if YYDEBUG + /// The current debugging stream. + std::ostream& debug_stream () const; + /// Set the current debugging stream. + void set_debug_stream (std::ostream &); + + /// Type for debugging levels. + typedef int debug_level_type; + /// The current debugging level. + debug_level_type debug_level () const; + /// Set the current debugging level. + void set_debug_level (debug_level_type l); +#endif + + private: + /// Report a syntax error. + /// \param loc where the syntax error is found. + /// \param msg a description of the syntax error. + virtual void error (const location_type& loc, const std::string& msg); + + /// Generate an error message. + /// \param state the state where the error occurred. + /// \param tok the lookahead token. + virtual std::string yysyntax_error_ (int yystate, int tok); + +#if YYDEBUG + /// \brief Report a symbol value on the debug stream. + /// \param yytype The token type. + /// \param yyvaluep Its semantic value. + /// \param yylocationp Its location. + virtual void yy_symbol_value_print_ (int yytype, + const semantic_type* yyvaluep, + const location_type* yylocationp); + /// \brief Report a symbol on the debug stream. + /// \param yytype The token type. + /// \param yyvaluep Its semantic value. + /// \param yylocationp Its location. + virtual void yy_symbol_print_ (int yytype, + const semantic_type* yyvaluep, + const location_type* yylocationp); +#endif + + + /// State numbers. + typedef int state_type; + /// State stack type. + typedef stack state_stack_type; + /// Semantic value stack type. + typedef stack semantic_stack_type; + /// location stack type. + typedef stack location_stack_type; + + /// The state stack. + state_stack_type yystate_stack_; + /// The semantic value stack. + semantic_stack_type yysemantic_stack_; + /// The location stack. + location_stack_type yylocation_stack_; + + /// Whether the given \c yypact_ value indicates a defaulted state. + /// \param yyvalue the value to check + static bool yy_pact_value_is_default_ (int yyvalue); + + /// Whether the given \c yytable_ value indicates a syntax error. + /// \param yyvalue the value to check + static bool yy_table_value_is_error_ (int yyvalue); + + /// Internal symbol numbers. + typedef unsigned char token_number_type; + /* Tables. */ + /// For a state, the index in \a yytable_ of its portion. + static const signed char yypact_[]; + static const signed char yypact_ninf_; + + /// For a state, default reduction number. + /// Unless\a yytable_ specifies something else to do. + /// Zero means the default is an error. + static const unsigned char yydefact_[]; + + static const signed char yypgoto_[]; + static const signed char yydefgoto_[]; + + /// What to do in a state. + /// \a yytable_[yypact_[s]]: what to do in state \a s. + /// - if positive, shift that token. + /// - if negative, reduce the rule which number is the opposite. + /// - if zero, do what YYDEFACT says. + static const unsigned char yytable_[]; + static const signed char yytable_ninf_; + + static const unsigned char yycheck_[]; + + /// For a state, its accessing symbol. + static const unsigned char yystos_[]; + + /// For a rule, its LHS. + static const unsigned char yyr1_[]; + /// For a rule, its RHS length. + static const unsigned char yyr2_[]; + + /// Convert the symbol name \a n to a form suitable for a diagnostic. + static std::string yytnamerr_ (const char *n); + + + /// For a symbol, its name in clear. + static const char* const yytname_[]; +#if YYDEBUG + /// A type to store symbol numbers and -1. + typedef signed char rhs_number_type; + /// A `-1'-separated list of the rules' RHS. + static const rhs_number_type yyrhs_[]; + /// For each rule, the index of the first RHS symbol in \a yyrhs_. + static const unsigned char yyprhs_[]; + /// For each rule, its source line number. + static const unsigned char yyrline_[]; + /// For each scanner token number, its symbol number. + static const unsigned short int yytoken_number_[]; + /// Report on the debug stream that the rule \a r is going to be reduced. + virtual void yy_reduce_print_ (int r); + /// Print the state stack on the debug stream. + virtual void yystack_print_ (); + + /* Debugging. */ + int yydebug_; + std::ostream* yycdebug_; +#endif + + /// Convert a scanner token number \a t to a symbol number. + token_number_type yytranslate_ (int t); + + /// \brief Reclaim the memory associated to a symbol. + /// \param yymsg Why this token is reclaimed. + /// If null, do not display the symbol, just free it. + /// \param yytype The symbol type. + /// \param yyvaluep Its semantic value. + /// \param yylocationp Its location. + inline void yydestruct_ (const char* yymsg, + int yytype, + semantic_type* yyvaluep, + location_type* yylocationp); + + /// Pop \a n symbols the three stacks. + inline void yypop_ (unsigned int n = 1); + + /* Constants. */ + static const int yyeof_; + /* LAST_ -- Last index in TABLE_. */ + static const int yylast_; + static const int yynnts_; + static const int yyempty_; + static const int yyfinal_; + static const int yyterror_; + static const int yyerrcode_; + static const int yyntokens_; + static const unsigned int yyuser_token_number_max_; + static const token_number_type yyundef_token_; + + /* User arguments. */ + class Evaluator& evaluator; + }; + +} // PARSER +/* Line 33 of lalr1.cc */ +#line 269 "StringParser.hpp" + + + +#endif /* !YY_PARSER_STRINGPARSER_HPP_INCLUDED */ diff --git a/sources/parsers/auto/StringScanner.cpp b/sources/parsers/auto/StringScanner.cpp new file mode 100644 index 0000000..bd6f092 --- /dev/null +++ b/sources/parsers/auto/StringScanner.cpp @@ -0,0 +1,1977 @@ +#line 1 "StringScanner.cpp" + +#line 3 "StringScanner.cpp" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 6 +#define YY_FLEX_SUBMINOR_VERSION 4 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + + /* The c++ scanner is a mess. The FlexLexer.h header file relies on the + * following macro. This is required in order to pass the c++-multiple-scanners + * test in the regression suite. We get reports that it breaks inheritance. + * We will address this in a future release of flex, or omit the C++ scanner + * altogether. + */ + #define yyFlexLexer StringFlexLexer + +#ifdef yyalloc +#define Stringalloc_ALREADY_DEFINED +#else +#define yyalloc Stringalloc +#endif + +#ifdef yyrealloc +#define Stringrealloc_ALREADY_DEFINED +#else +#define yyrealloc Stringrealloc +#endif + +#ifdef yyfree +#define Stringfree_ALREADY_DEFINED +#else +#define yyfree Stringfree +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#ifndef SIZE_MAX +#define SIZE_MAX (~(size_t)0) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +/* begin standard C++ headers. */ +#include +#include +#include +#include +#include +/* end standard C++ headers. */ + +/* TODO: this is always defined, so inline it */ +#define yyconst const + +#if defined(__GNUC__) && __GNUC__ >= 3 +#define yynoreturn __attribute__((__noreturn__)) +#else +#define yynoreturn +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an + * integer in range [0..255] for use as an array index. + */ +#define YY_SC_TO_UI(c) ((YY_CHAR) (c)) + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN (yy_start) = 1 + 2 * +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START (((yy_start) - 1) / 2) +#define YYSTATE YY_START +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE yyrestart( yyin ) +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else +#define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +extern int yyleng; + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + #define YY_LINENO_REWIND_TO(ptr) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = (yy_hold_char); \ + YY_RESTORE_YY_MORE_OFFSET \ + (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) +#define unput(c) yyunput( c, (yytext_ptr) ) + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + + std::streambuf* yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + int yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ + ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ + : NULL) +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] + +void *yyalloc ( yy_size_t ); +void *yyrealloc ( void *, yy_size_t ); +void yyfree ( void * ); + +#define yy_new_buffer yy_create_buffer +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ +typedef flex_uint8_t YY_CHAR; + +#define yytext_ptr yytext + +#include + +static const flex_int16_t yy_nxt[][128] = + { + { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 + }, + + { + 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, + 6, 4, 4, 5, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 5, 4, 7, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 8, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4 + }, + + { + 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, + 6, 4, 4, 5, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 5, 4, 7, 4, 4, 4, 4, 4, + + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 8, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4 + }, + + { + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + + -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, + -3, -3, -3, -3, -3, -3, -3, -3 + }, + + { + 3, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, + -4, -4, -4, -4, -4, -4, -4, -4 + }, + + { + 3, -5, -5, -5, -5, -5, -5, -5, -5, 9, + -5, -5, -5, 9, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + -5, -5, 9, -5, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, + -5, -5, -5, -5, -5, -5, -5, -5 + }, + + { + 3, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, + + -6, -6, -6, -6, -6, -6, -6, -6 + }, + + { + 3, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, 10, 11, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, -7 + }, + + { + 3, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + 12, -8, -8, -8, -8, -8, -8, -8 + }, + + { + 3, -9, -9, -9, -9, -9, -9, -9, -9, 9, + -9, -9, -9, 9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + + -9, -9, 9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9 + + }, + + { + 3, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, 10, 11, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, -10 + }, + + { + 3, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, 10, 11, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, -11 + }, + + { + 3, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, 13, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12 + }, + + { + 3, -13, -13, -13, -13, -13, -13, -13, -13, -13, + + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + 14, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13 + }, + + { + 3, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, 15, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14 + }, + + { + 3, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, 15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, 16, 16, + + 16, 16, 16, 16, 16, 16, 16, 16, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15 + }, + + { + 3, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, 17, -16, -16, -16, -16, -16, -16, -16, + -16, 18, -16, -16, -16, -16, -16, -16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + + -16, -16, -16, -16, -16, -16, -16, -16 + }, + + { + 3, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, 17, -17, -17, -17, -17, -17, -17, -17, + -17, 18, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17 + }, + + { + 3, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18 + }, + + } ; + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + (yytext_ptr) = yy_bp; \ + yyleng = (int) (yy_cp - yy_bp); \ + (yy_hold_char) = *yy_cp; \ + *yy_cp = '\0'; \ + (yy_c_buf_p) = yy_cp; +#define YY_NUM_RULES 5 +#define YY_END_OF_BUFFER 6 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static const flex_int16_t yy_accept[19] = + { 0, + 0, 0, 6, 4, 3, 5, 4, 4, 3, 0, + 1, 0, 0, 0, 0, 0, 0, 2 + } ; + +static const yy_state_type yy_NUL_trans[19] = + { 0, + 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 + } ; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +#line 1 "StringScanner.ll" +/** Define the string expression Flex lexical scanner. + + Copyright (c) 2018 vcdMaker team + 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. +*/ +#line 24 "StringScanner.ll" + +#include "StringNode.h" +#include "StringScanner.h" + +/* Import the parser's token type into a local typedef. */ +typedef PARSER::StringParser::token token; +typedef PARSER::StringParser::token_type token_type; + +/* By default yylex returns int, we use token_type. Unfortunately yyterminate + * by default returns 0, which is not of token_type. */ +#define yyterminate() return token::END + +/* This disables inclusion of unistd.h, which is not available under Visual C++ + * on Win32. The C++ scanner uses STL streams instead. */ +#define YY_NO_UNISTD_H + +#line 730 "StringScanner.cpp" +/*** Flex Declarations and Options ***/ +/* Enable c++ scanner class generation. */ +/* Change the name of the scanner class. Results in "StringFlexLexer". */ +/* The manual says "somewhat more optimized". */ +/* Enable scanner to generate debug output. disable this for release versions. */ +/* %option debug */ +/* No support for include files is planned. */ +/* Let the scanner be fast. */ +/* The following paragraph suffices to track locations accurately. Each time + * yylex is invoked, the begin position is moved onto the end position. */ +#line 65 "StringScanner.ll" +#define YY_USER_ACTION yylloc->columns(yyleng); +#line 743 "StringScanner.cpp" +#line 744 "StringScanner.cpp" + +#define INITIAL 0 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy ( char *, const char *, int ); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen ( const char * ); +#endif + +#ifndef YY_NO_INPUT + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else +#define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +#define ECHO LexerOutput( yytext, yyleng ) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ +\ + if ( (int)(result = LexerInput( (char *) buf, max_size )) < 0 ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) LexerError( msg ) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 +#define YY_DECL int yyFlexLexer::yylex() +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK /*LINTED*/break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + yy_state_type yy_current_state; + char *yy_cp, *yy_bp; + int yy_act; + + if ( !(yy_init) ) + { + (yy_init) = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! (yy_start) ) + (yy_start) = 1; /* first start state */ + + if ( ! yyin ) + yyin.rdbuf(std::cin.rdbuf()); + + if ( ! yyout ) + yyout.rdbuf(std::cout.rdbuf()); + + if ( ! YY_CURRENT_BUFFER ) { + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE ); + } + + yy_load_buffer_state( ); + } + + { +#line 68 "StringScanner.ll" + + +#line 71 "StringScanner.ll" + /* Code to place at the beginning of yylex(). */ + + // reset location + yylloc->step(); + + + /*** Lexer rules ***/ + +#line 888 "StringScanner.cpp" + + while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ + { + yy_cp = (yy_c_buf_p); + + /* Support of yytext. */ + *yy_cp = (yy_hold_char); + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = (yy_start); +yy_match: + while ( (yy_current_state = yy_nxt[yy_current_state][ YY_SC_TO_UI(*yy_cp) ]) > 0 ) + { + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + + ++yy_cp; + } + + yy_current_state = -yy_current_state; + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = (yy_hold_char); + yy_cp = (yy_last_accepting_cpos) + 1; + yy_current_state = (yy_last_accepting_state); + goto yy_find_action; + +case 1: +YY_RULE_SETUP +#line 79 "StringScanner.ll" +{ + yylval->pString = new std::string(yytext, yyleng); + return token::TXT_CONSTANT; +} + YY_BREAK +case 2: +YY_RULE_SETUP +#line 84 "StringScanner.ll" +{ + yylval->pString = new std::string(yytext, yyleng); + return token::TXT; +} + YY_BREAK +/* gobble up white-spaces */ +case 3: +YY_RULE_SETUP +#line 90 "StringScanner.ll" +{ + yylloc->step(); +} + YY_BREAK +/* pass all other characters up to bison */ +case 4: +YY_RULE_SETUP +#line 95 "StringScanner.ll" +{ + return static_cast(*yytext); +} + YY_BREAK +/*** End of lexer rules ***/ +case 5: +YY_RULE_SETUP +#line 101 "StringScanner.ll" +ECHO; + YY_BREAK +#line 971 "StringScanner.cpp" +case YY_STATE_EOF(INITIAL): + yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = (yy_hold_char); + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin.rdbuf(); + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state ); + + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++(yy_c_buf_p); + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = (yy_c_buf_p); + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_END_OF_FILE: + { + (yy_did_buffer_switch_on_eof) = 0; + + if ( yywrap( ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = + (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + (yy_c_buf_p) = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ + } /* end of user's declarations */ +} /* end of yylex */ + +/* The contents of this function are C++ specific, so the () macro is not used. + * This constructor simply maintains backward compatibility. + * DEPRECATED + */ +yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout ): + yyin(arg_yyin ? arg_yyin->rdbuf() : std::cin.rdbuf()), + yyout(arg_yyout ? arg_yyout->rdbuf() : std::cout.rdbuf()) +{ + ctor_common(); +} + +/* The contents of this function are C++ specific, so the () macro is not used. + */ +yyFlexLexer::yyFlexLexer( std::istream& arg_yyin, std::ostream& arg_yyout ): + yyin(arg_yyin.rdbuf()), + yyout(arg_yyout.rdbuf()) +{ + ctor_common(); +} + +/* The contents of this function are C++ specific, so the () macro is not used. + */ +void yyFlexLexer::ctor_common() +{ + yy_c_buf_p = 0; + yy_init = 0; + yy_start = 0; + yy_flex_debug = 0; + yylineno = 1; // this will only get updated if %option yylineno + + yy_did_buffer_switch_on_eof = 0; + + yy_looking_for_trail_begin = 0; + yy_more_flag = 0; + yy_more_len = 0; + yy_more_offset = yy_prev_more_offset = 0; + + yy_start_stack_ptr = yy_start_stack_depth = 0; + yy_start_stack = NULL; + + yy_buffer_stack = NULL; + yy_buffer_stack_top = 0; + yy_buffer_stack_max = 0; + + yy_state_buf = 0; + +} + +/* The contents of this function are C++ specific, so the () macro is not used. + */ +yyFlexLexer::~yyFlexLexer() +{ + delete [] yy_state_buf; + yyfree( yy_start_stack ); + yy_delete_buffer( YY_CURRENT_BUFFER ); + yyfree( yy_buffer_stack ); +} + +/* The contents of this function are C++ specific, so the () macro is not used. + */ +void yyFlexLexer::switch_streams( std::istream& new_in, std::ostream& new_out ) +{ + // was if( new_in ) + yy_delete_buffer( YY_CURRENT_BUFFER ); + yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE ) ); + + // was if( new_out ) + yyout.rdbuf(new_out.rdbuf()); +} + +/* The contents of this function are C++ specific, so the () macro is not used. + */ +void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out ) +{ + if( ! new_in ) { + new_in = &yyin; + } + + if ( ! new_out ) { + new_out = &yyout; + } + + switch_streams(*new_in, *new_out); +} + +#ifdef YY_INTERACTIVE +int yyFlexLexer::LexerInput( char* buf, int /* max_size */ ) +#else +int yyFlexLexer::LexerInput( char* buf, int max_size ) +#endif +{ + if ( yyin.eof() || yyin.fail() ) + return 0; + +#ifdef YY_INTERACTIVE + yyin.get( buf[0] ); + + if ( yyin.eof() ) + return 0; + + if ( yyin.bad() ) + return -1; + + return 1; + +#else + (void) yyin.read( buf, max_size ); + + if ( yyin.bad() ) + return -1; + else + return yyin.gcount(); +#endif +} + +void yyFlexLexer::LexerOutput( const char* buf, int size ) +{ + (void) yyout.write( buf, size ); +} + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +int yyFlexLexer::yy_get_next_buffer() +{ + char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + char *source = (yytext_ptr); + int number_to_move, i; + int ret_val; + + if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1); + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; + + int yy_c_buf_p_offset = + (int) ((yy_c_buf_p) - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + yyrealloc( (void *) b->yy_ch_buf, + (yy_size_t) (b->yy_buf_size + 2) ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = NULL; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + (yy_n_chars), num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + if ( (yy_n_chars) == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + yyrestart( yyin ); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( + (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + /* "- 2" to take care of EOB's */ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); + } + + (yy_n_chars) += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; + + (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + yy_state_type yyFlexLexer::yy_get_previous_state() +{ + yy_state_type yy_current_state; + char *yy_cp; + + yy_current_state = (yy_start); + + for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) + { + if ( *yy_cp ) + { + yy_current_state = yy_nxt[yy_current_state][YY_SC_TO_UI(*yy_cp)]; + } + else + yy_current_state = yy_NUL_trans[yy_current_state]; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state ) +{ + int yy_is_jam; + char *yy_cp = (yy_c_buf_p); + + yy_current_state = yy_NUL_trans[yy_current_state]; + yy_is_jam = (yy_current_state == 0); + + if ( ! yy_is_jam ) + { + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + } + + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_UNPUT + void yyFlexLexer::yyunput( int c, char* yy_bp) +{ + char *yy_cp; + + yy_cp = (yy_c_buf_p); + + /* undo effects of setting up yytext */ + *yy_cp = (yy_hold_char); + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + int number_to_move = (yy_n_chars) + 2; + char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + (yy_n_chars) = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + (yytext_ptr) = yy_bp; + (yy_hold_char) = *yy_cp; + (yy_c_buf_p) = yy_cp; +} +#endif + + int yyFlexLexer::yyinput() +{ + int c; + + *(yy_c_buf_p) = (yy_hold_char); + + if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + /* This was really a NUL. */ + *(yy_c_buf_p) = '\0'; + + else + { /* need more input */ + int offset = (int) ((yy_c_buf_p) - (yytext_ptr)); + ++(yy_c_buf_p); + + switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + yyrestart( yyin ); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( yywrap( ) ) + return 0; + + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(); +#else + return input(); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = (yytext_ptr) + offset; + break; + } + } + } + + c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ + *(yy_c_buf_p) = '\0'; /* preserve yytext */ + (yy_hold_char) = *++(yy_c_buf_p); + + return c; +} + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyFlexLexer::yyrestart( std::istream& input_file ) +{ + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE ); + } + + yy_init_buffer( YY_CURRENT_BUFFER, input_file ); + yy_load_buffer_state( ); +} + +/** Delegate to the new version that takes an istream reference. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ +void yyFlexLexer::yyrestart( std::istream* input_file ) +{ + if( ! input_file ) { + input_file = &yyin; + } + yyrestart( *input_file ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + yy_load_buffer_state( ); + + /* We don't actually know whether we did this switch during + * EOF (yywrap()) processing, but the only time this flag + * is looked at is after yywrap() is called, so it's safe + * to go ahead and always set it. + */ + (yy_did_buffer_switch_on_eof) = 1; +} + + void yyFlexLexer::yy_load_buffer_state() +{ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin.rdbuf(YY_CURRENT_BUFFER_LVALUE->yy_input_file); + (yy_hold_char) = *(yy_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream& file, int size ) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + yy_init_buffer( b, file ); + + return b; +} + +/** Delegate creation of buffers to the new version that takes an istream reference. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size ) +{ + return yy_create_buffer( *file, size ); +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * + */ + void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree( (void *) b->yy_ch_buf ); + + yyfree( (void *) b ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream& file ) + +{ + int oerrno = errno; + + yy_flush_buffer( b ); + + b->yy_input_file = file.rdbuf(); + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = 0; + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * + */ + void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b ) +{ + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + yy_load_buffer_state( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer) +{ + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + (yy_buffer_stack_top)++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void yyFlexLexer::yypop_buffer_state (void) +{ + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + if ((yy_buffer_stack_top) > 0) + --(yy_buffer_stack_top); + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +void yyFlexLexer::yyensure_buffer_stack(void) +{ + yy_size_t num_to_alloc; + + if (!(yy_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ + (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + (yy_buffer_stack_max) = num_to_alloc; + (yy_buffer_stack_top) = 0; + return; + } + + if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + yy_size_t grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (yy_buffer_stack_max) + grow_size; + (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc + ((yy_buffer_stack), + num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); + (yy_buffer_stack_max) = num_to_alloc; + } +} + + void yyFlexLexer::yy_push_state( int _new_state ) +{ + if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) ) + { + yy_size_t new_size; + + (yy_start_stack_depth) += YY_START_STACK_INCR; + new_size = (yy_size_t) (yy_start_stack_depth) * sizeof( int ); + + if ( ! (yy_start_stack) ) + (yy_start_stack) = (int *) yyalloc( new_size ); + + else + (yy_start_stack) = (int *) yyrealloc( + (void *) (yy_start_stack), new_size ); + + if ( ! (yy_start_stack) ) + YY_FATAL_ERROR( "out of memory expanding start-condition stack" ); + } + + (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START; + + BEGIN(_new_state); +} + + void yyFlexLexer::yy_pop_state() +{ + if ( --(yy_start_stack_ptr) < 0 ) + YY_FATAL_ERROR( "start-condition stack underflow" ); + + BEGIN((yy_start_stack)[(yy_start_stack_ptr)]); +} + + int yyFlexLexer::yy_top_state() +{ + return (yy_start_stack)[(yy_start_stack_ptr) - 1]; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +void yyFlexLexer::LexerError( const char* msg ) +{ + std::cerr << msg << std::endl; + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = (yy_hold_char); \ + (yy_c_buf_p) = yytext + yyless_macro_arg; \ + (yy_hold_char) = *(yy_c_buf_p); \ + *(yy_c_buf_p) = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, const char * s2, int n ) +{ + + int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (const char * s ) +{ + int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size ) +{ + return malloc(size); +} + +void *yyrealloc (void * ptr, yy_size_t size ) +{ + + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return realloc(ptr, size); +} + +void yyfree (void * ptr ) +{ + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 101 "StringScanner.ll" + + +namespace PARSER { + +StringScanner::StringScanner(std::istream* in, + std::ostream* out) + : StringFlexLexer(in, out) +{ +} + +StringScanner::~StringScanner() +{ +} + +/* +void StringScanner::set_debug(bool b) +{ + yy_flex_debug = b; +} +*/ + +} + +/* This implementation of StringFlexLexer::yylex() is required to fill the + * vtable of the class StringFlexLexer. We define the scanner's main yylex + * function via YY_DECL to reside in the Scanner class instead. */ + +#ifdef yylex +#undef yylex +#endif + +int StringFlexLexer::yylex() +{ + std::cerr << "in StringFlexLexer::yylex() !" << std::endl; + return 0; +} + +/* When the scanner receives an end-of-file indication from YY_INPUT, it then + * checks the yywrap() function. If yywrap() returns false (zero), then it is + * assumed that the function has gone ahead and set up `yyin' to point to + * another input file, and scanning continues. If it returns true (non-zero), + * then the scanner terminates, returning 0 to its caller. */ + +int StringFlexLexer::yywrap() +{ + return 1; +} + diff --git a/sources/parsers/auto/location.hh b/sources/parsers/auto/location.hh new file mode 100644 index 0000000..17fc4d9 --- /dev/null +++ b/sources/parsers/auto/location.hh @@ -0,0 +1,181 @@ +/* A Bison parser, made by GNU Bison 2.7. */ + +/* Locations for Bison parsers in C++ + + Copyright (C) 2002-2007, 2009-2012 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/** + ** \file location.hh + ** Define the PARSER::location class. + */ + +#ifndef YY_PARSER_LOCATION_HH_INCLUDED +# define YY_PARSER_LOCATION_HH_INCLUDED + +# include "position.hh" + + +namespace PARSER { +/* Line 166 of location.cc */ +#line 47 "location.hh" + + /// Abstract a location. + class location + { + public: + + /// Construct a location from \a b to \a e. + location (const position& b, const position& e) + : begin (b) + , end (e) + { + } + + /// Construct a 0-width location in \a p. + explicit location (const position& p = position ()) + : begin (p) + , end (p) + { + } + + /// Construct a 0-width location in \a f, \a l, \a c. + explicit location (std::string* f, + unsigned int l = 1u, + unsigned int c = 1u) + : begin (f, l, c) + , end (f, l, c) + { + } + + + /// Initialization. + void initialize (std::string* f = YY_NULL, + unsigned int l = 1u, + unsigned int c = 1u) + { + begin.initialize (f, l, c); + end = begin; + } + + /** \name Line and Column related manipulators + ** \{ */ + public: + /// Reset initial location to final location. + void step () + { + begin = end; + } + + /// Extend the current location to the COUNT next columns. + void columns (unsigned int count = 1) + { + end += count; + } + + /// Extend the current location to the COUNT next lines. + void lines (unsigned int count = 1) + { + end.lines (count); + } + /** \} */ + + + public: + /// Beginning of the located region. + position begin; + /// End of the located region. + position end; + }; + + /// Join two location objects to create a location. + inline const location operator+ (const location& begin, const location& end) + { + location res = begin; + res.end = end.end; + return res; + } + + /// Add two location objects. + inline const location operator+ (const location& begin, unsigned int width) + { + location res = begin; + res.columns (width); + return res; + } + + /// Add and assign a location. + inline location& operator+= (location& res, unsigned int width) + { + res.columns (width); + return res; + } + + /// Compare two location objects. + inline bool + operator== (const location& loc1, const location& loc2) + { + return loc1.begin == loc2.begin && loc1.end == loc2.end; + } + + /// Compare two location objects. + inline bool + operator!= (const location& loc1, const location& loc2) + { + return !(loc1 == loc2); + } + + /** \brief Intercept output stream redirection. + ** \param ostr the destination output stream + ** \param loc a reference to the location to redirect + ** + ** Avoid duplicate information. + */ + template + inline std::basic_ostream& + operator<< (std::basic_ostream& ostr, const location& loc) + { + position last = loc.end - 1; + ostr << loc.begin; + if (last.filename + && (!loc.begin.filename + || *loc.begin.filename != *last.filename)) + ostr << '-' << last; + else if (loc.begin.line != last.line) + ostr << '-' << last.line << '.' << last.column; + else if (loc.begin.column != last.column) + ostr << '-' << last.column; + return ostr; + } + + +} // PARSER +/* Line 296 of location.cc */ +#line 180 "location.hh" + +#endif /* !YY_PARSER_LOCATION_HH_INCLUDED */ diff --git a/sources/parsers/auto/position.hh b/sources/parsers/auto/position.hh new file mode 100644 index 0000000..74da5d1 --- /dev/null +++ b/sources/parsers/auto/position.hh @@ -0,0 +1,172 @@ +/* A Bison parser, made by GNU Bison 2.7. */ + +/* Positions for Bison parsers in C++ + + Copyright (C) 2002-2007, 2009-2012 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/** + ** \file position.hh + ** Define the PARSER::position class. + */ + +#ifndef YY_PARSER_POSITION_HH_INCLUDED +# define YY_PARSER_POSITION_HH_INCLUDED + +# include // std::max +# include +# include + +# ifndef YY_NULL +# if defined __cplusplus && 201103L <= __cplusplus +# define YY_NULL nullptr +# else +# define YY_NULL 0 +# endif +# endif + + +namespace PARSER { +/* Line 36 of location.cc */ +#line 57 "position.hh" + /// Abstract a position. + class position + { + public: + + /// Construct a position. + explicit position (std::string* f = YY_NULL, + unsigned int l = 1u, + unsigned int c = 1u) + : filename (f) + , line (l) + , column (c) + { + } + + + /// Initialization. + void initialize (std::string* fn = YY_NULL, + unsigned int l = 1u, + unsigned int c = 1u) + { + filename = fn; + line = l; + column = c; + } + + /** \name Line and Column related manipulators + ** \{ */ + /// (line related) Advance to the COUNT next lines. + void lines (int count = 1) + { + column = 1u; + line += count; + } + + /// (column related) Advance to the COUNT next columns. + void columns (int count = 1) + { + column = std::max (1u, column + count); + } + /** \} */ + + /// File name to which this position refers. + std::string* filename; + /// Current line number. + unsigned int line; + /// Current column number. + unsigned int column; + }; + + /// Add and assign a position. + inline position& + operator+= (position& res, const int width) + { + res.columns (width); + return res; + } + + /// Add two position objects. + inline const position + operator+ (const position& begin, const int width) + { + position res = begin; + return res += width; + } + + /// Add and assign a position. + inline position& + operator-= (position& res, const int width) + { + return res += -width; + } + + /// Add two position objects. + inline const position + operator- (const position& begin, const int width) + { + return begin + -width; + } + + /// Compare two position objects. + inline bool + operator== (const position& pos1, const position& pos2) + { + return (pos1.line == pos2.line + && pos1.column == pos2.column + && (pos1.filename == pos2.filename + || (pos1.filename && pos2.filename + && *pos1.filename == *pos2.filename))); + } + + /// Compare two position objects. + inline bool + operator!= (const position& pos1, const position& pos2) + { + return !(pos1 == pos2); + } + + /** \brief Intercept output stream redirection. + ** \param ostr the destination output stream + ** \param pos a reference to the position to redirect + */ + template + inline std::basic_ostream& + operator<< (std::basic_ostream& ostr, const position& pos) + { + if (pos.filename) + ostr << *pos.filename << ':'; + return ostr << pos.line << '.' << pos.column; + } + + +} // PARSER +/* Line 148 of location.cc */ +#line 172 "position.hh" +#endif /* !YY_PARSER_POSITION_HH_INCLUDED */ diff --git a/sources/parsers/auto/stack.hh b/sources/parsers/auto/stack.hh new file mode 100644 index 0000000..2ec6033 --- /dev/null +++ b/sources/parsers/auto/stack.hh @@ -0,0 +1,133 @@ +/* A Bison parser, made by GNU Bison 2.7. */ + +/* Stack handling for Bison parsers in C++ + + Copyright (C) 2002-2012 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/** + ** \file stack.hh + ** Define the PARSER::stack class. + */ + +#ifndef YY_PARSER_STACK_HH_INCLUDED +# define YY_PARSER_STACK_HH_INCLUDED + +# include + + +namespace PARSER { +/* Line 34 of stack.hh */ +#line 47 "stack.hh" + template > + class stack + { + public: + // Hide our reversed order. + typedef typename S::reverse_iterator iterator; + typedef typename S::const_reverse_iterator const_iterator; + + stack () : seq_ () + { + } + + stack (unsigned int n) : seq_ (n) + { + } + + inline + T& + operator [] (unsigned int i) + { + return seq_[i]; + } + + inline + const T& + operator [] (unsigned int i) const + { + return seq_[i]; + } + + inline + void + push (const T& t) + { + seq_.push_front (t); + } + + inline + void + pop (unsigned int n = 1) + { + for (; n; --n) + seq_.pop_front (); + } + + inline + unsigned int + height () const + { + return seq_.size (); + } + + inline const_iterator begin () const { return seq_.rbegin (); } + inline const_iterator end () const { return seq_.rend (); } + + private: + S seq_; + }; + + /// Present a slice of the top of a stack. + template > + class slice + { + public: + slice (const S& stack, unsigned int range) + : stack_ (stack) + , range_ (range) + { + } + + inline + const T& + operator [] (unsigned int i) const + { + return stack_[range_ - i]; + } + + private: + const S& stack_; + unsigned int range_; + }; + +} // PARSER +/* Line 116 of stack.hh */ +#line 132 "stack.hh" + +#endif /* !YY_PARSER_STACK_HH_INCLUDED */ diff --git a/sources/parsers/inc/DecimalNode.h b/sources/parsers/inc/DecimalNode.h new file mode 100644 index 0000000..5f10752 --- /dev/null +++ b/sources/parsers/inc/DecimalNode.h @@ -0,0 +1,270 @@ +/// @file parsers/inc/DecimalNode.h +/// +/// A set of classes for evaluating decimal nodes. +/// +/// @par Full Description +/// A set of classes for evaluating decimal nodes. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2018 vcdMaker team +/// +/// 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. + +#pragma once + +#include + +#include "ExpressionNode.h" +#include "ExpressionContext.h" + +namespace PARSER +{ + /// The class represents the constant node type. + class DNConstant : public ExpressionNode + { + /// The constatnt value. + SafeUInt m_Value; + + public: + /// Constructs a constant type node from a value. + /// + /// @param rExpContext The expression context. + /// @param value The constant value used to create the node. + DNConstant(ExpressionContext &rExpContext, uint64_t value) : + ExpressionNode(rExpContext), + m_Value(value) + { + } + + /// @copydoc ExpressionNode::EvaluateUint() + virtual SafeUInt EvaluateUint() const + { + return m_Value; + } + }; + + /// The class represents the constant node type based on a decimal string. + class DNDec : public ExpressionNode + { + /// The index to the regex group containing the decimal string. + size_t m_Index; + + public: + /// Constructs a constant type node based on a decimal string. + /// + /// @param rExpContext The expression context. + /// @param rString The string containing information about the decimal string index in the parsed regex group. + DNDec(ExpressionContext &rExpContext, std::string &rString) : + ExpressionNode(rExpContext) + { + // Format of the string: dec(position) + m_Index = static_cast(std::strtoull(std::string(rString, FIRST_STRING_CHARACTER_POS, + rString.length() - GROUP_WRAPPER_LENGTH).c_str(), nullptr, 10)); + } + + /// @copydoc ExpressionNode::EvaluateUint() + virtual SafeUInt EvaluateUint() const + { + return std::strtoull(m_rContext.GetElement(m_Index).c_str(), nullptr, 10); + } + }; + + /// The class represents the constant node type based on a hexadecimal string. + class DNHex : public ExpressionNode + { + /// The index to the regex group containing the hexadecimal string. + size_t m_Index; + + public: + /// Constructs a constant type node based on a hexadecimal string. + /// + /// @param rExpContext The expression context. + /// @param rString The string containing information about the hexadecimal string index in the parsed regex group. + DNHex(ExpressionContext &rExpContext, std::string &rString) : + ExpressionNode(rExpContext) + { + // Format of the string: hex(position) + m_Index = static_cast(std::strtoull(std::string(rString, FIRST_STRING_CHARACTER_POS, + rString.length() - GROUP_WRAPPER_LENGTH).c_str(), nullptr, 10)); + } + + /// @copydoc ExpressionNode::EvaluateUint() + virtual SafeUInt EvaluateUint() const + { + return std::strtoull(m_rContext.GetElement(m_Index).c_str(), nullptr, 16); + } + }; + + /// The class represents the constant type of nodes based on a log line number. + class DNLine : public ExpressionNode + { + /// The constant value returned. + SafeUInt m_Value; + + public: + /// Constructa a constant node from a value. + DNLine(ExpressionContext &expContext) + : ExpressionNode(expContext), m_Value(0) + { + } + + /// @copydoc ExpressionNode::EvaluateUint() + virtual SafeUInt EvaluateUint() const + { + return m_rContext.GetLineNo(); + } + }; + + /// The class represents the addition node type. + class DNAdd : public ExpressionNode + { + /// Left calculation operand. + ExpressionNode *m_pLeft; + + /// Right calculation operand. + ExpressionNode *m_pRight; + + public: + /// Constructs a sum of nodes. + /// + /// @param rExpContext The expression context. + /// @param pLeft The pointer to the left node. + /// @param pRight The pointer to the right node. + DNAdd(ExpressionContext &rExpContext, ExpressionNode *pLeft, ExpressionNode *pRight) + : ExpressionNode(rExpContext), m_pLeft(pLeft), m_pRight(pRight) + { + } + + /// @copydoc ExpressionNode::~ExpressionNode() + virtual ~DNAdd() + { + delete m_pLeft; + delete m_pRight; + } + + /// @copydoc ExpressionNode::EvaluateUint() + virtual SafeUInt EvaluateUint() const + { + return m_pLeft->EvaluateUint() + m_pRight->EvaluateUint(); + } + }; + + /// The class represents the subtraction node type. + class DNSubtract : public ExpressionNode + { + /// Left calculation operand. + ExpressionNode *m_pLeft; + + /// Right calculation operand. + ExpressionNode *m_pRight; + + public: + /// Constructs a substraction of nodes. + /// + /// @param rExpContext The expression context. + /// @param pLeft The pointer to the left node. + /// @param pRight The pointer to the right node. + DNSubtract(ExpressionContext &rExpContext, ExpressionNode *pLeft, ExpressionNode *pRight) + : ExpressionNode(rExpContext), m_pLeft(pLeft), m_pRight(pRight) + { + } + + /// @copydoc ExpressionNode::~ExpressionNode() + virtual ~DNSubtract() + { + delete m_pLeft; + delete m_pRight; + } + + /// @copydoc ExpressionNode::EvaluateUint() + virtual SafeUInt EvaluateUint() const + { + return m_pLeft->EvaluateUint() - m_pRight->EvaluateUint(); + } + }; + + /// The class represents the multiplication node type. + class DNMultiply : public ExpressionNode + { + /// Left calculation operand. + ExpressionNode *m_pLeft; + + /// Right calculation operand. + ExpressionNode *m_pRight; + + public: + /// Constructs a multiplication of nodes. + /// + /// @param rExpContext The expression context. + /// @param pLeft The pointer to the left node. + /// @param pRight The pointer to the right node. + DNMultiply(ExpressionContext &rExpContext, ExpressionNode *pLeft, ExpressionNode *pRight) + : ExpressionNode(rExpContext), m_pLeft(pLeft), m_pRight(pRight) + { + } + + /// @copydoc ExpressionNode::~ExpressionNode() + virtual ~DNMultiply() + { + delete m_pLeft; + delete m_pRight; + } + + /// @copydoc ExpressionNode::EvaluateUint() + virtual SafeUInt EvaluateUint() const + { + return m_pLeft->EvaluateUint() * m_pRight->EvaluateUint(); + } + }; + + /// The class represents the division node type. + class DNDivide : public ExpressionNode + { + /// Left calculation operand. + ExpressionNode *m_pLeft; + + /// Right calculation operand. + ExpressionNode *m_pRight; + + public: + /// Constructs a division of nodes. + /// + /// @param rExpContext The expression context. + /// @param pLeft The pointer to the left node. + /// @param pRight The pointer to the right node. + DNDivide(ExpressionContext &rExpContext, ExpressionNode *pLeft, ExpressionNode *pRight) + : ExpressionNode(rExpContext), m_pLeft(pLeft), m_pRight(pRight) + { + } + + /// @copydoc ExpressionNode::~ExpressionNode() + virtual ~DNDivide() + { + delete m_pLeft; + delete m_pRight; + } + + /// @copydoc ExpressionNode::EvaluateUint() + virtual SafeUInt EvaluateUint() const + { + return m_pLeft->EvaluateUint() / m_pRight->EvaluateUint(); + } + }; +} diff --git a/sources/parsers/inc/DecimalScanner.h b/sources/parsers/inc/DecimalScanner.h new file mode 100644 index 0000000..2e236bf --- /dev/null +++ b/sources/parsers/inc/DecimalScanner.h @@ -0,0 +1,87 @@ +/// @file parsers/inc/DecimalScanner.h +/// +/// A user defined decimal scanner class. +/// +/// @par Full Description +/// A user defined decimal scanner class. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2018 vcdMaker team +/// +/// 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. + +#pragma once + +// Flex expects the signature of yylex to be defined in the macro YY_DECL, and +// the C++ parser expects it to be declared. We can factor both as follows. + +#ifndef YY_DECL +/// YY_DECL parser macro. +#define YY_DECL \ + PARSER::DecimalParser::token_type \ + PARSER::DecimalScanner::lex( \ + PARSER::DecimalParser::semantic_type* yylval,\ + PARSER::DecimalParser::location_type* yylloc \ + ) +#endif + +#ifndef yyFlexLexer +/// Decimal lexer type. +#define yyFlexLexer DecimalFlexLexer +#include +#endif + +#include "DecimalParser.hpp" + +namespace PARSER +{ + + /** DecimalScanner is a derived class to add some extra function to the scanner + * class. Flex itself creates a class named yyFlexLexer, which is renamed using + * macros to DecimalFlexLexer. However we change the context of the generated + * yylex() function to be contained within the DecimalScanner class. This is required + * because the yylex() defined in DecimalFlexLexer has no parameters. */ + class DecimalScanner : public DecimalFlexLexer + { + public: + /** Create a new scanner object. The streams arg_yyin and arg_yyout default + * to cin and cout, but that assignment is only made when initializing in + * yylex(). */ + DecimalScanner(std::istream *arg_yyin = 0, + std::ostream *arg_yyout = 0); + + /** Required for virtual functions */ + virtual ~DecimalScanner(); + + /** This is the main lexing function. It is generated by flex according to + * the macro declaration YY_DECL above. The generated bison parser then + * calls this virtual function to fetch new tokens. */ + virtual DecimalParser::token_type lex( + DecimalParser::semantic_type *yylval, + DecimalParser::location_type *yylloc + ); + + #if defined(PARSER_DEBUG) + /** Enable debug output (via arg_yyout) if compiled into the scanner. */ + void set_debug(bool b); + #endif + }; + +} diff --git a/sources/parsers/inc/Evaluator.h b/sources/parsers/inc/Evaluator.h new file mode 100644 index 0000000..f222461 --- /dev/null +++ b/sources/parsers/inc/Evaluator.h @@ -0,0 +1,134 @@ +/// @file parsers/inc/Evaluator.h +/// +/// The class provides means for evaluating user format expressions. +/// +/// @par Full Description +/// The class provides means for evaluating user format expressions. +/// It is a facade to Flex/Bison generated expression evaluators. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2018 vcdMaker team +/// +/// 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. + +#pragma once + +#include "ExpressionNode.h" +#include "ExpressionContext.h" + +namespace PARSER +{ + + // The forward declaration of the expression context class. + //class ExpressionContext; + + /// The expression evaluator class. + + /// The expression evaluator class. + class Evaluator + { + public: + + /// The evaluator constructor. + /// + /// It creates the expression evaluator. + /// + /// @param rSourceName An expression source name. + Evaluator(const std::string &rSourceName); + + /// Parses the input decimal string. + /// + /// @param inString The input string. + /// @return True if successfully parsed. + bool ParseDecimalString(const std::string &inString); + + /// Parses the input float string. + /// + /// @param inString The input string. + /// @return True if successfully parsed. + bool ParseFloatString(const std::string &inString); + + /// Parses the input string string. + /// + /// @param inString The input string. + /// @return True if successfully parsed. + bool ParseStringString(const std::string &inString); + + /// Set the expression context. + /// + /// The expression is fixed. It is the expression context that + /// changes over time and must be set with new values. + /// + /// @param pGroups The pointer to the parsed regex groups. + /// @param lineNo The log line number. + void SetContext(const std::smatch *pGroups, uint64_t lineNo) const; + + /// Returns the calculation context. + /// + /// @return The calculation context. + ExpressionContext &GetContext() const; + + /// Evaluates the expression expecting the 'double' value. + double EvaluateDouble() const; + + /// Evaluates the expression expecting the 'uint' value. + uint64_t EvaluateUint() const; + + /// Evaluates the expression expecting the 'string' value. + std::string EvaluateString() const; + + /// The lexer pointer must be a public interface as it is + /// the expected lexer interface. + + /// The decimal(vector) lexer. + class DecimalScanner *m_pDecimalLexer; + + /// The float lexer. + class FloatScanner *m_pFloatLexer; + + /// The string lexer. + class StringScanner *m_pStringLexer; + + private: + /// Parses the input decimal stream. + /// + /// @param inStream The input stream. + /// @return True if successfully parsed. + bool ParseDecimalStream(std::istream &inStream); + + /// Parses the input float stream. + /// + /// @param inStream The input stream. + /// @return True if successfully parsed. + bool ParseFloatStream(std::istream &inStream); + + /// Parses the input string stream. + /// + /// @param inStream The input stream. + /// @return True if successfully parsed. + bool ParseStringStream(std::istream &inStream); + + /// The expression source name. + const std::string &m_rSourceName; + + /// Calculation context. + mutable ExpressionContext m_Context; + }; +} diff --git a/sources/parsers/inc/ExpressionContext.h b/sources/parsers/inc/ExpressionContext.h new file mode 100644 index 0000000..2489635 --- /dev/null +++ b/sources/parsers/inc/ExpressionContext.h @@ -0,0 +1,130 @@ +/// @file parsers/inc/ExpressionContext.h +/// +/// The class provides the context for calculating the expressions value. +/// +/// @par Full Description +/// The class provides the context for calculating the expressions value. +/// These are the regex groups as well as the log line number. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2018 vcdMaker team +/// +/// 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. + +#pragma once + +#include +#include + +#include "ExpressionNode.h" + +namespace PARSER +{ + /// The class provides the context for calculating the expressions value. + + /// The expression calculation context class. + class ExpressionContext + { + public: + + /// The expression context constructor. + /// + /// It creates the expression context which is later used during + /// calculating the expression's value. + /// + /// @param pGroups The pointer to the parsed regex groups. + /// @param lineNo The log line number. + ExpressionContext(const std::smatch *pGroups, uint64_t lineNo) : + m_pGroups(pGroups), + m_LineNo(lineNo) + {} + + /// Free the expression. + ~ExpressionContext() + { + delete m_pExpression; + } + + /// Set the expression context. + /// + /// The expression is fixed. It is the expression context that + /// changes over time and must be set with new values. + /// + /// @param pGroups The pointer to the parsed regex groups. + /// @param lineNo The log line number. + void Set(const std::smatch *pGroups, uint64_t lineNo) const + { + m_pGroups = pGroups; + m_LineNo = lineNo; + } + + /// Return the string for the given regex group. + /// + /// The string related to the regex group specified + /// by the index is returned. + /// + /// @param index The index of the regex group content to be returned. + /// @return String representing the given regex group. + std::string GetElement(size_t index) const + { + return (*m_pGroups)[index].str(); + } + + /// Return the log line number. + /// + /// The log line number is returned. + /// + /// @return Positive integer representing the log line number. + uint64_t GetLineNo() const + { + return m_LineNo; + } + + /// Set the expression reference. + /// + /// The expression reference is set by parser here. + /// + /// @param pExpression The pointer to the parsed expression. + void SetExpression(PARSER::ExpressionNode *pExpression) + { + m_pExpression = pExpression; + } + + /// Return the pointer to the expression. + /// + /// The expression pointer is returned. + /// + /// @return The expression pointer. + ExpressionNode *GetExpression() const + { + return m_pExpression; + } + + private: + /// A pointer to the regex groups (the context of the expression). + const mutable std::smatch *m_pGroups; + + /// The log line number. + mutable uint64_t m_LineNo; + + /// The expression. + ExpressionNode *m_pExpression; + }; +} diff --git a/sources/parsers/inc/ExpressionNode.h b/sources/parsers/inc/ExpressionNode.h new file mode 100644 index 0000000..702592f --- /dev/null +++ b/sources/parsers/inc/ExpressionNode.h @@ -0,0 +1,92 @@ +/// @file parsers/inc/ExpressionNode.h +/// +/// The base expression node class. +/// +/// @par Full Description +/// The base expression node class. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2018 vcdMaker team +/// +/// 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. + +#pragma once + +#include + +#include "SafeUInt.h" + +namespace PARSER +{ + /// Forward declaration of the expression context class. + class ExpressionContext; + + /// The abstract expression node. + /// + /// The class defines the expression node interface. + class ExpressionNode + { + public: + + /// Constructs the expression node. + /// + /// The expression context constructor. + /// @param rExpContext The expression context. + ExpressionNode(ExpressionContext &rExpContext) : + m_rContext(rExpContext) + {} + + /// Destroys the expression node. + virtual ~ExpressionNode() + { + } + + /// Evaluates the complete 'uint' tree and returns the expression value. + virtual SafeUInt EvaluateUint() const + { + /// @todo Throw exception + return 0; + } + + /// Evaluates the complete 'double' tree and returns the expression value. + virtual double EvaluateDouble() const + { + /// @todo Throw exception + return 0.0; + } + + /// Evaluates the complete 'double' tree and returns the expression value. + virtual std::string EvaluateString() const + { + /// @todo Throw exception + return ""; + } + + protected: + /// The beginning of the index string. + const size_t FIRST_STRING_CHARACTER_POS = 4; + + /// The length of the command and parentheses. E.g. 'dec()'. + const size_t GROUP_WRAPPER_LENGTH = 5; + + /// The expression context. + ExpressionContext &m_rContext; + }; +} diff --git a/sources/parsers/inc/FloatNode.h b/sources/parsers/inc/FloatNode.h new file mode 100644 index 0000000..e499370 --- /dev/null +++ b/sources/parsers/inc/FloatNode.h @@ -0,0 +1,253 @@ +/// @file parsers/inc/FloatNode.h +/// +/// A set of classes for evaluating float nodes. +/// +/// @par Full Description +/// A set of classes for evaluating float nodes. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2018 vcdMaker team +/// +/// 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. + +#pragma once + +#include + +#include "ExpressionNode.h" +#include "ExpressionContext.h" + +namespace PARSER +{ + /// The class represents the constant node type. + class FNConstant : public ExpressionNode + { + /// The constatnt value. + double m_Value; + + public: + /// Constructs a constant type node from a value. + /// + /// @param rExpContext The expression context. + /// @param value The constant value used to create the node. + FNConstant(ExpressionContext &rExpContext, double value) : + ExpressionNode(rExpContext), + m_Value(value) + { + } + + /// @copydoc ExpressionNode::EvaluateDouble() + virtual double EvaluateDouble() const + { + return m_Value; + } + }; + + /// The class represents the constant node type based on a float string. + class FNFlt : public ExpressionNode + { + /// The index to the regex group containing the decimal string. + size_t m_Index; + + public: + /// Constructs a constant type node based on a float string. + /// + /// @param rExpContext The expression context. + /// @param rString The string containing information about the decimal string index in the parsed regex group. + FNFlt(ExpressionContext &rExpContext, std::string &rString) : + ExpressionNode(rExpContext) + { + // Format of the string: flt(position) + m_Index = static_cast(std::strtoull(std::string(rString, FIRST_STRING_CHARACTER_POS, + rString.length() - GROUP_WRAPPER_LENGTH).c_str(), nullptr, 10)); + } + + /// @copydoc ExpressionNode::EvaluateDouble() + virtual double EvaluateDouble() const + { + return std::stod(m_rContext.GetElement(m_Index), nullptr); + } + }; + + /// The class represents the negate node type. + class FNNegate : public ExpressionNode + { + // Calculation subtree. + ExpressionNode *m_pNode; + + public: + /// Constructs a negation of the node. + /// + /// @param rExpContext The expression context. + /// @param pNode The pointer to the original node. + FNNegate(ExpressionContext &rExpContext, ExpressionNode *pNode) + : ExpressionNode(rExpContext), m_pNode(pNode) + { + } + + /// @copydoc ExpressionNode::~ExpressionNode() + virtual ~FNNegate() + { + delete m_pNode; + } + + /// @copydoc ExpressionNode::EvaluateDouble() + virtual double EvaluateDouble() const + { + return -m_pNode->EvaluateDouble(); + } + }; + + /// The class represents the addition node type. + class FNAdd : public ExpressionNode + { + /// Left calculation operand. + ExpressionNode *m_pLeft; + + /// Right calculation operand. + ExpressionNode *m_pRight; + + public: + /// Constructs a sum of nodes. + /// + /// @param rExpContext The expression context. + /// @param pLeft The pointer to the left node. + /// @param pRight The pointer to the right node. + FNAdd(ExpressionContext &rExpContext, ExpressionNode *pLeft, ExpressionNode *pRight) + : ExpressionNode(rExpContext), m_pLeft(pLeft), m_pRight(pRight) + { + } + + /// @copydoc ExpressionNode::~ExpressionNode() + virtual ~FNAdd() + { + delete m_pLeft; + delete m_pRight; + } + + /// @copydoc ExpressionNode::EvaluateDouble() + virtual double EvaluateDouble() const + { + return m_pLeft->EvaluateDouble() + m_pRight->EvaluateDouble(); + } + }; + + /// The class represents the subtraction node type. + class FNSubtract : public ExpressionNode + { + /// Left calculation operand. + ExpressionNode *m_pLeft; + + /// Right calculation operand. + ExpressionNode *m_pRight; + + public: + /// Constructs a substraction of nodes. + /// + /// @param rExpContext The expression context. + /// @param pLeft The pointer to the left node. + /// @param pRight The pointer to the right node. + FNSubtract(ExpressionContext &rExpContext, ExpressionNode *pLeft, ExpressionNode *pRight) + : ExpressionNode(rExpContext), m_pLeft(pLeft), m_pRight(pRight) + { + } + + /// @copydoc ExpressionNode::~ExpressionNode() + virtual ~FNSubtract() + { + delete m_pLeft; + delete m_pRight; + } + + /// @copydoc ExpressionNode::EvaluateDouble() + virtual double EvaluateDouble() const + { + return m_pLeft->EvaluateDouble() - m_pRight->EvaluateDouble(); + } + }; + + /// The class represents the multiplication node type. + class FNMultiply : public ExpressionNode + { + /// Left calculation operand. + ExpressionNode *m_pLeft; + + /// Right calculation operand. + ExpressionNode *m_pRight; + + public: + /// Constructs a multiplication of nodes. + /// + /// @param rExpContext The expression context. + /// @param pLeft The pointer to the left node. + /// @param pRight The pointer to the right node. + FNMultiply(ExpressionContext &rExpContext, ExpressionNode *pLeft, ExpressionNode *pRight) + : ExpressionNode(rExpContext), m_pLeft(pLeft), m_pRight(pRight) + { + } + + /// @copydoc ExpressionNode::~ExpressionNode() + virtual ~FNMultiply() + { + delete m_pLeft; + delete m_pRight; + } + + /// @copydoc ExpressionNode::EvaluateDouble() + virtual double EvaluateDouble() const + { + return m_pLeft->EvaluateDouble() * m_pRight->EvaluateDouble(); + } + }; + + /// The class represents the division node type. + class FNDivide : public ExpressionNode + { + /// Left calculation operand. + ExpressionNode *m_pLeft; + + /// Right calculation operand. + ExpressionNode *m_pRight; + + public: + /// Constructs a division of nodes. + /// + /// @param rExpContext The expression context. + /// @param pLeft The pointer to the left node. + /// @param pRight The pointer to the right node. + FNDivide(ExpressionContext &rExpContext, ExpressionNode *pLeft, ExpressionNode *pRight) + : ExpressionNode(rExpContext), m_pLeft(pLeft), m_pRight(pRight) + { + } + + /// @copydoc ExpressionNode::~ExpressionNode() + virtual ~FNDivide() + { + delete m_pLeft; + delete m_pRight; + } + + /// @copydoc ExpressionNode::EvaluateDouble() + virtual double EvaluateDouble() const + { + return m_pLeft->EvaluateDouble() / m_pRight->EvaluateDouble(); + } + }; +} diff --git a/sources/parsers/inc/FloatScanner.h b/sources/parsers/inc/FloatScanner.h new file mode 100644 index 0000000..b5683b5 --- /dev/null +++ b/sources/parsers/inc/FloatScanner.h @@ -0,0 +1,89 @@ +/// @file parsers/inc/FloatScanner.h +/// +/// A user defined decimal scanner class. +/// +/// @par Full Description +/// A user defined decimal scanner class. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2018 vcdMaker team +/// +/// 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. + +#pragma once + + + +// Flex expects the signature of yylex to be defined in the macro YY_DECL, and +// the C++ parser expects it to be declared. We can factor both as follows. + +#ifndef YY_DECL +/// YY_DECL parser macro. +#define YY_DECL \ + PARSER::FloatParser::token_type \ + PARSER::FloatScanner::lex( \ + PARSER::FloatParser::semantic_type* yylval,\ + PARSER::FloatParser::location_type* yylloc \ + ) +#endif + +#ifndef yyFlexLexer +/// Float lexer type. +#define yyFlexLexer FloatFlexLexer +#include +#endif + +#include "FloatParser.hpp" + +namespace PARSER +{ + + /** DecimalScanner is a derived class to add some extra function to the scanner + * class. Flex itself creates a class named yyFlexLexer, which is renamed using + * macros to DecimalFlexLexer. However we change the context of the generated + * yylex() function to be contained within the DecimalScanner class. This is required + * because the yylex() defined in DecimalFlexLexer has no parameters. */ + class FloatScanner : public FloatFlexLexer + { + public: + /** Create a new scanner object. The streams arg_yyin and arg_yyout default + * to cin and cout, but that assignment is only made when initializing in + * yylex(). */ + FloatScanner(std::istream *arg_yyin = 0, + std::ostream *arg_yyout = 0); + + /** Required for virtual functions */ + virtual ~FloatScanner(); + + /** This is the main lexing function. It is generated by flex according to + * the macro declaration YY_DECL above. The generated bison parser then + * calls this virtual function to fetch new tokens. */ + virtual FloatParser::token_type lex( + FloatParser::semantic_type *yylval, + FloatParser::location_type *yylloc + ); + + #if defined(PARSER_DEBUG) + /** Enable debug output (via arg_yyout) if compiled into the scanner. */ + void set_debug(bool b); + #endif + }; + +} diff --git a/sources/parsers/inc/StringNode.h b/sources/parsers/inc/StringNode.h new file mode 100644 index 0000000..f9ce577 --- /dev/null +++ b/sources/parsers/inc/StringNode.h @@ -0,0 +1,122 @@ +/// @file parsers/inc/StringNode.h +/// +/// A set of classes for evaluating string nodes. +/// +/// @par Full Description +/// A set of classes for evaluating string nodes. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2018 vcdMaker team +/// +/// 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. + +#pragma once + +#include + +#include "ExpressionNode.h" +#include "ExpressionContext.h" + +namespace PARSER +{ + /// The class represents the string constant node type. + class SNConstant : public ExpressionNode + { + /// The constatnt value. + std::string &m_rString; + + public: + /// Constructs a constant type node from a value. + /// + /// @param rExpContext The expression context. + /// @param value The constant value used to create the node. + SNConstant(ExpressionContext &rExpContext, std::string &value) : + ExpressionNode(rExpContext), + m_rString(value) + { + } + + /// @copydoc ExpressionNode::EvaluateString() + virtual std::string EvaluateString() const + { + return std::string(m_rString, 1, m_rString.length() - 2); + } + }; + + /// The class represents the string node. + class SNTxt : public ExpressionNode + { + /// The index to the regex group containing the decimal string. + size_t m_Index; + + public: + /// Constructs a string node. + /// + /// @param rExpContext The expression context. + /// @param rString The string containing information about the string index in the parsed regex group. + SNTxt(ExpressionContext &rExpContext, std::string &rString) : + ExpressionNode(rExpContext) + { + // Format of the string: txt(position) + m_Index = static_cast(std::strtoull(std::string(rString, FIRST_STRING_CHARACTER_POS, + rString.length() - GROUP_WRAPPER_LENGTH).c_str(), nullptr, 10)); + } + + /// @copydoc ExpressionNode::EvaluateString() + virtual std::string EvaluateString() const + { + return m_rContext.GetElement(m_Index); + } + }; + + /// The class represents the addition node type. + class SNAdd : public ExpressionNode + { + /// Left calculation operand. + ExpressionNode *m_pLeft; + + /// Right calculation operand. + ExpressionNode *m_pRight; + + public: + /// Constructs a sum of nodes. + /// + /// @param rExpContext The expression context. + /// @param pLeft The pointer to the left node. + /// @param pRight The pointer to the right node. + SNAdd(ExpressionContext &rExpContext, ExpressionNode *pLeft, ExpressionNode *pRight) + : ExpressionNode(rExpContext), m_pLeft(pLeft), m_pRight(pRight) + { + } + + /// @copydoc ExpressionNode::~ExpressionNode() + virtual ~SNAdd() + { + delete m_pLeft; + delete m_pRight; + } + + /// @copydoc ExpressionNode::EvaluateString() + virtual std::string EvaluateString() const + { + return m_pLeft->EvaluateString() + m_pRight->EvaluateString(); + } + }; +} diff --git a/sources/parsers/inc/StringScanner.h b/sources/parsers/inc/StringScanner.h new file mode 100644 index 0000000..c27b350 --- /dev/null +++ b/sources/parsers/inc/StringScanner.h @@ -0,0 +1,87 @@ +/// @file parsers/inc/StringScanner.h +/// +/// A user defined string scanner class. +/// +/// @par Full Description +/// A user defined string scanner class. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2018 vcdMaker team +/// +/// 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. + +#pragma once + +// Flex expects the signature of yylex to be defined in the macro YY_DECL, and +// the C++ parser expects it to be declared. We can factor both as follows. + +#ifndef YY_DECL +/// YY_DECL parser macro. +#define YY_DECL \ + PARSER::StringParser::token_type \ + PARSER::StringScanner::lex( \ + PARSER::StringParser::semantic_type* yylval,\ + PARSER::StringParser::location_type* yylloc \ + ) +#endif + +#ifndef yyFlexLexer +/// String lexer type. +#define yyFlexLexer StringFlexLexer +#include +#endif + +#include "StringParser.hpp" + +namespace PARSER +{ + + /** StringScanner is a derived class to add some extra function to the scanner + * class. Flex itself creates a class named yyFlexLexer, which is renamed using + * macros to StringFlexLexer. However we change the context of the generated + * yylex() function to be contained within the StringScanner class. This is required + * because the yylex() defined in DecimalFlexLexer has no parameters. */ + class StringScanner : public StringFlexLexer + { + public: + /** Create a new scanner object. The streams arg_yyin and arg_yyout default + * to cin and cout, but that assignment is only made when initializing in + * yylex(). */ + StringScanner(std::istream *arg_yyin = 0, + std::ostream *arg_yyout = 0); + + /** Required for virtual functions */ + virtual ~StringScanner(); + + /** This is the main lexing function. It is generated by flex according to + * the macro declaration YY_DECL above. The generated bison parser then + * calls this virtual function to fetch new tokens. */ + virtual StringParser::token_type lex( + StringParser::semantic_type *yylval, + StringParser::location_type *yylloc + ); + + #if defined(PARSER_DEBUG) + /** Enable debug output (via arg_yyout) if compiled into the scanner. */ + void set_debug(bool b); + #endif + }; + +} diff --git a/sources/parsers/model/DecimalParser.yy b/sources/parsers/model/DecimalParser.yy new file mode 100644 index 0000000..f80761a --- /dev/null +++ b/sources/parsers/model/DecimalParser.yy @@ -0,0 +1,196 @@ +/** Contains the decimal expression Bison parser source. + + Copyright (c) 2018 vcdMaker team + 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. +*/ + +%{ /*** C/C++ Declarations ***/ + +#include "ExpressionNode.h" +#include "DecimalNode.h" + +%} + +/*** yacc/bison Declarations ***/ + +/* Require bison 2.3 or later */ +%require "2.3" + +/* Add debug output code to generated parser. disable this for release versions. */ +/* %debug */ + +/* Start symbol is named "start". */ +%start start + +/* Write out a header file containing the token defines. */ +%defines + +/* Use newer C++ skeleton file. */ +%skeleton "lalr1.cc" + +/* Namespace to enclose parser in. */ +%name-prefix="PARSER" + +/* Set the parser's class identifier. */ +%define "parser_class_name" "DecimalParser" + +/* Keep track of the current position within the input. */ +%locations + +/* The evaluator is passed by reference to the parser and to the scanner. This + * provides a simple but effective pure interface, not relying on global + * variables. */ +%parse-param { class Evaluator& evaluator } + +/* Verbose error messages. */ +%error-verbose + + /*** START - Specify the grammar's tokens ***/ + +%union { + uint64_t integer; + std::string* pString; + class PARSER::ExpressionNode* pExprNode; +} + +%token END 0 "end of stream" +%token INTEGER "integer" +%token HEX "hex" +%token DEC "dec" +%token LINE "line" + + +%type constant variable atomexpr unaryexpr mulexpr addexpr expr + +%destructor { delete $$; } HEX +%destructor { delete $$; } DEC +%destructor { delete $$; } LINE +%destructor { delete $$; } constant +%destructor { delete $$; } variable +%destructor { delete $$; } atomexpr +%destructor { delete $$; } unaryexpr +%destructor { delete $$; } mulexpr +%destructor { delete $$; } addexpr +%destructor { delete $$; } expr + + /*** END - Specify the grammar's tokens ***/ + +%{ + +#include "evaluator.h" +#include "DecimalScanner.h" + +/* this "connects" the bison parser in the driver to the flex scanner class + * object. it defines the yylex() function call to pull the next token from the + * current lexer object of the driver context. */ +#undef yylex +#define yylex evaluator.m_pDecimalLexer->lex + +%} + +%% /*** Grammar Rules ***/ + +constant : INTEGER + { + $$ = new DNConstant(evaluator.GetContext(), $1); + } + +variable : HEX + { + $$ = new DNHex(evaluator.GetContext(), *$1); + delete $1; + } + | DEC + { + $$ = new DNDec(evaluator.GetContext(), *$1); + delete $1; + } + | LINE + { + $$ = new DNLine(evaluator.GetContext()); + delete $1; + } + +atomexpr : constant + { + $$ = $1; + } + | variable + { + $$ = $1; + } + | '(' expr ')' + { + $$ = $2; + } + +unaryexpr : atomexpr + { + $$ = $1; + } + | '+' atomexpr + { + $$ = $2; + } + +mulexpr : unaryexpr + { + $$ = $1; + } + | mulexpr '*' unaryexpr + { + $$ = new DNMultiply(evaluator.GetContext(), $1, $3); + } + | mulexpr '/' unaryexpr + { + $$ = new DNDivide(evaluator.GetContext(), $1, $3); + } + +addexpr : mulexpr + { + $$ = $1; + } + | addexpr '+' mulexpr + { + $$ = new DNAdd(evaluator.GetContext(), $1, $3); + } + | addexpr '-' mulexpr + { + $$ = new DNSubtract(evaluator.GetContext(), $1, $3); + } + +expr : addexpr + { + $$ = $1; + } + + +start : /* empty */ + | start expr END + { + evaluator.GetContext().SetExpression($2); + } + +%% /*** Additional Code ***/ + +void PARSER::DecimalParser::error(const DecimalParser::location_type& l, + const std::string& m) +{ + std::cout << "Error: " << m << '\n'; +} diff --git a/sources/parsers/model/DecimalScanner.ll b/sources/parsers/model/DecimalScanner.ll new file mode 100644 index 0000000..0c25096 --- /dev/null +++ b/sources/parsers/model/DecimalScanner.ll @@ -0,0 +1,156 @@ +/** Define the decimal expression Flex lexical scanner. + + Copyright (c) 2018 vcdMaker team + 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. +*/ + +%{ /*** C/C++ Declarations ***/ + +#include "DecimalNode.h" +#include "DecimalScanner.h" + +/* Import the parser's token type into a local typedef. */ +typedef PARSER::DecimalParser::token token; +typedef PARSER::DecimalParser::token_type token_type; + +/* By default yylex returns int, we use token_type. Unfortunately yyterminate + * by default returns 0, which is not of token_type. */ +#define yyterminate() return token::END + +/* This disables inclusion of unistd.h, which is not available under Visual C++ + * on Win32. The C++ scanner uses STL streams instead. */ +#define YY_NO_UNISTD_H + +%} + +/*** Flex Declarations and Options ***/ + +/* Enable c++ scanner class generation. */ +%option c++ + +/* Change the name of the scanner class. Results in "DecimalFlexLexer". */ +%option prefix="Decimal" + +/* The manual says "somewhat more optimized". */ +%option batch + +/* Enable scanner to generate debug output. disable this for release versions. */ +/* %option debug */ + +/* No support for include files is planned. */ +%option yywrap nounput + +/* Let the scanner be fast. */ +%option full + +/* The following paragraph suffices to track locations accurately. Each time + * yylex is invoked, the begin position is moved onto the end position. */ +%{ +#define YY_USER_ACTION yylloc->columns(yyleng); +%} + +%% /*** Regular Expressions Part ***/ + + /* Code to place at the beginning of yylex(). */ +%{ + // reset location + yylloc->step(); +%} + + /*** Lexer rules ***/ + +[0-9]+ { + yylval->integer = atoi(yytext); + return token::INTEGER; +} + +hex\([ ]*[0-9]+[ ]*\) { + yylval->pString = new std::string(yytext, yyleng); + return token::HEX; +} + +dec\([ ]*[0-9]+[ ]*\) { + yylval->pString = new std::string(yytext, yyleng); + return token::DEC; +} + +line\([ ]*\) { + yylval->pString = new std::string(yytext, yyleng); + return token::LINE; +} + + /* gobble up white-spaces */ +[ \t\r]+ { + yylloc->step(); +} + + /* pass all other characters up to bison */ +. { + return static_cast(*yytext); +} + + /*** End of lexer rules ***/ + +%% /*** Additional Code ***/ + +namespace PARSER { + +DecimalScanner::DecimalScanner(std::istream* in, + std::ostream* out) + : DecimalFlexLexer(in, out) +{ +} + +DecimalScanner::~DecimalScanner() +{ +} + +/* +void DecimalScanner::set_debug(bool b) +{ + yy_flex_debug = b; +} +*/ + +} + +/* This implementation of DecimalFlexLexer::yylex() is required to fill the + * vtable of the class ExampleFlexLexer. We define the scanner's main yylex + * function via YY_DECL to reside in the Scanner class instead. */ + +#ifdef yylex +#undef yylex +#endif + +int DecimalFlexLexer::yylex() +{ + std::cerr << "in DecimalFlexLexer::yylex() !" << std::endl; + return 0; +} + +/* When the scanner receives an end-of-file indication from YY_INPUT, it then + * checks the yywrap() function. If yywrap() returns false (zero), then it is + * assumed that the function has gone ahead and set up `yyin' to point to + * another input file, and scanning continues. If it returns true (non-zero), + * then the scanner terminates, returning 0 to its caller. */ + +int DecimalFlexLexer::yywrap() +{ + return 1; +} diff --git a/sources/parsers/model/FloatParser.yy b/sources/parsers/model/FloatParser.yy new file mode 100644 index 0000000..05728a3 --- /dev/null +++ b/sources/parsers/model/FloatParser.yy @@ -0,0 +1,185 @@ +/** Contains the float expression Bison parser source. + + Copyright (c) 2018 vcdMaker team + 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. +*/ + +%{ /*** C/C++ Declarations ***/ + +#include "ExpressionNode.h" +#include "FloatNode.h" + +%} + +/*** yacc/bison Declarations ***/ + +/* Require bison 2.3 or later */ +%require "2.3" + +/* Add debug output code to generated parser. disable this for release versions. */ +/* %debug */ + +/* Start symbol is named "start". */ +%start start + +/* Write out a header file containing the token defines. */ +%defines + +/* Use newer C++ skeleton file. */ +%skeleton "lalr1.cc" + +/* Namespace to enclose parser in. */ +%name-prefix="PARSER" + +/* Set the parser's class identifier. */ +%define "parser_class_name" "FloatParser" + +/* Keep track of the current position within the input. */ +%locations + +/* The evaluator is passed by reference to the parser and to the scanner. This + * provides a simple but effective pure interface, not relying on global + * variables. */ +%parse-param { class Evaluator& evaluator } + +/* Verbose error messages. */ +%error-verbose + + /*** START - Specify the grammar's tokens ***/ + +%union { + double doubleValue; + std::string* pString; + class PARSER::ExpressionNode* pExprNode; +} + +%token END 0 "end of stream" +%token DOUBLE "Double" +%token FLT "flt" + +%type constant variable atomexpr unaryexpr mulexpr addexpr expr + +%destructor { delete $$; } FLT +%destructor { delete $$; } constant +%destructor { delete $$; } variable +%destructor { delete $$; } atomexpr +%destructor { delete $$; } unaryexpr +%destructor { delete $$; } mulexpr +%destructor { delete $$; } addexpr +%destructor { delete $$; } expr + + /*** END - Specify the grammar's tokens ***/ + +%{ + +#include "evaluator.h" +#include "FloatScanner.h" + +/* this "connects" the bison parser in the driver to the flex scanner class + * object. it defines the yylex() function call to pull the next token from the + * current lexer object of the driver context. */ +#undef yylex +#define yylex evaluator.m_pFloatLexer->lex + +%} + +%% /*** Grammar Rules ***/ + +constant : DOUBLE + { + $$ = new FNConstant(evaluator.GetContext(), $1); + } + +variable : FLT + { + $$ = new FNFlt(evaluator.GetContext(), *$1); + delete $1; + } + +atomexpr : constant + { + $$ = $1; + } + | variable + { + $$ = $1; + } + | '(' expr ')' + { + $$ = $2; + } + +unaryexpr : atomexpr + { + $$ = $1; + } + | '+' atomexpr + { + $$ = $2; + } + | '-' atomexpr + { + $$ = new FNNegate(evaluator.GetContext(), $2); + } + +mulexpr : unaryexpr + { + $$ = $1; + } + | mulexpr '*' unaryexpr + { + $$ = new FNMultiply(evaluator.GetContext(), $1, $3); + } + | mulexpr '/' unaryexpr + { + $$ = new FNDivide(evaluator.GetContext(), $1, $3); + } + +addexpr : mulexpr + { + $$ = $1; + } + | addexpr '+' mulexpr + { + $$ = new FNAdd(evaluator.GetContext(), $1, $3); + } + | addexpr '-' mulexpr + { + $$ = new FNSubtract(evaluator.GetContext(), $1, $3); + } + +expr : addexpr + { + $$ = $1; + } + + +start : /* empty */ + | start expr END + { + evaluator.GetContext().SetExpression($2); + } + +%% /*** Additional Code ***/ + +void PARSER::FloatParser::error(const FloatParser::location_type& l, + const std::string& m) +{ + std::cout << "Error: " << m << '\n'; +} diff --git a/sources/parsers/model/FloatScanner.ll b/sources/parsers/model/FloatScanner.ll new file mode 100644 index 0000000..12c0de8 --- /dev/null +++ b/sources/parsers/model/FloatScanner.ll @@ -0,0 +1,146 @@ +/** Define the float expression Flex lexical scanner. + + Copyright (c) 2018 vcdMaker team + 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. +*/ + +%{ /*** C/C++ Declarations ***/ + +#include "FloatNode.h" +#include "FloatScanner.h" + +/* Import the parser's token type into a local typedef. */ +typedef PARSER::FloatParser::token token; +typedef PARSER::FloatParser::token_type token_type; + +/* By default yylex returns int, we use token_type. Unfortunately yyterminate + * by default returns 0, which is not of token_type. */ +#define yyterminate() return token::END + +/* This disables inclusion of unistd.h, which is not available under Visual C++ + * on Win32. The C++ scanner uses STL streams instead. */ +#define YY_NO_UNISTD_H + +%} + +/*** Flex Declarations and Options ***/ + +/* Enable c++ scanner class generation. */ +%option c++ + +/* Change the name of the scanner class. Results in "FloatFlexLexer". */ +%option prefix="Float" + +/* The manual says "somewhat more optimized". */ +%option batch + +/* Enable scanner to generate debug output. disable this for release versions. */ +/* %option debug */ + +/* No support for include files is planned. */ +%option yywrap nounput + +/* Let the scanner be fast. */ +%option full + +/* The following paragraph suffices to track locations accurately. Each time + * yylex is invoked, the begin position is moved onto the end position. */ +%{ +#define YY_USER_ACTION yylloc->columns(yyleng); +%} + +%% /*** Regular Expressions Part ***/ + + /* Code to place at the beginning of yylex(). */ +%{ + // reset location + yylloc->step(); +%} + + /*** Lexer rules ***/ + +-*[0-9]+\.*[0-9]* { + yylval->doubleValue = std::stod(yytext, NULL); + return token::DOUBLE; +} + +flt\([ ]*[0-9]+[ ]*\) { + yylval->pString = new std::string(yytext, yyleng); + return token::FLT; +} + + /* gobble up white-spaces */ +[ \t\r]+ { + yylloc->step(); +} + + /* pass all other characters up to bison */ +. { + return static_cast(*yytext); +} + + /*** End of lexer rules ***/ + +%% /*** Additional Code ***/ + +namespace PARSER { + +FloatScanner::FloatScanner(std::istream* in, + std::ostream* out) + : FloatFlexLexer(in, out) +{ +} + +FloatScanner::~FloatScanner() +{ +} + +/* +void FloatScanner::set_debug(bool b) +{ + yy_flex_debug = b; +} +*/ + +} + +/* This implementation of DecimalFlexLexer::yylex() is required to fill the + * vtable of the class ExampleFlexLexer. We define the scanner's main yylex + * function via YY_DECL to reside in the Scanner class instead. */ + +#ifdef yylex +#undef yylex +#endif + +int FloatFlexLexer::yylex() +{ + std::cerr << "in FloatFlexLexer::yylex() !" << std::endl; + return 0; +} + +/* When the scanner receives an end-of-file indication from YY_INPUT, it then + * checks the yywrap() function. If yywrap() returns false (zero), then it is + * assumed that the function has gone ahead and set up `yyin' to point to + * another input file, and scanning continues. If it returns true (non-zero), + * then the scanner terminates, returning 0 to its caller. */ + +int FloatFlexLexer::yywrap() +{ + return 1; +} diff --git a/sources/parsers/model/StringParser.yy b/sources/parsers/model/StringParser.yy new file mode 100644 index 0000000..721fe13 --- /dev/null +++ b/sources/parsers/model/StringParser.yy @@ -0,0 +1,148 @@ +/** Contains the string expression Bison parser source. + + Copyright (c) 2018 vcdMaker team + 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. +*/ + +%{ /*** C/C++ Declarations ***/ + +#include "ExpressionNode.h" +#include "StringNode.h" + +%} + +/*** yacc/bison Declarations ***/ + +/* Require bison 2.3 or later */ +%require "2.3" + +/* Add debug output code to generated parser. disable this for release versions. */ +/* %debug */ + +/* Start symbol is named "start". */ +%start start + +/* Write out a header file containing the token defines. */ +%defines + +/* Use newer C++ skeleton file. */ +%skeleton "lalr1.cc" + +/* Namespace to enclose parser in. */ +%name-prefix="PARSER" + +/* Set the parser's class identifier. */ +%define "parser_class_name" "StringParser" + +/* Keep track of the current position within the input. */ +%locations + +/* The evaluator is passed by reference to the parser and to the scanner. This + * provides a simple but effective pure interface, not relying on global + * variables. */ +%parse-param { class Evaluator& evaluator } + +/* Verbose error messages. */ +%error-verbose + + /*** START - Specify the grammar's tokens ***/ + +%union { + std::string* pString; + class PARSER::ExpressionNode* pExprNode; +} + +%token END 0 "end of stream" +%token TXT "text" +%token TXT_CONSTANT "text constant" + +%type constant variable atomexpr addexpr expr + +%destructor { delete $$; } TXT +%destructor { delete $$; } TXT_CONSTANT +%destructor { delete $$; } constant +%destructor { delete $$; } variable +%destructor { delete $$; } atomexpr +%destructor { delete $$; } addexpr +%destructor { delete $$; } expr + + /*** END - Specify the grammar's tokens ***/ + +%{ + +#include "evaluator.h" +#include "StringScanner.h" + +/* this "connects" the bison parser in the driver to the flex scanner class + * object. it defines the yylex() function call to pull the next token from the + * current lexer object of the driver context. */ +#undef yylex +#define yylex evaluator.m_pStringLexer->lex + +%} + +%% /*** Grammar Rules ***/ + +constant : TXT_CONSTANT + { + $$ = new SNConstant(evaluator.GetContext(), *$1); + } + +variable : TXT + { + $$ = new SNTxt(evaluator.GetContext(), *$1); + delete $1; + } + +atomexpr : constant + { + $$ = $1; + } + | variable + { + $$ = $1; + } + +addexpr : atomexpr + { + $$ = $1; + } + | addexpr '+' atomexpr + { + $$ = new SNAdd(evaluator.GetContext(), $1, $3); + } + +expr : addexpr + { + $$ = $1; + } + +start : /* empty */ + | start expr END + { + evaluator.GetContext().SetExpression($2); + } + +%% /*** Additional Code ***/ + +void PARSER::StringParser::error(const StringParser::location_type& l, + const std::string& m) +{ + std::cout << "Error: " << m << '\n'; +} diff --git a/sources/parsers/model/StringScanner.ll b/sources/parsers/model/StringScanner.ll new file mode 100644 index 0000000..ea139de --- /dev/null +++ b/sources/parsers/model/StringScanner.ll @@ -0,0 +1,146 @@ +/** Define the string expression Flex lexical scanner. + + Copyright (c) 2018 vcdMaker team + 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. +*/ + +%{ /*** C/C++ Declarations ***/ + +#include "StringNode.h" +#include "StringScanner.h" + +/* Import the parser's token type into a local typedef. */ +typedef PARSER::StringParser::token token; +typedef PARSER::StringParser::token_type token_type; + +/* By default yylex returns int, we use token_type. Unfortunately yyterminate + * by default returns 0, which is not of token_type. */ +#define yyterminate() return token::END + +/* This disables inclusion of unistd.h, which is not available under Visual C++ + * on Win32. The C++ scanner uses STL streams instead. */ +#define YY_NO_UNISTD_H + +%} + +/*** Flex Declarations and Options ***/ + +/* Enable c++ scanner class generation. */ +%option c++ + +/* Change the name of the scanner class. Results in "StringFlexLexer". */ +%option prefix="String" + +/* The manual says "somewhat more optimized". */ +%option batch + +/* Enable scanner to generate debug output. disable this for release versions. */ +/* %option debug */ + +/* No support for include files is planned. */ +%option yywrap nounput + +/* Let the scanner be fast. */ +%option full + +/* The following paragraph suffices to track locations accurately. Each time + * yylex is invoked, the begin position is moved onto the end position. */ +%{ +#define YY_USER_ACTION yylloc->columns(yyleng); +%} + +%% /*** Regular Expressions Part ***/ + + /* Code to place at the beginning of yylex(). */ +%{ + // reset location + yylloc->step(); +%} + + /*** Lexer rules ***/ + +\"[!-~]*\" { + yylval->pString = new std::string(yytext, yyleng); + return token::TXT_CONSTANT; +} + +txt\([ ]*[0-9]+[ ]*\) { + yylval->pString = new std::string(yytext, yyleng); + return token::TXT; +} + + /* gobble up white-spaces */ +[ \t\r]+ { + yylloc->step(); +} + + /* pass all other characters up to bison */ +. { + return static_cast(*yytext); +} + + /*** End of lexer rules ***/ + +%% /*** Additional Code ***/ + +namespace PARSER { + +StringScanner::StringScanner(std::istream* in, + std::ostream* out) + : StringFlexLexer(in, out) +{ +} + +StringScanner::~StringScanner() +{ +} + +/* +void StringScanner::set_debug(bool b) +{ + yy_flex_debug = b; +} +*/ + +} + +/* This implementation of StringFlexLexer::yylex() is required to fill the + * vtable of the class StringFlexLexer. We define the scanner's main yylex + * function via YY_DECL to reside in the Scanner class instead. */ + +#ifdef yylex +#undef yylex +#endif + +int StringFlexLexer::yylex() +{ + std::cerr << "in StringFlexLexer::yylex() !" << std::endl; + return 0; +} + +/* When the scanner receives an end-of-file indication from YY_INPUT, it then + * checks the yywrap() function. If yywrap() returns false (zero), then it is + * assumed that the function has gone ahead and set up `yyin' to point to + * another input file, and scanning continues. If it returns true (non-zero), + * then the scanner terminates, returning 0 to its caller. */ + +int StringFlexLexer::yywrap() +{ + return 1; +} diff --git a/sources/parsers/src/Evaluator.cpp b/sources/parsers/src/Evaluator.cpp new file mode 100644 index 0000000..8df79f1 --- /dev/null +++ b/sources/parsers/src/Evaluator.cpp @@ -0,0 +1,145 @@ +/// @file parsers/src/Evaluator.cpp +/// +/// The class provides means for evaluating user format expressions. +/// +/// @par Full Description +/// The class provides means for evaluating user format expressions. +/// It is a facade to Flex/Bison generated expression evaluators. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2018 vcdMaker team +/// +/// 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 + +#include "Evaluator.h" + +#undef yyFlexLexer +/// Decimal lexer definition. +#define yyFlexLexer DecimalFlexLexer +#include +#include "DecimalScanner.h" + +#undef yyFlexLexer +/// Float lexer definition. +#define yyFlexLexer FloatFlexLexer +#include +#include "FloatScanner.h" + +#undef yyFlexLexer +/// String lexer definition. +#define yyFlexLexer StringFlexLexer +#include +#include "StringScanner.h" + +PARSER::Evaluator::Evaluator(const std::string &rSourceName) : + m_Context(NULL, 0), + m_rSourceName(rSourceName) +{ +} + +bool PARSER::Evaluator::ParseDecimalString(const std::string &input) +{ + std::istringstream iss(input); + return ParseDecimalStream(iss); +} + +bool PARSER::Evaluator::ParseFloatString(const std::string &input) +{ + std::istringstream iss(input); + return ParseFloatStream(iss); +} + +bool PARSER::Evaluator::ParseStringString(const std::string &input) +{ + std::istringstream iss(input); + return ParseStringStream(iss); +} + +void PARSER::Evaluator::SetContext(const std::smatch *pGroups, uint64_t lineNo) const +{ + m_Context.Set(pGroups, lineNo); +} + +PARSER::ExpressionContext &PARSER::Evaluator::GetContext() const +{ + return m_Context; +} + +double PARSER::Evaluator::EvaluateDouble() const +{ + return m_Context.GetExpression()->EvaluateDouble(); +} + +uint64_t PARSER::Evaluator::EvaluateUint() const +{ + return m_Context.GetExpression()->EvaluateUint().GetValue(); +} + +std::string PARSER::Evaluator::EvaluateString() const +{ + return m_Context.GetExpression()->EvaluateString(); +} + +bool PARSER::Evaluator::ParseDecimalStream(std::istream &in) +{ + DecimalScanner scanner(&in); + #if defined(PARSER_DEBUG) + scanner.set_debug(false); + #endif + m_pDecimalLexer = &scanner; + + DecimalParser parser(*this); + #if defined(PARSER_DEBUG) + parser.set_debug_level(false); + #endif + return (parser.parse() == 0); +} + +bool PARSER::Evaluator::ParseFloatStream(std::istream &in) +{ + FloatScanner scanner(&in); + #if defined(PARSER_DEBUG) + scanner.set_debug(false); + #endif + m_pFloatLexer = &scanner; + + FloatParser parser(*this); + #if defined(PARSER_DEBUG) + parser.set_debug_level(false); + #endif + return (parser.parse() == 0); +} + +bool PARSER::Evaluator::ParseStringStream(std::istream &in) +{ + StringScanner scanner(&in); + #if defined(PARSER_DEBUG) + scanner.set_debug(false); + #endif + m_pStringLexer = &scanner; + + StringParser parser(*this); + #if defined(PARSER_DEBUG) + parser.set_debug_level(false); + #endif + return (parser.parse() == 0); +} diff --git a/windows/Bootstrapper/Bootstrapper.sln b/windows/Bootstrapper/Bootstrapper.sln index 41364c9..0cedbc1 100644 --- a/windows/Bootstrapper/Bootstrapper.sln +++ b/windows/Bootstrapper/Bootstrapper.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.24720.0 +# Visual Studio 15 +VisualStudioVersion = 15.0.27703.2047 MinimumVisualStudioVersion = 10.0.40219.1 Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Installer", "..\Installer\Installer.wixproj", "{F148448A-D886-4934-8737-8C3DAC285EE9}" ProjectSection(ProjectDependencies) = postProject @@ -12,12 +12,14 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdMerge", "..\vcdMaker\vcdMerge\vcdMerge.vcxproj", "{F2A67A23-8D8D-44FE-9F00-7C59DAD8A954}" ProjectSection(ProjectDependencies) = postProject {07CF01C0-B887-499D-AD9C-799CB6A9FE64} = {07CF01C0-B887-499D-AD9C-799CB6A9FE64} + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC} = {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC} {DBC389FC-FB63-430B-9443-F4DE90F1AB0E} = {DBC389FC-FB63-430B-9443-F4DE90F1AB0E} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdMaker", "..\vcdMaker\vcdMaker\vcdMaker.vcxproj", "{39CE447A-C072-4E08-9042-2208DF3A25D6}" ProjectSection(ProjectDependencies) = postProject {07CF01C0-B887-499D-AD9C-799CB6A9FE64} = {07CF01C0-B887-499D-AD9C-799CB6A9FE64} + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC} = {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC} {DBC389FC-FB63-430B-9443-F4DE90F1AB0E} = {DBC389FC-FB63-430B-9443-F4DE90F1AB0E} EndProjectSection EndProject @@ -27,6 +29,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdMakerCore", "..\vcdMaker EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pugixml_vs2015", "..\..\sources\3rdParty\pugixml\scripts\pugixml_vs2015.vcxproj", "{07CF01C0-B887-499D-AD9C-799CB6A9FE64}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdMakerParsers", "..\vcdMaker\vcdMakerParsers\vcdMakerParsers.vcxproj", "{43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Mixed Platforms = Debug|Mixed Platforms @@ -127,8 +131,27 @@ Global {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|x64.Build.0 = Release|x64 {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|x86.ActiveCfg = Release|Win32 {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|x86.Build.0 = Release|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Debug|Win32.ActiveCfg = Debug|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Debug|Win32.Build.0 = Debug|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Debug|x64.ActiveCfg = Debug|x64 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Debug|x64.Build.0 = Debug|x64 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Debug|x86.ActiveCfg = Debug|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Debug|x86.Build.0 = Debug|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Release|Mixed Platforms.Build.0 = Release|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Release|Win32.ActiveCfg = Release|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Release|Win32.Build.0 = Release|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Release|x64.ActiveCfg = Release|x64 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Release|x64.Build.0 = Release|x64 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Release|x86.ActiveCfg = Release|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {848B5742-1ECC-44A5-BDE1-1B9EB9676022} + EndGlobalSection EndGlobal diff --git a/windows/Bootstrapper/Bundle.wxs b/windows/Bootstrapper/Bundle.wxs index e229f8b..d5ef20c 100644 --- a/windows/Bootstrapper/Bundle.wxs +++ b/windows/Bootstrapper/Bundle.wxs @@ -30,8 +30,8 @@ Variable="vcRedistVersion"/> + DetectCondition="vcRedistVersion >= "14.12.25810""> diff --git a/windows/Installer/Installer.sln b/windows/Installer/Installer.sln index 18715a5..ce40a90 100644 --- a/windows/Installer/Installer.sln +++ b/windows/Installer/Installer.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.24720.0 +# Visual Studio 15 +VisualStudioVersion = 15.0.27703.2047 MinimumVisualStudioVersion = 10.0.40219.1 Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Installer", "Installer.wixproj", "{F148448A-D886-4934-8737-8C3DAC285EE9}" ProjectSection(ProjectDependencies) = postProject @@ -12,12 +12,14 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdMerge", "..\vcdMaker\vcdMerge\vcdMerge.vcxproj", "{F2A67A23-8D8D-44FE-9F00-7C59DAD8A954}" ProjectSection(ProjectDependencies) = postProject {07CF01C0-B887-499D-AD9C-799CB6A9FE64} = {07CF01C0-B887-499D-AD9C-799CB6A9FE64} + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC} = {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC} {DBC389FC-FB63-430B-9443-F4DE90F1AB0E} = {DBC389FC-FB63-430B-9443-F4DE90F1AB0E} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdMaker", "..\vcdMaker\vcdMaker\vcdMaker.vcxproj", "{39CE447A-C072-4E08-9042-2208DF3A25D6}" ProjectSection(ProjectDependencies) = postProject {07CF01C0-B887-499D-AD9C-799CB6A9FE64} = {07CF01C0-B887-499D-AD9C-799CB6A9FE64} + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC} = {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC} {DBC389FC-FB63-430B-9443-F4DE90F1AB0E} = {DBC389FC-FB63-430B-9443-F4DE90F1AB0E} EndProjectSection EndProject @@ -25,6 +27,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdMakerCore", "..\vcdMaker EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pugixml_vs2015", "..\..\sources\3rdParty\pugixml\scripts\pugixml_vs2015.vcxproj", "{07CF01C0-B887-499D-AD9C-799CB6A9FE64}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdMakerParsers", "..\vcdMaker\vcdMakerParsers\vcdMakerParsers.vcxproj", "{43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Mixed Platforms = Debug|Mixed Platforms @@ -111,8 +115,27 @@ Global {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|x64.Build.0 = Release|x64 {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|x86.ActiveCfg = Release|Win32 {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|x86.Build.0 = Release|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Debug|Win32.ActiveCfg = Debug|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Debug|Win32.Build.0 = Debug|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Debug|x64.ActiveCfg = Debug|x64 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Debug|x64.Build.0 = Debug|x64 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Debug|x86.ActiveCfg = Debug|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Debug|x86.Build.0 = Debug|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Release|Mixed Platforms.Build.0 = Release|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Release|Win32.ActiveCfg = Release|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Release|Win32.Build.0 = Release|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Release|x64.ActiveCfg = Release|x64 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Release|x64.Build.0 = Release|x64 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Release|x86.ActiveCfg = Release|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {53E64823-BABC-4BC1-860B-217025214244} + EndGlobalSection EndGlobal diff --git a/windows/vcdMaker/vcdMaker.sln b/windows/vcdMaker/vcdMaker.sln index 18c7fc2..f082b08 100644 --- a/windows/vcdMaker/vcdMaker.sln +++ b/windows/vcdMaker/vcdMaker.sln @@ -1,17 +1,19 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.24720.0 +# Visual Studio 15 +VisualStudioVersion = 15.0.27130.2010 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdMaker", "vcdMaker\vcdMaker.vcxproj", "{39CE447A-C072-4E08-9042-2208DF3A25D6}" ProjectSection(ProjectDependencies) = postProject {07CF01C0-B887-499D-AD9C-799CB6A9FE64} = {07CF01C0-B887-499D-AD9C-799CB6A9FE64} + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC} = {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC} {DBC389FC-FB63-430B-9443-F4DE90F1AB0E} = {DBC389FC-FB63-430B-9443-F4DE90F1AB0E} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdMerge", "vcdMerge\vcdMerge.vcxproj", "{F2A67A23-8D8D-44FE-9F00-7C59DAD8A954}" ProjectSection(ProjectDependencies) = postProject {07CF01C0-B887-499D-AD9C-799CB6A9FE64} = {07CF01C0-B887-499D-AD9C-799CB6A9FE64} + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC} = {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC} {DBC389FC-FB63-430B-9443-F4DE90F1AB0E} = {DBC389FC-FB63-430B-9443-F4DE90F1AB0E} EndProjectSection EndProject @@ -19,6 +21,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdMakerCore", "vcdMakerCor EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pugixml_vs2015", "..\..\sources\3rdParty\pugixml\scripts\pugixml_vs2015.vcxproj", "{07CF01C0-B887-499D-AD9C-799CB6A9FE64}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdMakerParsers", "vcdMakerParsers\vcdMakerParsers.vcxproj", "{43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -55,8 +59,19 @@ Global {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|Win32.Build.0 = Release|Win32 {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|x64.ActiveCfg = Release|x64 {07CF01C0-B887-499D-AD9C-799CB6A9FE64}.Release|x64.Build.0 = Release|x64 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Debug|Win32.ActiveCfg = Debug|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Debug|Win32.Build.0 = Debug|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Debug|x64.ActiveCfg = Debug|x64 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Debug|x64.Build.0 = Debug|x64 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Release|Win32.ActiveCfg = Release|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Release|Win32.Build.0 = Release|Win32 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Release|x64.ActiveCfg = Release|x64 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A02471EC-4616-43FA-9A6A-2A8B40876C01} + EndGlobalSection EndGlobal diff --git a/windows/vcdMaker/vcdMaker/vcdMaker.vcxproj b/windows/vcdMaker/vcdMaker/vcdMaker.vcxproj index a644a2d..b6ff0bf 100644 --- a/windows/vcdMaker/vcdMaker/vcdMaker.vcxproj +++ b/windows/vcdMaker/vcdMaker/vcdMaker.vcxproj @@ -14,7 +14,7 @@ {39CE447A-C072-4E08-9042-2208DF3A25D6} Win32Proj vcdMaker - 10.0.16299.0 + 10.0.17134.0 @@ -58,7 +58,7 @@ Console true - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;vcdMakerCore.lib;pugixml.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;vcdMakerCore.lib;vcdMakerParsers.lib;pugixml.lib;%(AdditionalDependencies) $(SolutionDir)\..\..\sources\3rdParty\pugixml\scripts\vs2015\Win32_Debug\;$(SolutionDir)$(Configuration)\ @@ -78,7 +78,7 @@ true true true - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;vcdMakerCore.lib;pugixml.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;vcdMakerCore.lib;vcdMakerParsers.lib;pugixml.lib;%(AdditionalDependencies) $(SolutionDir)\..\..\sources\3rdParty\pugixml\scripts\vs2015\Win32_Release\;$(SolutionDir)$(Configuration)\ diff --git a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj index 7a8501a..966256e 100644 --- a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj +++ b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj @@ -22,7 +22,7 @@ {DBC389FC-FB63-430B-9443-F4DE90F1AB0E} Win32Proj vcdMakerCore - 10.0.16299.0 + 10.0.17134.0 @@ -83,7 +83,7 @@ Disabled WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) true - $(ProjectDir)..\..\..\sources\common\inc;$(ProjectDir)..\..\..\sources\3rdParty\tclap\include;$(ProjectDir)..\..\..\sources\3rdParty\pugixml\src;%(AdditionalIncludeDirectories) + $(ProjectDir)..\..\..\sources\common\inc;$(ProjectDir)..\..\..\sources\parsers\inc;$(ProjectDir)..\..\..\sources\3rdParty\tclap\include;$(ProjectDir)..\..\..\sources\3rdParty\pugixml\src;%(AdditionalIncludeDirectories) Windows @@ -112,7 +112,7 @@ true WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) true - $(ProjectDir)..\..\..\sources\common\inc;$(ProjectDir)..\..\..\sources\3rdParty\tclap\include;$(ProjectDir)..\..\..\sources\3rdParty\pugixml\src;%(AdditionalIncludeDirectories) + $(ProjectDir)..\..\..\sources\common\inc;$(ProjectDir)..\..\..\sources\parsers\inc;$(ProjectDir)..\..\..\sources\3rdParty\tclap\include;$(ProjectDir)..\..\..\sources\3rdParty\pugixml\src;%(AdditionalIncludeDirectories) Windows diff --git a/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj b/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj new file mode 100644 index 0000000..333363d --- /dev/null +++ b/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj @@ -0,0 +1,149 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 15.0 + {43F8E7F3-2564-48BB-A9E3-A3B837AE86EC} + vcdMakerParsers + 10.0.17134.0 + + + + StaticLibrary + true + v141 + Unicode + + + StaticLibrary + false + v141 + true + Unicode + + + Application + true + v141 + MultiByte + + + Application + false + v141 + true + MultiByte + + + + + + + + + + + + + + + + + + + + + + + Level3 + Disabled + true + true + $(ProjectDir)..\..\..\sources\parsers\auto;$(ProjectDir)..\..\..\sources\parsers\inc;$(ProjectDir)..\..\..\sources\common\inc;%(AdditionalIncludeDirectories) + + + + + Level3 + Disabled + true + true + + + + + Level3 + MaxSpeed + true + true + true + true + $(ProjectDir)..\..\..\sources\parsers\auto;$(ProjectDir)..\..\..\sources\parsers\inc;$(ProjectDir)..\..\..\sources\common\inc;%(AdditionalIncludeDirectories) + + + true + true + + + + + Level3 + MaxSpeed + true + true + true + true + + + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj.filters b/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj.filters new file mode 100644 index 0000000..27b1dff --- /dev/null +++ b/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj.filters @@ -0,0 +1,89 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {a886ed4c-5b3f-4b3f-aa69-2546d8278964} + + + + + Auto + + + Source Files + + + Auto + + + Auto + + + Auto + + + Auto + + + Auto + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Auto + + + Auto + + + Auto + + + Auto + + + Auto + + + Auto + + + Header Files + + + Header Files + + + Auto + + + Header Files + + + Header Files + + + \ No newline at end of file From b010788b9f5d43c07e083fd2fb574fefbdf9f857 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Mon, 13 Aug 2018 19:06:46 +0200 Subject: [PATCH 096/143] #25 vcdMerge project file --- windows/vcdMaker/vcdMerge/vcdMerge.vcxproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/windows/vcdMaker/vcdMerge/vcdMerge.vcxproj b/windows/vcdMaker/vcdMerge/vcdMerge.vcxproj index 12afe7e..cf47a82 100644 --- a/windows/vcdMaker/vcdMerge/vcdMerge.vcxproj +++ b/windows/vcdMaker/vcdMerge/vcdMerge.vcxproj @@ -14,7 +14,7 @@ {F2A67A23-8D8D-44FE-9F00-7C59DAD8A954} Win32Proj vcdMerge - 10.0.16299.0 + 10.0.17134.0 @@ -59,7 +59,7 @@ Console true $(SolutionDir)\..\..\sources\3rdParty\pugixml\scripts\vs2015\Win32_Debug\;$(SolutionDir)$(Configuration)\ - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;vcdMakerCore.lib;pugixml.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;vcdMakerCore.lib;vcdMakerParsers.lib;pugixml.lib;%(AdditionalDependencies) @@ -79,7 +79,7 @@ true true $(SolutionDir)\..\..\sources\3rdParty\pugixml\scripts\vs2015\Win32_Release\;$(SolutionDir)$(Configuration)\ - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;vcdMakerCore.lib;pugixml.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;vcdMakerCore.lib;vcdMakerParsers.lib;pugixml.lib;%(AdditionalDependencies) From 043b0922341a67442444bdcef4fc1b3a28d8bc5c Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Tue, 14 Aug 2018 14:26:31 +0200 Subject: [PATCH 097/143] #25 Multi signal line support --- sources/common/inc/EventSignalCreator.h | 2 +- sources/common/inc/FSignalCreator.h | 2 +- sources/common/inc/ISignalCreator.h | 2 +- sources/common/inc/SignalCreator.h | 2 +- sources/common/inc/SignalFactory.h | 12 +++---- sources/common/src/SignalFactory.cpp | 15 +++++---- sources/common/src/TxtParser.cpp | 45 +++++++++++++++---------- sources/parsers/auto/StringScanner.cpp | 20 +++++------ sources/parsers/model/StringScanner.ll | 2 +- 9 files changed, 58 insertions(+), 44 deletions(-) diff --git a/sources/common/inc/EventSignalCreator.h b/sources/common/inc/EventSignalCreator.h index 07598ee..e686cc3 100644 --- a/sources/common/inc/EventSignalCreator.h +++ b/sources/common/inc/EventSignalCreator.h @@ -38,7 +38,7 @@ namespace PARSER /// The event signal creator constructor. EventSignalCreator() : - SignalCreator("^#([[:digit:]]+) ([[:graph:]]+) e( +.*)?") + SignalCreator("#([[:digit:]]+) ([[:graph:]]+) e( +.*)?") { } diff --git a/sources/common/inc/FSignalCreator.h b/sources/common/inc/FSignalCreator.h index d9ec005..ef443eb 100644 --- a/sources/common/inc/FSignalCreator.h +++ b/sources/common/inc/FSignalCreator.h @@ -40,7 +40,7 @@ namespace PARSER /// The real signal creator constructor. FSignalCreator() : - SignalCreator("^#([[:digit:]]+) ([[:graph:]]+) ([[:d:][:punct:]]+) f( +.*)?") + SignalCreator("#([[:digit:]]+) ([[:graph:]]+) ([[:d:][:punct:]]+) f( +.*)?") { } diff --git a/sources/common/inc/ISignalCreator.h b/sources/common/inc/ISignalCreator.h index b36a6d9..84efcb5 100644 --- a/sources/common/inc/ISignalCreator.h +++ b/sources/common/inc/ISignalCreator.h @@ -38,7 +38,7 @@ namespace PARSER public: /// The integer signal creator constructor. ISignalCreator() : - SignalCreator("^#([[:digit:]]+) ([[:graph:]]+) ([[:digit:]]+) ([[:digit:]]+)( +.*)?") + SignalCreator("#([[:digit:]]+) ([[:graph:]]+) ([[:digit:]]+) ([[:digit:]]+)( +.*)?") { } diff --git a/sources/common/inc/SignalCreator.h b/sources/common/inc/SignalCreator.h index 1dc91af..792dd16 100644 --- a/sources/common/inc/SignalCreator.h +++ b/sources/common/inc/SignalCreator.h @@ -50,7 +50,7 @@ namespace PARSER /// which will be matched against the log line. /// @param rSignalRegEx The regular expression to be matech against the log line. SignalCreator(const std::string &rSignalRegEx) : - m_SignalRegEx(rSignalRegEx + "\r?$") + m_SignalRegEx("^" + rSignalRegEx + "\r?$") { } diff --git a/sources/common/inc/SignalFactory.h b/sources/common/inc/SignalFactory.h index e5eda52..9fb2641 100644 --- a/sources/common/inc/SignalFactory.h +++ b/sources/common/inc/SignalFactory.h @@ -46,17 +46,17 @@ namespace PARSER /// The signal factory default constructor. SignalFactory(); - /// Creates the appropriate signal object. + /// Creates the appropriate signal objects. /// - /// Returns the pointer to the appropriate signal object. - /// Or nullptr if it couldn't be created. + /// Returns the pointer to the list of created signal objects. + /// If emtpy no signal could be created. /// /// @param logLine One line from the log. /// @param lineNumber The log line number. /// @param sourceHandle Signal source handle. - SIGNAL::Signal *Create(std::string &logLine, - INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle) const; + std::vector Create(std::string &logLine, + INSTRUMENT::Instrument::LineNumberT lineNumber, + SIGNAL::SourceRegistry::HandleT sourceHandle) const; protected: diff --git a/sources/common/src/SignalFactory.cpp b/sources/common/src/SignalFactory.cpp index 5c05d46..719bb2a 100644 --- a/sources/common/src/SignalFactory.cpp +++ b/sources/common/src/SignalFactory.cpp @@ -38,26 +38,29 @@ PARSER::SignalFactory::SignalFactory() : { } -SIGNAL::Signal *PARSER::SignalFactory::Create(std::string &logLine, - INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle) const +std::vector PARSER::SignalFactory::Create(std::string &logLine, + INSTRUMENT::Instrument::LineNumberT lineNumber, + SIGNAL::SourceRegistry::HandleT sourceHandle) const { if (m_vpSignalCreators.empty()) { throw EXCEPTION::VcdException(EXCEPTION::Error::NO_SIGNALS_CREATORS, "No signals creators. Hint: Verify the correctness of the XML file specifying the user log format."); } + + std::vector vpSignals; + for (const auto &creator : m_vpSignalCreators) { // Try to use creator. SIGNAL::Signal *pSignal = creator->Create(logLine, lineNumber, sourceHandle); - // If successful return created Signal, if not try next one. + // If successful add created Signal to the returned vector. if (pSignal != nullptr) { - return pSignal; + vpSignals.push_back(pSignal); } } - return nullptr; + return vpSignals; } diff --git a/sources/common/src/TxtParser.cpp b/sources/common/src/TxtParser.cpp index b9045d1..1bb068c 100644 --- a/sources/common/src/TxtParser.cpp +++ b/sources/common/src/TxtParser.cpp @@ -61,32 +61,43 @@ void PARSER::TxtParser::Parse() std::string input_line; while (std::getline(m_LogFile, input_line)) { - const SIGNAL::Signal *pSignal = + std::vector vpSignals = m_rSignalFactory.Create(input_line, lineNumber, m_SourceHandle); + const SIGNAL::Signal *pSignal = NULL; - if (pSignal) + if (!vpSignals.empty()) { - try + while (!vpSignals.empty()) { - m_pSignalDb->Add(pSignal); - } - catch (EXCEPTION::VcdException &rException) - { - delete pSignal; - if (EXCEPTION::Error::INCONSISTENT_SIGNAL == rException.GetId()) + try { - throw EXCEPTION::VcdException(rException.GetId(), std::string(rException.what()) + - " At line " + std::to_string(lineNumber) + "."); + pSignal = vpSignals.back(); + vpSignals.pop_back(); + m_pSignalDb->Add(pSignal); } - else + catch (EXCEPTION::VcdException &rException) { - throw rException; + delete pSignal; + while (!vpSignals.empty()) + { + delete vpSignals.back(); + vpSignals.pop_back(); + } + if (EXCEPTION::Error::INCONSISTENT_SIGNAL == rException.GetId()) + { + throw EXCEPTION::VcdException(rException.GetId(), std::string(rException.what()) + + " At line " + std::to_string(lineNumber) + "."); + } + else + { + throw rException; + } } - } - for (auto instrument : m_vpInstruments) - { - instrument->Notify(lineNumber, *pSignal); + for (auto instrument : m_vpInstruments) + { + instrument->Notify(lineNumber, *pSignal); + } } ++m_ValidLines; } diff --git a/sources/parsers/auto/StringScanner.cpp b/sources/parsers/auto/StringScanner.cpp index bd6f092..49d6c77 100644 --- a/sources/parsers/auto/StringScanner.cpp +++ b/sources/parsers/auto/StringScanner.cpp @@ -515,17 +515,17 @@ static const flex_int16_t yy_nxt[][128] = 3, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, - -11, -11, -11, 10, 11, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, -11 + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11 }, { diff --git a/sources/parsers/model/StringScanner.ll b/sources/parsers/model/StringScanner.ll index ea139de..ccb5c9f 100644 --- a/sources/parsers/model/StringScanner.ll +++ b/sources/parsers/model/StringScanner.ll @@ -75,7 +75,7 @@ typedef PARSER::StringParser::token_type token_type; /*** Lexer rules ***/ -\"[!-~]*\" { +\"[!#-~]*\" { yylval->pString = new std::string(yytext, yyleng); return token::TXT_CONSTANT; } From 49933af2aad9450f1296cfd9a72b24f5a992c55f Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Tue, 14 Aug 2018 21:40:53 +0200 Subject: [PATCH 098/143] #25 User float precision --- sources/common/src/XmlSignalCreator.cpp | 10 ++-- sources/parsers/inc/Evaluator.h | 2 +- sources/parsers/inc/ExpressionNode.h | 5 +- sources/parsers/inc/FloatNode.h | 64 +++++++++++++++++++------ sources/parsers/src/Evaluator.cpp | 15 +++++- 5 files changed, 71 insertions(+), 25 deletions(-) diff --git a/sources/common/src/XmlSignalCreator.cpp b/sources/common/src/XmlSignalCreator.cpp index 67c2669..f4c8246 100644 --- a/sources/common/src/XmlSignalCreator.cpp +++ b/sources/common/src/XmlSignalCreator.cpp @@ -24,8 +24,6 @@ /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS /// IN THE SOFTWARE. -#include - #include "XmlSignalCreator.h" TIME::Timestamp PARSER::XmlSignalCreator::GetTimestamp(const std::smatch &rMatch, @@ -51,11 +49,11 @@ std::string PARSER::XmlSignalCreator::GetFloatValue(const std::smatch &rMatch) c { m_FloatEvaluator.SetContext(&rMatch, 0); - std::ostringstream strStream; - strStream << m_FloatEvaluator.EvaluateDouble(); - std::string doubleStr = strStream.str(); + double value; + std::string stringValue; + std::tie(value, stringValue) = m_FloatEvaluator.EvaluateDouble(); - return doubleStr; + return stringValue; } size_t PARSER::XmlSignalCreator::GetSize(const std::smatch &rMatch) const diff --git a/sources/parsers/inc/Evaluator.h b/sources/parsers/inc/Evaluator.h index f222461..8acd176 100644 --- a/sources/parsers/inc/Evaluator.h +++ b/sources/parsers/inc/Evaluator.h @@ -86,7 +86,7 @@ namespace PARSER ExpressionContext &GetContext() const; /// Evaluates the expression expecting the 'double' value. - double EvaluateDouble() const; + std::tuple EvaluateDouble() const; /// Evaluates the expression expecting the 'uint' value. uint64_t EvaluateUint() const; diff --git a/sources/parsers/inc/ExpressionNode.h b/sources/parsers/inc/ExpressionNode.h index 702592f..dddcc9f 100644 --- a/sources/parsers/inc/ExpressionNode.h +++ b/sources/parsers/inc/ExpressionNode.h @@ -30,6 +30,7 @@ #pragma once #include +#include #include "SafeUInt.h" @@ -66,10 +67,10 @@ namespace PARSER } /// Evaluates the complete 'double' tree and returns the expression value. - virtual double EvaluateDouble() const + virtual std::tuple EvaluateDouble() const { /// @todo Throw exception - return 0.0; + return std::make_tuple(0.0, ""); } /// Evaluates the complete 'double' tree and returns the expression value. diff --git a/sources/parsers/inc/FloatNode.h b/sources/parsers/inc/FloatNode.h index e499370..2bbf47c 100644 --- a/sources/parsers/inc/FloatNode.h +++ b/sources/parsers/inc/FloatNode.h @@ -54,9 +54,9 @@ namespace PARSER } /// @copydoc ExpressionNode::EvaluateDouble() - virtual double EvaluateDouble() const + virtual std::tuple EvaluateDouble() const { - return m_Value; + return std::make_tuple(m_Value, ""); } }; @@ -80,9 +80,10 @@ namespace PARSER } /// @copydoc ExpressionNode::EvaluateDouble() - virtual double EvaluateDouble() const + virtual std::tuple EvaluateDouble() const { - return std::stod(m_rContext.GetElement(m_Index), nullptr); + return std::make_tuple(std::stod(m_rContext.GetElement(m_Index), nullptr), + m_rContext.GetElement(m_Index)); } }; @@ -109,9 +110,12 @@ namespace PARSER } /// @copydoc ExpressionNode::EvaluateDouble() - virtual double EvaluateDouble() const + virtual std::tuple EvaluateDouble() const { - return -m_pNode->EvaluateDouble(); + double value; + std::string stringValue; + std::tie(value, stringValue) = m_pNode->EvaluateDouble(); + return std::make_tuple(-value, ""); } }; @@ -143,9 +147,17 @@ namespace PARSER } /// @copydoc ExpressionNode::EvaluateDouble() - virtual double EvaluateDouble() const + virtual std::tuple EvaluateDouble() const { - return m_pLeft->EvaluateDouble() + m_pRight->EvaluateDouble(); + double leftValue; + std::string leftStringValue; + std::tie(leftValue, leftStringValue) = m_pLeft->EvaluateDouble(); + + double rightValue; + std::string rightStringValue; + std::tie(rightValue, rightStringValue) = m_pRight->EvaluateDouble(); + + return std::make_tuple(leftValue + rightValue, ""); } }; @@ -177,9 +189,17 @@ namespace PARSER } /// @copydoc ExpressionNode::EvaluateDouble() - virtual double EvaluateDouble() const + virtual std::tuple EvaluateDouble() const { - return m_pLeft->EvaluateDouble() - m_pRight->EvaluateDouble(); + double leftValue; + std::string leftStringValue; + std::tie(leftValue, leftStringValue) = m_pLeft->EvaluateDouble(); + + double rightValue; + std::string rightStringValue; + std::tie(rightValue, rightStringValue) = m_pRight->EvaluateDouble(); + + return std::make_tuple(leftValue - rightValue, ""); } }; @@ -211,9 +231,17 @@ namespace PARSER } /// @copydoc ExpressionNode::EvaluateDouble() - virtual double EvaluateDouble() const + virtual std::tuple EvaluateDouble() const { - return m_pLeft->EvaluateDouble() * m_pRight->EvaluateDouble(); + double leftValue; + std::string leftStringValue; + std::tie(leftValue, leftStringValue) = m_pLeft->EvaluateDouble(); + + double rightValue; + std::string rightStringValue; + std::tie(rightValue, rightStringValue) = m_pRight->EvaluateDouble(); + + return std::make_tuple(leftValue * rightValue, ""); } }; @@ -245,9 +273,17 @@ namespace PARSER } /// @copydoc ExpressionNode::EvaluateDouble() - virtual double EvaluateDouble() const + virtual std::tuple EvaluateDouble() const { - return m_pLeft->EvaluateDouble() / m_pRight->EvaluateDouble(); + double leftValue; + std::string leftStringValue; + std::tie(leftValue, leftStringValue) = m_pLeft->EvaluateDouble(); + + double rightValue; + std::string rightStringValue; + std::tie(rightValue, rightStringValue) = m_pRight->EvaluateDouble(); + + return std::make_tuple(leftValue / rightValue, ""); } }; } diff --git a/sources/parsers/src/Evaluator.cpp b/sources/parsers/src/Evaluator.cpp index 8df79f1..d6268ab 100644 --- a/sources/parsers/src/Evaluator.cpp +++ b/sources/parsers/src/Evaluator.cpp @@ -84,9 +84,20 @@ PARSER::ExpressionContext &PARSER::Evaluator::GetContext() const return m_Context; } -double PARSER::Evaluator::EvaluateDouble() const +std::tuple PARSER::Evaluator::EvaluateDouble() const { - return m_Context.GetExpression()->EvaluateDouble(); + double value; + std::string stringValue; + std::tie(value, stringValue) = m_Context.GetExpression()->EvaluateDouble(); + + if (stringValue.empty()) + { + std::ostringstream strStream; + strStream << value; + stringValue = strStream.str(); + } + + return std::make_tuple(value, stringValue); } uint64_t PARSER::Evaluator::EvaluateUint() const From 73785b486a21972076d8ff75e255871b0bde82c1 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Sun, 26 Aug 2018 16:41:06 +0200 Subject: [PATCH 099/143] #25 Parsing exceptions --- sources/common/doc/examples/user1.xml | 24 ++-- sources/common/doc/examples/user2.xml | 14 +- sources/common/doc/examples/vcdMaker.xml | 18 +-- sources/common/doc/manual.odt | Bin 559357 -> 559969 bytes sources/common/doc/manual.pdf | Bin 863310 -> 865087 bytes sources/common/inc/SignalFactory.h | 2 +- sources/common/inc/VcdExceptionList.h | 6 + sources/common/inc/XmlFSignalCreator.h | 2 +- sources/common/inc/XmlISignalCreator.h | 4 +- sources/common/inc/XmlSignalCreator.h | 4 +- sources/common/src/DefaultSignalFactory.cpp | 4 +- sources/common/src/SignalFactory.cpp | 17 ++- sources/common/src/TxtParser.cpp | 17 ++- sources/common/src/VCDTracer.cpp | 2 +- sources/common/src/XmlSignalFactory.cpp | 66 +++++----- sources/common/test/functional/vcdMaker.xml | 18 +-- sources/parsers/auto/DecimalParser.cpp | 2 +- sources/parsers/auto/FloatParser.cpp | 2 +- sources/parsers/auto/StringParser.cpp | 2 +- sources/parsers/inc/DecimalNode.h | 82 ++++++++++-- sources/parsers/inc/Evaluator.h | 34 +++-- sources/parsers/inc/EvaluatorExceptions.h | 120 ++++++++++++++++++ sources/parsers/inc/ExpressionContext.h | 4 + sources/parsers/inc/ExpressionNode.h | 25 +++- sources/parsers/inc/FloatNode.h | 43 ++++++- sources/parsers/inc/FloatScanner.h | 8 +- sources/parsers/inc/StringNode.h | 5 +- sources/parsers/inc/StringScanner.h | 2 +- sources/parsers/model/DecimalParser.yy | 2 +- sources/parsers/model/FloatParser.yy | 2 +- sources/parsers/model/StringParser.yy | 2 +- sources/parsers/src/Evaluator.cpp | 66 ++++++++-- sources/vcdMaker/src/vcdMaker.cpp | 4 +- sources/vcdMerge/src/Merge.cpp | 22 ++-- sources/vcdMerge/src/SignalSource.cpp | 4 +- sources/vcdMerge/src/vcdMerge.cpp | 12 +- .../vcdMakerParsers/vcdMakerParsers.vcxproj | 1 + .../vcdMakerParsers.vcxproj.filters | 3 + 38 files changed, 490 insertions(+), 155 deletions(-) create mode 100644 sources/parsers/inc/EvaluatorExceptions.h diff --git a/sources/common/doc/examples/user1.xml b/sources/common/doc/examples/user1.xml index 8386ed7..9118cb9 100644 --- a/sources/common/doc/examples/user1.xml +++ b/sources/common/doc/examples/user1.xml @@ -4,33 +4,33 @@ ([[:d:]]+):([[:d:]]+)\.([[:d:]]+) Sensors-Magnetometer.Mag([XYZ]+) 0x([0-9a-fA-F]+) - 1000000*dec(/1) + 1000*dec(/2) + dec(/3) - FRDM.Sensors.Magnetometer.Mag/4 - hex(/5) + 1000000*dec(1) + 1000*dec(2) + dec(3) + "FRDM.Sensors.Magnetometer.Mag" + txt(4) + hex(5) 32 ([[:d:]]+):([[:d:]]+)\.([[:d:]]+) Sensors-Slider 0x([0-9a-fA-F]+) - 1000000*dec(/1) + 1000*dec(/2) + dec(/3) - FRDM.Sensors.Slider - hex(/4) + 1000000*dec(1) + 1000*dec(2) + dec(3) + "FRDM.Sensors.Slider" + hex(4) 7 ([[:d:]]+):([[:d:]]+)\.([[:d:]]+) Buttons-SW([13]+) ([[:d:]]+) - 1000000*dec(/1) + 1000*dec(/2) + dec(/3) - FRDM.Buttons-SW/4 - dec(/5) + 1000000*dec(1) + 1000*dec(2) + dec(3) + "FRDM.Buttons-SW" + txt(4) + dec(5) 1 ([[:digit:]]+):([[:digit:]]+)\.([[:digit:]]+) ([[:graph:]]+)-([[:graph:]]+) ([[:digit:][:punct:]]+) - 1000000*dec(/1) + 1000*dec(/2) + dec(/3) - FRDM./4./5 - /6 + 1000000*dec(1) + 1000*dec(2) + dec(3) + "FRDM." + txt(4) + "." + txt(5) + flt(6) diff --git a/sources/common/doc/examples/user2.xml b/sources/common/doc/examples/user2.xml index c4705bf..42fb578 100644 --- a/sources/common/doc/examples/user2.xml +++ b/sources/common/doc/examples/user2.xml @@ -4,23 +4,23 @@ ([[:digit:]]+):([[:digit:]]+)\.([[:digit:]]+) Buttons-([[:graph:]]+) 0x([0-9a-fA-F]+) - 1000000*dec(/1) + 1000*dec(/2) + dec(/3) - Disco.Buttons./4 - dec(/5) + 1000000*dec(1) + 1000*dec(2) + dec(3) + "Disco.Buttons." + txt(4) + dec(5) 1 ([[:digit:]]+):([[:digit:]]+)\.([[:digit:]]+) ([[:graph:]]+)-([[:graph:]]+) ([[:digit:][:punct:]]+) - 1000000*dec(/1) + 1000*dec(/2) + dec(/3) - Disco./4./5 + 1000000*dec(1) + 1000*dec(2) + dec(3) + "Disco." + txt(4) + "." + txt(5) /6 ([[:digit:]]+):([[:digit:]]+)\.([[:digit:]]+) Sync.* - 1000000*dec(/1) + 1000*dec(/2) + dec(/3) - Disco.Sync + 1000000*dec(1) + 1000*dec(2) + dec(3) + "Disco.Sync" diff --git a/sources/common/doc/examples/vcdMaker.xml b/sources/common/doc/examples/vcdMaker.xml index 3910481..849bdfa 100644 --- a/sources/common/doc/examples/vcdMaker.xml +++ b/sources/common/doc/examples/vcdMaker.xml @@ -4,23 +4,23 @@ #([[:d:]]+) ([[:graph:]]+) ([[:d:]]+) ([[:d:]]+) - dec(/1) - /2 - dec(/3) - dec(/4) + dec(1) + txt(2) + dec(3) + dec(4) #([[:d:]]+) ([[:graph:]]+) ([[:d:][:punct:]]+) f( +.*)? - dec(/1) - /2 - /3 + dec(1) + txt(2) + flt(3) #([[:d:]]+) ([[:graph:]]+) e( +.*)? - dec(/1) - /2 + dec(1) + txt(2) diff --git a/sources/common/doc/manual.odt b/sources/common/doc/manual.odt index f502bb1683ee4ab93dd7d5dec1b876f894707020..71677e8ef128782fa3ca083557a82fa245211892 100644 GIT binary patch delta 22295 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 delta 21692 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 d_06Ub&)|^o;59y24wK8~a1ulST1}It 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 Create(std::string &logLine, + std::vector Create(std::string &logLine, INSTRUMENT::Instrument::LineNumberT lineNumber, SIGNAL::SourceRegistry::HandleT sourceHandle) const; diff --git a/sources/common/inc/VcdExceptionList.h b/sources/common/inc/VcdExceptionList.h index bbda87e..73d663c 100644 --- a/sources/common/inc/VcdExceptionList.h +++ b/sources/common/inc/VcdExceptionList.h @@ -105,6 +105,12 @@ namespace EXCEPTION /// No signals creators. const uint32_t NO_SIGNALS_CREATORS = 17U; + /// User expression parsing error. + const uint32_t USER_EXPRESSION_PARSING_ERROR = 18U; + + /// User expression evaluation error. + const uint32_t EXPRESSION_EVALUATION_ERROR = 19U; + // Logic errors below shall never happen. // They are enumerated from 9000. diff --git a/sources/common/inc/XmlFSignalCreator.h b/sources/common/inc/XmlFSignalCreator.h index 0efe424..c2fcd45 100644 --- a/sources/common/inc/XmlFSignalCreator.h +++ b/sources/common/inc/XmlFSignalCreator.h @@ -50,7 +50,7 @@ namespace PARSER const std::string &rValue) : XmlSignalCreator(rRegEx, rTimestamp, rName, rValue, "") { - bool resultFloat = m_FloatEvaluator.ParseFloatString(rValue); + m_FloatEvaluator.ParseFloatString(rValue); } /// @copydoc SignalCreator::Create() diff --git a/sources/common/inc/XmlISignalCreator.h b/sources/common/inc/XmlISignalCreator.h index c087bb8..9d1b776 100644 --- a/sources/common/inc/XmlISignalCreator.h +++ b/sources/common/inc/XmlISignalCreator.h @@ -44,8 +44,8 @@ namespace PARSER const std::string &rSize) : XmlSignalCreator(rRegEx, rTimestamp, rName, rValue, rSize) { - bool resultDecimal = m_DecimalEvaluator.ParseDecimalString(rValue); - bool resultSize = m_SizeEvaluator.ParseDecimalString(rSize); + m_DecimalEvaluator.ParseDecimalString(rValue); + m_SizeEvaluator.ParseDecimalString(rSize); } /// @copydoc SignalCreator::Create() diff --git a/sources/common/inc/XmlSignalCreator.h b/sources/common/inc/XmlSignalCreator.h index 0498aa4..f3f7a25 100644 --- a/sources/common/inc/XmlSignalCreator.h +++ b/sources/common/inc/XmlSignalCreator.h @@ -62,8 +62,8 @@ namespace PARSER m_SizeEvaluator ("XML"), m_NameEvaluator("XML") { - bool resultTimestamp = m_TimestampEvaluator.ParseDecimalString(rTimestamp); - bool resultName = m_NameEvaluator.ParseStringString(rName); + m_TimestampEvaluator.ParseDecimalString(rTimestamp); + m_NameEvaluator.ParseStringString(rName); } protected: diff --git a/sources/common/src/DefaultSignalFactory.cpp b/sources/common/src/DefaultSignalFactory.cpp index eabbecf..3dfe2b2 100644 --- a/sources/common/src/DefaultSignalFactory.cpp +++ b/sources/common/src/DefaultSignalFactory.cpp @@ -7,7 +7,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -42,7 +42,7 @@ PARSER::DefaultSignalFactory::DefaultSignalFactory() : m_vpSignalCreators.push_back(std::make_unique()); m_vpSignalCreators.push_back(std::make_unique()); } - catch (std::regex_error &) + catch (const std::regex_error &) { throw EXCEPTION::VcdException(EXCEPTION::Error::INVALID_REGEX, "Invalid regex."); diff --git a/sources/common/src/SignalFactory.cpp b/sources/common/src/SignalFactory.cpp index 719bb2a..347500f 100644 --- a/sources/common/src/SignalFactory.cpp +++ b/sources/common/src/SignalFactory.cpp @@ -32,6 +32,7 @@ #include "ISignalCreator.h" #include "FSignalCreator.h" #include "VcdException.h" +#include "EvaluatorExceptions.h" PARSER::SignalFactory::SignalFactory() : m_vpSignalCreators() @@ -52,8 +53,20 @@ std::vector PARSER::SignalFactory::Create(std::string &lo for (const auto &creator : m_vpSignalCreators) { - // Try to use creator. - SIGNAL::Signal *pSignal = creator->Create(logLine, lineNumber, sourceHandle); + SIGNAL::Signal *pSignal = nullptr; + + try + { + // Try to use creator. + pSignal = creator->Create(logLine, lineNumber, sourceHandle); + } + catch (const PARSER::EXCEPTIONS::EvaluatorException &evaluatorError) + { + throw EXCEPTION::VcdException(EXCEPTION::Error::EXPRESSION_EVALUATION_ERROR, + "Evaluation error in " + SIGNAL::SourceRegistry::GetInstance().GetSourceName(sourceHandle) + ".\n" + + "Line " + std::to_string(lineNumber) + ": " + logLine + "\n" + + evaluatorError.what()); + } // If successful add created Signal to the returned vector. if (pSignal != nullptr) diff --git a/sources/common/src/TxtParser.cpp b/sources/common/src/TxtParser.cpp index 1bb068c..3ac7baa 100644 --- a/sources/common/src/TxtParser.cpp +++ b/sources/common/src/TxtParser.cpp @@ -7,7 +7,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -46,10 +46,13 @@ PARSER::TxtParser::TxtParser(const std::string &rFilename, PARSER::TxtParser::~TxtParser() { - // Print the summary. - std::cout << '\n' << "Parsed " << m_FileName << ": \n"; - std::cout << "Valid lines: " << m_ValidLines << '\n'; - std::cout << "Invalid lines: " << m_InvalidLines << '\n'; + if (!std::uncaught_exception()) + { + // Print the summary. + std::cout << '\n' << "Parsed " << m_FileName << ": \n"; + std::cout << "Valid lines: " << m_ValidLines << '\n'; + std::cout << "Invalid lines: " << m_InvalidLines << '\n'; + } } void PARSER::TxtParser::Parse() @@ -63,7 +66,7 @@ void PARSER::TxtParser::Parse() { std::vector vpSignals = m_rSignalFactory.Create(input_line, lineNumber, m_SourceHandle); - const SIGNAL::Signal *pSignal = NULL; + const SIGNAL::Signal *pSignal = nullptr; if (!vpSignals.empty()) { @@ -75,7 +78,7 @@ void PARSER::TxtParser::Parse() vpSignals.pop_back(); m_pSignalDb->Add(pSignal); } - catch (EXCEPTION::VcdException &rException) + catch (const EXCEPTION::VcdException &rException) { delete pSignal; while (!vpSignals.empty()) diff --git a/sources/common/src/VCDTracer.cpp b/sources/common/src/VCDTracer.cpp index f9d35cf..bf795fd 100644 --- a/sources/common/src/VCDTracer.cpp +++ b/sources/common/src/VCDTracer.cpp @@ -67,7 +67,7 @@ void TRACER::VCDTracer::GenerateBasicInformation() DumpLine("$date " + GetTimeAndDate()); DumpLine("$end"); DumpLine("$version VCD Tracer \"" + std::string(VERSION::RELEASE_NAME) - + "\" Release v." + std::string(VERSION::STRING)); + + "\" Release v." + std::string(VERSION::STRING)); DumpLine("$end"); DumpLine("$timescale 1 " + m_rSignalDb.GetTimeUnit()); DumpLine("$end"); diff --git a/sources/common/src/XmlSignalFactory.cpp b/sources/common/src/XmlSignalFactory.cpp index 03001f8..533a0f2 100644 --- a/sources/common/src/XmlSignalFactory.cpp +++ b/sources/common/src/XmlSignalFactory.cpp @@ -133,37 +133,45 @@ PARSER::XmlSignalFactory::XmlSignalFactory(const std::string &rXmlFileName) : pugi::xml_node signals = doc.child("signals"); - // Traverse the XML. - for (const pugi::xml_node &signal : signals.children()) + try { - if (!std::strcmp("vector", signal.name())) + // Traverse the XML. + for (const pugi::xml_node &signal : signals.children()) { - std::unique_ptr description = std::make_unique(signal); - m_vpSignalCreators.push_back(std::make_unique(description->GetRegex(), - description->GetTimestamp(), - description->GetName(), - description->GetValue(), - description->GetSize())); - } - else if (!std::strcmp("real", signal.name())) - { - std::unique_ptr description = std::make_unique(signal); - m_vpSignalCreators.push_back(std::make_unique(description->GetRegex(), - description->GetTimestamp(), - description->GetName(), - description->GetValue())); - } - else if (!std::strcmp("event", signal.name())) - { - std::unique_ptr description = std::make_unique(signal); - m_vpSignalCreators.push_back(std::make_unique(description->GetRegex(), - description->GetTimestamp(), - description->GetName())); - } - else - { - throw EXCEPTION::VcdException(EXCEPTION::Error::UNEXPECTED_TAG, - "XML - Unexpected tag: " + std::string(signal.name())); + if (!std::strcmp("vector", signal.name())) + { + std::unique_ptr description = std::make_unique(signal); + m_vpSignalCreators.push_back(std::make_unique(description->GetRegex(), + description->GetTimestamp(), + description->GetName(), + description->GetValue(), + description->GetSize())); + } + else if (!std::strcmp("real", signal.name())) + { + std::unique_ptr description = std::make_unique(signal); + m_vpSignalCreators.push_back(std::make_unique(description->GetRegex(), + description->GetTimestamp(), + description->GetName(), + description->GetValue())); + } + else if (!std::strcmp("event", signal.name())) + { + std::unique_ptr description = std::make_unique(signal); + m_vpSignalCreators.push_back(std::make_unique(description->GetRegex(), + description->GetTimestamp(), + description->GetName())); + } + else + { + throw EXCEPTION::VcdException(EXCEPTION::Error::UNEXPECTED_TAG, + "XML - Unexpected tag: " + std::string(signal.name())); + } } } + catch (const PARSER::EXCEPTIONS::ParsingError &parsingError) + { + throw EXCEPTION::VcdException(EXCEPTION::Error::USER_EXPRESSION_PARSING_ERROR, + "Parsing error in " + rXmlFileName + ":\n" + parsingError.what()); + } } diff --git a/sources/common/test/functional/vcdMaker.xml b/sources/common/test/functional/vcdMaker.xml index 6e17964..3c93392 100644 --- a/sources/common/test/functional/vcdMaker.xml +++ b/sources/common/test/functional/vcdMaker.xml @@ -4,23 +4,23 @@ ^#([[:d:]]+) ([[:graph:]]+) ([[:d:]]+) ([[:d:]]+)( +.*)? - 1 - 2 - 3 - 4 + dec(1) + txt(2) + dec(3) + dec(4) ^#([[:d:]]+) ([[:graph:]]+) ([[:d:][:punct:]]+) f( +.*)? - 1 - 2 - 3 + dec(1) + txt(2) + flt(3) ^#([[:d:]]+) ([[:graph:]]+) e( +.*)? - 1 - 2 + dec(1) + txt(2) diff --git a/sources/parsers/auto/DecimalParser.cpp b/sources/parsers/auto/DecimalParser.cpp index 6d4bc8d..22e083c 100644 --- a/sources/parsers/auto/DecimalParser.cpp +++ b/sources/parsers/auto/DecimalParser.cpp @@ -1209,5 +1209,5 @@ namespace PARSER { void PARSER::DecimalParser::error(const DecimalParser::location_type& l, const std::string& m) { - std::cout << "Error: " << m << '\n'; + evaluator.SetSyntaxErrorIndex(l.begin.column); } diff --git a/sources/parsers/auto/FloatParser.cpp b/sources/parsers/auto/FloatParser.cpp index 76c6f1d..6a7a371 100644 --- a/sources/parsers/auto/FloatParser.cpp +++ b/sources/parsers/auto/FloatParser.cpp @@ -1181,5 +1181,5 @@ namespace PARSER { void PARSER::FloatParser::error(const FloatParser::location_type& l, const std::string& m) { - std::cout << "Error: " << m << '\n'; + evaluator.SetSyntaxErrorIndex(l.begin.column); } diff --git a/sources/parsers/auto/StringParser.cpp b/sources/parsers/auto/StringParser.cpp index 1d63bb1..d218555 100644 --- a/sources/parsers/auto/StringParser.cpp +++ b/sources/parsers/auto/StringParser.cpp @@ -1099,5 +1099,5 @@ namespace PARSER { void PARSER::StringParser::error(const StringParser::location_type& l, const std::string& m) { - std::cout << "Error: " << m << '\n'; + evaluator.SetSyntaxErrorIndex(l.begin.column); } diff --git a/sources/parsers/inc/DecimalNode.h b/sources/parsers/inc/DecimalNode.h index 5f10752..a5a7769 100644 --- a/sources/parsers/inc/DecimalNode.h +++ b/sources/parsers/inc/DecimalNode.h @@ -74,15 +74,33 @@ namespace PARSER DNDec(ExpressionContext &rExpContext, std::string &rString) : ExpressionNode(rExpContext) { + std::string stringIndex(rString, FIRST_STRING_CHARACTER_POS, rString.length() - GROUP_WRAPPER_LENGTH); + // Format of the string: dec(position) - m_Index = static_cast(std::strtoull(std::string(rString, FIRST_STRING_CHARACTER_POS, - rString.length() - GROUP_WRAPPER_LENGTH).c_str(), nullptr, 10)); + m_Index = static_cast(std::strtoull(stringIndex.c_str(), nullptr, 10)); } /// @copydoc ExpressionNode::EvaluateUint() virtual SafeUInt EvaluateUint() const { - return std::strtoull(m_rContext.GetElement(m_Index).c_str(), nullptr, 10); + SafeUInt value = 0; + if (IsDecimal(m_rContext.GetElement(m_Index))) + { + try + { + value = std::stoll(m_rContext.GetElement(m_Index).c_str(), nullptr, 10); + } + catch (const std::out_of_range&) + { + throw EXCEPTIONS::Overflow("Out of range decimal value: " + m_rContext.GetElement(m_Index)); + } + } + else + { + throw EXCEPTIONS::ConversionError("Cannot convert to decimal: " + m_rContext.GetElement(m_Index)); + } + + return value; } }; @@ -100,15 +118,33 @@ namespace PARSER DNHex(ExpressionContext &rExpContext, std::string &rString) : ExpressionNode(rExpContext) { + std::string stringIndex(rString, FIRST_STRING_CHARACTER_POS, rString.length() - GROUP_WRAPPER_LENGTH); + // Format of the string: hex(position) - m_Index = static_cast(std::strtoull(std::string(rString, FIRST_STRING_CHARACTER_POS, - rString.length() - GROUP_WRAPPER_LENGTH).c_str(), nullptr, 10)); + m_Index = static_cast(std::strtoull(stringIndex.c_str(), nullptr, 10)); } /// @copydoc ExpressionNode::EvaluateUint() virtual SafeUInt EvaluateUint() const { - return std::strtoull(m_rContext.GetElement(m_Index).c_str(), nullptr, 16); + SafeUInt value = 0; + if (IsHex(m_rContext.GetElement(m_Index))) + { + try + { + value = std::stoll(m_rContext.GetElement(m_Index).c_str(), nullptr, 16); + } + catch (const std::out_of_range&) + { + throw EXCEPTIONS::Overflow("Out of range decimal value: " + m_rContext.GetElement(m_Index)); + } + } + else + { + throw EXCEPTIONS::ConversionError("Cannot convert to hex: " + m_rContext.GetElement(m_Index)); + } + + return value; } }; @@ -162,7 +198,14 @@ namespace PARSER /// @copydoc ExpressionNode::EvaluateUint() virtual SafeUInt EvaluateUint() const { - return m_pLeft->EvaluateUint() + m_pRight->EvaluateUint(); + try + { + return m_pLeft->EvaluateUint() + m_pRight->EvaluateUint(); + } + catch (const std::out_of_range&) + { + throw EXCEPTIONS::Overflow("Overflow while adding."); + } } }; @@ -196,7 +239,14 @@ namespace PARSER /// @copydoc ExpressionNode::EvaluateUint() virtual SafeUInt EvaluateUint() const { - return m_pLeft->EvaluateUint() - m_pRight->EvaluateUint(); + try + { + return m_pLeft->EvaluateUint() - m_pRight->EvaluateUint(); + } + catch (const std::out_of_range&) + { + throw EXCEPTIONS::Overflow("Underflow while substracting."); + } } }; @@ -230,7 +280,14 @@ namespace PARSER /// @copydoc ExpressionNode::EvaluateUint() virtual SafeUInt EvaluateUint() const { - return m_pLeft->EvaluateUint() * m_pRight->EvaluateUint(); + try + { + return m_pLeft->EvaluateUint() * m_pRight->EvaluateUint(); + } + catch(const std::out_of_range&) + { + throw EXCEPTIONS::Overflow("Overflow while multiplying."); + } } }; @@ -264,7 +321,12 @@ namespace PARSER /// @copydoc ExpressionNode::EvaluateUint() virtual SafeUInt EvaluateUint() const { - return m_pLeft->EvaluateUint() / m_pRight->EvaluateUint(); + SafeUInt rightValue = m_pRight->EvaluateUint(); + if (0 == rightValue.GetValue()) + { + throw EXCEPTIONS::DivByZero(""); + } + return m_pLeft->EvaluateUint() / rightValue; } }; } diff --git a/sources/parsers/inc/Evaluator.h b/sources/parsers/inc/Evaluator.h index 8acd176..a970c76 100644 --- a/sources/parsers/inc/Evaluator.h +++ b/sources/parsers/inc/Evaluator.h @@ -35,10 +35,6 @@ namespace PARSER { - - // The forward declaration of the expression context class. - //class ExpressionContext; - /// The expression evaluator class. /// The expression evaluator class. @@ -56,20 +52,20 @@ namespace PARSER /// Parses the input decimal string. /// /// @param inString The input string. - /// @return True if successfully parsed. - bool ParseDecimalString(const std::string &inString); + /// @throws ParsingError On parsing error. + void ParseDecimalString(const std::string &inString); /// Parses the input float string. /// /// @param inString The input string. - /// @return True if successfully parsed. - bool ParseFloatString(const std::string &inString); + /// @throws ParsingError On parsing error. + void ParseFloatString(const std::string &inString); /// Parses the input string string. /// /// @param inString The input string. - /// @return True if successfully parsed. - bool ParseStringString(const std::string &inString); + /// @throws ParsingError On parsing error. + void ParseStringString(const std::string &inString); /// Set the expression context. /// @@ -94,6 +90,12 @@ namespace PARSER /// Evaluates the expression expecting the 'string' value. std::string EvaluateString() const; + /// Sets the syntax error index. + void SetSyntaxErrorIndex(size_t index) + { + m_SyntaxErrorIndex = index; + } + /// The lexer pointer must be a public interface as it is /// the expected lexer interface. @@ -125,9 +127,21 @@ namespace PARSER /// @return True if successfully parsed. bool ParseStringStream(std::istream &inStream); + /// Prints parsing error message. + std::string ParsingErrorMessage(const std::string& parsedExpression) const; + + /// Prints evaluation error message. + std::string EvaluationErrorMessage(const std::string& evaluationError) const; + + /// Syntax error index + size_t m_SyntaxErrorIndex = 0; + /// The expression source name. const std::string &m_rSourceName; + /// The evaluated expression. + std::string m_Expression; + /// Calculation context. mutable ExpressionContext m_Context; }; diff --git a/sources/parsers/inc/EvaluatorExceptions.h b/sources/parsers/inc/EvaluatorExceptions.h new file mode 100644 index 0000000..f49f95c --- /dev/null +++ b/sources/parsers/inc/EvaluatorExceptions.h @@ -0,0 +1,120 @@ +/// @file parsers/inc/EvaluatorExceptions.h +/// +/// The user expression parser's exceptions. +/// +/// @par Full Description +/// The exceptions being raised by the user expression parser. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2018 vcdMaker team +/// +/// 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. + +#pragma once + +#include + +/// The parser's exceptions. +namespace PARSER +{ + namespace EXCEPTIONS + { + /// The parsing error. The exception is raised when the user + /// expressions contains errors. + class ParsingError : public std::runtime_error + { + public: + /// The exception constructor. + /// + /// @param rMessage The exception warning. + ParsingError(const std::string &rMessage) : + std::runtime_error(rMessage) + { + } + }; + + /// The base evaluator exception class. + class EvaluatorException : public std::runtime_error + { + public: + /// The exception constructor. + /// + /// @param rMessage The exception warning. + EvaluatorException(const std::string &rMessage) : + std::runtime_error(rMessage) + { + } + }; + + /// The conversion error. The exception is raised when a string cannot + /// be successfully converted to a double, decimal or hexadecimal value. + class ConversionError : public EvaluatorException + { + public: + /// The exception constructor. + /// + /// @param rMessage The exception warning. + ConversionError(const std::string &rMessage) : + EvaluatorException(rMessage) + { + } + }; + + /// The overflow error. The arthmetics overflow detection. + class Overflow : public EvaluatorException + { + public: + /// The exception constructor. + /// + /// @param rMessage The exception warning. + Overflow(const std::string &rMessage) : + EvaluatorException(rMessage) + { + } + }; + + /// The regex index is out of range. + class IndexOutOfRange : public EvaluatorException + { + public: + /// The exception constructor. + /// + /// @param rMessage The exception warning. + IndexOutOfRange(const std::string &rMessage) : + EvaluatorException(rMessage) + { + } + }; + + /// The division by zero error. + class DivByZero : public EvaluatorException + { + public: + /// The exception constructor. + /// + /// @param rMessage The exception warning. + DivByZero(const std::string &rMessage) : + EvaluatorException("Division by zero." + rMessage) + { + } + }; + } +} + diff --git a/sources/parsers/inc/ExpressionContext.h b/sources/parsers/inc/ExpressionContext.h index 2489635..84348ed 100644 --- a/sources/parsers/inc/ExpressionContext.h +++ b/sources/parsers/inc/ExpressionContext.h @@ -84,6 +84,10 @@ namespace PARSER /// @return String representing the given regex group. std::string GetElement(size_t index) const { + if (static_cast(index) > m_pGroups->size()) + { + throw EXCEPTIONS::IndexOutOfRange("Regex group index out of range: " + std::to_string(index)); + } return (*m_pGroups)[index].str(); } diff --git a/sources/parsers/inc/ExpressionNode.h b/sources/parsers/inc/ExpressionNode.h index dddcc9f..e96afff 100644 --- a/sources/parsers/inc/ExpressionNode.h +++ b/sources/parsers/inc/ExpressionNode.h @@ -31,8 +31,10 @@ #include #include +#include #include "SafeUInt.h" +#include "EvaluatorExceptions.h" namespace PARSER { @@ -62,25 +64,42 @@ namespace PARSER /// Evaluates the complete 'uint' tree and returns the expression value. virtual SafeUInt EvaluateUint() const { - /// @todo Throw exception return 0; } /// Evaluates the complete 'double' tree and returns the expression value. virtual std::tuple EvaluateDouble() const { - /// @todo Throw exception return std::make_tuple(0.0, ""); } /// Evaluates the complete 'double' tree and returns the expression value. virtual std::string EvaluateString() const { - /// @todo Throw exception return ""; } protected: + /// Checks if the given string is a valid decimal number. + /// + /// @param rDecimalString A string to be validated. + bool IsDecimal(const std::string &rDecimalString) const + { + return (std::all_of(rDecimalString.begin(), + rDecimalString.end(), + [](char i) { return (i >= '0' && i <= '9'); })); + } + + /// Checks if the given string is a valid hex number. + /// + /// @param rHexString A string to be validated. + bool IsHex(const std::string &rHexString) const + { + return (std::all_of(rHexString.begin(), + rHexString.end(), + [](char i) { return ((i >= '0' && i <= '9') || (i >= 'a' && i <= 'f') || (i >= 'A' && i <= 'F')); })); + } + /// The beginning of the index string. const size_t FIRST_STRING_CHARACTER_POS = 4; diff --git a/sources/parsers/inc/FloatNode.h b/sources/parsers/inc/FloatNode.h index 2bbf47c..40369f4 100644 --- a/sources/parsers/inc/FloatNode.h +++ b/sources/parsers/inc/FloatNode.h @@ -30,6 +30,7 @@ #pragma once #include +#include #include "ExpressionNode.h" #include "ExpressionContext.h" @@ -74,16 +75,30 @@ namespace PARSER FNFlt(ExpressionContext &rExpContext, std::string &rString) : ExpressionNode(rExpContext) { + std::string stringIndex(rString, FIRST_STRING_CHARACTER_POS, rString.length() - GROUP_WRAPPER_LENGTH); + // Format of the string: flt(position) - m_Index = static_cast(std::strtoull(std::string(rString, FIRST_STRING_CHARACTER_POS, - rString.length() - GROUP_WRAPPER_LENGTH).c_str(), nullptr, 10)); + m_Index = static_cast(std::strtoull(stringIndex.c_str(), nullptr, 10)); } /// @copydoc ExpressionNode::EvaluateDouble() virtual std::tuple EvaluateDouble() const { - return std::make_tuple(std::stod(m_rContext.GetElement(m_Index), nullptr), - m_rContext.GetElement(m_Index)); + double value = 0; + try + { + value = std::stod(m_rContext.GetElement(m_Index), nullptr); + } + catch (const std::invalid_argument&) + { + throw EXCEPTIONS::ConversionError("Cannot convert to double: " + m_rContext.GetElement(m_Index)); + } + catch (const std::out_of_range&) + { + throw EXCEPTIONS::Overflow("Out of range double value: " + m_rContext.GetElement(m_Index)); + } + + return std::make_tuple(value, m_rContext.GetElement(m_Index)); } }; @@ -157,6 +172,11 @@ namespace PARSER std::string rightStringValue; std::tie(rightValue, rightStringValue) = m_pRight->EvaluateDouble(); + if ((std::numeric_limits::max() - leftValue) < rightValue) + { + throw EXCEPTIONS::Overflow("Overflow while adding."); + } + return std::make_tuple(leftValue + rightValue, ""); } }; @@ -199,6 +219,11 @@ namespace PARSER std::string rightStringValue; std::tie(rightValue, rightStringValue) = m_pRight->EvaluateDouble(); + if ((std::numeric_limits::min() + rightValue) > leftValue) + { + throw EXCEPTIONS::Overflow("Underflow while substracting."); + } + return std::make_tuple(leftValue - rightValue, ""); } }; @@ -241,6 +266,11 @@ namespace PARSER std::string rightStringValue; std::tie(rightValue, rightStringValue) = m_pRight->EvaluateDouble(); + if ((std::numeric_limits::max() / leftValue) < rightValue) + { + throw EXCEPTIONS::Overflow("Overflow while multiplying."); + } + return std::make_tuple(leftValue * rightValue, ""); } }; @@ -283,6 +313,11 @@ namespace PARSER std::string rightStringValue; std::tie(rightValue, rightStringValue) = m_pRight->EvaluateDouble(); + if (0 == rightValue) + { + throw EXCEPTIONS::DivByZero(""); + } + return std::make_tuple(leftValue / rightValue, ""); } }; diff --git a/sources/parsers/inc/FloatScanner.h b/sources/parsers/inc/FloatScanner.h index b5683b5..795f74c 100644 --- a/sources/parsers/inc/FloatScanner.h +++ b/sources/parsers/inc/FloatScanner.h @@ -55,11 +55,11 @@ namespace PARSER { - /** DecimalScanner is a derived class to add some extra function to the scanner + /** FloatScanner is a derived class to add some extra function to the scanner * class. Flex itself creates a class named yyFlexLexer, which is renamed using - * macros to DecimalFlexLexer. However we change the context of the generated - * yylex() function to be contained within the DecimalScanner class. This is required - * because the yylex() defined in DecimalFlexLexer has no parameters. */ + * macros to FloatFlexLexer. However we change the context of the generated + * yylex() function to be contained within the FloatScanner class. This is required + * because the yylex() defined in FloatFlexLexer has no parameters. */ class FloatScanner : public FloatFlexLexer { public: diff --git a/sources/parsers/inc/StringNode.h b/sources/parsers/inc/StringNode.h index f9ce577..8ee4f53 100644 --- a/sources/parsers/inc/StringNode.h +++ b/sources/parsers/inc/StringNode.h @@ -74,9 +74,10 @@ namespace PARSER SNTxt(ExpressionContext &rExpContext, std::string &rString) : ExpressionNode(rExpContext) { + std::string stringIndex(rString, FIRST_STRING_CHARACTER_POS, rString.length() - GROUP_WRAPPER_LENGTH); + // Format of the string: txt(position) - m_Index = static_cast(std::strtoull(std::string(rString, FIRST_STRING_CHARACTER_POS, - rString.length() - GROUP_WRAPPER_LENGTH).c_str(), nullptr, 10)); + m_Index = static_cast(std::strtoull(stringIndex.c_str(), nullptr, 10)); } /// @copydoc ExpressionNode::EvaluateString() diff --git a/sources/parsers/inc/StringScanner.h b/sources/parsers/inc/StringScanner.h index c27b350..6ed958e 100644 --- a/sources/parsers/inc/StringScanner.h +++ b/sources/parsers/inc/StringScanner.h @@ -57,7 +57,7 @@ namespace PARSER * class. Flex itself creates a class named yyFlexLexer, which is renamed using * macros to StringFlexLexer. However we change the context of the generated * yylex() function to be contained within the StringScanner class. This is required - * because the yylex() defined in DecimalFlexLexer has no parameters. */ + * because the yylex() defined in StringFlexLexer has no parameters. */ class StringScanner : public StringFlexLexer { public: diff --git a/sources/parsers/model/DecimalParser.yy b/sources/parsers/model/DecimalParser.yy index f80761a..cd1cc38 100644 --- a/sources/parsers/model/DecimalParser.yy +++ b/sources/parsers/model/DecimalParser.yy @@ -192,5 +192,5 @@ start : /* empty */ void PARSER::DecimalParser::error(const DecimalParser::location_type& l, const std::string& m) { - std::cout << "Error: " << m << '\n'; + evaluator.SetSyntaxErrorIndex(l.begin.column); } diff --git a/sources/parsers/model/FloatParser.yy b/sources/parsers/model/FloatParser.yy index 05728a3..5c67e77 100644 --- a/sources/parsers/model/FloatParser.yy +++ b/sources/parsers/model/FloatParser.yy @@ -181,5 +181,5 @@ start : /* empty */ void PARSER::FloatParser::error(const FloatParser::location_type& l, const std::string& m) { - std::cout << "Error: " << m << '\n'; + evaluator.SetSyntaxErrorIndex(l.begin.column); } diff --git a/sources/parsers/model/StringParser.yy b/sources/parsers/model/StringParser.yy index 721fe13..5889005 100644 --- a/sources/parsers/model/StringParser.yy +++ b/sources/parsers/model/StringParser.yy @@ -144,5 +144,5 @@ start : /* empty */ void PARSER::StringParser::error(const StringParser::location_type& l, const std::string& m) { - std::cout << "Error: " << m << '\n'; + evaluator.SetSyntaxErrorIndex(l.begin.column); } diff --git a/sources/parsers/src/Evaluator.cpp b/sources/parsers/src/Evaluator.cpp index d6268ab..adb703f 100644 --- a/sources/parsers/src/Evaluator.cpp +++ b/sources/parsers/src/Evaluator.cpp @@ -51,27 +51,39 @@ #include "StringScanner.h" PARSER::Evaluator::Evaluator(const std::string &rSourceName) : - m_Context(NULL, 0), + m_Context(nullptr, 0), m_rSourceName(rSourceName) { } -bool PARSER::Evaluator::ParseDecimalString(const std::string &input) +void PARSER::Evaluator::ParseDecimalString(const std::string &input) { std::istringstream iss(input); - return ParseDecimalStream(iss); + if (!ParseDecimalStream(iss)) + { + throw PARSER::EXCEPTIONS::ParsingError(ParsingErrorMessage(input)); + } + m_Expression = input; } -bool PARSER::Evaluator::ParseFloatString(const std::string &input) +void PARSER::Evaluator::ParseFloatString(const std::string &input) { std::istringstream iss(input); - return ParseFloatStream(iss); + if (!ParseFloatStream(iss)) + { + throw PARSER::EXCEPTIONS::ParsingError(ParsingErrorMessage(input)); + } + m_Expression = input; } -bool PARSER::Evaluator::ParseStringString(const std::string &input) +void PARSER::Evaluator::ParseStringString(const std::string &input) { std::istringstream iss(input); - return ParseStringStream(iss); + if (!ParseStringStream(iss)) + { + throw PARSER::EXCEPTIONS::ParsingError(ParsingErrorMessage(input)); + } + m_Expression = input; } void PARSER::Evaluator::SetContext(const std::smatch *pGroups, uint64_t lineNo) const @@ -88,7 +100,14 @@ std::tuple PARSER::Evaluator::EvaluateDouble() const { double value; std::string stringValue; - std::tie(value, stringValue) = m_Context.GetExpression()->EvaluateDouble(); + try + { + std::tie(value, stringValue) = m_Context.GetExpression()->EvaluateDouble(); + } + catch (const EXCEPTIONS::EvaluatorException& evaluatorError) + { + throw PARSER::EXCEPTIONS::EvaluatorException(EvaluationErrorMessage(evaluatorError.what())); + } if (stringValue.empty()) { @@ -102,12 +121,26 @@ std::tuple PARSER::Evaluator::EvaluateDouble() const uint64_t PARSER::Evaluator::EvaluateUint() const { - return m_Context.GetExpression()->EvaluateUint().GetValue(); + try + { + return m_Context.GetExpression()->EvaluateUint().GetValue(); + } + catch (const PARSER::EXCEPTIONS::EvaluatorException& evaluatorError) + { + throw PARSER::EXCEPTIONS::EvaluatorException(EvaluationErrorMessage(evaluatorError.what())); + } } std::string PARSER::Evaluator::EvaluateString() const { - return m_Context.GetExpression()->EvaluateString(); + try + { + return m_Context.GetExpression()->EvaluateString(); + } + catch (const PARSER::EXCEPTIONS::EvaluatorException& evaluatorError) + { + throw PARSER::EXCEPTIONS::EvaluatorException(EvaluationErrorMessage(evaluatorError.what())); + } } bool PARSER::Evaluator::ParseDecimalStream(std::istream &in) @@ -154,3 +187,16 @@ bool PARSER::Evaluator::ParseStringStream(std::istream &in) #endif return (parser.parse() == 0); } + +std::string PARSER::Evaluator::ParsingErrorMessage(const std::string& parsedExpression) const +{ + std::string arrows(m_SyntaxErrorIndex - 1, '-'); + arrows += '^'; + std::string errorMessage(parsedExpression + '\n' + arrows + '\n'); + return errorMessage; +} + +std::string PARSER::Evaluator::EvaluationErrorMessage(const std::string& evaluationError) const +{ + return std::string ("Expression: " + m_Expression + "\n" + evaluationError); +} diff --git a/sources/vcdMaker/src/vcdMaker.cpp b/sources/vcdMaker/src/vcdMaker.cpp index 0e5c05c..18ebc16 100644 --- a/sources/vcdMaker/src/vcdMaker.cpp +++ b/sources/vcdMaker/src/vcdMaker.cpp @@ -94,11 +94,11 @@ int main(int argc, const char *argv[]) LOGGER::Logger::GetInstance().LogError(rException); executionStatus = EXECUTION::APP_ERROR; } - catch (TCLAP::CmdLineParseException &) + catch (const TCLAP::CmdLineParseException &) { executionStatus = EXECUTION::APP_ERROR; } - catch (TCLAP::SpecificationException &) + catch (const TCLAP::SpecificationException &) { executionStatus = EXECUTION::APP_ERROR; } diff --git a/sources/vcdMerge/src/Merge.cpp b/sources/vcdMerge/src/Merge.cpp index 119737c..6d19e2e 100644 --- a/sources/vcdMerge/src/Merge.cpp +++ b/sources/vcdMerge/src/Merge.cpp @@ -53,7 +53,7 @@ void MERGE::Merge::Run() { m_MaxLeadingTime = FindMaxLeadingTime(); } - catch (std::out_of_range &) + catch (const std::out_of_range &) { // Sources cannot be merged. throw EXCEPTION::VcdException(EXCEPTION::Error::LEADING_TIME_OUT_OF_BOUNDS, @@ -74,12 +74,12 @@ void MERGE::Merge::Run() transformed_source_sync = TransformTimestamp(pSource->GetSyncPoint(), m_MinTimeUnit, source_time_unit); } - catch (std::out_of_range &) + catch (const std::out_of_range &) { LOGGER::Logger::GetInstance().LogWarning(EXCEPTION::Warning::SYNCHRONIZATION_TIME_OUT_OF_BOUNDS, - "Synchronization time out of bounds. Cannot merge " - + pSource->GetDescription() - + "."); + "Synchronization time out of bounds. Cannot merge " + + pSource->GetDescription() + + "."); continue; } @@ -96,14 +96,14 @@ void MERGE::Merge::Run() source_time_unit), transformed_source_sync)); } - catch (std::out_of_range &) + catch (const std::out_of_range &) { LOGGER::Logger::GetInstance().LogWarning(EXCEPTION::Warning::TIMESTAMP_OUT_OF_BOUNDS, - "Timestamp out of bounds. Cannot merge " + - pSignal->GetName() + - " at " + - std::to_string(pSignal->GetTimestamp().GetValue()) + " " + - pSource->GetTimeUnit()); + "Timestamp out of bounds. Cannot merge " + + pSignal->GetName() + + " at " + + std::to_string(pSignal->GetTimestamp().GetValue()) + " " + + pSource->GetTimeUnit()); delete pSignal; continue; diff --git a/sources/vcdMerge/src/SignalSource.cpp b/sources/vcdMerge/src/SignalSource.cpp index 36efcbc..b0b4477 100644 --- a/sources/vcdMerge/src/SignalSource.cpp +++ b/sources/vcdMerge/src/SignalSource.cpp @@ -8,7 +8,7 @@ /// /// @ingroup Merge /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -142,7 +142,7 @@ void MERGE::SignalSource::SetSyncPoint(const std::string &rSyncPoint) { m_SyncPoint = std::stoull(rSyncPoint); } - catch (std::logic_error &) + catch (const std::logic_error &) { throw EXCEPTION::VcdException(EXCEPTION::Error::INVALID_SYNCHRONIZATION_POINT_VALUE, "Invalid synchronization point value: " + rSyncPoint); diff --git a/sources/vcdMerge/src/vcdMerge.cpp b/sources/vcdMerge/src/vcdMerge.cpp index d6dc573..2b3689b 100644 --- a/sources/vcdMerge/src/vcdMerge.cpp +++ b/sources/vcdMerge/src/vcdMerge.cpp @@ -2,7 +2,7 @@ /// /// The main module of the vcdMerge application. /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -92,14 +92,14 @@ int main(int argc, const char *argv[]) LOGGER::Logger::GetInstance().LogError(rException); executionStatus = EXECUTION::APP_ERROR; } - catch (TCLAP::CmdLineParseException &) + catch (const TCLAP::CmdLineParseException &) + { + executionStatus = EXECUTION::APP_ERROR; + } + catch (const TCLAP::SpecificationException &) { executionStatus = EXECUTION::APP_ERROR; } - catch (TCLAP::SpecificationException &) - { - executionStatus = EXECUTION::APP_ERROR; - } return executionStatus; } diff --git a/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj b/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj index 333363d..6d015de 100644 --- a/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj +++ b/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj @@ -136,6 +136,7 @@ + diff --git a/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj.filters b/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj.filters index 27b1dff..096dbaa 100644 --- a/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj.filters +++ b/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj.filters @@ -85,5 +85,8 @@ Header Files + + Header Files + \ No newline at end of file From 025525e23cdb51e3bb7dfd337b4715d3d5ced82d Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Mon, 27 Aug 2018 09:54:21 +0200 Subject: [PATCH 100/143] #25 Comments update --- sources/parsers/auto/FloatScanner.cpp | 2 +- sources/parsers/model/FloatScanner.ll | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/parsers/auto/FloatScanner.cpp b/sources/parsers/auto/FloatScanner.cpp index 4b50464..208ac84 100644 --- a/sources/parsers/auto/FloatScanner.cpp +++ b/sources/parsers/auto/FloatScanner.cpp @@ -2021,7 +2021,7 @@ void FloatScanner::set_debug(bool b) } -/* This implementation of DecimalFlexLexer::yylex() is required to fill the +/* This implementation of FloatFlexLexer::yylex() is required to fill the * vtable of the class ExampleFlexLexer. We define the scanner's main yylex * function via YY_DECL to reside in the Scanner class instead. */ diff --git a/sources/parsers/model/FloatScanner.ll b/sources/parsers/model/FloatScanner.ll index 12c0de8..dbdfea9 100644 --- a/sources/parsers/model/FloatScanner.ll +++ b/sources/parsers/model/FloatScanner.ll @@ -120,7 +120,7 @@ void FloatScanner::set_debug(bool b) } -/* This implementation of DecimalFlexLexer::yylex() is required to fill the +/* This implementation of FloatFlexLexer::yylex() is required to fill the * vtable of the class ExampleFlexLexer. We define the scanner's main yylex * function via YY_DECL to reside in the Scanner class instead. */ From a1b81c710f377689041d6293d6d936fc3acc2323 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Mon, 27 Aug 2018 12:02:47 +0200 Subject: [PATCH 101/143] #25 Samples update --- .../doc/examples/system1_time1_user.txt | 1 + sources/common/doc/examples/user1.xml | 6 +-- sources/common/doc/examples/user2.xml | 2 +- sources/common/doc/manual.odt | Bin 559969 -> 559968 bytes sources/common/doc/manual.pdf | Bin 865087 -> 865088 bytes sources/parsers/auto/FloatScanner.cpp | 2 +- sources/parsers/inc/DecimalNode.h | 36 ++++++++---------- sources/parsers/inc/ExpressionNode.h | 20 ---------- sources/parsers/model/FloatScanner.ll | 2 +- windows/Installer/Product.wxs | 4 ++ 10 files changed, 26 insertions(+), 47 deletions(-) diff --git a/sources/common/doc/examples/system1_time1_user.txt b/sources/common/doc/examples/system1_time1_user.txt index 291cca9..71727ed 100644 --- a/sources/common/doc/examples/system1_time1_user.txt +++ b/sources/common/doc/examples/system1_time1_user.txt @@ -1,3 +1,4 @@ +Press joystick pressed for more than 3 seconds to start/stop logging. 22:800.725 Sensors-Accelerometer.AccX -15106.000000 22:801.269 Sensors-Accelerometer.AccY -465.000000 22:801.758 Sensors-Accelerometer.AccZ 2590.000000 diff --git a/sources/common/doc/examples/user1.xml b/sources/common/doc/examples/user1.xml index 9118cb9..28e5dc2 100644 --- a/sources/common/doc/examples/user1.xml +++ b/sources/common/doc/examples/user1.xml @@ -19,10 +19,10 @@ - ([[:d:]]+):([[:d:]]+)\.([[:d:]]+) Buttons-SW([13]+) ([[:d:]]+) + ([[:d:]]+):([[:d:]]+)\.([[:d:]]+) Buttons-SW([13]+) ([x[:d:]]+) 1000000*dec(1) + 1000*dec(2) + dec(3) - "FRDM.Buttons-SW" + txt(4) - dec(5) + "FRDM.Buttons.SW" + txt(4) + hex(5) 1 diff --git a/sources/common/doc/examples/user2.xml b/sources/common/doc/examples/user2.xml index 42fb578..c4ba44c 100644 --- a/sources/common/doc/examples/user2.xml +++ b/sources/common/doc/examples/user2.xml @@ -14,7 +14,7 @@ ([[:digit:]]+):([[:digit:]]+)\.([[:digit:]]+) ([[:graph:]]+)-([[:graph:]]+) ([[:digit:][:punct:]]+) 1000000*dec(1) + 1000*dec(2) + dec(3) "Disco." + txt(4) + "." + txt(5) - /6 + flt(6) diff --git a/sources/common/doc/manual.odt b/sources/common/doc/manual.odt index 71677e8ef128782fa3ca083557a82fa245211892..7c4e7cf59c249c0da6aa1c2b12b50a2f4eef5241 100644 GIT binary patch delta 21095 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 b{;hY-zxR^6rr+j4w}tlQ_32YJrrP@-zU+hT delta 5916 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 = std::stod(yytext, NULL); + yylval->doubleValue = std::stod(yytext, nullptr); return token::DOUBLE; } YY_BREAK diff --git a/sources/parsers/inc/DecimalNode.h b/sources/parsers/inc/DecimalNode.h index a5a7769..5239276 100644 --- a/sources/parsers/inc/DecimalNode.h +++ b/sources/parsers/inc/DecimalNode.h @@ -84,20 +84,17 @@ namespace PARSER virtual SafeUInt EvaluateUint() const { SafeUInt value = 0; - if (IsDecimal(m_rContext.GetElement(m_Index))) + try { - try - { - value = std::stoll(m_rContext.GetElement(m_Index).c_str(), nullptr, 10); - } - catch (const std::out_of_range&) - { - throw EXCEPTIONS::Overflow("Out of range decimal value: " + m_rContext.GetElement(m_Index)); - } + value = std::stoll(m_rContext.GetElement(m_Index).c_str(), nullptr, 10); } - else + catch (const std::out_of_range&) { - throw EXCEPTIONS::ConversionError("Cannot convert to decimal: " + m_rContext.GetElement(m_Index)); + throw EXCEPTIONS::Overflow("Out of range decimal value: " + m_rContext.GetElement(m_Index)); + } + catch (const std::invalid_argument&) + { + throw EXCEPTIONS::ConversionError("Cannot convert to hex: " + m_rContext.GetElement(m_Index)); } return value; @@ -128,18 +125,15 @@ namespace PARSER virtual SafeUInt EvaluateUint() const { SafeUInt value = 0; - if (IsHex(m_rContext.GetElement(m_Index))) + try + { + value = std::stoll(m_rContext.GetElement(m_Index).c_str(), nullptr, 16); + } + catch (const std::out_of_range&) { - try - { - value = std::stoll(m_rContext.GetElement(m_Index).c_str(), nullptr, 16); - } - catch (const std::out_of_range&) - { - throw EXCEPTIONS::Overflow("Out of range decimal value: " + m_rContext.GetElement(m_Index)); - } + throw EXCEPTIONS::Overflow("Out of range decimal value: " + m_rContext.GetElement(m_Index)); } - else + catch (const std::invalid_argument&) { throw EXCEPTIONS::ConversionError("Cannot convert to hex: " + m_rContext.GetElement(m_Index)); } diff --git a/sources/parsers/inc/ExpressionNode.h b/sources/parsers/inc/ExpressionNode.h index e96afff..6414c1c 100644 --- a/sources/parsers/inc/ExpressionNode.h +++ b/sources/parsers/inc/ExpressionNode.h @@ -80,26 +80,6 @@ namespace PARSER } protected: - /// Checks if the given string is a valid decimal number. - /// - /// @param rDecimalString A string to be validated. - bool IsDecimal(const std::string &rDecimalString) const - { - return (std::all_of(rDecimalString.begin(), - rDecimalString.end(), - [](char i) { return (i >= '0' && i <= '9'); })); - } - - /// Checks if the given string is a valid hex number. - /// - /// @param rHexString A string to be validated. - bool IsHex(const std::string &rHexString) const - { - return (std::all_of(rHexString.begin(), - rHexString.end(), - [](char i) { return ((i >= '0' && i <= '9') || (i >= 'a' && i <= 'f') || (i >= 'A' && i <= 'F')); })); - } - /// The beginning of the index string. const size_t FIRST_STRING_CHARACTER_POS = 4; diff --git a/sources/parsers/model/FloatScanner.ll b/sources/parsers/model/FloatScanner.ll index dbdfea9..7087752 100644 --- a/sources/parsers/model/FloatScanner.ll +++ b/sources/parsers/model/FloatScanner.ll @@ -76,7 +76,7 @@ typedef PARSER::FloatParser::token_type token_type; /*** Lexer rules ***/ -*[0-9]+\.*[0-9]* { - yylval->doubleValue = std::stod(yytext, NULL); + yylval->doubleValue = std::stod(yytext, nullptr); return token::DOUBLE; } diff --git a/windows/Installer/Product.wxs b/windows/Installer/Product.wxs index 1068a00..e6a8607 100644 --- a/windows/Installer/Product.wxs +++ b/windows/Installer/Product.wxs @@ -48,12 +48,16 @@ + + + + From 3eb6d3f5c3f84f0aab30081a5f88fe5ab924778a Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Mon, 27 Aug 2018 13:02:34 +0200 Subject: [PATCH 102/143] #25 64bit redist --- windows/Bootstrapper/Bundle.wxs | 1 + 1 file changed, 1 insertion(+) diff --git a/windows/Bootstrapper/Bundle.wxs b/windows/Bootstrapper/Bundle.wxs index d5ef20c..0243848 100644 --- a/windows/Bootstrapper/Bundle.wxs +++ b/windows/Bootstrapper/Bundle.wxs @@ -42,6 +42,7 @@ InstallCommand="/quiet /norestart" DetectCondition="vcRedistVersion >= "14.12.25810""> + \ No newline at end of file From 7149f301a1e6a1a631e09f74b366ab320487aedd Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Tue, 28 Aug 2018 21:34:59 +0200 Subject: [PATCH 103/143] #25 Vector size warning --- sources/common/doc/manual.odt | Bin 559968 -> 560105 bytes sources/common/doc/manual.pdf | Bin 865088 -> 865601 bytes sources/common/inc/ISignal.h | 7 +++++++ sources/common/inc/SignalFactory.h | 10 ++++++++++ sources/common/inc/VcdException.h | 19 +++++++++++++++++++ sources/common/inc/VcdExceptionList.h | 3 +++ sources/common/src/SignalFactory.cpp | 17 +++++++++++++++-- 7 files changed, 54 insertions(+), 2 deletions(-) diff --git a/sources/common/doc/manual.odt b/sources/common/doc/manual.odt index 7c4e7cf59c249c0da6aa1c2b12b50a2f4eef5241..94bfc44ab3a84b9024327e85fe1000f7310b5cf3 100644 GIT binary patch delta 21262 zcmbUHQ;;rf%ms+HZQHhO+ctLFcE4@!wr$(Cjor3wd%pjlnKMDo&eKTXm1IG|(13uTfPl8G@e<%=K>z!arh$pm_(GsyVE+e$f`a;AEMDz@u!K{d z|2ri~92n()eH~!V|NVJDh?81?(f%)-_5Twi1^GW?JRt1<6Kiq?L5BHXFbs|Wu) zmALom53Xajl)6r@0_JJMxW*dy2L5 zo9#9Q_+HVa)9>=c3i`?I9%%CY4orUY@Z$kCEnfY1((c!XyFRFX)6VzbHp8lRkNvRo z!1G59^SHbWdta+Zhk?uIFgqO>W)5~(t{LkP%zOK|1b8~Tx@>k@vSN7w{3_u?`^eky zlza$zx?r{9ir9yw=FDH|9>pBXr0-YR@7_D_`%U-M>jS>STU+@He*B^8x9*u)B=%*r zLae#x_Vye3;Ynw9xbF*_90#|vZh%%0%HX0`$E2UrZ*ei$8@}7NyLGVg(b|sj9=RXa zFTXLT!HNUeY+;`flzQ7eWZTQdBXY}QL%*^wdvCHES{L+i>b}Z2$35rH-v(Hgu=-~&k z5yd+=g^?`mDaYgKinaS#*TX`E4OT|npzDTY|3|;)U)`i_zod9T_~p5=rx@Z$$?XQ_ zzZVo>c{y|GUKm0QAfs2`)K3;hBf5XtWT7=~- z(*^I6rlj-nbtQ#|atHXKm=yVUIH-QpI1sqHJC}k^f#?PrZw_Dos)FO{t1rXf$ARSn z91|61S;lmy!8KUio(!`&96C+py~6MA}|GV>$36Try;ddjCCosO@SdyD3)t9P-u zD}NpoaqWeMif)15T``_mx^+^%ERZv2KqpU-Szo^#8AG;+TgYh|c zJ|=~F_mgdaGfh+A%7l(yXtGhp-3*A#+--A7RY&|cC;u65v?gS$Y17+C!r>>@;yMO_;8`ua?EQt%xibTA{ho4sCYH@|gb-^F zT%?CK&7gSuQ%Ga$x{vicmz?}HpH`(S+mYFv=c_I1(b?})@R2CCi~K}&%p5~8h&P^0 zjT>L;_jrJ!k@xX8()vN<7cAio!Zvfdkw#wI{Fq#N+$9rDjh>bNC`MMoBOvQfaqk{! zr|Vd|KCd$!DSHf<6-yvj*1(7C*9c^)M^iW=bK?u>zACK%@=jUY(OBii$HzkE0NgT( z`!Xbrgq?A!x@-quT-escpSUgh_%6}iS~BM}rxes3D(IE-h zKSwOzvZlinu~Uw3=S6GS)&OdU^9hVr?KJ!O(9Memm0V?tcK3)Sl~_sQ?9mzXxz+9X zrQ8*34Owp3l>9P?(k7irtF`kB&c;iMbX%iS+j#YfyOOU2$$YB!O0b!^*Vl(sEV3Y) z(Xqz?K0Nji&CzydM~hg!+@KZ}`@td=N9f)i%QN({gM)Z_vm#B{bpYk!x(+og$LgYK z(zH8m<%VI!>{qorH2b`_jvL06#9Fc9DWiB^3;U1M%M4X}HTr{8^R{*&d73`YnE}0C zC9A(?XKwb&j4N{>SWR6wA%i@hvXK*SivufGNB=)}YhQtiA1X7DUYC8rb~a`ADIaI@ zMFulH{uLhUeCds26#!>0l#n8k|3(R2#WIk0wtUB5qd1#JU)(%yC1g#tCCP9 zc*$i)H?^IaIAPX(G&eVQ1-bMFZLc>3uqD<_X@BRUl(^BrRM}~0#WdV}Fbq*;2!J1Q zE?yX4;_JfaHUZRaPC=4VNM&VNK_H5FTNlZjc+}n9WAdx#$(xK5J(X}Rw6baDBd8kH zT%YEPw~X~C&YwiIt9sg_7=1XNMjt_1jyE{X8VLobUBb?=9YlOd(w@q8>)A+#3Jtp4 zLRQtu&K~3}NX!>HF~hN!15mRhZo>Y<_i}k3;!1y`(*g4@gcx_?i?GHRKuh;TIY^xl zR3PSb+lTOYnaond=8nzwydc2>a~NosBOKSDMhJ3>_$1X^vKd}ZoipX@+S zRWqws8i1=gzF4F(99mwCgY784!m+?<$9A9Rm2H9GtNVlHo`DApadeh4BN_m<_H#1w zg1y^>bDtNV07PdiFSlVLHf`A)PBEKXp1U9edaOai(#k@ojyUo;@RrXkuidta!I|n! zeyi$cao2dsjXgXO|hDcI95_Q)YwFIiFv+=fV_Au1Ced!Q?n= z?cFN2>{W)lrXe)NA{8Ww?pRQRWdbKXy+@^2{p2Eg!C>b-#hHR8eRp=EHrb9)SL>76 z6Ht`Qtvf+x6VJCuYZiI^=UI^m`=bOdf9-;I&ilEfI^nG}BVgFN=m^g@@6#DWdPn?< zi=PVOc7ts3i54cgj%`mf$&G%XVUD)a*gzTZ8Sx_X5z|4ZZCHC%EtzW5^)j`Y=kG64 z_OWhP@^S&_qv{{4Zya|yKF?E={bc>xqei37or6}>GQkK)?e&I z0#V%CfNy1-Xp(gXi1e$a%HLxJP~&{e0%q&y*#qa#FwRoA(-qzqLzqhR^^-kG1tX08|!h zr+xck_2;sZkEX$+%b3F*R0w<5L}d44FiK~1U< zSB2n8a0##eh|lpSx+dKaD^X|X_Ipabg0AgHRnk0noBWfJ;l~U&GR`7Zlv!QXLjR=L zb~QpR=Xh#OsM4#vtSljfqs;Mc2J}C{>QWu+Jld{TmK3_vZFc#D+7(~-t5@QxljE1Q zF4K(AH4O&PKqW5QFw_?hwraboTyT!loVx=r2VFu_5$TupK`Ea)xIMQh2^mi{VzuW6 zfxu*?ZYuXTrTm@`{(1qkzx@TSO#dFQ!#UHZx*J>m9Lf(?|N9y|eRqOr@Jp{(d7QYCas$OfA7R?4rikrb({laFL zK)!p@80|SCs+u*!eTwtte+js~Xq8mL25r{)r69aF=TS=3N&uU^INY+TKOWPTA^it# zfx4Q($w6w5K6v(AQ$Ko^2kiT?MyMoV9UFji+|WXVCI7 zsnM`dkR6%tCCDbPboW!2k`;g8AidW832DQ25MLm2n3G=>A9qSF)clhXV4U{%8;h@j-}L@B3yA=A^V{Gd(3Pzt|>1Q}gv}jXVvz!B91gnfJx#4*>lBwd}*UHo6zh zSxm@!sM#2r0Dlm(Z19|dxOCr$ALN(#u%*M4iN-IHOOU^zKe&VSJEQys1A}=YdRQ&l z$wSIltfr+bl%+WyW==yI*5?nJs02@5KEgpu^K&0%(1DmEypi;XC0{$#609Bn}SfH5~aMnCH!x}JY|p^}lF5lj-|DX{V9)9{y5&+1B)`HXH( zcxBiM=%$0c1yn#!St>P1Q>ZI7P68#|x7KEHEFls>n8 z{#xrkzwAR}JD+vr8ZSG5Z^y>hpUd!+o>xOw->aTq9TT(L?^Pt~xxr6|+n(Q^*IziN z|6du1|4%W%|5FV<;eoFEclQ4s-|fx+e|-Pnbby`z7kqB_Ki5VACO6E#iV|RZqL)VJ z#NuC>Lq~F(7OI|eOl76F#$Z4e>CEO_VFjObm#j1#CYW5UPa4 zkfDREMvyrVw~JP%=3^tywMf%X<-NHYNUzHak5Zz9WhLF>&T~`kO06YL~A6?(^tC*cRy?`Qu zZUHw8#DB^vUd;X#Qs&`foV^**Js)1{u%(?rHO}&-!_%@-Wl8;c+&98h8T+{chNSs# zwuy^@I+pC&k+zQ+xrJwoBfHM{g#IR^EITs(>i{sN>`3QH$%nxbdH`s3c0WGr&qE@E zrtSkh+xsnUu{n-FR`9{AwzvC(=^3owm@6pz@8v(W;lidcJ$A{rRX?qdy9Yg1zNRiH$ew38KCj_Q+9_bhpd}W@GbCMYapuHS-wtkRz7meV5-`<04KSY z*Yry0(#BS>!}N0<1ALKwL$p5sgh1 zb8N)`fhzle+RBS5p6U>PsdZ4rwERTKC17*ouu?~_#xo{d1;uc0Q?>yX?M{nuO&fi% zAU#UV%v?@UAKzZPTVYIp#SSe1zmkSTXY@91!A;QH&p0;YI^%_{SPNQJze7?9hR%mV zC>lS)hBZyz0N?lV{SiGYVt(F&XqrRGqHFaU@w3J~)ht_t5pcBfB$tQ%wnza5Y=PFeTbBS7tq{W1m0#mpqX|{JK)g9@uuG}-{zg{A^ zKo1jg15?us2^4;;8LQLhsnNUk?SP4xTmxI5c)$Aot3qsnTEh zz-x^6I(#ze|nwS4N9tzJK`jgO<`Xz}RObu*&F zxr;amSgmZ4nj(il240MlW&`;D4XZMPYh z`_y19>(-SibiQcTKBdyDC+qj zPm4QwyHsCQa$dlK0D}ijOMO=|B@q&TaxZHUn+iX2FAAbDthDKzECS@LbLumiSc2q= zDp30vQL_VeQ=ATONt8XxThUJ!SH+lX22 zZDzB+Hx%OE8X#rlo!03N>fX>g)N(#NwmTzwu0v6?8>|zs-zm$$Xrn(FJ6B4~a(Lco zZ;lH?(IHu)dJ74MGz3j_c))S0OO-|I3#@M`;6W>x{e`zXGud9wFdd)td0Udy1G_ z00<+Ffoey_xd0rV76d;_ZU&J48}3opjW>(?MOSA$29wR(W*Vm+)0jixp)l8-C5a3Y zQu^Jd7_(8JKt1+MP{=OkW=C+!0H+^}tOR2Q8@9&YQ?`4(FN4>kERbn>m}%hEOG?Jg zKq2ry6l*5oxDFz!4mr53(8GJPx%3t(fOT`^`RqAl6EHvA5wB(pn5kaQIn9R&Fpub| zGm_y!L~zQ9A$hyVsQ^j;3llcnC~)`OzIJ+(@PsBZczWwR`tD_|^s9nJC%o7LM>?Ze zyCxrvfcKM5nhv;qv{f)mkf0toT%Sf!ch3Px02hoxy(oe3Wm3e0No;JH$zW6O8tzlvK!xrV#%ZlnrvFg()#{r@AW5txJ&J-jhdCb+iQ_YeDz9 zQQ>hu?ufjndG^O(anzj|`rQF4q6TAH03x3u*84p+a~t%*W(sS=6c!w6~f7 z#NPy+S&>%@y^b)`2agFufG8`WVFNZobr+(ZC>~6W)N40(#Dx>m2T4bori3J@l+fKK z@awx2oIxi-dy$Kx*W6Wrn14Of(NU1r43hb7X051t`QEc`1q7p_eJ|>wS5W8Rz+MFy zgp__ScQ>5kQmm%@ww{|S_lOV=?5ENa!?8RMf3ZOK$s+=*)}Ew0#9HIGNlCRN@ork z<-yC}%L)&8xyWC=dI__uo(shshzAlxjfQMfue6gT{goT(zUlZ^O3USKdbCxi+CKyb zp&AP&l}rkj-%W@KIF@fmh83sxyP*miVVPwy+sWt2;FOxIbZu0(ui&I&cm}&p+1EiL zJ7nZZPa1?0gN1|hb%yPq2Qu6Prc3M~#e*VSig&s%@DSSklbLU|AH?ofu{ljL1aplW zLj`hRpW%qZr3z$GI!Ne(gebvKc$-G-?ItOBR7HW@2E+5 z(XsiHVibLKlVDW@gPIKE>H&K~1?{@OOT|`2)hyYojpW_=U$0d1SZ!3PC-o@gd`GD1 zS+W0y)xQ!dr_k=>XnezbiNQ|2gN6e?2N6kI>>?sahm8T=cYsh7&BG&ywQ(xbQPJ%M zv}#-knF<&O;QLlIlh{$152+t0?{!ELc#>Q}^*WMCN9~H0vh??li&6}2ulZW5OXOwF zxnH+6t}aju-)xiBgi#lFME2-ruT4QWuf&pNYDg6W*R)4>EHaUQ`i}C-w`*juRiX5J zlerfTuW!9w3u5^DbPYNX^TOZR(DllxLUF8>^SG%4a`0p*N*qkX>EoW-ouyRUl0~OL zuVNKGy9!lnV(?6&;B=Oie=M)U7S=L77tsB5l z+aO`CEhEt}*5@CBltq2jJxPt%8pqSt`TaW2cRxd0myob0VV`QnzTV^Y=x@xus@HT< z&(_UQf3j&+32=QeFP8($DV>mZ9FFd(?x(W=>55;Z@36juc!nG)E_ocL_;D8g{Yjm? zEPj~!id!T>Ho4p_Zc|CK#n3F!HnHCA^naElQeC25O=jPF6Si_u|JW>6;0M{Y%Udxy zzzNWL+~;CcPM`|yE0-)Xja-+4BVsRPipM4p*$`a4n0sbyGp5@t_GW1FJxrQ{zwBQC z>QVejG2S7(Vk6=$pxiO7>~3X3Q{i~1;U(#Mq0^Ef?7&LR#K1FKy2Qm23klOJ`kk+r zk`tWpsSo41Op=xVAd-Rn*`IqrgYW1w{^+9>e#jDVy*A3HE)}MX(IzXTn4In){gIV0 zB^TVAWv1dzyXUtGrc^ev2H|&~9Fg`1Xq8+a(S)d*xZFJ((Hf83A9#l@!I@zE(dP3j zWHMWr;gqwcYvyBH|3QxD4=dfgHL-$+2Bpgd4_ufmbsi9rDbbr0aXFq~zOYb>v^K^N zzoGkK|Jz%N{*AM`mdYx=h#85&(gFFXWx0!x+-$5s@wG?pFTtG6t!2Tt{VZGzh}`ob zde9%^0GN+XE&4?66Pe7dGTRZd1|=te{(#7{vy>-XmCz!OMAaF?A!9+@f*Ux{IOs8* zg$&$89C8q7-5h4bl+8h7P_+H&_lE@8udr;^ttrB|W9F7wV_&2@XsPPfizHq^@%tty zck$pAL?5Pv*z>Ts@<4zoH%3zdBsy7bLaH%0ELjk?i<0{Jx~z?nTKA-SV|j+JX1gIM z<^Z8SBC1w{&DmVXu3Wcle4l~aorkh<+A7^ny=R$$Z}K*9qFR7UlT1dR5{tnAuE}4C zO>I$6^okIHy_?R>7zj>%tFC|EQBvbqgj2tXx` z$*eG3M+oo9QffDL2mxpc7XyXyXwmmnJ^@)*X9o)mmX^}}G#&qmmj;&blL`CMkOb;( zOhstHecgR~rBsSa+l#ufQJNZ-ffTUfMgvhba!T2U&Vyp*1zy%QQmDZrbLZWXbS+Z0 zh~ebKQSIl)^9&@og9?=ZNRcq<5L-+%l8|cT!=WuusmP-r%=uJQ^fJZ@Ueg9(Z3BtEdid+OHC zT1{IVt6!4uQ3WtXeM&8=e7?~p6Js{!nWAa073lc0m3UfhyiCrA zWiGzxV9RH?3oyzrZ9Fl;`Jx>do{ZfZRHO0Meryb+BEKyFLK(z_Z@3FDQYdRVeGK2@ zDax=5yn`KNhVw2x%qS9~xSF`Ybucx7&vw%)|Nolh^IVVAqEE$2uOlGvBVB<&=`2T| z$d0shpUC%YvQpnZsLxtVsG;E1-|xC#nulwdBFHQz{Dy4SZ$9^{NN#vN19@Z40^AQH z<7p)-0J@8>Srv^!j4bn7i7Z;#UqfxeDg)TD0>1L`*FS4Lk#4$ya(aAK3J|Zv^3ZriweQ_V2vg@E2opzQ%MZumzpu=rvwTwCDzL8?{l#i=@L1Xs z8B|@BoISpZW5wh7qYR>IZ^+2<#UALXG zV$&A?ys^FLeSMQ8>~3;*U9;-PGA@7(C~iLTT)cbWWc2?yU*r1O-2Hh|84#p);{ULs z`+XOAH+@88jF#@G<1UY3w}fNr#Ch)VT_5y0io z8B6I?%{}8WbRfQBj~6rdAnMhyf#kR_G94s#Ni>&1xd}d!I3{Q4il75~u-vF(j8WvR z(r^WR^?GPra$KICS@8Lf(g;Nh(14>{I`;`2VU0;3I3zb;z+$WhJS$JxH$u~*T$+`3 zRVPZRt8X9=x%tyBf1G)r-Wt*Mm})OhyIHdzM&>Nj3{ze>?pVe?O=XOZ@o(^+GX?o< z-zy~Yk@t9bj3hW00EHFLg-nj|XW4$~^=$awl!B{y5#8= zAPAw;wK`PjW8JrV^Rf|atP#E(T~7njyTs(jVHmv7tJF74nfE_xxqUADtbjw#F^iz1 zm$18Syf~!#U?IO=`uGNbtvL|oSR#^iq`&9N;6?plOQxEC%$#J?aVLAKDc`0SD72`YkU(bg2Ogb(Smr69c`wt;|m z=BX}3iaJ@p3mtk_z-n2vt;TEZp~dW%KcWLcG}x%MLtz+{6cDQQj6$a|L}dEBI{kw8 z+SKXwz7QG&AtdA6)|KOK!<1}h8=oxC8^8>u!Zf4_na{RnZY2OZGPVVe^w(7Q{TA?T zLB&@hgc4cC(835HgOyF`sKYpO4V43x4pl|f3*yRWC8nU%z%e&#>EgobsRB-d1#KW8ilntxsj}a$f zZ*FM;YHy{GKcO_5Q^YKb>4#q8L0X3j0R*>2Y%4WRM)xl@(V^ntdY*=_SPGA7)3OSC zzJ(DZO3IRo3kV}BN1-dp=;B)=VPp+6xY-8SCpSP>Cu`7+?W?aU;duX~W{o{8u$amx3!%Y+eSl z>{^F}d-h4cU?}2Q36?2_?-8Nj_mRV(I!^(a47Qw%3*$1w&*)Bb3C}O_Q;P zMhUtfTr6xAG)}4K^g5A}qE=a94_IpeiBfFCAXzY|z)~*TpNB(3@Ta$7FtDM|nIz7# zgFt{5v^y{o^D!Q~(dq%_2~r_SU)tZ+M!s}6fu?pI&;UAKSS#Fkn~d}>E3Ttx6(Gnf zsM7G!=9|A6@@3>wwv`#+6jdT4ud?CS(IEIuV{TrJQbLQ2BG*+=%567Kko6X@u+##iJaSF; z0#hqyW;DFoc;;n^g;ZCqhpXMRnfp+SHQ zXowizTz;h|#J>Q>D_oj!iGK~Lf6KBaGY|wog~>5kP={obz2H2gzofolhNP&hkU(n% zO8N7%hUo?^Ng^DuXqZE8S>AXS+3`2P8xqT`Ka6VJ*w@-^V3GHbWvisr5Gbv}V4PaI}F7F%AJ50lkrx`V8(+_*>6t^ zlcrx===-+w50O45A&T$989bkW3}ukWo#n2RyX%dWIfyl&IE*njxCY~}?X9Kv7* zBX%o6jB4LY?QO%U9nq`L?ui1NN95pRevs1{SlzE`$V^c~NwU`Ykqq}f{+)bpkq`_U z;{14LtUaxIp+wy=MtO+R?I1OGRoR=1f0Vm^;%;QHgOCU1A^GOr%LJ|(WhdRJ_D_I9j52f|kyDh(l zPoTVinbIzT=sMHZ-R+;D0kNpkc0tyeZukF*s~(=XtBy@; zoPi$6y_&}gnra^;~L%r=I8VHo4bl;wr79%kHk{_3NjJ}LB{ z^!nnLR0iic^ZN16yjK(;-*z_^H<`byv5~oz-zKU*42f0#{S5l0ZdIk@unhHWuXtJM z8^RfQdzkw0j93};`)W}SN&V6vGwlIcV_&zc{rlWU)iYbassHSSRVcVs4-_EeK@MgV zP_VHH7g*5g9b!;bMj_eWDrc+9gGclIwKg31LC-uN%&)N)bqf#R30N3@RTwojXV#R% z_Wu?KHd`QY1@2CIDEfjbD)+OSUv9-du49tvTfTJPm?Tr|t4G7N-R;25$)awe=1x2f zntZFVrPf?DoFKMi`9g0=Z^w351xBoo-57#%3O+r4{G`pt?~Qb)@f^NpU0>!KjD}u9 z%lx7=y2*oKoc#be4R}-wKE~#uzXV>7xoA7Nj>VRhj_L?U+J4Qfmy6a*dsl8;w(ivl zm*Kmg%N#LUg*Ga4x{VFGz!0lNS6FXB^hNq!mb2?MPZWW1ICS8&Ob)4}((=o(*=uLg{Ol}rlG~v>Xi*%vY#X`@;?OI^`42%7C zB4dDrFFRR`J)pLzIVQoh1dWEpA+!>W&5sm(Q5dnVR`6Jl!Oal-c{)11q+K5Z&Pz># zBAB-^;l}|vytdsOC;OR^=$@=jrf5c4Du_+ja2EFbY?{e`cS$}Q0Z6dtr;)WUAr;de zKuj$d3t@k9w)bn?b!|(W*%_Cg13Qc3!LZMU#f$l3gZZ#qa#MJ9^36D+r(-$J;6H16 zSM03zQl9%0rcpAkMMzNjq*-@J2B!jle@?c;48j1`GfkUFl^Txq;a1B$wryS5J#?_4 zAiU7a-iLHzN;T`<2oeXkw{DXHNRz2(*XNB2`k$e!d!N~H7|$3F)X#1QwUjTBsFXFu zL9%~rLbJ@gDolnfkP{>8IGphjA5#rsvoIw)Zl@%{C0qj{8tQMow&spcBa@f<#W~RU zaZUjrJ=};V-4b|lsYMiKuclbw+4#rc93#nFEG9qrIRgV9UF|JUNe=f6Exv_Qz!I?A z^!G+}pN*N*UIE;8e{VBAU_&JJ%x92(2Vr(1Q-ux#vCCHGcJD$6sqW{@r+eTQJkqr-L)H1Oo2HMkULCWEh}``9=U2 zaX_cp%P7RA!(TU_oEY1*!Way@zwfwzNuRm|jgR)rwoFh;yn zQ46wz9HXwWV$MF{LmPFweztuHaLx`;vq2Wad`WNW3Q^n+-=Zf1rs6d{n%H?K(uFJ~ zqkG|qy_TkFKkCK2Uc!r%lKHSm2T=iQq9pF#TV`t=AfTcP!U1QeRBzq-ckki@r<9SWkNK#V;cTN*Urh_;!hcX!ZshXvY@Nj%)AVAFj4ihFr=9pK z7m;(^FbW2=Ry@+}h`dwtRY?uA7cvwq_#nn2!a{B%NVBD|<&S4XGK^v7YfT6NZ>?Z@;8h@ zur{oNtW~L>L@3V+j9_3NEwovB7Wd@>*_O@gv6mZW*9`PFIu`K(NdNXd(F7zZAFD_g zM8)n0W9Q?IR$5IeLFa){|77aaE?;$o6rZfc7Fww6yetqD$fbZp7HYuG@Kyro3*9(H zs@jxiwicSz!L(v76AQl``miMyIsIG(Ebnb3XiD>$6v_vmO{@b*)Ey>gsgnzsMZTi% z2~30ShxxypLC6k=30zAjV+5AK>KQ_`SAFv^B*wVG1QTfg zo$lm@PjaWZ3IDz@@ht<=Z8UN60H7C6be=4?ys{n64Px8{W{K2Vm!liacxcc2xjxAS z&C7D2_w?1B*^ZW{Qgh;vbceMoMg+fQ=0wvyC=LTnGccw=WYdQrwTOBV6TX(hlu#J+5>ny)4@XI ztLM8<*7*_z&e#hAzlN!i1HbM-3weMp1gp6yKmS$V{dRmLnX$MzUV$2L2XrvBFERdj z{!>yrE_1v9_^gAy@&h>>>?_In4*NO-WiyS}LiPq9>yEvpgGfD!jfaPoGaa&q8`&N` zw~ViPk#GX43R@`H4OAfSpvHsJVCA#xAIRX3H!2AN%%%}_ofZp{NG$(OQ$JCbE2pia zc#RbwE`8aF$#|k|d}YWa7S@c7m&1xzV)81;X9O1#q5LWmu=Xr%oPpUUe^xwVgnPMb zsZbZ;?!u(HevV>dFmUO=h8iFfC=_@!!sS{E2}T0MA|q>IoPn|Kfg13 zrky}doF*p;a~hRi1bfpz%(z@TnbRXlDvXS0^cB>ri9@nl=s6=NNE@g83JXF`LM7U! zlVSm+PUg4>4U|t1zl$TAEW#suh#sS)Z8G}=pwX)59*+sra{$|M7``DMWp9MH7Z6K` z-!6>PW`!r{NhvTBph;&h>t{YCf_FG2Y9C_cI8mh}s>X)jn-KG<7<-NF5VbnfB%_~( zx=4O21fYbpx`rr>f%c0BsTQ{#4pitKQ#j!@KPHxw^KDcRfMk`sW?X^9ilBrof7v6ao=CyK0?snW&7ol3lUk*}Jm zZ8lW+qUruaD*+?j#T&zG>*Gi&5~pXZewtvd*=Cfp1vvy$?%AE3n5?-}&5gO^NRKP# z9)qO~L6^V7jhQBY(7~Jy((y|A6({9KP8aZavPJZ$f1@UHk2__0J6(PrWE9U6KO-Ge+5D_xTxqK2@GZCpBaY z6sVb~ce`+01amSEJ84rA8;=?^uk)v1TTNjg=sgiukJ5;316nAMJw~;%Tqp@iiVV0Q ziCv0~yOZvfBe=BIqH&gj!l$>b!*g5}4PitS!^e0nSN6$Ch@y*cT|y3BU0`mHc7PAF zc~0nRXsRZ}?=7iNij&PPh|D2*4;DYmL2Vc#Sgv*4g#sD&c*N$Yz!Y@*W33FjXrfOw z>04Tjc@i}DZiekA*rW=Hr4?NFx!(1- zE6Ib`qH6nO!_{ZQqGk1>`Sbe)>GCGpg{&}#Gk2J(H7^T?>D2!QJgf1KG?`p3_scsn z(}!+3))(%o;ws8y_^x#K1{SXdQ=6v1HXkuZTn`YAr4`uG*79u?WPkMk9HLefX6GyJ z?A{yA01CU9mQ+n<*9wx4ZyEGuW@^srT}jf#V_(oH5-q` z$t~2CWsT#&-ZATH?8vrfO>0}gu9e*Th4NoV0R&_g|JRBo8=l|@1q2>w&<3AmEjB`D zHJIn%BA0+lqzfLgr>Jh14*4WIf5XlJeYR-hv)i)%;u`Smx)w2ve2Mj^EAsHI2eeYu z8TzL2&^0;U9hrDGhaFVqhKSTHVPzD0`4K##Sh&HsGr!lNbtXU(i~z?^v*x!H8q!04 z1FWC(cguY*ybH-U-hghuqtMsP5Ea z1V?PL6PeK2#ns&nHuM=K61J4Qvtz#O*;PN3eFe>~S{M*tteS?-iX4;}x*#}XaLk6K zVb+4emJD4s#BOwi!QhtuiWt4A|MNZ#2TTA4c<%a8{8Yp}wNdiCi%e-snzYDtov z_Ia~wZ?G7I2Q7c^?n=kA5ihmH0TyIqaVCT*MCFpq_f6lHIIhcC?z{VNHpNRyfElxw+n0owa`tV34R z$-N<)+G@4)vcv3ywH9AQ-=V#;@9)Da#X1xBWjmiLih5uWb z5GH1(HYPhp2Q%?TaanoDxBdJw6dR6(8c;-X~Lr=W)8W{8yPsTT66 zbrUsuAoWbNK&VHz)ntAV-T+cq6#nOZp5=*30ExC)NA&~uD8Ek_|Liu1vf1os^!d(b3a&l>7l^l0TMm=Mar}-k1=anp*>chVm!fp zLSB``J|)I0NpUK@_P1A|=v03RpmCA|Qx=lBe(2J!f)eXZD-j?47$a=iX$p1@(NUxD1nh23SbV z!zOJ>QBS>f``;B^T<-wuOO!EqrQL_pLRlW!=gK{&Ftkt~YPei7?U)SV&4k31#`Dtf zP{`L&1urJOiG50yEYJl*GxIRH9g&MUBo*dE%Asu$qqhpcOFglnYJjQVeb?-wS} z`BMoI%5kp8>C54xk*pss;F?*> zNv+t8OF@asl7bu(^ydiq{f@g7>KV;(%1SD?R$tYYwDL&9*R2Snbvn&dO~UWIf9`UB z2jShW;I2MggQU1sKW&=BlT&TZV6YsYBzie0zO9v@l$JKOokrC@<+@nhgE`7zwozI3 zU5)hx>fHNI3^Ux%t%dffNiXNpnx1(WH<{JW;&UOhyiV8;`L*-NGyy{qZnX4-4 zv^@{_#}aJo;KR5iMoc*AW|UXEb_#hLoS;x>%m9x67WXhlD6`CVH*$oaMO&UQay zLhF;ps_~j=x|^XrbB97{rBDF1SWhx4y|Y;I2ej$QeE8Vx4~D?_wtV~1cv=wrea^R} zk=E)deJBF+CVx=I*VdDkH^W4`nNF49f`95^oaif~Xq`cKvi?vu7iWWwL>Wp+#bt)^ z#0x@~P3IhIKUA5_kT8%=&845Bn>+ClWTZAKEQu4lAhNlaL1CrxY#@DArd`_sKr6B-0w_eQJ$n<9C8pBOSMB{D$uL9$GC4 z6vQ9zciMwlEICg5rx~B!cM1*?H)gAOl2K*TR`j9A#4LZ#zg)WJ)M~0e_^JiMr*O%i z?;*p|NLS2V=q$N=c&CaFls&i?ottldWR}F|Xc!WcQ!2}R327P@DC!TB<p@2bWrUYP&!2a1+H0KDrbw)OywE7~W7AdQQ}g*4uD!wTgp>iXI_^;9 zqX>Zn|40Y=fl!!JCsZ4gJN60~eOXz?Sp z6hi)c&smp3sFu@9do7yV`71r9p>y3{$yOxCCGsI=aSyh#kA`jDuqsS)?-sq;nIaR( zU&*_kf9ouTwn`xWE$yOI<8rps4D;AX+&-h-5CZu)TH$-b>E+k$XTE{kh>?@rh7IsQ zx_f3YuXXN452ZuuyQU$Yd=pJxEwk6nlRIPiXKOBJqhJ?WN~l8@Z$IeW#bk{m`fUn!wgH>$no?GKCF z_*c21OO|!BLff`y^HS`$5nOE|l8R|rB8+(8y%>+SmPH2dx$HY?l|EA0rY&zvIus}Q zjm_Yk(%VN1&(z9mC~cOa?q9BY#@#IMZl+l^%R`WTp0wF$wfBs>xA34vY*2pSZIAm8 zv|u1@+^Gif!q2Xshxw~&ue;C1`sRpA;pqsuifE3~xgrtn(W2F>W(cP|BQ1(W;%u0i zuAutQxZNhQFTQ@8Uy2GSzi<$;Sd0WhdD-6_MC$_ISj{{jJ2&nS5rl=E=R0b{^0F+4 z)$8;@46cXHE%S}l=Lw!4+f<+Q2VG-sY7(cP{TzI+w5^oXo6$U~qENcxMMzt5$h=ZJ zwPc7lM*(GWiH|DN*C|BQ4pFsnOIV3%pVTu?dS~yh>-?r+S>pj(nbZn2hllm=3B^{5 zAr;F8eT`-54XSLFpm3+UoO*9|A~ivO+MLjh(XVb`oy8ZRqdU_-34%ZGWj5VmTt<7F zN9?u??2>LdY)gOVv(b~Jn%G^L`N?6ZM+`8x>Z)9i&;^0sRO5sG zEw}Tlq)tYoIp*1u`O4?ddKDH@YTR%ga()eNcDQAVqp(^+pL4xrQF4E!COHF5OuzG2 zVlhwsdr4PvzJ-qZEPe_I^i|Fe9D8^4lv1|7r5Z1psDL6W#)@Q<*RsG~{?dgDE+D_m zMh*f`f)~ZT>h@nB`V?t?uPoV0XlP<=E!|3x80NFNJLKMmXd~of3TE`aJX87@Pe4J2 z%cdhLA>~c^c!g^rgeOp=kl1Q6t$M>w_xP^kNr~1F2YTS?;3K+2o-1P{^A-=IS@`;X zFbs>`WFd-{8I_PJlh4i|ym|(*MEv?>s*0+~O zpLN^Mn^XFR$RMwcmcyo+0(ZbAckoaLtULZ_r5`h=lV@8jZW4$umv}G_jZ`0*Pz;RI zMXJ9l^>yx*u`6;Wc(~cYWd-hVI3pV1lzGMC=O$z9GKVT%-9H&1OHE|W8g^`uwV50> zd@Ve6^O>EFmW)Ycri8MJshRX?jgUr!nKPqvwoaC9PX2ZC#x9vA3h3*n!j&yE^jl8P z;G1zXiio?S?J zV5ZM=jit`2>q+%g)l8Nx9GU#3cVvA?SrqfKgqVLM!=}p4c4~O&oHT-c)Avz?g~*dV z|Ab^}Fx~xel7~4l%f@1t>0Xq~ND4(c%HM3Pxly>rPB1GFi5Q4gwmkFbduswCuvD-2 zsyYMoW(=h(rW_b{2yJYpG>wjLUSS{n_R-Tic!T=mxY$VIm%HYFqD z3IlP4EX8>guQb7{MBidK)5e$6{ryHeQT{VxM@cTDg*ApEA*5DhYfoR0A#eKP=qD!~ zKOSWck($uYXoSmiwXCkAPvPB5M_-x1$3)S!MHdKL^A7ezI=5Nvc+AhiMK60vq)zWb zTodwCda83Z1m`zIB)o?uXIJ3-!z+o;$+v}wwKXcjL7wUx{TYsXs+46a$R{XGT@4Lk zAYQ+Lr1%=!%aJw(MR_ZVkE^cW)~``Mq_P8C;wKCx@rV(U1!YgBgjKG@vV!FX!#N&u z`cDrU-6cOhHBOhGkBV!(R}f>==X^J&+a=)(1IKuTUh`U$S$?JPkG?BmW6nJq*-7ng zj3->j*X~UW5IGI2`gV64Mc-zL(P@=iv_8mxC5_Urq3lV!rbQReopc7P{D6QaE%hN- zP(0Tb@wO3`tFmG!nm6{+JkFtbB^6{US`AjulGXSmgX9tlvX~-L2wcAfc<({jcn7{g zBk?`=^3BR}d6sJ&lQUhHN-`q=pjqfxbU{yqZ-eU|Z%YzA+QK#c;uY##kj0{@i2?H zWa4c!nV2d=%56eO|8UeX{GTXM{Br%p+B&$%cUhjM` z3qj0m+*2P$aune_SQQ{X({4NjKCqn;@;_KB6sBqDuof@4%{R;W z(^C1P*qT7}vzeL9D^!LTo`$M(c&a@^0I@p}|oPf{fk%XLni62e5biiw23=p>}}0_0h<|f)@Xqj@vAx$rc?A)&8z`V1IpPw!k5|`R~T)CJ81zv zRwTT?3{?5)+5?D)i2_tQ5q|+hQKoXJI-hU@6~$n=eOfNUg0|UI5`}Z+Bg;u8lllH6$z?YOi@0ljD8#!pQ zr*V=o_?(Pqyl##sx%f>gB=e5cr6FC`0;X-h@`lz7rIaBfZ?mmmlEP`?0Y5huT3-ykJ!NpUgBUt%YB zhX4nsAeVsOI&o<^xHu{*3gBwny$ulH;o{G?C}0`Kp=M$LTzx+jMJ#X$t3#Q@0>(Jz zaV&tVB8XM7qNw5k2u`dJ2Wa6Kn|O@4APx}1^78F$yK$02F*oN+l6c#Lamt5i_T@5z!xudY%X{;dFCY9kVa-e>yJQmj3DO ze{ZR%2g)c3V8Nvye|jqEUwc;R3xEQH!o6K^smSkD|MKH2%}4HNLQDn~LjVH(ZGGS$ z0OaG~>*4AW7z7J&cKwa~m0{uhUJG*iWE6|F_CG%~uk!!^ delta 21100 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 rxYQF1`M=a2dHh$4nS2JW0zmW2EdDZYXe diff --git a/sources/common/doc/manual.pdf b/sources/common/doc/manual.pdf index 33ab20b53360ed83f280a70bb85e2e9e21a7c8f3..6fcfec908a4a8956280d3960e89ed50414fdea77 100644 GIT binary patch delta 28482 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 delta 27937 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 OWwW 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

#-ON3MCdR)bVHfQ=a*PH=55F6PP=Xn;|^Ac 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 namespace SIGNAL { @@ -58,6 +61,10 @@ namespace SIGNAL Signal(name, size, rTimestamp, "wire", sourceHandle), m_Value(value) { + if (value >= std::pow(2, size)) + { + throw EXCEPTION::TooSmallVector(value, size); + } } /// The integer signal cloning method. diff --git a/sources/common/inc/SignalFactory.h b/sources/common/inc/SignalFactory.h index 119457d..745ff9a 100644 --- a/sources/common/inc/SignalFactory.h +++ b/sources/common/inc/SignalFactory.h @@ -62,6 +62,16 @@ namespace PARSER /// The table of pointers to signal creators. std::vector> m_vpSignalCreators; + + private: + + /// Returns log line details. + /// + /// Returns the string containing the log line information. + /// @param sourceHandle The handle to the log source. + /// @param lineNumber The log line number. + /// @param logLine The log line. + std::string GetLogLineInfo(uint32_t sourceHandle, size_t lineNumber, const std::string& logLine) const; }; } diff --git a/sources/common/inc/VcdException.h b/sources/common/inc/VcdException.h index 4248949..e7a6b5e 100644 --- a/sources/common/inc/VcdException.h +++ b/sources/common/inc/VcdException.h @@ -37,6 +37,7 @@ /// The module provides means for handling errors and warnings. #include +#include #include "VcdExceptionList.h" @@ -88,4 +89,22 @@ namespace EXCEPTION " Provide the application version, parameters and input files if possible.") {} }; + + /// @brief The exception for handling 'too small vector' warnings. + /// It shall be used when too small vector is being created. + class TooSmallVector : public std::runtime_error + { + public: + /// The exception constructor. + /// + /// @param value The value of the signal. + /// @param size The size of the vector to hold the value. + TooSmallVector(uint64_t value, uint64_t size) + : std::runtime_error("Value " + + std::to_string(value) + + " exceeds the " + + std::to_string(size) + + "-bit size of the vector. Dropping the signal.") + {} + }; } diff --git a/sources/common/inc/VcdExceptionList.h b/sources/common/inc/VcdExceptionList.h index 73d663c..171bdef 100644 --- a/sources/common/inc/VcdExceptionList.h +++ b/sources/common/inc/VcdExceptionList.h @@ -49,6 +49,9 @@ namespace EXCEPTION /// Timestamp out of bounds. const uint32_t TIMESTAMP_OUT_OF_BOUNDS = 2U; + + /// Insufficient vector size. + const uint32_t INSUFFICIENT_VECTOR_SIZE = 3U; } /// The list of errors. diff --git a/sources/common/src/SignalFactory.cpp b/sources/common/src/SignalFactory.cpp index 347500f..3b8aa4a 100644 --- a/sources/common/src/SignalFactory.cpp +++ b/sources/common/src/SignalFactory.cpp @@ -33,6 +33,7 @@ #include "FSignalCreator.h" #include "VcdException.h" #include "EvaluatorExceptions.h" +#include "Logger.h" PARSER::SignalFactory::SignalFactory() : m_vpSignalCreators() @@ -63,10 +64,15 @@ std::vector PARSER::SignalFactory::Create(std::string &lo catch (const PARSER::EXCEPTIONS::EvaluatorException &evaluatorError) { throw EXCEPTION::VcdException(EXCEPTION::Error::EXPRESSION_EVALUATION_ERROR, - "Evaluation error in " + SIGNAL::SourceRegistry::GetInstance().GetSourceName(sourceHandle) + ".\n" + - "Line " + std::to_string(lineNumber) + ": " + logLine + "\n" + + GetLogLineInfo(sourceHandle, lineNumber, logLine) + evaluatorError.what()); } + catch (const EXCEPTION::TooSmallVector &smallVector) + { + LOGGER::Logger::GetInstance().LogWarning(EXCEPTION::Warning::INSUFFICIENT_VECTOR_SIZE, + GetLogLineInfo(sourceHandle, lineNumber, logLine) + + smallVector.what()); + } // If successful add created Signal to the returned vector. if (pSignal != nullptr) @@ -77,3 +83,10 @@ std::vector PARSER::SignalFactory::Create(std::string &lo return vpSignals; } + +std::string PARSER::SignalFactory::GetLogLineInfo(uint32_t sourceHandle, size_t lineNumber, + const std::string &logLine) const +{ + return "Evaluating " + SIGNAL::SourceRegistry::GetInstance().GetSourceName(sourceHandle) + ".\n" + + "Line " + std::to_string(lineNumber) + ": " + logLine + "\n"; +} From 02dc6f7fe5c36064ac452653847342804ab54c98 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Tue, 28 Aug 2018 21:50:50 +0200 Subject: [PATCH 104/143] #25 Samples update --- sources/common/doc/examples/example.vcd | 4 ++-- sources/common/doc/examples/merge_t1_t1.vcd | 4 ++-- sources/common/doc/examples/merge_t1_t2.vcd | 4 ++-- sources/common/doc/manual.odt | Bin 560105 -> 560093 bytes sources/common/doc/manual.pdf | Bin 865601 -> 865594 bytes 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sources/common/doc/examples/example.vcd b/sources/common/doc/examples/example.vcd index 10bc815..44ecb94 100644 --- a/sources/common/doc/examples/example.vcd +++ b/sources/common/doc/examples/example.vcd @@ -1,6 +1,6 @@ -$date December 8, 2014 14:15:00 +$date Tue Aug 28 21:45:21 2018 $end -$version VCD Tracer "Mateusz" Release v.2.0.1 +$version VCD Tracer "Nestor" Release v.3.0.1 $end $timescale 1 us $end diff --git a/sources/common/doc/examples/merge_t1_t1.vcd b/sources/common/doc/examples/merge_t1_t1.vcd index fef1f05..6469142 100644 --- a/sources/common/doc/examples/merge_t1_t1.vcd +++ b/sources/common/doc/examples/merge_t1_t1.vcd @@ -1,6 +1,6 @@ -$date December 8, 2014 14:15:00 +$date Tue Aug 28 21:47:21 2018 $end -$version VCD Tracer "Mateusz" Release v.2.0.1 +$version VCD Tracer "Nestor" Release v.3.0.1 $end $timescale 1 us $end diff --git a/sources/common/doc/examples/merge_t1_t2.vcd b/sources/common/doc/examples/merge_t1_t2.vcd index 7ac4848..35a2722 100644 --- a/sources/common/doc/examples/merge_t1_t2.vcd +++ b/sources/common/doc/examples/merge_t1_t2.vcd @@ -1,6 +1,6 @@ -$date December 8, 2014 14:15:00 +$date Tue Aug 28 21:46:07 2018 $end -$version VCD Tracer "Mateusz" Release v.2.0.1 +$version VCD Tracer "Nestor" Release v.3.0.1 $end $timescale 1 us $end diff --git a/sources/common/doc/manual.odt b/sources/common/doc/manual.odt index 94bfc44ab3a84b9024327e85fe1000f7310b5cf3..1c852e6cb9fc12c15a031dd753207557eeb2ad15 100644 GIT binary patch delta 15958 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

e zhuIIm#O#43U~_8i`q^}P5Iu>fQXt)#e>JOK7jH9Euc>5}Z=1fKrwej{qapSW9H@1H zW5?n?tfNGoj1tGe&e7Z^SFtcGV<9mBZVpOV`Zb7t6fQX$C%e|R*t(Jk1b?0QLH@&d z4=N`$tGTEWwd8OKf|THvd~6vq&*fGF$0#hkMr!EXdNcqc)iC(OYdLKyl+YucwLYY-BR>#RK44lXupub~Wc1ve zO&v{FG`Eq;1;Y=r5Lf-KLqBgn8iU(ui{OB8H15A+TYW1+l59&5hLH(TR^eh)&?IM9 zzxox<7IG2)&$56O`GDRRZNvJT+!jkIhxFF2p%7m@BHCGMH2lxd+KC2PNM2l){`2i2 zQkd4YE{vaD6f*FIX|WEumM@ zdeLEQ3|_n2q(JT33AYsIoX1fskI726NM4gt;1BhSVGQUU^)!MQ+zKtKdMD+@0>4=*bVBPVAoW&l7G9Fm2M36viQ zAa3;v1VDoS;|TvCz|Ow`$ROmek-xoPD1ZP|9|EBMH`xdQsQ&AjLjkg=|NMdd*F^w| z4h4`V`G6xKfJ0z_{qK_C|FHnB49W-vQ2kqr7zU8|Up)cHDGY!Cng|16{geE21@Qt7 z0uKjZfg-{HDE|lcCk#OQZ$cLi5c?nc`+q4HkM;{Ky%(tj3|BK}&)ih=q+Qdm$z#D9!e z{!=yBLjRZQ@~`TDJje(N0mBHu!Tz=X+k>F;m;dZWGV(uWj3NO9;K(5VNB}?azs>#k zvHW{({_COutwjRxdH;d_`&7aG7X%C}*B$`o;_78<=ECS{XZyb&<$r$LfEc6x`sx75 zMgj2u&&dPXM**<#-h2UIc4n?d|38az{w{(v4+4PVf&f@pO0v*j{yD_^`w4;p0}~JV JTSE@^{{V@?5y=1m delta 15934 zcmZv@1ymhD(>8cSqAo61nIij*01SBQ^01E(YSSKLLfp1tR>4T9c_@Mvg65`bVl?MX< zY32M!D8P9Ck#R8cq$V)T{|LyFsKEc}|83>|AE7SzKVgFtI6C}48j8q|06gOrqJ_R( zrJTECfKRUB+|o>PW9qG&W+*o{PyxP1JjlMpv@vQMR-aW$rP_2njIZVR`-_#ltk@Mj zFpNJd1;2W&ajhLL)j-NWuB2+?+2)+qqtpL7L`XTmRdE+(fI8^*yUx^~YexlF+FC_w zW*Kdea|Vj_sHG}g;|9>-17D^9TC+2cCuCz4g}um=y*HvPte-^qDOmJz>;xohI}g+w z+$gCDw>=8(UxW2s1zKf1h{w4mOA=Li=$`ezcNvC1waV~>&;z1}TY4P6%~enMcE{>Z zXC&`UKt-3Zg*$vB_RSj=j(k$^>a{5$e06q@9iC^Q-T!6Z_l1l914z9AVN!vzB#Kx> zKyqd#F)ftnnsh;?OqZG6<0<_JvAi8sPJiEN@>^C`2q)agIDy>)L)d-`M z`>r{mLa+R^yodymCd<3A=MF)ac3{R8|eD&glB~Q*d1&k=oF5YRKKJfR^`ya?Y>D_)Ofrew>3Km96lp; zO{J$H<@31j(+iC2=?7SO+WSZi_GHB~JQ$CYYG0Z=B{_-pf=nf9^UgD;=SGkH6UP!< zF~?KBvGXLD?ux*|?>~)4Aj_Yx$T|X;>)A z4bF5CXHu2B`vKLZVofd?NmsO!g)7vJjWE=*@}QS1Ij zV>n`>KAe)iV`{SEZ6hJ@PqN*nHd9u5zeHXUp}L;nHaL#=^wI}xY_`#)27Cb~Q|p_C z8>lo#))w;t)DPPkVwUX882yZs=vtwL*>V;p7D!DzITZ!Q1Mp~8@gxEQUg5<7E5Jo5 zF)GG#;~m<1F+Ph6=M{UHzPEUc0uD_q)Ut)7DWr72CIAnnE^gdJ;72L7Qbk+6;LNwI zyxL!K4G9DU5WrQT#m3zWK=MZKX_650Xsp49~` zAnp`)!$$e7^399QzfAgj_%Kgbdi1XsuN8#i_Mj?fh2nt;Iq8z5o*cf5FSO~~*}{et zxlgu=a`mb$K9~}!_6rqT2bE1IjE0=9tpaz;b@Zw{W5U0o8*Z)1)gfSBX^|{z zWA){wMTwh#msip!ve)iZ9M)g7!weuQrzh7Lx{RB36Y=&lj!i#Lf8Z?Cf>YIRlTwCf z^r04wCW^4(04W#{`QAR?Vr4|k%vg|4a4TDMES;mgR=KB|XNs`^_ZIKubMSsN#dT>6 zMgi~j1So2am|S{UYfo{(?h9(nCRdS{DzWrkd)9ASPVz;QUm-Xue zVIKK{f$ZV|IkH2QaB_7Q!(-9CpMqJS@o%q!YBBEB1YI)pI<#;<>DSG)fPf#(i75{@ z4d1?u#!=M%Hnv;*rTcBsy)4{DVob*`ggq@KOP>8B^;uY6vrW<>7H=%;csk!UA3k7a zrATC!2|nZkzN!({chI?bY@kt#YVo@Th*_eh^nF%8FSZ89)>e@?9`J^z%E}NF+zWI% zY&QfWY~T1ev{yQ}^4ki*4*thjM z--6}b$4sQqr0#nBK2g+dk;W)e^$i;FrE0pLySh6Gt8K%6B@}`#c)}d$P~UNa)+Gm0 zWjgag(irJ-cxMqgYN<@bx|~~KYz6KJS9uQp+~oIY-k<5L(DLvosq6c8I)#08DZg}! zHEj_sOWWBYw{PIM(X-ZnHj{o46wQ8*xxtNj&>pKhxY{A4O1z1-*5ObTxL>TaLyIxbe znaa;h>@q8$b(DUrb5B2cL(wA+i3>|I( zJTIC(XdK|9HuWBgPcZH4Ms83_r6kZ487l13ljV7+LSK5k>?K(Xqy8UE5Bg ztLK8>&Hc&Qqbp`Zi;??Nd0C6ul=)G4QIihif+n&uh|w~R>5k}Q ziIdAJAnaqln(wf$ZVw9G(g_S;Xt%%TG6o24Ls{&dQlFSeXb!RB_|E0@vU+A-D|+CS zS#I2B)|Hu}4ml2iWuq5Q3freKu*`h&2e*A-fWQ7TBtd1b`JyZhDr0`~y&bKEj8+Q=;Z&zUlt zJfSz{ljCfEbV$Zmz1f6adg2B~La;d1`SOC5S&pX^sGvohp8U%{lbK%5RDenuz(Wj= z>0RtL;OZ#4bp0A$cnYZWZFerf>M4Qqk{882q46%kW!$nUQ$y6R&*X^`O*=XQe1OTJ zxc@{_J^=GOG;Dy}@ii5sUM5>@`guk`b?ELKCWvf)f@}YBD)}_-(%zr9jbC-DCS|-L zZZoG_$cMplZx5gOMg%2=WXhrI_32nL(4t0Bc>S%^*S93o_X()-eES^U5i)5Pw==(Xi?T`Yu=NXtB=B@9aKq>+BM#nQ2hq*n{YUUGkq-WM zWdH0=zHZ*`=WAsz5C2=RVPBZwY+4YFCeL9>4zpr)^0<;Fh@@tE>(;?|8Rd}VkAAP_ z)Sn!`R;xbE?VmvB2cb9R>TZFy)?B45-=G!4**8TIgAY%)k8=;6F%J@!KiR#5JQl1C zNjx|fZ>qJW^U+DSkKto$Nsly}*|WMN#>ouc@)H-~ms3aRzL$_6pLYjuyD)k~$HOQ* znpd}|8eVP~T`&F5_bYkM&Tjrc0A3#VXkk*0eFP*{sGh*femoMWFIAL|5OG_VN=p{A zdVjLB^m??Go}Ayd5hobr_}NtlY!)Itndma+%dp#uIyJP$Y_gD~w!&a)J~aV9v3a3g z$w%N&e~`XN_PWv!p8A5-!#kt$}#-Sce?~cfasn zS(3}5qNZJ~iL)663fJOI28C?mthEKF^z!(@%Sp1NbK+@i-DSGh`Z9an$^lH%!b}6t z9#YaTdh@}4qg%6niEAUJZIee_58b^spH6F%wr&JQ9#0*^G=K>q?g?ndK$_}h9n-&< zfboAlbVfDYi3maCIMm>Vgf-*NYMkU!XwQ8ND4JcOgVN(K;9q{Ym=Oz7@!cx|d&s~pxHEEvQ0Ae(QfA`L zx;?oS$iVsa9A80hsc9~LqqC40NPQJKY`5Yvj&fq;bjkg4UfpuXpazj;&Q+V~m#Pay za$PJBoN#MwSjxjPlwv=&q03>sL{EhoZ3yvyKwqU&o*fsLaH^@$Tt5Zx>N>ckP{*7F zSc|w%4}BRCdgC!__>}`lVpxZVT-kx5_mvR7O8T)AFXF@r^@Y3*q$w!{ zAuW2f2KM+YjcCx0+*;tG-H zj4R`Jm?#ecp)L+2;KNDo(%D0pUFCErPH#Lw1S1-zMZMfkj^a~(u=AqrcQFI6x9Q$` zjcQLnBD88Oq;xU`WNs%3&b|V$6%9dx$?t+TXpnu1-TY53e>#u!Sh;Jxx_ucBE%QC( zdCIm9D&;NtT+N9qOUVT&kVqD3yd+bje-!Caz5VaI?qFN&Fp8c)pihuIY>c+jyiOEHQ*yGXDqfX7INclAIxpoMeY-lXNMply`u(nj@e|NE^}bX#dut|xsf z>U>3_=~=e@gxj+iDzDh;<7j-rc8bkK_XiUnX&O3`q0mK4gb@!Ls(S~yAex_F9(VOn zwymtw3$SFI50eTUA@T*5HImy=fA3e{QQ2yfBK9OdgY9ypl!@9DFJ|xQ8Tm@xzp?CV ztuC4KbK3p9rG9Ca?#smnWmOnmVO!)c-OS~2xW>g;%AXq2g6{hlzuqa`^9NSepUy?F{e3$69LNNau51{)R=) zzI#!cp7m}7ioGN=+0_~M){1eVe`q5g5$yQaOK$VgKHzEM0Q`1TPRa;LcDaGMgv zS@`!PwF|KO;pi)^lLy&k^EJ7RCruT?vBTNKdbcu}%}b`bM7x?yJ$EInXJeSz%#{%Z z*|jQIu{t0MGk9EQW0#L&h;FMC&9M%i7ek@o&Hj{#O(3-)K707?nZCi2W;557t}S>o zW(xJNeNu}K^rygnhW3h$h_`@s$FZ`zlnqTqo$JrX83ZGA?$i?luK9qg(gOuGM{>E zqK)E1PSTW0WNV6zmJf6-WED)KVq^_28pPl59w`Ob<S36_YK}8xwQcA7wkS zP>ZxS#+JBX{NVc0RgCqHzqFjnAu)#&iOt>ybE{>!iJaVMtVsQ~MddHamdU4OA-Hk> zr7&^}=tFv=KgfbSE@Iz zXZTX48?sUs0OJ-#wGwjL<~(-sylM6Q2+Hm_l#|C+`EvX@!yIZ&ppFN_0!oH_Ec%d4 z93FU1^+;xFi*cY=fCA>-=%y!zk6H3!45hZI@`|S>!YFqC?xt1)U+%C^^|(mQt|_Mr ztm{Aq6xAnl!1L}QKPOA8UDzQ9U@D&U=Eq}3U(@;oWSkxC%raYA%Jk5;{atG@utXY5 z*p`7IR(E49zzpv0?A|J-RZ`xV(~XVN)UXVsMvyS-jjEDY&fInG6EDs4vaXWG2p*h1 z?v!F|lD0(&ry`4LJ>H*TCMW1qEQb*ThRKB3;$V`8RH7}UgBPf(|B*;+zgZ9(r4vpK zpGqQZ_YS_0bgVe+0NW2fj1)n6_K~X?Aww#(BarayyBtE2o7o1hL7Q&_ zXL~CUsYzfu41e%2R+2%p_c~|*=AbTbTZ_Yr=eSKJ(9pE8X$x=v+r|0td52&W%x9s z;c+J-|97%NKhIOja>*ic&CT{8u#|68XY<#$Sg-M+uHA#I5y?@sd)Hl$;d(A>urERL zVq6Jg1H~*1nzr~_?a>6_Mp`qo>c%%Rli|BVijYeBG+MN|fzXd;9;W{_^l(C0HH^H!(9YW zLpe&BVgzpw(Fa_R9PD7yoi~}_hfq-@)Fgz@gXxHUHX4?M{_kSpINKw&;8m&IYYzam zrz;#Nli}zS*#=7UiG0qaEcWe&eXYiU?GIl1e6RVWzd4sJfXQGbs>|ef7j!?182YfuP0cc z2>nP#C1%Qpl21J7jwpEV!A>l|94X-h$m!cwQ>U@%U_=axrseYugc!%!{ zu0z##9PG#YOOMxYE&gT&3M(4n>)7}U#&}TIR-)K54Gz}lUgFL^NqNHkI0qVuZZ<42 zjduc{5N8LnOEurU@G4B6O8o+@C$Iucn%R~M9NO04V9;NY0f;9g4nA&p`N19EV6*Iu zlxg0#NZi^1jRbtQX6b4Z^z(6cxv4*+-S%!Ffv<58fsZ4%6+&e9-&Wz*SvV+d7T(s2 ze&ev%xh-yr463Y1&Kz07w4g&SK*!d);1-Nh5$u+>1Ie(Sh{H)9=d;0CgsinueCPA1 zxS?OtuGvUgv}uXIU)`AVKEFu%;%;(vUbW=MJ|c`)*a+P7oV&W=Vex-CUgrH++x&R? z)+<8iB=lm%`1vgMYd_mI+XbPw_C+p1X&_k%SBjQ070WRMtj zs-d*q83vF&TjQ?oSK3;18-7&V$u0ej1ve~=uheX~^E0AuSPTd9GycO6V7$y(S2EyXT^P*85r6gol$o9+g_ewZsj{q)#hox4QI&W;D_A{(Db32|TNWPOlHb8bkj~kf&J(G@ zxU4J6EQ+rp6CQc0i&9{W)o#LtUgdFE7Hp^qSbJ!(`Q;AkK$G^>YyF`%3`z{aP#IUA}tSyjAn1 zgvk9^c8|p>v|feBZMe?`o=hz|iBWI|448x>!~>j&)Jl`Y1jVXkG`0|Sn<)BlNFfO%# z+WgTJ7b=rzABuZ0d7a(lgD9)F_obt?2{y^$nz_k0e;iB_VT0+~sOGi)=Y&@PpWTnk zpB@My*P1sM%Hum5`SzY){$ybq=@AOE?8*X%9bpVK1gLu{a_lvIH?^kyX4wu3mNe0d zBsyfsBgy9O1gn$R9>BfdTHq{Yw<;p#BPZXTMJica^M?=JD+ecM>8CxDw|_lMdDcY8 z{fvH`LNyY+tbp9yH;>IkOD88x62Ox@y-%WJ99>#E>@GBzLPM&l^>U+Gad=5yr)C9i z6;Y@+0^Ld+KdljkHskeeAx%^7c8(|$i23U4l`Vf$Vnd+h8o5XS+sz+_pw}FJxcOwo z*n;w7uku*C+b&r*!6=@`J@m)#%F_cJM^=%TU3SxnaDne*EOX#Y-4VeV zb-KQ`yb1G6_0n;|6vDsBtm%qUUk(5-u@Zsf@tPhDTmqwMqLxz8U5I2}^Aij&wc=h6 z;RVXcg18iY7|UPD-M!b%m)pQ0zRrFLxH3oiwY)o->g5X`PC$}_<10-2)Tw{i*XvxIW+#(FkAY?41MuJJ}1Z4S=*Q*6w^hmQK z^-j%Ir7+B#O;@xKgdUCv3%QJ-$dtxY*q{6=PaIyASGZ(;+f2PPlWAq7W_g2}{oO;t z8ivR+0*cuS)(uWvFq$%DaPoAuJuI`n_9OWgj@PC(GnAc1l~P^|F1W7ETp`2R&RGQc z4Ii4(Z5rWVL?x1b{Q$B*%tR8{b>lI?v>#TjRWm{z>cgpgV;R6}iUyCqfx*&GnK25s zg?%t17~i`~gg~Lx4d;56)SRoQ7Ebnd%N zMzsD!&bJl#&@BH+rjdxGpyp#;^aDTH!!uSpc~q7@9^{QtR4M5-YOn z-CdINE7P|-g)j~vs`HpqkJ6kM78ryP_pua1Hb(326Zg=cNF^PFaa#-lq8PBIUko{) z&s3VkNERyk@@I@u5Qur7xQkJulSfYc#o*Xc!X9SGurx-#OQzU7l34I|!6*?Ib%L~H z*%-k-sD&PXf!Nd>i90|eUBAVU-?XF3m71QUgixbgzu z2I$ZN->x9?`2i;)mAo{szbmgk+g_5)+1(t^APo2d+L&ACSw1{}E3567IGzA~Rv;gR z01i9b%JROz0bgf8ChJHwOjq!}?(kC@xb&^~NO)K&>n=yQk?r1n)5ww+IZs7?6E&B? zH<&BfksuI)LT2p^CDQ(CIdOpb1d6WHTwW5n<&O!vJDO4z&dfZ_opX?j>*y0#7_ysN}Gc~d7-cjSkl0Ni= zY5aQ;`8^6@6<&s}9i?ugukK`WR}rade_}^4_f%YVRxO2&ugvcmMllj6sK~>dhGga- zpY(Tu>8HyF(|Y7d`H}G~z9M>6ai~_azmBMgK_fJ8VL@m~7^EAF((I{YSuUczrK4oe z5@;rKNN65k_t8OXY(4>)4C>kY!(W)V!R)vVpHTKPSHoNL$Rs5$XGa(^!V~nQ71@X} zWil7^f8HfRwK*kf?_y^;(WWG-#)e;;kO_VR8hZ`@A#HZ1PsTb7b&+~k3_uTQb`4P+ zhUk$9QY~!R?Jd*Yr*>+*O)RAnTrDF8&nR{Mc{|T?4Op)kZOD3Sy0R?^tFe0ScdilP zot>ii5l=uHs)1E?K<)DZb@&VJnuPK-LFnkh^+yGc=6-oQ5#sN>(6ddxPVVMAiqcSU zpaaMeXIl9X4b{8)q(PRkQ|3%wzJrOsuV?Pp z7C>cR6}!BH@iB@DGa2-K$ivqqD(&P2U0%+Tnd?NcMRQfgn7Bj9CoifcbG5a)GG9#H z-cnB)U_|mZb6zX>GAi!MlYI2FHcg&FX5*} zqNNFY+}Wad)IQOX0^Q>d zS)cfF;jn9Gm`Irze|a$+pbxqo%z~v^)})YtCoNcjQEx>ZmYO@Q=&JPPKk+?jSi}$P zwS0g`?sPTc389NdzW6c(#lSM7PJt~c1|U}Ws9nDZ3Z}&73PX;A6E1!=dxF8MLfyt8 zw1-!0k0$O~#*@|#NjEyzRKr0k0(zj6J7fv0IUl*R%`l@R=gdd=7U^*gJhI7x&9yla zDSo6?uS4i{5k^n#tEE1Q>SY89`?|5-z7Jl{&i?*%hDoz?u7JMc`#Z%wOW}nl)=sn| zJYMPY#(VzV?XKmOr}#K}e8U&U1D=9!>Rhe|S8uR3Ac8cfQ$lpfCM{*ufZYXSwYgQ; zP(^=_dhl5tWL?$IG~5l$3MI)Jxj5lq7^$oiG_+WT2m08oe~ph}GV@Nx4%4V#uSd{> z*OLRO9~twBXL{1$4kddV#@g}j8WD3hv--tpC&9a)m%V5{x8z)Lhwat`Y9$M*7ocux z1`-9emvy?`)3r4Ayp1&-1L+<*ggA8(?0jV%n8K#|y!iZ7USm{DHt+9|W>OXCby7oy zApnh}T^so$VmMBypyxyc zJsKm+e$=6%gDcY+nuLj4e?yYLE$E!GCM3 zwKG0)2Nzdc)K5`U`*gLmd5)-JA`gDW_Ay@0mb-HjrS1@1k(9?$7oOf?=oQ3ioEAOn zAFm4WdrECRzt*z31$xEXF4DVR)d6hon~kd)=39PUl)X?^-ut>)7%Z&*3GxWBMkmBr zk{>nA8++C{4|WTpbV%MpAj)u18^8{hZys@>Mnl*iwAm{<*~KyfePExlpSdZ9mjnxS zoQ3K04=zh^b4%mv8kyF#NKmSzLi~4u$ELs6hX!Uaq1!MWDsN2* zpBWDAzRw#|XJD6qPnnE8$z7AV-Oc3{$qsv4_L>*)@>pEG-Bo<5%Sg%<=Jg04OH-Rz z&KCl^s9YJ*16Iqp{YYa&YS}cAAFJw0VEyP~t;3_0!~g@!IQHC}xyiC$QaR0JR$L zTU_isi1ALTG&;WYR;KXtl*#_+`qo=Ecnl)@YLfFK*rWm>yw7P=Tq_Zww4Igp@Q40z z{Zq3D7it0D_C$g?TTU-G@3dDw48O?N_T<`P-j;kZJ=JI4UM96A(^*aFgd07J;i5u8 zTu1tKWne-jEGLnc!1rY_s|pER4LiHuItRst#g#36hv_tJr&4b3bQD4-O7F9;4Y^WJJ3PTxk&_K+l%Ksp_N=%7ZIyB( zvh%PWYJLzoWUip)^$vQWe8EXzUG`j4W6bS63+R;94z+Zzq?5%{;;?zvW>2HXGa{oR z0=TCOGi}(U+vGzKybQHE6P+YZV*1K=tdq;Eoa0+3Q54V?%#?XlN#$^kKV6V2fIg;B zZ({mH&f;t%bj6GmJIPTPiF4%Gy}rV3mz@#ts`?V423lVZYTG_W9UBx64Wn^FC(yxi z0%D~GP8d~)4cfxjr8Gn7-q*VBcO-cTSX68rth)NFS~M-4G`_w+pq^etyHMt5@njFs zHs@sEvmW|iKxNdM$xzB?^F2JHvA*b*;=U0qDJ`Log>TAquHp)4u(oIlZwQic$Nd7} zTUtTxtuI_w!1P38xJ<;B&)qEbJ@L+`T73dszDHp#`@=cCGkg+MK>v;` z-0zLx67NKChQjH+*Uq2Fy48zp%?gfK<03U-w2P~`>Z|KEN+fA2dgj7;*s`m6>dG%gQ1$f=eJ=zLAwcB*)hTxLJHPOe=Cv}76}+W zea0p0p>6IRN{y|dXcZ46`k2Zxz5OL7@=)z-g4d{GDpSO<|0j z0?TeU3uT>rlvq#XX4_EwNbMjqsAQirwfuyDO|sMUw}z73#pl4O z`L2ICNd-kRo1IEEA8=E9n~jF^8LYseR*(x!y`8owbQFTnLkF2riFY#+)-ue@Y&?)vm@-&7rk{ zt3Nv+9k(YM`6fG3yVpW%fV3#|u0jGIGg%#z8KZ-fc%ihQ(r;V`Z&jU9tV|qP z@6AVBp-D3~223U7BwpPf?ErZ;2y?c4zZlCR=4;Jc#j+@T9z&|#KTsJ@S>N`)VdU6} z)J`g+OL=fnw(3??!*?@8P4!d@xz)Oe8rqS*C!HnHV_a|eeiB{>o?j4d_B_LWM=OlV z(5R#OLa>+H{e|f0GKi+p{Cr|5uy5}Ua%XAE83Iel6li0g7W^~JEw@<9nK|paul&?Q zk=+A4dhCsYbwdGr%Ct;-IPaVBDBl59MH1JzIP0G7$vo7DZU&v4-2$0%wA~OsyoTp* zeRxoZt?b}#KG9w~q&!D4woPm*BL*Y>PopfpE+l15vC%q-!bOv4TFPYF;G!@}bP6Q? z8dSISNZ{pqI76w3-`?`IicQ@v#vF`Yk&xzG?&wkuy))#=!Wj5{iZaxrXAXn*)yh&1 zv$Oc*!dU)6$_!MIkdS8m|Iw>j7zm=?pS8F9OpE zl^#0V^s#Uny?P6|Ai#|(k1)`vsb2JoTYJ@52|5nJv3&C>%j$J_>~SLH-5j!NS?jk{ z$o^N?NMTMo5)P~nApcE!Jd#*aW2mr@i2v4jbzw6FH`|^zRFF)kx~QsG++mk_D)7>_ zO~6uYtSTJIzjjeAlOnTH16%P=SQLwdYgkJ&L=gr?NE^DSQH&vLXxa+08{rf$@s;@A z8d_GWDfSY1mk#|68oWdnhT5BzVs?0xeK=7wP2i-Q>l(Qq@kwDm33 zbV>tmglG6hQQVBo-D{hhEq)F1m6XE_33B_nqT#7kzi~|s5O_3& z+cryrg|ZP|yFgJny)znXUoiS2H^O7DZ;e5jq$=HrDGGt&^y5C1Wn3jlX2cR<(1Xz2OmRPw2bojw5B5wX3cZBd zib?fRh3XOgLM+jj*aUsY16U|ENz@J!i$KguCihd!g1%38-n8x8X#Uj=eF_ z9URZNjA-fADPqS+?AAY*m80>f9z|uM>>iw1#EbVeT+P#k#fh1hR7%p_j0079DhP9+ zZ_dv($*YL*qpSD8Nc_1vhGX*>rJm>g;5)}jlyFbRA|-$K^+<0-%n)l0xkvalW~kG95OOLJ!E<>{Iht>9vX0hI=aHcUKQhJI#0;)14;}_)UJ5KYzJ^z?8F@ZJ6W# z7K2ei6Sjk~&Q<>>!*mI6dLr}&$6yo~UK%9u67ecA+4g4d0z8{|&Z^so97?cEcB9nE zBC-;?M~hc;x2BqHuxVO0)QIj3p$GtUIa_P<>o6J2>auiVpP^R` z2p9Ga2N(Id$QL9~_?iUQ)Zl{lF7WdlN;i2{><5G_}*BSMA-}u z%^66C@eB^}8ASOTpK-rX>B@1U&R%UUeUd24!QjC*%ZeEK$^roMmEeH?#6ZEq!v2kc zYGBno0{a)Sgs&a;@|T9^tAe%UtAg*#|E;t{=7Kl9{$oTlA--S#V@iKOVs8Fpx@@7M z_Wm;AvMSImvMMmsg#TIz>|rqf8GzWVU`c_SE~~t#{@vZ=yN@BL&Y)nKBLE!}5*%Xu z_iBeegIav;(}X?1r=KSG-Zxgdx>*bixz&`1;m32?wvWb`fl&n7NtHjI3k@!pkcDwz zpj(1Vr#YebrPtqYr}!2e7hfsZ%-4o`?ZQ* z+*jQU$1Fo8ML#pgP@}$^rvZs^vV)<#X$kAp^cUMf=+e5Dy=m>iy|>)TG#wABwoP`W z$XfrpXJP$ypYgS|1&hPRrA^oTTPiq^yLWjlCQV(QLJz-2ySue=p<*dTpDjH4qJLs< zRG8)OW*H3iM3QcWf&RkS=m)$n@qztMUrnagYo~~4G)T%Z@Bvqb(-UwYRh5elh%D^p|_ND*8GQF23!N7@&#;qG6&-rUq1 zuu#9jm~fJ*tZifG(}zp>HTMm;DpMw`Po0>`I8X?aFjaY+&zX09N$Gw(@#@`pyu*cj zf)1+AM}cb2zP)DZJR>lm(D;A^<`4J7alOXVevil&>8s2Vr(4};;;!;Hs1x> z!SfE0u|H!MhE2e&30vbvY>`D4=l-cvUZFt5I!UXy9mcYLn7}}f&%neo2p2FX_;_r>Z-VTO@My)l;`0U4t<27ve=3cYo(Gp#LNRuKBU5jTaI2UuYlf{0X| z_OIwKRGhAS5xFV2zA+HM?+?zl*R+I`Ll2C8;MUhU>cv?Uf2vHPlfQ2iCL^up83~8b zMkoXOb34GqW#ZtLx8uQ-nn}6oho$YW z8cSu9#qd-?^-#G`*Nh^BWc~)>-)|KzLlP3K2xM0I0%EXZJiIRjZlx5{=of#dp?qu= z$Bzorz;|7-8j)EvcF6}RKbqy(;QWy#x=(>AoZSgRU=_uV34o#<91DD6^9f`DFOgrb zu3=+(;iYIuO}3n~w-jl_V%*blV$@L6q17$srCr)j6dMaC$-TNw1pfhr%vY%Zd25R{ z6iT!B81Wkq*BWsIh~rUF}n+bO7|xRpM0SMdI@*kf<}g;X*KJL)pYDEFb;vZrIE_{AZbNsj;1GU zOJ-JW0jr{sz}a+2IHQl@Yg_#$jxIwd1}qgpINM+`p!`HHjh0DOfRQ^Ad<}q9EOIZp z8sP{E#MU}{En&i+(>)MkVI#{4FM;Qb8VCb!pVptv1t?0&*S7IEjr8g_GlsI&M9%fn z7VoantQLrvlcH8BbBU4m50JWmEVZ!wfJ+=NEZUdOw9^Kbiw=&+T=K{lcl{qq^dt` zD)cyQF{+67l&!_X+0Vfr4xcdp+;kwVj_x4>0H{X)A2&ljutH$48`gvhB+T+2EeL+F zoZwI#d)67UJJb z)8ZTiyZMg+sfPT8_)8PQUq|A~Y%A^wS& z8I);A1&vgzyN??2ms)JgAaj3qG1Wt z|EE_<{T(0w^55|8|4LAPumC%ASL6RbXi!grZ028RufHZ(|78OJID=}UVQHaNLjHmM EU*9PxfdBvi diff --git a/sources/common/doc/manual.pdf b/sources/common/doc/manual.pdf index 6fcfec908a4a8956280d3960e89ed50414fdea77..be590ea78bd2935057d9921fce43059cbbef348f 100644 GIT binary patch delta 9358 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 NCPhKPV7(#b{{TK4dB*?% delta 9505 zcmai22{={T`$nP8IfN*#LP9CS9?l+4(SVd8l0t@DW6G42p=mdgNFjF7rJ{k7q8t%L zDJmsHlZX_Vr&Q`z|8=@e_W3=}-}CIw@%FCut@RD>_icrp+|o|&#g-{lOyKSKnfnb4 zG!%j(YF+iI)ccjyGvMyVHK}LyD%YK~ZnK>dWRUY)M9^MgfP)K~XtZs%bYEEO7WDdM_JAkIvojy2m z{;OrlDV14B!_m`!sf_Tt++O!pV;0_i^F>CP=8frD~UKJ>od9KhW;o z7Livx8aEFnKo#VcTjfjv2~Tp#~xS6KIm*Hp6lX^dAD2b zOEHm&@~NHaZPb3tD?3)AR4k{eRx|dpP5!aO`rVwZamYCx%7-JPY_@AGD-PMSNv!nd?V?}{%OSCFak#>({Z z5nG}ADm(QZ5-GDjE_-5e#blS`c>lXO87%J?$c}{QTVmSWjQHX>kN(u1 zMYAotd#X+6-JiQG8=qrIU05-)rTFX1dcNY>gKyW?{=Kw5KC@|J))caD*_IK~rDt3F=A_kD0JygYNv^DCb058Gc-PFD6jQscuA@d6}Od5~)OU`b2u|KExnV;qu zPVw$-AJ(@wK3vn}PKo;?4srPxw?AxGx@EIz>V%qIDK{@1Yqi*uT&XgdjLWpHRI+hx zGho-uI&iikqGb6$51PXBI1QcKsV?iF#C6&1PjWGZs14_Ge#4b95q#$wy#A}o1)R(4=6p?RE@xk*Ox3UP z{mLt2Xk?1}NPwARDSVG&~QLUG>?PUdpDaEhY(-Z$y9+EN-4mwUYm zCRst$m^HK6IbLZc?3VWh+7{+F@)s_?bK|_D#{{|EYwOEO6Z_c5ETT1T6et_orEHE3 z(snj3X_V`XRnWOSn-dUJ(52h7!;*5Ubg9>`>vV^2s?7KlVZG$^+Op)LyFM$L8%`UY zSMJs?&*)!*8PAz9;MQ9&=k{_~d{%dJe4Xe0xt{6gHA@!`T%G&+Qo{L$m-+G$6;qP+ zlIy(uLK0$I@6O>v5K(%Pe`Y$98genaH?y`noi>m(zbH2v zT?pd`Jl>pt!|w9J{T5^C8@${pd5@vlii^E%SzjNTDYP0u)wX8!yT07%oRH9Ie>Sk4 zT&5cO*51U)y*=}Y4j;iBH9Ys&ZHl8ksDW{XWb30Usrw#pTe}N3rezkXx`b?_kaoql zFMBCD*+X^`#tMU;))my&kvH$Uh!hv2!ah-Z_h+=onB8yW$}IN`?7g;Fll!G4Pqbzz zbgNA2EpwwfVTlF{kJV^Yy`sS5@)x)iG-A}0!v-1fxHdHfHHEQwjf_YTO zC&!ZF@?JjwpzfMepEROUL%W{^m^;LrsKe$q#5ERdo2Gnm>FISh9Zb)rzAhO^t|)N~ z-gqW}(}lTJZt|M{amU`y3}wo9(e)K|8LJOpTli3ED&)GYd5s$a(%L7fe4${?(WW{&kQ$c&e|<{^0oJLgTe@ z>Bg3Z2H9V~<;d*4F?o#+tax{gi%HOBkBgdZ-xN*;SgY+12@YwK$h33x2Ma#O~Qkgq|6OZ`Rrb3H8{=~0+#)_cdmdJKulGrwMd;FkIWEnwPPO0rJWPK`bJU8O9C9rT9&fe7PbNyWjN=o~ z5AEFUly}G`W5cyn$=nFbY4z-FWApuw>2|66mc>kfpNSpmdiId4rfcnWO~RiHk<+Q$ zMMN&#)ZQmjb|}fsd691|vYc9TVlZgs!^hPuPf;_LM1DDxWuwus`m92u4N7|SzzcQ{ z(PknnmWAdi0ce_4~zmwF|KDG{BnxPnzsk!EDRn^k*Hcq_Cd2GiP)=kUp2jb;r zwGQk&BeUY8M}%tzIcb{6t>L$^|J+$fO~mI0s=Ou@L*hBI@Pe#~A~AQ<`{vZN&3dg; zSYqn5eEgFY2wR-)V{!TN>&>;IzLgOg?=51!;DNSQBjcpZwCHA=)BhNhJo=y%QavU0 z^{$ps^`~R6&WJKiJHIvmNXh!)X#r1V)2BSRhT#M0|B!Q|v(@7gbKGRhUK3jU1S(D& z4b#=U{Mtl6_qIy}GS<#Wrg&`vP1vG7XiUcGJc+Hvx7!w2Pf6R}=61H{^CbUc**hi| z1&uGXl8XDdU-RX0ugk;n-EtFMU#2%#B=*^2M>m^=j4P7Xv>VaG{(gRA+bzRjd5y9w z*_ZhUxVe zoC`0TmvYyrDEjP)nKR1rjkKeJkfmw{hqIQI$%oFX?Ya24&>=`pDLdukY1i5fnTss< z-jQ2eG}k}a*Kbwh)>7{c)Uwpcc&*rym)0xyT(cd2?)Ym1CnDh9pxe>@y2cpg1zy=^ zRQA$IW=Xo4G80>7(GnME^K{(Cf5{YO<&$nrtM)4`kDYVP#aLDHKBTi&mUC*=OeyJa z4oiY7I^}L|$;{VwT)tGYQe@fOhAZa2J8r)9LWb7X=9-nuSrvy)Nhs|pj5hA~*zV)y zsVMIhLe4kS~t<7)XTBxM3#R2q~qgN z-oS<4!F%(?=$PxaMmoypy5m2IpPfB;A@iixVQ>%oID zxOmih>5zzii~D2D4w%T=IPT#X`kM_VEEapVrC;VmX3#4owvj zAwi3r$_(#+#`|{DQW)kv$WHd$oJx3aw_^N&$k_@S9i|0tHBz5 zjGR74T?swOK`gR#2Vx&Rt5=Cx-*j7R-O3O1eNW=&Yjdu~o^kA5kZI)bQYkC3z(i`D z#4;@_-xjKKk+iz#@>kvpKfds<6<_|DRPo;=bYaZVOyoBNLw2 z2b^d#Jfs}x+|@s%Qh)V!|24O!_J3Ity<5wzTgB(VmFi)?34@m2Qv8!12I^1d$QByz9iEB?8`$?_w!yjWPsbT? zuh$k2d#S($(N|Cs31vGkmt(PU0r|y@V8H z?-#GS+||GG=0MzJ%ge6psShW-XqbL0VQS;n#^deW&2`7iCkLCpApARQ{6*1Y-B8ag zag(8JDK|atw)Kqn=uO{wYSWUleHplI|HLDu z-5sx7D{YMC_hhx5Z!*0+&*$#((_4F&PM+A$9{1OzPX2VF|0?l?+KA9l_4UR;Iiu{X zxl*F~W3Z|uGEuK&`@C%3;=R`t}$W5$N_C+K&U8G#yAhwZ#IdXg@Pt}eZ3_`xSCT=QkG zXT$EaIF+z;`BSmdTMaxts{@DIM7K}F!W-MNj%neJPglvma))8 z)Oe%>b&3pi5(SSKc*cNdEO^AhBLN;s@QmY!I*q?x z!Oxq+mQPT^c|WE#l)zzvi`Lx_Y)=d8O2W)RK`eYmn;;($fju)lf z5?IcB<65@6qcp+&Iqjh^gwknsER=53sea-Q+gZ;F&cXURyIH!Sd=z?%5vea zML6qMOA|jWBV3q^&`)&PDE(I)=P;eD$DYZ59LE_FrLRJ4nExq(GhLJ(kFZ_%xCTpR zof7%WCISC>W|DSOW6h)^V_DI3G|ATDlLuMr#OOynHpH)qV;vNw?dPza`NavWx&_kY zPxCO2;V@la16Wv||tRH{M(q5^=`(+&_@IO4p z`_DQ{k9~-y^f)v4rF!fUQTiOjf%u&eTTPVaARK4DH^O!mm*V}hj&fnT{SXJG#YuJq zeIbsc#lJ+dRYmE_1P)A#&S9_QPfg_9pEsF6fTx%1n<8p3{^KjE1`|nj90h%n`0xL4 zHJJC~E1`x!KWL;HOn(2$(l_M+2EsR~<8Un{U<^TFl-{l;HAjqx(S?FfaGLjmPZXk& zY2cH<=>Wke!lkpm|BldY-+zZ_b#nug14JLc*=qs^B5omfy?12?LJ*-_x(H6l-<$zbx3|6)n~4iZA*JV=NL3U)LGgJ{4E!@vjvGlDMQp~4ss9(6zpxE?}y zC}Tqy=b<gSfQK{Agu*aHj&cwL0Squl-w`E&`u`WK-w_07Cn4rx08wZ| zK!liv0fsPAk&EL%ZblmhG#)l;Er_6ih%rtGFcKL>{LUk}3?mp9gHXnyNe}~wp)~@Y zKt=zIG{A6#Vi*>HT*hM1C~;EgCK!S-Tn%^x)73aoWoGEW0lCnR{eB6WfXH+;jsUG; z7y*khF5|`m9?lR6;C$kLcm@}AqCdPq0k;T7fl(m9fPynT0}KmEhJZ&18OF$;xBIEg zBo~L6MGAsWB3z1T7>8ko`$-Jw_2^SW07C_x?~j`ZFko2-BbfRHc)VZLO#N(R7zPP% zh#|0$VGML|rV)(G^dO00m{87O7{L@+3J`%Cgf`?claR!4NJ!JbB*V-Zz(biy2r%vs z#r`GO00XC11N8@fe#HsHg|rF~31+JR7>`+EB)A+?H~|L#a`i7y6UgsmrGCs27=e;P zaVJ30GCf1!OkDs*2%#2<5hPP|0T0MHV?PQ+N%$rtB774P6}}0`YoP;@nD9kNLii#i zDG14T|NnMBDctNa9>mmn665`kxbskyN*j%Vj73OBO92=PkK%zC0T5&A5~yVuV|W2z;5ZB;U?%%d&Rt49$e1k{DG z7+}m93h+SrF?ryvPiQU7gP4cm2^4YES_%S%D;zr>NiZi);1@7Mk6H}Yf`lIxPw?7; zz$kCD5dkJ#EC_h_!WlgZhy#o*5PyV0*6CFshG zgd0zDz(bj(2r$si zg!cP6lm4m_z!S{&j2^`$V9>Ef)i#*U5#}2mz`&p?#KTc$E^z-x`vA`W-E4pMC@>!j z$vu~ZnMw$TR75DbxFjYNCN4=ZCpnVK18<^?LsMKH0t?-Q2WDvokqcCunblk#DLf*8 zS9IonV2&1U9}tEB9-~J=1XHU?FgpqN85kCxYhYC9b{Lot7`i}Wpdfx Date: Fri, 7 Sep 2018 12:05:34 +0200 Subject: [PATCH 105/143] #25 Regex exception handling --- sources/common/doc/manual.odt | Bin 560093 -> 560287 bytes sources/common/doc/manual.pdf | Bin 865594 -> 866423 bytes sources/common/inc/SignalCreator.h | 12 +++++++++++- sources/common/inc/VcdExceptionList.h | 3 +++ sources/common/src/SignalFactory.cpp | 6 ++++++ 5 files changed, 20 insertions(+), 1 deletion(-) diff --git a/sources/common/doc/manual.odt b/sources/common/doc/manual.odt index 1c852e6cb9fc12c15a031dd753207557eeb2ad15..522d7a50828004257d3f8331d71259fc2ebd261f 100644 GIT binary patch delta 24551 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 delta 24318 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 diff --git a/sources/common/doc/manual.pdf b/sources/common/doc/manual.pdf index be590ea78bd2935057d9921fce43059cbbef348f..fb0f1f8866ffdf3a62488720d3aa738b9f7780e8 100644 GIT binary patch delta 100637 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

8>P>EUqKjfkEzyI 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%0AQYyvE@aO^Mup5!%HjkAS9|< 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 delta 99769 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�Dhn(Yk!d?b7LeYPbq= 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 I=xHMV2PF1g_W%F@ diff --git a/sources/common/inc/SignalCreator.h b/sources/common/inc/SignalCreator.h index 792dd16..75c8659 100644 --- a/sources/common/inc/SignalCreator.h +++ b/sources/common/inc/SignalCreator.h @@ -50,7 +50,8 @@ namespace PARSER /// which will be matched against the log line. /// @param rSignalRegEx The regular expression to be matech against the log line. SignalCreator(const std::string &rSignalRegEx) : - m_SignalRegEx("^" + rSignalRegEx + "\r?$") + m_SignalRegEx("^" + rSignalRegEx + "\r?$"), + m_RegEx(rSignalRegEx) { } @@ -72,10 +73,19 @@ namespace PARSER INSTRUMENT::Instrument::LineNumberT lineNumber, SIGNAL::SourceRegistry::HandleT sourceHandle) const = 0; + /// Returns the regex. + const std::string &GetRegEx() const + { + return m_RegEx; + } + protected: /// The RegEx matching the signal description. const std::regex m_SignalRegEx; + + /// The original RegEx string. + const std::string m_RegEx; }; inline SignalCreator::~SignalCreator() = default; diff --git a/sources/common/inc/VcdExceptionList.h b/sources/common/inc/VcdExceptionList.h index 171bdef..9b11866 100644 --- a/sources/common/inc/VcdExceptionList.h +++ b/sources/common/inc/VcdExceptionList.h @@ -114,6 +114,9 @@ namespace EXCEPTION /// User expression evaluation error. const uint32_t EXPRESSION_EVALUATION_ERROR = 19U; + /// Regex error. + const uint32_t REGEX_ERROR = 20U; + // Logic errors below shall never happen. // They are enumerated from 9000. diff --git a/sources/common/src/SignalFactory.cpp b/sources/common/src/SignalFactory.cpp index 3b8aa4a..151dcf9 100644 --- a/sources/common/src/SignalFactory.cpp +++ b/sources/common/src/SignalFactory.cpp @@ -73,6 +73,12 @@ std::vector PARSER::SignalFactory::Create(std::string &lo GetLogLineInfo(sourceHandle, lineNumber, logLine) + smallVector.what()); } + catch (const std::regex_error ®exError) + { + throw EXCEPTION::VcdException(EXCEPTION::Error::REGEX_ERROR, + regexError.what() + + std::string("\nRegex: ") + creator->GetRegEx()); + } // If successful add created Signal to the returned vector. if (pSignal != nullptr) From 83a207ed395d83f23bb6c31a2a4c6687926d2275 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Fri, 7 Sep 2018 15:56:03 +0200 Subject: [PATCH 106/143] #25 Ignore empty strings --- sources/common/src/SignalFactory.cpp | 4 + sources/parsers/inc/DecimalNode.h | 36 +++++--- sources/parsers/inc/EvaluatorExceptions.h | 107 ++++++++++++---------- sources/parsers/inc/ExpressionContext.h | 2 +- sources/parsers/inc/ExpressionNode.h | 10 ++ sources/parsers/inc/FloatNode.h | 17 ++-- 6 files changed, 108 insertions(+), 68 deletions(-) diff --git a/sources/common/src/SignalFactory.cpp b/sources/common/src/SignalFactory.cpp index 151dcf9..272141f 100644 --- a/sources/common/src/SignalFactory.cpp +++ b/sources/common/src/SignalFactory.cpp @@ -61,6 +61,10 @@ std::vector PARSER::SignalFactory::Create(std::string &lo // Try to use creator. pSignal = creator->Create(logLine, lineNumber, sourceHandle); } + catch (const PARSER::EXCEPTIONS::EmptyString &) + { + // Just ignore it. The signal won't be created. + } catch (const PARSER::EXCEPTIONS::EvaluatorException &evaluatorError) { throw EXCEPTION::VcdException(EXCEPTION::Error::EXPRESSION_EVALUATION_ERROR, diff --git a/sources/parsers/inc/DecimalNode.h b/sources/parsers/inc/DecimalNode.h index 5239276..6724c14 100644 --- a/sources/parsers/inc/DecimalNode.h +++ b/sources/parsers/inc/DecimalNode.h @@ -84,17 +84,22 @@ namespace PARSER virtual SafeUInt EvaluateUint() const { SafeUInt value = 0; + std::string stringValue(m_rContext.GetElement(m_Index)); try { - value = std::stoll(m_rContext.GetElement(m_Index).c_str(), nullptr, 10); + value = std::stoll(stringValue.c_str(), nullptr, 10); } - catch (const std::out_of_range&) + catch (const std::out_of_range &) { - throw EXCEPTIONS::Overflow("Out of range decimal value: " + m_rContext.GetElement(m_Index)); + throw EXCEPTIONS::Overflow("Out of range decimal value: " + stringValue); } - catch (const std::invalid_argument&) + catch (const std::invalid_argument &) { - throw EXCEPTIONS::ConversionError("Cannot convert to hex: " + m_rContext.GetElement(m_Index)); + if (IsStringEmpty(stringValue)) + { + throw EXCEPTIONS::EmptyString(); + } + throw EXCEPTIONS::ConversionError("Cannot convert to decimal: " + stringValue); } return value; @@ -125,17 +130,22 @@ namespace PARSER virtual SafeUInt EvaluateUint() const { SafeUInt value = 0; + std::string stringValue(m_rContext.GetElement(m_Index)); try { - value = std::stoll(m_rContext.GetElement(m_Index).c_str(), nullptr, 16); + value = std::stoll(stringValue.c_str(), nullptr, 16); } - catch (const std::out_of_range&) + catch (const std::out_of_range &) { - throw EXCEPTIONS::Overflow("Out of range decimal value: " + m_rContext.GetElement(m_Index)); + throw EXCEPTIONS::Overflow("Out of range decimal value: " + stringValue); } - catch (const std::invalid_argument&) + catch (const std::invalid_argument &) { - throw EXCEPTIONS::ConversionError("Cannot convert to hex: " + m_rContext.GetElement(m_Index)); + if (IsStringEmpty(stringValue)) + { + throw EXCEPTIONS::EmptyString(); + } + throw EXCEPTIONS::ConversionError("Cannot convert to hex: " + stringValue); } return value; @@ -196,7 +206,7 @@ namespace PARSER { return m_pLeft->EvaluateUint() + m_pRight->EvaluateUint(); } - catch (const std::out_of_range&) + catch (const std::out_of_range &) { throw EXCEPTIONS::Overflow("Overflow while adding."); } @@ -237,7 +247,7 @@ namespace PARSER { return m_pLeft->EvaluateUint() - m_pRight->EvaluateUint(); } - catch (const std::out_of_range&) + catch (const std::out_of_range &) { throw EXCEPTIONS::Overflow("Underflow while substracting."); } @@ -278,7 +288,7 @@ namespace PARSER { return m_pLeft->EvaluateUint() * m_pRight->EvaluateUint(); } - catch(const std::out_of_range&) + catch (const std::out_of_range &) { throw EXCEPTIONS::Overflow("Overflow while multiplying."); } diff --git a/sources/parsers/inc/EvaluatorExceptions.h b/sources/parsers/inc/EvaluatorExceptions.h index f49f95c..1a78de0 100644 --- a/sources/parsers/inc/EvaluatorExceptions.h +++ b/sources/parsers/inc/EvaluatorExceptions.h @@ -40,80 +40,91 @@ namespace PARSER /// expressions contains errors. class ParsingError : public std::runtime_error { - public: - /// The exception constructor. - /// - /// @param rMessage The exception warning. - ParsingError(const std::string &rMessage) : - std::runtime_error(rMessage) - { - } + public: + /// The exception constructor. + /// + /// @param rMessage The exception warning. + ParsingError(const std::string &rMessage) : + std::runtime_error(rMessage) + { + } }; /// The base evaluator exception class. class EvaluatorException : public std::runtime_error { - public: - /// The exception constructor. - /// - /// @param rMessage The exception warning. - EvaluatorException(const std::string &rMessage) : - std::runtime_error(rMessage) - { - } + public: + /// The exception constructor. + /// + /// @param rMessage The exception warning. + EvaluatorException(const std::string &rMessage) : + std::runtime_error(rMessage) + { + } }; /// The conversion error. The exception is raised when a string cannot /// be successfully converted to a double, decimal or hexadecimal value. class ConversionError : public EvaluatorException { - public: - /// The exception constructor. - /// - /// @param rMessage The exception warning. - ConversionError(const std::string &rMessage) : - EvaluatorException(rMessage) - { - } + public: + /// The exception constructor. + /// + /// @param rMessage The exception warning. + ConversionError(const std::string &rMessage) : + EvaluatorException(rMessage) + { + } }; /// The overflow error. The arthmetics overflow detection. class Overflow : public EvaluatorException { - public: - /// The exception constructor. - /// - /// @param rMessage The exception warning. - Overflow(const std::string &rMessage) : - EvaluatorException(rMessage) - { - } + public: + /// The exception constructor. + /// + /// @param rMessage The exception warning. + Overflow(const std::string &rMessage) : + EvaluatorException(rMessage) + { + } }; /// The regex index is out of range. class IndexOutOfRange : public EvaluatorException { - public: - /// The exception constructor. - /// - /// @param rMessage The exception warning. - IndexOutOfRange(const std::string &rMessage) : - EvaluatorException(rMessage) - { - } + public: + /// The exception constructor. + /// + /// @param rMessage The exception warning. + IndexOutOfRange(const std::string &rMessage) : + EvaluatorException(rMessage) + { + } }; /// The division by zero error. class DivByZero : public EvaluatorException { - public: - /// The exception constructor. - /// - /// @param rMessage The exception warning. - DivByZero(const std::string &rMessage) : - EvaluatorException("Division by zero." + rMessage) - { - } + public: + /// The exception constructor. + /// + /// @param rMessage The exception warning. + DivByZero(const std::string &rMessage) : + EvaluatorException("Division by zero." + rMessage) + { + } + }; + + /// Empty string. + class EmptyString : public std::runtime_error + { + public: + /// The exception constructor. + EmptyString() : + std::runtime_error("Empty string.") + { + } }; } } diff --git a/sources/parsers/inc/ExpressionContext.h b/sources/parsers/inc/ExpressionContext.h index 84348ed..6a14c13 100644 --- a/sources/parsers/inc/ExpressionContext.h +++ b/sources/parsers/inc/ExpressionContext.h @@ -82,7 +82,7 @@ namespace PARSER /// /// @param index The index of the regex group content to be returned. /// @return String representing the given regex group. - std::string GetElement(size_t index) const + const std::string GetElement(size_t index) const { if (static_cast(index) > m_pGroups->size()) { diff --git a/sources/parsers/inc/ExpressionNode.h b/sources/parsers/inc/ExpressionNode.h index 6414c1c..408f267 100644 --- a/sources/parsers/inc/ExpressionNode.h +++ b/sources/parsers/inc/ExpressionNode.h @@ -32,6 +32,7 @@ #include #include #include +#include #include "SafeUInt.h" #include "EvaluatorExceptions.h" @@ -80,6 +81,15 @@ namespace PARSER } protected: + /// Checks if the string's empty or contains just white spaces. + /// + /// @param stringValue The string value to be verified. + /// @returns True for empty or all-white-spaces string. False otherwise. + bool IsStringEmpty(const std::string &stringValue) const + { + return std::all_of(stringValue.begin(), stringValue.end(), [](char c) { return std::isspace(c); }); + } + /// The beginning of the index string. const size_t FIRST_STRING_CHARACTER_POS = 4; diff --git a/sources/parsers/inc/FloatNode.h b/sources/parsers/inc/FloatNode.h index 40369f4..6fbc9c8 100644 --- a/sources/parsers/inc/FloatNode.h +++ b/sources/parsers/inc/FloatNode.h @@ -85,20 +85,25 @@ namespace PARSER virtual std::tuple EvaluateDouble() const { double value = 0; + std::string stringValue(m_rContext.GetElement(m_Index)); try { - value = std::stod(m_rContext.GetElement(m_Index), nullptr); + value = std::stod(stringValue, nullptr); } - catch (const std::invalid_argument&) + catch (const std::invalid_argument &) { - throw EXCEPTIONS::ConversionError("Cannot convert to double: " + m_rContext.GetElement(m_Index)); + if (IsStringEmpty(stringValue)) + { + throw EXCEPTIONS::EmptyString(); + } + throw EXCEPTIONS::ConversionError("Cannot convert to double: " + stringValue); } - catch (const std::out_of_range&) + catch (const std::out_of_range &) { - throw EXCEPTIONS::Overflow("Out of range double value: " + m_rContext.GetElement(m_Index)); + throw EXCEPTIONS::Overflow("Out of range double value: " + stringValue); } - return std::make_tuple(value, m_rContext.GetElement(m_Index)); + return std::make_tuple(value, stringValue); } }; From 1f0443bbed18d3e9a1f6bd3e1b61799251a7d74c Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Mon, 10 Sep 2018 15:50:25 +0200 Subject: [PATCH 107/143] #25 Multiplication order --- sources/common/inc/SafeUInt.h | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/sources/common/inc/SafeUInt.h b/sources/common/inc/SafeUInt.h index e95f8de..83617a4 100644 --- a/sources/common/inc/SafeUInt.h +++ b/sources/common/inc/SafeUInt.h @@ -89,9 +89,24 @@ template class SafeUInt /// Overrides the multiplication operator '*='. SafeUInt &operator*=(const SafeUInt &rhs) { - if ((std::numeric_limits::max() / m_Value) < rhs.m_Value) + T smaller; + T larger; + if (m_Value > rhs.m_Value) { - throw std::out_of_range("Arthmetic overflow"); + larger = m_Value; + smaller = rhs.m_Value; + } + else + { + larger = rhs.m_Value; + smaller = m_Value; + } + if (larger > 0) + { + if ((std::numeric_limits::max() / larger) < smaller) + { + throw std::out_of_range("Arthmetic overflow"); + } } m_Value *= rhs.m_Value; return *this; From bc204ba9ca294b3d98a0812c0c9c2cb7dd4f7fbc Mon Sep 17 00:00:00 2001 From: Endrju Date: Sun, 16 Sep 2018 00:37:53 +0200 Subject: [PATCH 108/143] Build with CMake --- sources/CMakeLists.txt | 5 +- sources/cmake/commonTarget.cmake | 10 +-- sources/cmake/parserSources.cmake | 61 +++++++++++++++++++ .../parsers/inc/{Evaluator.h => evaluator.h} | 2 +- sources/parsers/src/Evaluator.cpp | 2 +- 5 files changed, 73 insertions(+), 7 deletions(-) create mode 100644 sources/cmake/parserSources.cmake rename sources/parsers/inc/{Evaluator.h => evaluator.h} (99%) diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt index 7bf3059..7cbb832 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -9,10 +9,11 @@ # # Most interesting cmake files are: # - commonSources.cmake: list of all common sources and dirs. +# - parserSources.cmake: list of parser related files. # - vcdMaker.cmake, vcdMerge.cmake: executable targets with source list. # - unitTests.cmake: list of unit tests. # -# Copyright (c) 2017 vcdMaker team +# Copyright (c) 2018 vcdMaker team # # Permission is hereby granted, free of charge, to any person obtaining a # copy of this software and associated documentation files (the "Software"), @@ -45,6 +46,8 @@ project(vcdMakerTools VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH} include(commonSources) +include(parserSources) + include(commonTarget) include(vcdMaker) diff --git a/sources/cmake/commonTarget.cmake b/sources/cmake/commonTarget.cmake index b93ef93..17385a2 100644 --- a/sources/cmake/commonTarget.cmake +++ b/sources/cmake/commonTarget.cmake @@ -2,7 +2,7 @@ # # vcdMaker and vcdMerge common build target functions. # -# Copyright (c) 2017 vcdMaker team +# Copyright (c) 2018 vcdMaker team # # Permission is hereby granted, free of charge, to any person obtaining a # copy of this software and associated documentation files (the "Software"), @@ -46,7 +46,9 @@ endfunction(add_common_vcdtools_target_props) # Function for target creation. function(add_vcdtools_target TARGET_NAME TARGET_SOURCES TARGET_HEADERS TARGET_HEADERS_DIR) - add_executable(${TARGET_NAME} $ ${TARGET_SOURCES} ${COMMON_HEADERS} ${TARGET_HEADERS}) + add_executable(${TARGET_NAME} + $ ${TARGET_SOURCES} + ${COMMON_HEADERS} ${PARSER_HEADERS_DIR} ${PARSER_GEN_HEADERS_DIR} ${TARGET_HEADERS}) target_include_directories(${TARGET_NAME} PUBLIC ${COMMON_HEADERS_DIR} ${TARGET_HEADERS_DIR} ${TCLAP_HEADERS_DIR}) @@ -57,8 +59,8 @@ endfunction(add_vcdtools_target) # Set common sources build -add_library(${COMMON_LIB_TARGET} OBJECT ${COMMON_SOURCES} ${COMMON_HEADERS}) +add_library(${COMMON_LIB_TARGET} OBJECT ${COMMON_SOURCES} ${PARSER_SOURCES} ${COMMON_HEADERS} ${PARSER_HEADERS}) -target_include_directories(${COMMON_LIB_TARGET} PUBLIC ${COMMON_HEADERS_DIR} ${TCLAP_HEADERS_DIR}) +target_include_directories(${COMMON_LIB_TARGET} PUBLIC ${COMMON_HEADERS_DIR} ${PARSER_HEADERS_DIR} ${PARSER_GEN_HEADERS_DIR} ${TCLAP_HEADERS_DIR}) add_common_vcdtools_target_props(${COMMON_LIB_TARGET}) diff --git a/sources/cmake/parserSources.cmake b/sources/cmake/parserSources.cmake new file mode 100644 index 0000000..974c311 --- /dev/null +++ b/sources/cmake/parserSources.cmake @@ -0,0 +1,61 @@ +# parserSources.cmake +# +# List of parser source files and directories. +# +# Copyright (c) 2018 vcdMaker team +# +# 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. + +# Set common source files. +set(PARSER_SOURCES_DIR parsers/src) +set(PARSER_GEN_SOURCES_DIR parsers/auto) + +set(PARSER_SOURCES + ${PARSER_SOURCES_DIR}/Evaluator.cpp + + ${PARSER_GEN_SOURCES_DIR}/FloatParser.cpp + ${PARSER_GEN_SOURCES_DIR}/FloatScanner.cpp + ${PARSER_GEN_SOURCES_DIR}/DecimalScanner.cpp + ${PARSER_GEN_SOURCES_DIR}/StringScanner.cpp + ${PARSER_GEN_SOURCES_DIR}/DecimalParser.cpp + ${PARSER_GEN_SOURCES_DIR}/StringParser.cpp) + +# Set common header files. +# This shouldn't be needed, but helps IDE project generators. +set(PARSER_HEADERS_DIR parsers/inc) +set(PARSER_GEN_HEADERS_DIR parsers/auto) + +set(PARSER_HEADERS + ${PARSER_HEADERS_DIR}/EvaluatorExceptions.h + ${PARSER_HEADERS_DIR}/StringScanner.h + ${PARSER_HEADERS_DIR}/evaluator.h + ${PARSER_HEADERS_DIR}/FloatNode.h + ${PARSER_HEADERS_DIR}/ExpressionContext.h + ${PARSER_HEADERS_DIR}/FloatScanner.h + ${PARSER_HEADERS_DIR}/StringNode.h + ${PARSER_HEADERS_DIR}/ExpressionNode.h + ${PARSER_HEADERS_DIR}/DecimalScanner.h + ${PARSER_HEADERS_DIR}/DecimalNode.h + ${PARSER_GEN_HEADERS_DIR}/DecimalParser.hpp + ${PARSER_GEN_HEADERS_DIR}/StringParser.hpp + ${PARSER_GEN_HEADERS_DIR}/stack.hh + ${PARSER_GEN_HEADERS_DIR}/FlexLexer.h + ${PARSER_GEN_HEADERS_DIR}/location.hh + ${PARSER_GEN_HEADERS_DIR}/position.hh + ${PARSER_GEN_HEADERS_DIR}/FloatParser.hpp) diff --git a/sources/parsers/inc/Evaluator.h b/sources/parsers/inc/evaluator.h similarity index 99% rename from sources/parsers/inc/Evaluator.h rename to sources/parsers/inc/evaluator.h index a970c76..b18df24 100644 --- a/sources/parsers/inc/Evaluator.h +++ b/sources/parsers/inc/evaluator.h @@ -1,4 +1,4 @@ -/// @file parsers/inc/Evaluator.h +/// @file parsers/inc/evaluator.h /// /// The class provides means for evaluating user format expressions. /// diff --git a/sources/parsers/src/Evaluator.cpp b/sources/parsers/src/Evaluator.cpp index adb703f..6ab3134 100644 --- a/sources/parsers/src/Evaluator.cpp +++ b/sources/parsers/src/Evaluator.cpp @@ -30,7 +30,7 @@ #include -#include "Evaluator.h" +#include "evaluator.h" #undef yyFlexLexer /// Decimal lexer definition. From 447b17fde19ea2f290c7f3de81f1ead2f3fbd79d Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Mon, 17 Sep 2018 20:36:28 +0200 Subject: [PATCH 109/143] #25 User logs cleanup --- sources/cmake/parserSources.cmake | 2 +- sources/common/src/EventSignalCreator.cpp | 1 + sources/common/src/FSignalCreator.cpp | 1 + sources/common/src/ISignalCreator.cpp | 1 + sources/parsers/auto/DecimalParser.cpp | 2 +- sources/parsers/auto/FloatParser.cpp | 2 +- sources/parsers/auto/StringParser.cpp | 2 +- sources/parsers/inc/{evaluator.h => Evaluator.h} | 6 +++--- sources/parsers/inc/ExpressionContext.h | 5 ++--- sources/parsers/model/DecimalParser.yy | 2 +- sources/parsers/model/FloatParser.yy | 2 +- sources/parsers/model/StringParser.yy | 2 +- sources/parsers/src/Evaluator.cpp | 16 ++++++++-------- sources/vcdMaker/test/functional/test_001.vcd | 2 +- sources/vcdMaker/test/functional/test_002.vcd | 2 +- sources/vcdMaker/test/functional/test_003.vcd | 2 +- sources/vcdMerge/test/functional/test0_ms.vcd | 2 +- sources/vcdMerge/test/functional/test0_ns.vcd | 2 +- sources/vcdMerge/test/functional/test0_us.vcd | 2 +- sources/vcdMerge/test/functional/test1_ms.vcd | 2 +- sources/vcdMerge/test/functional/test1_ns.vcd | 2 +- sources/vcdMerge/test/functional/test1_us.vcd | 2 +- 22 files changed, 32 insertions(+), 30 deletions(-) rename sources/parsers/inc/{evaluator.h => Evaluator.h} (97%) diff --git a/sources/cmake/parserSources.cmake b/sources/cmake/parserSources.cmake index 974c311..ac62382 100644 --- a/sources/cmake/parserSources.cmake +++ b/sources/cmake/parserSources.cmake @@ -44,7 +44,7 @@ set(PARSER_GEN_HEADERS_DIR parsers/auto) set(PARSER_HEADERS ${PARSER_HEADERS_DIR}/EvaluatorExceptions.h ${PARSER_HEADERS_DIR}/StringScanner.h - ${PARSER_HEADERS_DIR}/evaluator.h + ${PARSER_HEADERS_DIR}/Evaluator.h ${PARSER_HEADERS_DIR}/FloatNode.h ${PARSER_HEADERS_DIR}/ExpressionContext.h ${PARSER_HEADERS_DIR}/FloatScanner.h diff --git a/sources/common/src/EventSignalCreator.cpp b/sources/common/src/EventSignalCreator.cpp index 3b97ded..5f37f4d 100644 --- a/sources/common/src/EventSignalCreator.cpp +++ b/sources/common/src/EventSignalCreator.cpp @@ -33,6 +33,7 @@ SIGNAL::Signal *PARSER::EventSignalCreator::Create(const std::string &rLogLine, { std::smatch result; + (void)lineNumber; if (true == std::regex_search(rLogLine, result, m_SignalRegEx)) { return new SIGNAL::EventSignal(result[2].str(), diff --git a/sources/common/src/FSignalCreator.cpp b/sources/common/src/FSignalCreator.cpp index ac06c9f..cd00df7 100644 --- a/sources/common/src/FSignalCreator.cpp +++ b/sources/common/src/FSignalCreator.cpp @@ -33,6 +33,7 @@ SIGNAL::Signal *PARSER::FSignalCreator::Create(const std::string &rLogLine, { std::smatch result; + (void)lineNumber; if (true == std::regex_search(rLogLine, result, m_SignalRegEx)) { return new SIGNAL::FSignal(result[2].str(), diff --git a/sources/common/src/ISignalCreator.cpp b/sources/common/src/ISignalCreator.cpp index 4d035da..0f4bb86 100644 --- a/sources/common/src/ISignalCreator.cpp +++ b/sources/common/src/ISignalCreator.cpp @@ -33,6 +33,7 @@ SIGNAL::Signal *PARSER::ISignalCreator::Create(const std::string &rLogLine, { std::smatch result; + (void)lineNumber; if (true == std::regex_search(rLogLine, result, m_SignalRegEx)) { return new SIGNAL::ISignal(result[2].str(), diff --git a/sources/parsers/auto/DecimalParser.cpp b/sources/parsers/auto/DecimalParser.cpp index 22e083c..60d021c 100644 --- a/sources/parsers/auto/DecimalParser.cpp +++ b/sources/parsers/auto/DecimalParser.cpp @@ -53,7 +53,7 @@ #line 94 "DecimalParser.yy" -#include "evaluator.h" +#include "Evaluator.h" #include "DecimalScanner.h" /* this "connects" the bison parser in the driver to the flex scanner class diff --git a/sources/parsers/auto/FloatParser.cpp b/sources/parsers/auto/FloatParser.cpp index 6a7a371..12cc694 100644 --- a/sources/parsers/auto/FloatParser.cpp +++ b/sources/parsers/auto/FloatParser.cpp @@ -53,7 +53,7 @@ #line 89 "FloatParser.yy" -#include "evaluator.h" +#include "Evaluator.h" #include "FloatScanner.h" /* this "connects" the bison parser in the driver to the flex scanner class diff --git a/sources/parsers/auto/StringParser.cpp b/sources/parsers/auto/StringParser.cpp index d218555..5b98162 100644 --- a/sources/parsers/auto/StringParser.cpp +++ b/sources/parsers/auto/StringParser.cpp @@ -53,7 +53,7 @@ #line 87 "StringParser.yy" -#include "evaluator.h" +#include "Evaluator.h" #include "StringScanner.h" /* this "connects" the bison parser in the driver to the flex scanner class diff --git a/sources/parsers/inc/evaluator.h b/sources/parsers/inc/Evaluator.h similarity index 97% rename from sources/parsers/inc/evaluator.h rename to sources/parsers/inc/Evaluator.h index b18df24..ab5dc95 100644 --- a/sources/parsers/inc/evaluator.h +++ b/sources/parsers/inc/Evaluator.h @@ -1,4 +1,4 @@ -/// @file parsers/inc/evaluator.h +/// @file parsers/inc/Evaluator.h /// /// The class provides means for evaluating user format expressions. /// @@ -128,10 +128,10 @@ namespace PARSER bool ParseStringStream(std::istream &inStream); /// Prints parsing error message. - std::string ParsingErrorMessage(const std::string& parsedExpression) const; + std::string ParsingErrorMessage(const std::string &parsedExpression) const; /// Prints evaluation error message. - std::string EvaluationErrorMessage(const std::string& evaluationError) const; + std::string EvaluationErrorMessage(const std::string &evaluationError) const; /// Syntax error index size_t m_SyntaxErrorIndex = 0; diff --git a/sources/parsers/inc/ExpressionContext.h b/sources/parsers/inc/ExpressionContext.h index 6a14c13..a9edc4b 100644 --- a/sources/parsers/inc/ExpressionContext.h +++ b/sources/parsers/inc/ExpressionContext.h @@ -56,10 +56,9 @@ namespace PARSER m_LineNo(lineNo) {} - /// Free the expression. + /// Expression context destructor. ~ExpressionContext() { - delete m_pExpression; } /// Set the expression context. @@ -84,7 +83,7 @@ namespace PARSER /// @return String representing the given regex group. const std::string GetElement(size_t index) const { - if (static_cast(index) > m_pGroups->size()) + if (index > m_pGroups->size()) { throw EXCEPTIONS::IndexOutOfRange("Regex group index out of range: " + std::to_string(index)); } diff --git a/sources/parsers/model/DecimalParser.yy b/sources/parsers/model/DecimalParser.yy index cd1cc38..6e667b3 100644 --- a/sources/parsers/model/DecimalParser.yy +++ b/sources/parsers/model/DecimalParser.yy @@ -93,7 +93,7 @@ %{ -#include "evaluator.h" +#include "Evaluator.h" #include "DecimalScanner.h" /* this "connects" the bison parser in the driver to the flex scanner class diff --git a/sources/parsers/model/FloatParser.yy b/sources/parsers/model/FloatParser.yy index 5c67e77..62fc97c 100644 --- a/sources/parsers/model/FloatParser.yy +++ b/sources/parsers/model/FloatParser.yy @@ -88,7 +88,7 @@ %{ -#include "evaluator.h" +#include "Evaluator.h" #include "FloatScanner.h" /* this "connects" the bison parser in the driver to the flex scanner class diff --git a/sources/parsers/model/StringParser.yy b/sources/parsers/model/StringParser.yy index 5889005..4d8259f 100644 --- a/sources/parsers/model/StringParser.yy +++ b/sources/parsers/model/StringParser.yy @@ -86,7 +86,7 @@ %{ -#include "evaluator.h" +#include "Evaluator.h" #include "StringScanner.h" /* this "connects" the bison parser in the driver to the flex scanner class diff --git a/sources/parsers/src/Evaluator.cpp b/sources/parsers/src/Evaluator.cpp index 6ab3134..aaa78ec 100644 --- a/sources/parsers/src/Evaluator.cpp +++ b/sources/parsers/src/Evaluator.cpp @@ -30,7 +30,7 @@ #include -#include "evaluator.h" +#include "Evaluator.h" #undef yyFlexLexer /// Decimal lexer definition. @@ -51,8 +51,8 @@ #include "StringScanner.h" PARSER::Evaluator::Evaluator(const std::string &rSourceName) : - m_Context(nullptr, 0), - m_rSourceName(rSourceName) + m_rSourceName(rSourceName), + m_Context(nullptr, 0) { } @@ -104,7 +104,7 @@ std::tuple PARSER::Evaluator::EvaluateDouble() const { std::tie(value, stringValue) = m_Context.GetExpression()->EvaluateDouble(); } - catch (const EXCEPTIONS::EvaluatorException& evaluatorError) + catch (const EXCEPTIONS::EvaluatorException &evaluatorError) { throw PARSER::EXCEPTIONS::EvaluatorException(EvaluationErrorMessage(evaluatorError.what())); } @@ -125,7 +125,7 @@ uint64_t PARSER::Evaluator::EvaluateUint() const { return m_Context.GetExpression()->EvaluateUint().GetValue(); } - catch (const PARSER::EXCEPTIONS::EvaluatorException& evaluatorError) + catch (const PARSER::EXCEPTIONS::EvaluatorException &evaluatorError) { throw PARSER::EXCEPTIONS::EvaluatorException(EvaluationErrorMessage(evaluatorError.what())); } @@ -137,7 +137,7 @@ std::string PARSER::Evaluator::EvaluateString() const { return m_Context.GetExpression()->EvaluateString(); } - catch (const PARSER::EXCEPTIONS::EvaluatorException& evaluatorError) + catch (const PARSER::EXCEPTIONS::EvaluatorException &evaluatorError) { throw PARSER::EXCEPTIONS::EvaluatorException(EvaluationErrorMessage(evaluatorError.what())); } @@ -188,7 +188,7 @@ bool PARSER::Evaluator::ParseStringStream(std::istream &in) return (parser.parse() == 0); } -std::string PARSER::Evaluator::ParsingErrorMessage(const std::string& parsedExpression) const +std::string PARSER::Evaluator::ParsingErrorMessage(const std::string &parsedExpression) const { std::string arrows(m_SyntaxErrorIndex - 1, '-'); arrows += '^'; @@ -196,7 +196,7 @@ std::string PARSER::Evaluator::ParsingErrorMessage(const std::string& parsedExpr return errorMessage; } -std::string PARSER::Evaluator::EvaluationErrorMessage(const std::string& evaluationError) const +std::string PARSER::Evaluator::EvaluationErrorMessage(const std::string &evaluationError) const { return std::string ("Expression: " + m_Expression + "\n" + evaluationError); } diff --git a/sources/vcdMaker/test/functional/test_001.vcd b/sources/vcdMaker/test/functional/test_001.vcd index eb5f185..7b8a960 100644 --- a/sources/vcdMaker/test/functional/test_001.vcd +++ b/sources/vcdMaker/test/functional/test_001.vcd @@ -1,6 +1,6 @@ $date December 8, 2014 14:15:00 $end -$version VCD Tracer "Perun" Release v.3.0.1 +$version VCD Tracer "Nestor" Release v.3.0.1 $end $timescale 1 us $end diff --git a/sources/vcdMaker/test/functional/test_002.vcd b/sources/vcdMaker/test/functional/test_002.vcd index 3163aa8..f80c20e 100644 --- a/sources/vcdMaker/test/functional/test_002.vcd +++ b/sources/vcdMaker/test/functional/test_002.vcd @@ -1,6 +1,6 @@ $date December 8, 2014 14:15:00 $end -$version VCD Tracer "Perun" Release v.3.0.1 +$version VCD Tracer "Nestor" Release v.3.0.1 $end $timescale 1 us $end diff --git a/sources/vcdMaker/test/functional/test_003.vcd b/sources/vcdMaker/test/functional/test_003.vcd index 166747c..e697a2c 100644 --- a/sources/vcdMaker/test/functional/test_003.vcd +++ b/sources/vcdMaker/test/functional/test_003.vcd @@ -1,6 +1,6 @@ $date December 8, 2014 14:15:00 $end -$version VCD Tracer "Perun" Release v.3.0.1 +$version VCD Tracer "Nestor" Release v.3.0.1 $end $timescale 1 us $end diff --git a/sources/vcdMerge/test/functional/test0_ms.vcd b/sources/vcdMerge/test/functional/test0_ms.vcd index a3fe6a3..4f766ff 100644 --- a/sources/vcdMerge/test/functional/test0_ms.vcd +++ b/sources/vcdMerge/test/functional/test0_ms.vcd @@ -1,6 +1,6 @@ $date December 8, 2014 14:15:00 $end -$version VCD Tracer "Perun" Release v.3.0.1 +$version VCD Tracer "Nestor" Release v.3.0.1 $end $timescale 1 ms $end diff --git a/sources/vcdMerge/test/functional/test0_ns.vcd b/sources/vcdMerge/test/functional/test0_ns.vcd index 95024e6..891e84b 100644 --- a/sources/vcdMerge/test/functional/test0_ns.vcd +++ b/sources/vcdMerge/test/functional/test0_ns.vcd @@ -1,6 +1,6 @@ $date December 8, 2014 14:15:00 $end -$version VCD Tracer "Perun" Release v.3.0.1 +$version VCD Tracer "Nestor" Release v.3.0.1 $end $timescale 1 ns $end diff --git a/sources/vcdMerge/test/functional/test0_us.vcd b/sources/vcdMerge/test/functional/test0_us.vcd index a9f6b5c..26985e6 100644 --- a/sources/vcdMerge/test/functional/test0_us.vcd +++ b/sources/vcdMerge/test/functional/test0_us.vcd @@ -1,6 +1,6 @@ $date December 8, 2014 14:15:00 $end -$version VCD Tracer "Perun" Release v.3.0.1 +$version VCD Tracer "Nestor" Release v.3.0.1 $end $timescale 1 us $end diff --git a/sources/vcdMerge/test/functional/test1_ms.vcd b/sources/vcdMerge/test/functional/test1_ms.vcd index de6ffb1..2c8a288 100644 --- a/sources/vcdMerge/test/functional/test1_ms.vcd +++ b/sources/vcdMerge/test/functional/test1_ms.vcd @@ -1,6 +1,6 @@ $date December 8, 2014 14:15:00 $end -$version VCD Tracer "Perun" Release v.3.0.1 +$version VCD Tracer "Nestor" Release v.3.0.1 $end $timescale 1 ms $end diff --git a/sources/vcdMerge/test/functional/test1_ns.vcd b/sources/vcdMerge/test/functional/test1_ns.vcd index ea3a862..dbe37fb 100644 --- a/sources/vcdMerge/test/functional/test1_ns.vcd +++ b/sources/vcdMerge/test/functional/test1_ns.vcd @@ -1,6 +1,6 @@ $date December 8, 2014 14:15:00 $end -$version VCD Tracer "Perun" Release v.3.0.1 +$version VCD Tracer "Nestor" Release v.3.0.1 $end $timescale 1 ns $end diff --git a/sources/vcdMerge/test/functional/test1_us.vcd b/sources/vcdMerge/test/functional/test1_us.vcd index 8f0d624..93648a8 100644 --- a/sources/vcdMerge/test/functional/test1_us.vcd +++ b/sources/vcdMerge/test/functional/test1_us.vcd @@ -1,6 +1,6 @@ $date December 8, 2014 14:15:00 $end -$version VCD Tracer "Perun" Release v.3.0.1 +$version VCD Tracer "Nestor" Release v.3.0.1 $end $timescale 1 us $end From f3609850e889abcf34100f64c6f05dafe06f8a66 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Sat, 29 Sep 2018 15:10:24 +0200 Subject: [PATCH 110/143] #25 Installation fixes --- windows/Bootstrapper/Bundle.wxs | 15 ++- windows/Installer/Product.wxs | 2 +- windows/Installer/resources/license.rtf | 126 +++++++++++------------- 3 files changed, 71 insertions(+), 72 deletions(-) diff --git a/windows/Bootstrapper/Bundle.wxs b/windows/Bootstrapper/Bundle.wxs index 0243848..544c995 100644 --- a/windows/Bootstrapper/Bundle.wxs +++ b/windows/Bootstrapper/Bundle.wxs @@ -25,13 +25,17 @@ + + DetectCondition="(vcRedistVersion >= "v14.14.26405.00") AND (vcRedistInstalled = "1")"> - + + + + \ No newline at end of file diff --git a/windows/Installer/Product.wxs b/windows/Installer/Product.wxs index e6a8607..0b3cdf7 100644 --- a/windows/Installer/Product.wxs +++ b/windows/Installer/Product.wxs @@ -48,7 +48,7 @@ - + diff --git a/windows/Installer/resources/license.rtf b/windows/Installer/resources/license.rtf index c724754..4b00798 100644 --- a/windows/Installer/resources/license.rtf +++ b/windows/Installer/resources/license.rtf @@ -1,49 +1,51 @@ -{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff31507\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi31507\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f34\fbidi \froman\fcharset1\fprq2{\*\panose 02040503050406030204}Cambria Math;} +{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi0\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;} {\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0302020204030204}Calibri Light;} {\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;} {\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f39\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f40\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} {\f42\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f43\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f44\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f45\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} -{\f46\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f47\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f409\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f410\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;} -{\f412\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f413\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f416\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f417\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);} -{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} -{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} -{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} -{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} -{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} -{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhimajor\f31528\fbidi \fswiss\fcharset238\fprq2 Calibri Light CE;}{\fhimajor\f31529\fbidi \fswiss\fcharset204\fprq2 Calibri Light Cyr;} -{\fhimajor\f31531\fbidi \fswiss\fcharset161\fprq2 Calibri Light Greek;}{\fhimajor\f31532\fbidi \fswiss\fcharset162\fprq2 Calibri Light Tur;}{\fhimajor\f31535\fbidi \fswiss\fcharset186\fprq2 Calibri Light Baltic;} -{\fhimajor\f31536\fbidi \fswiss\fcharset163\fprq2 Calibri Light (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} -{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} -{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} -{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} -{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} -{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} -{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} -{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} -{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;} -{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;} -{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} -{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} -{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}} -{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0; -\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\*\defchp \fs22\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap \ql \li0\ri0\sa160\sl259\slmult1 -\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 -\ltrch\fcs0 \fs22\lang1033\langfe1033\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp1033 \snext0 \sqformat \spriority0 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\* +{\f46\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f47\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f379\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f380\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;} +{\f382\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f383\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f386\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f387\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);} +{\f409\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f410\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f412\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f413\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;} +{\f416\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f417\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\fhimajor\f31528\fbidi \fswiss\fcharset238\fprq2 Calibri Light CE;}{\fhimajor\f31529\fbidi \fswiss\fcharset204\fprq2 Calibri Light Cyr;}{\fhimajor\f31531\fbidi \fswiss\fcharset161\fprq2 Calibri Light Greek;} +{\fhimajor\f31532\fbidi \fswiss\fcharset162\fprq2 Calibri Light Tur;}{\fhimajor\f31535\fbidi \fswiss\fcharset186\fprq2 Calibri Light Baltic;}{\fhimajor\f31536\fbidi \fswiss\fcharset163\fprq2 Calibri Light (Vietnamese);} +{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;} +{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0; +\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\*\defchp +\fs22\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap \ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa160\sl259\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1033\langfe1033\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp1033 \snext0 \sqformat \spriority0 Normal;}{\* +\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\* \ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa160\sl259\slmult1 -\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1033\langfe1033\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused -Normal Table;}}{\*\rsidtbl \rsid1782114\rsid10960968}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim0}{\info{\operator Wojciech Rynczuk}{\creatim\yr2017\mo3\dy1\hr16\min39} -{\revtim\yr2017\mo3\dy1\hr16\min39}{\version2}{\edmins0}{\nofpages1}{\nofwords157}{\nofchars901}{\nofcharsws1056}{\vern57441}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}} +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1033\langfe1033\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused +Normal Table;}}{\*\rsidtbl \rsid1531059\rsid1782114\rsid10960968}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim0}{\info{\operator Wojciech Rynczuk} +{\creatim\yr2017\mo3\dy1\hr16\min39}{\revtim\yr2018\mo9\dy28\hr22\min57}{\version3}{\edmins0}{\nofpages1}{\nofwords157}{\nofchars901}{\nofcharsws1056}{\vern57445}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}} \paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect \widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\horzdoc\dghspace120\dgvspace120\dghorigin1701 -\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale100\rsidroot10960968 \nouicompat \fet0{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1 +\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale140\rsidroot10960968 \nouicompat \fet0{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1 \pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5 \pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang -{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\sa160\sl252\slmult1\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 -\fs22\lang1033\langfe1033\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\insrsid1782114 \hich\af37\dbch\af31505\loch\f37 Copyright (c) 201}{\rtlch\fcs1 \af37 \ltrch\fcs0 -\f37\lang1045\langfe1033\langnp1045\insrsid10960968 \hich\af37\dbch\af31505\loch\f37 7}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\insrsid1782114 \hich\af37\dbch\af31505\loch\f37 }{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang1045\langfe1033\langnp1045\insrsid1782114 -\hich\af37\dbch\af31505\loch\f37 vcdMaker team}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\insrsid1782114 +{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\sa160\sl252\slmult1\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 +\fs22\lang1033\langfe1033\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\insrsid1782114 \hich\af37\dbch\af31505\loch\f37 Copyright (c) 201}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\insrsid1531059 +\hich\af37\dbch\af31505\loch\f37 8}{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\insrsid1782114 \hich\af37\dbch\af31505\loch\f37 }{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\insrsid1782114\charrsid1531059 \hich\af37\dbch\af31505\loch\f37 vcdMaker team}{\rtlch\fcs1 \af37 +\ltrch\fcs0 \f37\insrsid1782114 \par \par \hich\af37\dbch\af31505\loch\f37 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentat\hich\af37\dbch\af31505\loch\f37 ion 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 i @@ -54,7 +56,7 @@ ion files (the "Software"), to deal in the Software without restriction, includi \par \hich\af37\dbch\af31505\loch\f37 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRE\hich\af37\dbch\af31505\loch\f37 SS 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 ACTI \hich\af37\dbch\af31505\loch\f37 O\hich\af37\dbch\af31505\loch\f37 N OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -\par }{\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\insrsid1782114 +\par \par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a 9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad 5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6 @@ -135,35 +137,25 @@ babac4df000000ffff0300504b01022d0014000600080000002100e9de0fbfff0000001c02000013 \lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Top of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Bottom of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal (Web);\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Acronym; \lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Address;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Cite;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Code;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Definition; \lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Keyboard;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Preformatted;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Sample;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Typewriter; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Variable;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Table;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation subject;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 No List; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Simple 1; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Simple 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Simple 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 2; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Colorful 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Colorful 2; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Colorful 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 3; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 2; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 6; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 2; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 6; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table 3D effects 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table 3D effects 2; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table 3D effects 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Contemporary;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Elegant;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Professional; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Subtle 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Subtle 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Web 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Web 2; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Web 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Balloon Text;\lsdpriority39 \lsdlocked0 Table Grid;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Theme;\lsdsemihidden1 \lsdlocked0 Placeholder Text; -\lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdpriority60 \lsdlocked0 Light Shading;\lsdpriority61 \lsdlocked0 Light List;\lsdpriority62 \lsdlocked0 Light Grid;\lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdpriority64 \lsdlocked0 Medium Shading 2; -\lsdpriority65 \lsdlocked0 Medium List 1;\lsdpriority66 \lsdlocked0 Medium List 2;\lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdpriority68 \lsdlocked0 Medium Grid 2;\lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdpriority70 \lsdlocked0 Dark List; -\lsdpriority71 \lsdlocked0 Colorful Shading;\lsdpriority72 \lsdlocked0 Colorful List;\lsdpriority73 \lsdlocked0 Colorful Grid;\lsdpriority60 \lsdlocked0 Light Shading Accent 1;\lsdpriority61 \lsdlocked0 Light List Accent 1; -\lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdsemihidden1 \lsdlocked0 Revision; -\lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1; -\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;\lsdpriority72 \lsdlocked0 Colorful List Accent 1; -\lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2; -\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2; -\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 2; -\lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3; -\lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3; -\lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdpriority60 \lsdlocked0 Light Shading Accent 4; -\lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdpriority62 \lsdlocked0 Light Grid Accent 4;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 4; -\lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdpriority70 \lsdlocked0 Dark List Accent 4; -\lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;\lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdpriority61 \lsdlocked0 Light List Accent 5; -\lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Variable;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation subject;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 No List;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 1; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Balloon Text;\lsdpriority39 \lsdlocked0 Table Grid; +\lsdsemihidden1 \lsdlocked0 Placeholder Text;\lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdpriority60 \lsdlocked0 Light Shading;\lsdpriority61 \lsdlocked0 Light List;\lsdpriority62 \lsdlocked0 Light Grid; +\lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdpriority65 \lsdlocked0 Medium List 1;\lsdpriority66 \lsdlocked0 Medium List 2;\lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdpriority68 \lsdlocked0 Medium Grid 2; +\lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdpriority70 \lsdlocked0 Dark List;\lsdpriority71 \lsdlocked0 Colorful Shading;\lsdpriority72 \lsdlocked0 Colorful List;\lsdpriority73 \lsdlocked0 Colorful Grid;\lsdpriority60 \lsdlocked0 Light Shading Accent 1; +\lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 1; +\lsdsemihidden1 \lsdlocked0 Revision;\lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 1; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 1; +\lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdpriority62 \lsdlocked0 Light Grid Accent 2; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 2; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 2; +\lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdpriority62 \lsdlocked0 Light Grid Accent 3; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 3; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 3; +\lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdpriority62 \lsdlocked0 Light Grid Accent 4; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 4; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; +\lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdpriority62 \lsdlocked0 Light Grid Accent 5; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 5; \lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdpriority62 \lsdlocked0 Light Grid Accent 6; \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 6; @@ -204,8 +196,8 @@ fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e500000000000000000000000000c2 -a4f9a192d201feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e5000000000000000000000000f0dd +2ce26d57d401feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file From d2272a0c6766f8dff84730eadea5aeb9b002876b Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Tue, 6 Nov 2018 23:05:49 +0100 Subject: [PATCH 111/143] #25 Power of 2 replaced by a shift --- sources/common/inc/ISignal.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/sources/common/inc/ISignal.h b/sources/common/inc/ISignal.h index d596a8c..f393177 100644 --- a/sources/common/inc/ISignal.h +++ b/sources/common/inc/ISignal.h @@ -33,8 +33,6 @@ #include "Signal.h" #include "VcdException.h" -#include - namespace SIGNAL { /// The class inherits from the Signal class and handles the integer @@ -61,7 +59,7 @@ namespace SIGNAL Signal(name, size, rTimestamp, "wire", sourceHandle), m_Value(value) { - if (value >= std::pow(2, size)) + if (value >= (static_cast(1) << size)) { throw EXCEPTION::TooSmallVector(value, size); } From b2eda359a377b4c3fea18562b4845e0b9c19d324 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Tue, 6 Nov 2018 23:11:48 +0100 Subject: [PATCH 112/143] #25 Simplified min assignment --- sources/common/inc/SafeUInt.h | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/sources/common/inc/SafeUInt.h b/sources/common/inc/SafeUInt.h index 83617a4..502b297 100644 --- a/sources/common/inc/SafeUInt.h +++ b/sources/common/inc/SafeUInt.h @@ -89,18 +89,8 @@ template class SafeUInt /// Overrides the multiplication operator '*='. SafeUInt &operator*=(const SafeUInt &rhs) { - T smaller; - T larger; - if (m_Value > rhs.m_Value) - { - larger = m_Value; - smaller = rhs.m_Value; - } - else - { - larger = rhs.m_Value; - smaller = m_Value; - } + auto [smaller, larger] = std::minmax(m_Value, rhs.m_Value); + if (larger > 0) { if ((std::numeric_limits::max() / larger) < smaller) From 364932c40162edd6a6fdda93f46972fa941e78b6 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Tue, 6 Nov 2018 23:16:10 +0100 Subject: [PATCH 113/143] #25 Removed log comment --- sources/common/doc/examples/system1_time1.txt | 1 - sources/common/doc/examples/system1_time1_user.txt | 1 - 2 files changed, 2 deletions(-) diff --git a/sources/common/doc/examples/system1_time1.txt b/sources/common/doc/examples/system1_time1.txt index fe7adf0..5a5861b 100644 --- a/sources/common/doc/examples/system1_time1.txt +++ b/sources/common/doc/examples/system1_time1.txt @@ -1,4 +1,3 @@ -Press joystick pressed for more than 3 seconds to start/stop logging. #22800725 Disco.Sensors.Accelerometer.AccX -15106.000000 f #22801269 Disco.Sensors.Accelerometer.AccY -465.000000 f #22801758 Disco.Sensors.Accelerometer.AccZ 2590.000000 f diff --git a/sources/common/doc/examples/system1_time1_user.txt b/sources/common/doc/examples/system1_time1_user.txt index 71727ed..291cca9 100644 --- a/sources/common/doc/examples/system1_time1_user.txt +++ b/sources/common/doc/examples/system1_time1_user.txt @@ -1,4 +1,3 @@ -Press joystick pressed for more than 3 seconds to start/stop logging. 22:800.725 Sensors-Accelerometer.AccX -15106.000000 22:801.269 Sensors-Accelerometer.AccY -465.000000 22:801.758 Sensors-Accelerometer.AccZ 2590.000000 From 9d50315326b875cc715f1187d91b45b9317e34ff Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Tue, 6 Nov 2018 23:36:15 +0100 Subject: [PATCH 114/143] #25 Use C++17 --- .travis.yml | 4 ++-- sources/cmake/commonTarget.cmake | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 757b8a1..f0eff0f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,8 +11,8 @@ env: #COVERITY_SCAN_TOKEN - secure: "OtVLkLQ+O18ZOxFCVTotdxWwxOqE0HcCh7LEguFPpPOp5KX9JsBrRdN8Hq689AK+GnQVuYVHkRPdiduYq8CUoLppZy0AMus7muJp2bdnotwufOIZ0r9lqzau9F4HKcdg8LBjyoHq2gnJZgNsSlrma9AGJ8nKBlVCsOJU/2DB0zJ0ufUR92otRsbKlF0TFXC2SARHYL1fgjoJBtwtKyUkHcn5/85EZjUeZGVvvRIA1oqFN2ksHv2QSevSb4auZgi8Gz4LdkQFfWa+SYDoguMYDZCkJRg4kP/ciuAxWfulroXUyAHOGvg29AwkK7hpnFCiGCxm+mOoDousBrJymuqdblwyTzy3d84i1QZQWEAaSROuPA/cpmSPHBvx+H/YTkmdPKXp46728I1wSILOclN1icWll9KhuiDMGY48e2Zmux5SKuLTjg1wzFNrVEwLeiGT7kExWXeKdPMRo/xmH2vPDlBUVrl2z12RRinpGLW0lgG70f5EJl0K30ArNXmFfFZ775nUBokc9nVgK/bjA9t2olRlOC3tzkhgZnDYp7N/AudKeOnpsWeZEQjf9p/o7SjvMvqgbGXL6kZ74n8Jkau1nKIB+9viplLpBInxEYyMSZ/9qFZf3roYmBVYRA8v6G6PsFagYnqp4vl1zGjiO49KEW1jEF56gWKRYuYHQOaebsI=" #Compilers - - CC=gcc-6 - - CXX=g++-6 + - CC=gcc-9 + - CXX=g++-9 #Disable the default Travis submodule behavior. git: diff --git a/sources/cmake/commonTarget.cmake b/sources/cmake/commonTarget.cmake index 17385a2..81d9a12 100644 --- a/sources/cmake/commonTarget.cmake +++ b/sources/cmake/commonTarget.cmake @@ -31,8 +31,8 @@ set(COMMON_LIB_TARGET vcdToolsCommon) # Function for setting general target properties. function(add_common_vcdtools_target_props TARGET_NAME) - # Set C++14 support. - set_target_properties(${TARGET_NAME} PROPERTIES CXX_STANDARD 14) + # Set C++17 support. + set_target_properties(${TARGET_NAME} PROPERTIES CXX_STANDARD 17) set_target_properties(${TARGET_NAME} PROPERTIES CXX_EXTENSIONS OFF) set_target_properties(${TARGET_NAME} PROPERTIES CXX_STANDARD_REQUIRED ON) From 42c2fb86339cbf803199ee64202079dde77c0c81 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Tue, 6 Nov 2018 23:42:34 +0100 Subject: [PATCH 115/143] #25 Install g++-9 --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index f0eff0f..b385372 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,8 +23,8 @@ addons: sources: - ubuntu-toolchain-r-test packages: - - gcc-6 - - g++-6 + - gcc-9 + - g++-9 - txt2man - doxygen - graphviz @@ -35,7 +35,7 @@ addons: version: v3.0 description: Coverity Scan by Travis CI notification_email: vcdmaker@mail.com - build_command_prepend: "cov-configure --comptype gcc --compiler g++-6 --template && cmake -DUSE_STATIC_PUGIXML=ON -DCMAKE_BUILD_TYPE=Release ." + build_command_prepend: "cov-configure --comptype gcc --compiler g++-9 --template && cmake -DUSE_STATIC_PUGIXML=ON -DCMAKE_BUILD_TYPE=Release ." build_command: "make" branch_pattern: coverity_scan From 2c5539cfeeb6bf0bbd3e5ba21da1779f555b5df5 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Tue, 6 Nov 2018 23:46:59 +0100 Subject: [PATCH 116/143] #25 Install g++-8 --- .travis.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index b385372..5ae6179 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,8 +11,8 @@ env: #COVERITY_SCAN_TOKEN - secure: "OtVLkLQ+O18ZOxFCVTotdxWwxOqE0HcCh7LEguFPpPOp5KX9JsBrRdN8Hq689AK+GnQVuYVHkRPdiduYq8CUoLppZy0AMus7muJp2bdnotwufOIZ0r9lqzau9F4HKcdg8LBjyoHq2gnJZgNsSlrma9AGJ8nKBlVCsOJU/2DB0zJ0ufUR92otRsbKlF0TFXC2SARHYL1fgjoJBtwtKyUkHcn5/85EZjUeZGVvvRIA1oqFN2ksHv2QSevSb4auZgi8Gz4LdkQFfWa+SYDoguMYDZCkJRg4kP/ciuAxWfulroXUyAHOGvg29AwkK7hpnFCiGCxm+mOoDousBrJymuqdblwyTzy3d84i1QZQWEAaSROuPA/cpmSPHBvx+H/YTkmdPKXp46728I1wSILOclN1icWll9KhuiDMGY48e2Zmux5SKuLTjg1wzFNrVEwLeiGT7kExWXeKdPMRo/xmH2vPDlBUVrl2z12RRinpGLW0lgG70f5EJl0K30ArNXmFfFZ775nUBokc9nVgK/bjA9t2olRlOC3tzkhgZnDYp7N/AudKeOnpsWeZEQjf9p/o7SjvMvqgbGXL6kZ74n8Jkau1nKIB+9viplLpBInxEYyMSZ/9qFZf3roYmBVYRA8v6G6PsFagYnqp4vl1zGjiO49KEW1jEF56gWKRYuYHQOaebsI=" #Compilers - - CC=gcc-9 - - CXX=g++-9 + - CC=gcc-8 + - CXX=g++-8 #Disable the default Travis submodule behavior. git: @@ -23,8 +23,8 @@ addons: sources: - ubuntu-toolchain-r-test packages: - - gcc-9 - - g++-9 + - gcc-8 + - g++-8 - txt2man - doxygen - graphviz @@ -35,7 +35,7 @@ addons: version: v3.0 description: Coverity Scan by Travis CI notification_email: vcdmaker@mail.com - build_command_prepend: "cov-configure --comptype gcc --compiler g++-9 --template && cmake -DUSE_STATIC_PUGIXML=ON -DCMAKE_BUILD_TYPE=Release ." + build_command_prepend: "cov-configure --comptype gcc --compiler g++-8 --template && cmake -DUSE_STATIC_PUGIXML=ON -DCMAKE_BUILD_TYPE=Release ." build_command: "make" branch_pattern: coverity_scan From 86119675516c6a90eb6f8d01bb7078a908454293 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Wed, 7 Nov 2018 08:34:57 +0100 Subject: [PATCH 117/143] #25 Fixes --- sources/common/inc/SafeUInt.h | 1 + sources/common/inc/Signal.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/sources/common/inc/SafeUInt.h b/sources/common/inc/SafeUInt.h index 502b297..663be67 100644 --- a/sources/common/inc/SafeUInt.h +++ b/sources/common/inc/SafeUInt.h @@ -41,6 +41,7 @@ #include #include #include +#include /// A safe unsigned integer class. /// The overridden arthmetic operators throw exceptions on the overflow. diff --git a/sources/common/inc/Signal.h b/sources/common/inc/Signal.h index acbc78a..e2673cc 100644 --- a/sources/common/inc/Signal.h +++ b/sources/common/inc/Signal.h @@ -226,7 +226,7 @@ namespace SIGNAL { public: /// Checks if one signal's timestamp is lower than other signal's timestamp. - bool operator()(const Signal *lhs, const Signal *rhs) + bool operator()(const Signal *lhs, const Signal *rhs) const { return (lhs->GetTimestamp() < rhs->GetTimestamp()); } From 547a17bceb25dffce0463d360acab089922ed1af Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Wed, 7 Nov 2018 09:28:29 +0100 Subject: [PATCH 118/143] #25 Use std::pow() --- sources/common/inc/ISignal.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sources/common/inc/ISignal.h b/sources/common/inc/ISignal.h index f393177..d596a8c 100644 --- a/sources/common/inc/ISignal.h +++ b/sources/common/inc/ISignal.h @@ -33,6 +33,8 @@ #include "Signal.h" #include "VcdException.h" +#include + namespace SIGNAL { /// The class inherits from the Signal class and handles the integer @@ -59,7 +61,7 @@ namespace SIGNAL Signal(name, size, rTimestamp, "wire", sourceHandle), m_Value(value) { - if (value >= (static_cast(1) << size)) + if (value >= std::pow(2, size)) { throw EXCEPTION::TooSmallVector(value, size); } From 66f2ad0eba3139772578ff091d6c56b6dbb57669 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Wed, 7 Nov 2018 10:00:04 +0100 Subject: [PATCH 119/143] #25 Use std::uncaught_exceptions() --- sources/common/src/TxtParser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/common/src/TxtParser.cpp b/sources/common/src/TxtParser.cpp index 3ac7baa..22e3e1a 100644 --- a/sources/common/src/TxtParser.cpp +++ b/sources/common/src/TxtParser.cpp @@ -46,7 +46,7 @@ PARSER::TxtParser::TxtParser(const std::string &rFilename, PARSER::TxtParser::~TxtParser() { - if (!std::uncaught_exception()) + if (0 == std::uncaught_exceptions()) { // Print the summary. std::cout << '\n' << "Parsed " << m_FileName << ": \n"; From c385b2f96ec28290608094674dfd6a18e2c8db9f Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Thu, 8 Nov 2018 12:34:19 +0100 Subject: [PATCH 120/143] #25 Use SourceRegistry handle --- sources/common/inc/SignalFactory.h | 4 +++- sources/common/src/SignalFactory.cpp | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/sources/common/inc/SignalFactory.h b/sources/common/inc/SignalFactory.h index 745ff9a..86f0c39 100644 --- a/sources/common/inc/SignalFactory.h +++ b/sources/common/inc/SignalFactory.h @@ -71,7 +71,9 @@ namespace PARSER /// @param sourceHandle The handle to the log source. /// @param lineNumber The log line number. /// @param logLine The log line. - std::string GetLogLineInfo(uint32_t sourceHandle, size_t lineNumber, const std::string& logLine) const; + std::string GetLogLineInfo(SIGNAL::SourceRegistry::HandleT sourceHandle, + size_t lineNumber, + const std::string& logLine) const; }; } diff --git a/sources/common/src/SignalFactory.cpp b/sources/common/src/SignalFactory.cpp index 272141f..a119f9c 100644 --- a/sources/common/src/SignalFactory.cpp +++ b/sources/common/src/SignalFactory.cpp @@ -94,7 +94,8 @@ std::vector PARSER::SignalFactory::Create(std::string &lo return vpSignals; } -std::string PARSER::SignalFactory::GetLogLineInfo(uint32_t sourceHandle, size_t lineNumber, +std::string PARSER::SignalFactory::GetLogLineInfo(SIGNAL::SourceRegistry::HandleT sourceHandle, + size_t lineNumber, const std::string &logLine) const { return "Evaluating " + SIGNAL::SourceRegistry::GetInstance().GetSourceName(sourceHandle) + ".\n" + From b42373f8540fee63b8eda30a3444f511db319486 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Sun, 11 Nov 2018 23:05:45 +0100 Subject: [PATCH 121/143] #25 Move large inline methods to cpp --- sources/cmake/parserSources.cmake | 3 +- sources/parsers/inc/DecimalNode.h | 94 +------------ sources/parsers/inc/FloatNode.h | 104 +------------- sources/parsers/src/DecimalNode.cpp | 124 ++++++++++++++++ sources/parsers/src/FloatNode.cpp | 133 ++++++++++++++++++ windows/vcdMaker/vcdMaker/vcdMaker.vcxproj | 1 + .../vcdMakerCore/vcdMakerCore.vcxproj | 1 + .../vcdMakerParsers/vcdMakerParsers.vcxproj | 3 + .../vcdMakerParsers.vcxproj.filters | 6 + windows/vcdMaker/vcdMerge/vcdMerge.vcxproj | 1 + 10 files changed, 283 insertions(+), 187 deletions(-) create mode 100644 sources/parsers/src/DecimalNode.cpp create mode 100644 sources/parsers/src/FloatNode.cpp diff --git a/sources/cmake/parserSources.cmake b/sources/cmake/parserSources.cmake index ac62382..1d820d8 100644 --- a/sources/cmake/parserSources.cmake +++ b/sources/cmake/parserSources.cmake @@ -28,7 +28,8 @@ set(PARSER_GEN_SOURCES_DIR parsers/auto) set(PARSER_SOURCES ${PARSER_SOURCES_DIR}/Evaluator.cpp - + ${PARSER_SOURCES_DIR}/DecimalNode.cpp + ${PARSER_SOURCES_DIR}/FloatNode.cpp ${PARSER_GEN_SOURCES_DIR}/FloatParser.cpp ${PARSER_GEN_SOURCES_DIR}/FloatScanner.cpp ${PARSER_GEN_SOURCES_DIR}/DecimalScanner.cpp diff --git a/sources/parsers/inc/DecimalNode.h b/sources/parsers/inc/DecimalNode.h index 6724c14..d7351dc 100644 --- a/sources/parsers/inc/DecimalNode.h +++ b/sources/parsers/inc/DecimalNode.h @@ -81,29 +81,7 @@ namespace PARSER } /// @copydoc ExpressionNode::EvaluateUint() - virtual SafeUInt EvaluateUint() const - { - SafeUInt value = 0; - std::string stringValue(m_rContext.GetElement(m_Index)); - try - { - value = std::stoll(stringValue.c_str(), nullptr, 10); - } - catch (const std::out_of_range &) - { - throw EXCEPTIONS::Overflow("Out of range decimal value: " + stringValue); - } - catch (const std::invalid_argument &) - { - if (IsStringEmpty(stringValue)) - { - throw EXCEPTIONS::EmptyString(); - } - throw EXCEPTIONS::ConversionError("Cannot convert to decimal: " + stringValue); - } - - return value; - } + virtual SafeUInt EvaluateUint() const; }; /// The class represents the constant node type based on a hexadecimal string. @@ -127,29 +105,7 @@ namespace PARSER } /// @copydoc ExpressionNode::EvaluateUint() - virtual SafeUInt EvaluateUint() const - { - SafeUInt value = 0; - std::string stringValue(m_rContext.GetElement(m_Index)); - try - { - value = std::stoll(stringValue.c_str(), nullptr, 16); - } - catch (const std::out_of_range &) - { - throw EXCEPTIONS::Overflow("Out of range decimal value: " + stringValue); - } - catch (const std::invalid_argument &) - { - if (IsStringEmpty(stringValue)) - { - throw EXCEPTIONS::EmptyString(); - } - throw EXCEPTIONS::ConversionError("Cannot convert to hex: " + stringValue); - } - - return value; - } + virtual SafeUInt EvaluateUint() const; }; /// The class represents the constant type of nodes based on a log line number. @@ -200,17 +156,7 @@ namespace PARSER } /// @copydoc ExpressionNode::EvaluateUint() - virtual SafeUInt EvaluateUint() const - { - try - { - return m_pLeft->EvaluateUint() + m_pRight->EvaluateUint(); - } - catch (const std::out_of_range &) - { - throw EXCEPTIONS::Overflow("Overflow while adding."); - } - } + virtual SafeUInt EvaluateUint() const; }; /// The class represents the subtraction node type. @@ -241,17 +187,7 @@ namespace PARSER } /// @copydoc ExpressionNode::EvaluateUint() - virtual SafeUInt EvaluateUint() const - { - try - { - return m_pLeft->EvaluateUint() - m_pRight->EvaluateUint(); - } - catch (const std::out_of_range &) - { - throw EXCEPTIONS::Overflow("Underflow while substracting."); - } - } + virtual SafeUInt EvaluateUint() const; }; /// The class represents the multiplication node type. @@ -282,17 +218,7 @@ namespace PARSER } /// @copydoc ExpressionNode::EvaluateUint() - virtual SafeUInt EvaluateUint() const - { - try - { - return m_pLeft->EvaluateUint() * m_pRight->EvaluateUint(); - } - catch (const std::out_of_range &) - { - throw EXCEPTIONS::Overflow("Overflow while multiplying."); - } - } + virtual SafeUInt EvaluateUint() const; }; /// The class represents the division node type. @@ -323,14 +249,6 @@ namespace PARSER } /// @copydoc ExpressionNode::EvaluateUint() - virtual SafeUInt EvaluateUint() const - { - SafeUInt rightValue = m_pRight->EvaluateUint(); - if (0 == rightValue.GetValue()) - { - throw EXCEPTIONS::DivByZero(""); - } - return m_pLeft->EvaluateUint() / rightValue; - } + virtual SafeUInt EvaluateUint() const; }; } diff --git a/sources/parsers/inc/FloatNode.h b/sources/parsers/inc/FloatNode.h index 6fbc9c8..8f11c4a 100644 --- a/sources/parsers/inc/FloatNode.h +++ b/sources/parsers/inc/FloatNode.h @@ -82,29 +82,7 @@ namespace PARSER } /// @copydoc ExpressionNode::EvaluateDouble() - virtual std::tuple EvaluateDouble() const - { - double value = 0; - std::string stringValue(m_rContext.GetElement(m_Index)); - try - { - value = std::stod(stringValue, nullptr); - } - catch (const std::invalid_argument &) - { - if (IsStringEmpty(stringValue)) - { - throw EXCEPTIONS::EmptyString(); - } - throw EXCEPTIONS::ConversionError("Cannot convert to double: " + stringValue); - } - catch (const std::out_of_range &) - { - throw EXCEPTIONS::Overflow("Out of range double value: " + stringValue); - } - - return std::make_tuple(value, stringValue); - } + virtual std::tuple EvaluateDouble() const; }; /// The class represents the negate node type. @@ -130,13 +108,7 @@ namespace PARSER } /// @copydoc ExpressionNode::EvaluateDouble() - virtual std::tuple EvaluateDouble() const - { - double value; - std::string stringValue; - std::tie(value, stringValue) = m_pNode->EvaluateDouble(); - return std::make_tuple(-value, ""); - } + virtual std::tuple EvaluateDouble() const; }; /// The class represents the addition node type. @@ -167,23 +139,7 @@ namespace PARSER } /// @copydoc ExpressionNode::EvaluateDouble() - virtual std::tuple EvaluateDouble() const - { - double leftValue; - std::string leftStringValue; - std::tie(leftValue, leftStringValue) = m_pLeft->EvaluateDouble(); - - double rightValue; - std::string rightStringValue; - std::tie(rightValue, rightStringValue) = m_pRight->EvaluateDouble(); - - if ((std::numeric_limits::max() - leftValue) < rightValue) - { - throw EXCEPTIONS::Overflow("Overflow while adding."); - } - - return std::make_tuple(leftValue + rightValue, ""); - } + virtual std::tuple EvaluateDouble() const; }; /// The class represents the subtraction node type. @@ -214,23 +170,7 @@ namespace PARSER } /// @copydoc ExpressionNode::EvaluateDouble() - virtual std::tuple EvaluateDouble() const - { - double leftValue; - std::string leftStringValue; - std::tie(leftValue, leftStringValue) = m_pLeft->EvaluateDouble(); - - double rightValue; - std::string rightStringValue; - std::tie(rightValue, rightStringValue) = m_pRight->EvaluateDouble(); - - if ((std::numeric_limits::min() + rightValue) > leftValue) - { - throw EXCEPTIONS::Overflow("Underflow while substracting."); - } - - return std::make_tuple(leftValue - rightValue, ""); - } + virtual std::tuple EvaluateDouble() const; }; /// The class represents the multiplication node type. @@ -261,23 +201,7 @@ namespace PARSER } /// @copydoc ExpressionNode::EvaluateDouble() - virtual std::tuple EvaluateDouble() const - { - double leftValue; - std::string leftStringValue; - std::tie(leftValue, leftStringValue) = m_pLeft->EvaluateDouble(); - - double rightValue; - std::string rightStringValue; - std::tie(rightValue, rightStringValue) = m_pRight->EvaluateDouble(); - - if ((std::numeric_limits::max() / leftValue) < rightValue) - { - throw EXCEPTIONS::Overflow("Overflow while multiplying."); - } - - return std::make_tuple(leftValue * rightValue, ""); - } + virtual std::tuple EvaluateDouble() const; }; /// The class represents the division node type. @@ -308,22 +232,6 @@ namespace PARSER } /// @copydoc ExpressionNode::EvaluateDouble() - virtual std::tuple EvaluateDouble() const - { - double leftValue; - std::string leftStringValue; - std::tie(leftValue, leftStringValue) = m_pLeft->EvaluateDouble(); - - double rightValue; - std::string rightStringValue; - std::tie(rightValue, rightStringValue) = m_pRight->EvaluateDouble(); - - if (0 == rightValue) - { - throw EXCEPTIONS::DivByZero(""); - } - - return std::make_tuple(leftValue / rightValue, ""); - } + virtual std::tuple EvaluateDouble() const; }; } diff --git a/sources/parsers/src/DecimalNode.cpp b/sources/parsers/src/DecimalNode.cpp new file mode 100644 index 0000000..f9b99f5 --- /dev/null +++ b/sources/parsers/src/DecimalNode.cpp @@ -0,0 +1,124 @@ +/// @file parsers/src/DecimalNode.cpp +/// +/// A set of classes for evaluating decimal nodes. +/// +/// @par Full Description +/// A set of classes for evaluating decimal nodes. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2018 vcdMaker team +/// +/// 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 "DecimalNode.h" + +SafeUInt PARSER::DNDec::EvaluateUint() const +{ + SafeUInt value = 0; + std::string stringValue(m_rContext.GetElement(m_Index)); + try + { + value = std::stoll(stringValue.c_str(), nullptr, 10); + } + catch (const std::out_of_range &) + { + throw EXCEPTIONS::Overflow("Out of range decimal value: " + stringValue); + } + catch (const std::invalid_argument &) + { + if (IsStringEmpty(stringValue)) + { + throw EXCEPTIONS::EmptyString(); + } + throw EXCEPTIONS::ConversionError("Cannot convert to decimal: " + stringValue); + } + + return value; +} + +SafeUInt PARSER::DNHex::EvaluateUint() const +{ + SafeUInt value = 0; + std::string stringValue(m_rContext.GetElement(m_Index)); + try + { + value = std::stoll(stringValue.c_str(), nullptr, 16); + } + catch (const std::out_of_range &) + { + throw EXCEPTIONS::Overflow("Out of range decimal value: " + stringValue); + } + catch (const std::invalid_argument &) + { + if (IsStringEmpty(stringValue)) + { + throw EXCEPTIONS::EmptyString(); + } + throw EXCEPTIONS::ConversionError("Cannot convert to hex: " + stringValue); + } + + return value; +} + +SafeUInt PARSER::DNAdd::EvaluateUint() const +{ + try + { + return m_pLeft->EvaluateUint() + m_pRight->EvaluateUint(); + } + catch (const std::out_of_range &) + { + throw EXCEPTIONS::Overflow("Overflow while adding."); + } +} + +SafeUInt PARSER::DNSubtract::EvaluateUint() const +{ + try + { + return m_pLeft->EvaluateUint() - m_pRight->EvaluateUint(); + } + catch (const std::out_of_range &) + { + throw EXCEPTIONS::Overflow("Underflow while substracting."); + } +} + +SafeUInt PARSER::DNMultiply::EvaluateUint() const +{ + try + { + return m_pLeft->EvaluateUint() * m_pRight->EvaluateUint(); + } + catch (const std::out_of_range &) + { + throw EXCEPTIONS::Overflow("Overflow while multiplying."); + } +} + +SafeUInt PARSER::DNDivide::EvaluateUint() const +{ + SafeUInt rightValue = m_pRight->EvaluateUint(); + if (0 == rightValue.GetValue()) + { + throw EXCEPTIONS::DivByZero(""); + } + return m_pLeft->EvaluateUint() / rightValue; +} diff --git a/sources/parsers/src/FloatNode.cpp b/sources/parsers/src/FloatNode.cpp new file mode 100644 index 0000000..ffb306f --- /dev/null +++ b/sources/parsers/src/FloatNode.cpp @@ -0,0 +1,133 @@ +/// @file parsers/src/FloatNode.cpp +/// +/// A set of classes for evaluating float nodes. +/// +/// @par Full Description +/// A set of classes for evaluating float nodes. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2018 vcdMaker team +/// +/// 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 "FloatNode.h" + +std::tuple PARSER::FNFlt::EvaluateDouble() const +{ + double value = 0; + std::string stringValue(m_rContext.GetElement(m_Index)); + try + { + value = std::stod(stringValue, nullptr); + } + catch (const std::invalid_argument &) + { + if (IsStringEmpty(stringValue)) + { + throw EXCEPTIONS::EmptyString(); + } + throw EXCEPTIONS::ConversionError("Cannot convert to double: " + stringValue); + } + catch (const std::out_of_range &) + { + throw EXCEPTIONS::Overflow("Out of range double value: " + stringValue); + } + + return std::make_tuple(value, stringValue); +} + +std::tuple PARSER::FNNegate::EvaluateDouble() const +{ + double value; + std::string stringValue; + std::tie(value, stringValue) = m_pNode->EvaluateDouble(); + return std::make_tuple(-value, ""); +} + +std::tuple PARSER::FNAdd::EvaluateDouble() const +{ + double leftValue; + std::string leftStringValue; + std::tie(leftValue, leftStringValue) = m_pLeft->EvaluateDouble(); + + double rightValue; + std::string rightStringValue; + std::tie(rightValue, rightStringValue) = m_pRight->EvaluateDouble(); + + if ((std::numeric_limits::max() - leftValue) < rightValue) + { + throw EXCEPTIONS::Overflow("Overflow while adding."); + } + + return std::make_tuple(leftValue + rightValue, ""); +} + +std::tuple PARSER::FNSubtract::EvaluateDouble() const +{ + double leftValue; + std::string leftStringValue; + std::tie(leftValue, leftStringValue) = m_pLeft->EvaluateDouble(); + + double rightValue; + std::string rightStringValue; + std::tie(rightValue, rightStringValue) = m_pRight->EvaluateDouble(); + + if ((std::numeric_limits::min() + rightValue) > leftValue) + { + throw EXCEPTIONS::Overflow("Underflow while substracting."); + } + + return std::make_tuple(leftValue - rightValue, ""); +} +std::tuple PARSER::FNMultiply::EvaluateDouble() const +{ + double leftValue; + std::string leftStringValue; + std::tie(leftValue, leftStringValue) = m_pLeft->EvaluateDouble(); + + double rightValue; + std::string rightStringValue; + std::tie(rightValue, rightStringValue) = m_pRight->EvaluateDouble(); + + if ((std::numeric_limits::max() / leftValue) < rightValue) + { + throw EXCEPTIONS::Overflow("Overflow while multiplying."); + } + + return std::make_tuple(leftValue * rightValue, ""); +} + +std::tuple PARSER::FNDivide::EvaluateDouble() const +{ + double leftValue; + std::string leftStringValue; + std::tie(leftValue, leftStringValue) = m_pLeft->EvaluateDouble(); + + double rightValue; + std::string rightStringValue; + std::tie(rightValue, rightStringValue) = m_pRight->EvaluateDouble(); + + if (0 == rightValue) + { + throw EXCEPTIONS::DivByZero(""); + } + + return std::make_tuple(leftValue / rightValue, ""); +} diff --git a/windows/vcdMaker/vcdMaker/vcdMaker.vcxproj b/windows/vcdMaker/vcdMaker/vcdMaker.vcxproj index b6ff0bf..16bc008 100644 --- a/windows/vcdMaker/vcdMaker/vcdMaker.vcxproj +++ b/windows/vcdMaker/vcdMaker/vcdMaker.vcxproj @@ -54,6 +54,7 @@ WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true $(ProjectDir)..\..\..\sources\common\inc;$(ProjectDir)..\..\..\sources\vcdMaker\inc;$(ProjectDir)..\..\..\sources\3rdParty\tclap\include;$(ProjectDir)..\..\..\sources\3rdParty\pugixml\src;%(AdditionalIncludeDirectories) + stdcpplatest Console diff --git a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj index 966256e..1070cd8 100644 --- a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj +++ b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj @@ -84,6 +84,7 @@ WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) true $(ProjectDir)..\..\..\sources\common\inc;$(ProjectDir)..\..\..\sources\parsers\inc;$(ProjectDir)..\..\..\sources\3rdParty\tclap\include;$(ProjectDir)..\..\..\sources\3rdParty\pugixml\src;%(AdditionalIncludeDirectories) + stdcpplatest Windows diff --git a/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj b/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj index 6d015de..0836b4a 100644 --- a/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj +++ b/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj @@ -77,6 +77,7 @@ true true $(ProjectDir)..\..\..\sources\parsers\auto;$(ProjectDir)..\..\..\sources\parsers\inc;$(ProjectDir)..\..\..\sources\common\inc;%(AdditionalIncludeDirectories) + stdcpplatest @@ -123,7 +124,9 @@ + + diff --git a/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj.filters b/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj.filters index 096dbaa..5d8d85b 100644 --- a/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj.filters +++ b/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj.filters @@ -35,6 +35,12 @@ Auto + + Source Files + + + Source Files + diff --git a/windows/vcdMaker/vcdMerge/vcdMerge.vcxproj b/windows/vcdMaker/vcdMerge/vcdMerge.vcxproj index cf47a82..bc1cf99 100644 --- a/windows/vcdMaker/vcdMerge/vcdMerge.vcxproj +++ b/windows/vcdMaker/vcdMerge/vcdMerge.vcxproj @@ -54,6 +54,7 @@ WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true $(ProjectDir)..\..\..\sources\common\inc;$(ProjectDir)..\..\..\sources\vcdMerge\inc;$(ProjectDir)..\..\..\sources\3rdParty\tclap\include;$(ProjectDir)..\..\..\sources\3rdParty\pugixml\src;%(AdditionalIncludeDirectories) + stdcpplatest Console From 173a2939a6f535639d5b523d32bd45a9d22064a5 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Wed, 14 Nov 2018 20:02:09 +0100 Subject: [PATCH 122/143] #25 Use latest C++ for release --- windows/vcdMaker/vcdMaker/vcdMaker.vcxproj | 1 + windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj | 1 + windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj | 1 + windows/vcdMaker/vcdMerge/vcdMerge.vcxproj | 1 + 4 files changed, 4 insertions(+) diff --git a/windows/vcdMaker/vcdMaker/vcdMaker.vcxproj b/windows/vcdMaker/vcdMaker/vcdMaker.vcxproj index 16bc008..e309e80 100644 --- a/windows/vcdMaker/vcdMaker/vcdMaker.vcxproj +++ b/windows/vcdMaker/vcdMaker/vcdMaker.vcxproj @@ -73,6 +73,7 @@ WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true $(ProjectDir)..\..\..\sources\common\inc;$(ProjectDir)..\..\..\sources\vcdMaker\inc;$(ProjectDir)..\..\..\sources\3rdParty\tclap\include;$(ProjectDir)..\..\..\sources\3rdParty\pugixml\src;%(AdditionalIncludeDirectories) + stdcpplatest Console diff --git a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj index 1070cd8..d96164d 100644 --- a/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj +++ b/windows/vcdMaker/vcdMakerCore/vcdMakerCore.vcxproj @@ -114,6 +114,7 @@ WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) true $(ProjectDir)..\..\..\sources\common\inc;$(ProjectDir)..\..\..\sources\parsers\inc;$(ProjectDir)..\..\..\sources\3rdParty\tclap\include;$(ProjectDir)..\..\..\sources\3rdParty\pugixml\src;%(AdditionalIncludeDirectories) + stdcpplatest Windows diff --git a/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj b/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj index 0836b4a..127d4ed 100644 --- a/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj +++ b/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj @@ -97,6 +97,7 @@ true true $(ProjectDir)..\..\..\sources\parsers\auto;$(ProjectDir)..\..\..\sources\parsers\inc;$(ProjectDir)..\..\..\sources\common\inc;%(AdditionalIncludeDirectories) + stdcpplatest true diff --git a/windows/vcdMaker/vcdMerge/vcdMerge.vcxproj b/windows/vcdMaker/vcdMerge/vcdMerge.vcxproj index bc1cf99..bc4ffb6 100644 --- a/windows/vcdMaker/vcdMerge/vcdMerge.vcxproj +++ b/windows/vcdMaker/vcdMerge/vcdMerge.vcxproj @@ -73,6 +73,7 @@ WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true $(ProjectDir)..\..\..\sources\common\inc;$(ProjectDir)..\..\..\sources\vcdMerge\inc;$(ProjectDir)..\..\..\sources\3rdParty\tclap\include;$(ProjectDir)..\..\..\sources\3rdParty\pugixml\src;%(AdditionalIncludeDirectories) + stdcpplatest Console From 1492f5b62838340afae0526a78ee46be8da2d4c0 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Wed, 14 Nov 2018 20:03:41 +0100 Subject: [PATCH 123/143] #25 Removed spaces --- sources/common/inc/XmlSignalCreator.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sources/common/inc/XmlSignalCreator.h b/sources/common/inc/XmlSignalCreator.h index f3f7a25..58aaae2 100644 --- a/sources/common/inc/XmlSignalCreator.h +++ b/sources/common/inc/XmlSignalCreator.h @@ -50,16 +50,16 @@ namespace PARSER const std::string &rTimestamp, const std::string &rName, const std::string &rValue, - const std::string &rSize) : + const std::string &rSize): SignalCreator(rRegEx), m_Timestamp(rTimestamp), m_Name(rName), m_Value(rValue), m_Size(rSize), - m_TimestampEvaluator ("XML"), - m_DecimalEvaluator ("XML"), - m_FloatEvaluator ("XML"), - m_SizeEvaluator ("XML"), + m_TimestampEvaluator("XML"), + m_DecimalEvaluator("XML"), + m_FloatEvaluator("XML"), + m_SizeEvaluator("XML"), m_NameEvaluator("XML") { m_TimestampEvaluator.ParseDecimalString(rTimestamp); From 3546782a7c86378b6659264082b4231b74968e37 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Wed, 14 Nov 2018 20:10:16 +0100 Subject: [PATCH 124/143] #25 Empty string exception --- sources/common/doc/manual.odt | Bin 560287 -> 560334 bytes sources/common/doc/manual.pdf | Bin 866423 -> 866607 bytes sources/common/src/SignalFactory.cpp | 4 ---- sources/parsers/inc/EvaluatorExceptions.h | 27 +++++++++++----------- sources/parsers/inc/ExpressionNode.h | 11 --------- sources/parsers/src/DecimalNode.cpp | 12 ++-------- sources/parsers/src/FloatNode.cpp | 6 +---- 7 files changed, 17 insertions(+), 43 deletions(-) diff --git a/sources/common/doc/manual.odt b/sources/common/doc/manual.odt index 522d7a50828004257d3f8331d71259fc2ebd261f..f7ba0fee2f94a901997e13445aa2a85fe3083ad6 100644 GIT binary patch delta 24412 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

)eEtFYm$>&VnbfT-&|mRa|37)MWdZv=ej9q zwj0>a27lPXD#A(G@6xFgi+ek!*B&aHMtsY0rkcRKYdgO1A?mRZ@!LQWgv{O<#<3At(7-?_e`EzkE~g_B0gZ8x%%oKr((q)jCF;0Q57^jzRh ze0Mx=3n`pW^M)`dr?qe-_U2dYOu-rj+zHD{BCu9!gnrtjivhQBLy~!44P+&T(+Btw zS>#1_ztg;=eMjbM>PQ9lpcpzTuC|{_@!&6wv@{-Xh2JN!rzzcdhts^0rTrhF|yRg5LH567Y#~?d8)^SYiC!u3H1Qmm_^Y ze~xyP`m}g?>j8_%N+j#fjGNKJ;R*0I#N<$D!Wsre9i{UhKI^;uAZ|_|*za?DZ5~to>tP z#&_+%#y2oiDa>ZMjxJWcN@SfKc~y1}Q9TR5FbtMIz+9~fj7r+Usvr{xIp@?K|9IHG z%e!RMCtiu2+{2TKy)==w(DCq@(<4gRTMU>x)O8a9SDG7ut0?dNY((4Z3fku={dcmONlBoP~v?3en~5BK}hau)L&INctfjTR4&eV#OcHVnl; zD^QRI^gURG-JI+1*){hEsYe%YtGx$=5B@!_$n~CKzK*_aRQ8r4s^#eer#~>*&0|Qc zVgeC<*;gT~f7qNORM?=H^WEUN&F-Y?`l`IB({K8XfaXsl?nker^nf$MRcGi$dK=TW zepiHNC2l)b^Q{AO21QqW^rO;e3 z%-~jHh_MBO+eL-Nu_Bw>g)qQGr(UQGpIp&)@Vb^D0|D%v=W`QO+|SROE&vgXXtz_-h`mkh)O!~%fKq~ zlEEH}P)$dspig*wBN;-j_I1RSkS~?6`r^`Z+!C^R32tq<&`&mNq0 zQKLIvkGt0tn%^R*LKX;RIgAs4kQmjVw)E?2Pi!6_$53Sx%0WBYE&1BPJ`@wc?|g8B zU6JgBMVb^ScXcl*R?UNh7iLRO)TuoplrXgAcXGs}aVU9Vq?OGbb z3+8&B*-WMqZl>RM%nrs|H}P=&X(Ax9B~b1>4AiIc3(~y13zkq$D-m{f1c`ID-rX-x z2POLAmpQ%^ULWw2SmXHgWR&vE2s72nK47(s%7Py2HXdTh_C8F^ahlz3DeX&RX_NM+ zGPGt&oz8p>_Vko1+JG2z!PwsHSRP|N4u9uX*$bj}d#8&Hv^CuBEetTvWyr>YN?2)L zfedvK!io7fxN*?tP?@hyDWn5k2(otpaGn^;>brz~&;f^e0yOUKi;D}as;_E}?qO*6 zrq^wq?vFp|)G|A5ebj@;{*b4YDQkVLD_gIB%J_K$@%vJ>8K@2O5%k$oY>mMZ_z}n> zxQUJJaj>Iaym2JGdnjnzrdYh;Cv%}@R-&iX#>tRVV?4OZo#+Pyd{146*J?c)V{dv| z?17%g8vp{G*Yg@9kp;I=5_CpjchlwjqO8Y{f}flsH^(4lP5vgeGsFjkD=!;Ux#^-w zI^dQf-B89_yezN;TI&u3Hv!%LED8Du^$=;X@Tb8u-$gK3O-@PecV?nRDY$|PTyH0l zT7EH`5j$uf`h$_%-(R4sl8|uWb=#eKtor|`13*vmtz+bu89NHta-}Vh(0m(-sVpzH zW5PdG#b4HPL<>2EZLYWQ+U>V++KpE|ZHtGzm3!OOka-4nUFOZkz>!ff&!XmPE&8SU z8I~ZjX=wjudGo~sfhihZ^#w{wGhNwlURagq@sYCO=y11kxs=z*{p+tYjhmy-2@{&U zzQ7Xs-_qBXSI1I^yU6UO*rmm9kY^+Xk_WZP33=T5}dZus-zIFp>uXOVn{S45r+5rUCYE4)~k*Jkk!)kZvv3)HqFQF zpQBZ(lP*66=WC5g&>E`?-znhNuolXNf`Q%zhQoUr^{$9)vSSag>ZEx>9ZgSjde+fj zA12g^6#)^e42L>qRbBY!huH@77WskC=UHd6s}Hpyjbwq`vg!57@^x^dl%2m)Rut7g z5fc6wj6pp4{*k^o^uHcfL>V0fwu!uj<6PMV%OCCD2#vcBuoJpMd@c}{Pn|E^8>;1Bk^ANITS+$=@DBumKvBUJp-z+3gO70k)vl3AXs9B~9yVx03Fz4J zFuLjlIDSs}ap=yTH+M@_^%8-x;7p)-@Z7aci-3{xm@Vv#{ieNy4amNDOtQ&{qb{ye zAyzT(G6;KWQEc9&hlmPm?x|LZHB5i@Bk@*Pre|ToVpUa z8(-xI$93l=N!5LUUp#pNyBxk(3h6?#B{6e%C*la+OV7EsIeGte@PgU@st1JlhB1_t z^;|?MGtk%Q5C?|X#R^1l8kjKcfn7=;74p_*l*Ox@N;8U5{8+PG{>?(ov)KMgvI(y< z3yO}+FtokAz-fwag4QS{6-mB(UR5v0uAe}JE+dy#uWs#0KwLMUeNNgYFE5O0&_Jq^ z%JX+|y`vD%?(Usg{s9@nG!7W=cp)Rw*=mENAeGcVipMLDVHb9|;Yy4jD7&>AWXCiR zS|TzrhZ-m`o`054bqCkrOc(cp;oSOjTNPQed&7uRujdP$c62;gPGvTBz$Tm4jKpX& zJB+`$bx@5I|$al%l1uPr-zZ!TIcGFg)lu`yb zOTP$Pm^Hm!^vmmm<B?=UJeoRLpI3(9%FAf+pU!8d0`4589sKec{HF0lo{III$bx$m^+6-n*(lESTg~@nRXmfU} zxraDN=)l{bFF^OMtO;49sD&qL9i|MlgOr+PT2Im6xE(IFrL=;8RJOA@N@LqL9!JI= zAr3-H5yCF05uR{g-4q@x@#LS{lgScVDP`@!3g0mi#&lUW^x*HIcxGky4?f=>v4&*2 z>3+SSMJBshRlHq(KAP6%_sc#u)3q-IzKHv3`p&&7 z$X4b5M;iLheKL))RHDl^gbfVuG}E;<{Kxh-^ksiz8e^`^6PhJe&ovx4;HGPf{Dxgg z7=qcJJ^Z@-u=Tn13Iy`3dVk*ck8QnH69_$Q0Zg@Zk00Q$#Lh5Z+MUY zKk!PU9_`_8F`VO`0d@+AOKo^LH2S?|Vj7Dzq0BzOJCygkFB&BTPk%I9KO6F+o4c9p;j56W(ado%p~u_dyW4Eq*`T=Yxr4(P)Z%S4{L!%1MpqZ}}*^8eON=f@}uP)+3A1kP@+t^l6- zc~no?sBJrOIX8NSg!0!UW~bnrQ{rv3Zu9}F=--Is{CARXr|vS^d>ryy(UNa}8V2F_ zO>i<`WXqGuXbH%KmRe>@i{qAl!K0|zm1NtvI#i&>>2#VC!TB6-uqN?`Aqst^2>@7* zGH1Lh&Mq%5)q!R*r`I3N^N-bwL8--4dpTaR-=>GAaYiq$o`$%c*))Y&f&%VzdevKL zRE&?P59VcdrimZPlO`RMa;q_veYj*!MHCtcr^LBlm+;*k4wtUSu7PyB;G#7+ zV%vby3cD_zq6Wbt>%h{A%5I*bHE;Pv7!|F|Ku3AkhqSUUMRi<=`)U6!*wnD(&FsjA z*cR7K%4pKY)_z5slywiQDzGLuuHp|b7{--m7=E*XW{)l1B~|&}t9sOA+IMev?x@C8 zr7kceMjyd)g;KNvi|A2-b_P@+?*5dQ$YPw4M8a>Db-yQe)Iq6D}uYZbpg%HeesEdKpp}(e-fnAFYGT zYya7%d{|~KR(b!-bj9+tsD9~d2x^xNZ|@Y_yTF#Jf4CaRZrr@`A4jdcwCuIhygCeP zPTpzOA$qIQJOQHtA3#+?@`FwNFVRsn%9;fuyQNN@UrTPKVKx$D+P=Z;Y0260>>shu zLh>4|KP+Mi#wt&z^L_FW{byGH3ePej245gnHX!&6Iu(r#G-y&UnOmeXOH`M<&+7e& zt;V&rRlJCYcq33@We5!Fbv$k}fFy3){5S?Fom=_t1QYsy)d5lr`qvb^hjg!|#P+HQ z(fc?Nfa8@Tu$F7{&t(CF$-7zf(J5 z+)}G(Z=csRDg|6Eke;}Uz|WD#^%B(BTbqBKSXw|k=SFTP^6tG7>0Xf_B1C7s;Y#E4 zP11_a<$n#Y?+-Oj5=A(uDP@%tgZ){`nQ`fL4kYrS)i9T9%$*LEH4@e49M9DCX%}pR zZg18wZB25ix(w$1j}EI0h3jY&_gBP$YqsAPWpTUYa)FM8zWTvT-4^x5zV-IISve*F zZxwOo4!zmF_RcBhzdB2O`#SzUHtgOE&M4t)ySQM+eUK8Iq{`{)-rx9rpL8(DSS+=> z-Orx2@fsg>Kx7{qU$VlZ$vooQPe?B-`{`<&549qJAhPLah6ZLnY`U))-3bEU|1>Ui zB?w^sHUXm1CbBb0F)~l-Prk)oB$t*$gQCUE_Sn~U2L*5G`3E?(+I*`S{RMVmEe^mm z|BNLxhFI}@=5l*kJ@T&A-3dx9H*d3QOHI&+9EKosu!<&yKxquqGoqiH!cfDX`^g?L zpI(Z&9BH5cG&xX5hf*(bPum{*w7bF@vtV%85TNc~f?%(6w1K_dxBNww6qV4U1~=>a z54$_EbKs|0LyrV&oxHtU2|f*~Afivp$*x4-GfKr1H15*38^P$rw#umgn0orLOz2Q1mKMX94z59iy@4EHSfc4_UGkyfJy zZ9tJBPsoVPCn3B-LL720g?rw}m6ApTkpmj0=kMJUCKU4&{>sFIg2-~8qgCYiZ>yt> zn@5YW#aHg-Tt(*Tq+5o={=-+YDTCZjTuvt^SiI-lu(9G>@Z~npp}w;^p6I?T{Oxj^ zj`q?|^~2}m;{K1*Ln>OTg@(r1tK8w+IS>|g%hBTYadEe|559HZrmx=VbiWJ$PX%lm zK7k(*{j`x?{oF!=ItAMW-bwv(I{3PIx<9UedOG{PqYnE(2j$R_DKb}2D+%jo>3$;< z()aTKT;Xy7l>RP$;PD8v%jx0aY||C13voHAo@^(~>Hd9m5Z3qK0p-L;!jbz6@X;Ta zdc5rmRQh~=?A;US`nbYz@O!#C4hh3X@pba>0^TJZLZ03?n*^Qrq>`R|HF8=tiIi+xA2=zr_7 z@WF;@Oz1%o2<#Tt&z5lZ^mPNAAWigk$FIXUSgRRNN8~Z8)oAw`3vCsPwGUEmw2kPi zUAc$@h)6r$3?MDFckpK-$Z17515b!x=S#7xZ(&C$cIv&a9*)Ks)9UC-3i9X(Op=g1 zk~z5AHEf5>#t_o=nlFH%Ox7->4oeS(L$9J&RtH0ZyAcm_D3@LP--T_}!j@2s%*_!#;bgLI3~iqvo7Qn0^Mf$GGZn+jsPg1f8aHrkVls z&TG9lqX&~LkkLkjv9NXP8s=^AQE)%yN_t@gj{@@!*x4NLVuw=&O_nH1XK9M~i^(S7 z?pS|c>at-*JGvH?pF{z$C&=03qCOFnsOlL&@(yD5YdFMuzbPv|{FP9ch0zoowSfe- z;o1+4x4d?mP5$gtF7#2bVHf(Y{&mUI$*i27HBJjt5y}|ChXW4l8`LH{aD)KmMLeCv z=0kumC{h6@PG*UOKoA$-M3lG*#hNkpMG+_0--=O07+!bYvkjpCa)YZ1;~-FCg%$uU z954M-hpDF)R$KMRU)PU*54z>Mc}}rEk!2s%^<-<1M^70d4L~Z=T@YTPgcNzM}gjRSU{R^>roIp5( zg()5Vqas8J#1H{+y3YckI5Pw_K@NWhn2qNgSIHwyQwm|pHtGB7ilxs@sKcfbekGLne_1)H0PB0$`wt`y6GooMOPjcNFwZWW)D}6y!@ken{b4SEtkEr)13@JUxtn`UOH<|5Q+=~- zf5k@c;_8h|HM7%8Q-ka(GHmRY=fOR{uQPvT!Gh{F39?@qLe%rXK>l*YQS0NN^Y>p9 z=gqY06gXDSt}U>DTXJfX4_08pko8d7U!3;`#MrB&@>VcW?azg|<5&t!#(hSWBb2g4 z&!9q}LY7wNFvTlq@0ZeyK0y_%DEmi#5HEeSNJCFg4{b99GRhU~MK470F znHO|}LeZBDTxLxbGM7v(Q_VlVK^PJu8z@+c&=!b06RJ-psC&I55_j+H;?)=7Cpzm` zzT{Sa`T8!@EaDmxi^Lfrd78h^>D$CqVA{q5n}Y0isz!mo0xm#3#MA-IZ$u&HI3W)s z+(MfSHhw@kSaq7}&a5|{SD397P@GNK3v z(@KQl!nlf4epD#;S`n*Cjb^e;++H{$o6eDo+wT=EWP7XXN@qk7`i(G(Wga^ag{w?a zPmMM#LFROQ#b}&Tu!4AQf$4DO2BN(HnE$9cQDvYEOQQ%7wEgV;#)<(>=}IW=hJ&PP{zD!g6t~_tE|gy&Pk`p6nu*~9py08l z!`7>EUCw7aW33NEbmt;BIVNf|_70o}{NUF%4w2w$=rCMBH^AAF#&2T0F>{m31--cY z{W<3p54}O|WWWG~s5GM5wMZG7QmDP$R)d9)$C8HOwgdsPzKY=OaEUI_97>7`xdhi-`Cw|#VE)8Ld$!s!#*SBo$~WHfYoa%6T*$+@hz!w@ zX&;*Yo&|P)dXVeTyxyfm20|A+#kQ;Mt%bP&OJ^!RD#e2j$@~MrMk!6eyTdZ0N*P2r zs^5mGT=9fBgdSjYrN47ubTbAUq=al`)t> zUS?YPV8V>zrASUT&9|&6?}1-Y0}l?GnEBzE`l#m=bzjd4y~s_|#7Epjzy25@RL-Vn z@-2d^+3XXDb6Ju zTT%=Vb@Qi8DkC9aX5p4aU{i4UYPFiq_sr>SphNTr##SLFDp?B=bGuP^{NwBW0eQ%l zgM(BMVMS^-Rj=qT-W;ksx;N92Qa!Y*MJ!%!@spNkcY2T9D~$ABeP;9xlno))1UpsZ zkAJ@J#?vT$#GkbuK$j(IXLOJ*oJyX<;9&#sk0iZhaSdqzJuYhwpFIN9o zSE~5fQA@lDs7_MC(~)oAe34%ZUYDEb9N3VXD5hdNe3e*n?-arRFE@Vd{%9X*W{4rR z?Qom^SQ!^S*ln98i2#pP$_Tj9k-420d} zQEVp~xzjA!!LmDESMU*Rge4)w914VcVXw1YEo_f^oV8Hl4nq1MhN-A!SDe?eA~5G4 zT)~o3p#|;jhOUEc;z#bIiyu6su1AtL7{_E?xa3odd_D#2c{)4Uv$mMA747W_6zwlr zv#J^q!{!?Ucke{Ms#_%^6r(-t0(VZkcXnc97I>Ar;FPDN8o)xyW@`LH72Y7m1<|qvU_7hYLbe zyL}(#m4=6|w?7`jjuAg(fC%uclF9S5#TZ#eH=r*+<~u2BR^ezG<2{uc#?Z z1aK@oFYAABde(?j^xF;6q2YNLaq_}O9wNR5oJ9V2A`WK-VddD-_Ai$opFYgP%JDLd zcVn#v5$}j~H5Vo}d+pl~Ym?mH*Dd*R=Yt#i6N^75)N(cAh3iFmfF1rwp`>w(6?W4s zM-L^^w|VVc4VO}g#E(dk-e!n_>vl(hRg+1pE*o5yI=6E}pA@pOsKrqKC}wk9Ds6br zDS=gHx)cHPmwe|LZS?AtWW;*>#l%Q6CBtqqGzKQA!3E^aVj;-Hp2)>;cHb>D5!Lpq zCj#?8)Z{M(hz=k=;F(FiG=_b%!xSLlTm5%q&A0L}Z1+tgdbmMiBfHs!L3*K4T$ewtT=5Mujh3$PEDb1&V zvlx7l=5mDJQK?fDfoXZU0m=PH^~$PQQiYfyV$@dOu6P6`0C`$`&@La+(aXvJ%NY^w zVq~p+9N({jM}>p7>l`QU=2(UOLCBAp(DN?76W2BC;&t%jcZH?7xam&{#z_BaPWjx) zW%7pYqqWqPgL;w)sfo$@?ug556K`o@2Twt_vp9)k)xHct-IS3z&ISPUuVe()U{A-H zVw2k5glv`|Fs#q8!UXeWm{UYEdXiTp5zV=z=BR-l5nQs#^+~Cymku$4^qZi)Tu{U? z_JuGn>kb|V8a5rQB_r*?I+k2a_527?YGR!j5;p3o#Ii~rH^yxEwbhJs9r_!=tliMyHzC6;Uru>B?E>JNuy!KNy|wYw&pZ(gr9 z9C=@j<`%U7amD@@dch{+M0~b!Vh|czhEMt2>pxIVMXGCK}D1 z&M7|e(NTE_;u2YpJUa+1=u*`gyG*v&*wpv{@~#BY-jLL)Qp8LP*@ovMVQPnbAq2N1 zttxc(d-gVU@Q|YZHD5Jduw@<5r=@1~Jd0yQ{mF>U$tQ{YJAzc%t|3nDQ+i{KXEEN& z%Eh6Knp%x;Vv=`cNtzfX_rzPp4+#}uN57sWuOGd>ZTzJV5k||?%kyM{6ZDUMLGMe`-T+!vX2!3-*5u? zJ-#UE^;TobXk~S_K`czhKT_#Ol6f*pcMnDLoujGcFXcVPc^wzbxX?K+ltZ?f&uDp$ zE|^pVbSMSKmAAv;Zp4%8h%X4CkD0X9ii6O#h-Xmb#$&v)JynA&6JN!t{aA?X05eZk zu!p&$D;$KD8}1wz`7%43`@F*l-rpyb6%2W_7^_Vpj!e{e-YQWHiTHAwQUBq98lzS*Va|`v8oLs5BIO}%;2|6I&4TX< z875hCL>`$%`G{?U>YDPN0h#hop(t|8OInkE6;?e$K?Hf1QON*$*Z2-tdfCMsZ$LID z|1_v^Y0+@M>UT;lLsD@%^TUvxTWDw121eU3lC{N5Jl;T;a`P%t!^`-qq;`F!t2e=` zWGBU|B;kcLvrxBdH2HreL1~sZj$`MT#m|HHUoRtCXf?_1P(Et8iwkrv=6V~8q~^>{ zhpW!3gv=iQ=zY~DyEa%@FUefEq5VBDaW5@TmBw^z^v51g3o0|uY!A+yFqc6}i^Ck%x>vpUXlhub|;t|~%N=3h;wD9Zk73?Oor!b7qXTaQDD z+gZO)#2ou!K;{p@N~<{OCeo3kufPqd!icG>}Ok#P*V$U;|q1o#$%SOLu(KjXPod4kYJaX9W-UZf1$ zCRS>j6QUKcBW=x_0TG{2uu7)8bCd@^B|*m%2$`0ww)AhlcD^3_EPZrx zhs3V}L;X(IS{3vluz{n|F{MTgwfNqVq^C&tU>dfBKuvadj?)-G+isO}X3J33VBWn> zSjb!T^VQfkXmz4~gbVrAu6rBYrwTWgIlgS4DPY!P)3sR4bxZQEHAL7?74E%hZs`E7 zljI+TP>;wtP))W|EvvKWRW5nr?yaqHNZEntL)M&BEmVs5v7OsXTDStu!M;t>(AMc^ z@xJ_-f5+Dka$h_)3jc8Ehk}6GOh)&I47IlBfC>Hg55uc6Cxdu*jJ?+8)S=|=)&vXw zU-N*-)$+l7#mR0DGl47I#A#o&V4%s;bzW+-m6ZVvKsHRvrdR<#0jP#N1YP+u=0Uzm3;F~S*XW4ks*+xbSe zO0^rX8HU<{s8um=itxTKe!KIHzxQOogn}srj|Fd1I25nYU>W+xLE;e@$VjHg^Ipqz z7}gLuPb66+@jP80+`RD4jtZJ*Mt-3faxrKia|hL)ucb-Z(5UZB4#X(?E657UH*o-2 zt*+a;%A9^t2jdr_jQP2=Eo)dQ?As7M6WZcL39fEH^V)e$vh3npURB&YwHZ~o2rcv1 zLnGpY(UR+mjTtEFdM)DzxFDnMMXP3hyPC5#!OF!c%=Ggg6!q>`bJ5)4S57KFm+FK1Mo;Kq7%wnp>YZ}<`2zzqGf$cgq`eew7= z*K@on|4U~f?FFro;`!x>_M8W zyI69u@n^5U4)s+XJ94My()?0{##{aAVwnYYKN3j0MRXL1bRU7+C0FZZS>2%v=0o{?`rFm_Dhg zyiRbYkq+_~y7-mLO6E0G1_rqw30}NXtQ~zzi`k~lrz%dFJ^rb&sHqBV+7;l%q7G`TYYYao$c-Rtbr0yE&H5UD*@#BH00L9}C+=$6&ul zsc3<>B%S{*kc9giO8wkPNaTXGw?Sv`+=s=Ic|I`SM}6sCUm>GYK_4mG$3wh4AxHkI z0m4@9NFxU^Pn|z*>Itf8qprq9QJTi?8=A|=Yi z%W&oA#E8a6Z0X;P85}UqXrV(KoNNv=$Ftpd4I%j|-F3G^#J^I^D=TrBgHCwWV}G3N zf3>;62Hcvci0l~>{#2wH%uM5V>dAp!9Z0YyP{NABRLFV;MzJJ|iYo*0Q3?tV>0OPs z1s!t|a7ko-apU0HFVCcxuh{}yB2 zQxL$kSbJN5X3G19Wf}60r!7ilYcfNb-uKwwxBrv(xQ_W`n=~|x(AiFQ|F&90Fcwzn z$d{HwEf(1b_+yqppa~vYYaqtH-%asO%4>L+7mW#STr!dIU7UOyV8t{aO=B2FG#642 z&S&B|)eJW*o_f#Qei5)OklXr02|bY=xyL<7^7^;-#_PV}HpIfkVL$4?AAW6}{ry!_ zl#5gOyfm51`sdazo4GO-L%Kc9HzRq&aB|xjJe+^K0Hy}~uJ_1sZR_XEI|C;@Ed~aGID<;Nzg);|MxP^x*pO52IT~E#|2}ictdb%l= z;13f`;2YHUg5lG&e;RZz8}Yp4S^n30aatSrYIF@KLga13H(9|RipUocEwnos-cHU+ zxRB^|F~{dTTsqIP@jtpWb*mqmtft{Q;g6_8FhO|^yH!XaMdmKfm>Tr8M3>K84QA4#@1qpyd^``3EW|y!cpIk{0FO0Y*^LU%eYc=};47&=w4r^P+tK7D&ico7GMvWGRLAfHCcj3ZX&O^h^i^ zob1%ldf1OFDtS(4L@^p9kFZ~`7D~o#BRWjxPOUz;D5wR#*nP;u%FHgAm@b4+EJkG) z6-|gLqeXnu#-(pr*||V*jlC~8M)eEuGnOXJ#@NHkwfXKNA>n0Jwg0F_Kr5c%*Md{} zo|ik2ALR1;iVr7xKU7f36IMz^l0D=fkioRyr$zQ`P5V)XOuQ&~a1Rb5Z~uXkxIzu)o^*iJ*k+y6L40ORLr zf+CU0h|@RodAOPWT$wCy-cE|=VjDB)1^JJb2g#HD(#%xF_-K(-vHzGAyhZ~zct$H6 zqo#P0WJl?T`#oyWNlR-wOzhEhcyY!e_xoB4{AfkK{Ltb1QM~`WP0>p~w|-r-5aX21 zv-%uRLM^abN(z-(;*xf|&vHGp4pfg8WWP0DSr&&@TRrzXv263sPEp4ECZY>b$EiHx z^ZtN6?)-9nN%a~pcyi$qQ;w%`Sk^{@yznRFY@4rxv+0hqBml}j#er!0=P?GlgP*)G z=lY#TXaU0C7~;+EB3(xRTN_^i71h)Jzw}ZojdXV{of0A)f-K!2At~J~EFIFYq%_jq zAe~Eh2!bM@0!pXCAAIBQ_dUNkXU=)<+~@hsGc$MY+;i^pe28A7f}-RKP)%~o9kZwN z3!E(i{k`*KTL6`PReY*YXY+3tn%s2gXQAh^OHBI73x*;B@1~EEo-SHxamK{&%3r!L zEm=WU>&iMw4d;o9Q5iNUhbddSh1>@OtIRDjV&o+8=Zw4M@IJ^ad%$#gG7`>0Mx9zl ze|}FL`-wFrodCr@>6G9+9p$fD=TUV)-a^%UzcDh3sM^zd8+#}QO^+`U9o}OPMN>PZ zh#hA-HXxmZk^3CJ9^XDg^VLu^QY>UilX8Q7Q_cVFg0~}`U=s8(e@ic$@eV&-((BaW zkyq^{8?9%=F8ES34|B0*nv0gJveSoQhhWfSX9g+VwkDMZIeE|qiFq@6m(}Vhzoh^s zcVu~3HAx#adLN$zeF#uWphPbok@4q%#R9qUCXtrZgK#SRAcxly5-D+clBi?Il#8-2 zFa5}>@IH}JI$^1|$53}IlPT(lW|$r5LP&6ny$I<4#5H~O0fLlFmS=E zj5OQ!noRvRy?PDFsEabDYa5b!A#IcuEa~q8KKVU(1f7|gzjMV-cXX{lKNPi6%eqn^ zi%6s|4xJ z@2kzLB0(!YIhGcEwe#k%e!AgwVCG3OyP4a4&Vrfd8bw2kZA7r2{hDk-EZ0ll6q0bA z`n7s&BPf=U3S9fEx#+WOZ4u!H5_sB9{!H#JF-*&D6(n3@weOPFw}XD%Se;_YO+yv7+R*U(Y+S zzccIgA4RJs1d|`2=Jk*dv1vnSigTCk^Vf;o_KC&xR|sunK7ZiKDM@SkK=9)v({1xx zDCpAcMULuy?(5*~t8TJsXw$8}*XwKffORq<((_ZZH_AuWlLs*PMJY zs2u?%;gag8Wj^A{;2^{b#^{`~iB09_422Akgs3);xH04JeHm2wQjFLlHiO@i?DOq= zs7JgDdD5{TZY(yqEO#!bNN#BMGC-QDK5=yeAjA4|GtSkTQR^sFNaL-VvDo^6N5Y<1 z%aq)<=4xEh4M~hq?o9>C+Lh!Xztk!J$LuW6%_ooeNxxBGl}P)#e?^%aE^T=el@DdZ zab^3cw>vCyOgi~tyrf@Mhzl~#o<+4F(~`V1EaMU=fqPYVQtoxUQ`xjToO5U?%p&vN z&FN7pZ&`YsoFDRu*U8au>ux1Y{fiL75`htb>5>eLA3le;wo zQPB(MASC|S!uZzS%HxTJF+@)^OHnQaEyPiNIozo`4nM_gm1}iwMZ55rUs?zGJ4^+L zf9f(pTTSpUDRCVo{LT1$bWHbGnOf$apwri*6JORU$EN65T z6OWB-hKq|N9=~Q^(@3lY3Q*~ZTQ5I-RU!9S$I-F3u10-fab;7@d8$tQ)3Sus{XTSv zm3dks_(V@{@UmK{>NIxRcUtNF~cT|k8 zL3zKV5Py|%J*soJ9&K(A6gpeja&wBFTE5^SzNUPjtAp_Po#T?zj<$66+#pByU5)8M zn-hzX@Q9LTZqPMRf8B~O;$jkc%Fmo!T%%$5<*XIFV<+0Pxk%3Uz2nEP?@L6)7zG6;c}ppT~GE+8?jC2AS*BCWf_olUT% zAbA0y-kgKbtT}NP51D6M>YRIHx>D?lZ-doGAnQVHX6s0}H+^D) zlio)pMybzFbmf_3u64>pO(**;;+4KfX$NPGdV?NE0N7wigV7*tj zd>Q@m%x7FBdx33v@JsiLukzI1L>SV1Q$dT-flZXB6$>GOg~w%kQE9eYRGk+bI%YRa z17|hAoGZySSd!8(7#8u4xJQVMP?v0?_`D{ym_B=g=$)2=BI}@yPrCZBhi_p@f%B<5 zOGe8fEp>?8V{9?gT%WK~(|BSr>?nBPgy@L=vM_~-Nh^pm1ynOkZnsO$z7M~}4*sO8 zxtBx3e22EzbEkZ&MEuE0$=~ixTv^JbMdCi#m>~_vUXmG9$J68y!CUBWY8?}z_E;Fl z!s-}KfAtGMT?5^<3EF)!jEn%c5rdEwUnv(xoW~N@p_i(>Rh;`G&+b z{KMmE8{jX;tMce5$dae06N5<_NG+`(Wt8PvTnQ%L^*soU_O+?nm zC^(>#r({F%p`sA_kw!VvQq2Mtgy($SMCQlLP9|chwg559Egn7p$R(k^{w#Vo$x0jI zoJ2~g$N&f|k9uIB29`G|69x0Yx~6sb;htT)EAvgWhQ&v7Ft?js;kZS6C2c|gXx^o%L{Y#Qv-2Zk2ao7;|Gfpx^1?pJ_#4Q5_C!u`_#duYl(MRwd!?V z7Md%1Pq^Cd2y5VPZps2H<1~gE<=S@qZNl8fao!bcToX9iXtsG)It1*6>W2~-QHsn5 zQhAljUliC-HW6x#Oy7u_zR9DU>r>+)qmYCQ&0<0cn}*?3Jorn%j<-i4r;pf7#01^C zio8eP>Y5z&aeNEE-FHbvLK@xtFb>x5(9k(UWgppFSD4Q&%}8S%ke43O=Eg$*H7X9- zIdlfxtseeFzRmH5R0~NJWMsI5>eF6`K7{Z>_um);VkWYZhnJu℘n)@ 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 delta 24384 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 MAZ9f5um`aJ2e3!)NdN!< diff --git a/sources/common/doc/manual.pdf b/sources/common/doc/manual.pdf index fb0f1f8866ffdf3a62488720d3aa738b9f7780e8..9bbdc1bf0d8ecfddbd88c64a8cabcb4a9ba04104 100644 GIT binary patch delta 96341 zcmV)3K+C`P@HDUTG>}Svl1*#FFbsz8`4u`3lIg>C5-^6QZ4SE?0y~V|)(v(Tte5@$ zNp{wiHrWU`wq?C~^xD`Ed{v)-fQ^9fedC~W)C4#ktH(R|C^7v`Z`CkWOrhz(d)9N) z3*3(c4qMJR zRJ({<(^Wk&y%2Gi>M-x-Q+u0@gsEo3C?_pKWLw0#un?s-!^$PB%&_toY>N$pQ={Yx zmc#(0)Yft?&Qm5=s*+z-b*T^Fue?tRpX}4B|db`-Z zyYZR!3OTAJti;4Q#oI!!m&3)oY$Ho?jjg3si^5WwU%cskDNS%WO$)6g5bC>GXy^ai zy?7G3C39TuJ-2j#Z}a4;-IIXtNAC9?{O&!>M2Rxtde8ddSaNT^Kl>G#u5 z-xUA2@9_Ba=jra@q%?k2D}!PWzZKtJc>%h3_~Yl6L05~GaVENww@h|;Qh!W$CEl#* zma(_AJvDS)cd}(YeY|th-o?55<>C9&<>B-p`T(M?w0i(3fYSrOnf3PI3flwgN`+6; zfgJ~0kl15M_wgh-EOigiM0@A@EgxN3w}(B?EmbK7jUI6jys9G>Lmaw?zs7bzEs<|e z`qz&qh8Lfobo#@0Csvezbbo&=wEOUP@#6x7T;O>IVLw1vg9NZ38^FH=yCRCEZt0d| zkb_)gPyqfHW8LTGF=w4PI|k z$d!HKV5r=zykREy@HVptT7H=}luco+hC(-bjPxFBT#v!F1AOqNlYe52tV{ssE{-pT zaFoJMV_oOA`5WOVnX=F}Yn(ah6w-{sfTs!CsB6ndWYFB!dT|0?+NA_KU8RSlQ-hb1VS=tE zZpN7+L38DI%bAdS>PDKIomB?`^!AWIz}xaXHn+m)`xX*{`&NC&yKew5<|y9ZiawLD3u+a5%aCJwg0 zcKBbvbS1Qc(PZbcHrZ*SUFFvPtJ(Jm6PiH(tNf63av)JiQGYad?O!l=jSZTcgF~~m zgPu^QYxFqjWbdPpp?SV}Q{;(tklSiUIc~6hpv6_&lXSZ6>xG=-*0>XPlw0$!X4?Zq zow@c`$*I#a7Ag#=sW3Yke3-N#Dz54ZLmA2|17K8Py#UMA6nmI)BGiNlq_3Y!s8)(| z>=j&*RiHO2$A5;}H8D$UVnh3jV-K61o@_k5CYOQcTfvvfBqnPGEqZo!srKNhJb&bzG-Aim0oGp8bjg`vpf%A4 z&TaW;XXVT22{f}x4@sxe13JijiJpF{S_7g#`Ff~P6&JU+E27ht+siAYRe){8~U@Sc2VF5I<~4m+U;(5rUSag))9DipkGy>8rnpZC z^yZ4nO&HyRg`-abpJL|P%OV^T{n(hfX?cUxCD0gJ2x*L06+QXXsimk*nB<>3i4pVs z^erV}*WuOUdYNhc7lQ3;a3vLqY^yula(!_lHg0Z?-aUbVO*RN5`D6mMTIR36nK!?F zCx5}Hxfy!*^vx`?!5&H{lcylI)I74MZe~yIWG^yqZie1HeSu9j_#^on3H(s}2Z=5? zhLeE-6O$bX3js8fDF{J-$*Sx&5Z(7z^g3`m8Z8-&!9949-Gd8RgzPdv7JbMomDIet~3jrKP zOc*6dVAU9NJmuptO%j!6*?I%wiXN zwKqRN)|RvLoCQFC1V08!mfe7{ogJr-01lH)hba!(UHnsu?g8md$}9M=M$lnIZbB1$ zI19NXjI5q7gf#AFBr}>oy#%#|)kyfNWW62PjrX#NKNjm?WnnNJSDa@=&yqd4AEj>V zz>-}Tgb9QsJ%tyye!;K{^~*@x-sU9UM)r<`3n&h-x}s!1W0XZ;uLb6Sxa9PGscZd&#mv- zsv>~GI%X$-hD&~` z4fnOqH|`;&bM96@Rk9Lq^5hPEdyk`G$Epkt>QV76k5?!$m+DGJQ2Iy`ZA+RLn?2F-Q%va@?A~V5%J#<`&ZkKLWC@mjMi3Xb*6_vX> z(z^MKf)SnX%siZhy#}flBMDGugWJgI3tiVue<*eZ`a;LDOruTn+1!7fOaLTt__rSx+&3-wJ)XPqh1AUHzuwFk3Kr6%k+~DvGwR{1Jbtn*sG&Ve|09n z=OM&7ZYFU>P;lux5~R!7qH^@yDHn*OsO}G^6?gCH;B}`T_m3Nni)%OLUO)apX?rzL zJYAE0#)z!3akhBekJN^DFs3smaZ>P&u6yo(j?Ke+6JK%ND$e1D+`Z|PXHRvzIPzDT zvmjCoSZ>IWU=+9JO55bZT?|!blmh>-gV?$$z{>#MslZ8;vS4>qma*9w&K&%(2PpyX zhge3iv?vABk|Zz19J3I@=B~`8xjW(jm-3-FC*TuxRKpMRP|4W`nK3SG;S$wj9t?MX za6M=O%c|ETRQF!eafV2fu`Q3(?b#mGI7M~)0Cga@V8hpsi!qzzuoaUf&p_hqM_NRJ?VQUSyyr&|U2YF_&v{ zQD17h;zp)1**JQI9$J^9tF>_T9@SVBgH6vBL8!yD5xsW`cBSgGM5BEOZi<^Ti6AQy zRO9dk+&f41i&Nr%Uouo2?91blS>Xm zf6K1pHVob8E3z(-RH7_f0Sp7qZM^7ifD3d{bk_&a#Q-y#{(ec3lqlKpV1QgFrbO!S z@Q@mJ_t*a}->&ZJ@F_mx9jyV<@tGuBfgqqLgUXruRm{a z^&>t1J$qO_|Gm6EFJHPPQ@Rg_OMahye^_oXyLIuidoDLW`++{)gg^L5A0vIZZ1r4* z*=_l8T5ba^`{VQ1Baa+pnC_81`m2ZRZ(x5L?g+E@3vV^zRvtpoA1DmB!b-LP*%s1r zi~P>5F0fH@8+h=%*#LgIP4qUh5s(S^iC%8#($^glzW%_2x*6Q!anT34GV$b9e;5Lg z2MrNpKqCrh#aJaO37B_K=Si33Ao5rI6Z6jHjCcw*$HN8=J-AGaK6RN;&p9YYm$4Xz9J+OvZEbp7;^gRQ10NqoV$w8+$j8Vo7GI99e+cm_Xd$l5{5a2Af_r$QsVbYL#Xy|pOWR`zl*;@!?l2hS z$B{pnRAj8o<13+bQ7>eE3HV%-&n*WbRtxs zlZ-=6V^LjDB+Z;rf6Y-L(%cAKQx-+0aAUB;k@z>%c4J#|ZA#t^%DEHJ-ca8z_$2`B=I+3u@Ok z2`sO4Xr_0=+q^kehUxwLX1O17nhQhIBWdK4;??;g5kM+{f2v=qGdnCLUvPm^jD0^_^C(Np^Fdiy z%^>UTK<`E)IocxG?Xjjcmq-Ibo>_dMh<}u(IYg}dT2aP`TdB2X^o$6UWB;PA#xcaYz&E~YgF5dyVH_+z$JdMpW7S+WxH`#!zI`$s@Z%R=_`+B3 zZY1M)kQUOv8gGTj6lBET4Wb6WD#aJ$-pcI=5FTqrykv{mMqy0Nw|8o>UHW=b;;%g-G7IFJJT7u z^1VM{mmHi@_wnQK?Nj%UuF?OGzYdq%!3SE3KGDm!KfBKpb`bdb=NaN~`}=Uc9lowa zVmi4^k?&`)!x7JB9N>R!-UfR%m*Gg4C{Nws_`sL?;KC0kxr{6^4u9OfY*|z%(Vl`@ zbR9UcXMk0asNEAyo`g0<-4M^li*#UD<8Y*7l4C!FXYPd5pL_*CbwY$B3g63lPeqS= zDy#^O;>H`haZ$t=IXLIzr2f%60FS*4{mH5c=m5op1=c}=$nk%ZwnW!QPYUH3B16IY z!O$%@a)UgW-^avnB@y9!SyQ~u6^4^X?YmwN#1tSLLc|2QRJO>7Aw4)$1ap(m( zLDyQqf*oUpqZWV596D@(UQnJTGe&9fNu0nb$CrK`PbG=>g@-jdV0EZ?MlEMHqQ_AZ zOUsjHTO$$cEjfqj;(L;pC{v=x8ERjM_~DaT&{TI8v^sa6mv zaY65qV0bYF1n&j-1%Kt8su&G6t@UQ1jkwIZJbn3WJ(Pl6Q|{^{&-n zcxcu4?tUUzcEAQyO$Af8*yYV7_cyH~#nQGQ?>3X&79xMUvz)?e;_hsk&zFb8;D&;? zL1t5)1U(OYdO7B%aOFo+9tV%m&axEDBVS$O<3kGU$w!~5>ivP$1C-wYe zDV@2f6UnbykwBy!oU1bzI+ihK?jgB<KoCIl z`3l7glDn!8wLl0ohXQ8{0}hNc?=CnncoP4<>u8-LX$G^qpsTvBS5@6(3dsH*{$wUI z^yDjFU=|$|F}uATzP)6>RYw1}kHhhL@PR~S;KkRU*_X~`;Iixc_u7ELCWqP_n;+M& zhs*Wwx=@Y22&<|9O>S%Bf16O7z>k1(wOf`n2xrs|WPoDF`UY!6Q#KSvZ1Py^V@sy_ z3%%v!qJ;>CR)S04c_o@AvZ&K<$d@3`NYRza(y7UDum^G@Q@O7(l0kis`kZ`O3rL<@ z%5jXXMbFYciVlxt)5@#5kkuxI8BNC#$T$6hq|}GfB@MNOFm)vnf8d!i!;93$P2wjT z_I`2K__Wv>S$t8I{Ze3{wwV`WPErsm&4d8Tftb6KMokI>Ifimx*!F?t9t?|_l(L)w zUuLagbkIrZw4!QW1b5)U)C(Jw4S!VM9ELW*vUQ+ZcES{c)>)Gg^*+^EYEa3lg`K_+ zdVcMrk^vTOQ8L55e=2Ef!)Z>M-wfj%NE(O49osnrx-iZ8qI8$E89*XG85*OiIHkw! z;CPb>Jg&eHsD)W>t(up(wTKeq40jH$A9D?IbkYY2u`f&Nl*u%vvJAs63+=FUtth({ z2vwy0a8ZFX`?Dvu-xoCMs}jI*D}%I7i$>h^6|{mj&AQi(e=K#yS@H9xq)FI>JT{&- ziLf7VaCDV`aoD;`h`d=)BgmaRY?!EU%Y+rhR?dJEp8-dS5;+6iv!t>its%s_QCcj@ z!37kRI;o)LGHo7CqU&AR55-jXq`GIg>}tF5XxrpNC)*yMRTEt^;29~HQ;&&1%}FWF zhol_F|Kw!de=6h0oUr2h`)aZE)Oc#Hzf|Fseu%_Ce|L8>5qQ(`RUk;Nv>Ed2?JawM zS@;Rk3C8uOl23m4VBzzW(nKCG4|?X)WpBHzOd^e zQ3??0%0aVqA{et71^ROgSAUK@!3PXi_aPt3l`A*nX=8~=AR3Pe(au3#vO!29SSPe5 zQYCBeKrHh4EJC(|RE&K>wyFxh)j>p|BMQ=?4^iZI=^zWAxC0Vj1&m<|5#X8=RL{a3&kEBMO;PCI; zKL>SC^kzqU!h<((@`taV-hTUV_*=&4=j)fZ>-(E^G&ERGli&Y5{4(PK9KU})qnh6T zdV9RTeOxUW{K+(z{C(A7i4F8{vT`6e0EXk> zUCm(VM@_t*G(HY|j*c8qK-Mk<=_E*jXhaXKjIyLQy$<~FU1?^2B&)X6QkS5Rx`|mu zPOuey0-ikwtS5LCwiW;Nc9^F$WdnH70A2`y~YJ3 zA_$-d?M%9O9uB&OePkX#U>0f1_Pklv0%iBK1NdU4i7QD3IuwXKv`o-_4~eHypN6$b z#g;*PvJim`W;sBA++FLiNBLPaKOmT71U3ulGm8avG}g=}klFDl;tUx^IiT2P?F!{c zxXs{kyq(s0T98o51Qg@DeG@2s8rNVSXsh-9qLrXv0`hEDR!}9dD80*bqw9V8Tc*oo zwia6xqm5D&9DNH3umQUj#d^m>3v{yLd^rXQGqljEG3bhaBry1c9d5hQysxE|fFWr! zc;kx0EdKBr4HP`lFuau*Y!yz`vAahzfJ6nYqlr%fAC~9KNWIH`Jb~VN;@wb-FZgCb zf3g|jR`bF6pu13Wqe_Wlf!a9fga@P8e3!{a7sDv}ydh_JkzD4;@sZ*vS(d|45L z$Pya`XF#BaM7KqNgxz!vD+!_)X2hv6Op#fWi$vDLT;Dof{D^7YtD)>HiztghY7x!kwk7vFUeJn?2^byrl2@4 z2=_VD#Le~#18qDN23zx-HFjXAt!b_x7;+AH5bi?qjBu$5q;=dXbh+775*gz~0LSqPeJjgK^i|TD* zqVKylvTodfYO&F7a;3`Omg|44zC}lUL`$0rYeg*?>OG;#j`Mc4hjHMRsHJ{8e`1k7 z8JGL{6D@X5)2JOwnqI)c>OVn8pJMdMwGa1y07#`*ER^p7m4(l`Qb(=^UOg34Q%T^< zQSQN8iE4B9Gs8YosRLT`hX(HbxRI&pJGD3K0(BMFiR4q(To+;?pCDDy9AOucz2d=M zk-x(yW$13>c3C7aD+n)VtWymxg!4$gO5I}00A253+dXH0 zxOeiI)!1I4dWD!EK-(>!>sZSaUB{EOU`Dqo=lBvK8Tf?)$20X6a(dJkIZu-{xxMaD zk#=pR8lAndYVNkx?be^-D%4sN+7ygsXHqcG(r)Jt7$Uajs@mVeHAP;t1uyE1G%<$L zkP6S(r-mv&cVdw(>>@rxJT;(2&%5t`bdMV@t+EG+!LSNBxZ-_*F=3Ge7(Oe74fP!TQaFcvy(Q!wGgxR>=-lFP z*PEIxh_n^lmHh%fo{xKl4Nl4%J~2ntgjIKyUb!XkbyXqe4YrqJQh0=#A)J%=F!pMJ zu|R`R!0MLc771aF1}TW< zSzv(OQ|UC;)9DJ~J50%y;1 z%v#;7pbVL-v3+ha(jXo@dtai@Q2`~IV6jQ;j|{2m3Lpo z%YXP2R=bnYBp(4Zlkp@%e;P}V^EU22zar-XUn-K4ECWG+B$F)A+t&`zL(yBi3l!Z2 zwwL|;OHvQZwrt0l7AS(5_#wV2k|JY{aQNTbe-Gwh_{#O}h=*X|7!H5@`u5{DhyTQP z{Q2WwZ`Y4E=lNCV0x$mf+6p<=TCJpFCt=)+nKS0db850=6%&)+TPF>^*uZb%p zN-`9vg0v|{sBrVLN4%AF${;akAzmg<1%}!1iH(}t7tgmA&MsLV-MUGUj@`rnL`sW! z7SWOb7e$7V3t^3^UHDH8kSvr1=_=u}cHdcz6tfyNzLonJ$jW)4FpBSA@T3xzQLq^h#HQnN!~Tl{b1^>mFUftos;`v*(JBM z`HGKbrSOdr(n3veMsKS;CMq=EC0>issM2a;Qqe}xb+<76v7aa`;mST8#3_@hqv94( z_G*Ix<>!Nkf9=K?tKh-ji>%&GII1+FO0TtDb3Rd5RQ{qPS});vMm##=Wyujew4oNG zz8b=Jp7TkL`Zjs4?*5Z`Ut%%1qi=(%8?dJmD+dfG0I!zp#ihL_1oaJ4wUH)^m`)gs z&H@!5ahleeY2^DRGU;Pwn?)803_r5@#wwb1IS^)EI;0d08MFLUrHkm!ngBEy$R_bA zQf=fCU!@X(iMgcCBN?X3mE*j{i6mACF_Vys8!V-VXjNa*L)<THIkAo2 z{eJjCUI`vsUd6lgDnpf3^1Mbdhl;!{mxNGnS7HzGTo9!kz92;P8Z)!l8 zJ4oVc#}lczT4Z?B4*)O%kht9d;4H`ymhB0Se+{%ijRIG84WUK>^5_ioz7mXGfdMKo zUudG{h(&sy#(|%p%!qsdOVOFD$5-Uzf@w)Ujz*$a(=W=1}O-_>7e~>HC zeS#OTdVh0dU~ZY@C>)Nnu2p`gRJjnmz*ROJi_M#jBbOvMvs)p_BO3fMvWml1r4YTO zlmToMG>NwTp+S-5@3=aB(IZ;Cm`!f@fH)SUaI+fi(dC2OSli3-ehhEKW)p8>*A;7R zSjs?#+-0c&YGGEy1MVe_cEzWXOMJP$`k5o zqeMYZjVZ*Gk1@rk&c@d=o!z`pIPO)LD6=Tf6{F)#atq8(4lF0xm&Vw z{@kKe=J>Bll-h$d4Ps+DNYl~7x(~s&Cl4Mve0F+}`J|Tj`j0WQy7#Z}AL!@x^{f7~ zZdV9)+QnV9D-1v1S+i`3Hm_P1e3&#a|7zRv0qBzyvu!st?r_?ETi3X?vvyr0DiMQ7T4ff9x%C}l0ag5NxmKZl+10tLV)Gqgn1UHGw= zGTrr)WABNEI`Qk_|Fjm`CzH`66bv*VFd%PYY6>zkGBT1bLx0PT?6?ix_g8p5KzBq+ zvSgr8Kt0+4vb#wGSq!qvOn@K>kh{t6hZOa)EtOrBn?-<3W9pVIQ4|l!BZ(^Y0mHxE z{yC^Y(KkEU4;;LK4?leW(Dz7feoqyqkS7p!d;|b_NonSt{yA%2|oJkCi3Yfx-($Df z1(BX;EP7NdVZw{hHw$f(`(T`9h{Mz0 zhCgrs66EL$27PQtieHcaO5Ad9H;ZwUu&O2l$emr z-AbrW@PA-dGD!<4(^NxFEdsC*m}vS90Z>kPpwIzJp6qDTo^WXxb*TkDtb%E*45MV> zU@c-})`=nHyZT1G6x_9LbZs~skS?%_?E@G)`cT0u_Mx&p`zVDh>S zYQ_n0@{;ceQA>2h-&{|phvpD_c6z&nr`UN>*MF{sT6F@uXQ5VO+YJ+5J31uWjHl04 zw%zcKpJ?F|XHD)`bBOVg&|#D`(bt6ZKYUV~QM1MzmC1MaK#N-AMmsFEtBv-ht{r)_ zE9sDvNTg|%-?1EAS_qO)Zt~aB2ug9t7O^sA!zrR%S0SKnYD9w;NBVQ%(Gl{*ba+v> z^nW%YZ{gNzZOhbe(bD@#5sLJ^XP2g+nc8-#UCRW@K#m~D*B+B zv8kJcK4Bu$ahaR7euqpT4gEB;<1>iH11)PW7@x(8atI1{<7lH1uH>jIMZmppvV~xB zL#x`=8w?#M{feQLSe>Pm-Nb(nOx3(+*njFw-X((So64J@ttif2fr-d-J5e%Vf1-ko zXO+)mQ^Xehr}b_SY&9liXzh3$1Wm1~t9QY;qjL?}hpfAlAAz=}t7xFmW0-d!w)(@q z0C5p}man%Oe+XamHye0nqMWVzk?3*0ZrXK_uSa8Fg0hIc&evPrhxxjt|9QS1wSW5< zUogIiJ-sseHb_k~K@^wS+Ljqp%3Iff2Bi&<`rL3}> z6DP?*I00QAgKQ_a-q{}kxe|Mpm9`pRVwGs!;axo zzK2fIY-0nZa*(m-k+-SR!-pcI45_Gr2D`>rV<;!;2gTN4rL@>Htf zm+En}S-$6bd)Vmj1cDz|gRlH*;A}&D(o1{RJZvoQOQCwsz7bese`Q<1&UkLaMW@0z zMptopoui;s*lF@J2Z%l8yNDP}A&^+6jIp?ZkO(DtFV`0mFV!5NccVdgr2>2m0(lfe z#O^URxReRpm|?JTfe?%NkWGlXcHBWr60W^1_cbu5^bt)Z-{eXmCv7k|;tFZztH`E# zdA{B#?xQ8c5;kHBe-DN6;zs}vLz#FQ)IN%5}7X9O1)M-ruLNBOh$A*(b5N{h)Z zK3uqI_qs}E6BMvbkeu`gXFXzC0sBnv9x{D%2u^H_oK2nxM9#Z_1u^sI7>V4RV9bjG z5qyKk`SbSJ8iOr1FCYe9OnBNlfi89MLvm$B-kgNwcx>Eaf0f8#a#)1UGHfE7`ZR-i zm2u1D-dlJ&D~-^^%yCVhVo0I?I&&^5nsuC5O-*qrqDPw`sc+}vjpj}oYn)c@C@hjq z;|XU3cJBU`I%r`a9V)uqiH=kEl0m{%ZB`MTR%24E3nLghp~%H&pv`2sNAoZr(EAN_ z1&R!gNq51re;HD~gwKkUtHlG7-w^6B&SR|zG2b;8x>;Vj%5vD=w@9Sb>s5#(-W1E_ zuXrj&a^Ro1X<4$BuV+kru;$P?Ly%@rkY_&3tIA`rDFn=V;dU}`9bZ+_#dQg)d`Y%l z>QJDU+~g9BDYe=_gS-n4B}1UXW86J4$xvK5m4># zE8i~`f6ioq90@lwsnVj%B^ezmUG=FopQieo>BsPo`4VP%#Hx9=yLGX25WL}yw=jBQaE=hX&sCaZG3>Wh9dW_+2ZS(AJS97=vV@kaJf&{~!93D` zn}2BtI@y}RfTk2MP7jm|cKH6w@as?O%D3VksLPds=mGM+HUuOceD#f4hf62QaxtAE zSCZ(M-++ZN{2T5T`0_&ELk-yQfiL_>i%aj^I`iR>e~^@F)I3J`IoDh+j>u2Rx;)9s z627*oEU}t-x!EK_+6Uvgt$v+RDGl<&M{NG^@!RlkVRc>mlhGs;lS(%V0ysI7RyRX` zNsH@75Wdf^@HsF}S1($?7$kXg$nAk4hmczq$RUt-$=^>cy{j$hg-I9~+iG>G)~~*5 zsViLme*5d9E(*W7(Ovaruy7qNUw?i3@w>~PvW9=ib-QCor2G!r;hClU9t!e;&tCssaexLY~*1U}O@m0BP0EHi5HOlB|P17xo z#H>+}>@#u)4D_kheb@??J2lA1EF19W09viE>JESPB6fmaqz7f#1Q>!SCm+CH^gzq3 zsxq$(fDu>t!JP)(d3zprcQYs*rLl9oPf(%34zQ3F54wOGet!P&_VIlC()7H4u~%1n zJ{o4p*DE~{tparmW}w>SB}rX_w1GkFf3rYo12=sj2v2R=mQPJ&yLrfUhW+h zAzi`+T2~AHt$0=ORTM%0msc8y5w@?g%eW%Ojoe^2OMZmRpCOj3l)eO%_iD}@4wQ$5 zP-L8wDO(`alw=je+Vdhf17z>uQ(4j>6@X|h3CB;=-U^KhdX-(kDyqeQLM2YRa~4Ue zp+YNe(otg6c9Gh~7(idUbUz@*AR?C`NveoB0*e7x7&$|Gk+KPTv-Wm$d-UJoH}8fuZdSqby-orF-+PJ)b#tNhI@BqYCxcg>vL z^fldRyXr1&v^~OEcDoyY&9xJ^55esU82&V2wV{8Oe><+fPVCy1*&F;{g>nG|Bs6i- zCWmHiVA0mY_Izh&l*>-r>;|rH4}^Ng2C3eAd!!XyLhp z9QnDLr6KqZpLY8`!N1p#U!lrFElhzs&>in!NeqNc=EozbPx;e-e8*h9_`Lm>=pvo0 zFCj_PS=h=(Yp@D|NL;ZF--CHAOtQ25oA$+P7=p zpQ$@92mSf5J=;NlUCn;o8pA$9AEvJPiEWu#Woim1d$X=u^Q!`?dP3~o?ao}$&tN%U zC7}P5)-B8XQR%uZDW4b%bTUqiZ#COkEcCnruYwPy&->2qXQGHw=1}{Zutyb$B4yC( zwUXhb<|?e<|G_+bS0%|Ib&BlDXvdl0IDM@-ZIh=&JQ@OjNoiBXoTcbnq#9Ek;Z72j z;$l~Cr35}P6pD#p!r1U>WW^u>s*whpOGl_Lbfqk}g03){RqGS+6`4V?|8!>De>`%f zx}-2_~c@@-uT@FH7L7B^&BT?dzzud{lL(Mv#2t*pOjZx11B85ofMAqn1BuWY)O|YF7 zC4nG~j@$?1bv&XFAG;KyDT3jTNrNzi)ldFJ86cna&v1$3SznLiW*$kWcso>}oX+DY z*z7z)1eynBLAW-tKOy2%;7SCh&v-z?{nP@bFMg-(u}n1*G?DOm1vf_bUcIYW%B1Bzp7lw9s-R4PlpdRPy*#aSjVp>TIGE_ziOZ2P< zpG`oTauHFOLSg29Pzl$=N2_JN$oqppBj)XY`lstRXCVIqhBki6!6rMEjuIdvSGh9| z!32ysJ~UW&JAO+9!a3D6_jx^rMlQz&nlDI`|CYYLYX)pdy&v$(kQv8Tx`3eqLCA zv_Y3_3P|I*4U=nppUE??2|hq}acXu&f>sYfzDT(6ARmUKnT^uaA$US~>78t%E9Eh3 zd@ETVr&dkK_o?tI4|IABuzkOg(gXG7z?%S22j>=N-z1AgSzE}?d7=saSS&=O(n`#+ zsE&}^GE^^uq({r|3Mx)@gGYQ(_~r5i4@=*-F_VD-6bvvRFd%PYY6>woI5(5DK0|*y zkK;BF?)@uNAFv8%NJ=DN2=K10BHaN7QUvL8cR-2&*(QHK^B^UPmSpV$mo?V1`Iz@N z51SU6e^383rZM!%N8e%-9JHZ%|91NAOY^tx(d+%k>Ggi{9c}eJ(&77`%`YQ1;F|mQ z-_O`V7+&CPuKKiQ_~ZWT>2^PTtw?`F+#q3Lp!v3$AfYZKk34_{ z>&_VHt`e}cn(xrpAgkaIM1hOk$5$9lA|+?j4LOQ*xFaQ?&yppc;FMVst>=Hww2GEk z3Ntw=iv>Ldxd$p^-lC(^8oh~f)&k}QmIE&$T1}e_HD*I1e0v9N2MYQmLNpMAeIosj6jX?0)ntWUnrqp`S9s4G*hOoE~Dsv?aSht-J0wsi1Lh3mIrY|w|04Od+$1w$_?S6JeDl+Fs z@X)Q;UtIWDoJvHq@;UCrCoPFkR(zeCCh}A&m=4ftq-4&bS?*l^Lg9ae%Ai+i0XyEhrl2YM zrzFp0o3d>SgAeDeqPP|mlXaoX!YENRqndV-H(S8u7F72awwOixkjB~W{SqKiFu3w71iK0!0I^5Hmvv54wQ=c*iM>k1r4 z0c3#^rZK?;7ubKi>~-BNSy(3I>=zwWri4TZ1#@4RR-9Q5E}GiI?u;^*JI!3APC0m_ zNKnO+{2OD9>^|`hc$-_QFabH3m}*>?` zx90nono)n(Q5WeneN%WQU9fd*+qP}nwr$(*#LmRFZEIrNHYc`|f4=jdbJJJ*qMxqa zRjaC2)e@O{z{cm8iew5uf~(AYyp&_y?-EEeX_hM*jT$h&;PVntd~np<_WGK#jgF3- z8h%F1)Hn0`dbO1$gbL&qo*MQ&P+N7jJxSr2;yKEl!xH={pC*}(={S@kutl{Q& z*Y{Gcz6zo3J$N)QTZVXx0-A=GckS{{u_F9d=jm*+pm3!rJjf6dlN}n#9FDPauhYu+ zdr5U21~n)8p1jBYCDiog)Sz(UpM;i9yw!ow;K_ocMzqOG%9qar@?v2!+kaE_PzQh# z*Vnq#sZ!zuapZo0S8%CG|8vwyNn(oseDfv~+|Cy*8zE9!aV`WHa3enAHUiUJ!P!a| zC=Z%d>i1V-;?+>aBAf8z-XZB*0!(vx0Oubxs=cHuJ6RemyWq}lc0+@u*~-J4D(8H_XH;fD`H_4VF)X)ba85-<{Uw z2;()>Np9MhcWaQXPG$QX`+`7c!R6LcHhh;{Bqpmu4K}n^ zobQmj0va9`&{wjVop337^ZHp5KzI30mc!^-Z0|MJQ}^W2?-d*>>vaGj;gx@j`7tR< zqMtPyoL$tHJf*^KZn-CCybQqS!yxH=&x;RBHz4U?RR+G>tTe12g2~UNjh6LrujHB@D@UfGjU+l(J8W&sw#yX7T$~}Fg z#dS`EfZn$()WY!wBEJeGH@*4p{LhI0U5ax~1*>SZrI;js>~5rZ);I zDC8|c|NIFnc<#Q<@a90>pF|4TeVs}W0s97;?| zjEokT`GMMC>*Ux*7{D%^Z(n$ciS&Y96#jv3MOAjPg|A$E#aq{MWrDlkTpdY+>X!!@ ziuU=gzVFW$n}7hWF9*}tujk#i%~4%BESp5Re{_b&I^t}qY=MA}bCG`M9|cU$3&8j5 z%jU!36<~CDfg@M7CwWpu@~i7l{ms{~c$(Toe%`7<-k(VzaNIP@wWA!y^v))9_HVql z<(TAmH)r^xE?9Q|_IAparFnNntPczm4s=fa-~f)f=%vKZc6EGQ@4`-3%FKt};HkF$ zbp|(*6@9K}3d%@7J%M*GXU~*?lKvK~qI)3*YCr^mvV^%n6a7fdAU(K05e$Qcui~Z7 zE0{}R3>x*NKYcWX@>&4ZVtb0@RB@sio}w99T_1c2Y*#MM)&>GFCd(A(R&-z^H$08a z(#9j*L7hJg<_>%h53}3#7X9|xn8Vym%nZZXt}g3JYj-9NtLape1(LCGZVksImJ?VJ z7eFR?Hw%w6$1UmOvI>Ri)cy3bpfJ2GqqBM{*{K{S>G(!G4uH3*i2Rzjd1Hz$*t7{^ zn$7d?F|hP#rTp341j4dNSP`QtemUbUwi8D0v+4kx}X%hSSFds zKkMGNNK6u?nl0Iq5$hlcOhm+NVh{Az1n_nOq|n^8C6F>KofbGZe;O;HHG-+c+yBYM?%o;@;;tKCfbF(DX>A;x6P-;!oz$(aE z`3OcbkPenmhZH-PN~F72xog+!P1XEYnNo`t#bM7$bj`nTwFn)`#ie${{2CVcqf8|O zb4j{wpIjL6L2{}jrw;24uS#r_r~sR3X2+?g$d}ZP+LS&#B%mWRFfJT55^GlZo%k1k z)Y@LF8VIMVIr?oKmd$Qdyf9kc==c}B?Qc+Y|8w6Fp{uU&=Z?gzj^-%ZHZK+PR1+8 z2=iI)_VZDealRIeq=M1FhwXJneSS525-$&`-e5&jW+m-4I1O-H$l6Tsp3tX}@>RS7 zl}p#Q(6?cV2U`ZR4Vc6$mKgG*5*TaThgW6unI(fMnK?7rad3EP)dsr~&z4@Jh-y8J z4}I>z3ALp?a+ViS=2Us2baPT2I$x2Q#K6A0U2gE(Pp z4s;mN;|mxt5s=b?mr@}JOfUi|hm@A?G>EAWa6Tt>F7~Q>hBX2V?`Om8I)8$K1Jwgos?n8Q>ADz ziX~&1HCjrVc&)nyTR?{jefs;&r+|^j(9oCWFAeLmIWdhZD*Z9l$fxArqPy&=K_2N1 zJEm>>NK5K223*<7=ugIfdsgcN@29c_QxP)7nhu8x0*8Fvl1R_vVo1IF*(b{7Wp%^* z^tp-i;R%mlD+VV|fi+rQrBa4kB4kojxHtZ8$MyU8J4|`)`U0}l-Nl=aruw0pa-gS# zCqFq*ktj6uvhB)}KgDu}C)st3EvJMO@|wZ)yJkwt+(e^SU7IM}&%t~pjkrCkX5U4v z(sHlbAMYaDXVY}k< z>oFUCHTLhU#{jAm2ea{&4Ja0B{wh54&*JBqgfD&#+`S0gR>OUHxtz`%T0X%G0|ju2 zXWK4Nvq|MB?4SZZo*p+5qpuQs*T`vbM?{(s-?j^M^piUidM8K#rs0Ok3ZJjP2>Rjs z!}}01kJ8WTk+m3uvbvKj6Hs(kA!Z^EoFgf_^CZ3cYyezHT=+`izf-IwsvW3xzzslLlo3bB)d2+w0FjkYiuZ`5`R8;7TdtG$qZ3fo zeV2zu_mk-#P{LG^snMMR@lkxgq85;UToU8e0%!5pl?-9UW;~g0l|g6n=1(!K>%E$Y zp)PBvB}u3S_?CcYKBE*{e;15G;cI4>BwMmNwvhIL45Y(O!~)?p?vsebrF-uTOOW1X zT|lFK#`EBh*f@cDMImuRjR|s3E`Mv78*-9abf{C%Fiqz!FtfBqC>1vn4tIzX5EW+^ zCG`VwO>jdbR%EjeVnbO~K;2y5RS4v+PUQsW#1DLt;#fbh$Oc%_ffp*PYJfs(ge8q^ zeC{S_Yq2y?OopNP=>lt=&j+JCE#nT1c~USiO46qyEHFzFl#(bwJ~~?nspnrozB|97 zvi2KEOv#e}sFmml$z{@kC|u|y@lW3BHqT*uC-zvxhK|OQ?~}oc((rKJ;!P0Dz}QM_ zA_m(TY5U7NVn`gTr&*JL{vMlJuQk4ip{hv9_(bxzt9z#b_aX z)&UaxbKFL+QJEZoGHKz#hU4Pt;)9#d`c$YkQyTlEp1|xfQrqHePYB#~suMUQ7<7ca zEGOwz1Zw;z8^ai4e(}VNin;4?z1m4bjqrH9t?XvKqikF;;zYgE@v6I5!BR!h^)HO9 zFS^^mN1s$piPR%u7`x;5z)Z8!d~M~joaf$pna>IeNotpX^mr`y>=ym|S;XE!c%f-#IagvY&?AR!cD_+v)HJ~|xDj>5R zsv8uo|C*XgV??D9N24oC6p%U2u&{7|K~j9GwmVbnQUgN`)O zVox;7(yLg#Cveow0#esM{v@boDm5iOK8i`*MN>SO51V@$qLzp`DLg|A}6pdKP>iP)tt_uE|ueU zW0(8SCZ`5zwxpk_^ES-GZf{_7HoxpCN?@iPj3!8~MKU@x9~uV)O^ zoYaQ$3;OK#mbxEjvib3=WoOl^PL3q{4{V@SIr2Xoj0(rb^1ncsgPApHT15=-`>-9k z_a9Hk8<^MZju-|BuARR|)B%(&evqi`k|AF7SI*@3*HW-}0t)pkko2!hx=!L2=B=bz8h&C%1%)$K%Tz_y>~c-!!lr&jeJ!z+`4ZF-1nO|2>3U9Gow=eFpU z*FmxOOFaGi#?!CA5Bf>h2AE!*aDH#yKVJ`Z{3$~)oZCU=W{enG#F*F2^cYivwG{h~ zmKtg>ZQ0kW5gYk5^+0=)lb!O>Syqf6&Wf;RDLG9i0r0S7pDy2(u4Fd>fE*0o`EAI* zQZH}37=0(^LRC)o24S0m+U0&*t(Nvq;PpT$_eT0~zA0jj*UPPqoL6=|&exL_!G(xz z+IY!J!sUJJ^e4eXLnb+3Qw6YdUypt`(5)lQiP0C+gR|>J1*@fv9KHL(kk&; zY!JYrbFYL^AL3D%O_b_5fP;=ZBzEKIyAxO(2YB4bs0gfRT}#M%%`kx$i28P#j-e~3`1dj6mS|y6&aWdUsMfXHQL)`BS#c6t33+uWK+|^o^o-2O)Lu*a zTq0`G7!DxX9V$EISM_uMR{U&xB(8%d8tyA~%`-lWU9 za;ZK|`nN!Rid6<`3Szi2)aXP>)c}X8^=8>9VJ0@Jq6tNNQ~6zIs|6oHSd{mcKiC$Z z(h&o28xAn}MkN&E0DGq(0uVAdIssGfLYj7ru{jMQa?&^rA_xohau8@#b%EuQa~~$?CEA;5~m{ukqAl@8sT-X6^D(s<3$c+K>W5GZ}@~xQiVKnWM)kV zGU}eimfRL2x`e*OY%+5yl(OD)CW_!V!*Mw%`S=`SzQdT4LXgeBX;p+Dp@m>J@wQ1Q z!s5*nE9p+1aiA)nXWx`(AVf2BjR$h;^%9dSg&t3Wq%*|JgQd4*!VTcfeH5wd2u9>k zPwg8N)nwb+-1G#t^=b@Kr9?ViResQKCz;!#pTJ6)Q8~ijeSB&J1==zh&8&~R0F8Ao0o=+cZO& z4|`m4PIxU(^xP4nU@+0mZF_HQMK&=ca?!VfLu%Yd_~Prs16B@`XzA>`{=Uk*!&&Y` z8E@|aMCQ$vGP_C3mNFRwZ1Ss#B4hLSxfJWpTC}vme1kViRK@R9N6r_=0(o7avg9%N zSsQi{jm*9JLI4DQRqsandw(E44W?}Rx$FnnTToUWi7x35IIlw(*v}|;!mhD$^tZ>M zF!2(~?Yn+hQCdWEoM)f-mRUfD5%vd+$~E=?iS|OQK%p9BCTQHUKyxq0*U86p&jQoo z7J#7hBP)qV;Ve92*M3f2sLqvw#lwg&!>GJWx))PbAp1LfT?|OAiP?TV;H0bC_f}hd z7=Ztx9j9}}A_y6b!s{Zt5}SZ-#2mw`VUV<|%F=<`HdD$@n^!OU@1D2~3A$r#S10cA ztpkLR7EcRzwCXGMaA0D~@Yqb-d?d%U_gmYzzy6k9JH$7(e&>qee--m|4WH99 z+r)hYk($-oWef>e$75qn4ib=4GCMz{vW~JHVFEUNPDMbCFc24X{ z7rV#U10_prF`7KDz32A0@*N?8e8Ollp*p3p!Xb53Y2A1?o6IR(!z#|iB#$;I7vfdh znUtD_TwQxDY^0x2aPN@F+v*e~hBs+_*zFH(ZJTSLHYyMAQqwEU+!(ZUJEU;|TqU$cVEUl>0I5t_w@*hbeEr9UqJAe%@;w~_bRa* zbQG0X_6%owIXeru!I0H5<)(|hzS1MgK0N?0@m*9jkzl`DB42^K&i_-pm|+yhtMfrgmrW7EM!0ubYfZJcY_{ ziabznVL5eOL!y%ObnpR-VFS{C45sMCKW}bvLy5$n($e=Z66kn`RJvckFOJ&`pVd+g z%N?a~?-k5in?>)jb=nr117nPC6(CM+%a5lj8$=nwSvRdHyIoEq`E8icgssfW8QNK6 zR@$-QFD|1$rrLKycui$8pgldk?611mt7ntgnAZyKJev()v9E1|6ZG%OS^^O;A9ahk ze;JBR3(M+pj!MI0B4CieS4G*(TbQG79>ShoOPq|C6+*Yokah`81QWWH|x*B z%*K=ytSbSKyx%b_Xxg`CAz`%zCXUys9NdC~7r@%JL!9d0^UT=I({ibs`in8k@t8zI z`^>L$0$29a^X1P%DVq2Bch*Y>FFS4VMQ|tJ?ffwj4#iI-np;FhKCj zb`VwW^KBN^VfFV6_@b$|RnyGCQ~ z9Z#DyE%v~usehLMk`!6r4a zc+ll8gvM`0EeUZZVflbms$L=ly5wdsQlf!42(VZpZF`H_IZPT%ggE)IXTCOyCSG-W zWq;1}xml+9=xoX>Qi-j%cAobF(#T*28pcwv8Lkv$XlcN6 zqR8@*ZAf!9`dt8X(uD6{e5fXwe$=2`>Z^F#rCR)Gc(+?o4g_Qzn+Z*CXmdab2nW#$ zVeeprSg_sUg`yKVD90I&2o4jn?`%Wk;!-i~UI==(>Q*82u@mJ={*o;fJ#H^#B zlt$)}=AcsZAB(%5ct}t68YDQ9{Pfe;X--8MXkCq`^Me5CTr_2x0%LXRm87H}DOH}> z-Pu_0p#dP3mEb^PKpfjZX0^gDL0WZ*K@i>ar6*Ug#iSVD9b0)Tq)UN;md=(XQ8v}WF??CLZ=PkRxM*)zYFX*^>T_Sam?adoBNfDP zd)XN<nne?S*Ar--gb% z%OdSU-fF6%R|<{mP_8Qnf@DE;Q)@W)A7E=5k0Q(lv+XCA7oD)pe2F!asR9c&4hft- zwqP;+(0l~(#vC3L(jbyo2Rxf!Jq2(ESA@!XqWVAOzH6}5e0KE}m>Fb+1ZYn5W`VLx3^5oaMrrM?Baia=XVyuB7UI^dNP~M8{S_mjjg{oR!o5#(0o~$#jI-juz z9S(n&N1ldORe|&M7T@s0C0-5W^m8*!R80W0QmgKPhAuX=EJ2ZS=@}pLPLv1lEZ+K0 zl2c}X3tkj%Xw9hedAW1Q6h6eZT6>&XF`liiV%uNI1~`{9gmx6&io65AWNcZmfHw2&SEkiSDno=-w*Vxbi-_=^!J&BzyVwcDo_;zutU~_- z3NzR)WoRccG{W2{I*?{LEP@Loz~NH`<_ulV6BAwmNcSg*>dZ(_}vW!f-WTYT9q`v4t!?+<8e8`1QCyF3zyCKkQ$5VbEMG76$>!& zd+@wuvA=ZB(X!0u3IC$(5=MoW&@n6uw_ndidd;RLA6aK>V}sO^blSypo#N9)h3tDJ zpJ;UBywV$>ZT^Sr3rKxqTR`GwM2z#8&Y4OAQt^=JIFac54~crLq-0p{aP+c84~~9$ zdzXE)a&PnIgP(Z|1VHeFJe=ook-;;o1MXq&^IX5NGu0r0^CEP``dfMV=U3CZbsoNF zn+fkGK}B_V!?^5|{;`wrc31AjY2C#6gzggQTSvz6N9?x#1nHGEtL~y|gwd@IN~~CbhoBLRDpE10wg< z-ton=knh1{m)}I^uKt~&#@L5^$cm!=K4}h_WlLCz5^J#*D+MisS)AYKBEWf<4an=^ zR>^dId5z>}ivWFlVIK>cYCv6Q>ZFmPQtIqIt_eP@i_A^I+K8($%kfPO1;NtRK~Pv( z2HVCDa2iaUY&Vlk3~Q4CzT`T_DG&vtBI<<#Rx={^v`B9fs1Il-CnhtE=HCiYrl!N5 zL8;`lw z(j1rZ++*B&7^}?sQ(hL7mw1~lC&dQM_gp}m3?BtyBz+uQkQ*ea(pKmniYZVpzCj~q z)~BIQ^V-2MT34mUMi7=X>{?NYVsXG4T;ORMxXdK{dUU`VtM)0JxtUl;+e5A_a8N)&DCqh=uq z9^^@0ln;_4FZdtI9pPe4=p#}Bo~--%a4ERx%_zoGFHvO28TPIwDdmv8c~nTxsqkFg zjxt48IookqraG2zFp10o9R|Uk@`-zEk0j&qmc$A&Vt~<+Nw)YeA?`B}l6JPkPY9Q5 zJmlj(sbH+}gOzfQ3eUJ{N>veMdt|f+;kaXv+sfB-7Cl<*J^jf)|JL8(1{!G-_F1YY-1(Cw?4*fH0G(iw1+i6a{BK zl?{lE6F?{W9XVDAzT$a1`&ydpwc{lkTHgVC22C4^w@PIZLjpIcdtqEvbBrNojTI@S z;71nHt_Jx{1Vtqd9dodbEHT*!is}niij*I^qdYw&q zbncZU`qG8gr5|`MmtHqlT_g7SFHWuLwYx`2qkl1v(|?iw_dg|_Tj>C}Nm*270+Grq zbwPXA8E*ThtU0hsAxAKOzK2p(N-JgL|GnnOy8+#?j#WVJx2@jc83RJYFa@}k>ciph z#Wuw0Kku>M0iW)jTM7+DivDtLug|^@&ixQPy+5vx4xL~AK0P@CH)8KgVc{gZk~frY zMY^S|aSRHB5nMS1vyOlhXbGUsb_W>0S3C($Ij(^ehQ~xi@wTQf9Ki{&j&3H9yp>rRms*J<#t<2%fr#gz;?*usB%nHR3#4eCp3r(&9!|IATjP( zaV!^;PvbfFPT+;WKnu&=Zi*StLrR1u=h0thPm6%>N4WXSlco2rgZzaTn<4I%W5)K5 z@D7S+l$U`M+Mxk7Jkon4$DgH7pTZSOh+ylT1;K4kh@Y)7GQg3*9fPwJ%LwsQWoVPJ zV5E}vMUnktamGy%CA-yYm3KrWb`j;hBvR4Qr>n_WmLVZ86sa#z%bZ;^+DI}7|f_(yPR|3IsvVbH9tLe-;h8h~o z+K15ir+TpJTGuL6XBcmef-k}AU)Ry{{Otknig=5?+HUAXsIZRioD))V#|&Sv{bHR* z+q`Z#QwK8yI~4QB8E?>xV8Zi7jvtwibE(5s=D{oNZMxU%N_?&$t*(|SUy`YwDAjHi ztsP6@DYXYQ)w8?ST3;@+MzX;!cZc>%8RY~@8q@*bmFWl;*W9)g(g%fhsXZH1RT#A_ zH%~?LdskrY^T;l6l(gGw^{4oEl|K14J5$f9Pp$bv@)R20|5(yM_!S17k&Zt!5;~RK zMj#f(7QWyCz2P2vWN_j7$pYhX_1*3>kh{MA3? zz!pZ#&u^OMBp^jKz1K>**uj-^5~I=BD@goT{pR6`Fvsj@=XHpNRQ~nvqBBxCy1W;T zf;-rw7!2*zh!_?J+B@DhH^=AUezd_Kj?8UJ5Ac;`?$#M z!J-&iYV05Tl{UD%Ib{*Mauq0DCR6(}Q&I-_f|CX54(;8H2(&K{bR$4_AiHgss4@7O z19fkDZ+GIOXUwf8>5+H0!>Ii-{FGW)bbnc2B$nYE>n%&q(B?=KZO@x$b*&rKm~ifY zIX8M-=qy{xvAp0=FO}Fmz6cWKp7v@@v|Cr;1Fva32L&qG(JVWrnI?;DINlG(X~)n( zFMphpf zYbHRmYxMi^VG8zUa6aAL94a~sqR%u<@@i_c@@I50W0A3beXk$H%h(l!Q{3fE65_L; zuRiu*l^(Q5n(7~;K>`%HmIfo(-6A4&NWy6Sc>yHE%1B*`=A^HtF7#ju;q=6A-h=ZR z+eXArQ|%I{I=;nNx#C(4jg%VPNcIfyCN!b2cq-=>iu4o=1jk_GCZ0)by_KA@;WIj5 z#5gl!rxPuOlRQRaazhZgCN_Rq=s;7DS|wS3i>fkhpR#Z_ngDSaB@GV~6+!KzNtdiu z*&hMSoAlQlP!LaBA_)rMdN^a7q8#Q-=N%)Ft#D-bZtQpEW)7_VI;LZ+eAz`UqH+Z9 zbgTJ6;Nn;8%pbwIE6uX^Q|1LJxMW}7Iw%wMHLqjXc4Xt%L)N4~RbI;xKPc~2A`5jb zVlaJ0{iTEA_zt$eQHPzzh&lxDjsK`0U2An|y}47Lc8Qi%RmE~`wd2e`JT#GqNBC}E ze%+N)A!4CcG8%EUJz4wA#}|2X(g94VK(nOe1Po0C z_#dICo>R>;z6jd!hC?AHGkMU>8l*Mj%VtI_x1yfQ8^y*Xj?InOU#7bM&|G3@*k02b zD9FSN`wUY^l-#dDS7%S~n{|ra{g!qD*wf*o8dii6N-cQc2xGqvM{87Bn}$)IiP;j- zQDT9ZwqXmpR!i@(44#L%sX=!2HDrLeLq=%zQ-qmk?bl1^m4zBiP<(nk|X8i@>FhuI!B~s1PVF+S~McTdefm$`8^GWQ_cQI$Yyam zRx#B5MHv%l7@WT3E<;FRPG4CSoScL~@qj{+wG_q4n@8=hoFu8UBMQ$*vLOIV@e#9B ztNW3o`&*N;RO#D1l}h4L+7@1lV8Ztq@qTTjZC zt&XfQqZ1S4;p_i0gkGFQNr5N=pDUiYdvIzIs8_BwYpM_c&adu zeC7^Eq&EFG7}RY$tp+ErV*%pNuc=bfNlQr&Si_i&`St${7ygg{-1d+Fas>MStrK?h z{ZEGLKu6|s4GGRVtIvZL%ma(}3KnAfUz_kF>C)`Hvoz+HsdNCLcB(zwKpM|4;6Ya0 zYKmKQ8^lpecK|3M_sH&@d<~>Iez=}>OXxnfMh_$zmH{EorAc7ydM3~PEJaZX5@9&+ zGQ5pvLa@eaMlfo)O|@J!0IP!7L~B2DUTk2enH2)l|tlkCXmaPkAVw5eZC!WqI?s$2=k)_!DU}mu5m;7(C@rGQ!A}+{K zA%>glZkGx$?cC^DN~WT3Pb5v-e6^rARgqAWht}HXnS2DxoSs#o$lC` znD{gd*h+{4;2vy|9i_}7+qL)ht?M+}d{2!(pff0D;}`_G@clqZ3x~P>`|xQ>X(0d9 zSHktuK-%=uKndXi>D6SL4ep4QcxKNKuK7TRMTFqY;{uugmWi-p_KqSVP37+%w zBNLYc%@BUOPU1!xHS0VcC*_~n0mN-(RSVK=DfGGXG*wzzs^6kPTX;P5su9G z6hg`;T=^OGZdq6npts|mR?@XI+`mRS*pD8L0+EhH8!H9}@W8`*-XFGDz(C-vBgv&MYYg3jT1~KYb@^YD#=C_VaH1la44+uG==B~ zW~eA#>17YqVz@lIJU%OEE9;Sz zmy2fLZeeO4AicJr@B=R_-h#8z9$Bot905VA#~dqAyO=bf75Bu73-o-H99pT!BZLCfQG6`! zb;X)x&L213(NZy%9jsw&o|(qwaA<&Iw~GHD&xvkxA)8AB6gylm)pxgSLd!j0mlFI0pK|Qk88lj%^40T1#JVAg4tpK zWNo*Yka|Bf&-Chxu=(Ld^8K+kHiL-6=Ts9hV63GXzCQ4$*KE1h!$Mn%y#sbR6A6UA zt_)H%GBq6BKr5|`BmQ1>bo~?tM8^g=3U&={aVt_dZtX377GIZ^11*0Z68Cez#6L=h z%Mp%d1%-e5f3M`6Uc0a&wi8Pcw4eOjf;S2lLGGJnv?NYyK9qj0wn*s6?j73PR3NY- zRbdG9D%b55+@49tcq=s8QzczUcH(6aB%bg3%-Iar@xqQ0>-~?`5gJ8m-&a66B_f8_ z^+@(3p4TXgbWW(-hUPODggL!MTG5yx%Cv9%|= zqvyr^6VoF9U+t5Ypx0g@FlQ>TDnd+tHy*ssjBP6xJAEINbw<|#0MU8RF z?@gu{3u^>DyV!}UX%H=`9xCvRPqEOO6L)H)N*jbC!!#K1V4<*{-ic#O({pzzK9Av-EGKv%{>3zJgJk7Xa3i_bbCt}Y`bu&l+{gy8FS z^E5ORQ7aRaXM>pYI?ajRWnE zx1gBYfdJu8&TS=BT1(xQ{Rzl3J2kcNXf-D?)m=z>e6-U|dQ;`cwWZVOePGX8Q^KE~ zZ2P;&`#`&S>-(nMlSfNv1T(X`Gi5kEhz8$~@dt2yo{X@xS!9p;-R%HDu$cB{>YiEk zP{nn0!ErbjG)T|xK_s&UUfs>==?9tl2v>@t40rXn+`Qox zXtFNdM$PD=QBh9d8E>H=1tN}|`T?bksEcWR<3NFK_y^O)!>6jxcZvIksS@AQ;gErN z?zGt8KHf5Q8hTt6Q=5E8d#?i&~-t=gX0QbVqHuo z0e+~lY~k^88yV!*LB58DBIGt!&sRM6xMZxN@lK@SQ8wkAD~~)v0?i){g}!p9T-%1s z)rQas#zS`)3&#-}HJ38T&_Z0+lsp^FqkLRoC4Ad_NvB(q!+4~FROcY1fuEN7ijue1 zu^Hhk@8fQHO(Saw_-hJwmzG>4rZbAYI?xp3whn01S38%`Z&z~y8Ad|&S;d(LeZ$!8cAe8PE6DgFa6Y#eD_Tu2+m zTul1_BM?W(Uore7!B-@QTu6NNEYRHqUWjDhP2t^#&c9qU4ofnXF&FT(tO|yhG}4(T zO@Lb!Oe2zLQzyH~wA4H$=(@ci(9;6hG{5baocdG(r);sEH|)eEtuzEcI>?hB3g=T) z95gC}L0>!MWbZ3BS$>B6jvtIbZTp!isXmDSd-X?`2OLcVnB@;lB5N;_?IG@mh)7M0II;Q66KkkBZ@an@~f4^OrlWpTI+8HLJn2m z!bi&;r~hQ?i-{D^pvQ?t4=Bxxmz#@GQ$blz4nW1@D5H}QH2~HK!QGa2uo5+ZuUyK^ z0C~xw9jN`)l>R84wr`*}XZ6Vln2PtkMcTww7Us5X_5e~VRn3EXOV zWI!iq+t)$~@ZTc+2k}UHk}~YJl+?Vnaj$bs^WzgQW!|{pYoHTy>f=1Bu+X9<+sxBx zHbXZm7e)+EQ7uf054&=H%L&DeNCasx=osNg6EHtzy=p#19`_t5aQ)tT0A<8`#ef#Q z;Os^*>&839gy&926b11K_AkyFm5g&X`?7Tn_~PMmeR5#KH8k_O zC*e(ZG(&*9`%fzhAB2lDTuBwGO-U8H7aJh``?&Q#zT@1wkf+v`7;r3P`L4;o>3*Cs z;<0I1BQubpv`_!l0eKSfo(wF|KN=Ndby35=#T(6@AQpcNzIiL8_mgzDvT}n$|Lx2C zewY*tNdJBSDTglq`C7$n>+Z0I__Cnj_5B1NgfBA;*t5v}k%j+Su!q=`XcDf7P6fog zw|To*6d1DPR8;#SokcUrxnZULic) zIHntO7z0`@EKZr9q9P5z&>N@MijzMzcQ%z#TmWGS_rEusCT!)_tV>It|egUhC;sa}?K9a{_Hyp-i!mP1L-3!_}YCRq(rtRb%4IA zf(H)fkmfTe3hsQG$q!09eLPJQYzS^(4&LhR9+DqRj2Gi4xkrCTVRv*bS9 z4P6x(x^{{V$z0c0B=RPgA9)!3A+PHS%^@P1@gjDd_#HjCWzwg#^SW2_r4T7aKqv`~ z=G5+riG02FKoK!(bRL@Mi#S=HxJZ5nE>j4;9!ZZO1Slvd@|!(Gq{&GYBKAM?3*Cgg z#aIwDA2xpGIS4Dlv)4;M#`M!!4(}|arIqyz7&v)t28xe<)hsF!6%{DPG7~kz>NA${ z+*`)CU^~3s9mqE$*>fg9UM(4cDdVAK}PzI)`yMiK4ncaU?XplAfBMm z$Ky=h&GgdiPAz^7_}PzyT)K(HvF&e*TS=`q0EBOS1z+H1)s|AHNf#r{PUoU(qq-XC z=(VA0yH^-XJJA)JP7VkLzh zn|DKm#c6FBXF+`$MvvUpky+hCY;6G)H;51?UhNF6RG?RznkuxBz6sGFt9r*-*OETwxUgmp-jz$@l?iI6 ztW>57RkAyulp#z%Uf7Z_duu9Zc8jBS%hJfGl;K57^qu-Tj}u+)L-waWCGC_fr|hxs zj53jN7V>0=Np!SPymQ7eUwMA0s~x8&0mL^+trXOqnJEI4Yz``l%{y4Nf0s(TaGKA{ zvwIYan(KVAk&5ZgV7Or2HI_I*L~5hx7Kh?*Q$O^;f2>7@9ZXB5W|#8kMbsWabk&zB z%dKa>@;&!bSdKD0Vh9(a+vjilgE@3RUoSH>Iy>&FLUDT(H^szZ9ZFwRp?l@BwDl;R~!c^erqio1kQudE3O9X}l5ku{zV)ts* zET~HDNHxfQ!>}}=WvV==px?Ku8fl;Tid6sOtyOoLbWgmPC%a<^?X#n6}($UGZt){$3t2t-Pkx@?pp?q}~OB z$+rSyum+2BsLf2xuYEUQnhBNk5@NgZu8&k`t^^4j@b=E#TI<%JP+p_&?3;W3qY2ROQ+XfQC% z2~{4)_t10^U7>S-)fk6&?d^awt5(dCr&4!gsGL*m8wv+Nx)Yv>_$h9O!+POY3$|UG zx>?29D=zuxZz?asH*^jagMOYc8S2ZOkB~d|XWsqe{S9noza9jt-0gDjl+ig%xHZUj z3F3=t#QzQ7DwN`34jY~H2S^8b-q2o`3*_`1a|v=O-Q#(Hgq8)e6YO#ZMu7w4L~>^G z*Ti8GalU0ZKE~Y)SXy#<WSbv; ztqtSe+55H@eJo-5JWq39m2;u|4)nu;^hCJ2>L;hn<8u!aWirj`1jJCk|5J_3bS*9E zj+ESWYuLh?-LUe5b1Wc!+t~z>+M!WhR?34)E1k7Ebh0N}6}e(&I&%CVoz1IyS-?4; zXEs0_u&}S5RZ3oncJ?DNyw&^KV!2vqrJEr?;h2KTFVY=%Vy7I*i)|jH=DYKq>dUW{ z7$uuHhN&r$8*byo2COcmmR4@oFR5V}Uy6l$tCWP`8kX=|cBt+8)0|x%rZRD5*wU+bU}j(+6rIuk!VXNbSQs{Ih*ayc&d`u)8jh+ zF7njA)*Iz_d{E*4(R0ZIlH1TbtkwSn_+|P7d+rJvm%(-k9|1MD;dTj33Jw_QufAUB zz6}2W10jG_lYtWymrj8R3;{NmTY(8hf6I>KHVnM?SNOa@I-*{dfM5ZS+nw_y1LOm; z*#N;#fb3;|KSfHi)PD9HrpIntMY4*bsa99&eq8?RRHty|qPyxYSh|Mp`(KwoK6U?I z2$lf*_rEXBU;ECHlh3Q`w2xPh2fMGIE~EmMCL@LZ8Xv4WdWILPwtBHva7{D}y-Tjs-M8-dOMCy` zCD+y3-oJOw1f*B301i3-0-WwDaIv;rRp4Sxz}4DtSAf%91uoW>tO{JL3AkDxsA!a* zZF595f=8D0X{yV3D~I}&h-Ee{f8!f8HTUaWQ=#nb0I{X|czL@RV^M^CZ{X+cOZW4g z6!PfazWzclswbr;HL5^?NWr9>y5XBh8lSghCrzWe8E3p)6Q1#~4JzVl`uz6KWqP~3 zZoBn_z#rYJfv^nA878U#=ZXQz??I7gC>xNYK=lQQj-A&PvvWOJ3wL+of9x#s;d}!J zL%}*dabOZ22X#ZP0TxC4WMbnqW79*HMaGdqmb6OtPHS8TxXg4e2~J$msax%?cB!wP zBOlnQD9tW*@;?)RbkXuz0qTk>z#aM35(^v>1t~Ktbug&A8c}eQ*8HFF_^}hE@VQ;t z6+-A9IcwH5^J16*xx=4+f0?zvf%terxDOE zz1k?dit<~hWIXRuxnByjD}>{dj#Flptl}nacI7|-JdtiJr12W+ccA!hr=I z1!*{hwsBc{6;=-biuq;E#Ez0JEL7;uGuEyX9eFct#^1iie@YfLYMzVB6FkuJ5WoV- z7{gPwI3M$vqh-~7SMwCcI@dCr%gyE)3HC}ayLEom)lk+^wwE|GTB_VO?d1u#DQKCtY}zTuVOY2BbqtlWhLS_h zc@$dHG(E^Le>W#P0Y~ zj_Hd`t&c$13h#g%X5YnmMMqi|45lu5?fwVf^978PffE!BFf$-9Aa7!73NbM`Hbu7Bv_F4y z92~?u1d2ki014WRS=p|sO-}J!K-p(gjs&#g2F(|O1tC|96G_T@K=oz^_DY3X1m`WY zwUn<{2z}Q-tB^ouOcIXJ2Fq6{*1RgZQZAX4vQAbm(i4!D+z8izK-`j8PmuVE1WI`c zQ($*J%hT#bP*yw=jB}4mZVHr=LZyGXkSQ9%QbFUisH2wLG=S+UsVRqY6MrLnRkzB5 zC}uD$b1rhFQNn9zpXH*R=+vNKktac}@-%Zi&=tX1>;nIXQSw%(!Lt&GE|+JbZL?-NXW)zxfhJvpS^t`e9=3YFxVk>IDz2cPxCFd~e^bXbHoGi2q$nz~YeOmgc01kqDNT#R!7>L^Jtr zqe^*P(>oySG=T~@LNUE8!Y#EFpaqLBR7Xn?B?s{A3qR_kP-|swROL^E|)Yqka z;Lmn+G)JQ|M`L$_>W{>^J`V^2_0JJNSlwYJK3r zx1XwSXRM%+`=5X4-F5IJ*B@`+9j4pi(*v{(f2Vo_3f+Lc^TUy^^-wRjIPiR<-r9>s zujc`J*UIIR#*SNIjWN=xv9NUoweh8)b#iSa(h=l#V~*e%{b~-l4%9MzI1AOYaN&8v za3m#5Jxp=tB?!zP1#4>|?C?YutgQe!SnpuC{rU>f;XNQ2fZ5d$I8C4d2_$1g7G2T@ zf14C^#wNfM1>B$j;O-Hya3IfHi^u_woPskreq>(y4~C=f^_CL{JqCH^EQ0NBu)Vjj z2sNXTh_7%rrD9=*nelP7q`0w3b?`dH{(>9F3N2c2LZk(QCU_P`fG#KjTM!M$R&roW z6FnjsI2=O{JkCYU)78?k#W_--?uj&Qf04#;kD!G#j)Mw&?M$f=4v2Aw6na1%R(TWIjp=8+PUhESTcgrEnz zuyvZHt+@htSo%I6=a%#7T|NnsHnEm?p#G^@9iwGy-s3(^&_J{7O|z@{y6v7=?Q1?m zd@WP0xl3t_QkfzCnyJRX)RqQLe~8zbViE1TQVrtgMLU!b>ki>H^BX|h47lGSmGUUY zZB5-=U{S=a=_AYi%w&j^8HAvv?-7lR8iYE@z0PCuyqO1PM#g12+1SNw#MGo#U9@4^ zX@cb_BEEJdM^OgYJBrLbNNy#ydz((4o+#{ZdWQHvHg`m2z3e*vYk3e!f7lYaFXR7? z|6m8p=h>TKGeo)nXeWv6VE)5S5_UVuS984ENkVBSiEMw5d$U`<8K9t(WRVkzoX#&x z9hORu?b4q3fvvDi{u$!mY&?Mz`bcbFZy6%#P1EFKZ>SEwHYe=Y5MO2eW7fxP+D2sP zpL_NX7$(F+SEaGDGs9j`e=T;v#R|@)Rg9^$ z0Vz8x3rQdreCJ%@&LBt;(j^Y02*izl-;xgp`@jid8!JXY*LNApcg++HCECzMuj zi4O1P`GLM>ug&4Z4Ao?5R*d2@)i-*aB0;F`3yaoI^Hj}lu>kPx2Ih^I;-MCWC-f0c zfJ))0P4jAF;WZ{nT~iB9JGa$I;++tiKP(Bk@9x4$3+Ss?p+$daz}{sJtc zhE#ZHAQ(HLZ17j9$Nx$%dB3>QTnfP7E0o-SEo8U4xpP6l@YA`Y6ASHYij#p86qjF* z2@3%n3c51e+uT2;?HK$R-4ZYX}4!oP-eIhT!BHViqO7 zxrUHnY2K+C$w2P!_df66r&d>0S5A-uuao2w6`f^t}}u zE?K?qrcGz82<=+{n~8TU?Z(ZTgCa2?xl)is;bo;ek8{TMv+{3|!EUH$Hwo8k!V z{}{@DaMkL~eVh6Bv!= zz7JpiI1ASYpbf2%hvA@qCP-@OHQ{)TRww8UMw8iM6>XB;;dHrWkJsl91Vc(V5{<=I#W@Z%~e&`)aL8z8w!mxn$DZqtj;>WWp-=ZoVoMnw=YNO znuR*i-DnPa4LyY{XbXM?@hFOBqsLGjhY&$+$c;5<7kUd_ga*)i=maW5?dT6!g6FiN zKIB4$;s+46quYyrhoP1MwV;1TNAQ(+G0H-EF3I3Dym@DF47pKR@mTRqxcV-7566mo z(OgKqk8CK3wxNGR61p7yqIecs8bfQ)qxc5=0ScpDbO&F{4;8OKGtfcwTigz*g=mZB zP5nW1CEWFW?8alocZ+{UKjksH1fFygx*b})4~>yZu0^wd2Pr6l&O;ZV)lhmpdJEfe z6{i-H#q*21Aoo%9H78qGti&^OV;FdA>5ljsv{#CiN(`~)1o!hg}c32kdf z*P`oSZG9I;?@{z5I*hAu6>$?cjFuav&{8Pdi5`LX??=aRJMP9~_-EWBn%rb_(NT03 z|6DAha?}NXE!>TM2Jbk7b5IA~z(u%g_#l6crh4K==;1o_9dsQ13fl1p823-mXSf`W zKay{dZN=rq$BOSkTLctB4QLTsfi|K|=(BH?<3+QF+#0gvhJ$eJ~|CG!iv*GwYd5!#m zyOrC?pVizpd1CUT$JNC#9l2gc!A^dlIBzhW1(A%!o;SL6SJmJgEyoP`s)D3|AE zaZ9*=ZtiyOZtf-Sm;3<#1pl^Xo@TY?3Ek?+uTB1{*j}WZ2qP`DD~U3w7S#j&Tnf~5 z1+=dZjsbK7x)BYbyMSK4h4!E)px@7-m(g$0JLqGW0ffWQ=F8yiR{_=CitmDB7k(1| z48MS1#(%`0(t||cC?j>GnY55LvYy-u$KB+AIC+Dd;{4oNZW}iU$3xs9?kyhiJYUpQ z!!cKLhvrf3E4nh>T-_Ss)wAOhSyF(W zwvaibgIoy5da@CYJ~BWy!3;f0_LIZp4bINRxe9JI*U#9s=Zu$zxFBZDeYOER@bRpqq{-(x~?e1 zfm{6?`hD;#EHA5l4PUKs@SDlIur6e-PqQ5_g%Q(|CES(VUEHrVm*Uf$g5SnN+-2Mq z#qV=%bq9T5R{E?g?f99Qd3Hbn*@&AUOCL6gHqGf!4^*6ke zzgcq%A@V!aNVeiJ@&b1=cXRPs)Tns~zpHtO{0b@j31Ua@!m8d*?t`0tNiHLIpf0{v z^EtW<#{F^4W*G08zn~~(>CG+apF#Lnk?mhqCL*#F$OO2 zYjhpva1Ll^`fn0_4OYP2BndpN6}ZW7a5a+AeZcR}O#Xy&Y|WdRJAlp}<}&C)ltVq_ z71Ri8<2^XK&~2z19RV7=9p%XV=!W7TUI%=CA@EOvM)Bn+i;ci7-O#pwZ6GgPBm%r} z6}uHTOTg1(LwSXpDJjHe}c@~yy`dV&Am0mnMj16SWc-_jn`{04PkH$uEJ z`4CX~@6p8|bN&n7??p|}z7^dWZU&cp49{nf21Nin_^fvILIF`|eaQr*8f2QUcG{pZ7cxQ9*&f;&86UHL~BeVvj z=t*=H`U{NPTy6~2OkP0t7TdT!kWlZUMa4&pA#6Y!idO>X{Rw)1M5h7XGl+tkM}T(k z;4dXPXm1L+a29ee((Fb^J%8yEwRz@wO*0w`4fS>T+M4RBT(+_zlP*t{B@^*jG!j-q z!GPcA^~i3Q!!FrGtHo?G8uWrrtKm6aIexj(za>CP;2jOc-&s2p(WaKiJ>Bc_8N?kG(u{` z9qrqT-7_&u5O-_iUV;QOG-|{fo!vU(iO!}i7~$frtJjTxbS~;@o$U*UyDKsyxMgj0 z%?OH~KVnU@DyW6MW<=XEqGPX7E~C9ccPM)^V?%e2ifB!5+O#gZZuLc7Bi!n4`VLzf z-aC85ecegAhST(MQjZZWy|}7beC#G=eVN65i+a zs)vgwkhfJCTGAB_k2L$D-K%H&_d3wfg5=ksN+7xxm{Dls zOm>~G$ZQ%VBhfxlfe3~Vb;8)L?rzM&;D^I>dhZxj(HgiI8C=v=x>nE{-#(;f)7>Ma zmzIowO_w;A(vrdHl5@BBMuCnGFg?XNA|%fJTSb?>bwlF_cKyE;Us5V>UmR^;w4zIC z9qOGL+x8`2xhj=6oGY73;Zgw%_y`||k(w6;(z|d)7tMfwO}s7IdRgyWSZdJ55qnD) z=Of*v6!CHFQ9!>JoqIC9=rYk~@o_Dq|8=8(Ispinx6aUum9ch=T_63DUk~#n6!9D`joKtcHf#qDtFP@6hVe;^3O7 zB1VS}b6s55P+x2B^z@GwkKExKX}hx(qcoGywbyYMvHImGv*_s#W8iYGw<*? zyit9`5Vk2&OjbOKw^3g(G)e_I?`ibT7v||_8(QU7&phvC!gqvS`tN!l@a>K~jvf;p z(SOhLJ?~?_p9%-{hYW}0r#(l1ywCW?BEOYCHGC?6?ycCZ$Mh}xt9xr%oUSUx!Bi=p zGp7_MlchKsEyXq)i&fR*ueC;QKm&My^l5HTZq(dr+ZoX}3blq>x!`+II~IP^tGnH> zL*DM;>ZQ3dvCEF29r=_Xk_@(>G+Mk(&FH-zMfP}ddV@o+H~75Xm|lQ?6oUl3K!VsV zNdOhKUXM{8#Q{}XWx%2#X4q{wWO&`6F>KZQM)7)8RJGYX!eQZ;0w-+Md#?39gMEO# z^w3_bRI8`$_5@hGuR2eor%idJAJY^4D1Ppc7{P;)(r7>}8XvOSYr{|MkkcM9o$env z)02ij?}YrmM?BLbpYe`=(|AB02ZC#E66rCHZSKPM%Cu#xcyzm_Qf7&?jG#aq`*K*7 z!#zDc{pqPc)Pv#ScmUYYL4)ElHw&Z1Q%^&zj~NT{Xz|28d%*yaYOogs#a{5iiP?>5 zh+u`;!_H_#>vXv7c0gUpL?W6GJGG#ifTop5Boj#+e#)OrIe+_qhFdU3YH_;O5%o_# zlbSs2Dht`Fxx3>DC7PSm5_3bqqPH63ao!eeJNp+-Q

    0<4xcSS|Cpr%)JwvQOY~ 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 SZgBEKlZf2%@&`=yx&I$9$`ZT) delta 96196 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 J(KXeB{~v+eIq?7h diff --git a/sources/common/src/SignalFactory.cpp b/sources/common/src/SignalFactory.cpp index a119f9c..0a7d157 100644 --- a/sources/common/src/SignalFactory.cpp +++ b/sources/common/src/SignalFactory.cpp @@ -61,10 +61,6 @@ std::vector PARSER::SignalFactory::Create(std::string &lo // Try to use creator. pSignal = creator->Create(logLine, lineNumber, sourceHandle); } - catch (const PARSER::EXCEPTIONS::EmptyString &) - { - // Just ignore it. The signal won't be created. - } catch (const PARSER::EXCEPTIONS::EvaluatorException &evaluatorError) { throw EXCEPTION::VcdException(EXCEPTION::Error::EXPRESSION_EVALUATION_ERROR, diff --git a/sources/parsers/inc/EvaluatorExceptions.h b/sources/parsers/inc/EvaluatorExceptions.h index 1a78de0..921ecaa 100644 --- a/sources/parsers/inc/EvaluatorExceptions.h +++ b/sources/parsers/inc/EvaluatorExceptions.h @@ -30,6 +30,8 @@ #pragma once #include +#include +#include /// The parser's exceptions. namespace PARSER @@ -71,9 +73,19 @@ namespace PARSER /// The exception constructor. /// /// @param rMessage The exception warning. - ConversionError(const std::string &rMessage) : - EvaluatorException(rMessage) + /// @param rInvalidString Out of specification string. + ConversionError(const std::string &rMessage, const std::string &rInvalidString) : + EvaluatorException(rMessage + ((IsStringEmpty(rInvalidString) ? "" : rInvalidString))) + { + } + private: + /// Checks if the string's empty or contains just white spaces. + /// + /// @param stringValue The string value to be verified. + /// @returns True for empty or all-white-spaces string. False otherwise. + bool IsStringEmpty(const std::string &stringValue) const { + return std::all_of(stringValue.begin(), stringValue.end(), [](char c) { return std::isspace(c); }); } }; @@ -115,17 +127,6 @@ namespace PARSER { } }; - - /// Empty string. - class EmptyString : public std::runtime_error - { - public: - /// The exception constructor. - EmptyString() : - std::runtime_error("Empty string.") - { - } - }; } } diff --git a/sources/parsers/inc/ExpressionNode.h b/sources/parsers/inc/ExpressionNode.h index 408f267..9ff10c2 100644 --- a/sources/parsers/inc/ExpressionNode.h +++ b/sources/parsers/inc/ExpressionNode.h @@ -31,8 +31,6 @@ #include #include -#include -#include #include "SafeUInt.h" #include "EvaluatorExceptions.h" @@ -81,15 +79,6 @@ namespace PARSER } protected: - /// Checks if the string's empty or contains just white spaces. - /// - /// @param stringValue The string value to be verified. - /// @returns True for empty or all-white-spaces string. False otherwise. - bool IsStringEmpty(const std::string &stringValue) const - { - return std::all_of(stringValue.begin(), stringValue.end(), [](char c) { return std::isspace(c); }); - } - /// The beginning of the index string. const size_t FIRST_STRING_CHARACTER_POS = 4; diff --git a/sources/parsers/src/DecimalNode.cpp b/sources/parsers/src/DecimalNode.cpp index f9b99f5..a546c2e 100644 --- a/sources/parsers/src/DecimalNode.cpp +++ b/sources/parsers/src/DecimalNode.cpp @@ -43,11 +43,7 @@ SafeUInt PARSER::DNDec::EvaluateUint() const } catch (const std::invalid_argument &) { - if (IsStringEmpty(stringValue)) - { - throw EXCEPTIONS::EmptyString(); - } - throw EXCEPTIONS::ConversionError("Cannot convert to decimal: " + stringValue); + throw EXCEPTIONS::ConversionError("Cannot convert to decimal: ", stringValue); } return value; @@ -67,11 +63,7 @@ SafeUInt PARSER::DNHex::EvaluateUint() const } catch (const std::invalid_argument &) { - if (IsStringEmpty(stringValue)) - { - throw EXCEPTIONS::EmptyString(); - } - throw EXCEPTIONS::ConversionError("Cannot convert to hex: " + stringValue); + throw EXCEPTIONS::ConversionError("Cannot convert to hex: ", stringValue); } return value; diff --git a/sources/parsers/src/FloatNode.cpp b/sources/parsers/src/FloatNode.cpp index ffb306f..2edc23d 100644 --- a/sources/parsers/src/FloatNode.cpp +++ b/sources/parsers/src/FloatNode.cpp @@ -39,11 +39,7 @@ std::tuple PARSER::FNFlt::EvaluateDouble() const } catch (const std::invalid_argument &) { - if (IsStringEmpty(stringValue)) - { - throw EXCEPTIONS::EmptyString(); - } - throw EXCEPTIONS::ConversionError("Cannot convert to double: " + stringValue); + throw EXCEPTIONS::ConversionError("Cannot convert to double: ", stringValue); } catch (const std::out_of_range &) { From c40cb76643c36409fbbace692c330593e37d43f5 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Thu, 15 Nov 2018 20:00:33 +0100 Subject: [PATCH 125/143] #25 Removed mutable --- sources/common/inc/EventSignalCreator.h | 2 +- sources/common/inc/FSignalCreator.h | 2 +- sources/common/inc/ISignalCreator.h | 2 +- sources/common/inc/SignalCreator.h | 2 +- sources/common/inc/SignalFactory.h | 4 ++-- sources/common/inc/TxtParser.h | 4 ++-- sources/common/inc/XmlEventSignalCreator.h | 2 +- sources/common/inc/XmlFSignalCreator.h | 2 +- sources/common/inc/XmlISignalCreator.h | 2 +- sources/common/inc/XmlSignalCreator.h | 12 ++++++------ sources/common/src/EventSignalCreator.cpp | 2 +- sources/common/src/FSignalCreator.cpp | 2 +- sources/common/src/ISignalCreator.cpp | 2 +- sources/common/src/SignalFactory.cpp | 2 +- sources/common/src/TxtParser.cpp | 2 +- sources/common/src/XmlEventSignalCreator.cpp | 2 +- sources/common/src/XmlFSignalCreator.cpp | 2 +- sources/common/src/XmlISignalCreator.cpp | 2 +- sources/common/src/XmlSignalCreator.cpp | 12 ++++++------ sources/parsers/inc/Evaluator.h | 2 +- sources/parsers/inc/ExpressionContext.h | 12 +++++------- sources/parsers/inc/ExpressionNode.h | 4 +--- sources/parsers/src/Evaluator.cpp | 2 +- 23 files changed, 39 insertions(+), 43 deletions(-) diff --git a/sources/common/inc/EventSignalCreator.h b/sources/common/inc/EventSignalCreator.h index e686cc3..253b52b 100644 --- a/sources/common/inc/EventSignalCreator.h +++ b/sources/common/inc/EventSignalCreator.h @@ -45,7 +45,7 @@ namespace PARSER /// @copydoc SignalCreator::Create() virtual SIGNAL::Signal *Create(const std::string &rLogLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle) const; + SIGNAL::SourceRegistry::HandleT sourceHandle); }; diff --git a/sources/common/inc/FSignalCreator.h b/sources/common/inc/FSignalCreator.h index ef443eb..b81dedd 100644 --- a/sources/common/inc/FSignalCreator.h +++ b/sources/common/inc/FSignalCreator.h @@ -47,7 +47,7 @@ namespace PARSER /// @copydoc SignalCreator::Create() virtual SIGNAL::Signal *Create(const std::string &rLogLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle) const; + SIGNAL::SourceRegistry::HandleT sourceHandle); }; diff --git a/sources/common/inc/ISignalCreator.h b/sources/common/inc/ISignalCreator.h index 84efcb5..0151dce 100644 --- a/sources/common/inc/ISignalCreator.h +++ b/sources/common/inc/ISignalCreator.h @@ -45,7 +45,7 @@ namespace PARSER /// @copydoc SignalCreator::Create() virtual SIGNAL::Signal *Create(const std::string &rLogLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle) const; + SIGNAL::SourceRegistry::HandleT sourceHandle); }; } diff --git a/sources/common/inc/SignalCreator.h b/sources/common/inc/SignalCreator.h index 75c8659..5b17611 100644 --- a/sources/common/inc/SignalCreator.h +++ b/sources/common/inc/SignalCreator.h @@ -71,7 +71,7 @@ namespace PARSER /// @return Signal pointer if the object has been created or nullptr. virtual SIGNAL::Signal *Create(const std::string &rLogLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle) const = 0; + SIGNAL::SourceRegistry::HandleT sourceHandle) = 0; /// Returns the regex. const std::string &GetRegEx() const diff --git a/sources/common/inc/SignalFactory.h b/sources/common/inc/SignalFactory.h index 86f0c39..46cfb60 100644 --- a/sources/common/inc/SignalFactory.h +++ b/sources/common/inc/SignalFactory.h @@ -56,7 +56,7 @@ namespace PARSER /// @param sourceHandle Signal source handle. std::vector Create(std::string &logLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle) const; + SIGNAL::SourceRegistry::HandleT sourceHandle); protected: @@ -73,7 +73,7 @@ namespace PARSER /// @param logLine The log line. std::string GetLogLineInfo(SIGNAL::SourceRegistry::HandleT sourceHandle, size_t lineNumber, - const std::string& logLine) const; + const std::string &logLine) const; }; } diff --git a/sources/common/inc/TxtParser.h b/sources/common/inc/TxtParser.h index 6f21d87..27ee399 100644 --- a/sources/common/inc/TxtParser.h +++ b/sources/common/inc/TxtParser.h @@ -53,7 +53,7 @@ namespace PARSER TxtParser(const std::string &rFilename, const std::string &rTimeBase, SIGNAL::SourceRegistry &rSourceRegistry, - const SignalFactory &rSignalFactory, + SignalFactory &rSignalFactory, bool verboseMode); /// The destructor. @@ -77,7 +77,7 @@ namespace PARSER SIGNAL::SourceRegistry::HandleT m_SourceHandle; /// The signal factory. - const SignalFactory &m_rSignalFactory; + SignalFactory &m_rSignalFactory; }; } diff --git a/sources/common/inc/XmlEventSignalCreator.h b/sources/common/inc/XmlEventSignalCreator.h index 21fc3cb..1f896b2 100644 --- a/sources/common/inc/XmlEventSignalCreator.h +++ b/sources/common/inc/XmlEventSignalCreator.h @@ -51,7 +51,7 @@ namespace PARSER /// @copydoc SignalCreator::Create() virtual SIGNAL::Signal *Create(const std::string &rLogLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle) const; + SIGNAL::SourceRegistry::HandleT sourceHandle); }; diff --git a/sources/common/inc/XmlFSignalCreator.h b/sources/common/inc/XmlFSignalCreator.h index c2fcd45..7d04e52 100644 --- a/sources/common/inc/XmlFSignalCreator.h +++ b/sources/common/inc/XmlFSignalCreator.h @@ -56,7 +56,7 @@ namespace PARSER /// @copydoc SignalCreator::Create() virtual SIGNAL::Signal *Create(const std::string &rLogLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle) const; + SIGNAL::SourceRegistry::HandleT sourceHandle); }; diff --git a/sources/common/inc/XmlISignalCreator.h b/sources/common/inc/XmlISignalCreator.h index 9d1b776..d92e7da 100644 --- a/sources/common/inc/XmlISignalCreator.h +++ b/sources/common/inc/XmlISignalCreator.h @@ -51,7 +51,7 @@ namespace PARSER /// @copydoc SignalCreator::Create() virtual SIGNAL::Signal *Create(const std::string &rLogLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle) const; + SIGNAL::SourceRegistry::HandleT sourceHandle); }; } diff --git a/sources/common/inc/XmlSignalCreator.h b/sources/common/inc/XmlSignalCreator.h index 58aaae2..3aa89b7 100644 --- a/sources/common/inc/XmlSignalCreator.h +++ b/sources/common/inc/XmlSignalCreator.h @@ -71,28 +71,28 @@ namespace PARSER /// /// @param rMatch The regular expression groups. /// @param lineNumber The log line number. - TIME::Timestamp GetTimestamp(const std::smatch &rMatch, - INSTRUMENT::Instrument::LineNumberT lineNumber) const; + TIME::Timestamp GetTimestamp(std::smatch &rMatch, + INSTRUMENT::Instrument::LineNumberT lineNumber); /// Returns the name of the signal. /// /// @param rMatch The regular expression groups. - std::string GetName(const std::smatch &rMatch) const; + std::string GetName(std::smatch &rMatch); /// Returns the decimal value of the signal. /// /// @param rMatch The regular expression groups. - SafeUInt GetDecimalValue(const std::smatch &rMatch) const; + SafeUInt GetDecimalValue(std::smatch &rMatch); /// Returns the float value of the signal. /// /// @param rMatch The regular expression groups. - std::string GetFloatValue(const std::smatch &rMatch) const; + std::string GetFloatValue(std::smatch &rMatch); /// Returns the size of the signal. /// /// @param rMatch The regular expression groups. - size_t GetSize(const std::smatch &rMatch) const; + size_t GetSize(std::smatch &rMatch); /// The expression to create the timestamp of the signal. const std::string m_Timestamp; diff --git a/sources/common/src/EventSignalCreator.cpp b/sources/common/src/EventSignalCreator.cpp index 5f37f4d..df2ba9a 100644 --- a/sources/common/src/EventSignalCreator.cpp +++ b/sources/common/src/EventSignalCreator.cpp @@ -29,7 +29,7 @@ SIGNAL::Signal *PARSER::EventSignalCreator::Create(const std::string &rLogLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle) const + SIGNAL::SourceRegistry::HandleT sourceHandle) { std::smatch result; diff --git a/sources/common/src/FSignalCreator.cpp b/sources/common/src/FSignalCreator.cpp index cd00df7..8f9ad2e 100644 --- a/sources/common/src/FSignalCreator.cpp +++ b/sources/common/src/FSignalCreator.cpp @@ -29,7 +29,7 @@ SIGNAL::Signal *PARSER::FSignalCreator::Create(const std::string &rLogLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle) const + SIGNAL::SourceRegistry::HandleT sourceHandle) { std::smatch result; diff --git a/sources/common/src/ISignalCreator.cpp b/sources/common/src/ISignalCreator.cpp index 0f4bb86..467f18a 100644 --- a/sources/common/src/ISignalCreator.cpp +++ b/sources/common/src/ISignalCreator.cpp @@ -29,7 +29,7 @@ SIGNAL::Signal *PARSER::ISignalCreator::Create(const std::string &rLogLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle) const + SIGNAL::SourceRegistry::HandleT sourceHandle) { std::smatch result; diff --git a/sources/common/src/SignalFactory.cpp b/sources/common/src/SignalFactory.cpp index 0a7d157..11ce806 100644 --- a/sources/common/src/SignalFactory.cpp +++ b/sources/common/src/SignalFactory.cpp @@ -42,7 +42,7 @@ PARSER::SignalFactory::SignalFactory() : std::vector PARSER::SignalFactory::Create(std::string &logLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle) const + SIGNAL::SourceRegistry::HandleT sourceHandle) { if (m_vpSignalCreators.empty()) { diff --git a/sources/common/src/TxtParser.cpp b/sources/common/src/TxtParser.cpp index 22e3e1a..b96a5fc 100644 --- a/sources/common/src/TxtParser.cpp +++ b/sources/common/src/TxtParser.cpp @@ -34,7 +34,7 @@ PARSER::TxtParser::TxtParser(const std::string &rFilename, const std::string &rTimeBase, SIGNAL::SourceRegistry &rSourceRegistry, - const PARSER::SignalFactory &rSignalFactory, + PARSER::SignalFactory &rSignalFactory, bool verboseMode) : LogParser(rFilename, rTimeBase, rSourceRegistry, verboseMode), m_ValidLines(0), diff --git a/sources/common/src/XmlEventSignalCreator.cpp b/sources/common/src/XmlEventSignalCreator.cpp index 8bef82a..56e5e9d 100644 --- a/sources/common/src/XmlEventSignalCreator.cpp +++ b/sources/common/src/XmlEventSignalCreator.cpp @@ -29,7 +29,7 @@ SIGNAL::Signal *PARSER::XmlEventSignalCreator::Create(const std::string &rLogLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle) const + SIGNAL::SourceRegistry::HandleT sourceHandle) { std::smatch result; diff --git a/sources/common/src/XmlFSignalCreator.cpp b/sources/common/src/XmlFSignalCreator.cpp index 657ef7f..6cbe0a9 100644 --- a/sources/common/src/XmlFSignalCreator.cpp +++ b/sources/common/src/XmlFSignalCreator.cpp @@ -29,7 +29,7 @@ SIGNAL::Signal *PARSER::XmlFSignalCreator::Create(const std::string &rLogLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle) const + SIGNAL::SourceRegistry::HandleT sourceHandle) { std::smatch result; diff --git a/sources/common/src/XmlISignalCreator.cpp b/sources/common/src/XmlISignalCreator.cpp index 410131f..3d0528e 100644 --- a/sources/common/src/XmlISignalCreator.cpp +++ b/sources/common/src/XmlISignalCreator.cpp @@ -29,7 +29,7 @@ SIGNAL::Signal *PARSER::XmlISignalCreator::Create(const std::string &rLogLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle) const + SIGNAL::SourceRegistry::HandleT sourceHandle) { std::smatch result; diff --git a/sources/common/src/XmlSignalCreator.cpp b/sources/common/src/XmlSignalCreator.cpp index f4c8246..a2339b5 100644 --- a/sources/common/src/XmlSignalCreator.cpp +++ b/sources/common/src/XmlSignalCreator.cpp @@ -26,26 +26,26 @@ #include "XmlSignalCreator.h" -TIME::Timestamp PARSER::XmlSignalCreator::GetTimestamp(const std::smatch &rMatch, - INSTRUMENT::Instrument::LineNumberT lineNumber) const +TIME::Timestamp PARSER::XmlSignalCreator::GetTimestamp(std::smatch &rMatch, + INSTRUMENT::Instrument::LineNumberT lineNumber) { m_TimestampEvaluator.SetContext(&rMatch, lineNumber); return m_TimestampEvaluator.EvaluateUint(); } -std::string PARSER::XmlSignalCreator::GetName(const std::smatch &rMatch) const +std::string PARSER::XmlSignalCreator::GetName(std::smatch &rMatch) { m_NameEvaluator.SetContext(&rMatch, 0); return m_NameEvaluator.EvaluateString(); } -SafeUInt PARSER::XmlSignalCreator::GetDecimalValue(const std::smatch &rMatch) const +SafeUInt PARSER::XmlSignalCreator::GetDecimalValue(std::smatch &rMatch) { m_DecimalEvaluator.SetContext(&rMatch, 0); return m_DecimalEvaluator.EvaluateUint(); } -std::string PARSER::XmlSignalCreator::GetFloatValue(const std::smatch &rMatch) const +std::string PARSER::XmlSignalCreator::GetFloatValue(std::smatch &rMatch) { m_FloatEvaluator.SetContext(&rMatch, 0); @@ -56,7 +56,7 @@ std::string PARSER::XmlSignalCreator::GetFloatValue(const std::smatch &rMatch) c return stringValue; } -size_t PARSER::XmlSignalCreator::GetSize(const std::smatch &rMatch) const +size_t PARSER::XmlSignalCreator::GetSize(std::smatch &rMatch) { m_SizeEvaluator.SetContext(&rMatch, 0); return static_cast(m_SizeEvaluator.EvaluateUint()); diff --git a/sources/parsers/inc/Evaluator.h b/sources/parsers/inc/Evaluator.h index ab5dc95..e1eb3d5 100644 --- a/sources/parsers/inc/Evaluator.h +++ b/sources/parsers/inc/Evaluator.h @@ -74,7 +74,7 @@ namespace PARSER /// /// @param pGroups The pointer to the parsed regex groups. /// @param lineNo The log line number. - void SetContext(const std::smatch *pGroups, uint64_t lineNo) const; + void SetContext(std::smatch *pGroups, uint64_t lineNo); /// Returns the calculation context. /// diff --git a/sources/parsers/inc/ExpressionContext.h b/sources/parsers/inc/ExpressionContext.h index a9edc4b..e73c104 100644 --- a/sources/parsers/inc/ExpressionContext.h +++ b/sources/parsers/inc/ExpressionContext.h @@ -51,15 +51,13 @@ namespace PARSER /// /// @param pGroups The pointer to the parsed regex groups. /// @param lineNo The log line number. - ExpressionContext(const std::smatch *pGroups, uint64_t lineNo) : + ExpressionContext(std::smatch *pGroups, uint64_t lineNo) : m_pGroups(pGroups), m_LineNo(lineNo) {} /// Expression context destructor. - ~ExpressionContext() - { - } + ~ExpressionContext() = default; /// Set the expression context. /// @@ -68,7 +66,7 @@ namespace PARSER /// /// @param pGroups The pointer to the parsed regex groups. /// @param lineNo The log line number. - void Set(const std::smatch *pGroups, uint64_t lineNo) const + void Set(std::smatch *pGroups, uint64_t lineNo) { m_pGroups = pGroups; m_LineNo = lineNo; @@ -122,10 +120,10 @@ namespace PARSER private: /// A pointer to the regex groups (the context of the expression). - const mutable std::smatch *m_pGroups; + std::smatch *m_pGroups; /// The log line number. - mutable uint64_t m_LineNo; + uint64_t m_LineNo; /// The expression. ExpressionNode *m_pExpression; diff --git a/sources/parsers/inc/ExpressionNode.h b/sources/parsers/inc/ExpressionNode.h index 9ff10c2..fcbfbe0 100644 --- a/sources/parsers/inc/ExpressionNode.h +++ b/sources/parsers/inc/ExpressionNode.h @@ -56,9 +56,7 @@ namespace PARSER {} /// Destroys the expression node. - virtual ~ExpressionNode() - { - } + virtual ~ExpressionNode() = default; /// Evaluates the complete 'uint' tree and returns the expression value. virtual SafeUInt EvaluateUint() const diff --git a/sources/parsers/src/Evaluator.cpp b/sources/parsers/src/Evaluator.cpp index aaa78ec..ffefa3d 100644 --- a/sources/parsers/src/Evaluator.cpp +++ b/sources/parsers/src/Evaluator.cpp @@ -86,7 +86,7 @@ void PARSER::Evaluator::ParseStringString(const std::string &input) m_Expression = input; } -void PARSER::Evaluator::SetContext(const std::smatch *pGroups, uint64_t lineNo) const +void PARSER::Evaluator::SetContext(std::smatch *pGroups, uint64_t lineNo) { m_Context.Set(pGroups, lineNo); } From baa4649b1713d85a3b14ae3ac7500c26dddd6fdb Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Fri, 16 Nov 2018 23:42:35 +0100 Subject: [PATCH 126/143] #25 Fixed string comparisons --- sources/common/src/XmlSignalFactory.cpp | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/sources/common/src/XmlSignalFactory.cpp b/sources/common/src/XmlSignalFactory.cpp index 533a0f2..4db66e8 100644 --- a/sources/common/src/XmlSignalFactory.cpp +++ b/sources/common/src/XmlSignalFactory.cpp @@ -8,7 +8,7 @@ /// /// @ingroup Parser /// -/// @par Copyright (c) 2017 vcdMaker team +/// @par Copyright (c) 2018 vcdMaker team /// /// Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), @@ -43,27 +43,27 @@ PARSER::XmlDescription::XmlDescription(const pugi::xml_node &rNode) : { for (const pugi::xml_node &tag : rNode.children()) { - if (!std::strcmp("line", tag.name())) + if (0 == std::strcmp("line", tag.name())) { m_RegexLine = tag.child_value(); } - if (!std::strcmp("timestamp", tag.name())) + if (0 == std::strcmp("timestamp", tag.name())) { m_Timestamp = tag.child_value(); } - if (!std::strcmp("name", tag.name())) + if (0 == std::strcmp("name", tag.name())) { m_Name = tag.child_value(); } - if (!std::strcmp("value", tag.name())) + if (0 == std::strcmp("value", tag.name())) { m_Value = tag.child_value(); } - if (!std::strcmp("size", tag.name())) + if (0 == std::strcmp("size", tag.name())) { m_Size = tag.child_value(); } @@ -138,26 +138,24 @@ PARSER::XmlSignalFactory::XmlSignalFactory(const std::string &rXmlFileName) : // Traverse the XML. for (const pugi::xml_node &signal : signals.children()) { - if (!std::strcmp("vector", signal.name())) + std::unique_ptr description = std::make_unique(signal); + if (0 == std::strcmp("vector", signal.name())) { - std::unique_ptr description = std::make_unique(signal); m_vpSignalCreators.push_back(std::make_unique(description->GetRegex(), description->GetTimestamp(), description->GetName(), description->GetValue(), description->GetSize())); } - else if (!std::strcmp("real", signal.name())) + else if (0 == std::strcmp("real", signal.name())) { - std::unique_ptr description = std::make_unique(signal); m_vpSignalCreators.push_back(std::make_unique(description->GetRegex(), description->GetTimestamp(), description->GetName(), description->GetValue())); } - else if (!std::strcmp("event", signal.name())) + else if (0 == std::strcmp("event", signal.name())) { - std::unique_ptr description = std::make_unique(signal); m_vpSignalCreators.push_back(std::make_unique(description->GetRegex(), description->GetTimestamp(), description->GetName())); From 5f5ebddbee64597952f74a314f03e10f7ccc2501 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Fri, 16 Nov 2018 23:43:29 +0100 Subject: [PATCH 127/143] #25 Removed magic numbers --- sources/parsers/inc/StringNode.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sources/parsers/inc/StringNode.h b/sources/parsers/inc/StringNode.h index 8ee4f53..632b926 100644 --- a/sources/parsers/inc/StringNode.h +++ b/sources/parsers/inc/StringNode.h @@ -56,7 +56,10 @@ namespace PARSER /// @copydoc ExpressionNode::EvaluateString() virtual std::string EvaluateString() const { - return std::string(m_rString, 1, m_rString.length() - 2); + const uint32_t SKIP_FIRST_QUOTE = 1U; + const uint32_t TWO_QUOTE_SIGNS = 2U; + + return std::string(m_rString, SKIP_FIRST_QUOTE, m_rString.length() - TWO_QUOTE_SIGNS); } }; From 7505958f4f697460035abb87eea4cde09d58dd1a Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Fri, 16 Nov 2018 23:44:33 +0100 Subject: [PATCH 128/143] #25 Set debug in debug --- sources/parsers/src/Evaluator.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sources/parsers/src/Evaluator.cpp b/sources/parsers/src/Evaluator.cpp index ffefa3d..1f6c5dd 100644 --- a/sources/parsers/src/Evaluator.cpp +++ b/sources/parsers/src/Evaluator.cpp @@ -147,13 +147,13 @@ bool PARSER::Evaluator::ParseDecimalStream(std::istream &in) { DecimalScanner scanner(&in); #if defined(PARSER_DEBUG) - scanner.set_debug(false); + scanner.set_debug(true); #endif m_pDecimalLexer = &scanner; DecimalParser parser(*this); #if defined(PARSER_DEBUG) - parser.set_debug_level(false); + parser.set_debug_level(1); #endif return (parser.parse() == 0); } @@ -162,13 +162,13 @@ bool PARSER::Evaluator::ParseFloatStream(std::istream &in) { FloatScanner scanner(&in); #if defined(PARSER_DEBUG) - scanner.set_debug(false); + scanner.set_debug(true); #endif m_pFloatLexer = &scanner; FloatParser parser(*this); #if defined(PARSER_DEBUG) - parser.set_debug_level(false); + parser.set_debug_level(1); #endif return (parser.parse() == 0); } @@ -177,13 +177,13 @@ bool PARSER::Evaluator::ParseStringStream(std::istream &in) { StringScanner scanner(&in); #if defined(PARSER_DEBUG) - scanner.set_debug(false); + scanner.set_debug(true); #endif m_pStringLexer = &scanner; StringParser parser(*this); #if defined(PARSER_DEBUG) - parser.set_debug_level(false); + parser.set_debug_level(1); #endif return (parser.parse() == 0); } From f1844b33b49c7a792963a2a853c959be83cd70f8 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Sat, 17 Nov 2018 22:13:39 +0100 Subject: [PATCH 129/143] #25 Added FloatResult --- sources/cmake/parserSources.cmake | 2 + sources/common/src/XmlSignalCreator.cpp | 7 +- sources/parsers/inc/Evaluator.h | 2 +- sources/parsers/inc/ExpressionNode.h | 6 +- sources/parsers/inc/FloatNode.h | 17 ++-- sources/parsers/inc/FloatResult.h | 70 +++++++++++++++++ sources/parsers/src/Evaluator.cpp | 14 +--- sources/parsers/src/FloatNode.cpp | 78 ++++++------------- sources/parsers/src/FloatResult.cpp | 61 +++++++++++++++ .../vcdMakerParsers/vcdMakerParsers.vcxproj | 2 + .../vcdMakerParsers.vcxproj.filters | 6 ++ 11 files changed, 180 insertions(+), 85 deletions(-) create mode 100644 sources/parsers/inc/FloatResult.h create mode 100644 sources/parsers/src/FloatResult.cpp diff --git a/sources/cmake/parserSources.cmake b/sources/cmake/parserSources.cmake index 1d820d8..73891fc 100644 --- a/sources/cmake/parserSources.cmake +++ b/sources/cmake/parserSources.cmake @@ -30,6 +30,7 @@ set(PARSER_SOURCES ${PARSER_SOURCES_DIR}/Evaluator.cpp ${PARSER_SOURCES_DIR}/DecimalNode.cpp ${PARSER_SOURCES_DIR}/FloatNode.cpp + ${PARSER_SOURCES_DIR}/FloatResult.cpp ${PARSER_GEN_SOURCES_DIR}/FloatParser.cpp ${PARSER_GEN_SOURCES_DIR}/FloatScanner.cpp ${PARSER_GEN_SOURCES_DIR}/DecimalScanner.cpp @@ -47,6 +48,7 @@ set(PARSER_HEADERS ${PARSER_HEADERS_DIR}/StringScanner.h ${PARSER_HEADERS_DIR}/Evaluator.h ${PARSER_HEADERS_DIR}/FloatNode.h + ${PARSER_HEADERS_DIR}/FloatResult.h ${PARSER_HEADERS_DIR}/ExpressionContext.h ${PARSER_HEADERS_DIR}/FloatScanner.h ${PARSER_HEADERS_DIR}/StringNode.h diff --git a/sources/common/src/XmlSignalCreator.cpp b/sources/common/src/XmlSignalCreator.cpp index a2339b5..b09db7f 100644 --- a/sources/common/src/XmlSignalCreator.cpp +++ b/sources/common/src/XmlSignalCreator.cpp @@ -48,12 +48,7 @@ SafeUInt PARSER::XmlSignalCreator::GetDecimalValue(std::smatch &rMatch std::string PARSER::XmlSignalCreator::GetFloatValue(std::smatch &rMatch) { m_FloatEvaluator.SetContext(&rMatch, 0); - - double value; - std::string stringValue; - std::tie(value, stringValue) = m_FloatEvaluator.EvaluateDouble(); - - return stringValue; + return m_FloatEvaluator.EvaluateDouble(); } size_t PARSER::XmlSignalCreator::GetSize(std::smatch &rMatch) diff --git a/sources/parsers/inc/Evaluator.h b/sources/parsers/inc/Evaluator.h index e1eb3d5..3a80d67 100644 --- a/sources/parsers/inc/Evaluator.h +++ b/sources/parsers/inc/Evaluator.h @@ -82,7 +82,7 @@ namespace PARSER ExpressionContext &GetContext() const; /// Evaluates the expression expecting the 'double' value. - std::tuple EvaluateDouble() const; + std::string EvaluateDouble() const; /// Evaluates the expression expecting the 'uint' value. uint64_t EvaluateUint() const; diff --git a/sources/parsers/inc/ExpressionNode.h b/sources/parsers/inc/ExpressionNode.h index fcbfbe0..5adf304 100644 --- a/sources/parsers/inc/ExpressionNode.h +++ b/sources/parsers/inc/ExpressionNode.h @@ -30,10 +30,10 @@ #pragma once #include -#include #include "SafeUInt.h" #include "EvaluatorExceptions.h" +#include "FloatResult.h" namespace PARSER { @@ -65,9 +65,9 @@ namespace PARSER } /// Evaluates the complete 'double' tree and returns the expression value. - virtual std::tuple EvaluateDouble() const + virtual FloatResult EvaluateDouble() const { - return std::make_tuple(0.0, ""); + return FloatResult(0.0); } /// Evaluates the complete 'double' tree and returns the expression value. diff --git a/sources/parsers/inc/FloatNode.h b/sources/parsers/inc/FloatNode.h index 8f11c4a..53ee6d5 100644 --- a/sources/parsers/inc/FloatNode.h +++ b/sources/parsers/inc/FloatNode.h @@ -31,6 +31,7 @@ #include #include +#include #include "ExpressionNode.h" #include "ExpressionContext.h" @@ -55,9 +56,9 @@ namespace PARSER } /// @copydoc ExpressionNode::EvaluateDouble() - virtual std::tuple EvaluateDouble() const + virtual FloatResult EvaluateDouble() const { - return std::make_tuple(m_Value, ""); + return FloatResult(m_Value); } }; @@ -82,7 +83,7 @@ namespace PARSER } /// @copydoc ExpressionNode::EvaluateDouble() - virtual std::tuple EvaluateDouble() const; + virtual FloatResult EvaluateDouble() const; }; /// The class represents the negate node type. @@ -108,7 +109,7 @@ namespace PARSER } /// @copydoc ExpressionNode::EvaluateDouble() - virtual std::tuple EvaluateDouble() const; + virtual FloatResult EvaluateDouble() const; }; /// The class represents the addition node type. @@ -139,7 +140,7 @@ namespace PARSER } /// @copydoc ExpressionNode::EvaluateDouble() - virtual std::tuple EvaluateDouble() const; + virtual FloatResult EvaluateDouble() const; }; /// The class represents the subtraction node type. @@ -170,7 +171,7 @@ namespace PARSER } /// @copydoc ExpressionNode::EvaluateDouble() - virtual std::tuple EvaluateDouble() const; + virtual FloatResult EvaluateDouble() const; }; /// The class represents the multiplication node type. @@ -201,7 +202,7 @@ namespace PARSER } /// @copydoc ExpressionNode::EvaluateDouble() - virtual std::tuple EvaluateDouble() const; + virtual FloatResult EvaluateDouble() const; }; /// The class represents the division node type. @@ -232,6 +233,6 @@ namespace PARSER } /// @copydoc ExpressionNode::EvaluateDouble() - virtual std::tuple EvaluateDouble() const; + virtual FloatResult EvaluateDouble() const; }; } diff --git a/sources/parsers/inc/FloatResult.h b/sources/parsers/inc/FloatResult.h new file mode 100644 index 0000000..8de49e9 --- /dev/null +++ b/sources/parsers/inc/FloatResult.h @@ -0,0 +1,70 @@ +/// @file parsers/inc/FloatResult.h +/// +/// A class representing the result of float calculations. +/// +/// @par Full Description +/// A class representing the result of float calculations. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2018 vcdMaker team +/// +/// 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. + +#pragma once + +#include + +namespace PARSER +{ + /// The float result class + class FloatResult + { + public: + /// The string based float constructor. + /// + /// @param rFloatString The string from which the float result is constructed. + FloatResult(const std::string &rFloatString); + + /// The direct float constructor. + /// + /// @param floatValue The float value from which the float result is constructed. + FloatResult(double floatValue) : + m_Value(floatValue), + m_String("") + {} + + /// Returns the value of the float result. + double GetFloatValue() const + { + return m_Value; + } + + /// Returns the string representing the value of the float result. + std::string GetFloatString() const; + + private: + + /// The float value. + double m_Value; + + /// The float string. + const std::string m_String; + }; +} diff --git a/sources/parsers/src/Evaluator.cpp b/sources/parsers/src/Evaluator.cpp index 1f6c5dd..12a5200 100644 --- a/sources/parsers/src/Evaluator.cpp +++ b/sources/parsers/src/Evaluator.cpp @@ -96,27 +96,19 @@ PARSER::ExpressionContext &PARSER::Evaluator::GetContext() const return m_Context; } -std::tuple PARSER::Evaluator::EvaluateDouble() const +std::string PARSER::Evaluator::EvaluateDouble() const { - double value; std::string stringValue; try { - std::tie(value, stringValue) = m_Context.GetExpression()->EvaluateDouble(); + stringValue = m_Context.GetExpression()->EvaluateDouble().GetFloatString(); } catch (const EXCEPTIONS::EvaluatorException &evaluatorError) { throw PARSER::EXCEPTIONS::EvaluatorException(EvaluationErrorMessage(evaluatorError.what())); } - if (stringValue.empty()) - { - std::ostringstream strStream; - strStream << value; - stringValue = strStream.str(); - } - - return std::make_tuple(value, stringValue); + return stringValue; } uint64_t PARSER::Evaluator::EvaluateUint() const diff --git a/sources/parsers/src/FloatNode.cpp b/sources/parsers/src/FloatNode.cpp index 2edc23d..de8a5b4 100644 --- a/sources/parsers/src/FloatNode.cpp +++ b/sources/parsers/src/FloatNode.cpp @@ -29,101 +29,67 @@ #include "FloatNode.h" -std::tuple PARSER::FNFlt::EvaluateDouble() const +PARSER::FloatResult PARSER::FNFlt::EvaluateDouble() const { - double value = 0; std::string stringValue(m_rContext.GetElement(m_Index)); - try - { - value = std::stod(stringValue, nullptr); - } - catch (const std::invalid_argument &) - { - throw EXCEPTIONS::ConversionError("Cannot convert to double: ", stringValue); - } - catch (const std::out_of_range &) - { - throw EXCEPTIONS::Overflow("Out of range double value: " + stringValue); - } - return std::make_tuple(value, stringValue); + return FloatResult(stringValue); } -std::tuple PARSER::FNNegate::EvaluateDouble() const +PARSER::FloatResult PARSER::FNNegate::EvaluateDouble() const { - double value; - std::string stringValue; - std::tie(value, stringValue) = m_pNode->EvaluateDouble(); - return std::make_tuple(-value, ""); + double value = m_pNode->EvaluateDouble().GetFloatValue(); + return FloatResult(-value); } -std::tuple PARSER::FNAdd::EvaluateDouble() const +PARSER::FloatResult PARSER::FNAdd::EvaluateDouble() const { - double leftValue; - std::string leftStringValue; - std::tie(leftValue, leftStringValue) = m_pLeft->EvaluateDouble(); - - double rightValue; - std::string rightStringValue; - std::tie(rightValue, rightStringValue) = m_pRight->EvaluateDouble(); + double leftValue = m_pLeft->EvaluateDouble().GetFloatValue(); + double rightValue = m_pRight->EvaluateDouble().GetFloatValue(); if ((std::numeric_limits::max() - leftValue) < rightValue) { throw EXCEPTIONS::Overflow("Overflow while adding."); } - return std::make_tuple(leftValue + rightValue, ""); + return FloatResult(leftValue + rightValue); } -std::tuple PARSER::FNSubtract::EvaluateDouble() const +PARSER::FloatResult PARSER::FNSubtract::EvaluateDouble() const { - double leftValue; - std::string leftStringValue; - std::tie(leftValue, leftStringValue) = m_pLeft->EvaluateDouble(); - - double rightValue; - std::string rightStringValue; - std::tie(rightValue, rightStringValue) = m_pRight->EvaluateDouble(); + double leftValue = m_pLeft->EvaluateDouble().GetFloatValue(); + double rightValue = m_pRight->EvaluateDouble().GetFloatValue(); if ((std::numeric_limits::min() + rightValue) > leftValue) { throw EXCEPTIONS::Overflow("Underflow while substracting."); } - return std::make_tuple(leftValue - rightValue, ""); + return FloatResult(leftValue - rightValue); } -std::tuple PARSER::FNMultiply::EvaluateDouble() const -{ - double leftValue; - std::string leftStringValue; - std::tie(leftValue, leftStringValue) = m_pLeft->EvaluateDouble(); - double rightValue; - std::string rightStringValue; - std::tie(rightValue, rightStringValue) = m_pRight->EvaluateDouble(); +PARSER::FloatResult PARSER::FNMultiply::EvaluateDouble() const +{ + double leftValue = m_pLeft->EvaluateDouble().GetFloatValue(); + double rightValue = m_pRight->EvaluateDouble().GetFloatValue(); if ((std::numeric_limits::max() / leftValue) < rightValue) { throw EXCEPTIONS::Overflow("Overflow while multiplying."); } - return std::make_tuple(leftValue * rightValue, ""); + return FloatResult(leftValue * rightValue); } -std::tuple PARSER::FNDivide::EvaluateDouble() const +PARSER::FloatResult PARSER::FNDivide::EvaluateDouble() const { - double leftValue; - std::string leftStringValue; - std::tie(leftValue, leftStringValue) = m_pLeft->EvaluateDouble(); - - double rightValue; - std::string rightStringValue; - std::tie(rightValue, rightStringValue) = m_pRight->EvaluateDouble(); + double leftValue = m_pLeft->EvaluateDouble().GetFloatValue(); + double rightValue = m_pRight->EvaluateDouble().GetFloatValue(); if (0 == rightValue) { throw EXCEPTIONS::DivByZero(""); } - return std::make_tuple(leftValue / rightValue, ""); + return FloatResult(leftValue / rightValue); } diff --git a/sources/parsers/src/FloatResult.cpp b/sources/parsers/src/FloatResult.cpp new file mode 100644 index 0000000..687d820 --- /dev/null +++ b/sources/parsers/src/FloatResult.cpp @@ -0,0 +1,61 @@ +/// @file parsers/src/FloatResult.cpp +/// +/// A class representing the result of float calculations. +/// +/// @par Full Description +/// A class representing the result of float calculations. +/// +/// @ingroup Parser +/// +/// @par Copyright (c) 2018 vcdMaker team +/// +/// 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 + +#include "FloatResult.h" +#include "EvaluatorExceptions.h" + +PARSER::FloatResult::FloatResult(const std::string &rFloatString) : + m_String(rFloatString) +{ + try + { + m_Value = std::stod(rFloatString, nullptr); + } + catch (const std::invalid_argument &) + { + throw EXCEPTIONS::ConversionError("Cannot convert to double: ", rFloatString); + } + catch (const std::out_of_range &) + { + throw EXCEPTIONS::Overflow("Out of range double value: " + rFloatString); + } +} + +std::string PARSER::FloatResult::GetFloatString() const +{ + if (m_String.empty()) + { + std::ostringstream strStream; + strStream << m_Value; + return strStream.str(); + } + return m_String; +} diff --git a/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj b/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj index 127d4ed..3bb5e6f 100644 --- a/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj +++ b/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj @@ -128,6 +128,7 @@ + @@ -144,6 +145,7 @@ + diff --git a/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj.filters b/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj.filters index 5d8d85b..52073da 100644 --- a/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj.filters +++ b/windows/vcdMaker/vcdMakerParsers/vcdMakerParsers.vcxproj.filters @@ -41,6 +41,9 @@ Source Files + + Source Files + @@ -94,5 +97,8 @@ Header Files + + Header Files + \ No newline at end of file From 7671dabcbf889ac62b968bc74785a664fb7e6cd1 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Sat, 17 Nov 2018 22:59:12 +0100 Subject: [PATCH 130/143] #25 Removed power of 2 --- sources/common/inc/ISignal.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/common/inc/ISignal.h b/sources/common/inc/ISignal.h index d596a8c..04f5a59 100644 --- a/sources/common/inc/ISignal.h +++ b/sources/common/inc/ISignal.h @@ -33,7 +33,7 @@ #include "Signal.h" #include "VcdException.h" -#include +#include namespace SIGNAL { @@ -61,7 +61,7 @@ namespace SIGNAL Signal(name, size, rTimestamp, "wire", sourceHandle), m_Value(value) { - if (value >= std::pow(2, size)) + if (value > (std::numeric_limits::max() >> (64 - size))) { throw EXCEPTION::TooSmallVector(value, size); } From 1ac1c4017e05911b5e31100ed01b818fc115a6c0 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Sun, 18 Nov 2018 22:20:05 +0100 Subject: [PATCH 131/143] #25 Check for 0 size vectors --- sources/common/inc/ISignal.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/common/inc/ISignal.h b/sources/common/inc/ISignal.h index 04f5a59..e4ef5df 100644 --- a/sources/common/inc/ISignal.h +++ b/sources/common/inc/ISignal.h @@ -61,7 +61,7 @@ namespace SIGNAL Signal(name, size, rTimestamp, "wire", sourceHandle), m_Value(value) { - if (value > (std::numeric_limits::max() >> (64 - size))) + if ((value > (std::numeric_limits::max() >> (64 - size))) || (0 == size)) { throw EXCEPTION::TooSmallVector(value, size); } From a2db2590107960d742d8bc0ca72b68b4db33986f Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Sun, 18 Nov 2018 22:50:09 +0100 Subject: [PATCH 132/143] #25 Double to string conversion --- sources/parsers/src/FloatResult.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/sources/parsers/src/FloatResult.cpp b/sources/parsers/src/FloatResult.cpp index 687d820..ca40e75 100644 --- a/sources/parsers/src/FloatResult.cpp +++ b/sources/parsers/src/FloatResult.cpp @@ -27,8 +27,6 @@ /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS /// IN THE SOFTWARE. -#include - #include "FloatResult.h" #include "EvaluatorExceptions.h" @@ -53,9 +51,7 @@ std::string PARSER::FloatResult::GetFloatString() const { if (m_String.empty()) { - std::ostringstream strStream; - strStream << m_Value; - return strStream.str(); + return std::to_string(m_Value); } return m_String; } From 87fd6c82bd5385318f3c6534151648d851d19254 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Sun, 18 Nov 2018 22:51:02 +0100 Subject: [PATCH 133/143] #25 Check for vector sizes exceeding 64 bits --- sources/common/doc/manual.odt | Bin 560334 -> 560416 bytes sources/common/doc/manual.pdf | Bin 866607 -> 866793 bytes sources/common/inc/ISignal.h | 10 +--------- sources/common/inc/VcdExceptionList.h | 3 +++ sources/common/src/ISignal.cpp | 21 +++++++++++++++++++++ 5 files changed, 25 insertions(+), 9 deletions(-) diff --git a/sources/common/doc/manual.odt b/sources/common/doc/manual.odt index f7ba0fee2f94a901997e13445aa2a85fe3083ad6..a755f5c40df21bc305fa8fb9fc2cc4f8cde18d08 100644 GIT binary patch delta 22714 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%0DydW##;~=BP93+ F?0>yE(v1KB delta 22746 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 S0RVK6`!QhFJA$D%!Tt}4IDRew diff --git a/sources/common/doc/manual.pdf b/sources/common/doc/manual.pdf index 9bbdc1bf0d8ecfddbd88c64a8cabcb4a9ba04104..661b9e76202c1ff18325848433cb6d665b7f75d9 100644 GIT binary patch delta 5537 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 delta 5392 zcmai1c~}%j7H2pX=;;9zHG-lf$mu~J)z#Gs2r7838oUq#9tcK7QG*vIGO*67fe0Ff z@-|V#Ksz0YzQ2)r!D$=lgd4>G%D<_v#(>-tW~stOxt+ zK$1aYFgI8jEDctMe;BL{Hiv9CChLpR{($tc=V3371@_%BDKlw`CjG|N`W_a4SRA-+ zc4}nO;~0Ja;9&=@B{p`=J|8zR_&~~zobh3g5+mMJkKH}*?v8>-eI^`TQTu8#?jNx5 zuSqtUX0M)~^u0Lw)y1{zE`48pC_OCQx?unIK3V3O9&Z1BFF#`3?WhrjCFS$NlCDNt^(oEV zLq+VdJv_1dcQe*+pA$bw_}AdfKWF9^E$O-P<@!}Iu($sAE<69ComnqmH(rWaT5v3`putes{bp|R4|I`}N3PlZ6wQSvL2Ezt>au2MV1w0{ zXUS{h>cGt4b8CY# z4-IP^85?1J_}2w}Y)3|1$@!#a-=duT+uXXB<#-kMSyb2GF=@e-x^T^-6rVzurjqvB zuI;V7`JM}z?+Tnl=dCM!z5VHnJjY#6k3?SYIN(7yDYg{UM{Up?IlVnmzwyVD$uE`+ zIBegp%iO9`GuLRdLf>&K>i;PF&}P41?Ki$XM{ddUZ&&#I#EjQjX2mJekm}eIHZag; zhxeQznSo1I-T26*Uwxrz&*b!gT2t*fU_C_0#Z zXRnV>!0?%oSFSCnJX_)AmcJQjEtzb6W6H7F^@#3Ii zDTgO}rtB)-c6o4OiO2BtrDcI`kNOSEZYVLU`K+_!mbyxpSyf#N#>L(A8Xh}nZd93L zL)UD#`VSj6b-a|jc+`SB+xRa+27hoZx2Cvnz)!l0j5NW2(cROzO*I`)9o*Ed--7=h zt#Q$JIyG4Mv2po`ec_?P!ko>Ib9`QJcwN_}{zl{2u$_y$RCwIBZhV+G?RdFYK}y{x zyQBS{j6O1%I@Htf`?|C-(=+zm@rYY=H_*&)ZCtOc7f(xrY`pqS@9{JJQ?gYztC`4< zKRo@F-DOna)-{D-}-$IJ5U*=nnxBI2@^%aY4zr(Q!MVa~WKir6Sco1E*C_LNE zX?E?L4~mNKIoUQ2^DS7ISW@zFX=px1U}A0sthsAz^q#RXe|EX|`Kc3(wF~KtgDbus zcrl^F#H+ynXGZTi@GFPJX$iCK&u6#0J0t5-?dtH=7EOE3+;v+i)XtACI^*3w%Oc|Q za~noY813|M(6h^%(obJL%;2mmg}bshg`?7n+wnrK^YsvMeN|S%=*m?M zk2(ZTF5kuX`*`#l@xi@6r|iiq9$7jg*7+Bkz2~6akciutD+}K=afwyNSLxPI>el@_ z>dZ-p+h=NDj81!)`p>=Tfo0T_q^{F%olOWHJh2m<-6x^ujrFa1tFLfqKWzu>u+o;Y zU?tJ$veI^`t?|obt-~xk$hb1DbE9TaoXD~wKI}&ExV&1MikJ4Fyo{?KYiF2aYfp+X zxaUI^g zOlxb!i;#slXPK7A)oxTeo|{OFzUe`IYL5FPX&IyFNqw!sy_2;OMt5&2YN8!_@08l#ip`=( z#AaPYPI!w_z9AA(Mn?ZK`el1ub(8Lo7gf`<+5!1|SC*9vEq|f$Sv7s(Lp;<@my8|l zbP~3(*BS6HcDla!l)Y{VUTLp`_^3`7Zj>B!*E?7P7O@gwu#>wES;{gV_g0difY-X~ zBnzHYuUHlYhQYQTM1TO{U|A3)h?6~t9VY>RkIN9tiMUA?c!tA*ClP?a;Q6v3NC@wh z1(6*6(36<)5=&a%i$Dxw@KjmgIE1�wDczT^0lp;f~%!5IKlLy@?q>5|3AV>!w;T zfW^;bfkh;4A0qI)h>yquKmvB@Nd(CAI9V1%#NxX>byF+_iIecqUIb!95%2Bw)-4H1 z7I=|F)LZAS=U7sB`R5wvO37aYpa3{i403?up%N2VRx-tit;mU{7~}*Nuu2SakX$Ll z=uI3WQDqD{q{akM5eyOpmQw^xFbWoFest*)+RkcX3tMx=t?HEZWdZhkHK#aQlh*g&wae~S*;zg4K-<}5~wH{P8x`0Gp zuU16rOpv6`L}E-cksV8%IuX(`s{W9``$Y7uohb?GOeCnzL_+E-ktEfXK!y>Njv@2@ z-rrxloXD>Iz%ZgnWyh{@v0M<<3;hF~NB8?UHB{AS6?#(qqXI zRyZM?t{gj&V5$K1gdgPxs!0_PSvtxpAgF3M#E_j5ca6vZaf&2mOgSwC1IpEp0L!RGoV-<) zy-4(6bK-4w3J_JJiwLG%=>+3c1O`O%Hc})GNn~hP>NU#^lkd!v5y5!?Hjzkz`x)3Zf%BMPLbOC=Vom!jxqdSV_r0dyv2b<>De3gzEEJsXg-j9SeX_I{}=!G61wP zVl$7B1*aNW$cRwF&ydbh1F(~%3)BaTq7=-L1u|#=FLFVIfyv%x`4FD$U^YYy3ZVS{ zuZn9VNc~1W@q{ arhc|yNxRQtrc;PKo+U)Ny9bX7q5cP;k_0#a diff --git a/sources/common/inc/ISignal.h b/sources/common/inc/ISignal.h index e4ef5df..143b70c 100644 --- a/sources/common/inc/ISignal.h +++ b/sources/common/inc/ISignal.h @@ -57,15 +57,7 @@ namespace SIGNAL size_t size, const TIME::Timestamp &rTimestamp, uint64_t value, - SourceRegistry::HandleT sourceHandle) : - Signal(name, size, rTimestamp, "wire", sourceHandle), - m_Value(value) - { - if ((value > (std::numeric_limits::max() >> (64 - size))) || (0 == size)) - { - throw EXCEPTION::TooSmallVector(value, size); - } - } + SourceRegistry::HandleT sourceHandle); /// The integer signal cloning method. virtual Signal *Clone() const diff --git a/sources/common/inc/VcdExceptionList.h b/sources/common/inc/VcdExceptionList.h index 9b11866..67b1fe9 100644 --- a/sources/common/inc/VcdExceptionList.h +++ b/sources/common/inc/VcdExceptionList.h @@ -117,6 +117,9 @@ namespace EXCEPTION /// Regex error. const uint32_t REGEX_ERROR = 20U; + /// Vector size exceeded. + const uint32_t VECTOR_SIZE_EXCEEDED = 21U; + // Logic errors below shall never happen. // They are enumerated from 9000. diff --git a/sources/common/src/ISignal.cpp b/sources/common/src/ISignal.cpp index 636a9d7..eb44384 100644 --- a/sources/common/src/ISignal.cpp +++ b/sources/common/src/ISignal.cpp @@ -32,6 +32,27 @@ #include "ISignal.h" +SIGNAL::ISignal::ISignal(const std::string &name, + size_t size, + const TIME::Timestamp &rTimestamp, + uint64_t value, + SourceRegistry::HandleT sourceHandle) : + Signal(name, size, rTimestamp, "wire", sourceHandle), + m_Value(value) +{ + if (size > 64) + { + throw EXCEPTION::VcdException(EXCEPTION::Error::VECTOR_SIZE_EXCEEDED, + "Vectors sizes greater than 64 bits are not allowed. Requested " + + std::to_string(size) + "-bit size."); + } + + if ((value > (std::numeric_limits::max() >> (64 - size))) || (0 == size)) + { + throw EXCEPTION::TooSmallVector(value, size); + } +} + std::string SIGNAL::ISignal::Print() const { const std::bitset<64> valueBits(m_Value); From f8c518ed35d86cd19b96e6300b3e9cac40004654 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Mon, 19 Nov 2018 18:44:28 +0100 Subject: [PATCH 134/143] #25 Const-correctness --- sources/common/inc/EventSignalCreator.h | 2 +- sources/common/inc/FSignalCreator.h | 2 +- sources/common/inc/ISignalCreator.h | 2 +- sources/common/inc/SignalCreator.h | 2 +- sources/common/inc/SignalFactory.h | 2 +- sources/common/inc/TxtParser.h | 4 ++-- sources/common/inc/XmlEventSignalCreator.h | 2 +- sources/common/inc/XmlFSignalCreator.h | 2 +- sources/common/inc/XmlISignalCreator.h | 2 +- sources/common/inc/XmlSignalCreator.h | 12 ++++++------ sources/common/src/EventSignalCreator.cpp | 2 +- sources/common/src/FSignalCreator.cpp | 2 +- sources/common/src/ISignalCreator.cpp | 2 +- sources/common/src/SignalFactory.cpp | 2 +- sources/common/src/TxtParser.cpp | 2 +- sources/common/src/XmlEventSignalCreator.cpp | 2 +- sources/common/src/XmlFSignalCreator.cpp | 2 +- sources/common/src/XmlISignalCreator.cpp | 2 +- sources/common/src/XmlSignalCreator.cpp | 12 ++++++------ sources/parsers/inc/Evaluator.h | 2 +- sources/parsers/inc/ExpressionContext.h | 4 ++-- sources/parsers/src/Evaluator.cpp | 2 +- 22 files changed, 34 insertions(+), 34 deletions(-) diff --git a/sources/common/inc/EventSignalCreator.h b/sources/common/inc/EventSignalCreator.h index 253b52b..e686cc3 100644 --- a/sources/common/inc/EventSignalCreator.h +++ b/sources/common/inc/EventSignalCreator.h @@ -45,7 +45,7 @@ namespace PARSER /// @copydoc SignalCreator::Create() virtual SIGNAL::Signal *Create(const std::string &rLogLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle); + SIGNAL::SourceRegistry::HandleT sourceHandle) const; }; diff --git a/sources/common/inc/FSignalCreator.h b/sources/common/inc/FSignalCreator.h index b81dedd..ef443eb 100644 --- a/sources/common/inc/FSignalCreator.h +++ b/sources/common/inc/FSignalCreator.h @@ -47,7 +47,7 @@ namespace PARSER /// @copydoc SignalCreator::Create() virtual SIGNAL::Signal *Create(const std::string &rLogLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle); + SIGNAL::SourceRegistry::HandleT sourceHandle) const; }; diff --git a/sources/common/inc/ISignalCreator.h b/sources/common/inc/ISignalCreator.h index 0151dce..84efcb5 100644 --- a/sources/common/inc/ISignalCreator.h +++ b/sources/common/inc/ISignalCreator.h @@ -45,7 +45,7 @@ namespace PARSER /// @copydoc SignalCreator::Create() virtual SIGNAL::Signal *Create(const std::string &rLogLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle); + SIGNAL::SourceRegistry::HandleT sourceHandle) const; }; } diff --git a/sources/common/inc/SignalCreator.h b/sources/common/inc/SignalCreator.h index 5b17611..75c8659 100644 --- a/sources/common/inc/SignalCreator.h +++ b/sources/common/inc/SignalCreator.h @@ -71,7 +71,7 @@ namespace PARSER /// @return Signal pointer if the object has been created or nullptr. virtual SIGNAL::Signal *Create(const std::string &rLogLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle) = 0; + SIGNAL::SourceRegistry::HandleT sourceHandle) const = 0; /// Returns the regex. const std::string &GetRegEx() const diff --git a/sources/common/inc/SignalFactory.h b/sources/common/inc/SignalFactory.h index 46cfb60..625e030 100644 --- a/sources/common/inc/SignalFactory.h +++ b/sources/common/inc/SignalFactory.h @@ -56,7 +56,7 @@ namespace PARSER /// @param sourceHandle Signal source handle. std::vector Create(std::string &logLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle); + SIGNAL::SourceRegistry::HandleT sourceHandle) const; protected: diff --git a/sources/common/inc/TxtParser.h b/sources/common/inc/TxtParser.h index 27ee399..6f21d87 100644 --- a/sources/common/inc/TxtParser.h +++ b/sources/common/inc/TxtParser.h @@ -53,7 +53,7 @@ namespace PARSER TxtParser(const std::string &rFilename, const std::string &rTimeBase, SIGNAL::SourceRegistry &rSourceRegistry, - SignalFactory &rSignalFactory, + const SignalFactory &rSignalFactory, bool verboseMode); /// The destructor. @@ -77,7 +77,7 @@ namespace PARSER SIGNAL::SourceRegistry::HandleT m_SourceHandle; /// The signal factory. - SignalFactory &m_rSignalFactory; + const SignalFactory &m_rSignalFactory; }; } diff --git a/sources/common/inc/XmlEventSignalCreator.h b/sources/common/inc/XmlEventSignalCreator.h index 1f896b2..21fc3cb 100644 --- a/sources/common/inc/XmlEventSignalCreator.h +++ b/sources/common/inc/XmlEventSignalCreator.h @@ -51,7 +51,7 @@ namespace PARSER /// @copydoc SignalCreator::Create() virtual SIGNAL::Signal *Create(const std::string &rLogLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle); + SIGNAL::SourceRegistry::HandleT sourceHandle) const; }; diff --git a/sources/common/inc/XmlFSignalCreator.h b/sources/common/inc/XmlFSignalCreator.h index 7d04e52..c2fcd45 100644 --- a/sources/common/inc/XmlFSignalCreator.h +++ b/sources/common/inc/XmlFSignalCreator.h @@ -56,7 +56,7 @@ namespace PARSER /// @copydoc SignalCreator::Create() virtual SIGNAL::Signal *Create(const std::string &rLogLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle); + SIGNAL::SourceRegistry::HandleT sourceHandle) const; }; diff --git a/sources/common/inc/XmlISignalCreator.h b/sources/common/inc/XmlISignalCreator.h index d92e7da..9d1b776 100644 --- a/sources/common/inc/XmlISignalCreator.h +++ b/sources/common/inc/XmlISignalCreator.h @@ -51,7 +51,7 @@ namespace PARSER /// @copydoc SignalCreator::Create() virtual SIGNAL::Signal *Create(const std::string &rLogLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle); + SIGNAL::SourceRegistry::HandleT sourceHandle) const; }; } diff --git a/sources/common/inc/XmlSignalCreator.h b/sources/common/inc/XmlSignalCreator.h index 3aa89b7..58aaae2 100644 --- a/sources/common/inc/XmlSignalCreator.h +++ b/sources/common/inc/XmlSignalCreator.h @@ -71,28 +71,28 @@ namespace PARSER /// /// @param rMatch The regular expression groups. /// @param lineNumber The log line number. - TIME::Timestamp GetTimestamp(std::smatch &rMatch, - INSTRUMENT::Instrument::LineNumberT lineNumber); + TIME::Timestamp GetTimestamp(const std::smatch &rMatch, + INSTRUMENT::Instrument::LineNumberT lineNumber) const; /// Returns the name of the signal. /// /// @param rMatch The regular expression groups. - std::string GetName(std::smatch &rMatch); + std::string GetName(const std::smatch &rMatch) const; /// Returns the decimal value of the signal. /// /// @param rMatch The regular expression groups. - SafeUInt GetDecimalValue(std::smatch &rMatch); + SafeUInt GetDecimalValue(const std::smatch &rMatch) const; /// Returns the float value of the signal. /// /// @param rMatch The regular expression groups. - std::string GetFloatValue(std::smatch &rMatch); + std::string GetFloatValue(const std::smatch &rMatch) const; /// Returns the size of the signal. /// /// @param rMatch The regular expression groups. - size_t GetSize(std::smatch &rMatch); + size_t GetSize(const std::smatch &rMatch) const; /// The expression to create the timestamp of the signal. const std::string m_Timestamp; diff --git a/sources/common/src/EventSignalCreator.cpp b/sources/common/src/EventSignalCreator.cpp index df2ba9a..5f37f4d 100644 --- a/sources/common/src/EventSignalCreator.cpp +++ b/sources/common/src/EventSignalCreator.cpp @@ -29,7 +29,7 @@ SIGNAL::Signal *PARSER::EventSignalCreator::Create(const std::string &rLogLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle) + SIGNAL::SourceRegistry::HandleT sourceHandle) const { std::smatch result; diff --git a/sources/common/src/FSignalCreator.cpp b/sources/common/src/FSignalCreator.cpp index 8f9ad2e..cd00df7 100644 --- a/sources/common/src/FSignalCreator.cpp +++ b/sources/common/src/FSignalCreator.cpp @@ -29,7 +29,7 @@ SIGNAL::Signal *PARSER::FSignalCreator::Create(const std::string &rLogLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle) + SIGNAL::SourceRegistry::HandleT sourceHandle) const { std::smatch result; diff --git a/sources/common/src/ISignalCreator.cpp b/sources/common/src/ISignalCreator.cpp index 467f18a..0f4bb86 100644 --- a/sources/common/src/ISignalCreator.cpp +++ b/sources/common/src/ISignalCreator.cpp @@ -29,7 +29,7 @@ SIGNAL::Signal *PARSER::ISignalCreator::Create(const std::string &rLogLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle) + SIGNAL::SourceRegistry::HandleT sourceHandle) const { std::smatch result; diff --git a/sources/common/src/SignalFactory.cpp b/sources/common/src/SignalFactory.cpp index 11ce806..0a7d157 100644 --- a/sources/common/src/SignalFactory.cpp +++ b/sources/common/src/SignalFactory.cpp @@ -42,7 +42,7 @@ PARSER::SignalFactory::SignalFactory() : std::vector PARSER::SignalFactory::Create(std::string &logLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle) + SIGNAL::SourceRegistry::HandleT sourceHandle) const { if (m_vpSignalCreators.empty()) { diff --git a/sources/common/src/TxtParser.cpp b/sources/common/src/TxtParser.cpp index b96a5fc..22e3e1a 100644 --- a/sources/common/src/TxtParser.cpp +++ b/sources/common/src/TxtParser.cpp @@ -34,7 +34,7 @@ PARSER::TxtParser::TxtParser(const std::string &rFilename, const std::string &rTimeBase, SIGNAL::SourceRegistry &rSourceRegistry, - PARSER::SignalFactory &rSignalFactory, + const PARSER::SignalFactory &rSignalFactory, bool verboseMode) : LogParser(rFilename, rTimeBase, rSourceRegistry, verboseMode), m_ValidLines(0), diff --git a/sources/common/src/XmlEventSignalCreator.cpp b/sources/common/src/XmlEventSignalCreator.cpp index 56e5e9d..8bef82a 100644 --- a/sources/common/src/XmlEventSignalCreator.cpp +++ b/sources/common/src/XmlEventSignalCreator.cpp @@ -29,7 +29,7 @@ SIGNAL::Signal *PARSER::XmlEventSignalCreator::Create(const std::string &rLogLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle) + SIGNAL::SourceRegistry::HandleT sourceHandle) const { std::smatch result; diff --git a/sources/common/src/XmlFSignalCreator.cpp b/sources/common/src/XmlFSignalCreator.cpp index 6cbe0a9..657ef7f 100644 --- a/sources/common/src/XmlFSignalCreator.cpp +++ b/sources/common/src/XmlFSignalCreator.cpp @@ -29,7 +29,7 @@ SIGNAL::Signal *PARSER::XmlFSignalCreator::Create(const std::string &rLogLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle) + SIGNAL::SourceRegistry::HandleT sourceHandle) const { std::smatch result; diff --git a/sources/common/src/XmlISignalCreator.cpp b/sources/common/src/XmlISignalCreator.cpp index 3d0528e..410131f 100644 --- a/sources/common/src/XmlISignalCreator.cpp +++ b/sources/common/src/XmlISignalCreator.cpp @@ -29,7 +29,7 @@ SIGNAL::Signal *PARSER::XmlISignalCreator::Create(const std::string &rLogLine, INSTRUMENT::Instrument::LineNumberT lineNumber, - SIGNAL::SourceRegistry::HandleT sourceHandle) + SIGNAL::SourceRegistry::HandleT sourceHandle) const { std::smatch result; diff --git a/sources/common/src/XmlSignalCreator.cpp b/sources/common/src/XmlSignalCreator.cpp index b09db7f..75ec480 100644 --- a/sources/common/src/XmlSignalCreator.cpp +++ b/sources/common/src/XmlSignalCreator.cpp @@ -26,32 +26,32 @@ #include "XmlSignalCreator.h" -TIME::Timestamp PARSER::XmlSignalCreator::GetTimestamp(std::smatch &rMatch, - INSTRUMENT::Instrument::LineNumberT lineNumber) +TIME::Timestamp PARSER::XmlSignalCreator::GetTimestamp(const std::smatch &rMatch, + INSTRUMENT::Instrument::LineNumberT lineNumber) const { m_TimestampEvaluator.SetContext(&rMatch, lineNumber); return m_TimestampEvaluator.EvaluateUint(); } -std::string PARSER::XmlSignalCreator::GetName(std::smatch &rMatch) +std::string PARSER::XmlSignalCreator::GetName(const std::smatch &rMatch) const { m_NameEvaluator.SetContext(&rMatch, 0); return m_NameEvaluator.EvaluateString(); } -SafeUInt PARSER::XmlSignalCreator::GetDecimalValue(std::smatch &rMatch) +SafeUInt PARSER::XmlSignalCreator::GetDecimalValue(const std::smatch &rMatch) const { m_DecimalEvaluator.SetContext(&rMatch, 0); return m_DecimalEvaluator.EvaluateUint(); } -std::string PARSER::XmlSignalCreator::GetFloatValue(std::smatch &rMatch) +std::string PARSER::XmlSignalCreator::GetFloatValue(const std::smatch &rMatch) const { m_FloatEvaluator.SetContext(&rMatch, 0); return m_FloatEvaluator.EvaluateDouble(); } -size_t PARSER::XmlSignalCreator::GetSize(std::smatch &rMatch) +size_t PARSER::XmlSignalCreator::GetSize(const std::smatch &rMatch) const { m_SizeEvaluator.SetContext(&rMatch, 0); return static_cast(m_SizeEvaluator.EvaluateUint()); diff --git a/sources/parsers/inc/Evaluator.h b/sources/parsers/inc/Evaluator.h index 3a80d67..98e9f4e 100644 --- a/sources/parsers/inc/Evaluator.h +++ b/sources/parsers/inc/Evaluator.h @@ -74,7 +74,7 @@ namespace PARSER /// /// @param pGroups The pointer to the parsed regex groups. /// @param lineNo The log line number. - void SetContext(std::smatch *pGroups, uint64_t lineNo); + void SetContext(const std::smatch *pGroups, uint64_t lineNo) const; /// Returns the calculation context. /// diff --git a/sources/parsers/inc/ExpressionContext.h b/sources/parsers/inc/ExpressionContext.h index e73c104..1e017a8 100644 --- a/sources/parsers/inc/ExpressionContext.h +++ b/sources/parsers/inc/ExpressionContext.h @@ -66,7 +66,7 @@ namespace PARSER /// /// @param pGroups The pointer to the parsed regex groups. /// @param lineNo The log line number. - void Set(std::smatch *pGroups, uint64_t lineNo) + void Set(const std::smatch *pGroups, uint64_t lineNo) { m_pGroups = pGroups; m_LineNo = lineNo; @@ -120,7 +120,7 @@ namespace PARSER private: /// A pointer to the regex groups (the context of the expression). - std::smatch *m_pGroups; + const std::smatch *m_pGroups; /// The log line number. uint64_t m_LineNo; diff --git a/sources/parsers/src/Evaluator.cpp b/sources/parsers/src/Evaluator.cpp index 12a5200..f3fd4c0 100644 --- a/sources/parsers/src/Evaluator.cpp +++ b/sources/parsers/src/Evaluator.cpp @@ -86,7 +86,7 @@ void PARSER::Evaluator::ParseStringString(const std::string &input) m_Expression = input; } -void PARSER::Evaluator::SetContext(std::smatch *pGroups, uint64_t lineNo) +void PARSER::Evaluator::SetContext(const std::smatch *pGroups, uint64_t lineNo) const { m_Context.Set(pGroups, lineNo); } From 889060e0123f19dd5f44916421f429e8e6d1a13a Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Mon, 19 Nov 2018 22:13:21 +0100 Subject: [PATCH 135/143] #25 Comparison order --- sources/common/src/ISignal.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/common/src/ISignal.cpp b/sources/common/src/ISignal.cpp index eb44384..89d4b49 100644 --- a/sources/common/src/ISignal.cpp +++ b/sources/common/src/ISignal.cpp @@ -47,7 +47,7 @@ SIGNAL::ISignal::ISignal(const std::string &name, std::to_string(size) + "-bit size."); } - if ((value > (std::numeric_limits::max() >> (64 - size))) || (0 == size)) + if ((0 == size) || (value > (std::numeric_limits::max() >> (64 - size)))) { throw EXCEPTION::TooSmallVector(value, size); } From df5bf116c4118a742cb9f5e39bb1e20a8fee2c8d Mon Sep 17 00:00:00 2001 From: Andrzej Date: Thu, 22 Nov 2018 20:37:41 +0100 Subject: [PATCH 136/143] Bump year --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index d4af27d..e4efb61 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2016 vcdMaker team +Copyright (c) 2018 vcdMaker team Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From c601364d061988c52f790dbd1622b66da99a927d Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Sun, 25 Nov 2018 13:49:15 +0100 Subject: [PATCH 137/143] #48 Delete objects --- sources/parsers/auto/StringParser.cpp | 65 +++++++++---------------- sources/parsers/auto/StringScanner.cpp | 2 +- sources/parsers/inc/ExpressionContext.h | 5 +- sources/parsers/inc/StringNode.h | 22 ++++++--- sources/parsers/model/StringParser.yy | 7 +-- sources/parsers/model/StringScanner.ll | 2 +- 6 files changed, 44 insertions(+), 59 deletions(-) diff --git a/sources/parsers/auto/StringParser.cpp b/sources/parsers/auto/StringParser.cpp index 5b98162..a6f3e54 100644 --- a/sources/parsers/auto/StringParser.cpp +++ b/sources/parsers/auto/StringParser.cpp @@ -50,7 +50,7 @@ /* User implementation prologue. */ /* Line 285 of lalr1.cc */ -#line 87 "StringParser.yy" +#line 84 "StringParser.yy" #include "Evaluator.h" @@ -261,55 +261,34 @@ namespace PARSER { switch (yytype) { - case 3: /* "text" */ + case 7: /* constant */ /* Line 455 of lalr1.cc */ #line 77 "StringParser.yy" - { delete ((*yyvaluep).pString); }; + { delete ((*yyvaluep).pExprNode); }; /* Line 455 of lalr1.cc */ #line 270 "StringParser.cpp" break; - case 4: /* "text constant" */ + case 8: /* variable */ /* Line 455 of lalr1.cc */ #line 78 "StringParser.yy" - { delete ((*yyvaluep).pString); }; + { delete ((*yyvaluep).pExprNode); }; /* Line 455 of lalr1.cc */ #line 277 "StringParser.cpp" break; - case 7: /* constant */ + case 10: /* addexpr */ /* Line 455 of lalr1.cc */ #line 79 "StringParser.yy" { delete ((*yyvaluep).pExprNode); }; /* Line 455 of lalr1.cc */ #line 284 "StringParser.cpp" break; - case 8: /* variable */ + case 11: /* expr */ /* Line 455 of lalr1.cc */ #line 80 "StringParser.yy" { delete ((*yyvaluep).pExprNode); }; /* Line 455 of lalr1.cc */ #line 291 "StringParser.cpp" break; - case 9: /* atomexpr */ -/* Line 455 of lalr1.cc */ -#line 81 "StringParser.yy" - { delete ((*yyvaluep).pExprNode); }; -/* Line 455 of lalr1.cc */ -#line 298 "StringParser.cpp" - break; - case 10: /* addexpr */ -/* Line 455 of lalr1.cc */ -#line 82 "StringParser.yy" - { delete ((*yyvaluep).pExprNode); }; -/* Line 455 of lalr1.cc */ -#line 305 "StringParser.cpp" - break; - case 11: /* expr */ -/* Line 455 of lalr1.cc */ -#line 83 "StringParser.yy" - { delete ((*yyvaluep).pExprNode); }; -/* Line 455 of lalr1.cc */ -#line 312 "StringParser.cpp" - break; default: break; @@ -519,24 +498,24 @@ namespace PARSER { { case 2: /* Line 670 of lalr1.cc */ -#line 103 "StringParser.yy" +#line 100 "StringParser.yy" { - (yyval.pExprNode) = new SNConstant(evaluator.GetContext(), *(yysemantic_stack_[(1) - (1)].pString)); + (yyval.pExprNode) = new SNConstant(evaluator.GetContext(), (yysemantic_stack_[(1) - (1)].pString)); } break; case 3: /* Line 670 of lalr1.cc */ -#line 108 "StringParser.yy" +#line 105 "StringParser.yy" { - (yyval.pExprNode) = new SNTxt(evaluator.GetContext(), *(yysemantic_stack_[(1) - (1)].pString)); + (yyval.pExprNode) = new SNTxt(evaluator.GetContext(), (yysemantic_stack_[(1) - (1)].pString)); delete (yysemantic_stack_[(1) - (1)].pString); } break; case 4: /* Line 670 of lalr1.cc */ -#line 114 "StringParser.yy" +#line 111 "StringParser.yy" { (yyval.pExprNode) = (yysemantic_stack_[(1) - (1)].pExprNode); } @@ -544,7 +523,7 @@ namespace PARSER { case 5: /* Line 670 of lalr1.cc */ -#line 118 "StringParser.yy" +#line 115 "StringParser.yy" { (yyval.pExprNode) = (yysemantic_stack_[(1) - (1)].pExprNode); } @@ -552,7 +531,7 @@ namespace PARSER { case 6: /* Line 670 of lalr1.cc */ -#line 123 "StringParser.yy" +#line 120 "StringParser.yy" { (yyval.pExprNode) = (yysemantic_stack_[(1) - (1)].pExprNode); } @@ -560,7 +539,7 @@ namespace PARSER { case 7: /* Line 670 of lalr1.cc */ -#line 127 "StringParser.yy" +#line 124 "StringParser.yy" { (yyval.pExprNode) = new SNAdd(evaluator.GetContext(), (yysemantic_stack_[(3) - (1)].pExprNode), (yysemantic_stack_[(3) - (3)].pExprNode)); } @@ -568,7 +547,7 @@ namespace PARSER { case 8: /* Line 670 of lalr1.cc */ -#line 132 "StringParser.yy" +#line 129 "StringParser.yy" { (yyval.pExprNode) = (yysemantic_stack_[(1) - (1)].pExprNode); } @@ -576,7 +555,7 @@ namespace PARSER { case 10: /* Line 670 of lalr1.cc */ -#line 138 "StringParser.yy" +#line 135 "StringParser.yy" { evaluator.GetContext().SetExpression((yysemantic_stack_[(3) - (2)].pExprNode)); } @@ -584,7 +563,7 @@ namespace PARSER { /* Line 670 of lalr1.cc */ -#line 588 "StringParser.cpp" +#line 567 "StringParser.cpp" default: break; } @@ -1002,8 +981,8 @@ namespace PARSER { const unsigned char StringParser::yyrline_[] = { - 0, 102, 102, 107, 113, 117, 122, 126, 131, 136, - 137 + 0, 99, 99, 104, 110, 114, 119, 123, 128, 133, + 134 }; // Print the state stack on the debug stream. @@ -1091,9 +1070,9 @@ namespace PARSER { } // PARSER /* Line 1141 of lalr1.cc */ -#line 1095 "StringParser.cpp" +#line 1074 "StringParser.cpp" /* Line 1142 of lalr1.cc */ -#line 142 "StringParser.yy" +#line 139 "StringParser.yy" /*** Additional Code ***/ void PARSER::StringParser::error(const StringParser::location_type& l, diff --git a/sources/parsers/auto/StringScanner.cpp b/sources/parsers/auto/StringScanner.cpp index 49d6c77..4df7e09 100644 --- a/sources/parsers/auto/StringScanner.cpp +++ b/sources/parsers/auto/StringScanner.cpp @@ -1932,7 +1932,7 @@ void yyfree (void * ptr ) namespace PARSER { StringScanner::StringScanner(std::istream* in, - std::ostream* out) + std::ostream* out) : StringFlexLexer(in, out) { } diff --git a/sources/parsers/inc/ExpressionContext.h b/sources/parsers/inc/ExpressionContext.h index 1e017a8..8974e55 100644 --- a/sources/parsers/inc/ExpressionContext.h +++ b/sources/parsers/inc/ExpressionContext.h @@ -57,7 +57,10 @@ namespace PARSER {} /// Expression context destructor. - ~ExpressionContext() = default; + ~ExpressionContext() + { + delete m_pExpression; + } /// Set the expression context. /// diff --git a/sources/parsers/inc/StringNode.h b/sources/parsers/inc/StringNode.h index 632b926..ed35099 100644 --- a/sources/parsers/inc/StringNode.h +++ b/sources/parsers/inc/StringNode.h @@ -40,26 +40,32 @@ namespace PARSER class SNConstant : public ExpressionNode { /// The constatnt value. - std::string &m_rString; + std::string *m_pString; public: /// Constructs a constant type node from a value. /// /// @param rExpContext The expression context. - /// @param value The constant value used to create the node. - SNConstant(ExpressionContext &rExpContext, std::string &value) : + /// @param pValue The constant value used to create the node. + SNConstant(ExpressionContext &rExpContext, std::string *pValue) : ExpressionNode(rExpContext), - m_rString(value) + m_pString(pValue) { } + /// Destructor. + ~SNConstant() + { + delete m_pString; + } + /// @copydoc ExpressionNode::EvaluateString() virtual std::string EvaluateString() const { const uint32_t SKIP_FIRST_QUOTE = 1U; const uint32_t TWO_QUOTE_SIGNS = 2U; - return std::string(m_rString, SKIP_FIRST_QUOTE, m_rString.length() - TWO_QUOTE_SIGNS); + return std::string(*m_pString, SKIP_FIRST_QUOTE, m_pString->length() - TWO_QUOTE_SIGNS); } }; @@ -73,11 +79,11 @@ namespace PARSER /// Constructs a string node. /// /// @param rExpContext The expression context. - /// @param rString The string containing information about the string index in the parsed regex group. - SNTxt(ExpressionContext &rExpContext, std::string &rString) : + /// @param pString The string containing information about the string index in the parsed regex group. + SNTxt(ExpressionContext &rExpContext, std::string *pString) : ExpressionNode(rExpContext) { - std::string stringIndex(rString, FIRST_STRING_CHARACTER_POS, rString.length() - GROUP_WRAPPER_LENGTH); + std::string stringIndex(*pString, FIRST_STRING_CHARACTER_POS, pString->length() - GROUP_WRAPPER_LENGTH); // Format of the string: txt(position) m_Index = static_cast(std::strtoull(stringIndex.c_str(), nullptr, 10)); diff --git a/sources/parsers/model/StringParser.yy b/sources/parsers/model/StringParser.yy index 4d8259f..167d3ed 100644 --- a/sources/parsers/model/StringParser.yy +++ b/sources/parsers/model/StringParser.yy @@ -74,11 +74,8 @@ %type constant variable atomexpr addexpr expr -%destructor { delete $$; } TXT -%destructor { delete $$; } TXT_CONSTANT %destructor { delete $$; } constant %destructor { delete $$; } variable -%destructor { delete $$; } atomexpr %destructor { delete $$; } addexpr %destructor { delete $$; } expr @@ -101,12 +98,12 @@ constant : TXT_CONSTANT { - $$ = new SNConstant(evaluator.GetContext(), *$1); + $$ = new SNConstant(evaluator.GetContext(), $1); } variable : TXT { - $$ = new SNTxt(evaluator.GetContext(), *$1); + $$ = new SNTxt(evaluator.GetContext(), $1); delete $1; } diff --git a/sources/parsers/model/StringScanner.ll b/sources/parsers/model/StringScanner.ll index ccb5c9f..a49abf1 100644 --- a/sources/parsers/model/StringScanner.ll +++ b/sources/parsers/model/StringScanner.ll @@ -102,7 +102,7 @@ txt\([ ]*[0-9]+[ ]*\) { namespace PARSER { StringScanner::StringScanner(std::istream* in, - std::ostream* out) + std::ostream* out) : StringFlexLexer(in, out) { } From ba6544a56ff50ceec39c880f0e08b02fd00e630a Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Sun, 25 Nov 2018 15:10:48 +0100 Subject: [PATCH 138/143] #48 Unified parser interface --- sources/parsers/auto/DecimalParser.cpp | 4 ++-- sources/parsers/auto/FloatParser.cpp | 2 +- sources/parsers/inc/DecimalNode.h | 12 ++++++------ sources/parsers/inc/FloatNode.h | 6 +++--- sources/parsers/model/DecimalParser.yy | 4 ++-- sources/parsers/model/FloatParser.yy | 2 +- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/sources/parsers/auto/DecimalParser.cpp b/sources/parsers/auto/DecimalParser.cpp index 60d021c..1cc938a 100644 --- a/sources/parsers/auto/DecimalParser.cpp +++ b/sources/parsers/auto/DecimalParser.cpp @@ -550,7 +550,7 @@ namespace PARSER { /* Line 670 of lalr1.cc */ #line 115 "DecimalParser.yy" { - (yyval.pExprNode) = new DNHex(evaluator.GetContext(), *(yysemantic_stack_[(1) - (1)].pString)); + (yyval.pExprNode) = new DNHex(evaluator.GetContext(), (yysemantic_stack_[(1) - (1)].pString)); delete (yysemantic_stack_[(1) - (1)].pString); } break; @@ -559,7 +559,7 @@ namespace PARSER { /* Line 670 of lalr1.cc */ #line 120 "DecimalParser.yy" { - (yyval.pExprNode) = new DNDec(evaluator.GetContext(), *(yysemantic_stack_[(1) - (1)].pString)); + (yyval.pExprNode) = new DNDec(evaluator.GetContext(), (yysemantic_stack_[(1) - (1)].pString)); delete (yysemantic_stack_[(1) - (1)].pString); } break; diff --git a/sources/parsers/auto/FloatParser.cpp b/sources/parsers/auto/FloatParser.cpp index 12cc694..f7ba93a 100644 --- a/sources/parsers/auto/FloatParser.cpp +++ b/sources/parsers/auto/FloatParser.cpp @@ -536,7 +536,7 @@ namespace PARSER { /* Line 670 of lalr1.cc */ #line 110 "FloatParser.yy" { - (yyval.pExprNode) = new FNFlt(evaluator.GetContext(), *(yysemantic_stack_[(1) - (1)].pString)); + (yyval.pExprNode) = new FNFlt(evaluator.GetContext(), (yysemantic_stack_[(1) - (1)].pString)); delete (yysemantic_stack_[(1) - (1)].pString); } break; diff --git a/sources/parsers/inc/DecimalNode.h b/sources/parsers/inc/DecimalNode.h index d7351dc..fec8a93 100644 --- a/sources/parsers/inc/DecimalNode.h +++ b/sources/parsers/inc/DecimalNode.h @@ -70,11 +70,11 @@ namespace PARSER /// Constructs a constant type node based on a decimal string. /// /// @param rExpContext The expression context. - /// @param rString The string containing information about the decimal string index in the parsed regex group. - DNDec(ExpressionContext &rExpContext, std::string &rString) : + /// @param pString The string containing information about the decimal string index in the parsed regex group. + DNDec(ExpressionContext &rExpContext, std::string *pString) : ExpressionNode(rExpContext) { - std::string stringIndex(rString, FIRST_STRING_CHARACTER_POS, rString.length() - GROUP_WRAPPER_LENGTH); + std::string stringIndex(*pString, FIRST_STRING_CHARACTER_POS, pString->length() - GROUP_WRAPPER_LENGTH); // Format of the string: dec(position) m_Index = static_cast(std::strtoull(stringIndex.c_str(), nullptr, 10)); @@ -94,11 +94,11 @@ namespace PARSER /// Constructs a constant type node based on a hexadecimal string. /// /// @param rExpContext The expression context. - /// @param rString The string containing information about the hexadecimal string index in the parsed regex group. - DNHex(ExpressionContext &rExpContext, std::string &rString) : + /// @param pString The string containing information about the hexadecimal string index in the parsed regex group. + DNHex(ExpressionContext &rExpContext, std::string *pString) : ExpressionNode(rExpContext) { - std::string stringIndex(rString, FIRST_STRING_CHARACTER_POS, rString.length() - GROUP_WRAPPER_LENGTH); + std::string stringIndex(*pString, FIRST_STRING_CHARACTER_POS, pString->length() - GROUP_WRAPPER_LENGTH); // Format of the string: hex(position) m_Index = static_cast(std::strtoull(stringIndex.c_str(), nullptr, 10)); diff --git a/sources/parsers/inc/FloatNode.h b/sources/parsers/inc/FloatNode.h index 53ee6d5..83f2389 100644 --- a/sources/parsers/inc/FloatNode.h +++ b/sources/parsers/inc/FloatNode.h @@ -72,11 +72,11 @@ namespace PARSER /// Constructs a constant type node based on a float string. /// /// @param rExpContext The expression context. - /// @param rString The string containing information about the decimal string index in the parsed regex group. - FNFlt(ExpressionContext &rExpContext, std::string &rString) : + /// @param pString The string containing information about the decimal string index in the parsed regex group. + FNFlt(ExpressionContext &rExpContext, std::string *pString) : ExpressionNode(rExpContext) { - std::string stringIndex(rString, FIRST_STRING_CHARACTER_POS, rString.length() - GROUP_WRAPPER_LENGTH); + std::string stringIndex(*pString, FIRST_STRING_CHARACTER_POS, pString->length() - GROUP_WRAPPER_LENGTH); // Format of the string: flt(position) m_Index = static_cast(std::strtoull(stringIndex.c_str(), nullptr, 10)); diff --git a/sources/parsers/model/DecimalParser.yy b/sources/parsers/model/DecimalParser.yy index 6e667b3..a9880d8 100644 --- a/sources/parsers/model/DecimalParser.yy +++ b/sources/parsers/model/DecimalParser.yy @@ -113,12 +113,12 @@ constant : INTEGER variable : HEX { - $$ = new DNHex(evaluator.GetContext(), *$1); + $$ = new DNHex(evaluator.GetContext(), $1); delete $1; } | DEC { - $$ = new DNDec(evaluator.GetContext(), *$1); + $$ = new DNDec(evaluator.GetContext(), $1); delete $1; } | LINE diff --git a/sources/parsers/model/FloatParser.yy b/sources/parsers/model/FloatParser.yy index 62fc97c..ef2afd7 100644 --- a/sources/parsers/model/FloatParser.yy +++ b/sources/parsers/model/FloatParser.yy @@ -108,7 +108,7 @@ constant : DOUBLE variable : FLT { - $$ = new FNFlt(evaluator.GetContext(), *$1); + $$ = new FNFlt(evaluator.GetContext(), $1); delete $1; } From b9cac615286eaadd83e2d396cc4399ac20fa5810 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Sun, 25 Nov 2018 23:07:12 +0100 Subject: [PATCH 139/143] #48 Release only initialized parsers --- sources/parsers/inc/ExpressionContext.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sources/parsers/inc/ExpressionContext.h b/sources/parsers/inc/ExpressionContext.h index 8974e55..eed9186 100644 --- a/sources/parsers/inc/ExpressionContext.h +++ b/sources/parsers/inc/ExpressionContext.h @@ -53,13 +53,17 @@ namespace PARSER /// @param lineNo The log line number. ExpressionContext(std::smatch *pGroups, uint64_t lineNo) : m_pGroups(pGroups), - m_LineNo(lineNo) + m_LineNo(lineNo), + m_pExpression(nullptr) {} /// Expression context destructor. ~ExpressionContext() { - delete m_pExpression; + if (m_pExpression != nullptr) + { + delete m_pExpression; + } } /// Set the expression context. From 1a200750d9b5392ea783fb43c22c97b2cb47f74c Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Mon, 26 Nov 2018 17:30:28 +0100 Subject: [PATCH 140/143] #51 Package update --- sources/cmake/installCpack.cmake | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sources/cmake/installCpack.cmake b/sources/cmake/installCpack.cmake index 2db8ac9..112b8f6 100644 --- a/sources/cmake/installCpack.cmake +++ b/sources/cmake/installCpack.cmake @@ -2,7 +2,7 @@ # # CPack settings. # -# Copyright (c) 2017 vcdMaker team +# Copyright (c) 2018 vcdMaker team # # Permission is hereby granted, free of charge, to any person obtaining a # copy of this software and associated documentation files (the "Software"), @@ -25,9 +25,10 @@ # Set Cpack. set(AUTHOR "vcdMaker team") -set(WEBSITE "http://vcdmaker.org") +set(WEBSITE "https://vcdmaker.org") set(DESCRIPTION "Commandline tools that can generate VCD files from text logs") +set(CPACK_PACKAGE_NAME "vcdMaker") set(CPACK_PACKAGE_VENDOR ${AUTHOR}) set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Generates VCD files from text logs") set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) @@ -52,5 +53,6 @@ set(CPACK_DEBIAN_PACKAGE_MAINTAINER ${AUTHOR}) set(CPACK_DEBIAN_PACKAGE_DESCRIPTION ${DESCRIPTION}) set(CPACK_DEBIAN_PACKAGE_SECTION "electronics") set(CPACK_DEBIAN_PACKAGE_HOMEPAGE ${WEBSITE}) +set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64") include(CPack) From 41ef883f1353f632d38008215ac1093d5a1ca35e Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Mon, 26 Nov 2018 21:34:21 +0100 Subject: [PATCH 141/143] #51 Command line --- sources/cmake/installCpack.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/cmake/installCpack.cmake b/sources/cmake/installCpack.cmake index 112b8f6..a9e6b9b 100644 --- a/sources/cmake/installCpack.cmake +++ b/sources/cmake/installCpack.cmake @@ -26,7 +26,7 @@ set(AUTHOR "vcdMaker team") set(WEBSITE "https://vcdmaker.org") -set(DESCRIPTION "Commandline tools that can generate VCD files from text logs") +set(DESCRIPTION "Command line tools that can generate VCD files from text logs") set(CPACK_PACKAGE_NAME "vcdMaker") set(CPACK_PACKAGE_VENDOR ${AUTHOR}) From 5040593cac0cc948d73f62567dfb214c291630c9 Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Tue, 27 Nov 2018 13:36:43 +0100 Subject: [PATCH 142/143] #51 Date update --- sources/common/doc/manual.odt | Bin 560416 -> 560421 bytes sources/common/doc/manual.pdf | Bin 866793 -> 866809 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/sources/common/doc/manual.odt b/sources/common/doc/manual.odt index a755f5c40df21bc305fa8fb9fc2cc4f8cde18d08..b27b785ba1b830fdfc5cffe7ca0d4763a71d2abd 100644 GIT binary patch delta 21492 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 G5&s1U9lYKE From b2346cb68252176c3a226952ea3a37fcc620692b Mon Sep 17 00:00:00 2001 From: WojciechRynczuk Date: Tue, 27 Nov 2018 20:59:34 +0100 Subject: [PATCH 143/143] #51 No nullptr check --- sources/parsers/inc/ExpressionContext.h | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/sources/parsers/inc/ExpressionContext.h b/sources/parsers/inc/ExpressionContext.h index eed9186..0dd7c5a 100644 --- a/sources/parsers/inc/ExpressionContext.h +++ b/sources/parsers/inc/ExpressionContext.h @@ -60,10 +60,7 @@ namespace PARSER /// Expression context destructor. ~ExpressionContext() { - if (m_pExpression != nullptr) - { - delete m_pExpression; - } + delete m_pExpression; } /// Set the expression context.

GCC|Z zvSXevApXh;j1GP%ZO?rxyN=T{Iq^4}9ggsbWaGdv!tx`U`r2D*e3+2hEmdg^t2=mi zZuPvR_(W*hvn;|W^Jl<6{HmfCRTQkIpzkM1UAn_R{vBlJ>#`_DByE!--};5kRfab3 zx}ehaMfTw3<%`vLF@5?v1m|7`bNJ8$j&ixwGZiE`a1+hE)zr$ug35M`Q5HjDRTs{G zL}FY;_ICQBT2hu70DD`6-Wr=?B={AgDEcIkp8jS*5$3`Acr(*e#q#n+;8~b-{ffJ( zbH=~5%!)an1dD$=SbAE_hpCC=wZuiJ@N@BtW!KJVoA(+CSIWb=QH;#Z;S{(6x*i`( zOkge#utmqJK_!00T+nviZFG{;RbA%L_P|OI+*+0sz~&o|+NFr=VwIfu`tmiGrh^wz zA`OxHO{RNy!bLiGEzwV_@0<5;^00N%xF&8gp}&?)WeLuhm5W=UO;ZXAuU%O8(pqQF zr&IamO%1SDPK$$lG}USGNAO8eO>1xrSqPiofIhqzIi3oWC{bozY`$Ni=9atEmMV)D zg)8Q@upQAa;Dp&xr)lO6t~z*_W;lqod2bW@XmOMHQeSnt9)#1o>6y}lp?+n zP>or7)GT(_3ZN z(MZ;{X$`q(m&+w;5`sD#7LqDwYl8)qOB)T7sd%(@>oS(9ip70Q+s$Lhbr$U=5gPo8 z_{hA(m|6?tInvtvNBUS@31j#rEOUh$@HNvf{STHF>7>3=hmK3G%~%}LRShDw@=RDP zit8ENIlsx3<``P9(cN(@tf{fX9dX=OzI=~tv|(A^Cl4($6AN#ls)!KXnpMpV&gHVpGei(^F{f1^FmH-K zns!6R+1&1G#mk)LCVc=^&Wt?ag|%GA*gO(F%s5}p>td$8A<%*{>_WPO$2w=9q2`{r zyYY`OMgHI&`|(UKPP{-#Vhq!kB*h{?G>qdi^xp(;?n&<&+kni$k1nL%MSE6;PPx;%9Z%^2r4nR2H{Y)xxjCv`(xk1t0fN1&r} zaPivR%bI1=)}{NG;3@cdAo(c`7Wbw=`_p;7Ee#dP;m9DKKstF#+as^3`QLY2`P1*V z_TxxZP54#Y`ayLVZeIkEcMWj?cdDXQcic$1%Fb#ct6d;M_{Y zEwbW0%u?PSSr|zb+UH8b0vE##S$SUxYeB6{Po9<ix^4g8P|sqHnK&Qz$&Hv?bVj!0XXyb9EpKQZD@%9m!gU%AfrMXH> zD61#RjVl$wP^`+`=uyQS^Z5?S!_;fcoK^{IIC_?|6%0(?fcjXzCN(n7W^QX*KT#sL z${=#f?4Tw5o4r?YWQ3Y&HvDfPvc3POjOzfW`uqR)y2d9fqYz05*R^Lxmut%=du8vv zDP8k&(?Wb?WJSrA8OhA5?2!;c_EzZ1pM3S}`~9EiInVPx=Y8Ju^PKTKpL1UF4MlFb z*o-;XXOlnK;^lVnxW+KGogInfd}Cc{~2mw*x(+T@XoyzXPw7J&#YI;^y>( z+BjLr4>9mluTNsqgt%~cT7pSmY*Lx7zD@du@WxH|%B%D*FBib45gLoJR#GG5!HJNhI|Q%l+%m3pcLwCJ9(32$~lRYSPxmFun^``#4YY z?Vbko(@=Vj^8 kj%0tr4%1<*opqOy~zmr9+Yde%A_ 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 Lz(I%$JRbRf&#E*p diff --git a/sources/common/doc/manual.pdf b/sources/common/doc/manual.pdf index 2b577d87852451bbeead4ddbf6469abfa1355233..1e2a29f0343197fc37ef59331612f97df4b49bdd 100644 GIT binary patch delta 206369 zcmXuKQZgW!tuG8{Jjsn>qj7#7(ZeiCp=_j@*&o->gS7 zY>6^}WO>_RCb;nXPjnu{BkAT-G9x(oZ9ETJEDx;iTTlg!&I+(c;98VN#Xn60$f{EK!Z^xVI}QT|=oHk*`T2s60k%d)aI)TizI3@Npn2;+i!rCM`hQY-)00pHnB* z)sxk$y-qvp`z^jw*u&&DTXUl;7<}MXGJ<8|L_qDW^i&rs4Q>|pU$WY4Tq@kAG)GxE z`?~g*)qFL{ux!^e-8#2O`pI0|G6d3>=ol)h7Gyw*`f|cte)@M~D2sGG;#mu1c?J-1 zK&l^7npDwXh?s~RO>AITnORcufkgqO97uup|7f`+gFF5XNkK*B=f|gRQ;?n_ou+1> znUk6`e!r_S3?B@hEna6a^P&@NuT zD*qV&7cpKTsCXWcvh<-@2N%u%SHsWu6#U}oFrh#fLZ4n|EbBsMk7e^vnt2zH=G9WJ zJGQsDSQrV(9;=bAQ_AG;JN4BNnr`8(X1(9I= zQKypP!H2OQ(((&6fogLaQ%c@~L`@x%)Yla-iL+Q=hedr@q9DgwR`-$OS@ovImRRsP zvdE=IVbk1WloTmedE5dt*F4ZlSR%3wX14$BfrFQ>$iahFw#wgy4ZAhdwAF}x17gN) zQO8r_01q#(5-ak?7pnpV^ZdJH-M#dOD~_@Sxr*q$lJK-c_sgW6scn+t`klErXHh|ktJpAU&h%6lXwD+dlP6Cdf}|Cg!O+`y z4WxGuLZG1L0y0iO4V**(O4FEV2|O>nYPn6phYQHvrdm zbrji%5lMyILn{yaM_#s*o(PTUIHfs&O8Rp2aX%HlaVKAmI(eO}ELT60|4TYf~z-FXo@Dov{L(oo1d9a51jHnqn&s`9H~c!w)l8 zknYw56bE~Bvz(mM&&pYCpc;ULb+fM77qeYco&;T4&p`0)nIxa2XO!Q>r+9Yq{qyZ9 zT~FY7F@zBemKQ18SQ*C7qDMhx!@sIgYCG(Vpal)rFb%=i$WT)6nl!=YgZhdOH?!g^J= z+3TY&A6{!h0rv0+j|!!GJORFK}z zVi#12cB8|KlmW_u&bKD0aUsDq3kRJ&B6n!Ea2yewV{LIo0e2f}8&rr-e@gG`h|l3{ z2&UH#0}Gws5TkEwJ!xqY-RdUtbxcl^+q1KaT~w?Kvk;+VMGB=F^PiR3zg2mE!Ry%1 zEG~AJIhQ9Oe5vx}@`E>2o(J|m#2*6QtZc6c-bil$cOCP;or1~zNdt(ZfJ`O4`2PwC zY6=b%EHG;d1(YyAw&t1xY42RqOkav7j!cjU%O%%qaW@Q9KlSb_kO8JQ=jY#??9zls zt}4R`S2J6}{kH{M=iSx(Z~hN=cgt`ETRClR#6`pK=l6X@0f6h5{{CVAT~Lv*pkn2) zMgYF!^SS*w0XElPavrd=WBT>?`sFX5zb^h|gzXOh)ATHWpAz6Y?G}{dsoK#gmT;#~ z!z##NKKOmPK40*LCnZF zZORYoFjV(S^y7^hf!lCQgCOYpkZ^g_opVnq#mOm`A*}aZVaW7H*2EGI%FFY8GU0~+ zMdFsci%1zjB=%8uY%~hz@P;b&0cPY0$_3Yidw`=s3=-zas<9aE868i=LM#6POkjFB z+2RebEWPCWh4$PE{&Wdd)RT{GfadrRo&j4BeR6&er1hM`jiZ2$UhsVips-o!;lD*& z#x{QYm>87W!D87~Z~Oo{M|mb}qHk+<70tPqH97)#Qcsd9c^Tz95%!(8Gifx3lL$eh zR`n2~uE68c$52m$Nku9w2}5FNyJ5INt|~S7$&h7*`cyB-=pA6DlD>>)Kfx-X&VPm? zhVpQ!%uSCdLlJ&RMAgTJ)oLo{YyHTG4Yqf9p972H)^MfaIhEBvaSX<(658xe*9QYZ zUuOdH&>H@A4Y9i&Jei(gkQJ)0O%q}77+4XV7*}so1(7K`)HEE7MB~ed9!@>CvBBQS zUOK9XN}Q|I9i~qva}9t8h_`_{?Qh*p#f8|a+1thNgm$xXrz*Y5 zKw;GGuF-!dXvaD%SIGK@YqPBX*xWQ*5_(0muX|u5xc~~W?Q3&^sTMs0Tj2@ zbDll~uR|K3;xSR+mA$|mE?*+6?7M_1`iXrTjkUX0s()X+ccbA5wSgw zv#^r0HSH2S4n6hwTOOa#OZe5Bi_gL(KYmaB%kfu`SFT=OrtZH`$_RWpQD{DjhGUa()3!uwH40m!VH6`8e;7f)7R)lHB%i6pOyuxjCF;!@;5Og0mv z^+WayGc2=%g}F4m#Sn1B69ca00?K|Ox?uD$*tz8%MaKk!RBnQ5hpCmYsulpFySzSo zpB&yYwABtlw#DQGG(BmMsksO=IVesW`H#EfBCG@N#8`FX<~&M#$#o=OG26mvBFi!` zIrXH4u~D~$(k8&bW7J~0E?taRjy*MbWq>K#QjNH8qH}HvL6i-n{uDF0hh%jsIGA{} zzK}u_l_eLCB&``0z&+d&Lq zx#-TKr>kR?CvU^b*L|zhzcjT{lK)3u^xmIpLQOIpI}~4P_(I|AFhC~^dzJ*5Q&u%~ z?-tf3PFmCYlr8-g=fRlqPP`+F`K*pbvQpccn@?KMtxyYhoXMQ2i-w`0J9*fQeY498 z4F6VML%q(>s1J+1GN+vl1MHAqdD=y0`(;Xtped4C7_ z&wHXV4Cqomvl!`WxB&HAf1%5=fgGkxShQI=YR;L0D-T%v^LEp&^=O6XWq;PC$&IFd z{?O*Hqbe5ZZ*<4lTVMlZU*0ch;zSMO|G*rM`~S5C%xoO2DIy4>|HE_%xc`{$r7y)( z@M~s8$0{H&nN&`{iL)1{r)*Wz4pKK(ZlIN4%_c%7pz|x$q)Et7WeA;?dsXfaKueB z?)eiz(=W%&U(W;x`$VpIc~5$8cW|UmJ~b z+39-3#Ezt~x6S+&-7}PWEW&Q}SOXbl1J;Ff#))#1syWakuQrUE>?g@$=OPTyqm65r za4l4m2L*f!3e?(BXhz2y+wpfKB%Jz)m4<&)?J?rdLRA`oE;Hr=6b862b5ZkE20tBt z=EI8S22AisQ}TWa`w@*KK0^M8hp||BO=4ZbXFa;L(u-S2&;owan}TRJT%KZvg_nFW zO{?{9Im>vn0KakS$%b_b9-)rN5>uH*{2&F{O?rHz%uMnZgYuERmQXXjgvqH`_T_eP zbEfrVF0l~+Rm5Mc$*!nbItdX)#HpAJ=%{?5`7KndBU=NCq3&pntl$+d0Eqa1<4O(x$2!0U{%PTp9 z3x@$9m}dk$YyP=5&PkS#Yt@Ri9qWR^x6%g=yo~5Kgxd|`(b)`duvRXN!r2CD%r0Biw_Y#-nz21BWZLGhS}2Vo`pYKI`R> z{5X{T^D~r9kj)+?`!}NOJ77ni1tAy*?sNpO6g`qL*X31F$i8lFn4P%P)hu z;*|sX>=8cm7D=q}1eL$_ipv|d*^P8tHKNt@NnW{UNRix1R6@wJz>~pYy$%*%n#Bf) z<6)cR+5|tFCt1UALI~nnN8`7O8fNI_B`b!oc!F%<$1)l&wEqqL8LO5C;w;{DwWWZ+3#*{gyI&-8=ZbL}K zE|bucoDclTb!l3pUAA`Uat4sks4F`_ApGKBPKhI z=mW<_pjzQTvT|HQc<#BY9R2;`8?bR|uBwSwr6KHIWe)-gW2pL^E|=p36noNQ`foA~g!l0!jpuz%kq~xHA0qVCokaoXmTM>*hh9jha z!+|!tblflpgfPWD!&fU*u5}P}Pp7$^J$Jihwi(oOg z$q+ME`~rCYy_J1Ro;}<@H!R;e!_X^?COSPH&!1&Xax5%;e50HEetf??a{22=jkrDL zkn|f4zFPXS14I!uUGH~ScfME===)!LD`4SIN8=3S_+rVJUjTdoyUkPzI-b^}#f}3l z{Gg>U;=B1)FjTG7SKnUjL1nrw>~EGm6n!54-&1)U?iorzNO?%aO+(E4?`m!yieaXM zLAxC(xSYbVi6J!xl#ht(KzP2J9+;FAg}~Dkxy1NX04wT%m2@XRgv!MIK{2Jo0H&9V zMfevZ14q*M2N9ANI+dO^kgteF1cyRi6{7fR*3n_#;|!Xri}PaR~CN_8_YacS=%smt557 zrF1iWQsZkj-UJAIG^vy5ZJ&>o`%;JgPW+>>O7Rd3VZfdVIRrbZhmXQRcP*yI?f7hC z(Pk4v@SkLNJ%M#d??*6iC6bC-#7#3AiIdX}fER*loUX85nND&p+YiVBi{hsI9~R@I zWV#yIuBodWuu!ZFhhEJE-`hcml@{z1BYOpM5&98&YHDrGe6b^Nt$=JW4>cy2`_bkB z5LuGgJ8X%3hmbpmEocgP9t3;@O0xoA==;)7jp#V{ReZ~}G1+zm9e&{Wc>Z%JaF{GT zKs(k8@Kc-7)JnAnax}vtN0e+?03K&iUH-(32z)w~YO#c3_1Tkx`m+cnGzw(F!q=ok zYF^=N(e5PTxnrm@8*DvZ1V!784cb9WY|y-9rMF{wbF*taOGvduakpgK*UD9`U@H#K zuOEq)#{i6)G`KS7cG;}>caB<;(WOlyz!P^WcW@Ng82IlGMcaNB@@q7iwfKW(oo1yi$QVb0(>w zfAKXj_}j_j4WZ3v!PT0PE}yQww`!Zs;zqhdTx}&c2d1Qae`ZB0^%lb10cK7U;O(>v z-liZG^jby4P={JTi3K)^IHlAnP9Mdytv#-@MzgPDLN?}C$G;0$-7*;XPVI`NAa$N` zD=tBiazojB_|25MYzf7+h-%2~fK3leg~wHyGS%=8Nw^db7jR9O!!xtx9r2c6YZD{S zm&fUu34ms|xb;PGw_ub#)T=)dK;I^A6E8J^Q(9v`t@)t&w^V`t$G58_I$Z#@$F`{* zWg(qFu%CUuzxJjz7v{btuh64X_hgD0*?Z~Gor%-6;vOxeb)3O&CazEKK@geKXr|9g zGgd8sK@lj8auD3b(N-q(A*av$-MTHG%6S&`2{mN*Z`2{X3b7cwd#sujr>MZxKP(m5 z)Q`9bAbJ!#@&v-$*Qo(IcrP;?aT7@6C?nLvS!(2He1ator2I!O%)?*c!0sip|G^kK z?ElF-7ADq|ax8Jcwh)rg{SQnYs7hBgrZf?b*)-1yhtUM_NqUwLLeLC(e}Rrp4f$qh z7O?&5pWf=LHfo}8->;OcnT3=F{~+zt!pi3N_2qTNO~o@!Wadzw!Z-DOuW8)3D?)NrM* z(xSEl9#3)r@b$6sZCSFA0tMjQN& z`%r9%x|W{Guf!`7_DZwWsksG6(Ec~&Ng&vE8tgv+BAYD~sVV6vT@yVJ>Epx>(_S+n z%<@jX)VpMAP^lA3QByVa^Op{MJb45#0!<^Rl_9$J$}@Hc>f(`(fxHmhF};x7TsYyS z+A;#!JeHg>wRGnV^CJ8V2lUfMkfM4kK|S?CQ^4EMTSTzNS9Q|MvIc~89!6ZpC9M^> zeYQKG0ayDfTH*1zyi|H4v?n^B1KJbM$;mA((0Qjz)(stFd@v3ft+B z^?**9#In#gU5%rZJ@kV~CPtjQE3jCDlD$&tS))+S4Q=Azdr=ODe@vAhx2t#5mtVC=fg& z|Dsiv!g?HYT)E{>rxNS$-q(;rj2N|$xF$k&8S7x`EZIVVX~(DQ4YYt!M;GF!QoWvS zCpe+39LS=VT%-pA*FADFR2#H?l-lGLFH()4Ky+dqG5T?4V%_!7y*rZfg?D=yd5Z6;f$pveP`H<3k?2nLX`pTSiC41NT%Qi?bQKUwo7AkQCPPTMmI1oD28 znZLeI6EfQ0F$t}#9!TW_eqUdPgDIi@{(OVazW$rf82_F=pG`LA>plY{7cf3_42^zV z(;CcduRb293D7+b%b5bLYkuKb!3CX9ft^4ftf4D|dF3O2pj$(TNgFNUwX(=0@3?mb zcJ{?LgYDI8Q+(CTF73Q#yc6m|qTp^E-kb_Kfy9mv=4cNr8oHjox^=Aw%`YZ_LQHJQ zB+drIMM}Ihj$td>EMEf#5}Igd<;_;pbu8jxvT`!jPsDT=F^NbQAlH`XN(HcYo?#A1 z3$rGZGc6!>K5?cFl7C}B6}8Lad0{7%F<5aDy;*z9!O2Kq3L$Uhx?=h8+~d9{_yPv> zOY63uEySzDJ?42gwCmigPxDemK}`^8QSJ6ckE~nIjcrw$%B%nha4a3uz)yEr?+g3M zpTL9Wq>b8A1>$s8DNPt0K{M&zlh~JVh}Wn`C3J8Z=3F zF7@#{f>~e`^wxL^fhfPqdCf$hjDKDry{{t?MHmeq7UF<5?55DekY{1UA`FTY)KQo} zk2b6XxlLw$mscq<#%NxRM#Uei7HI0O6v=7O2pe7xmfL`hpI~78&YrxTz_WIZq@}=6 zy&=t^02jv-)sC1!XIXf>8Wa$Q-ps}F#;8i9gKrd2bVH31qUI3^=YOOsqUE~iM9!SL z!!p5CVc5<#Fsf!4>on6<>15(SItyPjtD;2Ps~V;r4xt@UV8~G%@g^j03VLgoR!DRY zTWtDAQn&!~X>I9U-HSCzlP5W+D(F&gy*!s>&$K{(;$;+qBRh&1Cz=IWD!u$e;)8mRs@KT+ zb2X7gNv(Tmb&p)nN`5)eb}{W##}V{cP9fESk(%!{pT>w z-9Ms=RT9>A&TSBP)b*?r*R>rClVnAVXx->W>dAWVM$Hq#hbV+y|DF06FpKC184ZP% zCd)iMvW}&H7s)8@rfv9ip{~>Y#m%8BqcmAJV*@D{i2E061Yl{$Cv zf)Hg-is+yiD>0g^@ufu=H6rXQn3F_uHvUj%he!0+k9d-?YCpd-n{8KRK%f zzE|^vngzNSZC|>yZ)(TaS9n^3%TCSE- zXI+s%r5kq-X)sbsuH_k~4frYeoikP#!j zKTb|%-yoElgeXQkaRfE;{F41>48(?x(B|VH80YGp8u^QEkQD(S|p>kH%N4B*y!%;50V}D60Uo8Qy6L zZQ02nY8?S)tZ{vBDDvQba_O?>$|ILP>y!Ib}=YfmPnFp%OK!@49^5mQe_P_lX{hx z6piWPisHYtSNOJ>Uz}a=RY!o`F70b=P~AlcY6j$7(DMnG8J*o)BfKnm>JLFmb-arB zAc0gh`VB{o{v5S_5r5t|{MRUv_Qw_!`}jP>QM0}@>O~S_($?yj9<&(Ag;D4P2M41o zQ9{b`vTw0n|NG|a=gHi0A%Mqka%5mD3s!X^q_4=&e8#>)KVa(y!aZ-Ndwgy92Dm8TUfWbTZsa?(`|;xgB3~obUlPVUjy8xQal|Xo4<6`j=Iw z@=4i`;kj!KXdJu#C60dy(S6%t_4n&sUHDSkM|CQsY!-NN$i~?%uyWJP`%*E&Y_s1+@ z>?$z50AvCvfCe$R$M>QvO|~LqeVLI^a7`^zN7dI!8Qca)9T=1Z@stpo)=mc*SeYzF z+X!kbo?B%8aVGi*87Wa-rEFz{Y9xwSqb&EZyq%(ynC4LrF6a&IWU>SgDU}Hb2Z$8# zms+4=Le0GSfmbK!4}WqRWWr1ycM$U2Uzl2>t6~i=1s!7JHe%IRIa`Z`&V$)uhewUE zs^HLycO=G?a*<)1k5UQh+ui57(G=NyNgYq>rJ_8pKqYf&zD_tAkLoQ_o1$udts7Dv zB5x|(C5$n1w_~I~{9-k8q#Li;P$#f}D-x~v&(1zckX9#yOrA*nw5#)yu61XxO7lhG z1yQ`@ABH(xxd%}(E|HXC+u(l(SD`Y|XG8PUe;W(P*V#V5ux6VkL}Mc{tUV=(oA`zlqfVM4=}Vnu0n!N&r>4o$MIqSCxeSI z6ihB$B4Wafiwx`q1L%W>aAMcw`17ITLT<7_7exwT9zi1bhr08xWS0K8r0b#!e*<(? zm^(rmQbe*hMh*fGK@L_^c9BE$1XAxm#b9u)n<7ueSfi9iCG{*m&Zgw-aL(BeE3YY5 zh!1BKz1Z-%Gah)&>TQWH=rLXa4mO_{AovW8Ox2qc7z#T#?td0{*b5|j8%$CJH2!Rw zH4QwF<~Y_iYqx_MW0Z+XFQzirD2jJR9@4qeQ-EfX37A*M=^VwVkgzqSr@E6Zqy2Hw zYwt)LK^J-Ik3pqNi?~o1OodEIsl!TDt5{3M(Z>&W*zTCB+6+Fp&Z2YMA$TqO33(DkY z(4DC%x1W*|r!J>)iSRK-s>Hd-*JKehNgVG0iF&Dq4ebcSXz~|KMAuM+Q~nbIA_bY; zMhB@6)*Im34KjtKmnsf}(C8DPNNWKkT?=AfP_VzrU>_t{aR`uPDm@hA+?NH2Y+ zZaQ4gs`Tkjzy$Mv{X)f)=zeds>mh8WIF#QkSV8B%KVvEkd`H>)3>z}~ShRc_HXLTdJg4aGzk@3J&=J+T8uztc`7SE~yCP>g&~g zs#QJisU{X4ph(y1@`M%|R;@4~i?T#;W+i0Ot+&6?VhU^Y4SI&Lf!Pces<>i;9Hr|P z?A;~Pxb4ha)1Urwj%I5L#SxN&iMMqq>`?{PsOtLpwP*Dc-&TNwxV z69P%^HqF1qJ(`R6VLcK0d$4yPmPFfm?=&ca8SgfLF1qvH$5!#m1p$8NxEwn=Z# zI!#UId50cqBYS+RKyNNwek9T?)O=&uF>9t;yyVNG)!a)u+jp<)B6aZ?^3)foY$#X# zYCPctAMP#JsqyCb4W_Ax**XsH<47nR9VpkjXv+$jhP@g@DHc`QpQTXI5 z{X-(liwlYBdiL=3E(kDU&6YiLMZB?L2~{Fr%ccfC!3jp@>9hK``THT^!>9~(@?u#W^|(Bw-@TFZ#z?-+rquSqFYG}_P=65 z-AWFL>7P-g>BZb4YgEXR7c*6(^p=Ku?~!uF{loLuf!g~;cRb>%TjRua`IAKgJKI={~UrE!eheCm5&+;^N{nzfW+Nh8pmr zq?`Zeq1TOcnSgBfbsF``$}}oCpC&K7ioi6gm*6W8bF;BEBgSRNEhzt!?_XA(9w*tB zN3+{DEi)rB=gESbcjtC+kdntX|F&heCLf%TA|f5o?&uBrA|18a zjvL9FOVC+I>Tr7#S+9bQQXR~yKT$Z0`$&*g->U4MIp`O6as?r$ItWjegM`_js45_&wP8rJg1<_G8^~R-_L|Y zMNcfChRo~_Fl1W6&(nN2xL0N2sx$MUzA7+(l3O?ubPWt7)q$)O}AV`&4E>&o@6>htA&0U)5;zt3M69@m-OA!p1!@RP`} z)_E)^$uZ441NSj2TZ73m#x7*pH!`{gSqv73KRCuGO6tmo(WB|*?MLbpAO#v98j0_) zA{e>40`!$0mTQ_}=3Lai$eQvpltsR2yZE#{;Nx>{O0^Mmd*(t_3IFqStji%0XpHl3 z5b+m#=VWu_>E-^gVP_xEu>;Zopw228jj5hGJXZ(GNSJB)0T;}O0(Btyn$NqLbQYpnRkmif%vG12MON;*O z&MI=9BX4O1=~gE;<-nwDA8CwFFlk?o4+|)p_RS^s-z7fr`IgTMfQ^+rWuq^S4r|*k z)3KyvxJ3@Eo4)xrc!QTHB4>}TOMjGlpC`IjD+cG1 zG4-xpDWm!ALW!ZWtOAK~Bd4*XYvz(zqMys6p(F{`FtP5$R3d&wWL6glu)ivaj@!j0 zr^o;@AIZGY!tw^ zz4S$7K~YEZCE;$W%7MHas5TxmcsByPJORCi1sr$#$t?C7MA3%1GH)i%6*;ggwIy|u zdn?_dpk^<{+WjOp=-k#orIob$DeWyk@h&7jT@zL}bEF9ZsHivmC&$%6KIWSsbT)mf zBpvpzsM;N*p|j5+Po!-?z}9oOKTXR{lvQ${LvAhAwksLai&sH4hHz^uf*HifgzI%@i&c*Bl!=p)vTuhlSOz!7h#e>!kT<Ox&U*a~X@-NvbD@j+R=aiVlN=m&6V|FXX_9JJJ?XzU3~xkX z&nPk|wljElMA`J#F-MO~G05g)Zb6Rvf{Is}AM9fdGsDrMx{-CKiJkl*%&R`MFLS>~ zV}+P6#;nT3-grjcO~ZkVHK@LL#(a)w#wtYJ!}+6WfW{d@A6wb$qj{1*fR5r}sj#4b zdaFRI2X+j-Atx@^aXXxxr+LL?OWKBOfn7d7&TSkhR~3RwwsYEw-YcU~!w{EgPEacH zy$EcD=QO%vSE2KeM{3QUET#Qh(_wJR!pHJNjLI!?=}sjbJUdcL!iP=jP?5iq20H&P zUj-Z^VAaSI2Q-6Ic2)&8M+XYN^>Mt5p{v@}Mw8wdrA$$LT7?6?=|#86_;vu_m?zA< zihWm3=VTSc79}{cLd9|Q>L~=rp}x^(HhTlQ>?xJTC6R$cv)Zw#i#~xxK@uV?%3h6j zx24IooWq$xZx~XVyohk-wAlT@He>R{N^|K6kXmIk#FJXtvXe2zLx1JWh&0q;()Uy| zoRaZDM!J!L-u7Ni=0Dq~+)~ccj>Ws}ip#)}Ho)8!4SR_PUY4#9((fAhfoD(6L7tdd z{-Bl1ZWW5+zYqcwmth09z}rofnNaqI2KH4MUAe~`zfd7}FlGnQAPN4MdYrBv+3c|c z5PoK?@2#U`W!q7LbVze_@k&h5fFrzx*#xhd=xegJs!H6IY$>7Ku4EXxB3KrOW2n{R zi&t_CJ1O<5Mr{ViloZ1$vy}`>K}=R(gDM?0(g#tIB$qNn}`jLnkgDm zE_5OUNY&R4IRmkt2Z zxZ&v<$_u-freX7x@Bb5+U(-sL5dc&T#GjIy;buaS>E!V9(>!Vukd-tp6X z6?_~VVS&21xM|KRQa1)F40AF7C3D%OTfGR7-cky44N8q|r9?rzLP&!CPMLOA`b){) zd(fs4=5&=c*CajURB~Cp#N6&6xs>p(+exc7j#bPb!r9+vtMH!3AJSrO$dI>YXRDZl zx$lrx(MvJU6)*HdHjFSU#p_SYV7xQGnJ>LWO|Vh2RUS4;mh3#KaO*vQ-@}s#**j|$ zYIJwZ_32O-)rjnnZq@-iq!r7`Wv|YzW}l&4t~BT_l7oawnK-triVlt5Yd-sZ*_Z6) z_!;4|^R!Kf`k~$Aw+%0u{OVmbT_I=oxteN0c|z(Fq|9yDx``)xJLfFChYY@4AvuuK zIzx={G=^}xP0XprdrB=JD`j}TrZe`5=6tMu5N}B8mje(5PCu}FFhC%&#kmQLFAuj5 zAPD$0*3V?!0kyBPuExs*ss&AG6==ugK)ip5g%n5Dfque$V459Sp^o#Ocqe~X+2knW$bi(g9s=)`L3QK~%$CQNF$5 zG%GQ`bGDL{mIJ3t&S&nF)!NY=#0K%QY!*;KDO27p!*K35M zp<%$!;X}sG@OrzTfk6Rd)2Ocg`QzcaV+5fjAn@$r@4t)~$D)3M!=t;W%iY&?z_}u0 z!ufPYSY*pS5^xYW+`5x30as%fUf!lym9acQ4)xfQ28SC*N2W6k$*Otu`UnvyQU8&QP;8JWaYINyfD4Q-xqNFPvwMpy&~556DN%lq_1TbgcO{7(m}(J4eIW5q$bm|@}aFI zZ78z*r&8DxiKbx8Dt;VX%-S!3-s3dnZpHfgP*M-crjDK#cY}u|CdW zJYxY-;?7Y{HDKEnU^Cj^`?YR-h%nF|4v?Iy*AUY*_u%hiG~pQ7gr5~MSln<% z7Mippg(G+f(wv+JLlE?$^el<^%74_G*ML;*+35g^ES=#)6-?@-#-j!wr02|@8VNwo zshf#@Raj&J!m%An+XltPwwlXdzng44ICN03tU6&G|+=9SSV?nywX`v!%^&O>#bXcy*RdsZb5Lz&NHxZQu~ULF4mVUa_ttK*iE8H=i4 zxK8g>OGlBdtNKVZ7%9npxH{a6+;pJ8FqOL41|{=imv1isK9mmq3;_x{3DxcCZ=Fex z^b)~;nBRNhd9Rgka@3i%TR#z#Gd$hV%g+R8aM{3YV6j}^m2!}NFZ_@#60{^Z$I--p z9cs$b=Rg|Hx6YqPaiXIbZdXh5qL;)xuikK0dbbK?NE)e>i8|?v6jk<<7I&V(FQxCT zRn=L8mnk{{rJtR=&LK)?>83MfMj{ie5YDSJQ*!NT7AEu~1@|SOF_;?4!HG`=pv}hrN&IFFsPY zApvixxlg7%p)J*J76S8N8a!5MP%KNkg@xI?tTrc~*7XV*ZY@tKOwDm9@`zIW8R#Lv zO{{$RFMsaBz+EVzANrIyvWT9ydn1+saOM=?XPf!Pc((U*07@y-hjsr8r`xATpC!;y2UC8RRbz zHF;ydCaebh+%6iO(TXvgSgEYQedjv3Jwd9_F5az^7Ffj>d1EdL`Hyh=@&p@#bp-`r z8pwnzGYJAYKg6yOtI>F(%;aqdb5=DvbSpa~(D{-6Y z_lKG#IAN6ATd16a3)F0mhKPm&?1IY#0gn5K8QX(AcG}~V>pMTzKbe)p4i5W2JT2rU zKE?6#Y)M1%`rV{eEmvvx7l4`GW*1XptPM{|-*{YBRUg<6{5+@4CmOcwsMXMQ1LeIS zlq6!tt_Y#Ir^0mc>J6cC-mgE=0y-FTUmUhcVk#3Z z$2Ko&bW;IuU5q4deu2D`J*~AVX_HNM{a$)zfyte5*Up-VyZh~eh=AkU2X9(|aQtBG zV^kSGAbc>TK|THSj8Z41l8(GJ%E1IEw_$$W;~GqHNI zrV1p|q+XlfG3ta!tkwVguD$&} zj(veTbnXZ*Z^;S{Ymg=s`HN6EqPXS`Q58EH@%Jq)dX`w~qyqC7Up%w05dQc=-}q_C z0AC$7S{*0-Z$S9V$AaTLAx!csLvcVul?b910;6r$Ic|Z^MUVf$Bj9Plr}XqWvbXy3 z50*;e=P>qb;7v(H!)MQ6d&M^G;%rxLW6K?Nex^I$^wfviJ8Iu%_-1f*xVce{?FNmA z<;Gr&-5#!9*^7DimX^;@bCQI}9v<}mJqrYCF`hY$BtTo1*S_4nQrLDSmh}D=i|tu` zc7jdIX*)^{Wxl#~8j*H`wzX8Kissu;ld1122wDyOX&mi_Tm>cttQQ7lB=_%|hFSC4 zKq1<;I?1XrfIlsG_`e)+h-6zk5yfyDaMCsCMxm9GvA2^Wy&+eGPK(ix4MP8BXgy_c zX;IMJ04BBT8B+5ZKe7GX(vagp;;m<}s4QiL_04Ze`W8llJZiVb?2Jysj8wdh|9~sy z=tfOuUVMO@!X)j7G3(N2K}2EIzfg=Bj3GGqb8`?fVdR3H5|f-*){1TdYw+tIyK5=! z%ldCSF_|MVOubZQ6vB~HNi2q1-_sDveL(Ul8K7P|*>5Js1`wobjat$K6ZYGQjfs6Z z7{;11a|=kyE5eN^A81<5cmvH#MiOo`ji-&$@zux=hkL@|()<@$=to%sW*M90vf4V+ zRA314ThnZ1EqbzTe}UUhy%he3Ik2q%#~fzn6jEUkz^Jx-!gUw??tH_<7qGPW)i4JV znAFjK-~B)#E{ZSe@6j)ch5knmN0gdP#^*`z>lLz2jI@zO6GlX&j^|xG6eRqwAf`ch z9ElKEs1p49aeK_zkN0D4`tk2EAz}MmQV#1XS?=fW_o1RHmlBuX&(At5_;?0s-tO&F z`#eApz$YLWpih5$O#Mf;lg{0Z`-}BEMzH%LStje{{=c`W`w3gsv#ofp z;HWJ-X^A{fAM*1~ZkIfFH^c|$qKh)tACWmHI;URv*JB}OCHZfMCO)rsao00Z_H$pz z%>PH$IYwu?WNkRM*|BZCaXPl`j&1vmlaAF%$LiQlI!4E~ZQJ;A&dizl)|$Vyp6A!T z>#BQK?b_AUy~OB3Jg>J2l9(tez&Ieo*V-!GIeq8_j8gI>PQeh3rOs!~rqqejp=uH$ z3J)w>%KEN1LGLY!L!-RtOc#l(l%GD#e!h!3BSJC6l{FY%ajD@!@qMJEx8e-NfuxuI zVN!{+NJ$K{!Z*ukd+QIzIKDm)3&J^j`Pvs#P78B!b8Ow1b{uORGY+i&pXOtm&{+FR zR&`N0z!)y+q*%R}c=_MMzV~XdKW~0J-z!e_uE^@Cn@Mx2Mq54A3|{S6ztDhv$h`Pk zY@5637}(5oG~-#y)~1X0^mLp33_x@@PBsj8NI_`DNuX0Aw zQ9#9rk^4OOe&jPVM4#0-?r(Y}-#C3)6H?L#cxX<)kF|h(i@cK}Bj-@4i?VUD;)?qs z2Cq^{38q0-DHqN}4%WgNVi#@WREl!-DtqpHzM_)zC|zhaukZ)?1XBYSp%SS@=~tl* zNwk7ldyJuUNN$-<(<>KtT%fE9>4Du+%_C5eeFR;5jKzNZZrJ-ocR|_!2?nHA`m|Jt zA^|Y7E9d#4)C1L2fYuyBs{r~DlY3tQlPY>;nz2e$eear+$K*SKU+nuZDWKuhlr- zUe{p|Uakvx(OcS+7LKhd{r)F7`vq9*lN=9n`G)4*3+B~17U3t$rf5x+=DncTRX?Ut zeh>~>j_Ab=Rj{N=9Ti=LhXMopGjx4<7K{;QH3i`m&e}5>ioUn72V6s}zPo1`uO=Z7 z_q>ySWuD@<|M)5J2<;?L+Br7VicJsi;s;Ng1$t{r?t%X8vh`5KU>MvGCMa;P5T6Yz ziOX3^zSz>!e~?cp;Wx-qXmqA(VCVeqrE`LvSQ_u5?s-XVnk4vV~3MEoEXNaTI3RN1a${q8&|TIH#Q?+x1q3K2S5UPU72BX~CcT9%{V`<9p^5rs75(SER z4)mgtNv-SDnt9jLM%=(u@o~HXR;xUHbf=v^5?QHi5>*VoSkRFvP-qvZ(GD#m2krbj zlKQq|tlBfbD|R+2Gf*b|C!BoF&aS2W)foH=q_@>Y^QB90d~ehTa;|_rMx!1Z-m!BT zQkG-MiExbUoC}PwX%qB~C@8c( zmpAP{>qtLSs?KPDw9(3YF(_lt_i{a|t`m9?jeABGo}3!iz!Ub1r$T`AyAFrds9%@@Q`!>EjW2N$SadAZ9J9Dcsz<}Tzkmc4eNTj686)ei-Tf{ zOZ0|da|?_=yPfjiiZOQt5P%6yM)%1x)e)oQR=JQK1)9K34q}Zv1N~_X+@}R&9gDnJ zs!q1T5uTV9ftEc%23zTxERQDTOOl1~g0M3rbp0 zCRq%%6hAO~-ji}urj=qP*^=q?gLm4t*EX2*8-LvrbL^fj>e5ZuYZBM#90 zi)+14c5K2b(xb2j;;4n+K;}0@*Uu+8w@Ut-$|k4}cv^K9!oRFZ;;IxJ7=SbJP)Z0` zpe7f&!i>`XqVd>f;BLnL%={%_#|EjL;foh_yKB>=NN&sR#e-A?dX=#|IK^Tzf7+Dy zO%{e#%e%^3WeH`Jjk!)qkQ3hVjrHAL$-A1-VePlk?{_rB=k1IueMCHU0y{eQ}dFB0;ivJLCVn5p}ICU69Rw?$%`b= zwRxtKOIb@rg3x;$KWG%T`0|;{zDM2ERfL@a<-)JdnDjQ2Zd`xmbDQ;aFqnr zs^#&g0si~Yvlqr?cyInMkdyIXxP4uD{ps=pnSRu;y1&NQT+_q zsSGP0eokS*a)Pu#XAqT_D0m+E8cR_vx>i&kU!tf@zop#=A}$*a{A{IyGhA^x%a9ZG*K>G;}{F?t1mx0J$|0UX`hcmKh+wKsgf}h}~s&{4U&0P!& za>uE%NX1KHH?Chwza~mjKft|0e>1*u4UTXoo}m0LmL1#1dcHh3ST)$uGm5|gM~yqd z467?}4RY1Mmz}KONZ%tphb6z;nrJfPPvW9ZSoGvM` z4R-NDY!KsHa5CUxrcO3)HmJRo@uzk=H5{U^4R(yOTb6 zN!le?{DMpTS_!OSgIgTKf;_u)B_hSnjjq4nE@Ky;eN9Z&a+>E_7GXT5&5HtlyzyEX`=p)C4p;qh-_ zTsq90FU+VPymdLs)J|<#(6dl#LR0X5_2nyEyz?Lp-`U!}40R*+`>7|3xj1lHmu zEJ+Pv;P7FCYa8VqXzehG9Dz|W5?e11(fuqrs$UYvm`ODj;U6%Shy*^zL)Xk-==^f5 z*KTf(mTI(~75rZH^BPfETti`q(sBDl2ZKND+Bc6v!eO=?&nVFYzOUSe-uq%k{R;@7C<`j4d987~;! zO+$?v@)sLg_;W^CL^1Ao8#)>a(~JztE&+D6fadRR0!1s16|Sm|%BR(d#6{_&To0r*; z6a(~(rjNvP08g3HqjXV!HU5&~cqk&-rNra_k)oC^hJ$RANIyNPz@QgFVp|tv?7&)+n{Vb1^ zEnpe}k;5A-#L3a>>*O59M3LvgfH}q1PoS?a5Ytwsajg3dpH!3G+X$m z2t!O5&}g_cVv|-7I1mzJ{s+l|_gTJ!dEdDlW2^I-1rp0#%ZF2^^?{2Ryx-X<`e#9h z4NWtoe>wdDD@Q}WRxo+aY*`nTePu{uvmULNjc?gAipv8k-bGf_8+ymc{P=Zh9A^Bm z*I4Q>-i$eE+2(B0pXXJrVWFZ_U+DM^ZQ0BCmwva>PBFue!g}Zjr0C)SUh|(PPIFz- z#|RSZy#f&~xl09g99lq9Wd7+t?i@*C(ne&(-12L5dHe8@2G)xFuJqJ?vYyYA&YSo6 zJ(P)J6QZY0h?;hU%$payHfltx*pE6ComB1G%<_>AQWe1*Yt`}-`g!jxEM`yO_kMY- zZ6<$AW{o2j8Amt}o!by}sfil}DW$KoQd;b-E(G)#_QRC5L_Xq}PY+AB;K5aZNj@CF zV};|Wx;7jnQ?lPBq=7y^pE~Df$WXP6P<&+Vten2gFxv*rdKKD$^!1>4{qq=8Zr?ZS z+wxlO_L0hwOn8ZBSy2Xc}0dUK6;4##|CrMWlY!DO5n zli(;^_eAv62@adb$_!Y!Y5i;8V4?#xxEeT6b7!JD=|^1ZX#34N-&SZ6%QkkQD~daB zCbR)kR$CHiS3<=2EE#`KuVbW9>)UG(oWR0K){gXz1E0uq3HHI7WalZsyEVk4Hb1=z z?>0j`7PtOUI41lhG?{P?%Q`d>uTZa`dbY!zmr|?kBRNdtZicbMvx)yAPW3wD3tv3s zjKHAnI@?oJH^SUi6j95|yc_H*PuRI-3GKA(I+ra_*FX(_Pz9P6JX_pe)o;y<(G2&e zkr1blk&tV(4SKcNqw%EyyLaBDLU(Vl;|ZfMVeIWQ6rUvbH0f|L+qew!)fq3v1?t+)DU7v>eVX#zgzMQSB=jSbE6w z*1{wPuJm~ZWs8;A((R|p)%MB3ObStBQu4R*DjZI7so>Bgu^z+< zozp%Cm-R7&Y{WgDM5|Mj0s~6kMbxT{mX$^87~)y$Vn%8lFXz?ZP>$Wa4A{MBYMkET zDC)JXhK8#7Y617@zP3DD_t~@V2gMlQUKBC&dn0fH)22Zf#g;VRolQty{Zm<+^ z1CTVR+Yap63e8-n3g6S%f~dJgo&Q#Dv{Ru;Cz2Q^_}g|?JET?^`8 z+x~q1nCkJTke_>S$hhH{E2VX9QuBsw}->K?B})+~N6R z1t`C7a+vt-4M!m|=*H>!Y2dSPj`vL`d+Ous$CKNK&kZ_%+M6&F@O|et1yOfkHW zW1HXm$=TD>{mc1aTLw_?VK5ecwaS6z{W%8PVZpr_b4(MC_jJ_LNSAdIS5Euw6Z9e zV}-MX*8z_;mrk3DROzB)i0!LKYEDMI^ygdwzsDt^@} z8ga(?WU$f?n?R+QW46d=WVcYzU=($kzUFn>ptMWvJ;DRU=pyn(Aj-^dOMLN5Iki-U zlBr>IGBLbZ>u5X=83j$bkMnv&Fy*A06eoRM-jXv#@4+K_&4Y(hP`XO8St4Xxyo$Lt zJ*$3u#x0*ph~Ln}ff^CaVy7dV!G_Xcxge{B1!pGgY1zr!4GWLGfmpH>mCnw4ED1ZP zqQ3DYS>*wRGUr(ecRjkmD>0G=CF46S;VhtJl)Y-#yfWiiGy*wWzXKZ*f-(0+Xz8ZF zKsWjzP`OHTG@^brt5?KioN83An_jar-@?B^sH#PRqaf4wnK+nK#+vwRR)GnDFJY;S z+#{-wND_RZtsiHigXl+M4@8!Js}Uy;VK-o65m5nVOYv+eQdL)_BiU@YedY4Jl%zTM zJ?bY3DZHVMCXGm>gUF!Wav+1#c$$+zN?@F4ZDmhHt$Q$F-!51w9{cl6RnWOj7@ZLJg|)Ysg;4YrzH0s$0g7p88rAs z3Y!ZUX|E`YirY7@^No7)MhsH4#gHDZzFr_$4y46Awb?3(e`bEZO7T>LdbYx67Q#=D z{+!kMLgdE-Y+-q5^k8@=Ga#z zYj?G`+My3p(d>#L86slrZsNFI7(#g!!pdPl(w1zV1Y%**K0ACXdh8cgPgfT~SVY9P z{PSEj}F)mi8keHmFKep*9Zs0glMx=5P)c*c2PW_#^GY|e+rl&1!&ek-R?1r_uQGqW#V#&qik&|WD6 zyXO2ihpUf&=Zkj|R7{BucsBHsA*w9h(M(z!*cQH;pN`(FZ+-C^paf&fJhj@Ug&KB~ z>9L|?GaNFm4_89SY|2|3XOoEeVBe+Al)+7_B6K*R$g4?AC@AHK|wni5rv7I~b zu3YjYh;t4tb)D?NX%L@qX5&AwgZf6Hn=j>xoaBZz7!`uK{6?pjeC_?qPtF@lz%*h7 zb&U%A9>2b{(E7X2#k@k{bo-Prft4IgYmMrI2!gS45+o}bYkUzd*Fe&|Um(*9eWpZH z%yB)M#}lZ%X;sG=O~7M$;jB?5`O+N9V09|;1E?ZLTDFKD<|E}D9Wad)uUN0>UEN8> zDGPfQdbJ6Y_#$qDdmfK7kQV_2?ze!x8H&xzNo!{nV%dKgo3CZS#lnVX2Rs?FGOVfa zfZQk}xCiZ!(T@~=R>z-FX!TbFxk+Nz{l48zSxcOlOO#qZIEbM;O{O0%to$7*c_ur9 zsQU8e2SyP4WxJ?^0J}W?&7k-OcdfBF))2eD*L?}nx7XG>EStx+{#@_^=wL|s6QG+@Rj`r&Ea=roCh?9E@^sAFH`BSn1F*Fymv$vLMC-)nO+Oio@zPqte zx>GWjYQBg$Ht}8p@lvOeTC{{jOh-ZFoK<_8aB*|%npVC?$=Zz%(7XYv6N@4YaH|ru zX2v+f#}4#LDbFp?*loS*5wLi#D*OmBs8flI8LQCTSs_cjqds>i=_tczEcRY-_I)i4 ztZWnGpUzI#>e#S2SGMCSFxz@aZbrTkSlQ?D4+oXR6M|9U`F^c8q=rd0$< zTK?EIuomofO>^hzcj1+?CuA`-oWI8OYaLj zFop58PDGMQ64qZQ#k}@9k!n6C2I>9o)4 zhXpBAZuaXc5Z{nb!0B|x*^ZscD`ig9fT>zjy7$H^j;7lFk$1TEOi>dY6)C}%hC5_X z*v8zeTM^gpvKw{@D$IL%uG(Kgd5@8ndv~cFDXMh~r5)C`u>>1VouNE}Xnl#^xh+K6 zC?d13Q2&@xeBTD!soDJ6YKbzBh+A{v z9a-ZG=*1n5Qo7B8sr9bLgO0!i@9rNFSs?c$=#tLJl< zmMp^TNGrJ_ccrm_dNzISxdi5_s3?>m<7JNl22RS_EF(I?c^5g8 zg>~K-acq{R^IQTTTg^$g{iub5&1f*}C#1OfOf3F*4Y1?Un++i_K~T>N%#*E5#N9g> z+A-PF7P2nP*Z3ZiS3tR8V(Q0-$=|wUM!o^zo?sOLy0zF(JT~~H<7ZD^+&6*FRkBCm*am5}8kzRH?rxG@(#euZcrCWL`MUOj_cC8I^ zPGt@zf-iE-Zt#V^mBYpsi<9IZx++Vl2^4Q?DyT7d``LiI$+k1b$M$`KwA)fBtypMN z6@ds=^xo~pr4*I6Tz31RhGu6wF-r*h_SHIaY}|z>P8>NF4vsI(nXF+D(nWi?EwAiK zJR?Mr>3tj;bHKucVE_0?$7BSEVG*RbC>hpDHZx3T(NSdak%a%>U!{H zb>#mlTwtaK|G-&xRSWh(P~EIQAgM7_cx)2}Wzvu$~8hz%TxX{wO^jVhM}JO5L@yZ}Wy zoO~^27ruyyF-E&_qJYt|KzF}^eD$u5t0IM1hU^(pv9`DP0AmqjKP>Mwe#-9m9FcR| z(&dsOBj0x$2&aJH25OoaE3Oyq)YJh8Z~ZJO z07P1__Z%|5fzKE6Z~Hs*LC}LG;bLWnGqp4Mt8qOX$3JCIe0)r@rgr8o7Q`GZDN1nA zY6ZZu?Zhv+*`u$726NjI0bVgZk zZa=YeUg6%z08 z@p6Y0&7a@K=h&AUfT6@*S8MUr_-(4kT|Fm;n4Fm_4t;l%;z*bdzRu381PF zK!j2e2;yj<}hl9y%E4Q~Oq@494 zknz)26)6@+G`Cj02waO=ai{q@wNx;ED0;k~(xT)>fC@aG(m ze2k(|^#W?i8MfRG9n42h=U$W?{9n@%9dxhPv`wg`w_3|%88XhUMq>yo0*pC!hvl7> zhs6)vi(;epHpm0VJiiJVj)lR6X1gOrjvC&VrZ85{ucjjL+u-`YKeHzobA~hHd!xqn zD~YwNh$kV<%(}PmbvGCK9s^;@bSYG=DAY}7=vPQIcBM0;uFMRr_jPB!%&~oUaWx#! ziTEaEkSP?W)R*W=H-l_R=TmWr-`%4(+_qpvtC?x7y)P!GUmJcxFSU}iT^SEwdAc$Z zGjBiDPmx|`vFHuWlUH^Bks1M-T}=EedEIsjtxLnV9b}Pz$PX>}E)Hzbr5uO)rVJu6 z-k+rX;Q~9EtmvX7w+NW%?PoZCJo$p;NlO>(r|}{SftKX>!~<{Z!tBC}+!1m6&m+r@7^6AvQ4| z=iM56bYMfFk{ev@3KC8*E@dHCGV*x z!*i(Q*rc$nMMNBC_Kf!V_L!J6-l}LtnC`7Cn)$vu zJhGYfgEs^al=Ri7|6nQrP&-f1$fvI$4_9V2OM}HX3hv(d(gV~HVdOENOx7XoXhBqY zRIY2%qZ@(0?AUFe75ibLbHt8&7Bg<6UPsatVb$}pW1@DlTsg73ZrCmk=SqY3c7hy! z(883=YNu@_0WwbK-7QEB__5YB!XiyFm+n(zj726ReD~<{YqM)3*Rk4_^aRhaP(kQr z{&n&dS%R1P5iYS-1&xk_>U4v)<1Pr{|{R1e?f~37_Iux+2x^bwY%A^B{SH9 zd`>$g0)JALTT@6+SMb04ZSo*`dWFXX-_nlQ2$b`=c9_x@{;^>O= z-C5#OKFfRiTd9D;4`h6}bXHu?QMrcJJimp}%5uEAuyrYA=W#xlO<(Px=Dpm^CFc*ea)j z=Lu;-&C%7%Pe)71^BAUc#u^*~NEY7l9c%lxmE7VG+?pg2qF0iT+9@F7v6%+3_eu}7 zq4D9+wSoj`1|~6~K}Mk5jw)Xc(>+c)I(PViFBU?$-h_Jn>eeZ(=`#c ziYNmP)Wl-hgj>}VP7j(djj+}(rk55arBBSlL_wQGQ>V(XcyOjou zVAeOcIx6z}bJcHCitv2D$+@w@tM;yMhpcqsDA1CFO$fi0hA}a%r(abmv3rVG-XQX) zBG1ZDSN^r4VRNwmTO#b-tp8OAM@md0I76bM9t|iUr7IXrAgEcdsaX$HiHH{P@9#O; zIM}%V`^P^$#r~hB5`|#Mfgvg~GJVV_9S<6#S{CkR3H3C=g0@XLO(B8MSG(}RYPZ`P z?v$49W#_aZ>^F}co~G5LkM!%HpnLn;8Y~_%Kf+=Mw)esG>*P9O54N3Xbr}kmn}@q^ zLDHwdS!5NO0vc<6`GW(L{1{;gUOYJUuvbbJGj~ZeI8wu~2;EF-fMgN)78td)NRfl= z2Ih(-2Q%W=R)pllkf4Q|1ot(&aS%eujODO%-OMbt`U6W%=x(jm=D)@$uWps{$OHa_ z4S;*Q;lun`wSvb*{7SBy{du$|4(!D@6U@%_E$^jOVrP3S9_}*PRim+C*M@5;aGYW! zV3t9J&0G~tk@WdYd}s;zS)6z6eV?2aCDmSx6~%RuCq22+-esRZqUvL3Kf9`VkF&_- zzjHh}TPl^|R9v%$L9=&aj`toF)R=Sq^i|6)my9Ebl&GnxM0+|1aIW-u7rRg*1ObSg2np9ha-vq z|5YUIh_gil1k0HoH#!KnFT7{)P-_-UFE5FwW@En#qx_Af{D`!YD=>RB8lVx=%mJEW zn~1c?VJXM&Py*6XoxM5@__QZnySQca2ou$d9)f{ecO=_9b6;GmR{FlCN5=?z;h&e@ zDcUkQO_nw~IPAuW0rPqLL{T{r%JlH%di33+v2GpNVcUbf<-_AcxII&V?2eozc00vm zN^X_P42oyyY_;9PN?kMC!^MET)YA|X(8A^GV-qc$YgWe;Lt29wGAXCLDQAq79F)PN zwM-4hAM6Agnf!YY^2HwneRH_fDLEfW29h@G^K2OK4^1pInCm`&CMH6W)~fdZ1c3WRikuGa`Rln=eM@_=Uqv3dy13K1 zX$I6Bs9qRjuRSmE(=U;<+?|A>9!zh;U`vJ&DSf3(8y>jRW2+jwV?^p_#6hy-!eHqN z*0ksg>0ZuqOqfWBoVywCD)U5DdT65u6 zJAszBhAaG*QBS&G>p%@SU;jjLvJ*{yG$C_WlOS_7*)mg&GpFzcUK@{j`;w|~cZ(=c z1-;2!=Ma*U!~O)NL@zye^Dih30cv7Q5_&o}^4#j$d8XX)yRW!8@WOuo?&MOFy9jw? z;6+zaF^9-wTG+0&Vig9fnC})01zsgL81pD#$vV07g?`%aepb^LB{G8`U&tcmASr_gEkQg@PM*Fod3t&pz(!swx@*h6d}F`ukCfr^ic1m!2PwNCJH9xxRf_EVM7F*rjQKz8om`isCht3;Ll?t;7A4`uG!^_o2rs!65UCFm6Yo=eoV}K4Y-F+> zq{3Sc!!3D&2H{p=S{qFt8UZ_Tl))sYt?nB^~TL%1nhWSPKJ7fNW5q$9JYZllmUa7qah>3EOr4yYMM?v(HA~3$$ z>5AG++?2%4rr^Wxgx=*y?L=NVV=pL^(2?Y*7>*S^T_f5O+jgDZMfb34G7lphYeqir zAlNW6SmniBswFGR4J-73WeINrFH3{?HpT#?7JR96Sv%_y#i8Yhhf-Gl#%6aj*DVl7 zf<^*fcP618w-R?D8MgQUhiTjt8JH1%OgtgWHDohRaZZqE=-WhxLAJ5&tik>wwAL&K zbpltn%3e^VA&y%M>tZ(`AlfVbYkcf{+;=*)Vjfe2?S#C_u`F1#DoeX?2Qip#og{w+ z3J$4BSdSt?=aR^jdF~)e`9NXVgjmw_selCg#zwQpfLYWJ%(t8+CTx{}kfg^e4WdQ+ zm1Xm)q~+xiV=xLBl{bftY2Q(deS?frNjvhl@;LvY7zaDsf3U>)H^n}c_qP+_5BpT! zr}`jy@&1D`PS*c#UO4|3W1N3mk-yCCe>A9`u(KFoAjyXQ9}Q|QGPI_=zYQm3#%5;P z;tVb(-;(q53|HHNA6ge&_&eJd4E?{hUphM^mtdJKb6V) zt6&fC0V2jz=6tbY-W?id@wO`RP)UkT&RLqg(qOrCdGsDjz$oSS>gOGF!w4Nk&12&Q zq%S|cvY!Rf+|2hh%@aeE$VtotM9@!OQ7fBJHMOBL!5Nr(e;@!tD0AV%NS@_qK#x7u zsbDYQx;>N|ht&lSi5H?CkD-cL_jS>;kRK(1$(3Y<3`bYvtE$PPvmsr5L^KCzjs)hK zW#~9HT`0A2k&Wi_hO|;;ls`#MdHUk)N4`qT4+nmxOMF%m%{onc*Ftd@y5%8jvI}>I zw~jcG4V&k@rlSONb?a8T*@SjaP^mu1Xz9K)goC@*VaB?I?7K!;h;`?PPhCv*c*;?f zrc*0xFX{5$Lh{LOL=GRCYrb9x2J)TJc?Dq^>pp`_`%JJkqW^M8oc}=}`+pr0*S`_S z^)~`}!Wc#%n;1r*9tG&R{xL{gEP(%Kin;!mhg|>Wp{wdh#4a;J+X0=AzGQ#G*>i{jTy18*?-G7&+R09f-^YSWv!G0#m(vv8YT(C)d-mGS0r? z;FULlKyW%Fo@y@$NvAyZVbszO*$1 zV&6w}PF#V|i%T`ZA4(@_Kr_{hMKoRnvX2(`w?}M*?g8M)S>|Cq_s9?~$VPgq1*vWr zD>OY-<09var+Lmc3|j;%G24En`o$NB-2?teuy0p`6e=~?HrnVT>t-zpEI}aD_HmHBk3>SF#TqCgQ*L1o9^7|e0)Eaax3u1jT$vAm|a+3PODPlbd|Ja#dVnA%SwXM5V% ze#7u38LK<(m>_<(NT7XI!eh1~nOu7-;!QDVGxY%{&6B-}H+-Ds0p^jo7CZ8J$r`f` z7jXfk(zRu~GMq^>m|4Nv;~hqCdF&~cbPhKCjP?1n0BgU+Y!otr4PW3da3^**3To#H z$i~J))EUpjr@3d7-S+KDSwgu9-ro+}I^?qL8%NS84ud21h}`MeB9Ku~1CpGvvG_X{ zi@MGqm&fF(o&!yw3KMH*O$S41JKyq`9!Y!4u$Puzp>;G7S^i!8kC@=b6_2J_*63GiW$+T}0G(h)-(BpXznsEP#6Zv+;;Y&F* zWY8=Sg#rGKX=`^>SR;CQ>(9OtZ3q2#==dbNpI%C)d5r;3>XbptUoM59IOr6&Fcs^- zFwHb1mBOtXgqbqVKuOR9T(WuD_8&NB!nISRi1)-WkL}NezA+K)}1&QJp8Gw_m7+EB6j? z&(Uw*<;CV3=wbH{qQ|;|nw}sH2X?_M9CReP{h9LpQSp*~&`LNIoL^m1MN&$bSnu&>J zILt-4wPaFr&)j0CMrMBTLx~gEvm*O5zWF6!*C}FrV|aTbx8EPOJwi(l8S!(76hFez zEQZTyDT$$8O&;(1LD!}0f?-ey#NF((g-?RwazuC70$|EOVU>cJ+v)sL-5kZ-9M)UX zjHqzq7*l?eUJI3Ns}O*&LOSE+oOUaitJt69bOyJtm<=85szT&`bix9}`_BgB2V#pz{ngbPF$fQUj9zd4#t><1ykl!Pb&)D)j1r%okR zo-Y}cH(>#VgFK^<)Ca1zw1I?>2tvZ{>uhH5GRjP|N}#id&`G2c&TI#|W8W2477vG% z@NR55wCR9IioKR8O_dN6)geX@%bG!KGCy%&9wUMN;d<5jk|ZixKBtI6zv*G4N{HyFI=?WkKHTGMBFIF%8%mur}d?BDG@Bg9FRO&ul?$%gWMxRhj^F_&;QwV1sXqf z<#$E6;O{y|2Artqp>;9iZ;#T}upHr=Sr|0kV)5OL%jk^pRU%D-!0$fgMn$09Kf_t3 zQ{9boEeFRT12>LaqA$@RmTNttT;OVrElgQj?dNN6yM-O@THJ=Z!d5J8N+<1eVr_BS z?C!gCee9dN0grF_UM91Ql~-9=V!E+L&Xq=ZwzbUdqYquGsF4?w<6z&`*;Vbd4o0Tk zXpdF1@^{$vRWMhRfSvkK(uVK>!}>JU0dR&41p?m)HFv+Vy^wI&gRx18^XQ(>%?phq zczQ5gwiC<_!zU>(c^q-b%9vV#*NQQ2QxAFx?g~gx@`Zc0#Et-X@5|z*%RTedeF+t*jY}n9R;A z{hE+tx&alsp!=a3pk}3@@~e&9^B`1qV2qzb{r?O}{d)*1`Cj8+id~^C>q@2jOV+Dk zbX~F>UEfz4M?SSJ*A=4kVvdvY9WLENZlFAnGRpvK-6|V)O5CM*OTV=n7@|Q6;B=*f zmbN#;B+cztI4f7zM+#Ubu4p^`vwTM1wjI7)U*2XjV$|vibroi5(2?@cwCm$O)-=dB ze$dSm+bp*_YjT9lw$5jJW}fp|#bF-wl$>=j^0dEflW@<^B6*I;KRAiFMzJc4=wv2> zjP^|gxmH62Sy@p8`C3v0=#H~BGvIA4%P44UOLc9S%7{7w^~%dV(TlQ8ci<^E_5*bO z!aJ*J^Tm1R%9Ah@y&=q7C&MYkO)f0PWrL8bI3c;n!1X5~zap{v(ArZZye)=<)ExtC zgJ!LA_qhuO<9Q7HV2OIEao&EcO-;dhz zukf8orv3m<>ToOGAVc?-J8Y}Y|tZuHN{B8pJL09xb2&=Eg>R!w|X!e6lP zV4kv(i}Yp_-*3$9ob;$?@3hv@kl@4#ujv3_SOV>vS|2ZE98S9kVm& z;QnoCf_M}i2bAE4Tz1SpCA>=GRcdjcjXc!m96Ep|b&1le$C^NeDgH4*?Jz665=`pZ zw)`qw3YcnYLF;yBv1X?%?c!&CkL<@@rg+YJ-{vyj&zko*(+4IjKCH8BpKSF75dv3S zDhcY2vswfzfp@K;bA`UYk*HLQ*=b_i_%#(~VqQNR_VR{?*>bBJR}VAQax#pc7%8a=zG^R>(Mlz+})HI#gpq3c(g>hWE0+R3*LJ`WH`aFJ@M4~FXJKw9T6J9aa5pbJ3~g9N77ki8qMt;fPQ zIr%I`(0^~|pTpO*s0^(0HKM2F4>v}4L+UWI*N3a}=9z21NV$VvWWxxx^XzW)$*AGvFXS^TS&ch@Pdr4XzCM2)g_j z+Wi>NlSYxMgHup`u8@6ldqxyk>NEb!G5#wtLFE1?F=6Fk1EkE_!U{F%o4|fx?p(x;%pl}H_;{wf^V8{rFv%;7%z(knPBWCevit&9%>)6 z{LkKx>T4OLi__}Z=s4K|3svUjxqDX&t=$Cu1V{o=L<;t0J0-t;-RfoJ7P)|MZ{b0a zKI;W6izvc4zb%77GZ0*J3;0hxIHGvJ;3NB*LkX;`53c*cCz$QDQqqzagF>R13SF6B zNr$^hfj588xPcpUvrUyJG{y7&0|%V~GQjSk9qxvKL+6m?4YoHJHA)6aQf#qu(|q#y zTJF~!_$&p@t=AY24h8{LL%9K@NG^Iy-Pt5wC+Uhe1VyV)wdn0ei=U24y!95DufHhZog)(fRrAx^)EpJ_*6I)JS$#ljL zMnAL0B-hw6H3cW)rWqAni7i|U`UkPMTGMbKwHY(LGow?kQct=tuVsDx;cSjUGL;bH zHM{ewO5~=}DcDCSlKFdV*6U96gCQZsMe+)F+BA~6CC8M|MrDGv$WAteL@oO2wX>qn zZq(~D|H~SD(L4-A(=-B5TpE`w0I5gHEUOsn4!mJd>8)Hkp8n@){hx+HGL7I>tWt@F zTIm;~@)1QBv*`jUYawBK-Te-ORX^8YSr9 z34?SWOl&)uI1}5POl;eBCiWNGcJjrxZQHi(WWt->y}Ntw-`%I*)7_`*t*)o)`C)D> zZ`IzI+~xap1IgjdNPJq8@gszzwbBzPL`l?bF-f7vFeVRNNw-Zk_-6s0^N4GgFRp8U zfu~c+Q3-KV&K}oDEpK;KR$Mc1KbfcnYlgZp@ep zji1!kie+jxFqiKuSdSblQ2xqC7M>@bw83Dzqu`XLg8u#%O7fCB&O!!qhO6l4Pwzoe z3?Ax>zx`v1uW|o1eIm>z>#F}Jk|{;X5e9~Ylj(m2RVGH}|0}fqucFGtm{7}423S-d zui9sa-#n)2ppR81qtk+f2Myb&ZNvN7LmR&O2>Q)`tUtX@K_{1TUkNLk$3X}6A`lbf z%|nbiu|k}A?|ds~irVGjSpjFS3JS2||7v@C5xy_}9LkyQzLs6ix_l|#;wJR^DExQp zkKp9+wLYECX`qqE=8YbD<46vC+&Y(Vg~RqNDHL1@Inb1Dt~u2`2pV|K!wr1Zwvv{e158qGx5op-`<6!dqP{pj z1HcQG>pA){Lp{D=vdHQJR#URbtX<;&;~gXfuF0aVeqKGB)_cJTicpS{P@-}X~&l7`k{HqS!>xrket&Mj1Fxva=y%E*60a)DL=%B5Y=1a#R0u9 zR`nPsLffkV)C2TW@ZLQXV=g^|utNtb(yg6yPiY3i8?FbW<8)X5bcrAXldcIN_A;{W zI@FT*oc*Ze{*eOu-g@$}f)IHKr0K7qn(K)hDKa&aRc52ynDfwX&m^|dtv%@C)+H{x zQ*EcRc#8C>o<^BL7(+NMn8M{lT9Q zE^CH}1Ks|VPBaSEQxE1536{|i|7Kl-=AU|*{bz)sW&H1AG!x_hqv10#{&$n`{}*P2 zgvbC%vF)&6OvoZ{UV{sLLmQ*PWXNEqi+#4l`ou2$J-_Yo0Ndgl5F&7CraM!uP@)nu zIve6~)ET#;%&nMnv-argI679UrkoLp5V?}3bW(Ev1n(Qk84s1@xsM{$O=bb87h5no zVLChXxLC^J_%nk;kh+E_&+hk)Md1iv#RNpxl%=B9jFO-ydcU8h8L%1F*L+h@AT1o8 z9zYzFMg0FOZk{j0!+A~tjAh7+iG-~F@A@TRa#pkQq5DSldT^eHxGu&NmU z*(jq3%b;whVryY!XKeEG`^1zJEm*SeWm9f7VE$`e04p;mGw1i^9Gx6Y3~XTCG8Z~r zy_8j68GWW&T|L@u#eRNwy+)msDLh0}wa2DyJ6=iu?%DKyzW4m{piG;;YGrZFzJEC8I__|s((|1# zCpU}*Fau6E4tEo9{h@(sD1CkJa8q#6x&_`)Yf#8@m3)r>G^DOaR)!q^hL}k?RHqsF#En&i?IZLp+DrqrDVI#5^a3d2odok z*{Ii9e{M7jV0WPa&rjYFq>gnP-uW)Cu>%21$wC4z<*ia!Uas4YdO`sB-`Xz!>Kvyt z{P)}guUbQO^?auM54D!~`h>p_10ypG;QNWZ(}1Og-hDN=m9ln>=@XdcQTq@Ibv&8$ ztCzR0?|%AJ_+dkPVRgpTS-+}BR8>`$7mm)(@PgrOtSxOVRDu!g@R%GHPMC~_qXYmJ zeFG8+vtL#WPjGJA{=D*UY3?I2@&sFLLMo)zr-W>K=zO`u`a zl;GQpq7%z2UF71<@+_&i5IgpE2sX%v(?Z}95N@{J+;Z0w8vzJ4<4P3}oEsFxyEhA) zINU9Yr0);CvFN)c1UDm75GGNt*AHkbv?s4e(F+^fRVvC|k3;JO%}J%k26iXCh@)+= zL3H*_ESbS31rgoUUyKL2pFFpObqw=^Vy{Q^(~jw>v{c!EEbh73&gGereE`6FfP4G$ z4`Z*}!LZ-9* z=>@TXQnOJf6b&eyG5mjsjDoR8(V3In@!jQF(*2G=S(kfR`22N6-)ae$_kilX%R9p( z5VZ5nSSRr!F1|b17_S`p?Eugsq&yjO1`o7Oh@5|XJ&C={viqfOn4fH2xZA#VgGhVB zH)tex=43Xp;7iqhwBKI*{1lTNL$XFWC+o@0$IS=b<5;kGa5_N(7`iIU z&4^va2&%c@bYjP4G))9u$LRk^gk5Z1VM*wzo3z!rjwoKvy#>#L2VbF}CJeQXX8qjp4TrmTaCa|ZDkgh@c zi{T_UT7Cq%VaJ=_9q%^;lk^u&nm;s}W7H%yX?Chn zO7y9@(0uxJi~*#lBt(7NF$YA_nWK!0(g^c?6MlO2;jNfH({^ccsnZ&LYpc{x$}SLZ zdBNX2lvW+bX4C2;@<}yKS)Td<(jxdHfr;{i7;CutAC+PWF#TR4TNE-c%LmXtsV_G~ zyX#&P#-_{`q*0+eo4$uqaRu#Kcyqy_ft;K8uQ&(auB%hhM*ERCSx^tbBk&FgX#s?N zazIjJc>Ohq2`gj1w8@Rht-hw6=ULbn**~-|l&tUw{d6@h*SWIlKnGK_H|~!=QQ2H& z8j`d@Di>I|eH{p1H8_6;b8g``A}GXRc$ ziTYPi8vux3C_ekP4S^R!-675vARfF>azoFIDklybFf-Wxm^J;$XdfZL=M z#6-^@OB9k*e`t+}?`Qev5X(O)FvTId@Nb-cwINmu;cSHDh*ZaCC=lrO@H#4A(U88F zGi*&n3T51)JefS1^z~7GpyX=6YzTwGyMwq5C z>weJnxiSL!k>U-^Q8jxqr9^kv?*;1mQ*nJ)=yxb=)`&d{EaqNTG}UhzfYGY=GgBM9b0B}p%2ZhD*nmMkb`6~^=wvwYvKm*_aS<5^QY0p-dY3gao5DzYje;u zR{)X1CzW9G>OMTSeY3xjT`{F!jC*e88)F_eM|FpFC$pz@A?r?|?I*2f=uYS#@Wm4l zem0|m3@3o3*ZV%xg5fBHl_?O0vMdrYvo+&zU&3sWeV7m2Oo&bm+Fx?Y3rUOSB58NF1v%MOuvIr3E~f?R27xj}W&h4J=$SoukUUc>2OZPB~~uMu84LUvZ|W)a2o ztk&gm(gOj8o9g-S8F>v&tQ>5J1atB^<&~vXWfQ82W^<*+8YF}fqJ2R9p6h#$4M5%a zX^m7~k0X2epfxk@19xSx3AAWhT%3ZVzs@a}jx{f{sWjK6*iqlNWDf4w=FiA__QIvp z%XQYUbIXE}>V5>nlC&pnqEB(;FH=&=i-wN_4af_gE;BAbnPc`o*6EkLK!($jyf zOTtDgmjJdGp*OB7h}2)lP1fFc8BhX;S%t%8_QPw#G@+JmuBk^oTPP!n!aO~9@i3Bh zJ2Hz--3Ix11egIcr?mrY+lWIUZ9f=+e*K{%ZGEu8(ngWP>wN$%N421vecESpPkP@b zZ|s&rS1BuGbGGbcvEJr%w)_KYRxh9m&UT8o-PDF7&dG$#v<09$;$A^MS~Z zu+5Vm#>sNz3WdL@Uy}V)m5uJ;bU$w9eWTj0hBMIS>*8awQKygl5KS>ulRAeU!7>i?&yV5lTq2E*l&%q zq0VS8V^cbBVfFqCJa+IQjKm0(xXu4Q;D&6T^dyfzoKGHn}VerGXyx2lRoUj)+` zXYHtBH+b%^2Ox!FNW|aD=Z`OF+?HK5QJNO+>`)64ij5*Kjv!mh7GV2IvbbIGS2#%< zySkFw5N2Zz&9wH645mo3qfiNmmpOBfi|yMCt*-!j9-Nm>v;UD$vDM+|e8k7k^y5|k zMC-QBhzX!t_GPzWj%0PkMK`nkTPC#r9s6QUjqB+?_!s*WakMsP102t1{~^TS`Mz9K zq=5U-!_Eksqht+%0N}7i_tvAor%|z7$~t4pO}tcuH_`(m)?ul~crDHL%FyVhS|#o^ z(l(2*MvSP`rP^S}Zc|C4bt>XV>qvT5uJ6DyEr5ut7$DLP*Isq+6s5V2 zC}2oT2)iOVb2EwJbvc@W;dNQcQgnULgWusY_CS}r)-Z{))x`z7TyzajQc#j_te^Pg z-w-ln)bo9iYfdUV3-&k7VtEC3?$fcWQ9<?d!3nu;HD5a zt7X0Fa@6EHz*omgeN8`Bq1F__pkAUgW8M|?@H?VDLTLSUOdv&R z@tS_pURD>3bX$u|#2q0b7BEpShJnEC?|)H$10S_e1a3v|Z$_hncPqNf6bFMFP?XDM z4x<^+^pgXfZ4c6*#EpV0LXV6t+}d9vCfpyjN3<#fzzbZV8|l-i!yICcYgXsvw?2Td zOV!;4r}71_C-D>HM12yC^#kUsR=Qx$TH>IxBVW|c165NdG3-&6|BN2iNg2eD-Tm0l z?U4fOAg%eCM;1mB$`l#7D_Xt0b#iMTC0aCVJ|l`-XxpLA6js1A-h7wg7Q7vVMT&xl z9zn7LkTgiE(REYO4=TQ;K!@0;4%B{$ET7-ljh+e!;qhqg?*u8+t!kF|u(KI6RkNU; zEBEPiRSAkvr7t*sO%Ed0z&h%>9wFS~X#xCx9vE-XQwihYkr$)#C*5_cYO118Mj+9^ z3-ev|?1MgSBmTOv@M&I;!Lx8DsEXPRZ#)wOC)p=&>Ea-?5e*eTf!4)ytb z5B#AP&Hyio^GBB~uj$_ljB{`EJ`z?!!odB&fz?KOxs@;jzoF)k{W7_pxBJ!fy^YG=X`8=*eJw>I_a{YU_sb{+1 zqgjDB1#iR8?TqvI4YHMUg`J_93O1%Xi)T?o5y6J*-|x{Kf%rGOVt)TGSHDj_fK=P` zgwbXHpVs(q5IbHym|)>}qBNO!#1?)RNci5Q@8N)29yGYh1IFd3Wm}nIRZPEuj|B~X zIXxvbDAujDG0?fEo-YI6u~^WFHmOG(*PngCA2*c?05!qp1 zW*vP50Ez)bYa!47y8859Y3DyyXq^%e!ri(N)~!MDYRN@1WRSg&1S6vzsd%}h`$pY3 z@gv^AR`Cf~zke`Q)Q-=*G!jHF&#lxub^BkX6J=(R9Cu0bCCehmj!UWX_f-?K;W53K z<789Fy)ZU|&e5xp@^iltDfdPs2AZ#U$ain=sPI7BJtgT+bzbC~x6UrkqL072)y2SU z#;2ALWn(nwTk9ob=6b`8iWo{aM9A`58RU*wifbUtcl>VHFpf|Jw%Uu3rkf4g6@M#Ar6 zkCRL1@{Pb4dnj^Wbg=};wBD~z0&T^(H&6Ev+l0!{#eN+<_G-W6V>D!>FUVGNLryg0 z1fBVXSo%y}%Ctv|4fl3V?YDh(-H)&PHfDo&G@^mqU5d@hqflDC#??da`y6~6qC0G7 zzRz!LCiWhENsrG0xHP*ElRsmZe{C&A=b3zBbPp4>X!X>Oe&!>FclC&5PN>N$I6aw+ z@M|Iw7US>w9|3ebaldS*M^<+maDiP5CC&|{h#Popt7>FsFz(z)ysX`Ad+Xx3fZ z@gZr~c}{e$Z*zN&HqEVR|`{VQ`V=dYeiDMei( z7!NkAwWrdic==;iM;~|=pIXX<$LzfM;>!%KrxhH@Mm%H;4TMk8$Tnae6|HZTZVQ3? z=k(wY0TDnvxM$uNWY4~Un~t7N&?eCEtAVmXpa7{AFOx$xxZ&ZI`SN3pZ|y@9!qHGUPub~foE|Fr4Uf`yG{Z!7&T0c7K?f4pRNh~wd3`05;90#-u24>=yX|sG zxlVV#RPm(f)b$VP@Z3!hi>CD8*<3Aj-oHJ~nhbXzw@O46XExZcSyM+mgFtCP%@K>W zx#k(~u2v#SS=HfLj#ey z)XI_pEG!i7`d304w+FgP`A~Tj%ZYIDG}}4bIGYvLuxCXb`omU3rL5DfCl z^wvx6Fmm-Qk2EbR?Q`Ma6^F;Hl-*S{xXPO9>WbL4bu;#5&Y(2vMavhB;qOHrrD>V@ zmb1XmG$>?;#V8Z%4M&Z6F{cLdYRy?w%aa@ct!vOH7KX?oWPv2&6C&g?KT;CeZ915g z=GAqxN0F8Cdq}-WDMZ8a$_#K~Z**!;7B=WR2nY2C>N;FZ=wOyqm!?WhEZaxH!>e`w zi1!HXJM>F}@4^cSld~@2wZUr!XgA|+N2p?|@Ter2Q-_PMUGTwc>V}jZDace0g zn)d%xJzXFB^WR6Da?>m?G-ybz6_p^l>zDIr(l`s->|5;u5v~2w`IUJX2YQ+Lz?gOB zhFvgxK+0Yv$VpYOE(0|bQrTKr&yOnsOs(uCx{%cQ)GD}0H`7K@dQ>$pKZ3(=m8O+G zS63y*k8k}O%Gxxkeoaog?!O(EZ9E_o*i3w3>c#2_<4~;Um4SQ>;FM*~x_qvCc?$3h z9)oe{z-+L>Z77QhJrvcAoV3i#mW|pwz^2LR{$vORBnzPO#|zxP$DH5y2oPWbRx|FF z;vv5{rzQL}vT^)OvdR6%`K)8)W%hH;8+HrBd=J=4Zmi?<+P5XJkXt}%z z^d=u?B8V#LGTbQ*!wfzlG9oA zyEN(idMjW$UwyNA;W`<-dP7FabgN6NnBG33PByZo*luE3QQHMp-;uX4-3t5ihgb5- z@GSI0ZMOS{gtau8X zViR*#Wm)H?d@frxelp57MTV4E+pe-Ik`bd(gho1=gKhDymVMsYdeAv+O}!+_K;kzM zv-hdmH1X_hd}GEQi(Cr>&+nWniuko>>2Qu$~Ann z*H@3y-dRaCn9o;10Llg3n(4>frUvsQNL5Qf_@Pg~G_G~(zp(jTCv;#ImF`&5k7h}z zpPguDIou-^`D+*;Ghu8#0YZ6ANJfo`2kRd9V2si~^XN$ElE0Ol&Tx0;P#G<@25m`x`Z zyWN8o$LMP4qx3zEXT~KTLZP&HZIM>>H*CG8UZQJr5;k8zgPu7=^V>uty4i#upSkJEf`0l>+(tNS%+ zO#aVyEH}-)>}$8O_TJJTGp$+UH`-FBT%FU68FyIUUjRi5nq0GgMNl5P%Rn}OU>@ae0E|k0v2lT;NgJOx zOc@%#J6LTzE&^pXMlvq`5`b{X_ojVbX_9~Zlrc__h(-h{_*7<3i%Tccy>k0>$3XVL zuo`YS0Dv{2?gfnovp@b3w`gfdG7c4+n-m^foJ+J#o}4;4Kcf2r$pxE347||@J1;-8 zG(>(`Y%CR6x?EPRcE2c;N>YlrbJ`tPW-lAR*)-SG^^jYCxDV6Qi9DCncvr4^c-Sj+x`d`?^-W8}lYP0o12@;6}hMSCj8=3QHZSr2%vNR`2r9 zz}@_T5EZD#9K1*71OxiTN|P&NLZb%6>Na_YCCYJKy%mGzQtw^z@}Dae2A;HnZ~c85 z08ady5Tlj&i8b8IEzw*@D|TaM3Sl>ba$&!rRCdC;)7mYa1fiwe?W2r?j7zN}BX5UC zz-fTCP}yry9YLFeOeJ5Z2=|W1S3u5w;M6Tx%Y=4oxjlB$ce)|6U8V%NcohXh`EHG+d-o3~anj5x8Eh zyB^y;Gu>Zha-DZ@Os!@!@TM(e{==dI2u797)t?-3Y;~L-acqO=95nWs!HaH_!rg(b z+016FAW7FbpUPf{m8~cP6;*J~IcydwNtE&t66C6i2cHvggJlcsat9%Peqe#qHN|Nq zu7i0A{`?It5JgEC$c6shO)M2;0yK%^vH|n~_H?mykvehR8(&-3j@PU`4t~1=0&$e1 zg4lJUG{1qUyQlPM^~ncFNcxa^19^ft9?a#_NPGL9_)E|mg4hP%~VjQ zA^hH*UXVtXGzD9Tv4LO#JNUHiYtD(>0}l*><>W~K+5{WZCOf9G zemq>H8$nIIsv?q&g=dt4XBRrrK$n*3z%~QnYgEnG5rRtNGPsc3B2NiYTr* zU@95USxoR*-SYca`|#X>g*K^r=7SC9<emaD`c+sBLcV>yRXL! zAwG~#`r9}QzI2Xs*GDb zb;zqwBb>8A8OM^5v&LEIzedkfzDZ3- z6GVNq+E0p`#xWOQhk3ngLh9Z_rs1xE_Hq1>YR$6F2C&yO$$-grhOq~shQYm|F8tKF zZ1<>BYgdyaoUxm=on^^tOX6nMa}EB4M{;aF7NToqt--J(jpV4|6ht(NpK>h)s^p|RAP~2K|RAW(I28ym# zL8VpOS*4||RtU~=7!-Zr9%B{?@=slbG_qTMFSgTlO06_GF9&*%zY2#+RW(`C9WwF_ zxT3$RWlMyTPF#qP{JYv`|JRB6dra_;Q18+G#S>?b%53vaTvrg!hc1w!Jb}V+AGz)s z7;*b^Jq}MmL0;*s1O~JEKy+RpP?HgW4+nLssKqMqnKhHf{t^7dm4ItnM%`14zAdKH z`mi9yZB`EbMMq~=zMSe#vnEFNu^e^zR<)f-A^lcpqxS4AFtdG1eF`fF9?Z$gYZ!}F zDX(bIs;PRQbnx%a{m!l@yw-l6{Fn7?I>J0#dd(_eH_5Jky4 z&%ScNcp*2|(1*B$MnB-i;PW8wO6k=kw^UK)A*#=Z0;xp+3{b62)94X`vP-rQjTz-e z`=So`xW?7R&?Ed*yX719q$5K5(!41BaClL;wZEM1he#-KHrIsj2hZCyu)BrtruWji zw9T+c=gc=y=-(TX!lk#<-mGc66|#sh?g0Mv^v$f0qa?khE^IButY9vmvL*Dl?4>oL zIkQ$}G5RqsZEJ0dcnf4V;+V2A^2cb&!`lW_x$Qdxku4Ww2vE}xiidE(hcp%w#f|0& z6-)M~3=*`Go=ha*moze>XNRJQ=T8emXMTdZVi)&PpX1almeei$osh?49{GluPr5(#}b@l%q9VN zrK9T9QvG$u_X&|%Wu2p5{i?lc}4ux3|pudx_~4X`YaN=@KV$>7 zNsC2`QNaBHbq)f;%&?y#a~&VU2AJ)%n#-=#8bGUIT@iT|85&F`e+RpjF5V(Ev?c~O zVm_H5{*$%fbZL&jjZ}#d!M7{|c$}AHg-Vs=&?syPj8*ls(1bXmoxhsx0`leZ6)c*! z-VCB3jv& zB4DhMqCI+ibkIg{th=n-LM)cU3nwSfUkK3^?1!E?>lt5|aGp8+dkb>Q)nAESw?$_6 zA&lL}8WYDzAGclISKZIq;BN*tJ_t+Ohc)al$^jpei{ciofB0cK(cUN)(0EX}@fWkR zv^Dt!c)E{J$4y43(i=wsNo>y)c2%pX+Isclc67n$N2R?Niprq>=2fbG9>d@9nmtyR z!$L%zB5PtTpW=mKTK!F92n`S=E%rD7HKD{Y#bd|WVl;=p(iSN>c|8xW@g%YPgZKwg zWF=HPBi%C-O$C8ef#GMWPmO(N+3fOtbwyV+T4ej?2)NW4J^ofaU@pM$^&YdEu;%0@ zIkGEWRl*U0fY#Nx9Zru8-UGu(jFSVIIMGRUjv+j2K`lN%n0s^)mTfVhe`5keM9g)e z(QE04%88G_RbQadVtWh`*WF8dxo+#{>$f5H>$x5=!)D>y0Z%dfbfzw3Q8ru-D?8i8 ziEL!E-7uBF=aQP<_x^isRSmich(^BWc)~;%yrwzSX!?x?{Kcs_ll^G=L6?r}Sg34a z_t^AGX}LBLUa&IkN%@cB-z8)QZaMq%U(@=idz=H`wdW<`Y7Sp7W*I5pt|HkitU>zvou4zZ#+A^uPB!v^Ml-0&LHZDgUM>1Xw*20fwcOudNf#Uf=90uF<4# z0fT>k4-caG-v0PS_Lf`{Ntr4jXyrgdx0;N$U-cmKuaMy7kg(@ofvk{q^~?rgiMR>a zM4?qLQ`@*IiW}I{I@K{*Pu@>qPe7s6dGB=JaeO*;Z+YglxE0qHw^hn5Q`ps|v8eNm zG$<_A2v4xK0YI%{c;$Q-0+qwuLPvxS`GE5kv%P6R*eL4MG)7^QrW4c$Oe%xGjiDlMC&ESo0(;8IU^8Wm+JXBv#R zCh=v{Ts?u`VV0rx)iG@@)6}1#Dd7jj6%iZ$S?H09f&;frg1Ob!Cw8Mli)@by?ihUg(V}-Jv|$8tk&2>46!0Nik!()TUyoe8M>$n`wggb|_@#$D$wykn%h=ks_6#FM$sI-Npki5RvB+f40aCb5p>H zwrvV6s~t8Wk4Edoyy0G0smW{{uLHLR?T+p((%;wsrMP^*yp1Ks?qlu!HR$G7e+o~b z2N)^ZtR~lVrDldm3vdZ5@?R}5nez#YJ2=ok)@2Pi6-~8O_ihNFyABLsoHHI|{rBL8F9A`s*TuLZ)8L07H3^ zeileRASo_3in75?WLE>9Af;P@&VlzpLVflh+<>j`5m1g+u-g#{UA4#)+U#L7;#e5D zghOA%?*3}5POBPzOZ~i5;ng)Q_~I|I5NjxiWd?FT)1Mjv8&3Y{FRIKd#`(IY0DfjG zL5NCT87WdE4`HUZ(T?g_-$w#kz+Da{-}g6^gnTx{(u_B$=%_B-`Q`nvTSm>tBlPuF z9uL~ZI^+`em_EQ}vP?!q?Mc3Y*4O?5{MyFHGbJ9E z=PH?Ci6c777*R~@JpvBj08E%zGBAHF!S2{QY#XGEn6hkA!^kWY4yhb znBgM787S=bP+r2Fz`xc8G&o*$<_wzY#(wE9CnD<<+%xdJT-F68j3x6rxra!ZIXNWZ z$$ptn&a@t9r+gi_DvNGIGq=GwWk9zHN%%1(>Vz@w6bv(0v0>T}r-ViYOCG{D))pQERo#zR=?H6hO z>j`MMQC)p-e%=EFfT|IxTx~xO96|@syz-Ys`<@iodl$!=ZGj`&h|zH1VTZ?S@`_26 zo-R&fPhgH~xR9-0jvyKvx};y24%nw=nlRt7PmMU3&eQh@Nq^Q%TEr4;Uz~{vA^$>C zj<-EbU$Dp7uBNyVR@I=HQ%%2e02AHQE)ht?t244W?Mzz4j$yp@KpFqjnjw4 zFpQi@#DHXdcJOvc1zj`A-J*mAK#hIy z)M0&g^;@y2KdSz&S844-((+nz@DMAz2|$&w>{#+;qorMZ>jW$7fr%o=uMJKQlCBq> zF{iyUWu(*tY${;bG>s*7<2~df$>j#B)nP~c7M*0H=aw*yg{8lW&#Dt{8jr7-_2A== z*+#pmS^LvLn;luaSFvQwo{nJJsbRKcp5~SsLrq21=117b1d&v)0U>5h4B=@^wRaTh zPYsQps2s7CfZj2umiyfRiPWTmTf$^{{E@do{mUF1Geu1;k~QY zP8^QhxcA+-F{5xKq8Z_sWG; zj>Pptqvi83#Lmr&?ARgJLFJ819pt3VkDs&zRiG@Drcbef{X*_d`17TzPwoK(WH8+b z@6qPM?L*lmSQif*L}^e!y{zAopft(_fc5lC6kEJ+Q=u~`xIndrwmd~$g2-(DHIY*p zpJ56eD*`KGIb2Q5HDW!VD2*Srt0|PCV)opBt;IS5(g+CA`wti)jFpm=p`+W%*1_|b z{f}i|sGd<6>BrFRZ}~(pm+t=KM6ML_$UIEP33QIVG1}4*-*?%wxnEIAR*iqk0lqlA zEu9@{2JqRo?`nf6=E}3Ynn96-JYw7kSPJp(4$8JhtDIoP|0-N zfDivxmh@1!tLi7amJgz3?dO;EXPx$wPY8nyTFxj%pL;A|v&%-k#idFNAWIWT*G98h6T^eeY>NX`N6*XmL zm5}+xJYWlxaDHoj3thi2AWln>gNlnLYb6aLKn%6tww4>CFkcES%$h7NRJ5;DT)mNrDdY(m^62CPYH*g z;Ge<^#d)(Wr0s9`swWv}$bjs;0J0J$;}g_{iJ4;YqJ zzoPKIh!kbN)}tgpbgl+gx%rk0>=ccni8rbVKG%^iVA67l>&O6M7p__t(E(-N0mZvY z%6P~3z8MMBuU)N@2x_Gkn(D*q+Wv#K@+=w@ag&3L<%2+;J1;=+kHcG<9zwn_Z+y1g zk1>%$)TumGRv0E+K*;9bbVom@U?YV=hg0oghh_HS+AS?Lt|_J}+agC(+geA1E6eLF z4I`N(x)Ydko@D$f4|R2c$rLo{I2#LMRlBz6$Kkn0c&RzdJZ&mMSER=Q8x_AYYZWUD zEpj9c=UXN`6=$`l*;!?%+lfIUeP`OK%+i zVWS9(9FgPe*;#qF`XdFN{B!C@lxd#~&QdmFqFg4Qss;hdbZQib z+`1c%X%+Yj;45rQJr+#A%SLC;7iE)PRY@mnKSXp`ba-$LcS>jt189Y7YqWf5Yv;!J zEZ;BtH{~AV7UPudcz91Qb363Q3A2v3)2{u`Afw!1O^PIV=VT)Nej05m8ht^STigXw z@*s;o=)?vtJZze+*T<5ZV-&{O=1;%6<`pjb+lrJ;NH&!9|BBDI+@@dR#PeRkZRbD)ogG4E)JK z4BFa0rZ9M3jx5`g6Kg?)tQDrvX~g)ETcfT6AFcB3IXXpn(rnk!m`$m!iW)91*|xV^ zt?Zn3Kz{#q@*z{!`Bj_s8XZnF$8D7b*0%Fk`TfYy+U32^+hB#H?2dMmV~#feXOYt4 zCX|(FwvUohrLnz($)wWryXn|vu2Q#HrQuAd7ggYvBFMBt?29n2Ue7s54dKS_J>P!K zYLG1>_K)&M98X4c?g&OyVt5z`e~=eSoZ!Vkz&oZuL-S9X5s8_4Z(Yj??pTB&e3zmO z?ZTCsA&=x~EJ1bw$bhBph2P)bSjU`)1y0^>yhrB5m?}f!}<+?>qedn1M z)kBxTtUogE$mx3d4y|Z;YE5NhviM`W=|(~XT_E=hxwufIR1z1UZ`vA}q9LV|0BS71WL)P8+VYF2Py=Oy0bMMC3Q;FT=r zigoxCc5^O}f)uEi;Drq(F{N-3J!LGkatMjGM0i7TP`x#rm zvY4X@_htT*A*{~TQmeGR$UH#PkA!}f8!$vZ$`_+?&Uowaav~Q=OnXlOg%kB~Zjk9WOGXCg+Za@)m zN84f(z2c6OVAM%xbZ_=CFkOcukj;g|s+-kSfyY5@_{8Di?Ht90=CB;fqT}!g4v_1$ z@F{D7X zLefB_eg!K^(;56q{lddwSxZ|qr2Bb#AY~vV91zz~ecUZLXCxufGVrxhACp~d_{)g* z^%*t!sF6B(kA7n@rce)ypESo$dRGBNM$!5@jh_Rhb1IaRHv8DL{Wc-oT*x+IAEpWd zPs>XV3D7A+P}xjz8o zl`|mDj#{c73sN9H>)%;uCpvS97$2ftWG^Bz;HE5qjdvv++UeT~!D$7Vku-xav{+;n zw7B;T&iWYYiRxtoo}*dCa}-S!F=s+kbONvXKnLy33_U{|PP6#g0Jz7pB+cs~UQ>on z^u-d%d5&H|bUUt`UOvVAmmJukdUAPx@iqr=8&ERZN%o)jf130C7(HyiMXnGq^-g5} znir&2d}e>Nvww|2)W{uP(;qW$UZZ8NpENdVyj3Sr#grOSucQ(On+^VcWDQ_YmvON8 z^@TL{>d?xGfj^zq0g0KBxs*e%-kU(n#hv2Uh%0P0M3v>mLvvGzO=#pkel|k?XZkH= zreCK#$7lc4jxrW{V5&4b>V=~bW2*SLzJ?MF8|*y#F9y*tvs?#}Sb~*wJC9q$y?vt(*X2kYt9RM&A@4$uQ2HV7a~c6l=hY-uY|H0r=>`gy&GGGQuO2p? zT|+a*gky`)Y|%h^@9=_24SI?Jd<`|ySw55XejAjgP^}A{Xuc|)y3fDsXd3~2*Mm?O zc=#FGF=MY5fW6UZ#O03-n?3GfzA7G*5AnYR-UUXP=Vb1|Hju92xpHm6Yi9!ubc1BWoe~O^qv<0y%#MNj4B#%mgV)Q`$K< z>nKX16xl*qhLw#)DHXyzE(+=Os96k6x`fP*V=1Ws0Y`0c0(KbMm58{qHImt?A>+GN z&a-{FR~!kah1KSjr}P~hGaN7tU-*>>g_;G8LB+$!_*9D_80BeJjZk#IBThoVT(P<~ zsK+Xk6=lpPSG6V!*F@N);TW3qY0!@tZ9dwS71=h$NSw~mr~Se&kewO>xpPXoXlvlA zKWraq0RPnNuaXwGtFm7&=QCpTHv{AVQlcOKhpclB4kT*Vd~Dm9*tTs=JekeOje_4%Xgt>=AyBwznH&#_f2p`|s`z~hLuhuY_X zQukO-oRmtIvEa2qfgx;Zhme(Q!)YnRV*{7IKrZnc(opemReN~N%m#> zMHZ^jLjhZVODHiy1AzQN01C${eon&E{}^`a{OfxcA0YjPrO&&62Pr1#PAzY{f~d`7 z)t`7IOIgXJ8}l0U+=iAFKd5U0?li*__=f~eP-~~`p{)`J%_x^#m?1ZB@IqkV^UzB*MR zD5^Zh#@o4pI%T3?k`AuKcQ_jlh`Z&|nBT%~n5l20xuLHi2n zC>S8bpBf=NqtTm^VU=7&K&YZqne}k|PW{a*7!aOFx{JO)m&aEXE$q0i>d(3QjL9Ou zr}^N0vIU)s!#P1SdOypKq4jQ0Zb(pO<0Ks+Mz@(=qK=T%txX?IpN#6dwBdQY%htJ> zXEAQlXa7DrBi^uu`arQ>=r2&EJZKQqZ({vRTx|{iZkx(=W(3XjlPdJy3ThNg9l`%w zI8cU`pUV1GZ4}RR#e?-RpfC7&b9{P}6qcL%1Ta=1muanS0D^>P=K#izC(2Un$r3wicd)`SA3BO{?Q z;)I?gNB|uU95HxAxZ|KpLGiEFZe5q``tQbz7>^9@VgAmhqdM4Zm2ey|%1?YjEDhJ% z<=aJ}sBU*0f4#G|7*eH4$S8VC*+o1>0BNsr84}IIYbczpi1k$fkLgpca`D=Z0A?BS z>_S{=EQQ{gG(xYCR|v9H@%mIpIZg|poS`L3r`6;5JYXvH49oSCbOiG+pU3R^ngw4z zT=tvZpZj1(^G|R`|4b0CwxIqlwU{!i`1j{jgi|H}NoV1+E&P%Z!C#af^iK4N=qL0= zShMSH2u-@5QRVe6n4X8pr?BwHt0IA4_Ze0T zPKb=m$PzD@as1eY9-Wg{ZFnDs#Ts2=3d`*W3##;tQ3^d)#h`rUiXn-a4bTLcpgJC( zKWZ~TXj3$~Vx?nd5^c9STQ?CsS%3DP5`<$*b5~%#gHTE`{1?&y!}wE%hPm~ZS;8K;E0yHM0<|jMx}y-(ac?bA_&&?kgRT_bLSvJl_|(Z;S?hbwd=_bEM#YO!1nNp~$}_8CA3O%#p6-VuHcJ`8vv%b9nbd4qSQ_IA_9} zNbTF-;|AIk>P#*oecL`1_^i{MkFEx43g>VsX;C>Gq1AC0#dnuWd4b(9f-A{moNPq7 zC#8}(BKxr{*!)H+E%}4e!=oNkYYqyoX%_qTCA%vnlX0UIqt^ungPQaFgVp#GZp>~N(_EM z`MUCuqUpV7Ec@O7arpZ=|B_%Z?}_SsH$tuXP)Ufy5}Aydc!lnmQM*&#@feoV!<5N0 z!2o^9i+^R;P@$6+q)MjG>R`8JXl^jbZOlQ7RaGN(>e)zABL^s~P==i~FJ|;T2Infh z^vUBpE&Xu#J%kPS;@kZ@%mDPQi)i%h!2lU;{^rL7ah#;cf?oX}vO!QYJqs`;R@|5$ zS9h;0D8+w8sEY=inkR}U&L`?8VlqB(ZHIJ4aC&wM<|Pc9Tje{I`N``!QKOt*zQvR! zIk{C+d(DGf1$_Xx9zniuw02nTi8P#*&~QU&S0RCSjeq^{KA9Tmzy3U?mdh?S5JbMK zsN-={9|aG_)SAd_+qz>T_bP8%&}smpslT%}9CI=khj`;SiJ1!GeERr>sKt_8_TyNy z{MkHaOehlAOSuaje@YbX%vf<`&y%cai%&uXiRjqJs8|C~^4eE##~cH5!49-=}R$GNe81WpAHDa-#L1_p?a^lEX5R;MDg=0iej-7pzm zf3&@be%{n-LE&^p58HU4#J#Zf_L{;Sxq~3gn2Q6$@5ubNJk{#eiJdy)H=oC!Jmr>2 znh|sqlsmBEN|CH(#{}cJf9H-XroJ$dypbdxGSt#VOeIIl(?mrnQ)+QJY!Fh?q>Pne z7xFB~@uI||FpeF)J1>7zOBYi6pW-p(K4|`HH|@kzJH&$A%C9>ul4eeBpkA6}j_f@P z&hP>R<|L>*0{iD(lC-$GDz$xHo|qMtdsX-)5flQYa-`BuL#QUADJJlk zpJzQJJ0+7-Li~>uNvBRsXUpW62sI|c!h{F#U|&rEPcT$>NN;3u{^d+}ar-?fo@tZh ztXzNnWh3&M=O?(rxoUUn4hNob>(HXvdjr{DX7${w z-aRfo=1GmCU86<#F+&5!#$hxM8Mo~j#+WQzZc^&Tn0vyNUtJ9m+6!?Px<4vIik z;ow-Q248lYBVRU_Im_f!5xe!$9_m@j{_E||D|Idp(Ii39M5TSs>Wqp$Ux}Mfl|l9> zzS%89U}Afh#`k_65l4iOPzEmTUW0jgjWH^K{2U&}Wfe`nX17~z{%Vc; ziDWycDtFYYiP1TQIj@L>pW@~1Svx=x_YI|E*GRZh!qu!yK5TCELQLX`J?{ddQWzf+ z@n?w;xzzCPL(Ce#&$GpsgVIe6p=pB-aZUk|k>nrbYn5RrMpcOG-)X(j$etIFJYLAV?~u*8 z(+T5!GLsGhSBbEJVX%d;BRq!=;~~&pJA5%!tl}4^4OUHZ-I%UNh%4xSsCA~ z4nZp|5hB7kJ+N7B{-+CG3HqQ=B0~Zla5>|tv1=jA8iy(bdmaZieaq}_?Y5s7&?Ry20+N}jW%HOag`|$0G~)JqjQ1OY zzFDxH9K&*gY;sfYS!6Z-zEGq_&7x{2R*ml|6R9CsrIxdgbN6iv^( zFS+y&X3D9V+?p=fZP}$g#A0}RiXrGG_pF|sN$$Z)t$e?>?Ja|TWeGRt#^zTBl0-nTC(4mXHm6!GsYgiD>y zIwkgsTH{o3M(}2^knE8&!BtqcJG(qOk@R^>{$kT^!oFeo)kQofkDi%LX$zdWv=a+{ z5$fK}*YE;MwdX)$pJYe*MV&4k=o5cZ?5bAPCCv?9Z~ITLuS zO2nUz1nkNK;oTz!&?&ijc7c$*lW>txJk&%4~YO4Pd<3jD2~RV>Bz1s z)sC&S)On4EuWtGG`h>4&dHwJAw7pw$3-pwcw7)Us_4a^Fxy9~Y66zW;VGZnjcn6af zuF@~k8}baTs%{)>n6P&oCNVBjBe5iu&GPf=)J?yxTst*wvmb`7v-vC|>Olgz zry^r&Pp8y`W&A%JzrGwzOh;2>=IbocI@S2)Q?8U?j+Z;4j_wx@6laDry6uVdJ_jg@ zKI|%1^%sEdE5E}rRn5F#xv;7P2HKxJkKF>@5qm#9%-l@{=(XsyehS#gRD>-jny#kW z8V1=m)+S2sq-Hn3FFpV zt#O`+L|RD!jH?S*&)Y42jtqmp(Qvi|1c#;qjyPi<3HYo9@C_P^(0hCavrxcZ0%VzH z$7?}R5Q1gtHF7zuBQ-}xQIKL-r;Mc+s^TX>M*Ya!m3P-EhFW+OsJWIOn>!lG_n)Hd z$pEe^vyJN89)jT~rLhAS)Tr0%HHqpu6)vGe7kw9z8Mp%8J5uML?JX`$lzh@y60T}F z3xCA3Y=}UW%3-`|+1LPE4J@s8BeN83!UxB^zI`_a*@>E(5$xdiu?1hb9J?evdZmz? zFqLnd?mk!N+U%8EFaj+;TR%Gs$|H;+wSnqhCk1tnKjm*Z8Wpp>R#<8=S2BzcdIF%g z<2GXz4Ni8-AohqpOxIZ;Z$2PL*w_QKIpU=(&>%`6{KPi|CJa!be9GRz@uyj@px22A z1gjcFl^oWc@F5}63t;Y(E0qph?V^-EsRD5B>Z$Ei88&Wj{%zX^-LbUSGVi{wsDS)# z1)9#d4h)l7vm|VgHd_`|>%*2Gy(u>z4G*=CCYD_TYenEfGNmbBLuo%)G}Z%UT1A_a zpO{4Mp9D=UU>hxM++u{e-Gg!KdzZiQ17*dc*6a#PcNi=0vLvoRH#AO;HOHwIqJyvR zEobpDy#rDV6lU+QzK!n{dy$RGYQU|}u{gCHscdPV(X~_dPKHzGLCO$_$APGXqhVdn zIcA3Dz;?qY&+~9$oGg1ON-X+glFq-+j!T09Mn<G)BcZ!ZMO#%7^vk_AcdUmokMR zsuEkr%vZ@YhuZ{_K`xxm?M$s=K7;b{ef9g#;d&?_#~@L02Zfd8ixFSc6)c_366c8#s~ek_oz)+n5$y6LTg+E`mljsL~H{(Q2?E)+WCjQ35kB6Y78 z?)s#fM3z;YWy&yZQC;xJC2;O?wt8N+FsnY^J?D06@Wn-oZzdO4GRz^7(M6bXf3dB0#>%gr9Ty~GC?O|`PLTTb^YG3lKA>gWDyJ#DqhwG?L%6Pmm2Z*NR3v)g^Sjmp# z$?H`*%boJ;ycTu=&UxNb`i&=O{=n`<93vxaM;+SrO+RO}GH~+VbR@igi`MPIp@C1$ zPJf21S9(7&jbbD~Le){`7FN52lh%ZJj;Qb8z)N-QYnLV;S52#+sTya6l)3>%e8@?! zRS4gzI~Zx`(Qphg0R7|!x&hwL&A+@|74PL_;E}e4|WUR{Nq(c8G@B<}9H>j|+ya6+!bg+P5V%fg*J5Sg$G> zp;cPf{h9BK=<+f#=tg){!s)^*GLD?abC(cKe0{61Q;H63fSal|rR&Pbb0#jlg-}_h zo15(r&GANc$21|o$K_=VUDRQ=?`>Jjk+{4*o;+~UTQUhvpugVzVa;T>{z%$T^mny+ zQ|N8=a&cON(u_&(ZY6^)uF5j^?(EX{jjP)8{l?MuO0#Ee9ymssAV%u7VMV+Plf8%b zRL_FSdKjVxcxc5_dBH)I^du&94ujgX8|&xLja@Re_BY}eP2+yj6Q!v|lllZlh{MD2 z4+iA#my1J^z>;7GQ3$MFRMLlIN)I48IkRZXKbk~}6@2SQBaZ)`n?B5bL^$CcH3pN} zxz0cuhuV{~J*a=kvz7Av%stzb&d#vz#gy?dFOU@lM3T6LD_$(?bcqF()HF8hnHL>~ z(oL%8bt*M{o%*snH>Z7oX$9hS0Ed#3(QTch4j;C7@o=MdYt|0PM!(^J6Yg6jAMI|1 z`{|f|1mDZZf%a#E>_y3=0qlV*C#Ja4L6;lfh@1%X$lSQRgsE3Q@@}%67~MpAGa2H% zqmEGk(7zGu9*&H_9mkH`#^^Z%gsg6JgIDv3GHN>ZwEktJHJDiq&r@MZd}syyaGcQ$ zG?QUWQ+Hxz*=JxN$x5d%`Km7#KZ=GhJd{$bdsAfAR*vSO&O*@%PphFGkwQzAbUdrG zeGz++|D;9|`w7AYjRds?r-S4GY819Mp{!mu67qbA9-nd0Ht$+VS(y zh?_#tzV#K!6$`O4732K^_P*^euK!+~KYS$0`eK*SrGP!3t$kX8b0<3|1T-o0(NbdzXO8izrQrn%cu-1}1v(nHDN zH>4X;ExY6Ce;BzY?$yW9kIGJ9TmN832+Ekv$7FlG6?Zk17`_#InB_iS!z3lu)yQ)m z$JXt`U@6)3lJ1B--PaM4CfE&9=vpf4Lq{`CCD{Ha_7duDf8%2^?0=&ha8`UUYUFih}d4%Ry>=p{;2!qYy?T;)dGriHbqC^F1s2WfjC-HQZ~xIW@r#gnVj?D$IsCvmYGd zImQBtBK5y1d8hgFmQUn#jk*D$nr}7KHS89Qk*Ceq+b~_qV_W1~Dz!2`KYS`}TArgl zNa8@iU6K)IOpTE65ss3hLUO~&F=TmbhVhx0uwA0_;jz+V1dYpBEOktD zY|lBYVv3$soyax(={rMMwB586wYTcC8+4jY0!DOj9*x>195Q|{XwU;ItamSJi`yf1 zwe{YL$oi8$q%~W6q_4jVj4CGMbLb@CBW>z%7?~lATUYQR3cfdE{INLAk&pAFdsT&G zBVw=0CkXnU*RKP3ro85BspUZbYnOk`W_ic%zMCj*<`kM2eAF70cQbh?Y#*ZHj3XYL zX6UxJ8^?B!{?b>!xL5&}N;T6i^_yIV@n}7!;STL9f8Nhv?jFW89K0QZp~LNL0hpJ* z=`TT6#S511tbt-lgNBOOZtL~rvm?i1(E^3c{x0V~+hathMaSj5HoH8#Ub=FnLc$13 zIZAD@A$;+-%`6+551h<#Cg3~8uuPzjOl}GE(x&$ir3f0*wM2mpM|9_;c&El4%zmfg zqFAxmD^`0rA?FqOd&8#dN&Z9hg&+RICJk@!uuJ%8V!k9$A@=CG^$o8U-6nEyJ;C1ZyAMvN5-})ygr-w(gH+XybLLJ4XS&WqnHv45|z~S4Y)myABB7DD&FJWcE2%xYR|#OrVbAzL zig8+#)|~=^Zv}6nq%@fv^rEQMrIcVLr%7=H^bMQY?83AiDr%Zb44?K}$9ju%X9M_s zU&4FM^?VnsysV>yq?g!h)*2=zt41cf;D$f<=X<^$O1~DRww)GD7T(>i0D_D*5F zPP!RPpzzk=yiE%m42b>kOfBdnDtKOOH;5F-BS?&ua3KM80EECth ze1Pu9L35*~$w)BQMT+a(2n*krHPoEaTH3Le&EF(eE(fG{KA84wmobI;y+{7gCzg6p zd4ctTf!xtOkI&k(z3JwT`s>umGnE^q9}BSEs4dEL5=2l(n2)AP_DItslMv}s4u#=i zW#@N!yis>z~$kIzV3myoE5nks%X8fs_L%~efxuwGQvIz{S$AKh9b zPrR$>bxsL73J>6VP=>x$fNrll>TFK}`q8$dl>~H*F^-1voM7a$`A*@~(GYJ?VF2~F zsxj1BrQ8+Bpk*uWMAhYabMNOV>mv_ah=w>z9T`!p*>B8x-Ji22zpJ7yxqV*`q^_Ta zh&z@R=2rA^CyW2?trbGgm5u+4S#vE3KL=<3GhauT8w*t;x@D`d!}ED+P$Uy$zHqXTO z(C^TK!dS^Q#vbW-_>Z(hp=GE>HAcbd0jmPYIcxEBS`iK zf;_~$bs|Sgi_8)ezhrf2Oc7Aik})_@0(vv$Ej=P|zHwUd6Opk9%FkdmlmKc;!OHGU zl427maw5G%bUH@?nbPedEFu$LIx$pr;wiTmvOTU0?<1ZGUn3mzr?t136jny*J znKa!F7_9T$`&7Fl6QtpNhCsVh)lbaNpzN$Y>7Ns+@5K_vR7CblXts7d*x&uA$T?Bs z+%s)uUraW8F0FU>KnnA$4X^b(7=ER za*WEZk@#tj+rHTLZSC-d|10%qdP+zNF>Hne*|<1ThKFC@@W?Z3)3^~nfHV*+pi#*P z<$jIxgdrlSSXwPHvM^T|!*pIj)w~7^9iOD@r$$8#^G}9xk9yp5_k;m${#>}y;XNm> zcg3)rz7=>Mf6L$KhrpIz*!-abH=$_4Kk|uRmWj!)bN_97b~Cnb3<)0;WfQCC1a5k6 zPKxyyi5CXNDsNVAG8esmv3Msz3nO`~fQr7j~^ z=t5Z@lTQwpAKEak72+>eg>%sF2dDJfA5MQ4e;j7?-K1j33j+$A(76{A90&Wn-ND3D z{m4WvYv2A3EXqIeRn3aM_cx+V{h(-qSl@D?XwJrHIVwAOUx?D2J3P04 zI1&-oiq9yzlDT=VMel536$!;8bqKGvsM*O5XEH;baLDOjA}a;R4X-uM0Zz1`lRpOn z7iNBYWF~X2E~Fl7E?iM4jt5p1Pqf17&VkjrVR}^{mnD$rDmR(@P#QRqNahXx^YEjzom22- ze<((235i~hUzni#VQiRZ%_d62*c6e67aXL!l+#TBQe0`#G<-$K^=fr~^J77EQ*Q2r zVrL6)uM&_9BB7H*9DcbhecVt8Pem$D+Yn5L3fR##3x8pF0-Y-epRn#mVroxIpDs!Z zbwO7{^dy;6A{6Dzn}y9<;Py-Vjr*3v$P)Eta2_Y&C*-Nh>bhrqZbv;IXqQMK=Qb4v zlVTq9`<kDJ)uRw|VJJSv&hr_PQ1fP3v3|o{j$J}S zof&}8Bs7B!p<>U)4d?f{A!UEaMM$hw^_m}>dxI}-%S7`=_eK+cC(`z$ZEcNvrF#|f z7rc9(Z`^h9-gX9dtJq^utnq}5-Gbn`$KZqPb4NdZ>=(wC+xt)Mt8g=TPtoKEIOSoo zYN>vGbVaxtYrU2aomPJ)?$3dD_2;BNg+G976ZOLrH6#a;s{)Hu$kx%lUSd;bvQdhQfOzv-#pITGezPOaEgH#|oHHBPrkc-T zHoG03+Oyn7)f-+J@*CzC_|Wd}_ztc)%pfkq}KKisa4OGk43I2DKSfkCWqTm4~A2vf3u zMF$zRKD$p`7gg2<4I=Q13P3Rv;A(b{G-EYoo%#T&lHxdq{1eYWBlfj8n4aWig9%*_R?mc@mLI?Ms%1IA%{NTU(oR%{y(6_T`eVBGfx z`@-@?wH3CWRc<7}pOLsnr|t;0G_`U>_<)mb_!kw9)`>3!dQY4WZo$JFm0AF{0Oo`p zr`YdZj@M50^gVvkOe)$Qf14BYU}2x&FDg(< zVbW%_X*}MHxpKH_``88aOYZujd~4x-YQt(>KDe0BKZf<}K0);CIcj+2eDkBeeCR=a zmT<8D&F9i?@XI9r6}|&b3Hy^%hxi7YqHsJ?bCA|(o53@`vFALXRcA|Mx7>yNQ)w~s zw4tGg+JLlNo9&rvZbFs>Yc>_@|SpAw6A6Zf+GqbWr1{uN2)JO1>l!W z&+(DY;K(^2#H*rWn9b@QJJU{pPC{ZX_4?vz?$Rg6{gZ{uj%{#f-*G>a;Lel<(KQUw z@7U+LSE121nACBKY!s^D*rY3N%9*2#GQltp{SVzRm%bI1sE0Isk1df4X|kv?Yk&)C z{r!>wcNTCch6!-)hG-R=Ow@f(Q|^fG$LnXYg%4?N}95}M88zvOdX&@~E|H5X?zsb$L|H!WV|497*$SXC&oq|vG|E&57>W7+B+ye<| zkXesjr?x46CV@Np?m-+fO5#tj*MKnvxdK@6OB&+;Qa){(ck&ZA4EXyM)z6sugcfo~ zJ&6+{5Ikg3SR2>R2p0y^Rp#F>fl;0B5PdJM8rjRc=7(A0nsMC4OzYvr6n+0wKIfQ+ zywFJvs>jMdwcmLYc2{&E%B%O+EY^Y)3nI!Hbo%p!|5YIdMf|_?s$%^9bm2#@<#esabFoGsf=FbbwF5gF2fQP-9rIaMN8kWV5nb$9UC z#y#RACYq+O)ZhCZ;6}PAWCWN60+xX6dfCzj_=?KUKd=ybHC#--;q5bpt;AuZ4qGp&4Ouz zbyV(GHDgn7la*G^0+oP%=iwNv1XoCZJQEnn3Ai=oS-W0`S2fMs)zO^V31MULga28n z`;WF|YpSd5hZ?_f_emSgNp_-mI^}8#g|qQ{1eI>5D#Awlc)F`!AD^$9P?~&; z-CnM76gmpvo8Km7es)CYDI5VNJi+z&)Pgre0#vDKDe6&jTrQFD-ripG+ONEWpCPLUl-VbOZ@L7^hIUXGz6wE5cxWK%KU z70JZ$Rp3uPFRmw-r)H%Z47|;1cFbp<(Uq+}mu-We=f@ihP0c{kjLq@+Wyfjcj{1xo z@rv6kb#GCm!VD&t=)c5$LK8O2v0eotCf@vdr3R@L%~jQ%*aoVVnvc6*@6&0wLi%H0 zJ~UrnFDkh#vWk7=ORk%Z?&dQITLQlCYF=Lt>^0J)JXs*-wU-de9f}}KBdAAVuyzF64~?J?Y4$$oT!tOtlD)O17j*)* zHyh-?2KhuniFDtPk5}mtX!RbS1x(tWWTytHSqN?*^n=R{`c`bUV!@#a4@u+)#4aPp z#^@zZ*-eJ3msRuw+B5nNPHXcA*&TKYajCF61LUJA^II&~P?}TSTY>ujInsKEzn=>B zUV*>=8;YKN_w(^E4&r`Gl=Xh1Hsl+DNaL8&ZofZ@eqMl@(xtcnx-&O@BKX=p_l6Bx)O0n#e80PAmcA{*+QUa3tID)LfO9PxD zN%UD7D{!o+&5WrbOkXmlN%4aV@m|vjN8k(6R$2Z&jM50)v06bbLscUK8*YaOs4k`!G6Il!xHM!pk(`rM)?zPe|PT*P;fJB+Nx9jI}7Y*ed1pvhJ`O z5ZqY2$|T7`Ns?mDZ@npiB3+2VAAeXedIZmYVSK1_z8&Mtpkl5dd@y%e1^AgMg8Upd z5L3wfre8Z$G$v5n!%&jH1!@S%JYsp&A${~AkkB%6dM9&wx#~3}pW(XjR1#?iQCk1( zurr$qOiAu&!t^k|gI(YKQ3@vB5LtqEx5s`D-Ff19z6jnn-)#X0E<-OI?$wgDa*h>j zNsV3%zx`DVN#t#-}1`29MW zOeyK2Q|QplOs!$xY@TzOmsLHHou}3#<0~xriq3SCP;i%2XecZZUrLL0ehv8{V5bgNRD8k#89(m5*`7ND90s}#%^Z`uiR zl+9;OT(o!DG#qNqf$qD zRgO+&BpyVEc=*0m+Z2!uKQxGZF`@b=6)VyF1r_OPV>K{XLB@QJcbWCAWa!Mpwp{1} zCC>RZf@ls6n7&R@kV{1ty0XM&r0NYW{RPY2BCgZ+&aFB*k-6-VT}CQ0e!CZXA^*_1 z4!c#`Rc9KB6ya~rANx+8?;=g^BHbA|HLix*4u(eUq9=QlBjR2>B~)`0zMWT4R>bbg zX1O$7tfgeRRKZ>;x|b(eBoOwVJX9m#ju`WFl~2q;zYlpAcoFlD4by_%#a+}sZBovsvf!7~zb0cSQC$7P zq(}7vNF?&-Ej*Bxok^%H`*;dgMLl{Qr}C<8&(*5H#<8ycbMo4Hex`Z_TxH35JI8Fl z2yek6?TS(Jt+Co5EFow0CKUgmO(m7NPEIH$5YAd8KLY3Y>_mT#&l~_>L#vdU^3;vF z7Gll^1CG9WdxgCgd&@!5=Dq^%zj2q_bNWLm&kej9j!AFZ3*y9#u5^NLn4jQGA|W&u zWBy7D5D}M^L$@!#ma#yQ9Ri={1I257jXRzEHYnl<9+ZCC37YSg1&R>y9f34PO-|(a z3$%Ym+U7r?ElgbQ|4k!g zV;O-Y26PuDW3!ksAa?|m`kdNvATOIp$RrYO*%IoH<1$acQ5;l?p-@PoI(>PbTB{Z$ z3WIK%gz&G8+&73j+{!RHeA9!v1 zO^J@2Ieg0O3=P$5hRwP+6{nZm_VvT!j!;zU&a#u+?fZRypE7G~a*$WhYnN91G0X|B ze!1FWH6DFY`KlahvleuptgrtutwoO=Svi5Us^#WwGW|%M9K z1=zH(v`j1k!`UQP4C8#aeCuf=(9K0kxh%x-CrmR!ai3f!uW}Pv^ZMuUMcYn(X zS_~hMOIh)#5AV@=retQn?j_>ZZfv=2%I8o>AO=X&RTRE$iI!M_r1 zkp2miO?K;-Sy9hG$LTRs9Wvvk(2%?1m-5-M`@h^ifu)1vC+61U7PnV{+_IwWRh^rU z7M8s?V`E7n8^+6?#ks30&euuYkK?_)x1J_se!tP@1xKt89?`j1me{)+L+I2Td~TLC z#&?1FP(R_64=6wITYM_&|HisWo5EqHO;RC9gK;ybdFjEOq%l(?5U1%=BS@qf>%(DS z@ch?K`=2nje+;-6)BnKOIR7sLZkz^TK{!po91b?^w-o|%+KD+F!vEmE?N}isV{-og z060#LmI!NvcF;7@m;ZhZ{4{4 z7C6c&$D3g^FL1mtcJ^RsT&cBD<{PLyjGzbkAT^>m=I0AgH;7C2v}fz#b4}HkMbi>U>7MIGd2>ZIc;t*4S!{KGtTF|5blgI z9J5sR=|S;+gEwUqhWw59YewQY<$T>ZfDU)M_$z)D{2@#keW8)?XBYYhMpxt~_%tw3 z<0yhFyBAG$CwurL9e`JG-jyE06bFAp|4wdf8dv`%%4#B3_5GD}A!@0>k3EPFs-a(-}QVq?5>WNT9Qk1wK`8J`zceC8h#`oBCLEPiNTNMA^jXK;^r-ynF< zc6_sx;WMM!cYNLZ?0ABe96&j{WA$wR@h%1NELkuyBQ z&d%R39Kwil27W;BV}aQB*SMKN!dJZj)oVX}^F!9OI@so*uK2FZt{~rJ-<%HrH)Y<0 zPw&If39^hMR(rFp$!HN@D7ElH3#90Kv_=A5NH%w>SEPkk^n0vV=*L}L4|L#@w;LLO z{zCbJ5enNLu%wLhOsq1wGDCJqM{o0POPde9cb_jhQO!t|H$Nok+_rKdY{#v==s0HS zZTFbXRe$48^bN^z6b5|oaZJ)orzKiGwV@o7H z-QP+e1&9$FV^00yJ@0pX*4UHus5tO|??x2z?+N<~-X6|l#_>Wkqs@4k;7y;FN>58) zP8X_|TOqEUuB)l5am2DCYQd8Prl2$1@isw!u)(oCz!~gRFfRilSKvsaAlnElaX}tL-7xy_ z|MKypA6l;6cRTQzk7)SewvTqaalR0G;EKMm1Y^Gfg@*k*<>Mnn;+TwUF!vLroEc6hk$#$N6JSQkFf2!uRg#26K-_u{nJ*xOU6r?OR5dNjiY*vRsL1Z zHW9xppV9%ISos6V)({!t4}?pI*X90jp~=n(@c`1;_nzx6NFdNJz&yWa$FcWTd&isM z73BCBtOPd?LjD!0y5D_Q3Mcg>q%&-m@gC+4{GHO7upRMt4}jqd!DzO$r{cq=3bJvn zXh!_XW-x@BpY~<&6I2k4%~nimh0FuQH}WgMUaE9Qw>`tB@!zgi-^;p@Zw#Oj5p0Ac z21N*pli#mB7u{(&gSk4mH2oagh*B!hI5b>4TEC`kgiizMChWs5EKN7op?EUxozoKj zg*4I?p0Gy;0&w*VIvhJ5n)YrA2%Fyp&|ZR{ZbG`uL3A-nYJX?b3upd>sE7yM23zrC z`F_YSlSeh1qB=PvwHlr0t6C`*^H2b;K!Np7UV4#Jy?`g z${a%3bw;lG`xUNG07`mHOi9M8DfL9Fq^ks44VAJQlynK6rfwN}C5MWRz>eNQ?os!! zFQG+C^7v8Xxp%M7Q!R3BOZ~?=Kj&a7m}2{n*q7)RzB`h;tBLgqLo==h!Z=~3?a6o2 zJK+*CU_QQVEPd|ee)t4?UPx9bxtr@F=H9{U+or(hT$@m~_r*r8bKKvCJ$vx4SJ+SW zSLb+8Z8kbqXEyVIt%-~dHpG*bYekP?5IpGDSB~q&4nw_eXyXn7?(C6?A%5ASxLKU& znXGs}7y(f3W<=K_(_0D)&N{RoeD8o|KoE%p>u?MP?HeSSAok%t=>SL?Bbdw^ z+N;PRsvFHhT^QQ<-h?uJaZgmF|F{j<3p?}&E>~eszq`@REq)EWm|!uAL5V*9ZOvm$eml*8dBYYhh8MG>+1@i(&z~_rf2oa_ z5{w&QSl&#YVo3&WlIhHFdAlVC`&N82T1*bVLa z9KGVpCW9@xB0OH6n-Ci^u5HHKwKZj70>M>tQ$-}wjZ5~*JQh2*O@~^|GUBxh^4!`dFBuv2Cxn%6iKYqnY2ywB|5$GYEIIx7)$bD>DEm%!abhQ z%>Kh$#S=~n@OD91+?9ZJp<7}UuEMgL&ki^k&5`Nj=l6xzO8V#0KlMeap_jJcUHni* zT-}+EC|Hn2mKWO&FK_dP)|dM$^Mb17{{+h?D9L=$UDu-!r$sS10?z;a7T6vM_m@o& zW0s!oBip@}rWU^zokc*0^|dM9HDPyJrFI_R>V@CwyDo@5_+Ht-31xiwkf_z=swQ4R z!pz#~;K@m!zc|$;9Ua0am2Q{l#GRJdlU$5&q(T|#{s!Xvq(uF30IRbMF&Ehs^P;QwrxEP1cq|-D<~h+2EQ+ZmV3d072^kQn z)>5q?@1r!7Ptml={*mlZ@C}mBm#bPWsuvHRT<|ewib*O9S@e{y&c&Sk0yAZ>9LVE#1&DYNbO3zJ1DhtQIhp!kPp(~HaO12)4- zNj9e-mU>FMrUt>t(KysLu;)$q(#QynwtN5XdH;(j9_jkw%a!>4ei{#_4%#NXMl)AT zMV}hL>09l)`muEZ=q$=m$Gwk&$)&}OoLqas;-?JBNoDPv=r^xX2)B^I_g_P+t$Es} zvUaT+sS17v#~<*~)@A<-4x=m$^SXm<1fv4CDI6L=xTu)d;>@0OLaCF21Ts&EB7GZc z2jWW>B}UFc%^g7K0?k)|1Mg`bK)qULoT`-GROCHeK09#@SmpJ;xe*vKRGJP8%elu& zOR-IFoDyWXYE$hTcBXr$>^=nfY+gLyw^Q;X%11@Ix*8c^JEztKNI zsRWvGiP0~NZb@3Dz!?wxcDEiw=unrsu`7{pYAAO0D&IW)1=@U{=EjU}m+bGIa2F z@Vj`He~xKKPINbZ2VR&z+f_ftkMZPfQ)A(9xT_`{E{mh^U{@F$D#}5BlKZ@c!DOPc zqQamcuMS`pbM$C?D%C!IFL93^j97|lLd~++=l@ny8m)gJ4|_pe+ZZj089|pnnmNX@ zU}0#GSJbLrU^P4p%j$TY#>(OWv(yAM&9aMT&t62Hb+z;7*TO@v z=ZVapxFC$D9xRLdMRl9GRV#C~a(UionTw%bp1JsGu-6-EOeT!*CPqb~DCjFx$n*2fR!c>BRb`S3zW>(M zPd;$+t*f4V=r>)-?ykDdixaCZs_SGv`{OUtcWr;ff$#nC=eU1E`rSt#zoupG=I{UU ziK~eRuV{f0cm}Mi82;hDPZZbyeByvE=^NH1tpM)TB`sOcnDz3ro+;~@!4rMDq#v>u z!xMm~2%aE3$Ix5sDRe@9TrDe8HaRngkr^HnJfX}m(u2>#V}QpBj}0C>JR~3BH8R3e zKyZK9rJG!?d;u&Rz*gi&ZP{Xg;*7Lt3DcBAX1%*jwBnqeu2$vZqY!TvO=5xQ5<{X& zR1fP#UNneS(I(nOr|1xk{G{6dOtvvn8y`xPlo*(TB2HBZn6Zr5@R`F0_4x_>Ntw+) z$}AHNYNU#*7?o(sPpCeLi(3gbgu8&XfLDJ{IL#PvfHU=ELd)XKSBQRxz$g_;xss84 z1h>G*oie*0xmd3sJCp@}zyxp*MTAi3+G}xFcG)jy`8`$rjb20{_OMVv&~<>{W5>1 zr8ZhxjcZCvYsPn9bougAj!c_tURNpf@~s8YdcJ9P{M$zSfPVQ1&3uLA*SF1Y{*VL z50h<%0pRg4W_dh-@4$!gtH668|31ixN13nh3;go2?EDW>et0GvuBQ&+i}m9G)Jur) zWv=MU&oV88%#a0=%&&HkDM|~(z2!Z^5V;^_i>J=LH^Cwce@f@^4xAn&z)ye49QD8) z?S(n2z)y?3-tX~)>Gq{5F~D%agfWww0h6Ml9c4EJ$}1|+3)5yvPezAlzC8LwzD%0R zlZD!{Qz&ZHOxCy#`2D_Ip|HE%8?hPvkqVD{pC-D(86f7dFh3S1l6)*>tceXm z1gP$ZkPj*Zgz}M!d8g#(Q-2S17(ShRHm5(E(=X-pOF8}1a%L$U#AbijS73)k(>dJm z8Y&W1M7-rwv?&TE@$Y{}v8Aa!CAJ9^XV{++3>p7;zur?ru%+6g$DgHNpF|x>*y*3Q zr5f8eq~GeWmZjSN)}AV}E(9EU4u8OzneT#r3ei*SD1gdPT5M2oO0}w39x5&>3b*E6TCBXhcw6Yf;=4lJ zO|t7%PZd2CJ|R1yIx9P?Qg#-1hAs`WtxBC}aU^sR10pje0F10bq$_D%;KO>K$G6kR z`g}20t63InRpdFI0|{-#Iuv9s-p4vB1QIqtI09jfy?jz)&l`U`L*zB_2v;6A)Wo_5 z$7*V@!B`U}59QB^XqnSvv~X%wKo)eHgfJ?|cZ6}NG7?5{c`%GUMpqa+E#O4eu`nv* zz?mw#uZ0g9?804x*g__eOc+&nf|5o8aYYFbv*DqxbwBLs`O(_0hZ@8?I==nqKYx4S z9e7{e$U3%&GKNenh-C}X&O2P>$fD_!$K8}(&Uv$dl7WsWH_L%CJhar5D$?XVQ ztj{oSO;B-mLoixe8vF57Dkf@WZV61K{8Ca@dI}zoduo4ONLpEol}aSP*WKnG#k)lV z{@Cf|6iIneFv#bQ#4tFX#Zhhx|i z!!dj1f^}J%9i%Ef(d|Lqq~t3p-Ki8zHJy_^a$-vyBGP-W#+g9jPQYE<1(cRw2~z@G z%OHu-ES-NDsHP=X7)Vks8t6@ux%j^7n-(0nWJyzFs{IfM&?bNE;?_$SEg%H+VS6fW zTR>9S+gjrB!4-Fm{f_SU#y9fcw7p^fz4PsY_jR8zpULxHw!eSuWQ=2`6Zt3YA33?-+ukhrka=Hz zQvH$cL!+X{c1gjbvd2}AX}+KLgkI6dtd;kwFV$UQ?6JtrUai96#vs6@rOhW=X zjyUuz^D#`Mm05bwql_yDl&ta)#JE7MA0v;X+u|G9id%b*)?&fIz%X0Jcey6WF3#>qpnDSv;_JYxm=i!}z!WlRpKS7Dd&JTwEP=SGs4pm$~0B z`=m@>RW_?^N!haUHRUpEVO69xazW&}$PItdZ&p55c}Vz$pw@+T5k+|*9FEjPXZhNr z%X}AvdwrXIk46qeejd?pk9;G-lqx}qaWL8SU%$`inJU;OrRQ|PMx~+dzm$f#SgpIw z6N_Hw!Am^YLu3G0T;PxHtEeUZw+?{u^-?xT6q^?(JXb}382xdSjf&05sL+~>0?&UT zDoivIL&QgsSSitFN=ucts))ThVo%tZP&iCvrcbIL{BP|mElMZr;#3ezL@$lf-AXQT(0z3g)5O9CiSU4*}DW?q&)`Ur>p+Q80l3pytD;@6gin0nu zUg=2qaoi0~(plxl6|R^cxjl%l&uYb>6b}t{5f*!1F-fBp7OTaYBVeYeh*(UON#M3V zd^c5o)4!aQmH5?nP7Mq;wU^GHZ;v*%Z~g3huk7lab#c?x+djfa)9EkB%(s6Y?EZE` zO=ry&yr&w-`r7$Noc@lY+BJZuGk}gS0XlXeKYmD5j~YkK2c186a(Sbf<6>KZJJG{z zF#lZsmi%q=+xGY6ADBO||C9Mx{!imM^QWHAeELdxtDG_Rnfq*)I4<$5_1(if?774D z1JCz-|FUab3K^?0`Q2DaW;1_On^011)n1qwR=%oaPAee+Tb?$$fsMLJlHMgGcsCZ^ z!)|7$8w2aLiAf|HeJLb*0Vqg%5Y~gp8!Jh672F4)be^Q3eL-G+@nnQ zUbIaEhTlHltQ7U<1c?vr`}~RH8mw^y{o4RXx<#`|^d&u}0TW{q^YniSlReP3fnrOz zD?D%f1aNAiXw8%4a5xN-7*ysVh#R9GFqx;_qTQP!@37BYob{p8)b|;wzqi;-*-g0f z?_GmL(XI#dvepnjMRhJF^SY=qSW}(|IDqx9?**T-C%~L=7xr4H4NXx+g@_i#t}A znQJ4(1%YO4dF5@aUtZC^ac<9L%P+WKIl+kZ67DDL_lZV?Zx?HHMNAo^&|0-#W0`S= zanv*F{e|Zj-p`6YE7R~!Pe5?S0^ii0@qF(6SJCI;GtrOBG(~@+N}nntL#+a!XjrXD zlo1O&4*;9!D{+c3moJM7Em=t>65V_ug=uM2L& zV98#vS54^q0@0^_8078?s-r4yKy{c1V2>)MTA*T8j*1Rrw~;Zv93kSv>=70SD}{bx zK#;v4V8LGAmX&|UgI)8+Pj*phoMjH<^(Rn@n87DfS$1HgDp!ppm7jKq8a_dEy}iT_ z6WI*>z!oZX7lsNW9#rZEC+scp;HW3&k!)kovD%hgA@cDuXF-`W=Huc8K_7NHFmMT! zOV#(V@VU!A zAi$q4UO)5p_TQ#YV#jai-=2DW>((Kyy3LnSpFvi#s_CCv~kOMi1VrDQ58$mb5Mtf+wVs?_ELRL&5 zqLHOi^_1^tr+>dn)aWIR3=}e$+?*8UJg6+0B(1kPUrJ)O>}J z{MD-)^BZq+(jhYlMnzbnbEX{6y7tir_`-<=7EKNyMO`UH+APX=@ z&eDHH(pKW0eY8zXwaW~jKQ|$ew$WE%P-o^ns_B=YD%>C@LoysM#j;9ErLQs-N`+IA zhUiA!)jE|-$QSNYz9|2t@Vfkj{A{HXO+|w2o0#2g22(s#RfzD7CAcJ1mCzd11ovWY z5GU#mH6yBr)r{J^GJ+RGa3oS<7Ng|}bFY7q_qr7&>fr=VfSQ?yU?BE;R~F(z%DZ4V z3LQ1po8p9j7!{&bm+~kCMO?uu?A56Q(zwhUCstaxD?2=6gTOk7(y8ag=n5E45KKG~ zOoWqOj7p)j{%U0GF0Iho-eEXw2(<`W* z&~IxfDs~yYwdH`L8vsY|B{PdJKPZ1-e7_tU$)b}Oa3s}yJI_4DKV@J%A~$6PPByuy z)1;lIu})t_T#N!Mde4s{WFNzEG@%W95UH!DoOVC0#yEQN{zqn>A2p3(Vade-1Wya6~T zQBSji0+a`WUuIsk>r)2eP?|LmM>1yyC(J~;{6Z~5?|I0z{@Qz+dM*|l!oelp@RP&X zKe@$mrNozpyBgce6Oo3w8#aHWUzxBC|B>TKVVLj7K_=8NTMi*Z<^$2toYV`cBx{55 zbrPp)H1h!&Y%lm?6#$mVPb0_lZ$!A+&RLN+WN)b7(Y|AR!whC)@$cjR(rf1ESLkom zzoP$HMCR#8C0$}FNhWGCS*s`FT`%SNPk}-MYv5=XCq{{o!Y$ zzt+9TzZ8BYsx^e&QE#|3S`n^~Hizd%Z`EDT-x%Hz)h^Sm;FpD0MAzyr;n#*Qi9Vpa zk5^lDHr^a|M%#6>czIMgCmD^mCV6EoJk3d7n3IGa@|>eGTt0s%=?P;U#}(=;ai$Vi zR&sRJVos713xkOT9Ok(Z?l8x4l=m1DG+AYJCOEFHu+Tw5x{l;d$HR`N94|PII%JMm zSGXc(sEC1X0_to-*^h=3ikSCvz=@KD#Fw6Q?-Z$eJlWh+S=swz@U3*tafQj&<; zY^|CM$Q3NYRn^sW2_#zdz_(&0jqUHZr>d)QJpIpPRjU0k1g^dkfalv&Rh9Vd^v7&X z7_dL)uTo!sy|%n429yx0VX^ikR}+GSNL^rEUr|LIqDy~jI0P#FDbS?}FASmtep`%< zd(IS&myAcx#Lpz;a;G}T9PqyEeY@nX=m#YyqjHav55}BAkTXV!&KxH?vkd?+kHSu| z+#gY%*Rq$EtpB@~y~EvRx1k&TVXw>avHfzF!X_{G`qe6>u80UbUtAD{4uM4iF9^bM zfg1sh*-?M#ywc&Y+fncz@mMKU8tewd6J_Bje~drHXL!ZK#MVx(xmwb!DJ!f$N!THO zBCBH08>5@9snnSh{22c?VkGAjYeW=l#}^fAcSWK&{EhfnYpX?&Hb=F&_;4G!5GrDRmY^1Eqh?uum2#fb^UOPBMhEQaKJ3pf;r9 z1m~?_zeGg{l@cdP?3z;IWKpk^YUN#l^XWnrlno1SR=P#4lcd6}9Q_B{sb; zD{p5%xbSzl_^G=NE_jeJ&%Ax*11lPyy7uco8cdH+t_zAeOZS>*mBrJ49)0EdO{Mr7 z;TwNCH!o;g^w5LAiSGmLydJQvmHCO7R2k(-yU~(d8^1CB&G`39_m{p{`ljl2^_yiU zRqvOb(VmSN)L0=?s1%jO@yb|h$*h=?Ebxm18a-Is;HZ%vD}7a{v1AsK$B@rooQ%zi zwcb>AU)g6UgFp4DjWP|ZRmHS%tH!K#**t%CN8DI@gXY%w?=6So>Lw6|6Y! zx3U$bS~cRr3cuH)wa1xK0i*YL1{^MR2c~f4-`=&!(hk0k}v%B?OWci=&%8m_ood|!EJsq+X)s-5%Nmm-ahJPu$C`J*DEVH=7bpz@&`ijul{mAA(?Xo^SA9A$Ven+hBRHX~lCMP~qN0DSuAAMN zux6J;l8K@q`6jblOx8+iqlp$^XO?fO-!{t=68eAL(Koc}*7rK^OX&-Zgh>a=b+PN0 z-9A5%Og{F>;>BHG`*rJe^(L<_RLu)jfokSk9#4@0I>74-3Ica6+|+)l$DOB3wYRjV zO3I5%A{JY*!(nu^w_Uoat;c^^po66HW*b?0WY92ZMRUMXV^INmkt%unGl>mp1x-uPSI586pQnG$|(l$mv(*7#1ZM- z$l2U&>Km07lN%L!O$vXdy4ahi0lf04=pdnfJb;;BN8BF?eOpm_?3J=KOhM` zy6{IVw+TU~CW6lLr4=M!kf|C)ZW4ceQx}b_Nogvlt{!m> zJ~EG|XFag!{q#v({6@!vbEu^9?Y(w*@2as;OaE4oN?~+LocE65HS=5kcZxnVo;08Ie^~Un`E#FIX;%4|N@K5Kov}B6 zZSm(?xkihPZN`6jMV-b!nBVb#Wd6{vaM<&-NG3Pgofd5#ui~B9If}je3(=J&x>4p| z`+0APLN$upMHM5rcndZ1`E*4Y)R6)AaW~W9e$~ym9Z?fC<_Cfp1qIL(27+AB9{G)A zx($-KOAmoje}b~y)c6S=)RZn_u^Egt(t<6byGp!L%(H)_)WlH{$4TZB7-N=;Wf%OX z?sx|$H^$%D0s+{MwyQJ@Ml3!uT>@sG(~|`s}G2_GAA? zOYdUW`BH7yw>R31{m%IJzkd0x4t`!^XlBEOYi@Y|UF;Ev&iN5g*Ec2Vx z%N|g^tbBi8`7agcVR)^_4~ixuXk&gMNa;&{PRRK4{Dh){xpiAVp*9*KI;d0R2z{x8 zN;G*hbD9zUCDH;TJWt3g)|16Ij?fpU&;xy`H6FSkixfOvO%W9x3i*fvA6H-nZQGzu zDI5_L&=C?eTaiVu#4SfH$1JBT8H?g!3%2C4S?qsdN!JWZ$|hZk8KhdKM0a48)KpK9 zULGMm{6*4pl!OGYOy!k%Jh(&!jvxo(3n`}%pG055B8@hv1?nr(1bj%FH=X)?eunik zKz%+IQmNVgCF+w@LPUgFzV8c+6i=Z(+%xB)1#jTu^vU-Z-QRk8Qcq-;X36iaM`VU{ zqO5-`{rgvcp8hygQa-uBHkJPF0epCd`wfbqAMCX&y`y-q=m}VmHy8-G)UH|MU63hr0|lF|xA;7U6%q@e^dbZ5&JjI{3WN#BeMaJ=ld9lgx#( z1C9;Sslmw|k10#5($R!`X<36wI71u0eM5z-xK1cbA6xUn3v}(Gor)c*XfrRQduQZ( zn;rGxVpnXzqnG0sN#Y@rMweP)q#Pi#e*lzIjs7OukEt*@fKVi7>DhxU%3EzV`_zB) z0@rcfY%>8VO`YTaQ0>ktM0( zVuOKK+iherc;x~WmW~^!9JRFpC|dw7gDFA&1X<>}!mankxQ&b)_^46{$58SE<2a!ijOlRxQtGV-kJko(!l z5!WjbrI9d;eGVU`X3?APOBnk-{iWMI+e>$Pc9uTudARhL=UAz_OnI#OSc-p1k=!a> zqMGD30bmrtL5XB#Rdr2mU0wZ;nTMxOVD1)`Ue~0XnuaXWc~E2aY^bQ!%W^lcJnpZ^ zJLL?is5Q!Rm$yoz&t$V^QD8=sNbYyl*GaK^-EI0q06r)dxTB#YR?KjC)gdppO|6(A zPbLz9K)xE3M{*3sY7xtmlqr8YgGr0%u1(~)CD&~kunb%7uy97pC_XJ3+=3_WVLW89 z&_mYy$tjfsMaCdhKv}&%m<-Yig2#fVf|(%K4I*+lcn63{QYJ{s1fizAC|XK(;p+K1 zDj|Z&hwHGuZdcv0y5n`H>tshMz|zFXifF1%Y)B>Q#HJaEy5Z(lfM$Qs0ch@GfI60d zb75Da&fc7owq0`;%wSh|&Z6b}`s;ArAtsHQ0i`=BPdN+hlqjcU=QT*|k{~_S=*mj3 zJZLaTRz`!OB#^_MH;+_Gofo_f*x)eDPDgyvooAKQ`MDQ*i{gn-ziBO=cKd|Y%XP9K|mXDs@yK*aw`>f zjn#!+N{5TJg>k8T5?8VQ|WbQz+_UhuPd2eEXjC~G)PIa_4N?jxgUdW^Xo(8%&k~Q4wjH@7KMEQ676gNh3rXGYv-KEY-cKM zHK7@{d7(wNuF!v4TVLo{v1(!sP0xRcY3F`nqPV1qpJtEc&VZXFn$}Uemw)wo+vE+* zT&&gIMvritM4hOYP2SaQqSbCQ+wC?R4wcwYh_A8A#!}i5u?e6_W=r1AF!An_!fUkO1g^&iieBYVzI71Q4ETe z079CeIwq)256L)SEX1;kgohq66-~CpPHNMT};%_J#mJ? znj%Nc;)pf40j@Mv7Ov;lnQrE9G#xbl0{^`5L#)HF~KC#u6!@G8##+4HZJLu+V4%l>{M`(V0*s91bO8G$_fDVzNp#!XM{P zgEkJ6{-SBPJgGOOOxsO6O)r>EnKC9t%!ExZ3iNoZt~|*hGfJRgG=gMklxf@NyQA6` zwv&IYP{$ZBYOJa1^P3@_;wKaX=&(asow#FeMpPUem<1q7*H0MG!WmUE$g8zt4Vu{eg;K z>R+ySTmNRo$%fCIXB%`4q?HON;~;G|)Y+U|ezi>~3?!Vyu?ewqfT&ZOw82BOBn^N5 zQQRO3$s#YCiY|z*jP^%&Mvq11u_%uIG{}hR4t2MhRgYqJFRMf(ui8*FQ|0l;{0tNw z6K&;0?3EW=?TLrWak(f25}xu{Ia5B$Tq~+e^dX!H;ZS2fIbfI9Ee?po;vFIHtzr7Dilkfp3eTNQ%(RS_AMmBuP96HxM%Wqj;UDFSW+3R%ovS)fu>)xQ*(#rxJCi>eHUKBD?$~f%Tp>*)uCd+lv01$t=o6z7FkZz z^Dw*goK^kUNh&{1j@JW|z&So)%dR_SH9S#cvFXhz%`lPlAtr6EhnD7R*z z83xBfSEbD}APeRc;%TtR(^+jR6yuPSRT~S|@P}J2I z)ncpOkNqEpK@7QEZg(gYrsrOwWncp@Tefs*d3o6=c8KK(g;KeA@scGK6$z3d5v|1t z&7R%bT34s9#kGGQ&J~+Fn!1|?nvOS}Zjv`uovR;ZR_vX1wCx3E1zLpHBMy~S; z12~ymJXPcXR<4lF-&C2V2c)HnsvKadoLKl{As~SY7V3Xu?~Q}%(k|-##7o$)PMvU- z)G@XPY#gUa3XwX-T26#rlRf}mThhkKAUagfSns!SHIZ;VX8(D={(kl$qWByqPI{Lz zWh-nbRl0FU`jMpC9jK3K9C+bG2Hc&P7>==k1;)hwyv3>%`;XGoT%& z2od8%)#QuIfpm=0!IbQ-4dbc}uV`uvM(S-F)~wlJtB(WBG!XIyM*oPshfnQt}v4!cwU`>X>>Z(IOc0J`))pBCMwl zjx493!{A7}K@1%n+?F0C{$_4J*%J6{ue8cWZe(7?-G)49-63RVI8m<$Q-|mEQI!WF zrILG|;gAXyfQyk9(v1pW5Vk67)L`IwrE-54Sto|x2ot@blzWCAGT?#IPvow!Q||T!Suj;D81KYOPXFC*I_>F?(>$bY~XKToM7 zDdt%X3Zq$lPA}%@LmNXWv=Y4l{K_GW;+8$P+p?O?By9jaOz?|JV=}>HRowFIo+p3v z{P`(k|Mib-sjLsVi}v8kT@T~RJ;g4djKZt-4DBI3dkpX8d@%cQv_W*ZOadw`GHHrj zCJmA)!&Sbwl}gJ!dL%rH*C0D^(=`WW_Mez!KhYSUWmY0BGBGO;Xycj=4Wk*w&+RL_ zqCKx z{F?i!gmAqh^388XoDC6A6_Ihj%lw%Of>!TAVf3hIfC^L4jq}iv@2XSx|yY~yiMxq0)6wUJ7&cuLXSg}h1A09}cYro48)$=5W z+6oGq#U9yyAd7@_nRVV6xujQ52IynZS;tS(4J0}~H7IwkiLA>^HF&V3t7b2I6e=Vg zBq^~>IXi{=nWOTmP_*WsJzIY-9qc3Y^z9#Y{q(Q5KioWje)Eh4^PBNIwMn43uAW5O zB?&h%gC1>E?mvrn}}PV3vOsAnN0I5M#L_ zH_w$48gO~z{dTh>5Nfb7ciT-)f2f{2`>)HBe13h?WKi}$> zk$ZjnX0#@#KX)yQ`g4h+b#+)-p6W!8x*$A2i1Sky#s z2$15`Z(9sLq!Naz+^J-g_TV%49(*yH5I5xFAAcr$>3E zf(dP|y>8>CwxCs424vR%#x+0vwDqP-j<_4=tbPao^19~wIh)18=8(U>xPJeJj~-uo z=Ws8~(M_QFiZFji4d^*hqr%9}e2PD@GgKR&6)Q`;j^4F1idvh>TH9w|8@)nyMgHYA zgAFQ`k}SO!wt5QU1x!IfwL(WM7oE=Bs>suqdCHiwvT$p)%;O=0cbr^;CROgYITNUO zl(~3sU7htA=3;uvLB;1MST>bNkefXRcyj`2ux8?D;#hx0Y^;Lb*8yTIk984;oWhL_ zjuCD}PA;M;_g<%PUvjB}nv2pc*s4ZmVjOd~E3?#j>xC<}{psM}FK@03xjd1g`o4X; zy5>hOt*ELmU8^YWDBHaGp7~Z?z9UqB(T%@+{^U&NhmGIu-FRqad#EU_ymZp_&-@o7%vg&yfaUe5q1&Y0ytd|UnA&@dj6IgX9 zs#clR$fQ=82n=+Kuv%l%U=_!yu)?It8)bHgdZd0!Pym{6-P|xa<;fg9h_2OxWM_b_ z{bpbO?5ik;9~&o&dUglcW^~mC6UtVW+QPbP_?Les0D@-|=PnD2FwUVAzJs~H+}l{< ztUTvq|4``&HG0dL+37n9B8B0Un+Y;OS7W#^QUHAV0ibUqNGJz#FXE(jjv>93>8)tH#mp5M3)> zTOEJ*xE^&KaJ}i$`CVnMU%6PLv7pf5OcaR0WI>@OSA4bm*4ER0+(x)*(Pf34zu0vaJVcs7daCk8hB^Q>Beq_&1zMM&R|0E zJhKQ{kP<(JbfD(kEao8xr`Kui3v44c#`b?Kvk+1_=0;Ji#0rJdX|-C=v&?E#fRxN? z(NU1y5Em^SbZ=*u6=oik@n5I#e-wlPqR($vry1AB)q z(1F#>k;7!h8r$Semx7QgC#2|hf(u5z-c4sfR8K!n*YH~}+VFbu61 z3`5HWQ_hcdB2qx@5}m$;lQ>z^K6^@dunQ06F6iV>Kf9C!d*5Wh?A=X`DUobRq{oPE z(J}rS{%A(}Et&4zdo|H$?V{Wk#G-#E*_r3w!=I*=!1?Y4?7drNKoxkN=v6qa&LU@( zlY1bD89i^TK;%{f^W{^w`Sd3&R3w#~JjnZn8xLw})mTG+*Mpn*p=&(-fLJ#9D-QfN zx!e3=OKZX}&RYylvKE|ZdBWdY>~$eyPqYH{L?aR27PpDE4qLZv*e18h^*w(o71N_s zqj3CV*(m<2s3q4M7_TE4#s+!-KydK+muu7Xu0cQlF#i<)0?#471H7Z;qEKSW4T!<; zyfY{G`Z0P70_53=6Z9Mu`8|rk?9M-!IAghqM?5(vRbLiILtXfM_Y|ZJ|D54S*6Jqq z{(GlgT3Aio)xUgU>9JIGi79`$ef8RTxL!H|pqqXaZT^jWJk^m{ox{}pET zFWiq&kmW>2FTTXoYrZ6S8NS-I)qHtSiILpMBi5Kt4dImuBSH0r03Z>ZW9U`mtNH9P zltGL!X7ZX-rnq?}vz)!qw8VUYza#LD=?(K|%*Td*na-I1WjPx#3OIijOfm7m0%pER zG>ZXcknkxi(Uh4iVCeubk=S6Ny*8T!K1n(VzKKLOsifV8-0#lN(}OzMgNbUKmx`6ZWsOEtz!LLge?DUn$nSBRjOJiI zGNODoXc{(S^9hwZp-#A5Dkc~RFbr1upT$2!`H00oeA*~f=HvWPe0E=r5gWlj$fFMW zOZm?*ZKw#}y604Om%=vIHP+>@(;vaIP3~V&_Gqw9>{l4N$Toj(*B3S}rh9S9UwsOqgiYnlg#tm?_8f86gBtkT_VnI?NCpAO~&( z5pc30OI|8a2u?Nx1Q{qKd-LR1fyj>Dn1_fsopzGaq?l*UU?)>CCsM z%43)PiJ3M240}qREQ#0B9hmVK@gLGYra{`FDXLbUGmzh~doJ@QmXpPi0lClxpjB#A zdPb(fc?fitG12X8&es?>^0tkL_wX@31+0f3;9sTtS2BNo6mQrUS7Y^aj2gM|e7dkg zF8X&3Qi~PrF~VgAvGj9x?8GmeOtY~vHC%NlRL#|L7td;08JtmDJEN(tu8C_I|7JXy zj5C+S^z&DCx9LBBEz-~s2{+Uu`cs~=f|ABxKYZs(ef`Hum6HA_@OPK?H|2g!JM-K0 z5*Y@o3nPD(^nVX%Ir;AK2d4h$_80yo0OpRMby$gZ;9bmf>^Ha(?iGL8-SYMFPvxH~=c<;f*Jym2o3&f> zHtIg-%MG6zZ!}$FPUbh{|ITv1?R)lLIDT1>UohsH;l9BAefKAxYR?UxzY0~te(x;r z{e_qKJieR#?+0Elx~J&0^ri`P0Z?f67ZQ0CgSSA+L$cQpM}AKUEoOlmOX-(Tm!;(_ zG{k?>Qc7~tn!+rM%*_(aAp!kOf@R2twGu2xLF|`c1$r5`ORy5f8D4_P(vv8`dBE!~ znwXO$cUFQi(#XOR%z$xRDZwl%m(@xzNJrTQ36>$P>}m;?Ba`fA309yrvWFyCiEOg8 z1gnrvZjs={_5K$7{*_{o5E`H?s?4;4DX(|kir`Be-VH3 zwn;FDLV34PSWEhrw@-qhKY7nmSVu4|?_CMzP;uTz6y`}iI+FxLJ-PseO=Jvp3nUoE zP`8xAX3`(sW(kJ==&q%3KE#`Kk4rFzBD!q57MlNk2`2fo<8LSV^-c+f{Q4M$on%h+ z7fLY9slJ!OF47DZwQF(-iiTIn}=3`uEpzbP&@1r?NA*Bhp-v)p17eU-Q zD8B`5rlDT&dm;B_;PyaHQo~jV_t97Z%?E!QaL|4z-SeduYtNHkm?%+8YaW7DvV9Ry z5?U#PuYii7zCN@DQu`sjA2{$9`rkkP^BR|(r@rasvZXrEVicXy`z7bCy^oH^DtNZg zvFm~Ojo=TVOCgT*?SDS*0{wqK9Hho5gAf^M0eZHD=IxbQ-UP8RT7y9AUN7}< z4ejwJ+OIyEyYzqDliA>Iqi;i6o&!0zz;^>}p_A4x(6_w;{H+utvc1lZ%34~-7TQY^ z9-!qm(s#+d&1zaU_oglIu5$tBvSo*+qzus6?txa;&>FKNw2ij42HbzIZZ{hydDlR% zx6;|^p?Ukk?V;%dkdl3a>{w>o>XT|%Bh}SQT|yDUm)@M@*g&CTC|3eL!GYBiZGBb0 zHhrn?|NbaV*4{&FS_g4MbcVBYy=G$mzWVJav1@w2>ZXhVd6VqBY@zMtFoV>eeb*j} z8|2OVDc*nen`TFP)wF+6?Uiu#ix^8rbqnO%N=uU7UPj-hccLDWa|7h~Pv>a2P#%w0 z3rp7b3iJ9m^>4XipjT+_9~$T%TD7IGe^aT@v|)p=sBhi+Et`c!y_QoHGAJ?VU@6DXjM<|##KX?3jJ%(+jpUFlduKSmTv0X(%T~}-m+>-FBIO? z6YC!m`XOaVSku3C(-x?DbLsginccr_)liQxr+3Si4ZTC1{ab~NtF92XZtjJup(|_q zH*FDCZ59T4hcGKQT)msNlnO$w@%~L4t`Lg*N`&5xt4XQJx;Eux7}+&G6Q1$ooxco(`8(R~_v^aUZm@rFSD4jG=!%Xtk$*+olcutEM&zonDpg zDvamE!1iz5GO%@v(9?Ta-MXMOL6fiJuf6$|SqF%l+yKA|x^*A}!Dtgub!!}I2! z%(0e|@cHs(Q)fwR`h2;hboOTU$Lve&3*hcKU*2hX{!f|sKV{|^`Ln6Bq09zoYwdrUcY3Z4$VEnPD_~+4*RD8k$*;;gb@b2wKGSk> z91u#?#`2UB7H99iha<|{|4*-7qjrcYUjU8A=3ILO8ch&_r=_2&jp^Q z1`eYbJaKqf3Z>v#0MANzy5Ttr&oOvT!J`CR$mZP%&%;uR40+fLiop|yheauHSHg2_ zBD8-Ko`>Pt1HCb&xo|n- zGw$SPobG2#qc+OhTk>cS70?(ui^{ZoQBm+0Rwx;l@h`QW=Ts)Xm&LcjxGaCZ7je0W z%SG|Mct=Yf4Wa@XLuZYPUfGOzI%T}T?0G>8VjC*rsAC*;jH8Zm)Un{dNGZ!v9Mz!| zYC|RToTKNQrkFn;GJie{eyl-Rj^d~erBLx5dxr6Q)y-Ep(|AK|_Iga4Y2YypJf?xi z*e@94c#VtKI9}r%JeXnX{=yBhzVnn#N}aJX4HBQ z!KpIpaH(T%)&*Y^j2iZ8*sGDf`RvVSZ$87Uqnyu?HN>UF`FyFLFE@WN?#-Ml^EmEV z3&P3+_4OwWOReSkTaaQ6H@DR1(o>BeFwWrJMKwl+b`B{zE4(H3a#)4;XiHe(>qmOJ zaj)7VtnaBSOhnU|MZAwVGmNHJnK4K8wCdz8Xw0K1S3An3igJCUT$(8NIm+dUf{ijG zqRfaW^C-$ZWW8f>AYIh19osf0wrx9^iOreVcE`3gF($S(v2EMt#QE~P=X|PDtL|O3 z_T4|bt9oNyE5ebbV7vf0z7}9JEtH(Mu=|+xM?dwsNbnSDR3BjQ$$e6;#iMRhErg1a z3&H!In#8N-NSi;N@KeSuT*tAna5;*cYy*|c@v9q&s!ZRHm>(F`Q5pkQyOFyL0|&_m z>K` zECzkQ2+&X2l3oDPg@gxtNJJ~I8F#bDgUIzoIBT#Y^{`L@p-2hJ)~}JKQi_4{Oywn{ z(xXPR1(ZUu)1hPBdwS0pNN4E_Dd=gD`-X;d38g%rKT6t~&4+up9Sf3S7W;av2Uu#Rc z53RTQ|B{HWS^EEy|7QQ!BUJrD{s7n~#0Tt+(ss_@uSE0>{fX-OD?#~h_P->FPc=z; z3nC8WD^UCxK=Az#|3VqUe+j$>bQ$bRAb>SU6Nohk=aYeUqp5@eF*+fbUnTP zuh_lX`=5yHj{Tqbe;*)L=1Z5hD{xEG4V`zL5A>WtI=PbMX~48eOo=u}UyW*#9`l?J zZ<~g)I1#p*)^1R=eOJ72;O^{o*lDrX70lUIzcHNspgI-BFDwGDl(`efRBnzVkVY!3 z_-`bKP9Xad_=x{L%$I~6Nq9uR^kv2TXPfQ+1ssABgA)Dn{@6$f{K3A6>#|J})0yG4 zSPA3In=p@TsF3>o2i_(w1*rk5QsV6A=EeLab_il$h*4in@Ry91nXUg54kv=nm+-$V ztpD5I>3gbY_QnxJAP!;r5^`VY4*Zw;u8p30zw~8wF?$35;}bK_-@Rm>^1Q!RB%D>G zSXE>!Y2pV~#Dgx%B3qdX&=mw@&JN337!J(WGGf&WV$~{IYBIrVVyaajMXI5hHL8~V zcE9{vuhE`eWjeov^KKR85Lb)Dd`L9dm5tiOJS!=={&)BcXUll7HSA`Q`4Td!D&mKB z6lWDLpzK5!>$_so74?``GL3c*0_V$eLz<1NCl&Yyk|UQ_H4rP87DFmoI#VDs)s(F` zwRrYlS#rb?sJ6Ti%>gQnLGrBy4M6=XGAVq%)224jrZ%T(V7*DxO{b!q;n7@&eg^Bc z@q@TBC#t*X@L|YzhS;lAsHs#a8bnKzA3zWrc9K4dn8h- zmwGEl!zA4*F$zVqr>uU8s4q{4KU3|#C_CxZTTjp{#BYVa!!YGJ{TBUEYp8!qM(HQ zT>1phRybLXXQ;w$HkHPT6uvz5TXrMhAkMRpdCpv|lJKiEin&S8Y6FYut-iohJg3f6 zEU$&P0Nb>|veJsR(Z@*}-ic2ep0J$DIp$AtaGye@LsRd%>k6UODJ^}{X;{^dYUDGT z)9@PKG*3BAs_yb@X`3_YeN!(ZEgP%63LBH7xT@~e0ez8oh*XZ>WG@rBCj$|{w#k4L zhaQ)KchR@7|Hg8;Odn<*Djt)C`-51{jiTY;1Dh+jtUDJD!)AfRh>R=o@x!oIc4Kv^ zfX787yt^y$+lhF7F5^0f$&TKc#hA(736CsIO^bsnmwqmnn6g6cm38(qb;!JOC+Evt zSx#txnu^CQF7b^vb|9TR7HCXIxNCqE$!^*PZp-G&NUAAe5Ihf4q;d6qbFk>EPp>(QPb2Md~qaUd?Wqg%XTyPsMZM9OoXtwE0x4UTbnUiXC z-5}O>V19yl(sglS8pZT=wO`8W-LbiO`qL!(uMauYAZ@M5M+2q#5r{eVb+J=1l5kP+ z{`0=g^$HIic=>qx1>rZm%b3gyEZwB67FgKS?QATyT3$(CcY?k=&}qrrpKMRNKp0N| z9b0iqy%Z2>Mz48W51xtkOxsVY$TnBNhWOJG+51;N(V(`$a!q%&x-al8 zqkM#6v=OIuG^^<4Wj~cx@wSZCeF43rYt~}!pOpcy%>*67iO-mb$xs8oc^T!ABZwP7 zYV0C97v(G8cHi|5J` z#Ydp0+i!0zU3J*fJqX|TXQ%TM4IVt!@C7;0bPtpYy-55XVipH7FKhpu?lYNCH~i>Z zW_ni0es9c-WIZ4vZXPf|-r=uYl6V%l*hqQ$u9RuS`>Z7K%z-2rvy-3gYaM&??w)gG z@NwFgUzV?Hv#>o?I(cOKF{|f8qcs&uY7;xQ$5ZqM|KvWdkL$6ddQ#G}by)SU79QK6 zqP$G)?7fS@8|P!K+-dY={qx)yZh@wuEXo2M->AGNvh`PFuDhq1{T&~^xZ4YIZfi$3<3rK7u6w=^ zAY-|AQ_lH7GF!Sg*y+gl;CL}PHYh001L{Hhwp1mJ9X}~TKA;{HE@e5=jU9#qSlGFl|9|}74i9hDg%xh!$<|lSS3xaP zRxMl-(sT&0cwGoE98!8CSk44tFbIG8b6ar<;qRc>!UF;7A~TC|H4t%ll`b|0rSQAz z9t>EG#j{wb$>ZKRPG)GiP46AuS6AIvM-%&-cUcG7UXxDQ?^)?Z3}e7)e1tY?;5|>I zW#*+`hmU~hu^WuhTGoLa`0)+tJE&lA9J7<{T!(}e@`nwTs4}eR`s*E5RfbOMTXzI1 zD<2A;%hub=YFh!ao{gmWsLHg|j5oC=cBh^nKY#4(5tDWs>o)KKA4ID)oTI(WUGg}i z@$m$=uO!y>>&L}tu{Cgu+mOQxe(OKb7`)6Sl zIiI<>r4Rt-**U1fP7F5$`CSEc-y)lteh5CFoUY82Ri}cpz3;@)t3wb_c9gXwNyCzz z8Xg~=Ji)#cGBmW^%zX=xHkvWK{~RZFgP_1&B1-Bv%_k2sE&;r%&Be~yD+_3z;o_1B zy3v4(W379^$wAP0e?ZvQ8Pw~BgdM5&m@hZw=sU6}3eR_n)d(AE!q#b3cBJ}g%Bai1 z*#4BEE^&>#*Xg}lv8Tsn{Xbhl`Xbnd5Wr6syeLZH*U~>kJ|o^SWyZ*4sFh-Hcp;P~ z*kuw_+jk66JAm&!$O}gok1Ocrsc^FxKw%Dnhw8=RiuxetR-f6LI1AbUNjTtbtylqC zl*``WA7nyhoRcrF8tm(z9n2E!fX#;mIfHnt*g)u&t^wkSBH*8|NwF|4eF^D4$IXt& zAW1h3)qvgUZ{z;WErAceoyHaFW;mwKNFMQ6PB&~Q5unoI;N*WKZ9^iItnTqXDT(Zi z+33^5W{4KR^Md7>A*J6tx{1^kbhDeXsU0%z28$RM4+J4Y-xjE!Av~72=Y7F{;nO12 zi5|?Sxjx+5{YmgQ-R}myU(S}Ine{5ypLxv^=Yq8Xy|E{PKtyVWlF~$o4Uk$NA zpxGY76L2L?;j+(gh-xZy#~8U%0=h+-1j?-)ku47Gp992h_7dFZgi`H7wxHVe#qO#U zMtduCnMgb$JxVo&jzwiheBflFykdF8A?rojikE{ncMB7m3%xMi6TR@gK=Z~jxWi<} z68G6WVSHprlSiw@QPw5%%lMAS8#XaB)dim~0OyG3S1ZV^jq8$m>S6lpgq=b!W5>kC zp~e8nDvQWx`X2;lPyFu#iC=xTknTS~Um$!WPoQ6jL(F#1b{OQYJ>Nh+C_WfIz(3$j z!=se&a3v*sbns>1w@+Lhg*-quKd`)G5|Kx!_L=r|LQH1Uz7?l?L|K^drtgjCXu)TW z07yTfYcbE|Iicthr=oX??Ufv+?3o~_0RY_S)^y3bCQ?uMu%CS#i<`21WY zatrZ6(S@X9!8fi#Io!dSUksRcRgMWN0+68{u%g;=Qg%WSgQtO`8lD@m2FQ~(7G_tFo(&891cba};+95W9TS}UhBxHHVA%rG9LD7jc}-cy zjcAYt{tJwUW=zHEhv!cdeMEz9$8!@C0a#7r zaZQOrT++aFZ;(|-#f|jj8;AxE$@Lc%bM{@D5VH*;V)I4cbQ&_g2=B&^7?wlCi7MxI z!)nI@x`CbNM5ZkNpkVXOgz;=BrxFXEEE{r?;w*kb2VNgN(cJS)zslZ&bb&I7Ol{lp zV{8RL?=2kb?HU(vbNnHHjqh1rSYMpfP3)ka=fj(N zBLpJ_2b2nknXzB-3h}{b|6mo4ZwOzxeWQIS^Pf@&7xEMdpx@sTeJzzlg}Uoo!JpB( z7kEkF1H*9Pke+3mfqFbT&oK@(0r%_k8=F@7>vlJTvz<2OFB>D0edr671uzEEk3d&t zhneQ{I>SqMGSoIL$1D@ps?|!~Q}VxpU&aD|+x^IRcf!%`@w_?nkgp}T`&d5Rv`Mr> z+om;^1KI2auf@2Uv)0Bh4j!Gl4}GVQ!K|xAVnHOnt`^ewAsprkrI8h5P)01>8CD_n#KR)9L;7ZK2OEKzs$EIvlX}`=_R>XJq7S@J-pF zHDo2$p6MhCP&Amk&7U~OKC=Ad~=re zTzLpxGZ&0GEy}*h0r`KO=*5^%g?Lrf(apyyEKJzMOoothpT9F;%`x zXIX#%ALNS?*%nLkBT%IAS+qd1*+Z=07-lssYNpY}2AygGM_`l~K^^gUD@1A%cEVOH zulx(ETmXw_(NP>tyh4dn4a+{gk{j*s^WM(6zF{F!Z`Et5_owR7jBPb-mG%Y63TKnA zY{F;HVycMV8L-9YG1)k1^fm1>R}%9x<+9eqHb2W?-@9EU>C{jYA-<*`p)Ozf4prTS zAEzlu0b)nyraocb=hjOH?o8>de)GH#Dmj;s0qM_4|R}g3rqt!19(#Bf{8q!e^w8KeGGns z;!e=03brEGr^QgSBf;b|FjIk$rK1M$Am%l{kec^pkxnCglri%!s6*4uPE$sI-Mht= z9Xq+R(G8)%SiWWegM)Dae16H;TeCqjZipFQh&$uzw~59ijH9V8fnp3$Vg&0W+Uy3)7I*LDRoNb|@}-_~7Ce7~8^H znMJ17Z~7F_fuE1*iXt87d6UapFG=ybp7boEO?f+XcYRgE1}wZT;NW||*kn8o#u4%N z=}t$5L2Q=4W5Ffa{8{YOmAQ4=@ zEHJ(BD(e1T=)Xf3xRm&1I* z4<8DA&)Dyz?T^#36oz5@pCPyp4lkTHX3)mtJYAaDi9JeL1?BPvEj0J>c!X&TFf@wh zwV|p*=B04xV^$_V8stMB5q7Iz^5{KKb`+ULUHY|0T1q&QKlB7G1_kqxOKEX|DgbW~ zw0Y*CK(X)d@wBX=ZVMii8jdqm<38`}~%Pq$kxvmDVDh$}{_3 z-C5DX=(upXG+c(*LVtLERbLA6D5vYEDwg%BEnEjJsE?=7-%waoNiIxqm;d=gvUT9d zij>NimY$qGaF^FG-YflMW*hic!@(+M!GGxC@5ZYO`TSi~HSEk}r+Le>t3K<-OuSo} z9*pfV{FEw2!E3*3OP{Z{wgb(;;9l)z8@Hf}P|xtkuo*b9Z|-T8*vw@6RR^a<53(thcW>SJArd6G+B)Cypv2 z9x;u>Tc?B8s@Cif@+zPWPAwGPZvn)`(27)8GiC159y}ysms%&Zv$?q&Bl?k`%QnY0 zGD=6yXDGwt!K#%^z>GL7JKUF80RR2Et&Fg6D-lzHFNf!8xgbgCDs-)$*$qm8CyG0F zilAJ#%n6-mcC^vI#3k!BWKX#j&z7SZ9*#SWHVh^WRWd1~$Pn;^@K~8eGZEYgGN+Da za*1Twe63C8yA{J7_k!5wfp3}gPq=16B7@&6qAINb_ZJ}J(B^nDMLj=Z5 z1Jy1JF*8G}Y}>x&l1#cl(aA6Gk13=l&!*L}1uL*XOX#sliQ72_WcKd0(-5nHqxbB( z2BOUo5(%vRIGs@$w+F|1{H_m;1*?(#C@fIaS%qY7R1gUGOEy82&oy*5)6~!?^bLZ; z&{_{TPhZ$(G`L9L+LQ5p)5Mc(c()k!Ul=@7;58f(H?YjF<~s4C|LL5e12(>ahLmb( z1&aB5Lf9q^ybIyyFD&ivB7(*NjIvgb^0^%TZi&P-CC6h&`9NzuDBtGEAZM49nQe8a zrzuvw5*~YoF}WL+4+L@WSoYa`_3TsMP{bljJ2!#hyr{cA!IX4-CayC8&CwxZSFUL z$c*|O$%Pxy&xkV`-OoDrTvot zcCi#V*#S6*{Nb>b6x}m=x>{Fb^(Fa7`Q5Z&*VZ=OehCj@WirNUuLGl5zg>2?Z()`< zkqf!Poh9+mY0Yh|h0s;XEtp4{J4~d_7m$FeDE59kWCU1A{a;+LMj$ghO?TC@ zSFBgGTdc|>x+pcRHmjtu1BiljNm!!6t_q=yH!E^(dBn|+T zj`{WneIu%$R7Ey7_!wTHd-3HXf}sS7old{1;8+yh_;LlG04hq~if4w6-*{R#i-On| zNdcXKKANJV=>=MimNe!q1k`w5JKtNgq73x_-BZgE0rlXVQHF9Z9t@0hQ5#-bFd`(1 z^r7M33rD9U1^4pcSp=O3mFk#}k2BzSXy)NblAvc*#pQV>)?113b0D+&Lc1&VshaPV zVl&8Wci^e#_fm6mW5qM=i`ad6b+hug4JdpW9QQ!5>nTysWz!VKQKU6hB$;tPt1Q8< zkJ;XvB$9;60GT~Ci5`+%hhq2>|NCJln4w(soX`jk4Q>iVz!(3nd%lKsZ z1&Fp%y*X8}>mIUpRc|bM=xRRFg-jjcDxEfl`6uv967NlFW(c3~q998KaOjDJo?H%N z`Aj!3BZ%L^bTs`V>Jn3hO0-1H>;wXVtSMM*jx~#5gy<$uh>dn&9vuC{A({&+%|K=e}i-PFOekLPmu>_j)K)vAvjn_}FH2G$mvikYjxtpxO zQild!PQDnvNnY;#8g8%{e(1C77xl~2#^}*CC?y&@d?>|!qx~?KA9KK+@%n8;7Mpv? zT1`aWiA7w?VgSUIs)->6G-h_-#{48`V97KdEj{&kO#*&}D~mjf z#T)UAh?4{psWeOGn1^-S3l^fNvFW*zW1|vLdl5Ma4x$!9n-zou6nf zMJCBk9+P#xXTPmp1kSx{wmur(Nh>k!9Jek!{%p;?ufE(}=E?!cA>SAUXgCs1dvgMY zX;A{v**Jg2A#5ZPj9mZNQ*#TfWT_RJJd1UD-TR>F;fHU+*v{=4F)d}E`~r%v&&K&R zcJ3tqcIIFV7-gkjfRG5uv_P8I;EKS{_au#FiPhs~tEAS%s_0j{^S;3Sh zS$B~kTjx`+Ii3RiqC@vt)-c5uKJ4jUIApx+EX#Zk{h@t65p(Wq7%?>0Fu7bBljNKs zv=E;`H09+Zss9h$J}@M5c67GM3c0W|>(LgESYCxA`x(psMa0JD}}-tj*+m<6|=?V zc&SpX#J1DkzF$EAwK+Q;oa=b$T#+NncTr%WB#@o?^;+CuTna7GuK2L?Mv6k$g)P~I z;l`Q(_hz)LMbbQ^`_!@zK_<4dN-m;uJ`0iSZ{HGhqwzu>mP(Bt0~CT!qY@3LJR-tW z;AEp24gn|thj|W=@J=&qqxTSc8+(T6g|G)X_|YlJ>3SWA^sg&4VvE`b zT{r~r*V8kUUXgO(5JAkUZXZVOm-|*MBpTfMBc z!Fwq}Vctw$DD^XuLi&BCA5Wy?zO>S{%5lbk{{7ZVA?_iqPO?>3YtQ0#+d%zjd$hHR zL2bvb$ChL79mQwSQ_;KJ5#**|zhJ*d^aY+qdWo#f_u#yyo~j-qQ^@Atju;)QuCdo7 zo7l6Oi(ENYT=fni(K&EVseaYm88kcDe(8zDFjt8BT;kMI&hh|f^9X12P&m#&Gj9mM zq+e9+FN2{rTt2l%fgcvv&KFC79nHy==gw{#j zgFmBbDQt)cZ}{Wb71-xZM%w;Xnywyw}v zaBoL4L$Kk&@CaJgb$C@0q4|R6da+oA-aJ0|6ui}BY~(&SqcGDAxZcEM zc>Jr%F#x2r7E#P(r#Yyd-^r$kmhXwwYpzm}^$G6Y;vp$QuQ=lQvVHGsbA(#Yeh90B zN<(7qE3+~#m=RtR+Q*vDkW98aJ3fXsw0_q}q1iIX&e-SvKX+V-oEHD9qVPQ06hm^bMlxoZ%G2jx({ z0B$@Hivz_0F)D?1tr(kwKUrpR(rL)dqBg3tu0KA5zh#f=VKJCOUz|5`FvS-3yD%p| zy6st$r3B1;T@VKXMbI>-RXiU#k>n`(gEPk%_R@6M5azs95~GtT>NCm`6fET_iYy`N zzgGEqM=)Sd&SiumcjbZopPUDpR!>8a7#lK3!1wQm@4T9>pv zaj5b(Yt(Z1?7LR^1TQ(kta^nb?@s(gUh-}^xirUu4H2U2|zH(H&YRUO;p(4Jb5Lc4t~Hdc|fT zWh`Ya6iCI=!+7U$Z}j`3l&c+LZUxC@kjMy1o)E?iP~~$s;?5^oEYi~y$E+p06xcbj zF*-+l>L>w53v+SCs_3lQMo|d~Tg+ zNCY^9ahtx$J3_BMcHH*T{nsM%eev(K%bH$~>O}tNZ*DyeI`#^yO!j<><%RHYTgAqs z)$rdD)UUQe(B=FWevtH>#%WB?-^VW}XIJML4Z#*5L0jtZL$c0 zdcJT#>{%dAI@ft96cpEwxU`=CS|v59o9m>u|H(zCZK6n;sp>_uX5W&M(||I~}=LVO0SR;h)cZ22t7X9b74qog|sFE&vrS zn7Sh6hDt72h=jiD=532T?pC1eP@gtsK>fUQLDPVGP|K13S{8K}<8d=~=1_VGJbV)5 zslG+5g~oC2Ng?^&H>P%pRNbGnY{}^&C9=5$gr=cI!>T`tO!Q5)e|bo$tIN`LjwLS1 zopo9zdW;;zsn%OWSfpD-pMcIW$pcw5xur-7DidWYPVKDcSkP4t=Z+|$;E(~hB;*{4 zBjMsIRKEICq8X4_&w9WjV^{RmZfqcg!4gKV|97HgUXi1NCdbuWo>c2!V(c@&&Wbj( z(M*=Wl-o=P&Y(id6`D2m2X7YSu6a00PX;0Wz@?7aAhUwYQ2%ViBPRmw7633-W$`|5 z_0Qy(7T4=?$zJZz8IqT#7@m(iAt^9T=KkgE#He;Sye3{zA!@zK-?Qny$g9zi z3@$9`mN;SzAqT{C8%nbaY3G?;uNw^+A+v?_-L;?-)M~LAo(|jPNi&npBtK;NL6+%~ zQ;3=$TM$AqoB{6tK&Jm!^EK<{< zd2y+_85@C5WY!tpXPYZ)l=SZJ14B7Fg10ZV!R;+%Rohfkm1ov9yk47T1`&%0Spvqp z-U=~8#qLbwQWQjbKhoq`RE#vCRHZ7^QWHWX_y0~Cp@z2&g{uPJEC7->IGO{AtKs#P#YB-IxbI(oEm z>t&F_6Y(rzkczE@u>Nw^GCuh?qUx!{g0nKIiw(H$00woL{+s?$VKEKnF`UZ2=9TQ3Dj+SOFvx=LN5Mw z6+iBTh3REnv?$JQXg4A zJi~=S1Aa@t-U%RSow-=2pF6Bl=lTbIAlIFD1K*3xz0!=3qZFfO8j~-ziQVUox+f@$ z5Qt-#r4Rg9S-GbOXDUOi!&3bN?b4LqInf!I+spuFd*s{M8?u8ACgVbeKWgn7>p0fT zD|$?AGn4~K8aBB|IfEZq3O{`9cUM^55yl0dw^LuC14q#Ztue_2WxOdRD$42MAkCma=Yr zOV8!7;T4)Jx;NVYZR=)+pZ0_r7I*un)4E4qqI+1^kFXA*gg{Ov{oF=YM5E9;?+?AN z`O634Zw6>`{vAPz0e3XS(KjWRRL$iWsv}{I%MS|}c1>t=wXJ{&w?+2`Wk80Y{=t}v zd3umAD;Kzy?QYMvY z#m|^7IG*5&*=w(Kgit9jI9`;DOrgPwYh|z9P|`l4jp$|>t~eM^&G)1$_rZcLZ;JNTGnHf-Ke!iw^K#8VDm(O zFV&svs=3wX!`iBeYAyBmw-~i56S|`GQLwK@zLHbQTOxBJW96%KDgPME=qV|~k#T&T z%c{9CJ)vFv^kl%@My0Rq~xbK@c(>8c{i#!6# zV`Ioat~`0oHXpua|C>B&v0ZHWVybssr`!S1_|HQQ@nrM9p!CJyLhdtAK4Bzq35K91 zVt8aR@j)lE>|^RQb!3^+Lq>tWGl>mEFd@*ab82#I}`XK0i+@ zk4hh*p%VxpU8|$m?@RS7pc;&29?FbdB0K|M(nsB_(#-U%p)xC@7pmqS%|n3(4R%;` z)Y1-0`?`EsX*G^Y^iSD;18R_Jx_AYs>XHFfE*3+iP8eo^lcesSBK>vOAnwp?k4~9C z=~cv5Oi^9om|&u|*-{f0f>5eYV7jnkIdt3SCfEyqWtE5&6{R>)2rPuOLO`LjqLqRE zA!p8<=)8Oed7yRac=38bXLbN~V|dcKjXdw6ur*JJNKwFA8;@ul@0OsEC8s2F`m~PH z4Rkv`+K-{hApv|f!-MMZ_w;wZYbC&2xBIlFk?q;=k?viqhmm{3wRsM`>gcpS^_H%& zXodI>m8fMh{{lNlB`v$bZ>vmf>*4GrK;m|FzfxoYi&gZl6gA`YK_4*qsk~Y^9cjT7 zvV7QZIBjFm9Q?s|(Jkh!d0A3aQWP4|DE&v5aY?c$8i8T@RII!Kf9`UYv+yG2pSe=e ziU^FAHy-irsQyGUWnu77#J4yLq7D48uRe(dW+kESF>#*z(57nsTJOt3e|vIkB?*8m zCX{fg8>?$m`}{R~>?gnn_~l|y8$59C=bLbpnTFr)($2Tbh+W6(1Fll$n4)X9e z7-&<6EXd|YMcWTb=6(jE?b0?(p^mZ&4iY(5UrR&0AX+6|X6pxncl|!&v}rwE9p33) ztk8L%m|OPW5WO#aPtmc(PhA6GY`v^jHdyXO@5_(BIv~!bJd{&P3_ja{hbrhiloxM} zzrW&Z-(~eS>;lq~m+KNkoSQE1yx8Lv7rl`^mq{@I+Uv zvABdsQ|jkM%$d1#X~j&2acnD?6}A1pe$lz@!}l>yd4Yy(y&-=S@@f?!Vd9!Ahbw=` z*X$R}mk5E0-%xaq4KD&OMDu%)J016(-ui?nL$|)Dne3Z2RspIbt|y8h7{3oOi2A$# z8ta4gh+e$w%gtRoy}cSJYcfvb;&1f?Ca>VOt52E5;rW%|U`%gair+!c7xV?Ad~R~%rue#sj!sT)JiPeP zC6{7foLq7a%w@czKxf>o9dvVX3fRddop5HBw|ym+B8)PyR~wDf4uS)FMNsv}A?unssp)@4cYJi6YvE_~{h4Uyu^!L}icWcur%~_dh zVj=RWdwIy!me|Ycz(t2VR{`t6(v~!+X$FnG@=Bn8%S2{dSC=>4=(pVgGo@?jf~gq+ z1b%$lPbdVAm7OF#7#hc7YFttr*dcQI_jVKn$DeIkKBPEQf@l4c0CB)cB)GD?EBNL5 zAYjB>OHO3kxA;Wa{t!{=_BQ@v(#S`fP+$g@SVgO&ivl^-aCG?{gxR8pPM_sf|l9U z*u*Hph$0|__AD+b_ZO~J*-YxURx)~KszaIs zW#m$Bk%l$}5!P}LOl3z1P1@pDt~M$fzI^ji!`V~3a?oGe`^v4o%r>{q!4v~hP#Yeki6j8a^JWROdzc>5hywZyyDL>%2tjW7*Y%h-()kKSSwhmdA$$B#ap>^f%iQTvR#)?=^O zdDsRpi)4*$^=?iG_Firi9TH;^VF3rKi-Vyn%uBIXRQKp#U1OWF5?|k-u94i;cQmt! z9*gurbEVb)vS}8+w&>P!V|EmJ+QYFr(Dlyu-sc_Yq#;e<~*!!Ee__M~( zTHT6jrKnv#qwnXebsd?Zbt)UW$W#KI7!VpYoMWKEHzKbmm+bWG+Z;(=$C^=GZXaeI zw16}8-f{obF;Y3lLV^`(YYLz&7aUwWU5xd@*uG+IJdvW(JF;h65xDqR6hK8ZZ?g*b z_U6#$)`l(+inFiaal}j%_+owTRC2;d3Q7HqVbB%^Bj|NEY+?Ss*mU9740Ye>;DiPg zYW-g{M7SGpi|vTwB7;zY)7u+1TV1vGvcr2*$Ks>v_v#!UjC#b(d^=zeML(Ip++ps} z<;)f)fw*7`$iWwQ?eX_ActNp_h@J^P=QO$cLhx506BrX)Q8mG+RA8==ef${bw#o8I z`t<4+pZYotTAPC3dX(b5o$ zn0ewAIP=udhhWbSu&a5HK1&1%jzTkGu%_{=sv zIh}_3+m49~1ZM7LkVlIjy+;Tx-4ADC1Y+lK+G%*hefs1lXz5O z5^WCoWNgOLo;u31{W3}|*lcY>_<6PIidjW+{lor8icXxmQTK)U(!G~X9a-FN7(`op z!F2z2oUgG9sB?E{y=nG-6b{sdQk2nuVYIrdR|qiW17c?}ixCMs(| zeKYXf7@bx>2Zv9}sT4D|JKO9ZAM{beDR2Kp?%O|{m(NxZTgjFE(e1!IuelKR&~jfk zN&-(SZ5l1|(_I*8pNBz5CCipJ$G~NXd5nT91*PON10qxt=Q8Tqj$nObYjgzu5`SNF zj5*30Wy#B0&kFy3BRW~a;SfJv`zl_Eq#!zLF} z#HPb)qwZsB6phIh5IQR}>RdmSlb!|fD_W+75|&D2s{~D>-8!V<5LeSY2P8K62vL^s}_k&56mVj=X6` zm_Mjzhj&Ytkg>J!9B~fTJ&3m7JqWKk=!8X{pb1~Tk{NFV5Te^DLGDz0tob(+IqA(p3aYI3E?+(mPCxdJpWCo z#c!5`{W?`O{jB3ae$b8j+y&tp2vbI!Bd)LW^+4lOG0oX=g`bjEq9)#PgZxnZ#pmni zk+w$3PcM+mADm-IPV5S|!maYBcP@x89dR8>CSuzN>}C{{Q-f$gpU!})+UP2!xrXmR z4>)f>C;nx_%qQNJ<0I~y?4u_*3C9}mE@3FHZ-g5!mL^S*ARYpXG9p6KM<)y7fP_Oh z<$yq%Pfind);~qO>(b8Fn<@w57A6?Y6ObcCzUTrXE7L04jF|+HSh_SNlLo;Kf^`XX z?M)!s>Qh@oSCD-uxbzR?Nmgr~mUjVF3E1K$*CKO7UH`tDl(YlN!4;@Y5VVIE{}DLH zhcVTkZkQ$?i{!sfHd8P|Rv1bUdAR-0E95@yI`&7*E&K)(x79Lg=0mx73}!#VX3FRe z|0Pe1eO7;sbGdK|D+W27H;>q0Kx_ae*>QNxsSCEV`3OPXNzL z8`gh%AzK$=d~5ZREx{+`RRc0Qs!wq6GM+81h3Kaoldp{814J6w<#6!v%vJuxR?o2- zj!(3amhBRkDSUP9&vttpAZiPJ(lU$sNfS9|0$Eb5zqSQ#D=HP%krD}B!u`+pkZRN> zI_xL-fTSK%xc7Y+K2@R-#W$82NYeoHwNKO6&LV&D(GwGsRG2= z%@Hk;4iUooqZp!9+E$W@j98gw4Dw&-bFS&uR8h;cBfx!FpvdHa80#V70qM;!5pZppz>{ zHmdV zVUva%C_#Ws=Ss;0iqF-2E8p~=h2sN-<)ZwQlXZjlX^Uiod#RlVM^WqGJ1)(T{ly@R zg)#YVqGEL0RzxhF(Mv(#9xUc#lnnENvirVnakf!iE;-|eP+k7!6UaZ>hjoCqY3i9v z$JWT|MwI%bbnfmI3~AkBh}1`K><+pc9=$R;U-QopBMBr2-VEAc-{5A(S|k=J(ME~F z2DeMi#G3OEkW03bMqv_}!jMEzaN|+@<24PjhijanBZ~OGTMK@sI4n9ATrMPs%SQLI z(^SH(6gkt7=kC*pqZWym41V}oj3$L8*@e|HdP>3urF&~#FMcmt=)BPx#!ckZmBH9L z3l=hrm9rfKX!KZrN%RYQPgR}8iM!n#!|nxb6InD^3jD!{sFclPsV(;gC)>qnafpf> zF>?-KFuBCwifr$9y&HhnF_ZVhtL0pGqei_MWNMe{JrjrN(fF?h-NE!R+j{_zfFk-h+Lx#GTc*X^)f4y$dj~Pv#~0G z@a$s`CeHNs^|JM5?t|Y#@{oBeCDA7^=#o`nEW%HrWoHwea&Y$=&9`$vKXPoO7f?yp zy6_>z;Vu*Tbej=BnSrOdeQg|OcXLPhiaE=k|6gRiV{jl{)TkTVwr$(CF|qArVsvcV zwkMd_wv&nNNhX|R!kh0s_uO-;ZauYrbnot6)m`h)?%nHIbG7*G+aZgpM5{{3 z)3d)I{YgO@bd6epzPTRe#wms=LOTWps*4J&A`@HOPA!A!S=3XVQ+{ppx~YwFhbMs| z!7J~LHhv4`)$0%CQ^LQ5axM*x4Xq9CwNs{Tpx92}y7GAKgoTX~`v{gKly8ecnBWur z5B^EDB_e>*AD(XlB^e+moo?+SNe;g-nvOk#@QhqhOwB#N^Q!;fTgZ$yl1!(1#6 zmR;Yv1D6Ky#-PY0Gl;+XjECI*l5`USPLZv!mbcpZHts*{JcT;nZfc{WIGd>ys&DHm zvv-DsFe?t>Ua}Q{{Zr*6!p>*YK(ncew zJ?keqwyZ_cH||L?2|-)j9nRwf@S&mLXn@8NEKjilT!h}xW4DD(mX~k|!(O?G&eAfB zk;=3e)?kZuTfrKT{I5=`wP-&PZ^@>{wM3{D z%XQl)R*%V5lOFkB8@V*DDZX_>v(ug}xHa)>WrhO2_J1A(+O}06`YN_Q`b943#vmAY zl*%zh%Xbv|r2ceyiZrbTE@d9;xRii?gH3)4fXQWlZ!!Fso$^Yi-bYpCN2|{#0;~dKTrB@1LO$OdY}Ai!^W^(9)_? zU3Yq+Ybp6f*DVMxSS*Yz5JqH{KI%DjzV7hr1xYW7NaTXR&jpYDY3rFCOf_ZoPlWsq z;D_e~N@n>*FprxzvPlt@%=WX(fIE`ZI2=^`c6r4An>sn!@!M=rwFx6iW;CsnLY6GS zZDlO>rh45}^p47d+L$Jh7v(n&!4C5TB$nGCW=U1PXdkKR&rI+Wfo4ZThm#qho3bwZ zF^6HQNXSafZG{9OwIpPJnChGp=XSzF0Js-K=M3&%P2+wHm<#o>S=q-@sX}Ma7@ALZ zquk!dBG13SvZ*$(iO%tb#TbhZDSwb?#GUX?oD7!HjtD?xC!!I5h{51-v`P7;W1tm{ z83UJLIow>MB1#&*g5Ew@h#umN_Pu=H*Xk508>c5mhrpoGMhETs8K!S1b;|e-IIdav zNPrn#|FkjA$_gyEsr(4&@hj^#+zEMtdw5$VJ?E6owXAd1{8wHUtl=^9G$W50Bg<+; zfoXF%&J)n0QGS)QL(y>0EYEC5oS5+JS?0-EGlG7DLY|xl`f$F^Xj^rn&(5mO#{EZ1 z|84>ftGSnBOm+nSjT$}{PCY~jICQHY{pXmmLN=_dh{WU?axU3NYL#f4w33`9d$+6C zVRIk-q$B|Z`VL5FyOtJ{BN3$&)-`5=8P zO(^B9!LR%xSsuD3mfS-4HtHwqw&0MA!5q>BvY>a775w7~L}+N-LkmXy`KXk-2(8LD zl$~g#!EETNZBSY_osDZoh}Y9trhm!gP1ugMPDl#`(p8;s^FvU3R5HoaH9|+Jt}5Xa zezXOueJQ;eed-?8d{2Zi9!N3gF{fSTZ>hqLrC_=R09N221P z>v7-|fg+zDP%7O=^$E>O;M6pCN>`?px1O?#pSifBs^{#Zv!f z_OavoTO}g6j>s8yS(0$LrQ8^8$MWH{#oS5$BKL53Mr|CeljXz|EdDHx%l~&w2?aAj zntFeG^xTblqcXu0fXx!?H=rQE=+NS}{D#C!m@U~V^ZDjLv^p`@WIWZAjLXj!1!?cJ zOZD=K{HqT0+nJ}J0n-zzD>z&-f?y1gGl`V8>o)$`v6duHd+gWDNRO~T6al9IA81_ngPHZ`!=bUb z7mev>=u5NwJdey;lIeHhesYqsIedwf8#V>n}S#Au)x$dm-L0uN?%qqjRecP}UYl#*ozk{dSe6D5ek1S_dY0X2he(eo z1S@2Ekxqm>F0N|CqCBD;79}d8oz{k-yuils9Q9J-a*e%BjZCL9hME!KrZ#@j%lt!S zjPw={Fr%>~2(-5mgU*cRLofszxtf8c&qH-{gW8!hM?EZvlfI5Y#G;O^qqB%IoXYki zT+C5Y8e>gt{eqY#P0Ps*^bTxL?gzsgW|ZkCo1Z6#{U%n@5f4$jU$q5!hTB|dVw^Wd zZH)CV^b#S{R30n+>)wvg6{u-(US@&JKpk@coru*q=s@w=0t`wY78>DOsH>)zAZYVA zdAC(R+DPAgULfe_!2<-sdt@st&J8mch4GoXA1f&M$H-0q$fv23a3ByR-yaCr7=l5) zh5W&a0R42G547O(e4K$maMKoMF?NPbRD72Pvs8`7`lDWEwj>6NGg=ac_)CITkzNt# zXOLT@L&*G)iBRk!1zieoWHsg=Df%k|21Q_-fZG@nFMTP~&qBl~Wb~y|YDqw2i2>W- zhWcH6rFa5?aHTi_^}Fm!F$A5Zg*y$uv7o-{JRAbS&NjNiiH$J9#tba{HuEQrbM?Xp zHf-k4ga#)*1N9{*G?v<`b4KuM>02{^FC`FExcr$1dOl!U0SwB-WR->i@A*%N$(v;# zDE>VgHkGliQ1YN{x4%1B`SGZ}hMB>%CzY{R!#|=2j$hgTj2RJwl|eL%|5Xw#-d3VA zhTGBVhGoYlCnef}X71P(bq`pxqS#6mhTXsxPN;Apf7KJG<8=7QToygLwy)s=eVChI zjJ8ErD>uKzXkJg-5PE7A3maBcIA+eQWDoK{HDG#;CFm;A#{(&)O=~QeQ5>6i--q?!1S*?6rlhoH!94n5#YT>q*zC#t3j^Lm> z@KWC@_>&pgJuI7d`=hq#+Ac3tSmOILDDF9#nC8d4N}&S9o&<~;tquSiO&OAuz?hdb z0Wp27i+b$aCGYTk%N2pwCL1`pJJi)DJJlIFJR%ML#;J%Lt%Zl_)@SFRkx${1fU2j? z-c~18o(4}w->OrinZlsny6?3Zaa$(N~}IKvq`VG{6)38xI&=wD3V=zNiE zW#opyJN9pd(5)T4`r!tn|<{UQd4MU;M{X-4Pd)0hP`Lb%B@8!5A97 zG2$Lno(@Ixwf^ROOk8DxIEA(#yo+iz%Q*{0-)hzCu?Z+=g_F>c;Zow>JCP zMUYst5kH)93#Y&qliS>|sSA*WpdC>TCc}2R#O*}%N+S;Zm)_dPgU@G=5^ushfBAPb zKKbZ;dFH}|r$^4|OjQr?ZVQ`tvgoOFC@(vM!{`xsd^_N>UP8>l@8XdWG*gwl8}524 zor_Tqud>ESX#v6EWR2Or6HOdkv~d+2UJXhgE;OJ6uA|A4RyUlJWP!QC+O6t){Xl-k z+KBvQ>}iIfY6^|nD*ISwMi%y7@1MID`pHl2_0NW;Pa})ZzR8bIS&Ln2GyIRbhqyI; z_;Wv*j3MB@#e5yp0np_i?e9;f*L_S+3u-ZhN!}M|`9zznPo36YeH3b@ARWQ~v`EOX zt-zf>b~vCki`#M)r`Fd2EM_FmLS}ukNa1PfwG0+sj8=@|t44vCAt|mj!dWCU=_bkF zC|Xtxrc>(&Q+l6MFOxvkBU4)XySdP9vTOEG2v9h4?4BVvg~((LrojE79@Fb;FIm7! zT6j8j@j6-0Sqj1UUZ6Jri6Z}b`0;@rMrrCylODDs{dwSIWN`@-=Zz%@jV+4R4!ySl zi5>F&WF1L#YK@3e*p6DCxqoCRFkiG_5HlpkB;S$F06KJ(SBy$^r6ZV583n~Fl}~~t}z9Z^^aE<5!-}F%2EMnYK&RmF=2JS zSBY59Z%AllK`xGRMqM6_l{RojJ@bGU_!*WjW~Jqr6N;*6P(&;emx$Fm1ZL< ziOO0~fly0A-MCi=m&V-|`FKH+EjrZOb#yr)HoG>5I11FNo1e_H6&f9HY-(annM9JE z+7%G9pfkx%3ryF*A%|jM=Hk-@wvY(p8re#+D2{?V@iWbjLR(^GSr-MT&H5Lrrb`I3 zWUCCMvtHvWu1oR;FC)fe?Ytr^C;#A)vJMsfjO)P0+A};n&f#Z^I4VKSQs9~li2;e% z25;FQc|inm2-MsJp>GA%vIR%51y><9y$;UqDpX{0BeylxDx7h?g2+q;(wYfTe13r} zHs60L+ni!=F1wH2y2Zyez*4w~Vd;zcIGWZg{?5*fU6v&AYdCJveGimBGtbcE{IV~i zr`u!K0b(Lzc-4hTREpVjh;55x9IGcUouyo`WDZ(Y8_OmR+38BzC(t`mlEmdbitA6F zzai+3%Qg`E?ggK6cTeAdS;5nz4ehP1O=rRVJ2PWHc^tX;MZwl9!DaTor9SzNe|G%7 zRA`?1lC}3_8yp5@8;+mD9hBPN2q)D!KT$v-p{E|>?L2*LL68%WO|*dz`c4I9~Xo;!%jeg0Z#;Crd~S>F(8`I;dHyk)gmTwy-IBxw%| z|8hSH{f1WaJWD^aE1Bm*+KYvl9$0VkSuqdw5HY_wJD$kdS)Q{gfIJpOzyY*86#^HGp?H7;=*o> zh3>(D`j5zlOts})faoIl%9;W`KH|tMqVTd2c)GE~7cRR# z&5qFa>G&atjm#i}z?nfNHtt1k6Q_Zl@SYMmxkk3%0<%<*DE}deA@Uy>swxXpEM#{i z{}DYN@*niUFFDXj+7eLzA%%*I@*k4sB41#beC-5hk|;=Kk^l-QR50qOR50kFRgpOV zkx6Ds@*mNWL0`~{K^KM0i=IV)1<7}mPO|SPd@u&6LMZfxvhVE>^e z0skNJsEjCIxb$Aw>KcLAfPFz%3i}^biBw-$0;luxwk#0oGYG%I?6IVN!~Mc+q&L>a z=qgUv#+9l?9EAGPdt-iu=r0m`$*(~9Nk&KVAJLV8|3On+jOB@Nr_Y+ciiu}8s z%=emm8YRZxf@y{#FDT*2sHL!J@{!_^zA&fjvTp=v5!1a+4-qB-%+r6u|A}SxVV|se z+!A=!u;;`&%je2|o6&88SZ5Gq9BElmd-VkgT<3mSR7Npr; z*CwhfJq|2t+K7ZczxH&vxjo07zGO$>d!K{-rrv&aYukywP=a7TqZ!)@X*{k|Q^fK{={1 z`qi1TiQkY^-s*GAE#DvZp^dhUTn{;UTj`cSu4=(5L_2U`C!k?&^Kkq8>dvQ!s9}@7 zdzxRQ4MXw_n1B{|2=qR2QNPggE-2J!aRNcvqW^V2y>l!V^YA^n;wnvB=Oxzh(~3{! z)PT9$+zFndW4pleJVo|3OQy5FuAuQSsin?B$)YCLXsT!#OSr+!gH7-BQscXK)Eow^JjrWAuk9=SGf%uaD&E7VKVpo>fmoMn^_IKm^)Wi4Hk1OZd{KDxM zXC?=uQf_@tiH5U$IZg>=S*EXF$Rz$O!_s+TtMRsPYde0M5p*^qMQis?QK06|RZcz% z=e2!>3>tC@g$OX%W~h7%{;I&5o0(|nELSe8?yUC%5Jp#1=duTg?gyelbE=_2Cg}_B z8N6@pMYIX=)e&W3Gb%Nh+7Z&LNhdT}eBY8{7F@EnzGrFt(0@xxuzyAPy?cZE3%OwY zvm;MY%InJ5+cM1%FCAGSFYNfrbJuIeX)b@^@j{{Fp6iG4$8=3YQofK~2Dp{_Uj>pf zZRC1KK($A11sc4HPA`uytFAuVN_|%JeotfXJDs*X!Hn*1l)DAH*55O%IKr~gCJcHL z2UQ1E_h3^UjH%*pu{f2YBq|$&j#^kk>ie%LwW~Ub?4*A$v?7+ zHXTQu8VQqfd)O0Ox=b`MTZ^$Y_n%^`ea>c_fjqj;>7=Bh%{Qrv$%unq5!d@9=-Avd z)EpaM^OrIPM$Aotp2u8F8}*d{u16oZ&qgD)@PaWx9ha%PmK80gjF{9^a>>y}4=+9k zVMXM(WscCv3RfEbM%5G7s-}y-SL%N>^u!hCXsWHwz#!>5GHB5>c0+@>PWnxu7 z0V}VAEkeIwqriPWrCiU^mE&d}BYe)Ym$I)`X!i6>+Om0q$zxJ>5*Me!&phq2%N%nfn z?|O3gvYzFD>-}!g)tJfPqAE2o{LK-Zg>Nm*>|}h5R7y7mXUn~~v#CJj@XPEs;CC%4 z@V^v?fF3+7DjN$27Ym$)qq&o*EgT#xH%CU09z1$R0tEs_#$qpQG$uD22@8oD+?UDl z|6IhGVW$Jn3CuW_uwY0%34~?jNkaZ)ZBYwNrHV_Hw5pap1%=_kErlhCV7UAH=qcFv?+Nh(pyY<^UUy=z034% zH^K(i6Dn+4C+`Ywx7}eq9~-YLNHm>_;c ze6Ra*V~~XLjdC z4FeBt&dm?Zl=&Y>j}D!}b{#F}9tSU`eZ8wa%BbjKwFAs3t;N;qN=$pZ6d?F|!DH81^lim_A5-f#F`T!;N ztJCp5t?9l;mw7mWwAB00;0I!c0WDy~E4EQUQd+;`e4Y*u-q30gmiUiCZ1?qc6n?d~ z&*h$$T}=5Z$aC2#G}ISPkHh&BX-k^R(BqhMYU`5S8Nl0F4>&J(w+m?Ty5a*uk*0&* zi1mM-WPjK_Bd<7r!fs7vG<5t9-u?VpDSlQ6N_s2&%5C6s?1Mo|_HZYgy({b``dMK3 zP7yahCs8SmUuwd0hCFG;*+Wgxpk@bAr{u(vJzYFv+svQKG;wwN@)lG`KnE{f{KLz; zm@KQhR?e#0&i1nD5izc#9CrpdowirCoN>%sS{3r#d5fQgG=Rr;XO{Xbc-Qb8>;Qq> ze{k_6#hE(zvnPOb8YL!u+j4=1!KAM*FuGoNlTfY{T72f%f-gBQs~=}5aaald4l*OQ zea6Ir-4m5BLDd4;7w?53GXwiR6;j9dPdNKQWvy!Ip6gwyoR?7 zhk2IiI(S)n-bgmNd)lUuNS1@RPRd9cS=6aJF1|$h2a(mS=gpz>8`!6gByBIcL0ElQ z$0OlckMunH8A|==%CMyVydG1k$P|eawGU43Ck9_MzY8#`n=}M??^AmpK1Q?XVr&g^uf>njGZQN+j}PRPI*i33fr70 z(Aw7J(Ryybk#xba37k9;6V?w4fa$rx{vFCkaWnD^_f`O?+@m%Xu)C09pEPYTIMS|7 zZI5n`^bEe|5+4zt?yApd*QpBD>!`PP-^7?&-C9bhiXlEmmta(jBZ>%PgK-*wJzhqb zp%^4MiVU486=paU3!b@HKi!{cKF~i1y+BBT?4vCIBYS?a5OHtY@lgI|}Ov(z{kk*yv*^{*OyI}Lm?NCwk5Vyr|jv@}+l6WTiW=IRnVQX?aPpfa& z`$)WZmg}=CH*0wvJ`9_WnEyF)g0I}8t)<&C@G80)JGeW*ssu1Ji|H!QJt~ix3I`(g zpGj2?L?76UpBi)wKBHl^Ku6?x5S9~zRqY1cZv6nB&Kpyn^no8>4WVX;hB4fOKM;}k z@oyEME#KVV96Yw*9eiKjrNgmBA%6>8z3SxokeC;(Wq^bL(+dHcbKE{ zV#gzzqZ7QFC)$Uj`h*HdA|h`f8Ylsd;hxA|g6s+U28n4>u-G zx2U>v1rny(3#+5LP_~1jpIz?wU8CQUJokXIBXa#&09;s+%cV|Y#`!U$JETw69gOtO zZdu~zfy*75C%UKlE$?!v4+>D|llTTU@y2Q@PTXI+qjVh<5un6G)>cB)tMmxj3G?#K zy23fX%Rb@I9_$+fpu7jcr}XWoJUfcSk++8=B;Ly+2_r@FM}b>|Ar}U`Ih5{M-2$&( z2qtedPcVie2rRlK!;$!bkA(YT&x}eDJ~o6du{_S)yt3&o!m7l_O*r6kZ~UEDZam;E z?C4Yz`nMjA4JFd*PsuIkDx2e3uM2=A~WET!O}jV@{k2i zh4){HmJuHHqKFRERqSvRy+QK53R#e8owuS5#~>WS_~t^rcV_0mk9xYiSb>%svOQJ! zK}Z5*W!=XUDX*3+LZtJ`hRKPn(Rq` z201}*w5O5FG1q|fmqnYv;fo(BnJjVxbau?hej#LU+ke^)e%7+PN&QixRp*|ye@cZ zbLv-8GFd(LRf}x*xhJ@a9i!nd_681$?or#%RDL!qtarpg}F5sU2jMQgkN=DYy z*)WR+qtbC+z|Ps=y8{uY^LVkY3qLt8rMs}7T4rv;#d^}JRJS^rx;-$$tP-+QYGG_G z3UD>s;%$Ff9mQDN&0pQ^EI;26nvv;lW^mLZHyF7Y&e61$X9Nr-hyIzxbvN+Uf4Rdl zbac2{5AdkZz;{exN?Z!Ou?hbNhjQU>?>^x1HPd`pp1k=pR!3Qz z6~-Vv8sh3=u2r%KT{QQd;qnOCFcq*-_%F2KY zL>s>ip%?gZTFhuf^U(!FTc@f`;EIL3oj+T%@#?CI!b&W`k;A#?PFy#qRn3^0b8InB zqKG^dIi78D_9)t%y{SYZ{kbxO(}m|Q5s&eedt%eQ1hykmzc+cNJ}l(ko)e6*WwUeS zxt-khvdrHGlvnUbh5gDBZa!;ib+E@9nf;Xh3t9FyOSwNgLhpO@bHBH$_e%dItxGN7 zFsr)?hsi=DBH>Q;tm>Z$NspWM-+72k2kgh0kSZv5g4Wi*&W4M6(WuO0hL8`w zJ6YUIIRFv3KQ^%@`-_oqIci{_4qW=C^hmFFnOy@D#*2{%K$JKSz8q{eaEnG{Fdwr&K4sjphX7#SQK*PbY{w zAEb%EIfk@(jcgewb02U4WXlmDvc|g|aX2w?h72p%-vQe=QVfcjN<-G$IJ9L^OEwUT z&uZC&i)RUBl9!A5%{GCGwL5Z?SFnGB9uCw==bt$%?U)DVk_&kczI_*t z_zvLV@dhU8snq00_yzOiis<^m3K7f7-Zr01oP-@zozzcQE`zz;a_CpHlgf{yg~9*5 zJ!_ecE6~z7gHH?|ExJoTaB&3VP|50U%$R>6T((UbtN!_!`YPDePdg;rzWXPvvqeF{ z?@m^JBYWulBG$7Z8%w*IGH;dMy48ZzO9^oDj4t-c+Aja8F&{ZnO~nvq+&WFh=0BHo zlmXmu#c*Z>d`3QhpnBC5w=yj}%G7M-`qnh|41EyuU_lx!c=B;zlC{%d#F6p?rW9I{>CK{Nk z416P`Gh}h;+Dc%~XKX5f(!cyw;bl<0LoeoBJHPt8#>}Lt69WpZ%=vmt4JRRE(77E$ zmw`b8qpe|9-$M{@IHc6by~i))0&8lP%^^jlq9(<4Cu8NX$WtJD^E-d(m1F$?pE4QO z1W_Yt1A&NE9;GoM{Z4gh3sD;zl6gDi1ZV+F&VyQYuXJ@sQ-uMVuLD$ONexN76P8(>NS3k)5jz4l|1nDLVp}YRgf-AJ@DGpdf68+R)mNwth)x=PkHYT{~n-#U>UL}m2OwK zYV5M-O6)xN@r?)HwNjK5RFNLQiWxh=dMjnlcYeEY$S7p48Jghp{iW^2rOI=}fUIlV z-c`)Xn@d|6^<%+lG5c|W#tF8i;Df!QS~*4+)KZ>*Ivwd+7GtpB8r@4jn>AWNz&3;? z*}^ttU7S!)UV0yzog`ypsf90UBnv1q5Ow)F|N$Zn5$+b|h`Ghz{a;%MKz z_xJ`vN!%@-puBksue{VT{R@ns|!f5fY z9~1?H$=Tn(X@7G<-eE!p!j!`~v2Z^jBv5c?NgjCaN?7X+CL&3fQ_yH2YQfO}RSgNV2sSn61QYmD|=`^@;QY zZ$vV7bS|_b6Xs#zO%xVlfq8)Lfq~%!IpSgQ+Tw#$?xg&1|Db={YJ0;uhW2q=$r>G% z+KPm}6LAc&X32tZ-As_ktmyxRwBbspI&H$oKb(s&V8|Ll6K6ugA`rN8;fy=6TC{;z zF@$u>Q&!`g1ywl<=;$q}?Do4$>~@?7q2v77{W!c>jt!I~Mw-(HW)C7fY7Ks=M9lHu zIDLB`;Q!UqOrIXl%LNTiXh;0=fnBGmSNP}_J?5Qup@bokR_Yf0)6^zRO-qcCwHQqf zVl)zQBA_C^obOR(Nj*AjF~zMlJmez3C4w0OBS*ZNs?rFJzVV`YGC4 zy@jf2+EQ8-r(GjD*=$N;>UAQDBR7^LW#aZJC1S)yDt9I8h~uHaF03N4_LS$PvSBv? z6DTNn4)O7d+kssY>6xBTUyi`rzqCNjm*6Hvgf3EQC@s;l@#|==W%TCv8FEe|mlY@^RB+1q&?u^G=P(ag>ay`Q>^biD**K6*U5i;sk@vQQz z>&CxI2P%0>y*tE+(d}J^80`AF#`Y8Vt^R?1@QQi?3Ud_%wQIq&xpI)a{wU|-P+7%| zD+{Ltu0rQW!Lz8;E&;h`TIvdn4b>(4OK!~g6)i^ZjBs^Q^+Zp^l<>}naD6{F@60%A%*E0X(`|L=QXvuT_`KED)I zk8XyvqD{?+N2kouFyq=rkJIP88u9AX?{-n%%W=(YH|rF2=-sIMb6&rIQs9Ozz)A^l zTo~0heC6D;z!kgbtHvrs2+-s;NpFOOWl8}yzd0&p(m%(J`XC8WZ__&r;+IV=>XrK5 z_@A$pJ(Z$An~}i4Ug}>c_=eYHT(G-Q&Spi)|3Iin*TBt)kuQeWnh{ZCq60B!XXK2r zJggb~Ep>+mvhx4pgB+ zXU1l$5jk?JsF^hX$AF<3L8M{pj7SAMU`j18wnzAcyRDuT>lGF3`u;FWDT zNhCSeHybH|*5}n8o&Cl@m)C=%!XC=#k~??^24)l^COW^rq9F;{lg|*t7Ed4< zuG{Y=sqE6UDjU=P?)0Q?U0Vi#TokJ4Oiiwya4;-uXsN~~wcf~RGQ!Q1!d+HO9e`C2zi^~0hv zZ0!ZB6036a=w}n8qTCcxUm?4Vxds=p=f%n8sTDuIZq7+Tvsj-f5cAh^d&cKp?Nm_- z&0c3)>?KrJV@*G;vbLnS7!;Q#WE^+$kr&*dtAdsuuM<%sNWLH_MW=DSA3vLNatHlo zi_E6AMfPBEkt<5Z2tFFf{K>Oa%Ykm~0UWDPR!xibsfrE`Ue=7#yI2@utl%Mrck-P* zFTK**Rr+H&iJ)SX8F3t|aNrO|$4huq`mo7`7xU09iY-{l(pO3&8P5&mhJZQr=gex_ zVW=yuezyzf$gLcp=4{ss;jClVW42m?8V(Ze|D}#D>%s=hJ#hj|94(ikn$Q)ctEY_J z9}J634ewFNl%x|drYMxl>pK!#flL&6f{jKaVGr$htmF1JPOi>>+m%_?6{SYuG?u_s zwR+^m)p_G0ZrYd@EkVu*v#N9zTBcc^;L)pSdyydKN*gGX-TqzD3`YmrkBI#&uce`} z~1tSj6~nF{7H_S9C@uND$~@!z|wJ^Pqj-_)KKC5F((pY7ENSs zp;O>C@U;_ly>R-SB^B|QV_CE^LEfc^UeHX)oCPLd+Bzbf z$fe`&3P0jspr92K^!Bo7PgtKWlfIg-7-7qFe@sMEGA`f%vSY>P3)^c+OmD37+`Lp5>xQnPb*IR7l$OsxVt9pPjr7_Hq)1i_{_^Tu%6Yt zb0kTnQuvbqSk(#IkS;QX6QudYA~Fsv{jHM{s>PGCsNgTJ?0-oll&&hmNban{iBM>1 z$mG#}P>zp%XHss-^@mxUEP$+{4{su|*SW-G>@MmB9od4?;shTzhHiz@Rf1pW;j6Z! zrcOTRz#IrP9vd5DB>ATRYdY~nE7#3H6fO*RRz^AuU@#zMxeXBfsFp+kb{7NmxQmHd zx14(CT>Bn-_pZ0p`3z?B?rX8M^|YXwF}ZcPApcNrB!HufvX%A>Jg_}A{Ug6i@*cdy zu9-KrNzx6DbCs{(7O3o+WGIylqme%T#s}ThTFZYDJV1vynE%wNYs++yN*HiL$_&1s++v$I@);>hFXL+6{QU$SEDs}0 zsZ@SRNkwj&v^3H@FTIA}xX;J9da-=nJ^)gHgsMwoUMOY`!}l&8PJqJOQ9vbnRG_Rb z+f+@r#zQIgC8JxS2}Tl37EXqSP4=K}6gz7IEQ)c_V^%EDw?&ov4botS4=wnL5zoY; zL>P$b6Dq7Mz#rXI@Xj5IagstjaM5|Ku|^Q6JYr#?Zdt8|{Bkqhi)qgBP+a5ol~W;; z_Yr#xE1*`-JmmTOM_J5Cs1ctl_cMbY@JFk#j$E&xl=fjyoS87H#FD<_X+~+5XdY?; z(lr{}nqHN*rO_IXoF}6#%*mp zmZ-pWRR>XXa@umrTb!v-=V5}u)MT3!*bKVAZ!6s+*>UvD3x|Y&Ysli2^6|Z)7^9KQ zlTr+}{Lp)39B{Qm8amewyqTQg6-%Q6{FRi!#`a$}K@ns1JMGArd3io;waAL}wJhR1 zVPt+=Fjv_wqVcVfFhU>;L>K? zQQ_Ixq}i7lF7^z=a%=XSd(<6#Coy9H@dseJqkoUjIphsyyAIfRl7!%%2(ta?AGU0o zNK!?a7l+ChCv$Jc9LuU#CXXHgD<%;0aat}G#ZwjM;K&iGGg$?tso4KoaWqqt+-)pj zxINqUESoj`Dzq|YxCe5%&{-^1 zayuzbg2e~WuC0=N&fTNFsXvFjFSLjpad2X+d{Mvu8iQO4U{y`R9-(ypXsKkulkDeLY+eq7%@(QsUco}S2XqwCcN5?AHcHdLu0 zs-nopHA?UJ(z{EGt7mIG?0oIN$`iY^Wo!*Pij09`Ik2lhYlD&{v?f+ zf&Xk9?>c!JRzGseo!O{3M}H}D=Wk)QHe@YWh7nlBaiYpizwox*OCo&S@L<#KqG?ZM zSgEHBF^_PF@Xfe--S~3}jD~`5sBX`V6Hl-X(dHTOR1e6wX^2Bv%e*>5@HuFdtlA%6 z(HwrCuimKTy|f+U8gm?jM%vlG`A8mP36_3ZcN4If=ECbPnQlI@CN4M~`7XiX1T*XE zH2ZrvCwDWKKQH$_bz6vHFP4QYF}6|tS!7Q_6t$3Yu+mvU1zwl~;Pq+=S;WjxtHn(* zz2I^gr^q%(_goBBY@yOUlUKJZY;7)O4%}PfV@~+ z0u{878e`k1jN9JwfVaA5=VD&{_X-QoXxSXM$m?9apGUFIY?^=Rn_ye7sz9-9FYxu% zv2f^H`z6F#t9?_ec84z4oQ%BXE#_}GdXT>=e4+pNdb{!mXi#>ptuS{)O?w?q(ytkq z?cVao?!M#L8Gf3mE0?NvfKtGc)1WDbAgRV9E6iQPmGf7I08H|^vS2Q>k&Fs#jg7wW zDF_S$Hl!pxj94N^bJ1bZ;G+C_U7}R{A{RE2b8uirDY=ex2r@KKgMl`xe(HXDxiJ}b z6yO!2jM9Opr$MJn=MS3U$ZtZlL|DiL7JjfxYa@H>iW?5P#bMYoww1Iw4Oo`ni`?H% z1ALH^gjtbf0dnP~ZsSHW7pw?~aFE|F(fn$p*x!+}#!v9n%(Nm+dz02^FumL%k*L7b zx~G$2+8q(c4)1EekqAMbKVV{YF_;?SfjQ=(2RS^s2C^i}x9P@Va%yQq(mO*oNdylR z#zq{WW|8QmN*}xYtE^3aMHA*BuL73_7b6frT4ZLY0hAGxju@Fv$j244#4^eFc|Znj znLU=3^$s#itBX3R&4@oIS+Mkfl$jVBP;?KPxNBJ2kFK-BPyA(TQ?fwt4R#^)a8~|! zJFTno^3M@;2{8ExZs$ge;u&cy!*AGhi=QJnui&eQOtjT-hrKHzNh+rqjSc}tyCFB~ zk9ZR$0B%rE_+197g4ChOuh1fy`?DYmmJ)*B3*XUVA=yz2muMBhoXeLq=uoMtKHgxJ zG6D`(uOg6RoEH~v;Ha9{X)eGvj6G$pST-dRMh+ieDEhK>GoB=yIlSnW)W-(RG2x#m zPf+=N76w?aPObZlxgWZm=^n!!b_KW||n#f`)0b4aRpY1#F2- zpb~Xh49r6eO!RXICXLS#fmj70*!qM(se;5Bau?^LqL_1t{m3N66qh`!0t?dFIM%N? z(>ywfS~2$=^byk=sT-KIOJdzbklMUx}PA30N0+bezHlXL<#klSqi}4U_ZJs*kp0Nk@ft} z5yz{aX_$9fUl}R=Bh-ACG9=qM>q5JS3hhzyyF_Ns+C_dWGQ_`c!|AU z3a#3$Ae#F*NJR*-_L7}ULsEQ$Vir|P+S>JwYRoE5toIAf9ERxiQEg$H2gqZbK$I7g zQYX9iMFaaTHX!ujt*~v67Ho({2M^VAt)e42A0uv}H%}in=qO7Dkz(DUs+WXA|ADRU ziKcN^o;XT|@rw4nR-#Tz1%X%8W@1uIiUf>ZZc{WLHB(hrWhuhuLiD9^&xA8?DH+nF zQ@EL$J)1XupIuaEhT#`wm%FS#K;Nv}wtho}|C1GR&a&A1C&)~5$5KTvzlAj9LgXOy zN;P(L|D{j~IhYxHo{Zvz{kZ&SfitQethUB8`zow9BJ963R+6+pzP^9( zjU0nhqaF7~|L2D%26MN}qpY)vnh3tjN7k!(hmpIl#YyU>zek@7YL^zRpgX~eHl z!?hM~qO*>ae0DjyrWipUQPPLhN9fJ{Ncw5=JTxv%+tW&!rfgu?!P$!bhl0O@bS%+o zod0N3wWE2`depKQIBbDxRnG7!`@Pb*cbMxzPtwc3uXwe1y|~Q`(7)A1?qqYMSMaID z*lMpCrnFPJ*PJihq_k4EBm0Mkst}6IC4nFvaDaCn2|ehq;QXaYhojvKn8m+=5d8Kq zKJUh{^q!kyId~Kq8t1b^U=>6c2!vNJVy^r@08~J$zrd=XQ$1e;{gZ!M-t5ja?O5`L z6=Un0p$|fT32~t@&aUYD&A89pZyqso<}qBaxZ@soRZze}YIhv>#rxw!aZZkB;w1hI zXg4)j-rG6Nth*)#Pci9olFE_A5Xh0aG>C`$iWs6)(mW3N6D<>T)*Tlom?48+T6+{- zBpi+y^>(9CPl1;zp1pqnx1XGv0F_gmI5km$)JQ0*di&_)3 zgnU??5PXQT5Tq$r`Ebb_asxG{LCqBH7n;w+&n#b*^MKBSpvlri_intK?B;gs?=y}# zMm!_l5#O$|d&0Xb4f)=D5)UxnV2`3thtrYUQ};*iPpR^~)NFrlDVN3M@k&%O~nS3u{%bMLrwajxzBk*3^= zfqPwMlLQ#Hm@Y1K%oXO?# zXh8+aDmsHfdl@%mT>5>=*(Y-8iG^a@1#><`EnRfc3#JN-jVo0inx^3%tasH_R?hI$ z!w1W+ODat>GSP1o-lhC>Uh#LTA3`1Ka9&xew~nKkHjg~D}S zsJ!Ya;>GwG{1if5r_x$|Uy8bo)a5D8R9>dV$zXsn$pGVf0X5}qfijDw+d5(;X6qs= zK~~Ya&04hbR-OX4)jC!@&X})tjC`)>bs~gV|SDA~ST(&#oVyVv%`J z2tP}vsTsVv#1xNHu1K}@W;);4bfe4>W>}q^)QCc~Jf4VG#5uJg7KxfemKj(MiWW^$ zSBZ>axQMc82GYjWz$>FB$|NauO)=RDn1WO~qANS7vwZ;D!qi_bQvu1!2#QJQXBZ{0 zPdR_ijL!{p)JinRe*~;_>6V`sCbtjV{kNgcJ7xuEolA`Fg?{@L$95F1eq-123-^8d z^^Pr@8f`W&r@ExDbkE|ej{N8^FBZnX9gE`IE^G%dkD9KE5P-k4B>KgzcGa!HK<#Og%KcmOVfhphmamB{W%^p_JWA)K; zFe;xj*~nT_zF6ec0XAZhXG(g3Vv?e2y=;=y{*+0tp*rvZ>X8?8DE)r&2#g0PJ1yeG zCnX*5NHRU`gFj3ETcIf#2RK2em-Uh<5_Q2_ORv;pfhu`eM|D2TR6;C!nD5=gR6~D{ zj;496f)JAh=8{*JT=Frf?O&Ny)k^hRnnfebs%o{yV^cb#gR)K$i@M76qd5un@9l@yYZWt$7AF}Rlfw5Mg8p}vzty#uUn!uKciv71Q5MGv&Coj_&^%;ihdtr z0w8s<<2+psa+U|3$$d=hi)peUi+!55<5_N&&g>?wb77Zss?CacFk$9Yc86tQs$lPToJ%UB7^67B-M5Xr0ZVdTLa6B0VZ2Q=ZO4 zC;|+^&*;m@=+78pvR;VEdLf&{X{mRDLW-8kdbEg^+852t(@^~RL0VdCl&BqpmV(Id zSt+{Gij{)M+l+7}nJyG@Eed~a3T*?Sp==Y(n?BI$6}A|Ku4iB-lQOjp6xz1|WRB#; z_w!S0M@pW}Bh-SC6e$JcGbC)3t<0X!uJk?oJ3FT$vu2edio2mfy-cBtfcB^f{U}0m zs7zy{&HGI8(I>T95PX;8X3XUmYrmjEKO4~O<|NQNs;grB~yReEs2m&_xF#q z94R^fXf=~w#XStOnJI+0V)sYr^f`?ruPssLIq|S za;x!bLR$R0EW6y#JDzurxlgz?yZv~F2QM-#GOjkPHhwCp)RIGrOPtdoxjh`F7rS>4 z<{X)++Hx7t+tr3Ft+ew^#|MtTI5@`zcJCWVPyJIV*?@lyRcZgIpZF2RJgZN~$Hc@Uu~ zOx8NWQ;1kQjg#SQJ+qB;y#010}hAS#v3I2t`FWV=7+&eQ-zII*h z>UCse$a#O!yx0ZQ0@nuo`VeTmX5=S^DZ2964a~G)V6xMcUsa@vuEE1oDx#S*qS$C6 z&x-M`sGt|4NWrX*`V7EA{}UuyWz&bvvnmj%JTt( zq2wB&Oj4u>0}PUVgmT0->yQIK;ymbl3BRg6?0>Mp$(mC3_c;#M0VE*19KmXj7JzqWzh)3(g;h8cxYne!MbCI@OFQ;g@Eb=OfjJA%qC9dkAuFD&jV*+_R>#4dV-+9 z45n0Rm~5t|d5~3+_$i1-rI4*mpfbNDMD6gkmN4_vgcz5hH~?u}X?@s~Q4CZ7Pz|VV zfSSH|nq(WuE}J$G5*ZLz%Z!z(ssX3i?V>WhyvnWXIUM3!cFhdJ)3tto%MKt(1` zgsZMBl&|xJ%L}ts#$9rH=GMX!QJ1K!;|6XBlt&A{zNFh>rXy+q)umtA+5t#o+a7O53PS$-+rnxz%JwnduMP*Lv z5sJ~`PUL3~``L^9>=ph5<9dGy#`O}@OGy$X7Q!N*P1#n9|D?(;#E_3fGE^4RRx4Ct zsIDG@cY;xRy?fbkBzPesbc!`IM&OOoBfw9-j6ueaSn|PqQ5x z8OATGS)5g%y7Yc?L|{lLFor0oDI5w;wzSvDlAMf3I-S`%%IAMe)O{G-Z{FtdOOOMkd>x?E~T;$*L*=6j^)- z?nblf(d^MI8O`E8NEpv@e!-atn8!G?Vkt``0+Eg~ArUZjg#C#?c#JbCRpIJ*#jH%A zdX5i;Yie1GBjK>wY|?+ZoDt24fJX&v2K{Td@TR~ER1fhcYW3a5P$po>_}C?Qj7h*ffPYCh`bTs{nZU*+*( zridh&5t`Ydsj&kfu%t6P&N#u?RAaX2GR@hEU;4#rapyzd?7V+ecAE6nvkNn9O0ABc z)phk|y{WphFvH$nZ4P>TaWl3j$;6AD%bTw+Y*`U>gRmEmnHS-!w+`G`@aLU=ZzM8z zJzo0oJWomXOTj#QT(uDe@J8iEjik@HB;Pr8k^&buy_f?|XF}7gnXh?FqgLcq{7PY! zYo&CFaHZu+>jQuK@0fO3p3pyGdR6tR>lNu;*Spd&`5*j0Tn-2J^KO;b;dZ)Reo3Qs z=_S3t&OO(?!?jb^NNz%09=E}*HgawPT}3&9#>N}Rpc-1OVmGu<2jv)73*w~8v(t@t zyPtFu_cL5A;_%m>!o(05!(Ug7Nd5aow$-*xwrw`vHimySijD5`@*r7}hh(l#-Xjy) z{Ve_m;*b$5ihVWNM7EKgv;17^+i)VL@_S9q+eOvZ!zQXqQ5h>= zTA+&oP!WG(EB4fyaQ&3gORXWA5D4`R+~ccHAH!>~{NUy5cgLdcH}8M={Y=LX{xK7; zy>vyp2dfHSMDc8V?_)Ro;HrT`FTXXiVZ(P16izmZ)s>VJ7JtWCfD?w%N6L&gD_(6| zZ71tp{jOUKkDJG%DyxJuQ6)+|LdlWjXD%eC%0f!DH~vz{rj0r|nW0XcYWdp9i+26=>-pwt zcd%kr{p_XOgBwC_tHgLwp`AO$-GypM*%U9bYqiM=4qX$+alchCJh`iR346w4{&Z*@D3@<=B6KHi`Up3%Rxi*C4AJsl(UOZFq zr-W71@_znsOADy(M~{w|0CrUDTne(GxA-}77f&J&2wXam?l0)|DvxVL5Hd~4ZzqVY zuFAQ-{wCEeYNFMutb$wcXp?qNOdGLAJh5aWuD52rbFCY-8+8}CFZ8VQZcJSxY|(#h zabNAZ(tAy6hi-@aUUaYa9?#v$XVKBRKd8f6t&mKnDk^lC?R<07?Q*G_sqJzxL3VpQ znF^g93Z#-rwoxuw0gqI8w7gD8LFm?L1tC1OWiHNEnLush>2S_(u5$rOjA23X?$qHA zbSHJBPuH*ei;mN6ZP6~$uGVtet-^m8HYxt(+h!S?<=rsfcdkz1bgCsqQtsNi$3hgv zlM7Gf2fL2v2aZpk%G0$olMAN}(8rS{K%aJa&?Wh70UmWNLrCfHe{?QuM4?%rCTvim zsO>cQKW%Med)w4!t<9x?-+<{>w^-bOA9qw%hCVoA(FkQpToEmowC=*~^-q5;p0S`I z6UvqA0&^p?3QwCuZqZfC-4%`d<86f+{Le(WRjW5fqr4O{wVb~EmfPl}Dr%kPnZ3Ko zQ^BgRK{NpMUS4<{--}*BF0@36_mW=MVJD|`^|_C_IW0ySo;M3tbkM38^n8=q5p)cJ z`Z4EQ0VdH;fo;ixFrH(4K+E#Lwvo#<)tTY*^`Mv%BTB3Xr)*|ZvMLfgJNgU`e2L;E4DWxM_)_;-fFt2Z zS%jzw<}gufqCT(R8}M>!Tg)8Q$0WDQP1GUYvK9r^p0(I+f|%0)u?UveVy^%ftLRvZ z+&Z|N(TFP8Sy6F=tl%p-s1J!anQc0EHP`1n-k zQYZbyab}POoTkK(LuU+EFb4+mw$hd*x{_ihIb)U{eURyS#A2LvX z?v2r**l_J*(!+nAN1{&|_IsX=JsW>X_mckCMyCepu-ZsG+PKr`@jKutMRJ%d9@d#i}6KdL+s-C#@g%f_3_QA>uY!NJ5@uPA>l^LjnXGG_=Cbn`ac;yGJO>Ps3w1*F>2#YD2E$sRC5Gm@Wgp` z5nYU))v8Jw*o^*JT5N`qQP`P*xQH)QM3hysgv!8svd6M~HvALF;P6aT0c5VrxD?lj zi*vc_p22^{ADtobQxlZNCyt*gQ91M2x=OnqYLe+dnZ?Nqj%Y{~29nnJ*W#4DVlAq& zX4c{|9;kmgKuJ33tXzxI7Py?HGCbO`Wj{Pg%=KGtLv9^fBmvcZ;Z_)kKep!`OVMo z8(i?r`i85OoNaHj~bLrsS=3RmBnZIW}XnxwN7XsMn!dtoP9M?F%&J8=i!`*<7OS$Y20lj#xX9f zr0suN@&v*d*N9I%X~98Di-lM`N({%e&9a2eQcxli)7qu^(e>*}EeyI)TY zz$i@)0Q32vxO%Q4IjiU z&wXoWh1F~K=v9{#YTrD#qwv-TV}-wt3_NN-@aR9EIsH0b`s_TX&6@#?F8-s?!94@I zcpT-8uiOD`H^jbH8O`BSDt^g z@+P%s+TEs?+)`E4RNt%C#F_StnD&e?=*XZMw@jobn4nR;4bsT%5W> z*kaj|x>j9|26XP~U^=jPHRniF9*oi7?YyjZui!#SF1bG^?qRaoPx%T5Y|ItMyg# zzYyjig$$5@xM;1To-sqJ)=;>JPdhDYoh3UGV+g8}qD!|PP6-eMdt!5UE*d^>;I{rB zcGQ>GxN@BZ+1(JgImB>4isFAdt?9BQ>t`-LPwB~|BV2Cq?Ja9Az4@()`?opFm4%Pa zuMI?_*r~5x&#mpvNTzLtA8raa^(?&b(7z8Xl&qAqoCC7_e*i7dK=V;AcaL(T)!BVd zY*#&pD#cY~bH(N*1XZZ3)aTwV^DPaFR&8pyD%QV>a)X;(H%mLS!!v(xYTMa)>!NSF zzAf!qG{zrN?RV{$Uafnzb9~j&RmWDHT;=u1j#@EmuMe(LJtB0}w|J40s}FT}k-PQF z{~x8b+3Z?jD2lC7YJ{@d$+9T*NP*@{Lq!iV@b2i7(dVOFbPPXupeG3f8iJyVk(RaY z4m}xqo~{cjJ;OqHBm{qD6=|dccTgR=gBq7RQq*|W!IV0Xq-~o7yiI_Jg)aBYs&}>G z)-kSHF}OQ)X*ce64}qTj9Qk)pRJ2?dYKAPGTH{`f7pGF@uAg!lltBTw=1>=xQG#Ly zZ_4b3vQ{-aNQi~<}l(!j&M`| zQiFx?R&LtwN+W+y(>8J!tz7jCz6OP`Zto6IE=sEx2L>kwCs|}7Ie1)54wN+8rnBMJpZRd)nwn*0JcS%?ki`G=vR@YT?>RErWMX{=AMQnL=sSo>R1bnD7 z+a;sfxJ5?is9JoeyRyrN&P^_r@f@k$hnK}y`0(--{w6OJ_s&2Isyk%d*^#YRNUIE- zcqZTM!wb`keP~Hyv5eYWt-g}{z!qJ8c{$r_P+DTbL<@!!bk!F15$LL@ZkiRXbeH7G zz1EVGU|N6daFxtt03+&fcuM$SqK1ndX8@+O4yA!Tg-ffXriBsp*>`ZCUApqfo}2n! zOqxK7=FG{f8xKD`XKpGO%J}+!eolVV#SeV(!Y!S8OIEYGE}6rQj`efux)-c%t1Wz< z&NQumZvW%8b@%-aFHC%^_qM}|O09KybSm|{{-J+^_E^qtku^N0(i;2E9a#6x6*cve z6rHVI7pxA3&nMeAU;E&S*@M^aUOD^p4YfVdOl0P^d38=FuP*Ix;Qpq%6V;QQQykXc z$n4#s&Z1-dR3|Y*w&a;|{eM2~`af23xk}7DEybwaC0N=lS(lAh;tBfi}@o;H@3|$TSl`RrIb!=rpmR;eC@j7@ZeWfL?V~kqIjMh5F zx^)sul30>tC@m9cY?$72$dW@WIaE1qv95oli)CmAL{2k*Z)Ig;!~fQF?N!o^N<~)J zNG;dqs5v&&IMT?EHjXzQZRC<_+}+sM*iVy`Ml1_bB48<*t1AtHG)UupEg#Pm^t+d z4KQ1^rT%}kRx=aknH33V@%DHWcWt_H*1~?T&7{jHg_#beM#lx`WU4RjaOBzxP3MH| zk~!#cq)phWx^r^vwQbAKQ+`gBq!AQiWYh2EqQ~D1U z)F!vI&_S+;`C>y&O89QeBNlS2VTXn2?$uh*z1W5k(rF(xm36DJddR-?eAYV?Qwxch zO@Mj59DoQUE20L6nu^k{03p}kbHT_1xaPC#9$XmmbZjkbiY~bD8+iCFT#tW?msiaB zq;U63Z$CNw$bC?UDyYM9R)?GtN$?fIJQW8Yw?HLqpe$&0P=V6F!{O9Jj-K!T_e$Wr zEekzsb%;olt*^HNMpcojdoS4eK;g~5U$?s}|KPsT{%Umwq?r}m883fXFGG!9_TLp;Q`@1IEyzsI?+o2wM5i}RQOtCTXOgT` zvbv#tx>Wmgsdi@TrKQ?u&7H-{&0_wsSwWCQcY(}V`L0J4GpcLqIuu7R!5YhYkTi#8CJ&rHh=U)g`(MYq&Xt@q1J z=@~DU-XT{^tp|Kh(bJ+bnbt!TJyT7b?sQGtJgR8ObC)htXqogfylB~`W!si<%a*I> zR!h;8UelaXmDV1lDZJ(L$s^+AIQ>oI8%2%(9;Hx1-F3`smt^6~Y+cotj=N@fJ-l77 zQE8SgTdt9+=UNzuS!92<_)ktUFiWzuWWy|WH;diPS|HOMVx_f!Jq?r{(By^^Utp2H zvfPG-o(0rpNfQ@L!y!aIXSoX&^!A*+QjlHgGC_7i6A)|jk(L%Jw*bM88atQvJdfIo zCr}%lX*e^*69+t?xB&>4e!X7BSEo7J`xhrS1n|*IQ8Q`8BfWnBj-cR3W90PyvW7&U z8X}6mY(XM0w}b6e1AN>cP9_4GG0wO@JS!1shlnyWye!@|YiVHF93j!rrQ{Oj0@6h1 zE?+?hCYmzn^cpp<(#&nI&PXm@ugm2D1wWLLalbq&6L}106>~$PDj8|aG~oV*(FW2$ z)0|x^Wq31K1I#PV|e{7)P$Tovnufv z#nF4*3;XM0Tf3*$(4Vo6eTltg5rf$n4aXvekPn;8Wv1xa*bC5`1T~*} z2^&h#`+ou8sZDcnhQJ!vm#f0gBx}w>=C7<3tHs^xt(AWpYnNZ|*l=g({DF|usH;Dx z&}^F#a_M+)e0lbg1%x=7+6&bSa(Y!LwWvP3q|!~@j4d@Dwyvz?XZ&QnIaaZL_5We- z%>$!2uKe+;KBniMp8KBZxo0$*Lz|9OjS^m$6My9Ak`+Kz!Rt zfW+}l)*ydz2yhHeV(0XlWaGq6HZjf;$Bx5>WXa(e4c}MQGawvicYnXXcciL%U0r=u zS697P_1@>*GJX2>&9|2~&5<0?Q9G$6-aWlpxnYVfU7k*R?`YIK3-an@f9=@-Wj|ppoUNIDrf>oR9-}=lVK zP~oKWHO{a`qow?lmgZ_Hd!^kITGUy!RjRH{UARD(17T1-+ewzDsBvQ&MiD1F0$_(4 z6UBd3s>;hE)9p;o?d=`8L+-$Xi;mVHQ8=~!7KH#cbH)`o=|yjSz0hS6---+U_> zS*TheBBM%dguWm~Ik_#HZEO1`jk7tKjGli5gqT~1R|E8l+!LbuFCjW&gydv{JG98W zv{6|ebOpVZP}ofu38A*lp@_xIFj(z!)1KH(QO?{PIn*82^s4*SXVmN^VjSI}?ozW0 z)u+^_)oeu{gI2AY^iY)r!m{kA3xtcL-cWz&Oo+`>z&e&pSuhkz3BEY`4&c)x-(G)Z zjS#*uAPSQ;eb8l#HD%F&di(SPxif4*{)e5MH z+ceuEw`QM@9*Z8&elPn@$y&1V^Gl;%jN=ct%*|+o4aTz7UEQV%ovYrrNubMWftRr38;`Ru^4MLSyg^9 z4jTMqedMz6M__V3OIHQ@5U`Wh%M(M2@D{qfAm$h$q>-06mQgTmRx}^H^U1m6j&JSn zeW3i|&Lz2!+he}P8LL_LXvBXLOh0ms)V_DhXS=?*f}6JU;hWnRJhZ3o$ZZEc`|N~- zzgEq+s&so+w@+{KC))zro9=91zU^u9cE>>bHv#8n$6u&wX*)0dMbXl>=~Y;$m=w@< ziz%N0bq*o~X}EgA+mI}MRS{cH)U~NzMQWMK!WF>zSn^qf@m27s% zATknB&8uSeRTu^FwGk3g!b)W!8&z|)!eIyr75e}>{$ozD7^sfudW8j}grYjF*E=0o z2{o-0laGiqM|V3L+*}%6#LfZ3(#8%amYp5WE@!WEw{ss96!fWp zFfEKz0aYSmOBmX$0o#8BxFtcQML25ES5BjVP&JG$?$+ZDJ?_%?>UZn+>CfwV{eWYH z^0OkEw6#i zNqy3q^rXBs$wXbFs^lr=C#xn1({)q4vsLqidFuJvdHQ*tdHLCOD^*K{)w&g)72Z{a zP248cCSjBI7Ttes`rACWc(?j)kv8VGbN8w5@!g%fJHNB;0pW4ogVqOKk9!{TK9qbo z_fY;>_4AtNbdl+KOCvens6*4cFvd z9q0+J&2Zg9w|a$!ovxV?oRXZLDT z3SWXOqno{XjgQlrm74Wh)PfG{)TM-lA&gKfQ968;{Hi=q$t%}td_FY{wmzTN9|)+C z3VV^&WAj>*xs*3)(Zg91fw(tOs%!F=hA#CEdUaahaeHK2UM)y^oi6N!(q50x7tm<6 z#EjYQ^+A7zFXvaQ!vw`IpQ{62i0tv@>tM6aYDpxMrIH0PI;~c%7Br*xsGh2WcQzn5 z)Db2AW}3+HOum?}>#y5g$F|oktm~@lr5k7J&ey5y-dF!tGfU?^?9m-(B;>(=mvsbS z?X;fNKhr#Vh`D(%L`>Gx(3zffi)UTp@P!K$DtCYQy~}p%6%ex>d^WwqxK+X0y+WwB zjzHi2=a%eOD;^kIi0XkLw#-++c@^lNPC6xzDORd%OC}wL)&Pm5JVZg4Mc1m#*;7a# zd$zj99!Fx%1-_?2?OL=9YcN8HX`AAC7!x zSYUSa-B2I58Z2rRWTgt*hJ(z9x96QnwJ}D%YQv?o{2}%sRLj0z`KsfgfZ52@lCRo` zG;x=jOU8mKlZt5Aw6^AQ&eF(ly1FbB2VsA40-ZAQQI$v`7W-RLPYMiJ8)&)jdV|GKHk(@7=ywCh6%n(XHtvtt#!K<*ozH(b zpK(1CSLgPD;#7&P?4c^o#xG`(t+}?@sk+pAa7+g<~hgW3gk& zliBaazMFhI_IC1gHi&o*7$eT9i3tf!Qk80Oju*$9JNQ|`9M`PWPTel?Zr4ut&dA-d zyW{;?=MK$X&K+^qpqY<1i<`}yMx%d@#}l!b77I)Oi%xSulp>*kgi^HuWYQV~rl30z z2o7DkYfzm`z{k5)mR+%^q!!c~A(~3sQmG^~pjaZW*4Wf)jmz$G+oRf;O{jb_T#gH05Et`@u+-x+O)JYdj-C8_^4<0&&x>FId4q}(Rxehnp=f>Y~zu|tz&AK0m z=0Mc*9+gZnEW%5#%>TzuU=hWERah?TWo>R@9Lw>3V!Mfde@L@6ky9Usj!cccvQ|P# z+@Cz3WXNL1VK_9oPoPV39Vvg@pTb1HR7%OI1F2J~(lvloCF zt6+6QmIpFmx9hCuoOpqRDinrCK@TIV2~~hZg+8a)Zj+wovKEuN3h%8Rne)HyX{stt zM1xgPU5&M%}tg6HT9eFpJU~p z`_v!^-bJnz=k;}I7tzxUWDc+ha z74ywgb?suic~W3%d`5D5QEr~&o)hb6-Y9I-Z4h>s9~OW1ihIq^xK6|aM&2Zv z%%<9)7&HfKQ`(d>*Q^zruh%SS>}amy^+n;nw>04<@*taXIG2qVU0M!h$uk79et#*O zZ7x+iG~kF@DZ~xcE>vRjOka(|w+VcDqF8Lu>h$`83-}|!9WOQ%3k@;LE=LZSvIbyL z9eV#(cSisRasO_x{xPj+|m|GB{4KZ6oLrm{T zB=QBltx(Xzn|EpS&O##Q)-~ngE-kAs3JoS7_66Zh z;RN#vDxqd(=3wacoyw4Yfgn3}rq`XjP=%rCtfJ==7-*5s=5`VmhZFg3sq1I;0fbX+3A40&d9 z+*<=W3i>}_Q4+J_0>Eo1iBJJ%2u|5j5=B$V455EkwwJ6*ui#J;3k5nNcnarbtG(2y zwwIE5TPX#>tacFT8&2jZrDQV%d#RoTxU!R69fD;9aN$4xK8dn`ui8Pop(?lnMLDec zBM_{YQ4K*fOWiHUi@Mz6wx`_rcVjSabsPy?)t4~XHO}WJ2GyoeAj~$GMVz5 zQEz{I!Kr_lcI_DGn0!uGy%=7xVu{D@hi=Ig?t7*@w55)XMr}r?v-8{EzQOEDFwrP) z^KZU%arG#~!0?CIWBdxFMF#XU8Q3{&LK6+LiIq*bMvv_RW>lEf@G8vdbq2)g4IJ@o zFob=wMNr!WL9GUMUZq!~paC0B;4eYXrNe)FWdn~@8nsHL<~hBdJAtPn76!6qvQDEh zv3M{0B3TT_f0bRhl`7Q}^pSn0GbYxgk_9ZdjUzPY*R|03gqE2X2!7prA`$UgpQ8&K%Q5Yryo7h*z(#YQYQ_BNhwWE+2rYC65C zruCqv)0^tB!%k;6?KIO)r{L^+8WtVHZggdWvtmZpM+KMh(6{8+%m-eY5Cg)?h^4?? zK*!aWOA`xIH!vZWwWKX24|JFcKq<9)sLQ(u_DiNN5DCUIkz4`S1t7|XYYQk6%}ezK zjH=T_WYSyFYoi@oj83;<(k*}3N=ef3*h-A(Cgl0UVkr;Z2TE5EN(ta{IuybRyzxK4 zos-$XdI!~BB-mcKzJirP)Q?t_A1OB!Btt;-#b-1OpQujI;{SZ>^<7WCfL&ep^jsWc z^=ZEO>fX;aFJW$FFfMQE57x$FO~DQ9YC^R>w{h!GynNeT^YqL^_}PCuw(Yf&_8CTq zOVjz)T71hfl!e#!U~@w*yV145yTNyRvN!v%PuSu*8aq@q>UwVD7^> z=oLZ{Q_yPrt?_>+TO;i-`bGqMO%ker0WREvJR-DR+0*OcJyWUFF}AeJF_E(zHOp#3V{H1dy zX-jdXEyXKssa3&m$dPHrlBHB#6!Aq%4zD|6St4;+rDBN!(=HAwFh(-2Of9_xwK*)h@He<`1xf9q;hm9bl4b zRnUtgd)z6JD4;Y4U8M!9a8&R+AWyi%1D;HMYixT+WqPX#gv#Dsk}uwf~5%V zjqHn@iLjB-r!92|S2@3-?@+ZTylBZMI)cjEqYA85*o}X4=F8SNK2N}87h|?~z~q~Q zJ$8uv=HMLcwYukwcvB!Q^mVQ)TwVDRXR(WdDwKe#M`jTb1f#;7sDmzyByk>(d1e1A z<&D4CHs^g@U;fwg3)aU*h1RpH$>PX8<(L1h{F|45ve<_wVJCLu34Ww_uHfH-8XwOb zkcVzFzHEPFRwKL(ZDejUZpv?IxV7=5_P9a424M>~F>7Ah*vMSZbTj?TPI));xIAb$ zWISFtKK@O^&*}{p9cGP;is9?;MLX*Ep#6BC@kjM)9fD4n;q^gHz)*u?IHw`TC-HEWh|l9cYtQTd zWNxn=`qh^nF>7<-K;jf^oaaDw1)xc9qS zMvqP=6Jwg2Q>pm=gv;qvsrUrLt6LuAjQM*sMVkNF{{31ntNhk@xg-~+&W3^5Hk;WrOnCP*+4ctMKO|?0YIgaAoYeYD3|YWI;=1H#dKd zLJE6I@{9~I8eEDm-1aYXhi_{xSR2ZY5czzXXV&=+j%fq#ppz7&ZWa594D8;ASaXX_iHxJ=S^6AE=Mi1-d7P=O?7kUWqMB39+y>nS!v^CfQ*WR**qiIk?^NHV+hN#YywkKJ{VexvL9`eOhN7XtU+@?G z4MgET!$|=tm`Y^|WARv~mCL*HfqXC@8dDt8FvT#XX0~pQVXinQH7D&4;vj$HEd(39 zjk8^|-LpOO>u)UFSiG^}#>NGsjI2(Vvg*94h)!xAoys@&S^BIyqmK!X&?! zrRKHtspj*|wrkW)Uev>QU&L=<25-X^djZ+d@I;-@>+cDA1A*gyl2dd)VXJ|LsW;m6 zdShB&W8~r*ny4ap7$H@%j*WjLi5&r!1K}dZ!8nc&;fO5e%qPvvJ7z4IUo^jCX3ay) zj-$c-fwV|0V4*;8Zx)}-{vmq_hGuzkgPeT>HdvIEvUwP=x$H}L5-LHL=&CI3fwW5T z{)pjf-*8_kmsTu9T1LS7Re}5z9KWkj{6N&LEdE9Ff;Ab})oKbTWg>rrvK1mB51ZPI zzJPT4+H^vMA=+e2)x<0?OsjJ$!qtsX0-fT=q1qDHgk0>$a1)6voRNSiwLg_xyt|BWl|PLKWI z<$I_9;ib{V;I}+(zYu?mdFCBnz4Z&DniJ)(Jvigc*H>?8a(Y5qepNZWW8Y2Nt{q#L zzIEA}hpv6%9Sz?a$l)J7@P)2B7t}AS4SZ|EeX}3W|2p_@$dHmNn zY?&We8Q8{eQ*HC#$KCH28kmOA_3ZW1+|VlDCVq==2Xl|-9^ZeH?6Vp&GMi8Yn?$q4 zYIiu*HUq=5L`*YFA)CZre=B=r|sW zym<2AekwE!;Xlh-82#l)7qEMdA^g!1k=Yl*A#xH~Bgx`E5!mPOar|(_eCTW^aZJ!j zBs01Qd=^#Q5uAUcOTQRowTdMquXrGEma0Hd#B*YwbO*kJxkFN+&iNEnS9yiHRa}o{ zX`q+y_4C9L3Kl{Fr$Bv-unnv%^ODIv%x<}+ykb7qd~y5SJFi{8<<_2T#FNNPpSkhi zo_p84ggJi3^G6bU?jBloq(3q0x_Vz)3>6P9jKF_Tl!$hajBn-dLup1`MJ~!v zZH5d*yvk6W25%aRMio{YQ~-$ji?d@W?{|3G~-hn4+Yc@gz=$(FvP0mU?i|Na5BII%+Z(= zr#nO}=4(wq=$d7C>xR~Y%!U|2TUd$B@p(5U0p?* zHa9D2Ypaq*>u4%Fe4*lQBPPK23xR_;Wjt+E8QrzVSrsc(x+(>#ekOEH7wAyk0?B)w zXBAMamX_hZmeyf2jNVmzg;>Joh{x>lm?P;!30u^MKOsNT<>Sj^C|N*`G!zKPjG}cw zF^zwy&Xme-FWB+ZzS!97hJTq#j&lzT%saep<-F!%z*(3U492sv@AvGC;ivn!dok@e<5e{hgrfm|qwF3L3-&Ays5HC&Bb`SxL#f}EGP%GTZ1eOAHhPF*p9z1TT(_-w@n_JV?@ zOx--3>#Gg`6{rH8%By1NXAIR_>x*eDeqX@HsLU}#Jf?{(#zE1$7=?^LMYZw8*k^x{ z7Nf9UQVa$!t9Vca4{SHGLKV$`^ws8~CE8fPioSkT?pCpn-1*FttD?KVaPJS7-~PjU z7rp!dHvMhY@DDAMCl#j7-Ff%c_*{NP%+UVT@9bQ1=D_p!J%8gM_8-Ah%JYUN?6|J$ z-Eq0EJ@&%isT~4H*$1eU{YSZZ0bYN=EbuP~tir39RsK~0buQEzY7afeKk9v!f7&ZB z*dK5Z9kH;6%+y2#R|Ewa(WDLyF{fm!2B(qiG`3nyaJmlkBJ{FDOj7o!HI!M^&>liV znN>~L=?JC+)KZ-sfdXP+VPIc?3mj*X$Z_fSiuP#*aR$ylC@t+&0DCTU5`lj>K-{l1 z1gIAlQxS%`^jT3s^0`3ANF?hTAXIm~N56*Q7J_R1Jz_IRmtm|5QcvU)LM~+#g@~2= ziYczM2A9u1>5aGNhF>8L-86kubRb<5?Zn2!wr$&-*v7=1m>t`hc;aMY+Y{TiZ9BR7 z{(J93t?pA*eX1Y&taZA(_TE{#sdPV3cSr>D-^Q1x50nTEiao7%?<7u7aC3hOSD+}+ zCK92YZxp;Oap6`H&BV^?U>*O#v90c^K8i!b&rRUMOv!->)X;nVt%Gp+zp zF-(^0sbb)t&WR>IJ|8kY`B9!U{Wi3o_4%-@jGzuvAvnZ<8w zPK4H&SVQ8LWN=4rU7JPDVZ76@K zt)m<0&%Ryqq34eR39GFWw1PYuOC|1f$?V!Gh2Z#9_s^il8QQkw);RX~HOckT{Safq zv-`n8&q0YTXBnyP@wUZuTI%=2C9y_x$xh>_9{hr& zX3+C4z#H}j9Gp!zG~pKzd-^4V@gs!Ye&`9;IW-ptk@yH0510aFZ9Xt$;RIjXFJ79F zKq#6f7^;aaj4d*d?Hd2kc>%isJ0Dyd)JC|{Dz)w5a1q?BS|LAE?wzVAF$#*)7Yy31 z6+TCQ6FWgF6M+}~rQELZv!Ig+OxT_eO?r`{!HR#76+T9&>tHNL3Xfd8)^q$V15cK0 z2fn&E-1!$ENMgPC{9CR%LAgz>G{! zXfyFWw1fioPA2(Z=p>Cw;ODXjcBS0)t|X3OYk&rat~~l$&xDJm&0oV{Rn@RJr{`sv zhh54~PoFjr)1|&X7yv@Jg~Nc;yPbpz4CwxtM!p8*&N|b~Lj?b9sMuL#W6(~v$WZ)s zelCJLq#SMr=JQg+VdM^($QLlU z$Gp2#LlUtc#yR1FE>WHn(aSEtI2r!k`&vaZlIfNCWQ+m4c%mco=t0cOcR>dB$1{3V zk3`R!@>$@|8%iNz@!;+|OM1G!XzkX0_*f=^jbx5wBP~0*+RVWzPCnhHYX*DAV`#njX=UBbQOG?EJzi-9pAegQGk5eX^j5f9^ zVzK@sL7ryI;mbiH_3nsgHn|?NpJLn}Z;<>iHL)*gTjWKhbkpy`$WZ}4UIvsBPG~0+ zr>=i%j~3cBe1;4@at<=jlcZ1)JA}0KM}~fst_ma`v+eS+x^o^)vI>8SRoVO))zJZT zIk5Mia$p@B`(k+cH3S@xcnl82HKD{v>AnzjPqWPp3x4R2o zArxV6%IWAz{}H%lyrKKd-SCg2 zEnSQZK@_brYVtn~J@WGxhnyzDz7fh|`NIJXnfG&Q#_%Y@r*7x=td?CKJ$eg|Ig*1{ zRwG?@hQ5Y}n4ty)#;cxz@K>9&XEsh_fUZ=J9ezDg*9fgzYc6am{}AaZlUmYInb0{k ziZq`ig#4t9tF9KT>NYUFn%(?4XwdN(98+|VN|sVJ5LS`alRkrB@NqK}5<+&HVgkHP z2Zz39WGwd@JuAm1afxrW|DpDEiM2d} z-@j|(?b}{ZR^X*#6>@}cbkDMV;Xt<-eG;}#quUnJ^W>)w;wK-r3z9BRq+17EgK^EaF|R(RPXFNA5s84$-NP0c52u$wv7dz9i+WG$k5t>s?B3 zL0uSncz14aocIV7I<2}jOTtu0j zHl{^+c|9DBFT|3Zqk#z<8h#sA;6R^RY3q2=9 z_SFD~&ni(g%d#vtaClovzraKqdd+J@7ks-uHTB|(8DAotVJ z5<;-wCNGlG!wfXIQcYbU#9+h#(+z1;)NS6UCypu`u{AY&n^%KME>Fcq$Mbrd7LWAf zmj^Hm{oyztW?VpyszA}CXiuZ>tXSzacT;}#=YczZHL3}k_i7!KQ{PsKWFbq{QkPzs zV~_I}etD6i2xF0szMa=`C{?&7QuMXM7b-d&Yc zON&G0A8Vu*c*{1P`tD?sJw2f5+x6B02tF^8TD$rBj&BXex>oLMBzcVpQh(;Og8~Fi zTi1eoTrPuk`za%#ke37O%?O)MJ?mF$dN1RJoBmvUU|gpfd&iHO)ju%@qSiL5BY|!V z!9Y~Gffdt^{uiuUM5plY<=fTbWaq4SBjp9o(S- zH4gFzlM0DI>?%py>1z0Rjr-)&F*E70$l9TZAYn2lV&nPJG-T%*y*1Hoqy7a*?%+Z+ z3SG{`+LdBv5vt!vyDCOc$;VBy>p*J|dK~JFT3cddrMqChdrHdUGBMcEWAVuEnYqc# zRi!j9D3Ibkk|c&O`aX+HI&lhij3)A69i`!!n7>*Wc@W72&UO3hqnOuDPv8PJ&mbSX zjc@+lVhF|ppw!YzSf&j8vh`r$ubaZ5x$`1@28JT0gi2XnKu&_Y<*z=y9>5Bdc$1{n z7bCQ=FU++x#6->c9czc{ix`*JhL-sTT|;6%B%t_~gd>P?Rh-7vBVNJEY>Hcp@#5#; zlQBN`8%A1rgnoN3uKi?6VoQtC;1P5Fd;T*vCd7hfX6=hRCFk}IXQ|FvB%=LGNN<_t?-PppKxiDiIrmQbDu)n8g@2;337$rQRW{kt6=D zq>Mk6_>7hC&!-DeG$@5lGo=a9&Myv9;2_5PMAJ!f58{vBd~i>mu%afs?KhuC%qEd9 z^WJP;W7GMQhCI{|+pS-2d(Fvl!)m(2XM+g?3onLn&3;}{m%WJ_q*VRbHRPvPT7V=;broVh7L;)l@}?u&T;eM z@C0%?@!4S;22P1Fotv2>MH7W?PJs-IUOW9KdB$C=!A-kzPlzG3rX zYu^W#78;MUu3?h;ll!M_+>T17RF+F!JyLJ$hpCwRCK86oI>ME$>zevZCPsUq zPh19j_sUz8HvYfS7dZ1e?3xBB(tY3a6h4&9Ffp(Kk%a+?1TZNg)h_S_OJOe(IpR(3hDYE zYPv&-MScu9rI#WO2*rhrk!qxDrMQwte8#@>R%$Y86(XvjydaW|Ho8pS?aStmRzYuG z`#>GG>~7SrYGmA1UWn0s!72|Mn7U3A=Z`x=>vB&OS6JUBG+SM!$Y;^#bWylxP54tb z=CWDKtSEar!MQ)xvg|f=1Cd!CoLiw+F&(mDg;EQc8M+??mDX}A=XvW<#G`xdX5_-L zq@J0V-EM?JmUDeJNw;uQ0snqDyBV5qI|7p_sIUC5sD$pmDNnXPHiPWsZK(N_KHaxV zj&6gS`0U9yWUN{ah!2_q|L#YN?fXt)G9;*eAhp$L#)&o{w}AC~awh~0oihFi`w@12 z*B%YvynAeOGW$pFq~_|Ip3_tfVmOH5OM40E2!6FQa$!z7F-r0Ed=sVMFo?wzYXj1~ zGF~$t*~|Dn6nvnnqXQ^$q*|T+L>Pfh2zhN^9HCA(!3E6Gak{ZFekq3Nd8d@h9*x*5 zS3H(KK0tDaEmGRaZ4=|o4eV?rBS+Jy1$>qHBhRU%+Ogm3}! zMqt2=KLwFvUU^r}(Kt~2;K30-;0S(DIfX_$umw81QS7a0mvFd7n+HNq7UHiqjl?`C zlo^?YEk(Fh>Nz!gR}dhUG_0%kvo<*mJOiQAY-?z!M>jLCL|c+gZ5A9V9;lu|>!e?I z6aSt7y@=*FULxnnT^12<+hR<13~SiE>*9r-L_-kGTqA-PasxU6;{t&P(+6kseGz>r zh*RyKhk%X{Gtle@dT%2NVnWtfpd;~Xg+0P#%%!<1mTSLlEQGWc^r*O5>AAp{wqIPO zpXT;wgseYpdgT>5!kVC^67b2}g?+)OOX&0xez0F(MekucdEVR9kC9B^ewA)dV6akS zw7#8k=L1}LZ z7;+4%wESJ`wFhY#h}p5w{2>qCd2BRR8ikc!QVnn4ti^!?sV4(JlbnIOw|OwG(U zBis*3o&ELWTq=SN_DrJ;CPtF+L=rE(P#t&4xtZKzTq}*XY@^-9s+I03)jTVW1|3egIF{NJ!GvMg0N73} zOkOiKhiIb^WY$PoC?J;aii?kpS0kj_-BCs&vRFXtIh4tFe7*xdE+d>qGLwL?J=&81 ziimH1sqK0(?KM)B1hm;ap6R%4c~!$f=A9GquX`38c1~9Dzs5+g-T1@o5Pt3h-1r9cnm^0{rV;00eay&6(8$vFYICFn46S zlcQHlM@YxOVKecMrPDshLkUqm6R33alj=JC3CsF)yB)K%jqM*9K_f$1edV*==~$#y z*%P~~?rYs{*YMekWfZAbkf{0=C(O)$`SQgpdVMl8*;;F@zyjMK-^I~Z&p>uYXlNF1 z--vC62C?P;0#u{Rn#m?E@a8?9`LjZmJuX+Nlel*@j=3-yH>uOBq-B4qukn_s>#&3q}Z1Yu5f)j}Bd%~Di`xwr{C`*wo)nt1E?=;(YE-LQ5xUtW-iRM)ntiWq~N|dUo|KlBqIx@@E z*BSOk1w;eNTIkn(mR(p)DsJ$u=op~rK2)SeC}XPlGSjC;bxH%JyOyN!S4S%ZfG$Ww zoOpK?3j|$!s%%oa{WOdO1ipr2hzG>N4qE@dT8^WFhxHI>P*cd5rk8cGC}$!ilccF* z2&kBJrI=($JnMT}75U@O=5|U#s|rh*rpQ`J0I^|FPFhs-ehkSu2xE>;?lCNqKT?#R zy(#jPZx!@ZWOZhh|FNjc)U)rl@E>XJpw&Y`whQ06NB86X9rNI*1C*e`r@*^otHelo zY=y!_t$>x!oGT5fu6e&v12Z}@3c3wk)hHTt?RN#(#KDNZHwIxv><)e8jwn+X^3VWx zfYYqiLD2Vm9r|V_;lQbwS7;`;B@p;xmv6TBaNV$ru92*Y>%_IbTtsJiP;Bag*ol7P zU%}$soF`qzdJ-i|Wf@F$5GKWCBrC1P-(_Etkc6Q``fud{NrFUJW=@WVt=u|t2;NL_`L@rg=o6y638E89(`c&J5V{DaA@c zX<{&wTzm`hF+Jh&gk$PYe#fLS!=_)_LeHTC@1zh;t3)ANOcqdWLD0W zWzDaxodw2%)&Ce~N!k?+bL`WsCMp%uIgNuk)9NG`;M@v;&QV9gc^q33w{ouDk z)(o_nH)0XB6OtMYugxz`YUyejUi;-D@upk$M4*JA*vZKU^E4ce0hykGw#ei=G?U)=342zE>nkBxxfzEb6++<7EOs`_0x`TBIq=qlLSEV&i zwK?oyEP8IfT= z%A|+VlzF~ILl6y+zb(oS>n$0U(mVLqSb}0lzRT9UyMp8n!rQMzc5|Y}vUe`8(2NgF zx|<9fW3NS>FH%pbfM1vZ?oT~Tb6;45UV8IubU*EM_2CG>k8L`?8I;yQn46TWKea0T zun$!OWP&q>k-=3CkyVo%= z^}dF%))a?$p2QDcqOUBA!w^cQue|TfUo2TfBA~n~ch(?fh$;nFf>HhhkefZGycAR-2F@s{?z0c zr$Ie^lKl)f*dL4fzS3-9xvL$-=iT7{d4O}xNX1#V@^2g{@ZZ%a3iy3auV7px@*0!R zyNBIW-64Gd>Du@cy=|^`uC+T4_DKECqDH-Jc12@p%mShjva@n_V}e~gpCOkTjfKNw zFg-&z(3LA`oMIWhBUhi-UNFXlDqI7F}7J#=f8Q{jiO<=#Ncm?R+ZB zhCsvieu>-X%J*yA4Ca?4m~}=>+|FhG?WAee#_mxr&8)t5(d-t3tj6U4lat>eY2zD) z$7Zd|@?#PY_P)e9dc?<9miP;=1v#LlSI$tvSQ-RqMOH;8)RCCvZRg z9g?VW@zKD#^Eoy)T@_`(vEyH2%d|7(-GR*-O2?uk?$_yAGp}O9!XA$LWcjzPIWr_b z-Q+J|l1C9zC5(E_zEZemoIBd;e~Ri^;pUi)`cg5Odswf4{UeXqTbb9iI!#QU{EDuO z<(9@c0DZy27AIPrw6p&<$5qFVlMz#j`(!R)jigh<(LUcHcm%CIfmP(0MILP!kyuGV z&MPdb6vMqBurYx}T6&qoJUA(TBvnCoZDQ`>(gu2%kkBwCsY37fFY(?Bta zFxF9Ue7p|+6y6MZaO)D zr5dk&iKLX2RSSsDb~lIq=vRYoKBQe!I1MDi)J!j9JgGIj32%5>#`B zM{!MzX2VCMUIiNDlp6vm2?*}p&wyC__h1bnLT1E%|d?0AaSU+o6bt7}1z+ zvLAb42G$|$OuQ_jtk)DGEQI~wm5Yn9p&Qm0~JoS(k7Mb%EZ zCHs?BO*rwJ8lSzN@~Y3@=}C-eyWpe{=wpBH1}S=wr0dYTcqrVvRg?z#Owncl%dgX9 zQk2lXXpo*(-n-cZMyg4z*_xz_$!pg*zx25A#5`DG2gLzVigetp3m zQNoGQfup{nRPs5|;? zRUaA!k8pb-pJ`8=D9HaJ^sV0kkmD`5-NG{=&IEa-t7ZhhYmhshL1{i1JOi)CpBNV5 zQsnl9{mhi@@}Gn420x@Y%mkgxByj;bY)9(h`7k*yu4@CzUFzOhSNSfxfd*DV*4tp~ zxy8O!`tznn!5L!Lvvv-^>l}aaqkIO`EEj?aHi0lu?6;^BvT}bj()ZXQYdbT2iQ?K% zGn~4+=5Oo9$4U~;Zoy_sgq{T=PSATbu;ZkdF&Y-=u&DhuGH@2C7o}5HzXt^?rf{4w z^Gl~74`2>DM{OJYV>K+`FONcC$BF#AT14uK`>M*O@P2!Airh*8lZ0hcG^Pgz6;q%% zT3_Zz2$2n1axA=0*STzGG>H6{ zu%Tc{540!*{vyC{;S}|s@k|%YnvsxcQqd-RG;8*s=_6P()|9ryrFX(DJip`Pr8>`f z9(iv&u2E24ksZY=sLxLJ2%Zs^>H2X@MgPfBXifF5BV#Tl%l4KwWwrl-o~}PCb*iFp z8x1KlYtGy{?Ia~~PZfJYBxS*&?cYkA8SXiy4M5{gVa&-o4fLuLPLb(@Khs)<)16t0 zmTfBp*qf4TBM#aNogS-m7OX3JqV~z=?%6DLg&fEn;Ye}LD)YxRK~IQ{FiPTX%SCRb zD(H7T16iez@wp9YLy2U9n=7M($6Q-`Dqtr$0C7GC74 ze(GF=5B5Q}H*b4~(p{3ZqBZ0Ou4A>1xMaN4b9o?pAC)D-8YLLA&C)e`3!3 zx>XgwY&OIAJL)0mg3IV~&2^N7eoeM?liz@)v<7a0wQ2EE_ zc>i%tQs*4f^H7$d>9+#lxqtHMZjdiI2jYRUuf;KSs~zOe{}R-teT*QhLI0HtG9K1HYU7lHCG_TNwTo6}CpKAjAVCV-RZT_q(;-Rx)^*COz{&hfdD5tcjV9yxiT>t#Q;C%$29`e~tcE2nIo z=K`HJZ<*Kgza$2uC z^x~-5?%+%z%WL1$GQK|7etPDDJ@Q3ent$};IsdH=Kjqde(L!W1Z=7}!U`Sa>q1S0C z&>4|hwAHM4b$P_#s<+>N$!chr`I98ead#)pig8bWuHPnHN{fDS_-ONcfo_GwR(F%$ zRukm0z8va-PMh)G^|9iM0Ydaq+434=X_j8T-B$wl>^vX0!-rp%lVO>tLYLN7zvkC) z#P>mw)?eod^SCKJxwxKR{8O}xkCh>CblPobG1@Q?$wJi4-s%aZn3q~@o{_(G(-K-2 z=_n-ixEEKfjukq{wY{l54mvOHabLEMbCe}?2@t!yE2r-e6KJ<-a9bDSaL#mKH1t;L zJkC$D#7P-pIXk3U<}UsTQweift_$ersG_~dyBQ@Zvckgp);BW16pnYYS?vp=&9k!m*$6-2lO2+SWp3Bj%a_HF49bG> z755Gi95FnO6m%Xo7xPFK`AN2D$qkC~M|nypk-WJjPn_I5At^5;U+0T`^(D)z5-0@m zZYD@*%Ej~izh+1Dyc%g@NNbiaqG!uxgIqx&!zF{7OCeDpUlM_$?*4EUKF)u6k_dHx zD(s=AOALyLNy-cmz=~eHd z#;z>XJ(5QK5cbCD!G=C0b|?<@fwT>*hUkmO9*=1YW(whCHp5D*vo5A+^c5lMKS zUrZakFZCU-EnWYZsNg=XQc1bEvH~m@+DB3cD)Rz(@lh<)$vtTj8Mh5iUya~ea`9>y zJC{j=_u~ECf}w-F zBh@)GD;`8!oB#1};BShIvwYK?pu6cApa-c&UpET5{_&!x(a5GfgG|h>u8c~(D*xz; zWOWCSHF-_#YA91Rl#UNE2sa5E#v$xb1(5{7Aal763$bDHP3Q+M6vx}Z+nF@htTx;7 zrDXfjQ!abXGiz7{L+D7aq^wS!)_E$1e`0BO+|}+L^f3(A7X%{#;!S zrpr{vOoubo_Ngsxsn%&ya1(Nqanl|oRLlgFGu1PdGBvJ8BBVk~W#`LIG|tt}RV<-Z z;b#j^=kHH7l_-yIc(fLCcLPB;78^75rddXr&B(sKU5{F0Be4$uW>UY-TXg%kPu!+vs;b;4Zm=1~hk ziGV)f5T}gQXZkHqgN}-%``4(-F zz%sUhay5HLo3x^4!Sqx`mmwi?KcNLEYBnUpf};pjaBMSc=i1$i;xu!BGrt>K;t0eS z|4jrn^X!=(VnW8xxAia=%hC{SrXMt@1%0g#eJNz9guH_nqz=uG%yl3h7C5#@{CFDo z>N1CDL<~+4^TczkPlTxc5dYTUOqe_5drrM_G~ew{K4KK z3etyW6xmvWxZ+I79QDTkcwl{9)?QXLMv}jKps9=j3 z8L$lLl4EV>8+TY_69t8)fO!M5K?KEibW;Ml)--x5D zavdvd;IIW?u|H@{pG=0X_T!B7hL|YCVs5*etPO407UHo4MRqOOVn$nYwi|Mc?53D# zEG$^J_^~Qu2Bx`$Oc=wjvk}uMQsWN5KTw%gAR&?J3j##p^I$sJre*+0X^)(rEM&c4 z^j<{IuR^1N-6>a+sfdYlG@2CA&>f&Cv zgwB6R5nvVTAq-dgW3>R?8Bp3*0k&rCc;eV!JBkSAy&q<(m0S=L?Km^TBi*P_R>MlD zLl7ZXPySN)WH7%{7`LHMa#G+B#g0T@l!CH)LP_rac2G&EkaA3CaON<{&x6HJ_Gqbw z8k+|Kw%o!5c<%A$tN zGDW3Z!}@9pqjFdhxZspAQt=0^y|APy%R*UBqQ5U;=^+JnFA;|_vzkd{*QOFnH;j{QM;AFo!FkoNP!RQSfqa)*dlx6}{Kn zmpsSae^m|r+U)?L$1&i2!mXrJRY}N*EMOHvZb_MU2>Z0rb=lVcdP+7pSVxLhB5uMF zSLydN@0yn2Zy?XES*G+oWm@bwlC(NR{U_46f*TAxl)O}0ATPoZGp#w3FqQFbM$p5i z*VM8Cqf*#6erpUo2A7Ey2s6+x^szf?=^|71Gc%J?^nVAg^SJ2x3yF`**@*6C6Xq!I zr2@nXj6OgK+hN$&ID`IHL7ftG#ynC|cX^3BwpNn;TQWK{iP=KC{oRkhL$|-&{3Z4> z7-`evkjnO1imUvR3#B9HUL`u50EdsJrvrmAC|N@7<9q50dak4M$REpdW)#e2E&X8r z{UIMP3cd%dJkoTVS?Lu9izf6k8h(_>tiO~Lk?o_-!tH&3s8MlVP9Y^2-5J^aK54{= zo>+E~<)E`vUBPdJ8hv;%-PU94_5J;>avy&*jK(G)D%C=9fr4fvOlDQrHFGp4qqGsd z)QZeg>`)PW{qQ^HdYEw`5kz0QBpAy!iuAQ6^)?DHk|QYA4VjI|A#_B9#K9%xUL8pV z>w-^aiBG=Wj2NIuc<6i!Q*o^1#Fux=$8+yaAd_v870osU*NP(yI^IQT^;V@k{t3lw zn-aS~>#9~Ko301(dkM8p+&Usk zAkc0WD|uUF>}*#)hX}t}bfN~c{`(vwyfE#eoI`@fgXJPN6zb~`@TC)aRS*X4jQE5^ zi3K%H0nvd)!{K5jVj{9Pwt{8l z9u1xS|7G*>G0Oe4Gk3NiV&`N^VIG1Y1oVE7$K*312VL?(3@-OVuQd{ric6)LlI&Lt zu8awM1ECCL0}&e{w(n9+ano24&FfKh1M1Hw8bjA}FAvTJ+1Lh|iViF7iyUw-R8VJB znw@=&$!y!qViaCBbx)axlb3dPIYLi!1(8l&65e$;)(?*31#DNg(K^YNA4?EafJK9u zB7@c48}IhmUGwG;-ygRHr869VQuqu`uXTJ7(j@o^SN2^v1+!A(fRM*QEaho)(cfkk zy|(2UO!M#LWT$*pGxxp*+#(9Mg(6^8`h&K^m zC3#Ra?xcGF_mz%Z8X8O}lbCerE# z?qNM)vsCbA*UNS* z_hb0(yQ7yYx6bI^Fsk==NUL6I)&D(h%Op+2$-)B5&d%|_jQ=A4WpXh8FZ;h3(f^OJ zaB}`H#>T`&^xye^_Fw$J>;F5ZoV~-65&o|Z$N!y$jgy<`Kl_^P|JO~aDf?OqTx?%! zK^c}&)n3ic(!}2MClNCjdy1*W0Fr;#nJ`=7OT z4@0#3=P!~Cvr8}YOE0&Fv5jH71bGox6cnPMAs=w)&_5(Yxl}pO3t-Ub^brfF6&mPC zLR_Hw_2N3Vw&&|BzUYGeW$gWp7PiD0o2+%XF^$;dRIe5?#R9p~yY#8O z>6U{Z{BWsJsb63H5aV%+tj%y{P-nFr!d`S_Rtzw9A+B^Nvxj~L&C$Fof zHT(W4apqv{Oe5EB1zW&Z1}-p|;`_oqjA4KL_6~yf{I(wO5wVbOkSl(KKqii~gM%h^ z|L`Ubpiqu_*g2KxqPT&cFI%|w~y$sbYNx!Clp zH4|(G^*A8mPSGBLPtziTb+k>PTi~PzC+CX7hiv}Nk+u;0Aje1OVuL&H^YAu)^4JS( zgUu(i>TVzt@W%5{L?6kOP!(&+_nPLMu5yHp&C@!-s_kK=7aOd`&~f;( zfApZbWbSX;+S_|)HXG)AluMFZ4FI;%E zV=9GprVw++^N-q&^qg^gg0blaA%Qo&1ma6&`rG0@o~V!}ka=&aXl=uKjvQMHUb?}p zsKpv2Nk@cE#Loze@R)Kk&P1O**499R9KcY3fPnw)eEYIH6^Jkm3nY*F`%R4#Z2kgt zg+EqbEOh$Y3&;!U3tnb$ysp374%idZ2QPCx<`84rZNjFM0HLqx6Q6Ro1rVwT`qQw) z|2tkJ&z63rFcN6thM0Z+W_xBgxL(Z?1|mp1QHxgA++Qd6y?@`=YMa_yk>b#&1Sij;gEJs?kT+3Mnid$ zfLWV@e&mNsezu@~8==s2?cq9;WCUyIMAChwcDThn!h6F3;VG-eesu(I>Se(%7J!@V zg}eUMjxFf_xb1eG9iFu$<+mn&L9P&&9UptF?TO?Q_Ar}0i^58$1W1<}9shRjy}d|$ zQ{&NV6@AEkM(u9szc3IKJh`3yDp?eQfs-UuWn{@R(QX7i>?Y4x~}ZBh;L; z>^}1s(9BTtS|dbrz~A8HO4plQKVor9e&>e$P5$khFZAQ~;uXvr#s~KY`v-ym#AwRX z5mX!p{{@$BR>h>5EBtOu)3(0ByRF>pofb-xjgPHc)v|K$vN1$ ztNyDY;Fyx7gpLN6GK0)Z+f|VRKB1QI9Fn?Y4-D_o7LU|vi-G!sfIH~2+deUHjA(kt zu05P2!4&1+uHF%8ZD5E4>$+bi(V$x%qKFZE!`^omjAorDIS}ef5P?4w&)g;hlSE<{ z|3-y3-@u=W0MwY}n3(*jEBiPQACo65XDl7zykvO6Z?)CvZab(%qN79FHCpr^tNt^-rjlx7GB8IDZyKJ+ z{E`=>yhFL$oG>EU{u>$NQT<`u5T0GI9@p7Zkq-9uKzw#0{u2{vf9!6!0}=xb)W?$m zY=YzzN-F`YDeW`vE$*F;GEto+=x5Tfas&lPrk(iulY(YU*5G4&RW;#xx6bylU>`t2 zn0Gq0dBudC=N7;J1oiZ~B(l?-WTqJI?N=4l29qZ!Tdw)zL@1`0wE1{WgQPAYYisOjYsUyV33G;%IoJOEXnbb3^BayiLUH0%$6npGm2}-Olyr(_n(9Y%6kGNLH zf`4NoD&5H``jBv<07Pf!Re%7+STt@5+RB>9k*2%!V1NLjb9BpFs=y}bHPhz4vd6Ure2L)!@|G*|f^F`7Mjz17q&eX1CSHC(yV=As@Z|o)|YiowmtZF(~7S>{XU5llUDXlFYoKaVuS=8VQsZYjuk$w&F;`R^dEBB z&d%9#Z`hk^J+nEPonYap9R`F``LvjQ^N}t6aEB8o`EYH)n@oM%ZmTcl89!DTIJS2N zrt2E@S{J3gfK^+K=O8otOAdoglSK0`AEQlM+cu5^15C8m6fdOj%V`hM%8UbP&pBMI zvTrfDZrfCyVQ`f~cf+r*o>IDRo?M=0uiAAnOg0Tc zxv@kBLX}{0$et)&=6Q0#3#?;Joan%tHkT?edkR-|3LjxkTqXwH{i%9{12;W{6l`lZ zH!76GnF0KRO8?xvUqt@@<mF?&1FYlj(3OHCF zx?Hk!3|Zn6YUHNS}YMduN`}8j`LEd_Q@)tsXXegX|&($2~Ki@*w1Q%u4yTamP%# z1&Pv|J*D3Yb~ex5xlc8qq@NvoW2M>fY{wEwVB~vhZd@sW`7Pz;8{{Tt;3aL{u;~)! znYevw&Dg1mN3^BMv{W>h`=ydz-+)eo`0Br_@IW<>+^x**H|*8w=qHzU{%2e zC4=S=7+UtrY(2*_Uown)AxsS$-z6{=apBu7Ndi0}|H6 z8Qs?XnZ=<9TID^;I+P60x?I_1Kt&0p4t1go2*NKilmpOO@CPrgBH_w)o3`=2#V>Y% zW*Ys=rTgOJia6VVj_$0y%<j*>hAj?E*RwX>_30J*l28r~o<_yNc)U0`h+(t~ z`Zs%EuwkUv_Mpx_|J2UD6v+8Y$UFQA@(h1cU*C<^0xjb4kW|VAVC;>-%HWHwW|Ged z;}4WDn=CcewRP0F{1?~n+Pe??cdl9)cE!9gU0TVy^H-i|n{wUauKVY`yLo^8W7{6U z(PML3n-hVkhxH{*DznzqyXCPQ_Q(K(jiZb1EIGtCUx%-dDb-k`~Pq&GXIEYnY3t1sZa-`3_G< z($vd_O)ML(3HoG(f#G)#dJ2UBn&MS9n^wg(MZ>Hf4N%%2 z-p{H8&QR9EeO5o3Q}rsLd9)VpeDtF^nTd!h!}pI5p26CwovW@PO6{ zJm7?zbn@9ACJ(bfz^0W<#>;+~NfurBP#B zU|xJvCQ(>$)2SJa+pgP#r>vNssKIkXmZ-z5HON9k*Ya1C7QEUy5q}q4hv8Qck}Z}@ zKv_^(c7m}mf=woMaR#34A;y3_?;h(M0X8<4*7rW{<~WlalPRtOWk+4kGN^r zjgtYrp&4ah;}L2Hq-6B8S(o?@3nPCTY|;bH-IASf#DVh-^pK!MG{w zFuB=q0!}t64Q^w|8+3;d#vZrF2Um(%2OIg^P5=k=JpUXPJw zUExs3?RLqth!TQ`+l8sa>!^-89UiY9nC;0!4&G330GsuXekKRyiGG_qC$@h*4PyJC zDK8YfN^8jZ99tZZIjG|mvJ>28gu6gjUdyYzyxx%W@@h@aTe*O@azUZw4R9sz&D9R8 z*Xr*pPk@18e`+ZFiZCfrWp205tJBmkns|4!{Np8`#y2dg8bTv)FHz3g(9bV_PjX zH8Ovlz}~fWEas@tX|Yzi>Toz5sUtf!Qxdhujo&Pkt z<*(k_<*HJP%DE`v<8Z{^G+8N`aPDQMEhLj^u2_Bk$pu*pJzO;84`*LOtBkjKB}Z3>^*l z2J8%PRhx=WTAs|3+N$wBq7K;eYHc8z(+c|vP$^m`TIXBos0>!~&{Ts4J!biB_>(Zj zgkg}yVhx4EX0^r=NmqY|Ll!1$PSm)=19T4{p-3&OS#Qpm>D^{*E-O9rE1>ie z^cG}9Zs01=Z*JjOYdDf~gBINDKI10t>RPkaT&t}9URm8;QRaUnAnGykq)E}Da8iG@ zy;?E}`rh*InB0@VrjG=6qaKlJ5gigSb;L2V*v>rZ2Ypg0W$ z_zKz+>)+fa?3V-I>Q4%)Q_z?_>qOQA8(al8xB+bNYbZbb3zUO33br^R*kZvNiwsC* zWybrjDz#1)kV$_@Me_n~qTl(Rg(~H0jXBa1Xy4r&k6X;QUNdn*$BNhPxpwKO$>!ke z{J5oi+Y+m`?rWtxhGx&vDD-ND-aW^*d{sP_oz%InExU2WUc7L{G=BU#SJU*;!EJ35 zAOF<{(Dw$W?!-QmSn#yLt+`-SCuNR%b2d z$5>}r8E42Ib|h&}J#pumP+A4x5;$x;j(Sg^*erRR&b32%j$o1=T33#q?)2 zW$hTDz?7IZnQY-mI2bWt%tWFQLlk+u8iO{YQ8TKHx~3E#z%Je#6)$PB*}TE9DHsf6 z1|wzwU(J748zLryA%Y|D!|DhYvR6@51Gf`5#bR-dS{jQgJ$oFHfGQr-YaDq`uXg|+ zJ7PN>959^@ze>}1-DA;8HW0ehh$;AFu(Y?FVKtug|u3{Q?gA&wa83u+IvUD-rm zs@?Q&%H;Yc;5uQu`K0!w$bQ`ypmrSN3cwC?T%Es+u4N+lzQ|{hFqKgbi-!rOnv5@< zUiVVHQOzYd6+W!&TvfBgH^btqWm%KKnrq}%U6-k{MtgQFdl*k}NkW{pTC(eWY~iC5 z?7)9q%5a#8ggf06#@+I(Xw(p%YTq%_--z$Kq4Wr|exaSU`IMZX)p+2nwV>4;D1=IU ztxm5B+4Qy$gXDTSF;10FR* z)}z9CMZje!$^%AKQLd0HBu*q(n0=_%$;*G0%^IiMnRZgAQ^f_1GD$?G@-^tpUNbQ} zBB+B1aNDW{C8OOMomABFaG||gthI;Z-?NSAn67`E795+dK|tBXL2ze!;)50RgbV`Q zuGkpVBWfcB0Dia?g#i2w%A&kd%7jv(ZWh`Hp)BhhKvF&I2+p?t3mlh8BS5_}U8H|! zWjD_rcl)j8!C&vbcK}=NS+TTr=Cf-~-rIBIjrr`-5AnuofA{9bCGI~Btlop`UzpK2 zb;6=iF^3^m_dt79?ze(8SAl~&3dTH!{=v5po4VkKbuyk#=PBkXr^KG4&+DGEJ>^i` z?%3lPj?*2?0}Szay%@Fo{}_#BP#1qDCLi$<>`!a32E0!`U;-Zk%c2+#@_K!Klh5b( zd6iMWPoGinib)EpI8J!vCG=qIP0^`LSqnZsHwqlfMBc{-VGY3Q^+AWrokKp1e0zPb z`QGuJ@eTW=z5%@baNK9Do*-y_!Rsl1PJ@FfDCmo_Q&!E;jYY*QXyuB)h?;*nn-NAD zsL6(CS(jG)ok&;&sM5+JLL?%}mbdLPgg;ky^sqcYf zKAp*LuBVghOAZ{rp)C?>ZAyB)tW+-7@>f3GI(41(X0mE!%Ba>Wgwf}QKapGmqd%3j z^S9YCHr6L`w_=WZzGkLrZhe1GLr>$prs-3bvsYPGBsQuyS~ev%H0_`}6FZxBjDCbZ zqPw9zT3yKTx8x}$b` z+c(?klES9i^$j<+T|e%Lf;5Ulg~-_S^wrZO{=n2yr=T~dMW^}LLrYdBoB9Tlne29NECY%%qiksKHa43Y8=KKMGn|`|~lo`N5UTqJ>cx`?`?EM&t4UpWC)eU%m18x`~ls7l>T)vTa zx^k-=U~uPfRr$uL&xoN~OI}?YD249p=)pIUvm{wXQ1N zyJ2Gc{rg-Ny+41{^h(Y?@7`lJS=6g(RL~uzQF|xdRPW=fvlB}=dt+O%wV|bS;})$} zDPt4k%+aq`XSmEaaLZ~nYqV>%@huYims_ znm8rf+CmVcVjNWyTWSb1+KFB!ucBsh3XLYO9zm`8R??~)AnzXvqgI(~fV_Ihj=&>t zQIq%31oD4Bs1|w1`^ZXuiDXcw$kBtf$|=X;5)Ap>p=@^g4AslfUquFxgS^k{b#Sg@ zMj@o@*xK<}2kkgc-bE~V|A;Pt1NP}NULn6hesYq$f^4|%c3|SOV2g%&2Fph2?4S@~ z8~P9x&khO5^`jpBhsENczUPaf4@FERu%uOF%Qt_w>9tK|Z~&kBdepNPQ)$Ke81p$2 zoA^+r@v%^1xlQURsXe}|+ap`tR_kZfJw;)?q^-roIG>E}m2 zE?xKW5Am8`U>Sb)x`x@MaOtOiE-n9`ukdTpXV=L|z(Ze@a$kK^+WsBvz`D|(OV59R zANdN)@tYX$D;+&{wDiD}<67$H^sm^m;v0DR+NtgB*RT_>d;RWN#fh_y&fUAX^$G!h z%o_fLq$C!kLNU-%5$iP#dCT<;d1IV6=Hq`n;Ja=$wsY8GjkWt{M?txDsnHtg0DYKu zsAW;LP94*EJ${qN<9Dh&RZ+i3Z|${!;ya{MtfA@wJoX@6pc}y4(b!6(hj->Zf|hD% z%y}v}Q7Cx@7tDDC<0rOQ){@J3?(z_iy~<025KGP3gR^`56q2_24BGT3ro-0SuHSH!83nSV?JEt!#aOB zYE4Uaotxcl(wPjg8Qwec;aq21&Lh4WR!?4-XO%%bdJIX>_nc*% zUx}RxA$392x;_P{FPMH|Q#RsYZ%u@`h|guhfR;URBkkW?I(^5E7oNq=+iu(U^qg_` z{Cz>koqs2j?km0f{QiHP_u%OBFOKP1RGRb7{AKtFfwQ&4A22f{SEEKeoxlC|#4Twu zPcu(DPq#v|TDw}eTEAJdMY~0Jqke00YwBUmBie^``Y5W>{bCv_5Xq(eMgLYm^*ctzpEvTU zyzxh5J8s;Lg%f}GqEo;RLPQ)61XAVEaa@a`bUdgsb4%@U+taJAk`Y&Rj%;z0Q1Z`NywntDpMQ#o5W-yWUbs16D#k*-~>;Xyb#MCXLxr`rz?7%f7S164y-v`cDJR zwurd}d9d^tk_^AcuLTqc+V)Aw8FEfbr#pMmmzW0K4QP&*>U?e=*#Zs`@gS`ZGZL8$ zxm_M7cDR4s9-G9@U^%il>~@Bs_n^lJma-}&lX)$6lf`1Uc%ycUo^ZhyJs`Els+#G9h~nn7&+52`yF-Rx_IqsGCJb9 z;T}}U{+$Gk(}eHmZ<9CJ8;CKV9h;rjw8FB{yvg#s`E~S9vtoK`TH^`@?KDqAv&|Iv z&`f{)(O7}(Q{Y0l7@ZiMAN|7orR9r)%+%P_#442GNPVHfVwKdGo7ix~IVx3C<8}H> zPNy#}YeG^)sh4dsv22q~t8%iVqCRI6t5^0a7Er4$&A#nNOhmx-KM@^&to%Q$)GV@~R{k5V|T ztQCG#dBgWcBJdYMgkbQUJZCJ57ci>C@_?mmKe_~uXiz*7+@p&@dJwluDBDyViHM4E z5Lki00zrl3QQ6lnV@!cW0K&gp;nPW2<|7t}9nBn5LP8lxR!9#=J8xNoa7A`BZ@V_Y_(Pk5^K#^%vw{%%(XiQ@H4zN8pv>6D2UTx zjGXBKdM6)X7$M}YMV!`KPX2_0N)?=?b6`hJ)alSCj?-I^4EQ6JmkDeVD;IwevEa?V zyo~qeC(1A{nbygcXEFI>bV0-E&Yf{!r@h8u zb<`*aXv2XSl_X=ChcOf{A* ztgN<7U?k{bk;oPy49AOHU5Zjn+0zmn zvU+{)+%?Tt zhIM=1S~O|;S5FI>!MhgXR1p4G)4ML$WF~3OAdO1qTs_$2)&#;2riS@U!;k zs=hsHe^Eb<*XQ-tMgD93Z`yz8mnb-O)fA30c87yhRmGe6<|aPs4-kjL8|6*WDBoNK zO52cc?H%(5G6-oFuem{~M6&!Fg-9wDRxwrfW`FPAz)u1s@TP{GZa1MvMGuOYq?Z$N5Yhp%Zk}8 zXVSpFmK}s;S-UYdi(4GFx#KlDSI`XXWb-%An8G?VW>;N=D=vSm3)lP2tq;!|Rfzg+ z37;?M(5l(=x9rUl>-ce258aW=1s}LAGgGfj`NLYfLhs7$DSdmQ*P0q{y#9(rF@j^I zzg$u6wuJl%pH&||U;j64ODzcslpO@?`!P^9gO2jSYK*M`r@kmxF*=*dtZRr!qAE`J z0HtYM#1rv+%m9B}VR&Wg4U~~df-#wW03YUa<~M9sl{;uqkzVu$7T9AF#`sNb!#loH zzR!Jhi|;PqUf&5H<9kfr5Z>eHwZ9?G&S7(T8=ryIAILpsJ7FWXo3h7o8(xfTas3y9 zc%2of)YCHrvUXaGIX9giEN^>6NfFZTlnYnDi`7y_+#-J=IJU-8K|Lu_8GB*y$;YEY zlI2~^9q#PcCcJRlxOskK(i$2SlCE1cpyGK86e2(2`d1CYn zWBZJ+d0v0=_K#K?SLj!CZq#q=e6aKRPN_ks^EQt+H8+pf8Jfp4&3;?B&?_IHH3t)j z4A6UcZ~BdzU_#a&wCRin(>Ri5xUD>sY-uqh1n6n{e$|UPxV89TPns&Oyr63 z0ONcXF#phC0h$-ZK@b4JY<32~ffJ&2{UfDL->etIcKYTKV-ZO7>eo6Iv#a7<^Jr*3te(6lkcs6!-QnPH{%hH&Od-p@O4=OuQKLz z2Csn_qU!Zl!GF8k`k0kWvTn8ZS*g#Ofj(;OXsGXatqvFKCf3cbqjdw6<2B5OSpk2U zW(7-@6+^+HSnlrZW7#uVIw`v~OMKZ(me10xFnO&oGI_11JbA50fUwXI(+a1-ll@GX zyN1hwGckCE#K^9QUYV0+pD>QsVM}?MOF7F{5jla}NLGoGl|`@;kgctw;c}q0GvLr9 zn%31#&Z?x^#z-cZXkJgb>zSUf-pgS6t+*>k@ zdw9aFlYDxEO3T*xW7Qq}#2=RCezmVV?TzpXNm?#Z2F736Og25zCKX=(Lz}_W&y*}j zPV^Sdpc4#~B z5YHmL4pStL>UFx0FfxJnU_Xw}A_vv*3a1lEqfUb-OO~J8yC@+}u^=j=Cv^i2b*M}%7gY!6 z0k59{on|aOh$wRKY7#@pA;EU0m@nJVFHyQ{5N^Pq_cO+G|A*m9W2Ols?1K?L0VC{2 zhk5^9@;g)y%kNV@FW;wrO@3VcWBHG5$}{wj%%3c0tc*(Seg#I>4x@j119IVd-t4AU z8)K0Wvx%ifDYY^d2CD`L;nj+LI*Hx(5&VK${Ti_%g8z;@NQ(W)O~^r`!+RWmiO(Q0 zdLj75U!E4tc~f!dbUBl56+n4v@H32SvrQNO<7@$hVV&@Z@6{&t=sgs+;!mQ zS)J>@@m}fuwt_G&5%dx>hq)JAp&fjzj^03tl?o|+N@G%qNlJ-SLZFVY2~h@Nf+bYW z;8&>=#`7s8r7waD<>c)?3H?y2gX`I4j6_0+4y>$0-a4rqwkdy47dqS1)HR6GcE`}* zU|DL#SwhUnbRkC6;oy_7*o@&DVRGlMq>rBa5&16u+04>4r4_UBuf%%>%=ZFlyIOn~ zufX85Bwi|0mP z!*sS{wr94FUL}9MO0mMTQL)i;V^}()YI1&Mm`*{$)Wzvkv z)me8jjdp1kZSeHzvzKPh#Ng${wCp9RGVli0jkp6Bg3#Oa+RZ2BO=1Qe6mVx>_0-P3 z+R3wL9qD8uP@L8G9r1AvwI?hE@KeCnzSexx;?kTBy_VHf&0udYM3Ujmdc3={ z%4D}CfAaYBB~OucYpoVPBMk!2gn-YxMLxfWPrOBOlx_eokwz(|gfb*nR+f|j){jY~ zCW%DKNHCQViNNXtn+xnNu)4>G>4ymEq+ThJI^=(t5Qfo7yb>a@%gX$Iw!-hg_g(sb zVR&JpoP1=)oP31g*I}F&zD)PIAJM(%7cx0=XDKxU@5cAdDOG{a`#$`9gsz2q+;zaH z85sT_-WX`esRcYsJy6p~{dqbt{25>6&)1S4;-8Qo(s$`UsWd?wX@_Q(dY0xYvXpKh z*VBJT)Q@PMB9Bu|Mb~H)CW~3^Q&@9qsv-l!r+6#Wi3U-X@`UCc4S7d{Pie45cysIR zp0(?WZv$tM1&@E|Fc|)!o_Nz>9Bh7*0I-`r8WMy2RFDB9 zoF>Fq)a6pV47kWqQ<3rpQ)SkMV68sV3up0Wtq@Al@^FGy_))D8Bh!l0!!I0-MJ@bA zrRc6CUMlGvBjt4k%DcH{%A19ashr1Q{boS}3!zGX9{WY!=AI`v4o$$J<@ITIXy$*= zdUB|AY7XnFbBF0#`%p%oYb$;3Chth3HQ?dn(q6!BZ%THd(Riuwbno@gPKr;%v(w{6 zDQ|7DwiXa$Z0Dn~94GWU>|740R0ZPAEVU)xZ~W(G*=iq0MXcwkfNBcOgVE zGzelbl1LdW-viu?{`AGDRT=PaJ1NYWlITxro4PN|cdkq-WMI7DMu?#Nolt*a0!^MG z;hRjwKp;80=odEa{Dq`E=qgZBGEQ)OFL8ZETUvqiB2wY%%9V@lTAKFgF$SMjQ%_y;wau?;JDK>PrVK7FK^NQ%GdBS1+mh6M3rD+S0wDwY$43$z_6eeOj)SDWmzd zjei6kb{9gDYRLrT$8nw$g+~+67Y=K%I4#+zGPsQrx}Es8`-vV)G2lEoQX;=FS=dnU z>%o&=BgFEloYy<`N|mZIRaxOuItTE>ya^HiD;N)7w0jsfC18c;Z_j(~F6F*+Vy5}h6iYdQombd=|el&@Eg zY8^GQ%?`fWUL47^#VhkW;>D)(0%&Tw5Z#P#(tqBAZRxmBI|Y^c_(`k>kFoHtI26e3 z7qbXJIyW=UL05&yxz1v z@a@1a%)j*in)_9d4F@u&j5+IOVkqHEyV7nZ!rL2iVV-Tsu_4ZA3UVAE=zvdYRJoOI zzkh%@`SAh2$L&^Nxm)2fJKZkMZ07s{liwfUjGWo%DcieX$Q0sORuMqd?Q$uV3ONlJ z0wjPqzu6RIjNyNbIQ{oTzp5c;9-ys9xtjw*+C5O|3k=Za!${~sl^!&JTX_xU^$j^4 zPUDG~;sJWa;qXo_fPBa4Y&r*(CyB++#^Ybc<7YpL_f(v>o(uEKK@kmBrk7uUC(M7C zOfLWILQAIAH_0UWrY2d_1)PG!EE6uzwXuwl9Tstt<%oZ80&GCBpYbk}>)4hq)zBYR z)|QxCuTttuH}$4%xh7RA+?lewbQKlCYB>>q=yc7v>@@wmh0fX>h?db_s*-6UGG_WtlQ;a8Z$hNEE_)@l*f z>U2n!&}e_=%iS`I+v>JNmZ#GTqwa`w93cxOZmC&ka+{eD4taz(4s<&4jRUtQoeGhZ zMyoZ4h{Y^-XQCdrUivJO@iOug+50jgi|j_>OqdT(3a<%E!j3HZh3+`T$V1zCwNdBx zy3=mD)s5W)_}U{G1^jYG3DpDVFTs#&E3>z^_J@D1!ffoV{ZX4(@~R|s@V0`RH;l|c z5au-i;$Pc!I(;G8B>0U$(WXKD;E4QI2-#CEE;GEB^nlK9+I&)0PVS1?r%Q5z9Q{}C zQk+0rSC)1mNk|@i?BIqQis3t>y2+~#UGJ;AT0QiM<_brYb%xHk9W@iwjB9aN)lrD< zlrVooACKQyGB!m))6%0iM=TmKP$F|b!qIyTj7%Dy69Bu8=D+M$*{DIU4w2k2_ z`Smi^YK)p{jSb;3sNFc$yqs(#Puf(|*z0YFZ1h%)RYtX20#zIkdOi2`OrON^$ zDZDshGMh}8n9RcKBCOHGV#FFl!JrVFvRHr2F_lWG6y6e%n^=W~t%@31vqg{7EQlR% zGVyh;qDfGgylIVTtLZTlV;Z2zeg%3UI3Tv9gvbkrPf{NKIXEC-C6uxS-B)>GY+Ur()&BkP9z`$p3$T zz6(-@Er+mAq0OOq#qaIGxZ)>7Kx)IH@x>he7vh)S_2|S;{K1tQtJbLSA$6NSZT0y} z-wBpR{l%G`t1QjXPIAUf?jY7gy634R6VCmXI&*W2`g7l6Hk|KYP!kp- z4{D=3aWmcDl%zt0X830y&pM!a9e#h7f10-+vXk5Gd+bly={DCLk^5ZtC!cXXlYEIe zY&`5bnp7@xUGKUBQHjo^>#)-r-dSJ*=7K%InwuR?48o3edOb+IRx3!n$Q-F$UEQl` zcWOl9owr%7pF7-62AsQ4+?_yry$95FFc_*!B}fW1hB-m3DYraW9}NXT>Sccd#7)bv z%=N63x7x&v<5Bn6oO5?-cTym<#o@~BO`b`Tq@zHd!)fhvx@XY?dO;tAX!{|fE{KDo zIX78zK@jP!LL2l#y&`B0)+>+WYjFd*%(*P9h9EGL%TNpslvPBqq9TOy2xy2PXoyR+ z!`Y9{ek9Hm=sJ5o9tSlMKYf1@1pY5-;xYyC?|MSi``gM1kqd7U3CWO46-Gs42rmtZ zotNniZbWa06OGCJ4{h1LDG}NkHFBe_yyaHbZfM)^y+8GYww?q1;fxxcp+CFwU1l}? z@wAZ45opQ0AfZE_OkGnlH7DXZd#TtGaG12c`%2pcK61rwrPYga;dpvSG`IPdo^84ufhF_y!8`LBKW2#s#kqqDjUjTE? zCUm-mMmNh)4WZPd)|k|4jo`a!bR3{J38$h=N~x0T^hUh~Atj+2vxz;9#~?MXJ!DcS zZYJVH-GW#+@%EM|yj+_S%tX41qK&J8>T!Gv`yz*@N$~!gXm#GJZtr&Ba zq~hB)pCn+0ZI=^Dpoo}awx|Q1f+i3ss9~i688wE$kv{~R!1eANeo zb5(PRb0uQ6TKd9y!y~1i?o5Z*pU=`WrH=>hyE?>4CWOv8s&9WKxQu<_60n~qA*dH9|x73y}{KGXtR%Vbq1!9ncAtQ>E_w)d7dTa6|NQD z>)B1No4mK1cDe7D-pfAhdeD8y{F?g}k5i_Vv&2w?sG~-%uny2Iyg?1VpqihXSMy^R z=hRC$pU`V#cz=IOkpW*3Hgofgu#e&Gd1e4xkE{W~S~3?r+@3GXsabKHKNS-j6}J;t z3kf4}Dw8mmsWxa8o_-_&FH8ds)4yzc=lY@2@^>Hk`I4h0?AyBdwU;~R?!JG{{`oh2 zYq#X;^&j5&ZpnXs=jp3o#n=Ah4t~)GM^1fz*Y9Sp+JS$c9oYU;z^&f{o%RH9paUh* z`^S)L_!GXyP)NsTIyXi(#dk&yd!!nZ)~&&2a;rGfaP=L`?q*GkO3(c6~acJ&OOXI4*GmaGl>LOpn#Vm|iaWl5&_D1~yn8ST2AQ zYJ32*Sn=qbYyVvO<2ys&)l76oS$FVrS8f9CD!uDB8yyXgV9kt8yHEW(FNuV1F8$@9 z+t1y9WTuE3s#MT>a=)0`S;y zL_+M$s$F6PyGwr>rHA02!MKqnv7vv)@bK-ogT6R{5FH29^5A<8;ebvs=I`;mj%`L> zosUenKEU=n=~f>m3hE{bBR1Mtw-MWcbOxo~ZLrzx9)%LbUuiTDg5?TtRH@M0UM4KE z1Bri>gyjuJox-a~E4C=^Qb-hAZ3Ts(A>w(VI9iie@Zm^KAtr62`K^i*igy&J6raP9 zKo?Py{oh;H$oEB+T2+pfQ@B zCexum`RsKe5o~(W8)@~@oFm8zh{QC0%lRL#_1ZZWX#W;M(#=5o7VzxUMq2==9ut2y z71IF6($7PH%J@~p2lN_>CSS-r7E4Qxe#y?l5F;-Fql+mR7v1zxJnW%*D( zTL~&;D{tqCE|QtcX9b6HYql?YBKuDERQB_%G%Mg)Wvjwx&02lgRuP%5{`W~!Vt66T zTSDdBqT-TFqsTykz zR$;zNd?f$><}{5U>wl1Si(K~H1SJWm+XES^KXAsAU#uGXTnm1a(GlJ>wDU%HZn1pm zGtESBq#WVT-FAVQt*X(!w8eiDBxmr%D{BRRsSK*GKmYd9#0a2vMQ+7=OA8mLE_B3h zp*4$hmBUT`#3taV*zhOxdC4x&lN0$>#%Zz{u_t0;isow1%1Aj$b7Mq46RUBnUlN`}3p- zksP^XIcSwE=UXABbeBFp@}r&%@7iQFs5FK` zy*IFNW+0U2uC>@r?ofYQw{3fslfMslaB;6OWR~nYpU1{St#z&QN<9_H)FHY;xp|=G@dV(Kga20!!tCH7+Hz#)` zA51=_eAc!<`4V|ac364L_F7Uq56#D9iD|uwNQgqGj!`MK(4gs&~ofm+}1ozX*~;Q!9Uozl{CJN;OD={YQ8MP8+b{HT)>b zASFJFR8)sBvG%9E*!wc=L22{@Iv0tvWX=jIrDrYB7Zr!jo-PgwFF_BU?h)cBYsJ43 z!ug9cFh(*PGD~IN)5t794=K-U3gg0GZ!HoMfbWK+7-FE06+EN|pG!YL%GZh~~sHo)k;o zm~F`Us&LhY8by`WXoYJl2WasUAX3S4U}0jQFl8xz*`KEj{!4u9{}mim@^}W5O<{k? z8HJ6>81OM#I}#%1aUn#8%kqW&GA#kEF1s-0`htuJej^=G@)e68!D=!}HLEl4-Wigq z58c1$;nj1w4areGD!gAcVRW_kp0PKdIq;)@s^s1~T!m}Fw6#pzH?3W)X3_;toWw3S&pb^m3SjzO5E zgJ16e(ZCwY5i5A?T2#j?Ra&Rkhp1M82Jmf1q*QOUI>5!~JB;kQm(P{oXBxVqeM#F# zsMs}#4Z@$7^>OdabVTEv4VWeZGH+5R(SJ zjA8{}qhM`OVw`TdE4(wZGx{VtijFvCktmh}`-$$9K~eFf*vyls-Wi7>*J6A{NUlAPc|>V!uN zX+!A2wMS`5IZB~1G`5@sg+QR~r{&Z3xU~J;^*+7(+(FyG-O-xRJC1)+imm(2?AozI z+7S2`%QN$v-|zeT&CYLUc4zi6+hkUz4;K1xWby37k*vm)W(9*cg zY_XJ*r^K<{X0uw6Rv$Hx6&6@+RvRtIG14So6fJ~oM9@VwkMX?PU_57vItf6Gs&dSq zpH;*8?Hm_%5LS7#7+5DuO3XM~28QOjdyFmuuxHQ2C?7}D9JC}JuNqn}8w9Md`J zdf;6fxotN6ZghY8op+{ZrpRMe(=*fWET2tf#uP;FMyHg?N$v94ll=7D+5Xa{oaTwh zIFuZp^Uqu5pKN=L`ewC52n-rl(#Z;EyH z96P-xKl65U)ApHXdIoXlwKHQ5{PJeJbt8Uxrip}&Gv9yNEK^J=-iny~Ip~+~ku~+9 zXNDuCYR1A`K zIoDaQ&Qf7$GFB8BR+d+4wdIwSI+F#uF|sVIxl*TdTC6ZZw`w)zqOS&NLZWCy zjLE3cmb-r~Rh3qY!A&l3ao9TPuly$+xtwKXicgphSg<8WJF~@VkvsFjc|(2Ln=Nv0 zwkW;XqD(X`5gWY~bJEmgnVVnE-8-ATqJ`yW|H(D+DFgIwQ`2RyZe6_nxt!N4GXofF zMX`&X-#O^MbCbT{?D4;tKItG21#pD1{NiVK&wPLI)f>M&;9J_Soqk<+OK06{l})i9 z-P*oqGJePB+G47;C-2<({gH~9`|tKkei$-c_XNv*vDRIqntrDIGbdv4y+(3P`%M1V ztN?R27Oja?>_oS*Pa>9u<9ZdtmM{z<8LWe03!Dt1Oeyyq{yokh<;_%5^(i#F(#{v; z7fydLxz{61tG6+E)&1{xs-7W7ilt<&Ehxo`JXjSmY`0^L7V`z0&{owM2S--VoOC$D zbQR4A%-W19u;Q`VkhNX^W~HUhy3QtGR~gomHHLs|69s*VAn08lXOn9Y#|!7nJUX4= zt<(z!CwWD+h(FM|ly0iK_lhV%H`walrh7I{6Z*<}FbdEo3!kiL^c9ds*Q z(I$mi<(x;Z7%##X7xYus4507fFdKe&(~RY?*g)e_@ zUm4B%RQFG>>%0DM_CGfBz3i==b;MjIn0Vj&?=>96!LRSw^|$vZ>!WnA_n`nzMszlF zsh!c73+#-a4CNLT3M;pkb^7CFH~C*HQ~Axc_T`pq?LGD#{z3bImFD(NsQik;B`f49%c`EY)hYuy9a)BOG4|OP`&IP8UOacz>V&?Q`J=D+Os@0w{xTjxF&U_<Gk0HMUWcz`>0I8(vM_(aj zkQ8t)Gfgv(aA|ae`)&T~5dKlMCI2#{zu?mO51`D?s$S0jfH{ViGRN{S0sRxutx_LD ze}c3PP`0Qi5izj4--@CzvU2z3NNq(|lSJEI6nA zlkTU555UByQQxS4%TR388vkf|*z|Dm;gUUO*6cJNvv5|Yb-!(Q>4CDf_AQRK@|Dh= zqD_2C>Xk-a`z!v}{gyZE{SV(SeScWwUv#1J-KwAaIsf+q-=}|mZ$LM|ahR^0j0`YQ zya9aiD`p!wgt(=XeUq-iK>lt~zHwaLV{j%>yDs3^w)w`!#7-u*olKIM*ybDCwr$(C zZ9ADH6Z7QTXV*Eqc2!q(Ro7bmqyO~kUe9yg!jB0F$C~A8q1S3=ScrKc80n%BEG6I8 z|9~@GmALb>cF^&hzE_5brSDg=2zKran|u&fY7NUyx+STMDjg4$5cUXZAyOcTGP*3?Rgy2te_&xkfI7BZ| z%p#dE!U6RlC|+Q&zVrsoXQ&AJJ14cC{H>sxng18Ibi#yLkhprDpDlfUW5_BCql#Ir zapK2u$-6h4-1D7JWw8q-Cf;jo+^eGKhoA)dJ6&S&1M8>O_XIKqP;BMSGT}Vfoa-l% zb^}@Spx_UqcKAPeXmI&Fs>s43dS=++qU}f&b0mQX-&8@i99IQt3RwCe%PtjlJ`|wJ z48#X*9icNTH%Hh!Jwg-@`d&Zu4P*`Sjz5tu?;-ZOpcHUpWO&9i8{wA)asHurHl;C} zgk{EAz|gqaSRaL^4OX<$cPsCIyU7zSfh6 z@i{NSVp}u@2#P(;6UF}7l~~USv?*@K9Rk0y19t1cTWc)KO(h`AEzdz0-781HwhKPa z)q9Y3d$l=a8+zt-4>V$VV`K!j#*Bvuk*)Z;6)Dir zdb1ASsRTCJbQcaAKb}c9h___0tDdH=PB5&SaNCc%92t)8no?xGZd@2LPQaDX+Zb`R zf!kL2fXAcuM^IDZD);!uz=;*rM<**kjRU6{$|TL|Bw1upo6upjt@ZEe8qK1y;J(il zZ>PMob2jXY_1(#1w;Vh*+97KAvl98@mX zi#ZTd^bCkYDxPR*vYiU;?hpX`vX9`VDiXQ5Nk!T<&drQCw1D|;y|8V)e@>)w2#-hz zPkt7ZG!GQ>qTq@`R<+2DXdtJM7#IfRQVl^=(9q(A<6=n|JC1B~?PivCSl(-L`8NW} zC#rl|Qo>igH2=b(AGmcUPO(&hl(~trUdXqGw4g&zo?yudG1=5Qn zuUg@{+%+FFE^!~tUE=wt-Rb0?nbSk$6IHPh219eQ!!3Jqu@kyVwpdieG=Ez5#+|ccx=;PMF56E1}E!`BjO{5aPP{Y(|;cXqTk zdP=&-GUUt$M9*!rJ)^z@8&LQqCE#K2DT}HLJ5aWeHg2?N!@Tnao?##VQZYUy+-tqO z+I{xd{XNpNdv2fH5yQ4%Fv*c{Mj=D#hW$n0Py2=D`KP{%A7@M$uQboRxt`W79d6vK z54>vV64wc%-yY_K#7=P?7a(G|$~I}=2onY(kkzzWrq0-5kt9M7v`!3@0y^I;sWW7V zVv{giMe`$$xR?LX(n9y@XoA7PnG}d%hENaaeb;*YiIJO&-9QAqVfPH@PqoI1(5|`! zu-0nfwEdYAhY>~556BI!$`Gp&X$2ug_7kOiEW5P5MxUvdxV3rzQTyt8DvTJ75nixa z8jky0T&ws5flXc?h}FAnWe$wp+zwB97;qu(HSc%(&M(m!gE}%WiZ;CvjUxd3U{8Y( zoLg*>l-JYec9vwHYX9wIewr~8kTXo$IZPlpCa$T0iE%HOFx8FOce2JihWx{FR*GeR z3zdvhv4Qs$YZ0KhlGnH#DwoY%6c8OKWnkGQ1HhYMGnh zpCJMW9xmkqLxt(l#)czW!Xo7>;f1R{nQ7)Nh)DziV59UL_ctT%#S-4SQ>uL5FVPZ9 z(Zd1%^^&1*!yw+;G*xqU9n5?wNc(ZKWg5SxFRx`>7|5($g!y@Kg{mzSgjcK(?WUKO zRV7x#$sTBPka^W$rd6&cKE8q^`{`N_^#_$W~sh7cKaZ! zL;j-vJH?v?<&m7(dBxEOQ_}$HOwZ)U&V$ek3wD;{S^ppng;Op@PU9S!Vr$Y zIjB%zADNMm2SH(=1!+~Pv~&4tjbd_@rNXOTF}d_hv zhgw@B5Kez^f%zB8Dy&@i&emHbWo$ckCW3FF;gz8b`m4RLSA28nPLqvzaH)l0G2dsI}|)sJn2Y-m4A zvFO*6yFJY0eVfXDRDD@#hD{%$?W``96*2%{B(ZH<0s%W>W$`b@%JcBx(nC!s-4M@jMQ@hg_a`#hlq9p8SAWY;hp{0D5lDqcXl^{;}kw(t2-fYTVy) zHqC+Di#a!zjXo!*YCKyQr^Dy>Dx6MUAo_6&$5WeZnjDb?1r4G_b*f77#9fb{7*xo3A$Q9tK`^3(bv;NY$t|?U= zFJrk;kFs4V?4*m)xZ@C#PUq!WgNLUjikR*%5i%N?!S)u5k6cNk@rL;yK}S!|4fA89 zcqd!ls1@e74Ni0c{e@+I=m02Z=-ynV9nt~uxP;zZ=NRSHC{|erYhQPul!&1MX2nJ0szKAgf+c4r74%4^Cg*g>7`sN5+?fZl~1KT>#ek!-m^2D?-uY*LGu(wv#ZNgP2MSy+5S83m<)K`^`vwNb}PKq!|^?&qa3u_R7Kat@Vpi za?^TibUE8B07xMszn>5B1K<#=^|@Kiqfj z|KYxOX~L(`aB+T*REGOTtp6Vl&&~Yblm9;h&(6W|UkrRowiY}J@BrtpG&LH0#9$sV z?FKOlnkab^fOW68r^cYihVB8x<8m^RIA-|hv6eS-K-mXg#q~ad2ichT-MT$wx+0+m z!8q^dgJ{d4+UwuyE8Rqvr{`9NPY;}#1rNQ%or9JQG@^6!1qG_FGU}e-?T}xcr6t50 z#=69R|GiHbe6*I91I_T3-W)6cwPp1*Y8Vt(o`@0)B2OG}7r(%sr7IrdOKXBY(`ggiu7CbMWvyj(nKZ0fF=k9qlHxMLy26CRoJzNj z|D*^D2UAv5g0SxMz=tVntC$_YX7KqR#?Xuqa) zUw{T~BfX%*oT1ZsFm-vI!MQ__77&qM0~x!lKEhq{yTfDcpz`2twA#FG>z`cFQ1gy- z@}h^6>1sSshs06W7iDIi9-01nms+bJJi3w|;vkPO zd!6Rs*7I#qAxzxzboH6B>QwrhHSlIKwv1f-gZ9s>1xVye(`QSn7t$`MrJY;JS?lq? z0?%XKpyFF`*EvTw!@z(rQQgox2{#|LT-NspEl@N=O9fOo&`#==_Y7Y{bLtqP#Q7a_ zsH#GO6bR>oOJ)K_b=WT`eeUdp5u*WIR$`cv!V5~A4teIM$gBR3`P%nXn?cnh_U!ol zzWHWY4h6TTE{)I%L?1AEG26WrvkP_)=$b#J*ufQWy|Jf+w+evJdqglz`JS^MtKk4H z(Bh(-}n_?Cc3${Y#uINVlZ|_VYkq>z|wje??}x zKyp%QeaYQu7vDwSdEbc~A^(9czH{M;m(1ySvr-=8Iks8?9VL-X= zVFU-x7@NS8sr;nb@TyZKCm8QwZmZrumxHX;BXYC#QP0#qF@d2X$80jGU7OYg7ZN?u zWWGsY+DJf+YH`l|j9FnPgb$(*Tts6*-LxP&UOUcDp6xILvXNByw1~70t)#9D?{sfJ z{(-et?C=_F1)-V+4~tpZXN+06M$lIe7y+jI9U~}cI~)tVkP>0Jh#NRB!tJ2H{X4@k zd*II_&s?7{K>sh{&O;6dD);R7Py+IiG!&IFStB5kiM}!UrR^G%Q-p-b5c!aTxLm>6 z-0PfP0dizFKTl=UH$JlCM+w%x>?^Pt?vmFr+mbu;RFIQr0D8T>BtSJ+!VG0#NHlvG zKoxETNo9}OcrC(5Y!KkO%X>rq{QI3qAZ!LjY!U#MBRwx!92YT$c*t~!U~Gc%htHA0 z5gGUo{y68-qZ&y-!Eweu=Z?zR{=?GLCFZ?4G`u3*727q20|d)mC>z{_F@zH2xVVp+ zN!0u1OyXkp$E*Z??g%l+;pNY_*?*^)v)d!P|2RA(JoR5+V8r(^@PvQL8uD>hhA5n^ zSsI#9f@yo)IN)r|o04~f+KxQ+n{s|Ky`uo{|6V*}KO?>~`Va%5tVIB#!wF-v`8E!y zG`*&%TGG{2E%6^WFWfIb+%w*@-xE-A@yS`FiWAxr+k)2m5SZW63|M=N&@bIw;5vdo zSl)OVz2G>LbOsrYY>tTbyQjK(KLUBjqV8O8kpGFkhwv0sE3H&zRBTjxDnE5z6K(-Z z1z_FMVHI+CB&N3fn2Z`su!$%{XRnE4D^hdfd2bgC<^p+lVUzQInuNXxyevC+r0%fI z#NwkEQJI&F_+fb>dLwrYclEWmBG1Ky5ql%N-pK!9c>!&UakD317~dZ3hSE0W=R0W` z>kyN86bTa?Fryd2HY9!}b|HF&c>Mz6w1B@hM!X{l%IQ-sfQ;GZNsRtG6=;NJ7?Hbi znwWJw%{g`P3XQu3?cMt0MDPKb^?YZ(b~y?$-{(2T(+w$pijvLtY8;RE!6y0P`Am7w z@lT=mlaCMHbk6wH8|T4bk05!K3}2`w;26GO%XeKcUpTfer}S^(@vrTA1SE>j=;9Ds`r zGDw0cgbIk@6vyLnd+NOj#ux?ki8eLF<^fxufbVkSG^Iuo9s3{&u`Qr^R%h4L4UYEL zyWQui24_cfylBe%}V5t~gLn{#`E zq0$?yCyvFuBY|E={NRsN3DU(6`f5lTd6=X)fq2RhTO!dH{7&E<{?iM{@(St!4;TS= z=*GCN3GpZ{fHz#M5sUG2=|n~DkNZs>Nt>7R8CKPrrVII0;PGfP+aR%*wk=HTdyKP` zT>;m!FU9O3Gk2nzyoVH3iZ2My@d7d)P?R~?8T{#MWT;2w8z}&`@&Lk7Nga5%`Ieen zzF#@_r#}2ez$M^EBUm}`*#9?i$lERrgxLs;!`@nH9v7~KC!UiQ=M%N&4!b54wtXG8 z19q?D7Z&~6jMCSsmsbxGKq$+uPq(SSTUW=Hm~;vpMu}~AM5Y6{fHA}<_PRr z&((Rm9Vzf^M5-=>YmuYJuzxLCo*ccGr}x$IXV=k$8;5>Ce#he+PY#h5cq}18JBBdV zhs#rcogJtwt`9HVYjGQGW+2E8L`$N%j9G>Bl}@$OJUM^G5oiFbuvVL~GcrOHa0Goq!u!xm!%nNdTQI>NeV=lUAN)h1`%dpkL5I1tP z9CTnXo6rcJU%rNTcR!!(?=u1@SmIuf*Td-k9jXAMPq10?{vrM1?z^TBNfuFQWg*I( zTp&x3snyCOKC9YA@MwT^4YerPR!DoEEjE+cn8*`Qg3QU+mQZ;PZ54Nw)zrt_KwJjw zEjC?_35SILesZpkts4F`jltM-T7SC$B>u@#KgLohhwF_g)JEcDJQ?)z(?FhyDJ#dP zo7H=||Ha`XI@@7KKIbi|YyRc9;bgoGbY$>F);G}+&}(K2nuwjlAnSUZ0lmug{tvG- z1@R1c?<;);liUF{m`zi31!fGm1G>-6o|fFxGQ8Z?-x(t{7WTC7ye56r@MXJ0gCkE; zj^4MyyIwN;9O+`4Bh|jWPlgheF3o}Ts4H_Y)b_e)_@Az;M=j=FjN^mK}sh;3Yyx@$xsp+p;(EK|= zByc?FIg~*9C*~x1!?eFH8IFkS`k4b8QPv2*SxrV+HV`l?WDV zOoaXlbxniwn%lO0Q4R96zW=O$G9gGHgWurvVn*b|dG+7gFI0g6YmN@8m^0kxejr}N z08n^ek{fs9w^%h|J07N8dkqM%6nW$P0x#p-TKb2Qm3&Kw{>E=I#0O`&D7h%aW?j}e zS!!v~!D4_}v?_FUkF+dck`1Uq?{cVp{Jx9qd~0u@n`|ESQbjq9BPlytYl)tx#y|Dc zFcjB9^jQ;^Tyb5=v^}dsg?!009oA8)^cU{9Jwh*>9EYj8%UEU==^z6Vr)z>QT6MHyf^d8TY941pYoJ?7E%ZxmYM|G>;NA8YELra6Wmbs`%*i4qZ(j5M`?~+Z+ z!Tz!N@~K{y!zt!Qb^`dMof@HIWBHkd$Cx)n1H*vp7TU*S09{y9%DJJ} z_Qdx5KAAkpmd43y1+~F|>0%l^z=)FM(~0T0!N4S)BQvRcCVqx=1{?O#{GHoq4(~|U zjVu_GwqqE{R3|AP@zX--N;N>f`@Me_xInq z+d+17fpsAw(OItHM3Xz8&$g6kr{=9bpy1O@Xzof-)A7V zon9Aj&f-*p?klH{5(Ff%g`zjsPc=mIsCHITw*O>lWfkMl-4_W{5R16o50XTp5#^f~ zC-Trqm!T}rd;bBNN~C`>tOB}KsSESsEtsmrHh$s_?_K=dXU2;8e8a;2?3sqS(U26J zQ1LG25!EmFK{XqdWYg~y(D=5ztVk+tJC4<9ZQTQ2Hg1r@P}mhaG>f9@n_T)C>|~l= zDPAF)60D&i7@ZTB9fvF>*yLrxvM;g&<`xR((#mfWLpKkcU0scpp>*zyc2(N*CnwRD zLy%M!9V{x4$jgL2q%R@db0=)u-)n2~yBs|^5V^~ormt}oD-YkvTy$NV4EZxtPU=Nc za)Pt7DAp3+w=hzbEi{a2;7NT&T8DGu0PE2PoKJFI z-@>l1bOZ;qzvW8n1Y_rFce}Tp{F{oc#DH+gzBCkJl$|u>m9@@6<7zoT*uI4*%Zr&Y zw1AIvc)Q{h^E=y|H`Sf{pZej{qz)pn2?Aof{1*EN`^;kSOE%_f$Lw{m#4V_okZtwK z9>djB-IFQNx8dmN`ljrv;MsFxv!efQHi7Duzf}r!b!{cPMB+ z)(~H&d;8UkPEr4Tqd2Y z*HE9fPYZsT`>I#mSH#z=SLlbBGlRJ=aa-my@K=5QgT@Qo8Vb^)yy3-gs|yTeS7cg~ zhQSJ8@w_j@SjT9`@>{NJ%~PnxQ}q+mHk?SLkIZprM}C5dm*F1|Ht2{qA*gd_Nz)M#~cRnL`OvA*VQ2@6s7YBWlivI4pJWX$$Rvu!~izZhv>_-43U%dq>%;E@Cz8?Mzd(c!_-#kYs<{}4*q+< z>9hHrhntYMH#nH?R;H-eUCm65{IFnMV*-J;#UJi&9$e-J zGDYVXql+cBXZrks_~o9d^6n94;J9+{wNdZs6fw6K1 z8m3XasL~=Jdbscq#r+~Tzj?nnbrH_JNjVKAp&jEV_7uCgQz~N1QkCHVU8FcrJ*54) zc{#jr;a6t9KW?gspS>_wx~R&dEN-fU6C5vOW33trzz-(LCx@rHucVl*4cc46Yvg-- zXXA{#JBDm-{2U>3+^mFEf^~#7GJP$LG%Y4}7695xOBGr2<4tr+^R>qkX1bcm9enDRn^Zc^(f%Cud*3w>OelL58Lbp2=OPOgZc1 zd3(tw?>^Oa?D3PKJLlN>4^uh!M1i-EKDXW|JqkBV9mIol)LAzSOh|oG$7BRiUK-;0 zIpY&78ID~I(`_!xyWCU;@5f60UBAr@0MRHgIm*=pGjNJUiZf79 zT~3K0;hC5wIn|`#4V0o`si0xay(21y3V>eI5Kfb+4DRE}aR1qThRBXviIXz1oNNjdOP*HV7P=V3;8GgqadL)*_ zc^OfHo+rkte5Ef*eBHz9>7xdvWw!)#3-;QPvT3-Y!y@?m6YHFqN;gOm8Vv8aqNi zzq^eHkC7d7?>m>^`ezTSb@za=ocX5yfVp%@T0kkyCWkime8ixI*A0$AIbyPi!55Tzi zk!o4W#bCWgUePa48o9+ov-0$*qX3Wyuhtr1kI5Bs|Rq2iEcc4Y28GTAdvRN(XC~u zw)ATcfK^XkUyT$QfQ(r05QexoB0Mj43xj#|G>$gVYpOG@r2F=DM0&I6kgV#tVIU<- z@K)sM`r=6!c&M=YFgJj#N4Iu?eF-%bP)s_Q2AaX@af}kK9QJsU-xyYv&rc<>1T=HK zH%qMYL+JaeTF4?Ly-X4{Vz-DD6;X}*-1sYqjwHncgp3cPK2>6RRuFAfjyi`7fY_|s zqVlM_yn4I_d!&j$OD?i8Z)lV;DjH}-b02esCfArONr$oegCENZ*P-(JFsd=?W!-q1 zqqi2B2S0`Iq~7!Db-rmivB&6O63F7dTsWA2lpV&97Ke2%1z$|DvB7i?XvH1c;H-&S z?Rj1p*Jahe%hGb4$n3b)rmfP0shgT5S9{(P4JH0?%Aqlk;|1_`k&ZZ{&g*%1rk`>} zyZ(dC#-z_(tpG&eU{<)j>0hAI!5SWhN-dM#HCseb8Y`=Y;TgsMRPtw`0kVquR4}U1 z8Yw5`?}F%t?;f|C0lqu6BR$4^5tHOY@Njqb6nUvm2zn(6&c&XObqq_2u{g%yRzalf zOXqN``q8Y!bgomu;gRThqq##*dy%Bmt|ThzRQVO<>X*8f3bn0ma}jX^%NsE)7L-dB zW%4K)s>+v@m*CJeqXKg=fPlX7@In_DqRR!qG-V8B3>B`2S#23bNzvN6G8}Rd=8r(K zwn8S+Gn7$iOk_o3JaV*&Wx{6&l$-8PrmK(C@x05xb(GxAGe@`BKi*_^$RyaPS46!$ zmF(ArSKOOetKhb)<*yK{5Q9i`YVmRPUowcQQZWw;nuuU1A73irKqkzs2(}id>7B%K z91YpUm&-?|TqE(MT{8ws_Uhg#9CzUK;O~t`jK7)-xe-H7s9z56vuagw#nbubX-wrS zntgc3zQb_R)RtgXsg(3T*Ft8}?x2Vk6oc3Ky7G7fxP>$`O?^atrryVATA!hMiT+u> z+xV_R(uLT1bW+yjp&`q{h?5VOoD0js2=-6J9gVdr#vWxiWL6o@1tyD7q_JYL{l5G?o;sPx zQuYuAqB#ix3GfpxlchvA?Mv-l8=M=wg-D2sB*We^ zx7lreRMXv713_MUO%(zk zt0?fEsUN(zv|vQkDptcoPWZ}^0*3EO;F4#3gbHmj>)KA7+P5Y{?jYrwrHH5~afsHM z-E4wVKC4{%Qznlr{hC)t!=rDE{phM3xdK!F6nL16$YBJ+p^j`tf9)`ej04l9#6^I` z(=S@kL(I-ALz9?$CO}<{xj0TJLQo3En|Rc(7z-~-GtI3o_C7)5=2SaS5*+u8y$+%_ zS}v|5q5cD=)~|Wis8O*Dqsx&GJO--p{@IWwsMud}kd1_(_9@uHSC$X_4viS^JN`%M-?>>UNVC8b77vnwJ)3EmV_2gMFE^d`;bXE3=Kvtj3uUC;z3VC+9XiW)${HI1Tj1Gm&jbHl#TTi_*XcFRfjizh%D|U2i zV^;DV6akQLEj}yqLfqedP1RUgF0yQ=cGH4v5~aDEblR!+64@~MCm5A|V1-kw-bI!W zNbVCMhO!ZL`UFojPc$!1$c*5HKTAEV^krgki4e;aTHlqw-Xe=by%2Z8FsC1P7f^aE zo&$eRd0IT!%#a$Cy)3V;4i@?2+Eqk^U;anal9 zto3y3nRwhkWm$#N02V)}10hWjrK_raU@-yJYBbtEUam1hcpE+8G96jv(cp=0I~Bu= z2pEY`YcHXuQ_a$nGSUf0WQ*dZ4J`0$W`U8Au@^{^N}DQ5OPBuMgy7DOPdT9R~XDbiOQdA{{}qBs3ur_t8vy+1{f?@}lmJRTATQ zKqD$`kz6dS?fNgCGNtWkjMwSLFshKI0rp{W!rJCI_AIAS zqy-pTZlep;B1y(BLoPkm&!U15MP7DZq%DbG*zpdzu4bdy-L0APH4HUVj}J<681^(a zGpTU-cw>4yswIT8N)?T6xM}wNo5QEh>=*sgc~xkwtLHc+99r2apqpYKe{S! zu0AXswnvaFg11cv@ZWv#zaEk}4LrX)d8>*%U5s^H#k)Oz0(!1DS_G&e7)^;<^PBVQ zoYx3X9IMK3j$S$S>?{kLAN$kK%LJNw{spJ6^H((YtouC7>H#fl-0bYUrm%rcQiu;H z3K^#jL0hWLC4MPBD9jeZsC*g^pQ|wmf2?{GZRIqX=iSkG0=6-fwW3`6ZfY&avd}dr zUz3yxq-7{m;*l6|Cu1h&RHM`i9VLOCf%00BVa4t52 zi281xlJ?JqdW43*jSs(8%Qob}g)ap z5EyR)y}<1-MX}9=9k+jz=DxD`$rrlpfr*LQgX?xGHZ01vg-3 zt(fG=prDDQh19Oq(IpkrZb-X?99cEKqzpF*PwC z^f=b25`EDQ->tl_7->%#k3fhX$Ip9XFwC@+#uT_5nh_AOySi34_| z+6ZE{m;#dR^4BW}R4WOW$>l(7H!Qb~0q7~J{+wXvUpySi!OYf9WI*a8p3R1>e{SNY zOENsm0sNpfhr*qs=+;{iI!;p8d2?6i7NC$vLd>faq4J<6h2ZuNU^wL#l0u{uXw_k?U3TsnqPrxtzwRyzdNDP%OhicLAfqa z;ag>7Eo3w20vvxWkpU0IqUds98jNs|g?J@lQ2G(XeI&695-%@k@T>`MvuHE#kSq(t zL`jd*#`!Y+FPqOBofDqtIjYwye$N|dNh?2Fh`czr=Q6z51)U89pADeRVO{n*85hy1 zXSy@k&mI1K^X1%UVTv7Ctg{Sll}6u18sU!MWBzo!m2h86=mP?$);ranY^_EQ?e)|g z9dDCJUY4T5cTi$BHus*x_eHrpMGF!Ew_H1|&H(AElm0ou{SkX4uZ&Y4_9RX};PLlo zZXVPoT8{gbOZoFO2K5X`uzhuauhPmsMOIb>_CaQ{lZyqOzE~*!uKIk7sa=$ZgenAF zr-&|`|KRU3K;S zQ4NV3vu{fz!h#YzQq1Wz5yN5HI+UXs4n`SQ7&(3eN@tz;PUhm}*xFp6-3g%F@o z@vOQ!yJ3LfByjztsWOIH=gU`6 zFfJ891 z8jfRXQz?4ca9}T}liK*LUxB01X}>>pGPA9jW;K#QP$opLIwxzKN6vy5wX?|Ye2a*D zKxaPdc=-C8;a3QdLqIKha0U#q2d1*tANX0W|A`x84At3tqxmdxC^4?{tnmCKX1aJl zt9;g}sQs%|Rohh4^b&dJz-{<8(lM04g$RaN-3LPetA+H^fn*quFIwLBop^+b873E9 zoM+$8-FsWXdiBxNw!bh!_Lp4lV3oP|M)mgN#I;qyYN4=ZHs$Yvi7GrirrF=er=cd? zpCazp+<%(*sx{2 zoV2la>UVRrHN0-$>%51Yf?wp6e?|+i`TXIr{>Z28!*@rw{rz)#IC$y&`W%>T0X{rv z)51+KN}UcU;Ji%eq_3TF3QD9O%GT^Mx#2Q#V-3-{101#{Du#%!Ag<$(AxG(#RmUqP zWmcD;$D5P@#*j>eI>lxwlyO`J=#34T9i^n024KkMe>aG3Gu9*gLR9+|LP);-C;m3) zh{=SkBtcm_x&OY15DUK|9u`^IhVUD5IKGe4d^zqvGID$WC$c@Zz{co7Eo7 z5!bcUipN)fxWwuPmIiJSQ?(*)HFJOvANMP=51#{H98oq(_=gidP5_e%zu2)kmJf`^ zma2AH;^Ui;`o}hEkL_Rug92^h;Qb}sVl$JR5AmUu;k{{cB3}z)q8BjdVaE{E-N85>|S{I=@?Pr+DgmUduMBGekmR7AKL*iQ}WgqVZ_U!*mcModwJW6YYQIyFRPk;2+9~tm`GgtH!@oiV&>eipqlW00frb(&lzQ zGIs3>3%!dm;fs@c%HAo~XDNy>$!rtQn zqvgJb+b+Gjn3T0VTEPO|EqKDxb-Y_AEAzNAtd#{du7Guq&X00X4pXX7vyizN&K&7Z zN|ZkAwH`T&)ip7 z8`}pI*TUB&3pyar#o$t6W@~yqx`tylI`+!`ch$X(+=DS&i}NCGZ4^U%t@#BB{#c$p zq8=NR`sCX4ann`?>rQz1=NdWHMuwjBGJcK{H))Plj9#PI!$^12Sw~BZjipuld&G1E zzdZtVX?A2!ObyWNcR$PR{C?DM)rFGzIXMK+RWp#eZ(~q9F;IFBj0v z+HTixQvV1(#_5iNR=`z${{Ed6G1e_A7`5dL=G9d1jhi-su7np$|5Q23FLMmfW@OmQ=gOsi zhJ$&xUk3IM8Hf1_p8lWK-UOb??|B@Lig0C@>?$PN-4}Zlk`NJz7W=+MQrs5WWM8hx zmMqyR`&P0RvS+8PiL9k8^*ayhQ`h_b`TSq6?_X~BJoC)VnVB;)XU=)9dxT3Vo|``M z6LPAXqTBDQi&Qjz&vI<4!28v~#|%F$7!O7j8Y^X$65I-YIDJN}9o8e>`XRKvyMdDP zN#k5e(bbEk=JD+3dkJrzGarjaj`eq|a#7L}snw zmEi}S%TM$C>S-1ViF^0&=UVn3bRLvo;wG?m}vH zs=RCSAT{TmdwZS4O?t$#sht~=ao4EE5l4p+OYin0?RAgq!t03Jre=pbZ)j;>Jm6Ji zdC9h0Hxe2DjgV$I@gSSBIDP87wandXGOcGkbgE<#u>$gkGF<1>8)}D5ByV3UY94LS zt825oFei82MRv_+N5@x&o32#s71xcQX=1p#KV}N_B}O`y9XNlXbV>T$QmchDMlm{8 z=M~4q4l_po+c^X8!iYxk%s%=~9fx@E$zxi@Un2|@zTXDx1Fvc%Kns!+s%-$%EUP@2R$whct zSzoojIvP?G|N0d{Mb4W&m@!%}CbhU(G5)0W0YA;o+ludfoK=H~f-s@EGkKz=jNgyS z&&hvOOWf(H2&YkOW@YVitt@W0e}A&gC5f~{E}B_Ay%N)oRJ-*C&LvrCGiP4P;_^)~ zl#%5C!ux24^-_WM>%lXTg141c5__!Aygw_L?T#00zp~Ds$tSMPdpAUI+^EvIw`kpV=)x_lGDnxmq(!4jRMPkfdBob0>}G!C z7ys+rvC`iSmJ1)*61Wvl%SA_1oH&qn>J$vMo<1^}U*)$nVkJ~coy~7mdQwj3=%!+b!`Gx5Mz6K7o5BJLvSSglWqk1M< z=5l#I9^q;Eh~%|=URym!yyjC&O^7|7HEe(yU-%{?AzS-#A3JKF)PTY`&u;UiG1fSh z33#S5@3mXjq{c(spAaU`Bva3_Q&fBvqi#K@^>Fn;bwJ)8lX(-<@v|4V^Je^%FO}5c zNI-UCm&N_24`-zpj6UFfK-=>;pxmoZbB}hhf|slQOTkp6av{QA>;%zRl)kUrN<3_Q z4=U)Qo4psd`+bb$)hcW5mt&j-Vu`{os1IZJTYsms4maQS)N;+X6!IXVjHV_e>8_oZs(|ta3=q=q|TH*Tj=77{9QawjO=peAFT} zjB5C3L{U#@ZgQUB{a;zA1jG|XWBY@tl$~vo;9=cm$6^I;}d-D zSxC|y5t`1gM^B5eJs%eSYQSS+qn>Z)aj#Rb{80IQbYY8@DBdHn-Y(-Jl>~ZMkM-4# z^K@>ElD2V?0kL03tOD7R_Z-Mav&FRC3$dBvbiZq>7bh zVzH>xXi~bl+spK@@LP@TePgY?&&Jc2TJ<&2+7}of+&j|8iL3r%5SpHS@FKg){@YIo zzTO9Io32b#9^9Ss(Q7&1`_^mBx%^g69`R%OZu-v#60NAkQ-hj20%t^?5e+?0ocmOC zajD_RK^NX1x^Ved<{$B2Y82l3k-qE3A?8%y=zEQcKgwEV=3BfCX)ElWzlL<>@)D;MCMF1u)n<4UQBMvN7&~o^rMg zLV9ZNWrYjaoYvh$C9=CpU$aKGE&y=3M>)o78x4pBE)9HIx%V-{D*Jk0p zKQZ#Co^QK;g2r-8J$9zOA%OPAOKp4i!{0l`g4G(we`=d^->o4g#a8_2mXh^MtK%6F zAM+N@#7)4w84ifqn{dw^?usbw#3R2I;d!I{wp*Gkmz&3qU9mZyeO$q<2SdF1{;{Kf z%g5=iu3XX2m8KoZOZGp^>}sneWwS?5e_EC&F5;@osEPOYlx8oy^!0Ssqh?KTo=9}a zEE#XU@geK;r+%+57@Kn6lH0~F_VC#Sn0*ovQiAVWvV8Q|AvQXbVs%CCc#O~_W~`J0 zMtc#?$}A=>P*&3-+j7u~=Hp{pq9ygx1Lt;`9o~vCk8DQTy!}(&)=D=H=F;drP>Q*0 zoYf}q!Rgb^?MY0objCX_nd%hWWNSWnnDs?J#REzkiqfdZW{oYUCz6*H+ql;R8=c&| zo-C%uCAC?huW^-p6x=~wCK#!3)gh`Y|6`)vhvWJ>$hh#9iR+PWX#T^jky;hRKCbS4 z4)^-}-DpZijDprIiB*-aZJz|6hQa+6f|`oKzNuS@xOviR81P9^-dfS$c~0TI>$4=V}!{ zz>5=kcD20lj*;uw`?R;dwR4qkB4%ni6TEBAffIlD+B$nx+8;`Fo=?B{ILS)Lf82e) zql3^(p$9ZNl`>qam9}lP!&1YI%AanxXHJfHjX#ilCdnm#ULGDZrorW>M;LiJ7qsCO1XTWP86t#yRTg)bhK?@rk&=5l=$Ze3!h3apdu`d^7yGKC zM6chYVst|5?XZqRk5|gKN3#9LRuIT#xo5=f%LqUJr@59Z>g=|h=y4(z^K28_QIQSKmXp?WsGy zNW8+iT*~ms#qm|O&i?#so#TA=N(278f5MFj?%FcPM80Rso|}|VC+&!C1N-58(@55P zF-8Vwzdm=$Czcm`y|+95L1&OkZ!G&VfNopUsDU%p4K>nqoHYw!%zAr1T!O9wye zrDe!qIXr7V6Lv)sv$x?fZYhvQFoZ+Vw z_Z~`%tYSO<@-({^onTk4R<4;qhxS3WHqS)1dB?_V_8i?;C(l@g>TxE9DO)9;Eau;r z+H-`UR*-q$hbIEIeUfJ$&qUmry?U!Ic7Auz=~$N4;Mi|Zha%N{gFV?ywjU;iw)jjZ zTQ%pbhR6tG#I%oCdl|U$+h3|;eyMO!!Tsu^CXFMcq3p(r9rctWtU4EIcH^H29=v#i zp3|_2c(hAz%$n=@rv7y_(97VN7Axw_26A4#y6J!`Z5@1sa9!jt$^j8!ua2dYYtg z{B~jDb)qlFw@96K+L{I_Tl3_Ewo+t{T)gkF(A&~tn=Y<;y}`Bc{+whn&Fb5W)Q`rT zwdzdHpH(!oL!bA*8bmm)$)cB^dUOO$7+ zpjQ6q4FM|fceN*`r4O|=PF>)riDh}rY#DvoJ5sIVe7$Zfb7wS_ZQOOtw@H!n)omYt zyhrDW#z|}Vg@#85G)A;$jqT9KMTfn2&c2iB(reCk&f{3rr$Z%0pC#Y1`-yYDv(+5# zPE66jy&{5d4GbT7#63{-b>Uq3a?_YJU-3jhR{5;QpzoZ%%jolar1aOS?8#@J@k_hz z70LAYJgG83yfQu-px*QCMPdQBbYbH7ZqI(#Hv0)%eHpXKg8NxJWM4PxNOt#?Ce2a~ zwaYEX_&0gCGaK{tS$(^DU;RtwyzEDw`SK4dbxSAJh@_>9Mq$*|C-+Ah6{KXAc+tBv zyIz!CJCQxGEdHfra;cr6oy+(|?c{(8Q7OT-FYLCc=V{$O)54YlYT3`63X=P7y(1~s z-?#PTJrP!7y>e0>%g+>8yz|1Xx5=pM8M9Z`yvk^HDzL2Gs21?HeeBmI^EL29=C-We z_w>HX|^79$_bH%}Z)ahtO=T=ynS-$(bH2tMT_R8 zBEw(sWyS$7Et|PSOXccT+@mx1>C*Tdk~I$rViR4JTMmgd{&7?7?88)b-R5(BXfF4J zr+VSwYarB>8Q*(wTJt(o4XPm3g0N30qo%Ky;yo6(c@p=wg1^r?BEchrn@rys{WjX| zC+WM})$&;7*y*3l*E@-V%$^$RQhw+$($8}j+r~d%(`y#$f6CQ!yVk4r~I~HuA7d&K*BA2CyHKNu(elybg#Nmy2Aagf#;b0*VWpRZ|;w- zFXTIo&?>rRMDeW2Pa9ozKh=>pIF1N;s6G~kJ0>)K07VnBH~2vawSWTh%1N6DMtEO$Zytr`qh}v6HXZJ;3vk-rR9Ge_*(hy>dL*moo7DU zuPO79AHaGZO>G~W^*b*ITp-q$lWS!HhtD>Ap*Y8IadKPsIbw;z-4%wyL* zwJ^0p>Ek_-e<6vTS<-?wT`~fm^iE17_vA>TrAw#dkFne`HXZwZ^Q$|2vU)3mR{F)( z;sj5)1-5G6B2Hz8O8KUyvzI^5%nsy0iu$JSu74>V2`fiua;F8_s?B6>MTO)W zr=RGWj_0q>H(SZ|nOZKuHXnxvgi(8TbBmUBs?4OAu+4GG-bo-CWhR4{vxnWzhX!B8 zj5T9#eHCL}d?sid8x=wdiG9Ye(q8hqG=Co1q!jdwxXto{9@A0d_A76k)!ytXnM^59 zQXnqYC3(pt-HzdDB#2fyV^G3ewbEre*){>_cfEFtPO+7*6C3sRml)^I`DOk1^zzHO zE0ex&%(@P6q_RY;GJTe3Vf_MkdeV$74C=Sx35L-2TZn?&lkTOiL-Y3^9z zf<678yN2EC=I#&MsnqDds;4r39h&>ZHtLOD(lhfj&(gc`RiS%7eQ|N9(Zfi+KAx8r zsGX3I-fkc+Jvq_4@A8hGy9ugeyPWp0neSm^3tsk6JVfNF?%u6}ct6Q=^kx-X;IdTA z@S8W>M<2Rv7x3kxwcC02u+B158_m=nTFx#LmZQ~qVsTU+Wp5)w412Z2iqg6h@NS3F zqztMx+h!gm|81Ros_f4W-qvtItPvPHSut1GdIxo_+~2rSO?ewO!+dgCl6_&xrzL$u4`p}fnb zAKng3bG%-_nH&$bPCN0A<`edvnCaz*Jv2=6Z!=daI4y@qiH`)Szr6}KS$(tGYaabd z|NJ4zL*nAD5)#EdGN%4fm%D@;F0*-cuVOyEvt`(Ga7-nm)|U9(Y(ej(x!A$FOBR#Q z1r=#dPd%;6oYi%y-kqjzo)VgRx1N9Rm+mWxX2GKG!ZZppUEa#A*e(=VSai}H4?h)a zsK;^Fr1jK=-MZf&5v9^P#vEDM_88**sl!{vg+ycv4r;#6a6Beq@igd82e)B<=>DPu z$!#B?4n8#y)>+8C`6U*7;aJ=@rm_x zIzCf0=0hJvy6U4M!bjn2$)2kceB-a)3na@%uY@_>=Q<8PrU$+jZu+zsf@|$S99wc) z(b4`%2@4gcoF`=ypXW}cNZtr<*E_9#nmYq;AfP9f@|CA@?**EVA2gW080z#$Prq@b zx;)wU^qB?j(TYQ_!53+r$6Z6J-a$mWee^~OdRB7dYWl8Lc*>RH#@xF3ax+uh@AN3aV$B&Xk2ZP^L8Ia_v z$}`~OO0A$UTyr&!kJ688UA#yu2EZ(}Fre*JA%eE+evgzh$seaA7^sbF5pC}!u2Y1ds z_S`vg>L*p|_A9$n7_h6ey1TtFF9gbuq@MrecAZa)GKJ#OHa+V_HB$kWVjru^0zdFp zD(dJ4kIY9uGYStc<^BkJemDN*?DM(wx%8(3!x2SqR`0t$Y`k#w)epTf7ox$PTn#h% zAQ%42_!->yT6P&-Ekn3**SQflTQLdI-K_HBo+k$kS`Fqct+GP!`!h9*n?j9@2Fe}5 zgUk<7Z+YLM&R}hhF`AqpE{d#JJJSo?mi}&W*S|Vf&)tXdgxB_0ls2au)F^Gt_%BSqbf*0CmRai zeN08i?ALoF?sR74u|(2bL_zU1r)02g{}RSn1$n8BGfTLrIM(VKr$OpUbPbnk`9S=f za%)mnn>%VxJCQb=aPqq3@t$XZB=z}EQ<+A+;u~%5LGIZ#Nu|7BJd~n|HNH>!vP0*r z&m%neOYVAB`-^&yeK*fMy+HP?NTK@{6p<~Q|35yqNJ2}a|TTF z`l-m|%RV4Q{Ltal{L(S!+=9p}iwF06ch+3B^qMmEQ}H5BS??Bo%Cq9i8NlNc{pHPz zdHGlSy{UiBNeBL|@UlApL2rp7y zG43$4V8Zns-N$P5PjIOrW?32HD4a8(x9)TR+*)qPi%0V#U>FJyA^UQ|+ZSME$oZ9Y<4&ZhsWkFH_gc z{m~NR|5&4j`>dihoNI-jPvzm)*q*%>sC(w-`fqe14Aiq9w9IpG2`pbWVE(2u9;J@W z$)^$D&NE{D&8DTNW=yrFE1lye>99GXvc`mZ0kiAcl?v;Jle-^R45#l=QpeHCRE?Mf zrpU$_>}|bv6ir9G6)B##bm@5T;Jbx`Z^ksRxAsTmAfwo#%&!?qWVS4I|Clw1%#%Z- znh;nU7P0x44<9;zA4nS*}W)(BEvBW+Uckr#27R!s{`l|N6 zH8qdHw~-%^IwM%{;6a_uzNkAaPFGGG+^@cHA~S7XJiPy9-FY$2fZHr=B%PSFHzSNFtEC>bv8Ur@8T*{BC}>ns z-BvWDzGygN`R!K80`c(8hsC`2drY=V?@Ndp)qU@13O{iAwGGSmg#Gc+mYlv-2?@R< zHv4Yfvs5=GFmloQ35|$`w|`rCJUridBYNIl=78{RCLKI&y~0^uy6Svo=6lV7rB=cR z1d4_y!^8t?^e>39^KkO1*9D!tQtN2y=&oVdTsJXP_l+@9=<&Q3@qiqbl6rfBk|o=X zO8)0Vrc;~! zhBT$*y=J}0m-;)5?>v@PR(ZVLC3@ck1*Tm~U748RxKk#EgG;kcDSjGV)Vz1M--EJb zm8t8w5A9MeQOgX*k7*O9ckCT+NFiPsaC;VcA;0Kta+Y<*c`xP#Ya5SBp2`dF_r4by zs{h_|_VLP`;@GfHLoMCIfIUb)NmIEhMe{KZ#_y^sFx{(y6YvQ)%jU?rE4>vJ)x!Eo z9~SaUQwk_mqM4=+58U)4oy7fY8PQ(zb^FlMa&S3b_HBOQZKs7i9b#VQ5vv{LulQ0M z6MOmtn{B~I(b8Nl{a`9S8&#BmB@!iD*adTrojsI)@5{wo9E>F2=nui)#jYttF_aWX zbex@wcTTc)ZEbKm9cM1LX3(gSFU;|3Dnee=qd-RaEX$%(SA=*8FpN|RpmSWf| z55NC2a4?|Q$NJsU%D-pz3#A7uFjx zf1!N+1zd&lV$%H6$QP`t>VgS}iVh3PVs0pDmELbZ8^Mm!x$@oXOtjkDSxqf#cx$ea z!D$vt#C(`I4R})2>6D zfo$6ib`}O0W7yl+ko$P9GYNFO+{dOpa7dZ$vQI2c=*@jUFPt1&3iLUmxHEZ#9Z7TY zj3Fke{IHpJjM~q8;g^B}+lbqY5A3^>z-1HWeER!a86TwZBVj%NguKcU5kqV#&A4`_ z7%{F|Xw~o1cK6^a#cP}|LQ-ahx_1u6m!ErDdQ*z|YjUf&7uTYu$(&cD`nDap3=t-y z+pbT>YM6~`FA%lT-8w&ee@N4P7%DzE*dHvu$~m`s>f25y=40P@ED;l$Lx_azorAMDe#xI4SYbXBsUxBJwUTd~hW>3$x$wvG3gCr#h+#oUrvsls;% z^(+%h5GKvKSvIp;)@H=Yn(cO&IU_2XCh3`L7X`3uzu^ z^Bnn%Zy$JsJY#8!6M1N$J}p#y1INc6Bb>HP=BB)ILEXgR_s7#kOLV^bJby_PsewKD z+%~Bn_ulUkY&RWCWri3_K{o6_>=CAgbKk^lt_g%)SemJvSc>D=Sd48jm_hA1 zA;3jJ*<}s`NpX}(%Rt^kZVi?-49(Q~9ZF#ddRa1P-#MN{a zuU3XGYE{Z34-id6ivH^%={1Mi6H2~}P%6CW>I^|`o3i#6RYeWiztFiJvW+KgntC>6 z>7|nVto=3y-;TvF)1hr~d~k{`>IkYw6iZSE?iU!O#-Z*TPsvm5bV$)yt8lBwGYM&0{}Lsa)u4?1rb|BUnBD{L-T zei8LrIYy4^QK!C=!zYVLE*melYl7e0wCc{58dgaA$+rgINSLL0VRc=>-w_*Xd$60b zfKDY+108M8?7u^EhbFbp{#s3LdC#+W?JJMxFC{YWV#hA;Id{#;D74Tz^Pyq&JtCJ+ zO7`(WLq@^)GnO@H8COo2B+-N@R2=QMW40CQuA0G4qXbX1B_#+MY0GEGr^-K-Pk870 zY2}N_GR>O(np~N&TAGH92Hiw8O5ASMS9MZu=)iShmKP;^Elh%~h7!_Cqrz5h)anzq z^)=#!vjd#B3EQsGdH@89Qvu=8FNktysPH+Li4?9T03`EMF)pQjoVL(C>bTonRduwJ zlZuhB(Y030^oL|a&hI8-uTAdGbNJ44oZ&So4|pkozs}Mk_jWPn&cK5D%$13gpPgOT zUYIDLSzEjM;R+gGt{XGkA8p(9gtKrjqnY46>)F8_yJxQwb?ElI zzy5Yc_jOLd4iVjBIcoPgj)@{31&Vd0h zO5AVl0E=)Bj`GFmB=rXps^!6#StJrgew?hf+kWink@zQqzIy_%qE_IA4_5?UEg@EQ zZ)cfxal#3WM3=}|*GRrgk%q0`)9%uBSa5hfe9uM6PWm1ou@GQ1Mtyc{#c1qS-|;7` zH-i-pKmERxI5rp>$tQ`C*S0QCZZ9owFD-5_%?*uoHUSUvd01WEq0X|_g*48*CXNlh z9wU+(-`0=K)Q!n?_Z?J=feMF47jgZyF!`*BQ9l0XB1|GqvAo#Ngjn_qG0msJA zFGVMbeC9mrAq_VhV*Qw9A6Wb3^sT5T@;j5WKZF^-6k08-eZrz8JFo+LKGSX2M$a#py=eqR8U7f>SU{3EXyQIiQ3Dz zYehZFuHCPhWji>i;rXK3E+)D)W3)hZID+=x(4HrSwE})cStNT$9hEEERnL?;l~u3_ zCk~bxaL)Ga|MD*9Zr0N3*)xW<%guYuWtUA^SkCS>-k+hcgAuJmu}}a0m5(ZIsl~U@ zD*8{KCwfU3m3?CjNPy!g?(R%&-JRS|e3UPeA)LWh8|7nVW+e!|4YK>T`mM(E2vd$$ zda7Fk{G9IF5sY$C<;|0c44tN*>_R7w-alH?>;Ba?V!444>=O!~sTYe6nK|1Vd3I|0 zky=T%Q1{TZI%jd#r|6MF$uCaP^&bzn79Gq+9I1_^_ zOz!WOEz{}S+4CX4(p1RPg*43G?{-=sQPjR9Eh}Ke-l55%$u?Kgpv7x%d)9mZuicUY z#@BjWl15a$GFFoCuT?D{_d&!zD(qcYT1)XU!h%*)N&N5{anusZgm(MR*H_tm=*rJnUL z3!7G0+~e2buh|b(3Y|F0e##JY@<-$G?jFqrTf`N8yf@!z?mB__U4@8l>FHf`_gV^HTm74XRr_--Fz~wlW%BzPdvE zQ1uBIw`_-8i%ov>TQfS(5V?Xe(#t{WK^SeDtq+maF*sv3Ij2~j7JrY;D+k_x>G?;~ z5IBzvrwmR1uu4FzjD-4W-V7N75wXsFcb^r^GrgaxaB{dN(`4*mQf9XHHTT^T%X!Nz z$s~cM9W>z_tL+}0?Q}{5561=!gfeM4YYkZPuyWFO1meb6h6k2@K0h-BPF=$1ap+2VktE-U7N%5dw1S5e=BFM>JsI>qj&YjY8ho z_re*EE-lkav>oMlN>QQYpyZaODplob|43cOJWZP-cq4qzkCoXb-7|4?G&g~l8vEH5KE2~O+Rw^G={Ci zp2!dPxbD8Zko~zP;b-_0dBt%h`A5XYS6Ph${tN|H%fpgh5hudi^FFSMbY8JZnrW;~ zj{H(M^TAnukk90G#r1%d5x!P`xSF|OZXHnyMV`mJ|OFj!(#36bc zsoC)KqO1p3sAlSPO{0RqsSG5+h#!K^;%lN5Z56E?%XDA!7T?bKh5uk%6<<64O@H}x zvE-Vl-?`O1xiuH}Gs|>MRjn1xQj3y9{EJzg=a=_%ot}`yTf`Inr4)a1yL$g1teVZe zi(I@64s4Jvq*;p|YaM)l&HIPOQle5to7CdvZ^rQzuPQ>S`4;?t5GD%~i9=K23q*>x zb6wuY3*vd4&XxD{JuhIq==&+LbwK&_(ygCYXOf&0!{uUQZ9fEUoX&uSPG^uHQAxwc zMnJE7tK=yMU3)7N2U9bC1OY=5sDSa%sGHeaT(Sh$q&Wkc^|K*p3Nq|r_wajv9an+? zym5b=MDpixC2q+uA2!04<4TZlcmZPyOqy~#625+(g+#%%RG1pY-YsWS0L*pKNM4mN z4x%!GAA!e007+#eKLWSeL;>*-8&EVr*lc3>5!lTp7T|6+ar_8ipLGs+K(^kbl~g7G zMHtRUgw01fF^FdCw=gZ(9du@T^s`kEK5%}g$VV^@yZVK87Y)_EVZ z!@~K&FVqicWB9@EMjHnP?H3$};RnAPa6E8|UvNBzAN+2>!ND%;XS=K)_adp~>_GaF z4m-h$*-%H@%*Dag*~H8R2!tXba$qM(*%>hLf4)7J0TZOak-%p15ek0NgG`tt1udyG z6Q&@FK&?9fKLWMhEqGtI1$bW{I`9q+wl;VtkbdUF;@Oc=l_Pb&gIF!-iA~G$GiNk9lyg8LsNyD;mXDkn#R2W@8~y~%(v|FdZ8{ITTxvHz1l_7{JKx}E=%KaQL~?tk*f z{pK&X>wogclk>;_FaDHxJc+vOzXoq<*?;o@l2-Y@-3Cr1NRr3|#n6rd7=biW4r3-2 zwZoW5%^5KIe;oyFs*O}iB6Y%e{s$^097Ae)1=~l7hLh%A!PwZ)|B$CKBzP-qA4#tQ zc7ilp1ydjmSHO%(=GCAy^QnSylI~Okk*>dh(d}M0wWRt57m&|^m!7PHv5?YVz>FYd zhTR*}frgnobQe!jr~yo8U%_a1uV?+VT;4DPiRSRRH+r)v`lj<5_7?MFPEPmbCB+Dikd@lm^ zOLyePRJfrH3JGa*4MN<_fY=zcjebxl68~G+zP$*S1Y{qqa$h zB#pm?AxK>Hz?w8oFghy?8V<+e!3$JYpyq&MKpTAoyp%SsaVR((2XJuUCJx|We_ew% z1jAzFXeE!Bxm+>?MHVy=`UYqC2}lW0_F*s*0AwVob-~%p{t_v=8HOUwzJ@WZ_ik_$ z4o3m{^*#YlECIZ5;055|3@A0lyO}qAS-kY$+LbRyZMeHHNJpx%OW?1 z<+n5#6iNb^=$AD7$W2Rc3^{VcdK*SUqDYP{n?@3V!~|VHVxl3Hfq8(Go2r9%6sf!g z#;%72-LIPm5_8i;>tZQ`YXHNcew&F*Fcc2^uY!^2TVaap<|0CJfMHmd12PrF6B;_m z1d!Pv**49&-rgc7Bm=;MXt&C=;ak6rg~MYcKv?}@EDAWOq7`=hKeB-Sehu9(_xL?b zKpyDc|6LB?2ogZFKjeVIgG(EfgHYx`t`~2To1?a#wn%axVH_lGDCcq3!|2z|28L!` zRLESA`oO!_Mf){OkhcLCG_3#M#r{2++82FbAk#;O5zvzdhv zpbfP8!yUJHIXA55z&}lgLXepbk_o&ZQ~gSYzq}HPp7mV)dpvL{9S>7DkCelj2^%cmXV!9Q5^Mhmd$ z&(|6Rm4empx{Wr~UQZ%_sSOnd{G`e^U{U!Qn)@Ll0k8=H8FrIsJ&gY% z!jN7x!}c<4EFd?_5fpZ#9Eom#X;TpXBZ0uivhx?SEj|nAhF(F;))T}pX7~+eYmH#; z_HKj;0gh>nFh16ewd-HPY^D)_ss^xBn_ztWn}Ti1za^qk8xg(Q2Qkx&IKO3G+~9o|50 z0fyV??w82q3lAik1iVa)WZ1e%6VnRg6W^rSFwUk_84xD+y`3-*(vcp}@_Ppg>9QVB%^&Q7 zaje@~u?y7A*j@mN{{;f3WGBV+P z2IKy%9c@1tK2jSC zAid+p!O(5YKI|k&3vf)&#+|(rK+}Or8ak462Z-h12^i!#zrBGHdfWjtA?^AIQ-st~ z{|I!(AV{_!VQ%}88zDvu^1QvpK{I=CT^*4>&$vdSu?0IPVK@pEJRE@nvo8jVM2Nx> z!f?2-$REMz?rdgG3-)l)I9f0nZ~j2bFpzZ3`PX516e#WCq+6e0!bA}D&=0@;?^^_D zSNKmDXrrNJ-QO^<&?m#gqrg9qKFIN)4e-BVC@fSKKtII)bd1OR0{()5Is*%(GwA0( zFi=fy690mMZm~EpH<05YL7M&>hD8$o#v{T3F&-)&$q-S{V(@Pm4vGDn7@{RWTiE1y z(3bVzFajFd8vhf92c-}OPy8DQhZE3HcK#C)jzHl4ff#xovITD|EgIPHZ#>X38hS{u z-Uo4W+~Ei`SoHsm2uEOW&~e%8h`;@VfJJY`!y|q%{LK%$#g9P8IC9?tCluk}(5A+p zoxl+UB)Kqvm;miplH);74ai^wXp{0!7#gqV9+rddI~6q_8({}WV!(p#7jQEa(QquBOc)3cdX)1wLo9yF zFrnc%^6-QM_uXOzA`*w*iiks#$1ErWK)wHW$3Qy*wD|s07zmF%>;Mc4Jz^un!$JFD z>-PT@#|SJQfhG?VG^j4fasY%!KE?omg_F@jFeKT~AyGK=A45mnNQh`4HJNr0B2=dR zDK!!Waxa;4K`<2AFrk29$Ss3MgU3o_v?w?cSdc8<0WqH3(;*n1Oc)d%EH%l52AyCK zWEw+wTlnEoh;@FD{ePJsq;D{*{H-w>+Gik>8gzoik_iLhk$XRYVaaJB81fHmt&cwj z4P@M^2_D*y{nPvq9#jSY4MT%C*$N|1=~x67Y|8wN2NWR^pvRPdGK3Jx;~k42z@ftU zPdq$uBXaEk9!S=I<6)6tYmQ72KnunM!UOvMGCzb!9wuOl$3XQtS;uH{hXZ(9as?Lb zBW=woAhG^o{`L5S5TQpke|CaJf^7%#amQ>;NT80uk((O82;eF5U;OYG1bjlXXJa@ZkSAFdn3%t%{%#TNOd0ekt;w`VRv>N3o@2 zP&IAo7>y;Lut3MSE#V0~W~(9~N&U?a)PEQZ@Gf%gpn=)~1G}YLV8C6sz_42t!E7zz zFd(wAWc42qhOku=umwmq?ofC_n`M6v2^NV)W5}WefTwi#MFYXe>wW;kkWW}x3~Ec&LVE&#)l7aKT`=E+w-pz7Q*Q$jHEx*rE-ck&42j>Ey%>$N}q z1A>uT0l)~*PS@XfU=kzqEgX1E1x48U{Quir1Pl_|srri;z{qnt2zCs#TK*dk3y1dG z$YAKrJpbDlK%s&CqYl`t{{V2yG>e4ew}c`R0cxMWJHaEtq(deQustv~86JR<*OPeE zy8n|S;-5**s6|63$9D0jBNaAcVsh=c}H z9EA5rk%b3OETEmvzZqgsSIk*xosWF95CZN;58f6E9>klg;6ZRN{(Wbf zsLO7v6w*v4^WK{`!H(dw`2Ym$1pMGT2fd>%!0FgL+`xOu>34c z?MUDdrkBTrlqDhOmJ$lO%nAJ*1dQ{)&rj2Rv!9y76{ewiUHvzICi#LnWbYH+8S*B# zF5%X26;BK=B;4gT)YJLa-gYBlZrNm%o0cK6BVr9KMLEu5(vGSMLh#iAdqvS#? zi3yOxt#mHcEt4y(^3D_njM$+b5xD6tBP&xd~tRxtde zYE|*VN~mn{>G#7=-xUA&@9_Hc=iziaD2-nkWl`+*Tk-9c7odyVA3rw?S|b|9nP^Mi zFxlcwG2NDb_|niT>t1PhtLfRavSCO1c=FPthjaVO?fb*!cK8tOfH0Nz9e@HjbpX!n z=q~P>2G*7ed((nz2O5xAV@dDvCOMm{9-xla&edDK+R`+;y-zh&DF(IfaS*&R5se`Z z?d`9=98gK*dnEnq#{!vD6K{@(gm2vkVHr|6;8A+?>2K{h)`g=KRvN83yVl@4POQ(=#6*@d^c_pK)4ZN+`xApK&3v46W zQg%?Xg1H5XVAK|&An9}{v<+kN9*Qp5!Wn}DLiQ#og%4vKAF)QW>+6LHcxjUojOijh zB%SKKlnf(iGjP+-6bYIuKg~x%qEhkNva9faD@JDvG{KlRe12Z%rPEE0geWx6?uEj3 zva2;KMq7ZGjM*X%D4PO9U00&e+yqf-2f+iswA!t7%}(RVY(y%^J?eY8?$CQMii?^j z>2%$L2*Sip_tzHx>zB5KMlhP}T$Uy~b+oG7qyK99-NS??82?3nNIKb(D5NMFyQ&v| zj9sIRW+!3CY;B+?9MdIwymYelQOM9V-n`56#45+-z>k3^OYLo^*ufmR?9an?zVb+UK z5hjqnkF!GInc``{lolPl& z5Lmz{U25311McVp9`2|VoPhJ`E5d3%uOMm{bw%3AjnIzq-GWOnqKy#qxR7+>(w!14 zh++i{D=?j{GM)%$frt{p+tN00b!jQT1%v`-{H0i=Gg(yP$gV!r?kv>^IWLWW*l{#~ zXcX>==e)QbQQb>miu;D-%A>(!6f1>cT4*jV;Xe>S)cmN%^0-33GvtR+uCCB<3jl zBBco@0eZ5XjI3L~V-XFY_nMwQv7T|UE>9F|C^tI0#Bd8N!C0=qLh{c5iwK?O(@kc= z(24^&PCHK19mfweWi(5FuF*u=%B|rYu#w9+iM!mPNOXoiMB^+75ruuSpW5ihC3rc+ zW`4oy=+~p9TaoWquiPOMyF{I>RJ7gP{Op*^E%XE<+JK55{}{T$iyHsb@q?igH2Ng`M3K67Q?dE3a-P0H7WQ9MH zzmvcZ#eZ`iDQuI$HWQN^2nzu)lPCy5f6I#OHW1yeB}O7eAAfBEvRh&u=xHb1x zHWS>q^r7~>SQP|FSm*4de|YV;9j>VZWh}_8NI!40AQ30+M98@4kW) zD|RRYg$ehjH7o9GnQziVM(5J4VJc(|vMKN*@*RLj!`>tlH5Qxy{@H50yy#ZW``0_%+ zB#)S3>EWYO=cun2e*_wGR!tii?KD%OA?sL5=SRH>SZ_>H2OWKUQ0M8V9fEzFbzcUg zuk*20N1p!XOn~!?Od8T|5*Gv&m$oBOx{@s^$IhL6f#?m@?cvnZ?js#M@AUKjfplJ6 zy)n1?33pCAn1K==EJ#v~YHXZ69rq)*;T?_njOipP{KnTkf4Ecg$lfGZTv*jP{?NNO zpYr0VY*$BN;W>*UrGWW{j0q-n>ps}IUbwTN$&6EwA7NEnm?FLm(47jMBrOYfCu5na zjg!o&6!xGc(EX6gh@Kacane+v$v1~i4`Vb?TN^Ip<$Mo5dX@{m`Ie84g?7)Ew#_K8e@b{oIg$b`u>Wnl0lr02TI5ELzEgUm&FbI5ukj8P7hksuqL z3bJzy!QCchW{jk>T2+0ivmNX%fD!Uo%^j9iSUT*frnYk_clubylM+J%VJ)K9xB78I zqQNF{f0Qx+8l+j6n^Ze9hy*UvHDy*CCwr%I?X~jSiuwh(aTxd4H#tHc+Gbi%)}x*D zDg!%#?q)ZNIbV~r`ueIXX=E9lg`;Qak+mLOriF|5WX7Tz?0PN>!W^cR=%Z7xDb=1O z7VT4T`?Ncg7_uxuI}VTGJ~*0l3^MHN79iqL?hLKDHrlDsJzx>r%+d@Nal7D z)@S9s2DkIOBTFwkmA9wmzqr%I*l(shrE~n>rZ7f+i@3&igTIvx-!A_FPh+gKlfgC< zlP?Ym0yi>~I}SsCO{?rS4BgMK$ht67Td|!4LLhTHS#+9%9zV6|>AGdFv>l{ACDL$YZgMWhHV+? zU0`Y6V&pvF!z3ZO&II(2VV4QjoQ>k>ax6l~rdxGc)~3geoE-JGXZIlzl7_ht>_%3> zVb^qEJaf!?v7Muok0AlcHY@S1&l7!XPzF`anNtLR>_R9%QLJcabW-H;k<`Gmijn}Z z?dI%#iZaL~(*_9Qc2LK!GvlVmw9AYr#CU_lyo>}!M5=)gO90g>M<%12;3s>jV55;O zS%#YG97f3K;z%_(Q#==>xrE1pq`lOprWp3%EvB#=Tu&7b#RHK$$B&%!E`q@&44w&L zU%>5uOS*f97uVDVmJQQ|h$XkwnOFp#FC%v@C#-k=E7 zAfJ+eF$T9NG$kD-yt!;POvZq_%$_|93A#a;Q_e30-Io682||xK?+9Jm!3efnI5b>W z0v3b7afd*|M47exIce3R7cayRsw3S#_=8iV*a(+5dO#?o9i{jSZ)aPYBDa2ayE@~MR&y=dcA_Y4igr^?a<)MI2v{lJb%|W|6i4oe!$8v--ePCaT2~_7B-p~0 zmL%mn7V_wKBve8t8Hbw2!n&Z5G;>CO6-R~`=Z4^#vM4l#2ZJ4sM8AQyOKr)uDS0<2 z=T1OpL*ZLKKtoW=U!!Vg=j+@AckH0MF*iG)m1_Gzj|Qb#+XvKw8FZ#1)LiR#{y>zw zf#R&4r_#-tPC>RzbiU(|(_9#u9!VpY6tB(~BLzr*2~hb< znZ|7eSNpNGUbu8#tc|0NvwfYsbzsCe4SsBLU|Np3*zlFnnzjMo*iXkHG?cVTL*fV4CQExWVPp<)?6Y@5c1683q<@{nr4Vt`L&{q5UJ3c zC(O;wP_Mj(riZFxQ!xWa`@+zS}C5tQ&lzyEdrnp3|pb<8yw^m^fC=RfDUO z6zJ-c;ea2%@WvM|y}Oa5bdnb0zw`g|z(hBgI6XqU!PgC6y8i%~q3!0EfjSBllZq1y z0W_1A6GVTi<3MId*R-%q`|)siLI!_08? zYSru1sp^u=1)Bd(|2C#Econ*Eu}$)DNzLcC({Epze`F2+fBtp4K2D*V;-qz#RxJ7kJliuss!-JJiKc);o1%V*y$LMclB;nz<1z8E8`@Xy zw5hv<0)Xg*2#FPbv0nQ@Ew3-FWc_o!~`^8#Y9Uw zP|$x;{HQJA^*NwIerAE7ApKzQ7CgFv9?b9CL~kV)p?hADcP*fQkwiN>!!#tk;q2P0 zB-zqo5{qiUnkUnHL0OlUQMnwIfuh|RZvrM2lvjxnoJ67TLZ9 zqYcFK*gKy+2Lfw!9V5e`XXF@NXTfId2rGX(O0mqL!v^RXDteiG;1!q9n~iV^vBc#(f< z+zR3<)sp0-@fUy=c`9y-6-)J#tE|3BK!|ba)_VoL*B)#@J)1#}ka8*!Y9Ve( zNy)nMWFlUG<-18>$86uZ_hMOKfhEzD1~7~~okrc=v=dC3_Z|Zn5u%9aSMW}nZ>88r zU3JHqweixegH}&~qa)8HLMWsGzixjq=mX?!!OT5=S-S{DmuQ>BSEYU&d%D#VnOV?N z_bVhD$&;$Nyi?WuqLT!PgHLGvWFyK>5V_l({IGn4D4GRVjzbe$b~Os{MaIDA5vpX& zQCZnJN0~uYBhlR>TYYMEHXK?FoqyWORvoYcRZ>CJ&30*X(f%e?Bv`r{2zM%VSx?I67wyK!rwR71ykYyXlu~Jlxln>2OamwO{Btgyxu_G$uUe5& zE@`9GLbrL$nR|%#4{hv=j=o*Fx!9jdwwt{AC2p`QRMPl5~N-qw-`;WvHD?$c_$P~w^wl>KLiehCIss7*a4xl=z8<04)-1C6Bv#{bpd61{|3_L}CYFiC`1q%_R|v9S&(5 z2+w%Di}3%e#?YCUfjSBllbjd{12H)^lc*R)f7~z-K=1t(J_qcmN{b~h2KVAaZUYTD zgxoR{$RUuqdqjsPG6g$?n*dUm?r7&V!#zr4IGRj20p>HFL zYW;?M3G$4lE$eLQ)Rs8f1G$l@(l;2%puQ)4&b}-HlIM#7}^A|Y8~j-oiN9sb=G9$^N{KyHRxp3%FfUS1HbN3$p9<2DjBsPe`?y= zaGI0mx4^grlE)!)$8O1hE=+T|DBmS*L0+$i#;7XJ>2W(a-edxgD=-9VVU}A|^Afif zQDR)+F2N0Bu0c*th9GIya#?bx%%(AyWgK={Xvd{nMY&snkRt7es|uXipFOhup`cM; zl>kgz8RT_ZG~%YOpcS-v*1c|If4M8pik~+nO~Pj6vGue``1=6|M^_0L$E~}j`js+h zawiWvCKB$Mu%g(>8F1n=;3!cdXP|qQR5s)_g!pch7OQ%60aa2biN=P?w0k&-u6Ok? z6m#8^>Ym|pSKCcT+b$nE+3xY#G|{&so{54v4Vd`Tl9b|nNXlXSPfpfte=>f|2@}`f zr`6We;Hka-QiT`#Arb@q-Q3AU;7!Y?K#*K*3*^`L*W&Hd%1@9^Fm5=NeD=c!3q;dX zn#coYJhd4e^FR{EizQ145=YiKz zl{On1L$8P21|H-Pa?1ia1TvTW{nR4Kl5M$rW}olgpdHwI|9EV z?Es+!ChbA1t3=67;|a|4KIjp+OqnM7$!2P9`sL%tErC=AHXgkS1P4G72XE#9j{ca5 z&yz;pBg@gD0|rRj6(O4m8BmVsVU07M*rwOWkD*J=jii6oEw;>A7&2E?tI`o&(H9^k zkd~NF7>RvSxaW6Z5s+R6KB}6flkXufBIJLfY?-MJD-Eb94>K6heP?=22Z)3apaNjm%qLws8HqVGp!%@7!S*ermPUJwOO>iFg?rKv zfefMwkZymsD0kG~lKKI`WhJm$h@XdQ&?aSx3Uqf8MUA1$XjCN8&C(Pm5OH6?6Zkrd zWt&iFXacJ8{k{r}J&sGT^Ht0Hl`BQT1Z3I5tfER`QCpYys+O=IO}Fc2))s3Mla8_% zyboJQfEC!iGS(9hJ&N`(9nHbIr4<<~3ebyOy)g=d#ITGwda+z2@Fb0btJ|x z5*l*2tsF#dvn{ODiISTc$Zm=p#cP&DsuX%NKnq%*nK}m2U8^;Y&TALvWbIR+l~syY znp!DwSyy|5VnI}++trV1r7UAs^06q{4>Ny!OGHw-IlW|4ZDf}moOBDS@r3wTGEKT{ zzc8?Fpu%9So|AsAET0hx~Q5@)lNr_Kd> zsu8;72_6EjYL}J|G5v)s6|-_{Sg@U4wsgYaeqIX>SE;>*6OlXTq`c0^4d$vGCh>nM z%dUQqoL@93TWW01&Q}D*Dxvw})T{DKSiyu_2C!V98W7jeO7>2M!BkYQ3ln?Y)sYY5 z3RJU>c9Sbr{=Po{ef2E{>La$eX|Pt+l2Y$!sO%VTmwOl^w?td)Z|6^}(kJ6`KYyaf zjx-y!V;!bva4`E%(9sVu_87K>y90mZ(km6pH$i1(vo6(jghE+MoLxim07Ydw#LtjOw7y44nv!qRKuX~}$hHa)c zI(z2{TfMe=yY(l(l3Hs*pPjMpOsWVpx7(!yhJ>xyRQqeVX3yJf!K*qWZ%pnKbK#l# zRH^byCzhgxpUKY`rUta?dG~*fKHw@Aa?Qh{rSd12GeS+{ey+|59+ zNeq_x{>r{p-0vO_{+ro9_t-zb&OW!$+w3m`e5#~Vjbs+lijh%6B^6+~ePY0xJgaKP zLuCe&_LO>no5D~zYwirGQkPeY43Qk=hpL#brz@q(#Mf{XhV=x_mMDKbmwojtgxlk$ zEXfYrIvuG46Kjn=hzyFy13Oom7dYvLlY?tZ`CL_*5ND6V}Ws2c83G$G1&|ST0x(#kBB{nnC2Gc$j)M3D~!K zfC?+PXqQ8nC$J55Nw9xYe6EDtHv>{T$&X9q}3uHrK0>R>K$u1^e=desp4Ilx#qJ4b`^g%h;jAc>^OUx97XQP4|C)q?$I_Pa^-E7-T=&|x3#%73arTi0OEd@@gEinplCXjrX_ zyyS~}(8Uq=CO2^DLmx-SrTa+TeQ((H`CyJip#N5X6N!LyG8n3mqdg%1o$SXXhhpRkqvo?D(bz_*Xh&k8g``~{L4~p+s9=9Rq0U(-U4SJ5~ zfa6u9@IhaBW=|`?Uxr7|6d^rfd^+yF&N5cn}}j>$6&M1e;1;zFCdC; zb7PLB4W29De?bu4Z^IE^zW;0Ra(#jqwFg_bvWMbjb4d@ycw7dWg>_%W%fCP3R-}`` zHWZWaBnkpIIg|V(MStta4ZioU@Hs#`Mb;|7Fkrjw0djju133)lmIVls0GUhv{*bIi zB~?kX{O|^iMt56Mar?+3siM^p4*!4q-$5M|eX@f+;vpC~hQqIafBWkn4*!kM=;zme zzFj}xtfNQX23q|2x5FPFcmT(r|8YWh{`}Y5{qybHjKqhd>3@>^d;)!b$CJ98;e`JD zZcgCnqq?5o>90GRlQOcv(_H{wKzI2@;Aao{X!xU*kGJzLpMUD95Vh9+Xrl`H04NG5 zV0p-Yv@*=bvj~VHNz4L6P-e;z3daj6iYGuo3};bFOpHP-8)8Jt1-x9Ukd}zVOSJ?Z z=fHO!^@1RT0e?^dDCV!@eI1#KOcJfoGOYfj4c$P<+=&w?=1h;kFs3$Yh1aANYD_j1 zs=~Bu#!&I5WjtUgW<1hm(@yanBI4F~=BXEl>2l2tk z^81sA@qbf}Rq~+dMS@o{M}>%hUZY)WK7%WQzZi(daXM~<$3V18f#{%5g-aCT2yt_tP^4-C2NV?mC!QQQq@5H5i485VX(<-5oDi8lGgZ7r zWri+p#Kfd^P7;o|Zblsv-gJjn>k|%4i^O#;1b>}%^Sopx8?DLeRg#TCAZb&!5Qmma z`+Fk;yD9-QP0YY`_RTa^g_&l1O24tL#{8>o49k>MBNnbC)fjY%!91JjTm`dn6^W5@ z5^IK776=l|35!0DTU1wt{o8@j*4|T$aJ!-pNKofyCHmpdKfM))1UNY4#s4`NZ`m_) z^?&cfU-%L8@#RsxN{=#CS;hBj7A;lOZMl(xI>yN}7v&ztQVol?p|(92EZK&7 z=)?qQZX(G(&FPK3Mtf*MUVsjRE&C`v+n#+FbzQVft8Vx%S*Dfi0Y6Za+UK8k6U=wh z4L|Tsb?uH1P0m&iiDX(R*l5Z!1JW6uXvYJGG3Wp90OWmQ^ZBO4~Nl|Ig;Pk&{t z)7#*4xhwRt_qg-2Dy&;>{gA1%KW_17K_(SX3et*fRNC;CP<~M$wFyfSKh&KNrWX@p zq3QZA@u%s(qaRQ4K?xs%Tn~hf2kvX66v7o~J^cr{!=F4?DY{maWIK4R^(%OAy0@ zswh&yy%8*2q;J$f7=DGLz`3EJUwRXi`&6`ejR5Dl-2g|980d-Ik8t7;IWcDt2ci{+ z4Mfk927a<&wSi%(a0T=ZyCdY3=3jw)BpZc;2;7Y5o zkIK9nFT5kNH;We=ky`H^WxnDYWw-&#UxsAyu z0=vK-$#!S%p2RPdxqFr^XYOe#(XK=LbTUCTJFLJZ|Ht)!y?3o0$2od%y?&chh=Yrg z!&J>X)=?q}$_m6Q2Y;+`=-Dz=OJ>Al&yE&LILXjL(_U@HsrCGLJd&5`UOLL>*`7=j z(tyItI62N7^7+0DvFeFO<`{?1AyPs;x=4e^a5iuv%r4`gFwQV#I*B|wsX3<6c~pgy z;$(z79h=5cip(6Ck1m6WG$SdaPgoz_&;~1$W8NA?Qh)v)cz^DKcB1Oq2!3tOq%}5E z#3u$gurWx=-dUXBx5J+bvtsV*Hx=aT8xfxPO^%+DR0<;2aRe48%APq?t7L_~#u0a( z$0jQNB1v*wV9z5T`a@J_Ix(H8Ufe=-Kmn)9^m$`m9Q^`APFV91bUpJLV;Mua9w+vc z6bzp}NBpYYSAXVYaZp&kOF^&m&8!T-yM`(#6 ztr(|dQ&#!e?ira@ZU4GHC2J|3n3Hvg)+c2hg6C&t9iyI^mQ`f?=4E@Vi>0F_*fTTR zZC{+4b?xiV&8CAe+jYp+zz7H3yrAGsgSI>lqW=!=oqv%L{b*kwXVEneuhUCWx+=Yi z9`r_kg1!mxMvJMuqJ{j=y?@iy&ZMYW1nm528sH6i4re{vUWvIk+>m4EedTV;%FFPE zB;#f?q}>*!6IVS?U{g7iBk;MtEv;8gzuJkQ5})JG&IrPJU;M*k2u#!R{*V|_ZEO8% z46XYXhJP?W9AEV<^<>RqddIgV+q~*q2sk?z{?Wb#Z@yDv_U#7Z&dpB@*Acg&IbrNn zg@h{Otgo6+C_eNJ?)s)Tst#rFwxMY~+MxM@Bx)MAC1n&};IGXS^>f@AFGxW5WQFFe zx{E&!{1t9HW633T19&bCbq450mUI3IaGcllUz`f2~?ekK{HE zzW1;2IY8Bl)YCwrfOaQ4(df zhvBb}{|{su$NBTaI_mP?(BRMi4F8y5031HQ z{(R8>xPt?r3hJc%5e|4(fA+X@2M9+{2cT|$z;MKa^umdTodD<=kh|!?69F8E!R5G1 z!_p80dLmx*sF=b?gNzkshDPlybsvBE{ORNN`SE3?HsVTeo%L40e2_o1GRi8)UnBD_ zH{#=)D5#T0#^AUM$?yaMTS3|*m}HlTq@h#6MN{i^&-g?GhJ-K9~h!)UT_ zuof~m%R~wJt~{rggb%HAz72;5k_A?=eE_Z_4;8#)A1d3kk0vwYs>ZI3sBPOJJsVMv z%{T#`yyQDV)KWU)Z@wopK$FEIJA+-qQ|vscbJs$xI)UA@e^4vecEgD0j*K|lOrX!z zY`fqUZ)o9$lP348Nn+d)I*gL0^fe;=!HxQinl#Q)nSFPaw5T<1q{C9W+DKo@dO(kM zMJ;m@DQQ|29#{@OF9g{qm-yR}2ug9t7P6wU;VGhgS0JEmN@R4=X(XHi1Pq#f(BP;p zxiw*L;nM1Df78^h=&0Q&?ilqtBWBCA1D;PU%hW^LBAAjQUk9_06%X=yOFM)#H)&td zht;^YZ0t$3VrWAu>GQnYWHQil_J+wbSrHB*@L~LHB%fk z)`qmZf2nnuI}k|Y4RtSjENPY98~}+9jdZYaev=!N_nP)5U-OQtIPh}MJ zUJla@ji1aYHjH`K{Srup?EQ?=kbOU+w4}bCQ7oO_-ZB}s!k^11TZs=cN>f%pqb#P3 z_3MS2^zToZC9MsuZU5pF*0q#p`If=rl)A7qe?qgB*uzrJvvjD;yF4?1k&+!HA>`7f zI`_(bv~zMbDP~eSbno;5^-&+BaL8OH`8*w^ea9VOVn4T$5U%dIo+$9Vyf@Xf;Eqm8 zd9j>oVr^=Ke$i7iI!(o+u0}pR=>=j*Y7VIaNiCu~j;uNM0TOIYaI0b{nz{BE>z~)7 ze?6r7CRcl7@wO^>mOAchRo_^11u1owVkpmSjWsVQtVsNnhvj;xs;j2llPE?)g-n=^ zz-8(v!ECGC#KYe&w>ra9_a2C-{Tf8avPidRa;{A8LNqlBJVhlIrbJv*otOyIXt9|4 zIEtntTK4hIClAS>bE?NPX?B;=B01rcfA!FDWUSk#k?agnV^L;~y>+pMp9oUFy(cUx*0DNf)dT-A-|M&jy{g%mJr zv+ny4^cvI_ikxI?7_$m-=4N>rLDDM^sP(3C^GpvjFzcBfB#33kAZ^sHe=+^d=43y{ zk&)k&{_?TGnrI*wj*4}l~IOZ+S?593Dv`qA-68Z(RDo?g@ zq+|yudy|rv;u=^ca$bki4uNRXmWHp-b-l^S*=x0iMFt>PuCrGnSnPUIVqqovnWfHi zJ6Gk(InOoH^)mm4s1I z8Dcl`nTbw6mTz_yw^=y{dCpsW6627O8!qX=iKuVH$vefO0?e^aW}TV?bOF8pr5 z`^wN7%Sv3}iuwt4K$Qy5LLJ505EFz;tqw)$S>FG!tQ4zfG>^!ChW3|e_+RiN+woA9uNf~NSoGQN)y(R3g-cN9{@=$jmrq6MFc7VXA%=tgDq zm7+y|k7!{|PpD&Ee>-?Z9X>wjWwdP68M!*ed6HC^Xx?2(sJbiCU^_r(k(92MBGK?m z3lxIAYy8L<#~xey^Kmx!EzuX5B%aSxDlDOmeG+(}IP9GGI|g#^jg+Vq*naSRAGJ9A zSS`*oaAn2d`cN$e{V@DaXhA|tiCa;wR!FT)8EK&yhOiFEf7N<0lT^zLSK7)lW3{|4 z)#wotsTw1bB#`^M5WlQZMc2rP69M7k(iKf=B{&Y9L)~VPq;x z2B*-U3||=xqA?JtQSrwqqxqwi93yTN25`!Ak=~-@fvIn^2b4dnJ`pTpILr~e>bDt}oMI7rKY2!3=X03@>=h~{6q?G{ zRS;m!sfEs}0V%j3@IZ2B*n9_R@sh%34iEgwqBSf43G_2c@&epl9yuCe4@bK$JGxOv zgTMa$fA@W6<^yeJhB~Na;DT+Gi^g0v{?a8=0XG1Q@yFCtcMdD+7qsTERBl>mWRL6B zRArp2V_isTHCVe6vnjnQ4iE#RJS2x}8Ve^ZBZZ4bma}BBWtn5F{Be>k5-f!x*p#5l zQ7W?M{fdf`MQWr3L6?e?X4pCr3Z}fJfGU7Ue{$uJ6cf(PIv)kFhGBAKm-H#1D&?jn zWuXuz`&~X>`F822bWmt$a(*#Z*Kl|xSE-k4RVhhkR@~bm&Or9;S2%4fg`VI@@#9=l zR+jFRe~FYyV&xuzjN7)wAIl!Fje%15L3E9FQ}+?-T%qe8#3f@TG1o~+BbYf`<0?)M zfAVSW7%n4E5E!?J%9VAPli~ptE_UZ`RcL@kOO02P#`z+M;HX7N?@!oqBd+Cfc`PId zkIPkC&RAvZwc2!p+(FM-uD-dx$<`9 z*u46cBs<KH{7C3R%f2xAaqb}@1%#%@Dci{&<-$8iSha#u))clin z+XSqFZ4?jM1TBii-C;~4T(ieY_imBiO**XUUKP#Uc;DdZyi3Z8;oT(p_TiC3Y*$ihc=29?-<9M&ifARt6??n{^vKkX=}~7-NVH2Kl{tCn zZPUD5TvWC9{JfIlzR68;e!`OAf3kDqTlPET!=xj7w-A`fOXJ)^fS;#?+_zjc>`7`q zFlXD_S20vFQD&~gc!+MBR5zIi+J!<*`OO5RUXTetCEKW_N!>l=mOmE}?-hPEF5AlZ zJYo7W&9saKdy7iIVp>+|oFjSCJSw(i+pO!kVp|=UQz}Jc{Uord zT}LI>c5F-NR>^vCv6%ApWX>HRxy?63paIay62BAiu7Rk?RrcfC>HC*827XYpF+CTA ztY@Sf!U`}*ra}CALx|oef8g8WzcVA}r@6|f!_~OFj}jM5>!O@(%*5AN8Tq%tMC%;? zvVpKJdhi^*=Vmd{H#z-^kz}qE(QJ;6fgQKT#;-gO2>j>V)gg)9gy)N^@qz`mkOP($ z*!f@Z%)5S$e(zZUQYeFCP0yYXTheu#{1dEJK1MzaK7b?g*;M{!ZN!;CYQ zWyF{hr^wg~0c$;<@FgM2iSaX^JuTF-7O=9$hVuKV&mJD0dZ3AXejqQJD(^`+KC5YY z?skYUbj`+({|~~@f0_q;J*($A1~Esl)@V0=-Qs%=@tt#fx|@!5`;ZGx(LE8rPOaI@ zcW#He56*4NOr6495$Y5UWI*`+H9Z%*2;({R=W4Pp3jaZ!LB|Y`6;aAP@!R2!cIpi5 z=}x|NRf({BWd@VrDsA`;NOs;{dk_WD=ckWPE7;35Re;$&DSkr1?P&xy{7dn7VyU8u zNv}u>Qo8Rh>7lMo%vKF+P5QHe^f#rqjb@WkLKKs(JqiLjG?ThLL4T!GO^e$w5WV|X z_`DEzX7mll;E(vw+d`m+rMK=DdRW-K^zZjcvST~3+dyM1k2IRmn|Uvyip$@{M@c2Y zGQm_*dd-zDKVOS)Pvv{|;raYobeAFsTsAPaU4E2bMqe_lx0jlSCb*g$4b92a?3)wU zq?_-Tuf_RNJl~{Y;eX1l^Ki~nQ>!ht&E?l_l-iGaL6{8W8XRewldZ)!f;D1Hd76#c z-vby$U*BNgbptR@K^*eNHhrXHNB$Zr^OzP?b8<0)5Xc$^!$8g{emJULvDtRfOx0_r zG=TQx(IBQ)Y2{SV{-7V41R3`Gp@fA{mycY;ic@1ULURPn>3@jJhDzmpZf1oK5M((l z0SkcCgWL+%u}|q}bnoD33Gr+bD!mniT8e*$MuWod?u!&qE|;JRBbtU(jw=HZmv2wE zm;)Tnni=!leAV$8Z3o$`z@CBC(}*>Lug0jT1Iti&dIDzMb{*0+b5Lr;BzZ zRt&?FPT)h4XMcFwKTh9UQU6UAtUQiXlS*X%sX_#gT`a#oX3LL34$Hj{8dLVwj-ON-<- z5Wdf^=yPB?Qc1F9FovGq?L%%0134_YjSRB}aeFmoLA({P^AF4|#_Fzx?*{_WqIvd^DzvFTekM`ThYH zKhX8BGu)Q<-(NnyzkJ#Z8GrLN9uE0DyJ>;h$K}<}E-hhpu)Mo-RE~a zfYV_>qj0Pa!{zThsr+1*XK8Q*@B}u?jb(9+Dox3#~ADO13XK=ZH(R@?B;iQcP2MJy{y)h1NELDg0v)qgX1EIPFKM9;D=UWeKQ zK}iiRRBYQu#ZJDQbI-Z=z4pGgf9=)Q`qlgBLvxI2Y=7?nkDctJUg{rKjdg=o z9+i))q#}ehNse_8R_3#&lxQ7_8k|=iS2xN|ySKsUP%;~OFfI{xc5QTgO-?3-qR~bf z1QJuXOprfxPACEp8URUvrK~nU?Lbe#4RX4=lbW87qn0|A`Z76xt0Zau1L$Z`lQDWsZEzk)ck^wVm(y~B{CJrQ&AFsuUZj7>@e5A>W)=`}t zZ(DY9Psfy#0K~G?h>uo_txBWc@^R9ZX+YQ25r*$M)Kn~_x5o5dyj^*3?D7{3G-|#< z+2l|&=sY^Ws=nqqUmwN3>c$>TX%IcDs1nQSREZiGp;wqc#6?3#(56Rphrd9WhfOIs zbP={|Vz|9vG)qBuV%#SuX~k^hYP5h@Jpc5pCQY+kWcNEYOp=2fk?>RSMxw4TWq`WC zumRLOoQNGX$-`So6O#Hao}qf*fRaw-Bi3ZngAg@<}lxq;Q2V^G21#wxEYeDG6U4s_PxmOu5`IgOl zt7eMW1OtxdS-u(TD!2v_@&MzHC2n0BHOuF4<*KVdoFH&FSVt76a zEvpBJ*R`6Dw6~(5mNFv!v(~0ALaU0^tCsI}tdabr>G?A6g!I4~7 z826*Ae{sLJrRNj=nfGKN0X8M*Y*wm_%n8NTtwOg`n(6HrPX^%O*xZBw&z95RK&gP- zNcYH3UBFf`H`O|$td5;Ny7x_~xRh--!L$d!14N#^IIvKkMGnF-NA*tW1EjRUb3V{t0oTY7!7tPZY_>XA2w!xM7TIj7!pj41BA`ID}& z+jyZwe3hHdR4WQcLJLaug;4lbrSYP?t$4&#o;4N}ZJKw&8&`FF$6@}+Hi!2y``Q3N zFXn`V!f6OR*ffYNS3EE^t$=LX?Yin<0r{3{GJB5N$fHXxLw%*qr=R#+O-z~?^K;rx zN6N2ut`YofCTHP?k#zMUT-vF%^K99w>^u(WuRkHIi2T)x#yl1|?BlOl`Z4Xo{mfRU z$^$Z;3$tq>d9=aQM+Xr3(>Z1vM+bI*oru-kRoN~t_Er@w9oID~ElTU_iOyI~;m*j- zmx`1*9txHa#Ay{qZHK97h*t>T4WJrcm3Wb5+41F#X{X`IMaqAwy3k;bw z3H#S6Tt21O9&(#--I0eN!5FlkY$zanoK_rLH#aCl){R5A@Q-`wyOJXKc3xt|ElZ3e`|rwlIjnNrO2Td{=k8F+JoIom72tE5BfjD3 zb-%Ym%)H4E;C?nr4=bC(@z$#VRA*$Mvy63qrX`MS{y7sd+1@yg9=6vWJ5Yisqt`&P zK%3_pOYw`|nd%LkxquA@z~Frws^o^&LV0T62 zV^z2E`W_)G#GSb6(kpN9U?-3984)|wTX0&V&M(%mVL_Ew#{bwBIdTgO0Aqu_I2qpP zPF}s68`Qn^`*hplfKDm9W-@6(&|rbwSLt}V89P|IY9gh@uc(g7bRiWIo+a7|S>=tx zfR345fqPg{m|{*J09KT;y8$I@JPvFpX2?E-QsNFB37~$Ya)Lska;u@MV&3s0u8Oid zs6iTRB)@vkbf=lhCUHyylwN!P!GHQ*6`10?UHk~W1^b{@jlT_AN~xK)w(BCb@5O6S z)Lm5qQK{vYNzN6u*Wa1B7M2gNop0Au zbJf^62D?)L-9L_BZLGD|-)oO%V;xz#0QWI`j28VJqqlo(y&m1}UT{Bro420zs_R#h zt?ak#%wkykLR`A8?dk_3yd{9o+oG}9bMx&AHM0WcChN~GYbxo&hN2F6CL$F?wT&)Lr(KJ1N2;Zj3Sl=y z(}JFV+rAqxn2ts}&-#NDUBEO7Fzor}rC2~mT#MNuITcRVOMWvX5G+?8d{qi0{f7b} zzSRY>90C*tQz}z~06861sC)*dm);821jYmxVb~)m?H%vuw=1YOh)$f$$%-RYS@Xh^ zC=mv#BRa9no#FbQJKGvxs03k7WK4XG5 zvArgBB~di-$PaD7zldR`$_X&CT`=-8R?aFa+H1p#eriJfq-N95 zQJQAs%BB1LBSzS$s(>I6NBc^7u;Y~ikOCbBbZ9N9T=HMA!>nTi=?x|68LKkL@`=6< z!EH&g2|ZKwgQ{k9xS;CK!&B0l{LWyDi>F1IdI=vq%|3nQCh5cvS@pG?FqYY;(5E&K zK$|v}Om2l3wI;gvOph5MYk6W;B|_u*L|E9wtOgMTit2SGs%C6?Pcjfk#rlSlP(4s&K0` zdajmXKCzmLJ52$*Dmf|VrU?ajoB(O}1jj|OJUcf~17}q^DT{Yu z!BFs6YMQJVLV(JlZ~%3G*;y0TyHkT0itUjqqO(;|-AQ8MQqQW}GpcV@HaCv&m4>K6 zQKGIa&Y*y%UAVTbDG5z$wAe|3v$zNK=*7CT$)|iDWq>u;e2h{t-tW@FBIG!3mNrU9 z+z|;(Yi;@FQ*lOkr(=W`3ocQbHjfE%zNYHnxzPw47XV$ob~K1m0A+&?yl$7qhYDZb z*`U~Q(Cm+SBxbPnWxT09IdvDQd)yAE> zinaM8JQD(Z*TFBDi_v z=y9(;I|H_su?Vhcs;oF$-j6M;W*3)Y^lUl{uj{>`MvrCI9bMH)jt^SKlwT(t zVu9x466ISEJ{bHEH%t4r3;*7WO!k=ELfs;6g#)OkdPqOQJ&t9*$*{)KPVx}8Z%T2k z<=!;{=6y0`pxw}21-ey$%N)A?9%7m#8YY|xkuVfJN{Blyl%dzgeO1ndB60hs;~2b> zAeug(?2g=;Wm)d;)wP9~w}&o#&T_E^p4R7qTIaq-#2=!GDStagbqs5!&3#llBZi@N ztP8M5jESPb+7Se2m&*ldd0rSExb=elRl>uK}={>MpNt4%6x+G`(BdC(K{DW9o6C*}!}> zxtED;F#<*_2$FBF%}QF3$0?VLc-5w%Xzgq-;_KthTH9=ZyU$U>yR{YKKygYu0h*@W z%kN07?>u5xLn7>^^o|r_p>lf!2XO=^-CSi>u`zJIkr?F@9;|H&j_zv~g+7+-M}X&1 z3-}+C(g?1{#kg*nt#G#rZzsBSZ7F*3?0dnBmLF;hpF#C2ma#GIU#kslV^tOlm$#LC z)j4q#9;=RCo>Vz?JtMtH_^Ui_&Mut-sbE9j*lk~bFddl|e7b#p%ZCo{W1-zAw=1%W z|Mhu&bW*MFRljKI4@Jv|N(KQZ^&K#Y(jWd|XGhxF;r2Pimrf5C}RG8f}cTyptc zarWrN1@_7`;#PzQ{{BR_%{Ir#kt1HLB9G~0da{3w{ex7fmVd?Ad68G7&;$Vdkwhz) zduatb%beTy@>piwiuBMhcBAz}xWZUa?SvO~&Ed5t+xXCS*KC58&cY)@vhW?>v2?p- zK)P^%gZXU1G0D~uVSDeu(rANsFdMHfBiJVn)C-i08-tNb{j^k=qJEDTM*XZ7w#y8? z!_`aRMk`3NV>x`0YB302NC5EM-WtAIWd7i*b!6mR;I1hH)&x@ji-ji^G96?sBv&!X zHgp^-EHBPwjPeJva-wvrJHs0_o`-|LWp@9@g;kg!jE*!-y#xZTO|gs-)_j!5$GGF zEBlnLZFpMy%O6x)Z}>l@I>r8~Ji>AQGo8i6!orjYCnpG)P?fd*8j$>|KOXDUFx!)8 zGC}!Yoa1@HVtP?@-h+BUk$jbp#)l`{nr;`+r8E~))Mh<{^2{XI)A;l3xtU-|Tt zak0#-1Iqb)8Jcf1d@cbh{VM)iC;^FIxs|hP2yo`f>k(Kc=d}RelC4k@G{{+`kXQlZ zQr3A|w+sNkd`@M92V*|WZ(y)%^j3XOl*ve?qmfu3}=9p<#aa5!W~;2s6OYgkKqRUsdU$V6%sefz`0uU4cx_ z$zJ_}vq-dS$+I0Qc12uqEHD9SOOP3j{n&EnobwNqeZCZD*iCceOSIZTO;~cUYDqT~ z?Xt&$T0zm;NW+m(fVAv_^p1p%I;!5O>;eAmM^1ztF@o>S*1S@8X&Pyu^n%5b4Z+9! zK&6zncHGi8a*XLNX!T~K2aWD^#=3J8WuHkE$x9#7_vF$jLfn{O(2VfS~#C|m)K(P8q#J(6(=aTxd zO^K73Nf9~{h^l*XZ*wiS52nuz#E|hHox{g>BT33%r%H2qiwU(|7}CM8tXp!QtohI_ zW5QhybL4Gz6HEMZ-9Afi)?0rb@2ltTFOsxra)z2Ni*3W(6i zJ;nQ8yO?@K`ddGIrm$fN+)`~e6@)9g2Eejq@=?4MR%6|`h4VXl=UNAe?@_>O1IPmg z?S8(_r#jCo{*Id@2EUFMWz)tvAY~-wC_z4bkBYT>?FEBt2AqabIxsWzx)B~~s-zzd z2=c%d)NoUrTns_E62{{F#8m@8s&==y1bV;dkQP;5xPV@4=SZjecS z!->KL>ARl205-fIs{83Kf`an=3@Vv4|w^E@3BtCS~PTG4v zfv0dqAcY|K3Rvg%oJB>;*T|g51nFQkTG5`AkU;1=bOxR!5`?(IK|;>cZjq>bA`J%a zBcN9yUh_53j-VkF^1w57#cuV(Nh%WZT3OLJb+K2^_X?y>CEQ!w#3=Wrk8q zvbq)JqQT=*&3fKe9@O@Akty%HGty=PK`8d^O_u2r2H>k1MC}frSD~U=8dS_9MuIr_ zIu;W6;oLQ%y{bKRUd2-&o$$4E0pQ4#RzANaZ75i6tVP7Yg-&klv1zb za}7#X2S7_z4wczuxN;{&=#=bXR--SP(XmccdKSf_=hNC-x_$F7H=so=UutzJFUWmq z{8L%L3v!_}=v`hEv7k4{MgOobO22EGa(9-LP_+ZD{&?{kvWP!Jc4u1U)SII}B6fH4 znI7SvTLR?E;;HxuT8jGpTC$Pwg#x%|tD^Z)5>Q9j47EMHvi_L*}@ zKRg8lSUS5Ih89EX<$UPp_48zFgV+N2Msoj8I%7kfjkk+2N`nx<8rba|V)1kqwCWqU z0RVxc0`ZfDpTC!cOeYpP2#bSgx}C~SF1nr#cm=Uvm3gl05MyV2K{*%>voywC;wR*W zop|mfP7+z&+DQ{yyB)|Rr7f|FYpJVkKcu+j!G1pt@3|LS_I8SV5-l}5%orTgN0`jr zOs}a4Ew>G+-0Mhqjaziv6dI!Mww=5F3&3Ld012kyK4lo+t{+ODTz|QNN#C!T6u*(q zO_Gi}Thw@i5jC@YWxLXdeP_?H&h2cqXsX5JgjK8Lv2BL`!_On<)rvB)$kYwhK!1fA zLaDLT=0`hDVbaSxnf^uE!tksDF+V;f&+yeWPm*ijy&+DXz?l7n{KRK+4Vm^=d7z&S zIWf}!8jO*Vg*marKoAhEB5S=T0Qco@#yttEem;jVY_CE$H2dX;n##X|!*2ZQJm1o{ z+#is$YL@P){WUW;=gkaCo6$WH2@LvnSZ_Z<5^Bp-y_H!kf7pEZ^!QTWijR%Yf!1MP z`Mo>6-Iz(j?Csh!w)NZr5m;xZTZNzN=3wk;8E5FQA;Q@A3=IG|#lg~pjO!8>{1AjR zMt5E;PeLN~?a>qi{8NL69dwEpI4eOnh)Ws7ry+V7g+At;DHcL3O|*B%|V|VtMg&Va;&p0 z#srAukHVUz4%m=gw1jhZc9bd+7(Fq|bRf}aC{OdEIdfeao3b<2>6k06;-22!NXEwv zd&L(GZ0lP0=AnAnwlJ^tg}PNG-n68C0(G!*%u>3m_&cey` zSLx`l9lS6soT*z_khF$|F|%AW>#j-RQ`E5G$LXK2hs2LyP4vb1$S16y2%hKBm*e)==2h1Q(7jc-`bT|Wl?gtv8k4Ur`HI@ z4>Kh7HO8o{R5+AugnVCiijEhqdBLls$=q|8t?SS9Kz|I}gGe}lo9wRCZKH*hj9$8U z{$L|QZMsIBx(wuwYIBciVf`SQzv7l6DIYL=D>*FfgyA#yHeIhWPQ9m@p3hiNAYNIXvn7!`66ZZj~apY za^U(e$QTNH6x2DQF@kI|S$Si##V~GQ5T47j!HG#M4POCx!@2l_dgAtA`e5!E??gds zRCMNlU}NTF|1Zp}EdPU<^>3I%PojaFPohDNL8w_-|M`NAjfsuzf8VhG^O%Q+{=c{b z55r<6P6NXMqLpR;0>1Mv;KQs(wvgZ~m-_wz9u{K5g8ub2@x1AzttiTmR{Dp$mr?~< zpL;zxd(JI^XF6i^?N>9K60#q5Tn#zSz{C5T;Q*ccqH&^Q z(CN5#O1|H>9w*~o6wif91&`-XocNdkV0<3=G){Z#B31%(`A$ezy}z{}D9|k{* z(X{aSn5`9l16aG@TxVZRqE+pX0#XbQ$VN>)KcZDb33dd0ymD`Cg^?-QdbetfQh>{! zWaRpICD2*{b9mu&GC383Oig!S2_Z`5(|SM^UWMeC{~OI{`dAwmcQjS@1VSpQ73^t2 z%^y$RXIPQvB{_@ncr(>v*+zX>ye%+r{R|3IeyQ1xS`)f(%8LdvslNS$y6!NJc1F*q zk~mfy|3S#SpPr413}Pt!A=iyz>}Y1;Psm6+o^#`uY;?UB7%FU@ZZ6j=l{=75vIC!g zgZi)SGPC{9c3J;xyA&X7|1sV#M1gPQnz?pCSUSJ#**+H({oB8h=>K3$&3%Uco?4R& zitx2Nb%OzJm%bWS@3|AaSf)5EU zE;fWqcRL0of(M#3&hUYsuv@i$d+gP^{O$GaOJ}=&d)jic4^Dx0cS}1dH%ar4R~Exk zUb#2|l@F8mbjym|CBzNOi%E7z286<$?GS)4H0XF(GMNyjbuK1k;x=Iz@-jXrr0GXs z=xQQZl$Eji+6>Mfse+oox4_0&3>m6#j7s}P@>(t_3d?cWABxzhK~1{&AG4vTu#azj zkbfHS$)i@0)VIso`b}%1NhXa0gsXV^Lo-brF~HGD$Mk{(l^mHx3@SCwgsAq12=W1o z#N5kRt_J5M8Nak|)IaE<*dQhhgUv}LJ4ca4rF9&$e3pyI!yWk!r%Zr2lDfI}{10(o zJ`dwSVVy#qaRZm~bGB7(!9*3(Zu9i_)e!zn&j}iS7Vv~UtO!U|kJ_;nU|9mE45a{w z6&b2p4vK7)j|n&GQr^SsZBf?c`uYITb*`48{<8Vun?l-Fs(~q%Z8Z(D2+Vm}7f=%r zn+d~=tLj`>$C*r{_vfWGN=V^2xP?UQax^rzylXx#e`>4vZN^qQITpu`OX6TP-8}H( zwl-9ZXd|d|9N+<7mzSIT#oKrQPT>UDSUbJ1Aq+_WCv?pJqi>Kn&IX0S_OD{FGBEzv z`q}d&Z@h0WWB0`anw%%R2vlv%jm|&wXzGSf9Zel}ou>dkLKp{N#A-Ceg5!x;E z0BrjF>E;`ITW42?KkR(AD-C>)Cf@qjWoHP|pO>10gzXpwfl{AQOqD1OuWnNhdDv4k zIgZ=)903l4waRvsgo-1*q%;bCnDOx*XixG*NKR|T{dm0^#QD{0;EIcPNitANwB(>| zM+b}QaV0(9=!IRtI_QpQ5ntCsuq1grBhjf;v8asXb2xK@z2|)^B|l-a>df<>3g_~A zI1VgOJZagCb1T-A^1Q|Gv*9FUPT6GtMB+1EPyrGO71CnVRnU$4)n4$mA(!FpE4U>b zlMvaxa$vtdlo^aeS&ZLt2SZeqH9+C?lv@Ze#1z z6AtjP-4D$%G|=QQ zS0D1+IT94iA^lTnC2Ic2{`TmQgT0vDaoSxG;ONks?}s2ZAOlJ`unsZQOW* z75MFHJ5KvssK(^73UL`>RZJboH~jHRea6UIpg`5!BwwuIBeqfSOKYV*(kj36J`-5M zjd-c+&%g?~D>RQtt~1(ZtKZqWt+(l*on*A0)5gKBA1Z~qgcT?LEh@qeX6xG z@Lp=uavSiVk(IGVB0U+uG6ZW`F!Lt~KuQ%cg7s`}3eYBJz{@SQhp5X@FM8Y*>4vc1Udfu)9_TYhbi;st%Q*L)+p`Xf`aUar)~l!*;qky z`=h$tYXA*;Gopuw)g>RVsQD!TTQo5=Ytv^~{*WF|P1yTy(y{+n_*gjpOFH&{gpd92 zIEky-0UI(>z8RDf!uE=q{a^j#U}R(F{NE@4ul}*8{uL?x=`mm> zb8;H2Yeft|vo`JPi&U3z{4U{qfGq|uPK7(%*0hsq#LXpCe}g>iEu=|~Wt&tdTN+00 zQYkyr(G)PwFXNH2gyOLnV4PF)M_Ar+f>UZ(BDs=0Ar#FHu$l_iNF^T3xlwqkWPrGV zLnYl4SUFlxjb0=Qr@GIt28=U{MwPy*_%f$^JdoJ>25joE&alKI{n zR8`zS$yC9dMwfQ8Hi%@(8Xc``hY(rCd#8-G9!EExTAQ157|Mn*!1-P$SktGJCII~r z+u0h{suD}t;uF={y>oX@iqjjNsIqfxBEP6~++AGXY~OhQSzq>}<`eP$@M=dPq40Nc z?}fv1hR67AWRcEz`%XZwLYR+ED+Ol?yb*h7N<~os4Yyt9pSM+BpC9leJRgh^WX1R! zJnwXe_)Gklq5t93e}#;J<$nbETgcS@lVNd%eo^X+R!|!Ze@U4P)cZZ^UU9(ew4?u65#CuQ{iglL)(&e?8UNwBTqz9iX&Uz7VR-67Hq)o*Glfegzui?x zsBKF}8ss}FfCaIMC&?)d11c-nsOSZgw-_WcNN!Qr&*Hl*F~f>G*K2lG;p;3O0EQFZnPvLY_%&_?sY5{))F?cV9= z>??6q+tsHsem*h2E_1*DFeer{v{tKSZ$CP(5tltvw@1wmrP#vD(*E_`TOh_SugE8s zR+MUR-pzxH_7I)%L_^@e7Z(XifjRmhQjgx%23MiKP>9} zYi7CSuQe_uw;&tH_YMAHz?Y|GK&`T~0tk`o3GhfJASU$BuRFqst0@OLlSG&@jh0gQ zlnDhCYUvm)Z$~Fv7|x7OsE2=y=o3RzPj1e(az5VX4)o>yvY?;8CQm5G>30%(x>_RT zk@8jI(Vhj@e{6rh0Us~dqAGT)K^!zimeb-38t$H?qMaR1JGEi1mIB> zxT^`%iQ|%!fzwI-k_R2O&7JsqZL_YJs?U6eW&GE1|LyoiTT001hJXW6$b;{WkxE5umqwBhurIM#Jk6$^*V(o7N8c15Q2z zd;w%iM3FtwWwbypyBK*2R^}3T+^isMN5XDGahjHjhC*RL=gGz z_ZGiu_<4p2rMk~=8s?cplhfQ(epB7?D0=F|($T16V(oMxQ!^u0EI@@qvZg6hzM?Y9 z2nF^uQLUswj#6h~c>(t*l~;9T+TF2+Cij$4L|+X^tn<=lAh*U1mdvr}8_+Eby73MH z3{4I>o+?bqDAq8L7&b&4b50-~5;7;|I7>jGFjc{aaZ3~^av@x}Vw{*Yn?a1wJjkT? z5PSm%?BcA~GiWZxCIBe}DmT!hw=+o{m^qfZo-kc%I0uwa z!yFotmOq)Zxd1b&TIEVOvc8!n4;%LExn_vM`kvR(mIKjY&^ zd}6C3tFCdq(+Z+t6GbNw?1CRG`x0_;`3cB+3&^;rIJlVQHe0Fs!|x4twMbfjV{31CP^7U;pjB*@@C+`)!{ zq6iU?90+Q}f(iHz5}PeEAWDmb7-Smgt_E&T#+W1s+yDRp9$M%PvbS?EE`t#SFHnQT z=`NQtj)zCiJUI~)ZpxT$$Oz3zAT3pC6&K^9SDk6pxwRgX3Q?EV#0&n5vE>`ZzM$j3f&7`VLp{!Za(KQ|> z)$TRihUWHIX2>WlzLD;#plJ4(vrE?Cln!|L4Le{|fYN41(6kzLSs=J3St*wv&m{>N zyH}XH4g*dkC7wQ2ywNp*Tlo7X%-b<{;|*M+ikqSre81Alt4cXpYN?WP>uB%R{|~D!<5;)*(6)!r3~J!fD#t$}Wa-dwilNnYw5FsjNrl>(7EL6L?nZ z_ZFw`8ms!?8YK`qEp4icez59(*y?_*;A;NqN3a^Mmz77>l@st^;@_4#YJXCGd{5vkVQYl z&O+S?{*%GI;@Q!53hz7}U`YsXU|!@iQRpi2I^?CLx-<4pbInWp2foV=3+>c>&EI0m$8~KA=+kZ1ZR-)c)0pP7#G0lPNq)iG$p_;I=u({Upf8a1?+yAi zfv^v`r-D=$Rx>o0Yct$MbN5EHB~U96S_l1-O(1M zc(gCnoX@r}faB#WH*8^dJnF|^RxviTTs1ps6D7fo5^Yrg%YNx>uBs-1&VJj@?(Q6B zPpf^}km5FcYwB>Dz9*qs8Sv|dSg*9YWIXeo4VhmRyhdm(p!Qeb`6iZ_3)q;n}DtC zJ###+X67l{k^$KbdxRg4H6L;w7UA*|D{l}xfW(pR-`UnklJyaGN*Cs^U-znjt7-Hf z|CNO#4zeMlbNri{FtIZKFW*gdB!)u);bctBe}=~Rt76yu%L%#*9CjtvbhP{#v49zm z_phil7109vt9|%2D3gk70WAo)P?L^a6M*abnwQfFu|^5%h6@`@cZy%Wrok)@PGmUhY~|~~S&!=To~ex@iZWV7B*4M@3=*3?7FF1|`_>tw44W z$d2sjEhLAnly4Hx6x)0drgO|s8SkCJwg6Xj2qx<&Mu3xv_*Oy?it3cDui?ZKbiR5p z*Kk@?GSzn956EA!V#FN~ePH?7gV{2na4S|Tqgl>yvssh+1&56pCs*z$0FFCh~E^6RI9C7nq`NR7%g z2kmJIDLcGDhm_T5zRRw?N%g6krr)W*>7-~Ci-${zKw^c1w04 z73F>KCrIXGwnfbTZ8eM}2a%N~c!%d!9-stb4+{hNZLBQMVVhnj<9Me69TmrY?mAPf z%N_unW3A)(ml?rvvi#Fk<6vY>HF5f~qy=^9v9qrW?2gnubS28tYi+&<5MCeAw6!B0 z7q~1zx+orRd=<#?5`OWVi}{J06^H$c(i2s*r- zYQO5X{L#Gibah+Ze(QR~{ZabpkD(8+>gqHA&F1;M>7Vh9$}xGne%Y|=y5!ps1iU&} zsOK?6dAR&ozg>>8^%{tO%)FZ+lk{Kes08Tn4%YmlS7R7woP@9ae6mJX)HW})RB|8b2ipt{<^!0VSa z<{rOhKLa4MP=?yfuWRb`=56=qy#Uno<$QCv?LdgA4#6OP?V)>2yoe4Pef5bx(Xm}1Xz!qPd#a7UO{yZ>!HL!$U5^pvWGFOlkp(%h=8A#(JUd_ zV5GAic)oEyM(nbE-^evsE50vq0*>{~<~^AUb1ts!#ImiKM?)Wa6*Ir90)707y1`Y2 zsSwzYYP0A?5#1SqAuKC87FgFb)4v}E$Tsm^%moN}u9`(`1gt)VJ&FPvY;9R5qo9a?o%Pa;;~cW|r*K#m z5XEL+CXla>&$xy|bay&o302N9898dH#AeS)t?p9$wHMmoI?`>(U)_v^;fSDm=iMuJ zat$U_{)lzV$Pc6&ELxlQSwlpuXkyhT=u%U(ZIwPL*U=>S&{K>KDFsxsW+6|p4iah6 zMxhhNdFi3$NBL#FiFN`v81&eNsf;F~+F75{p^-+kuy&faUZjJ>^MWF=-1CYtX%RFe zte^65O=(~E6vR1ZOg6EhVN+TqlwGXgVtpe)nc zS@)1`C~PwlS6xw~GWGbvKv41aK!K!xo^qt2`Y;b(&~YIDR=foo+bF?(?!p+1iD+lO z&?sk5J5_e9u`lOB)aW&Pma}@NNfeuy{AtwA>3*5^BY#wLPy^>4feLvv`&#-8t8U?A z`L`qX^MHl{Wng1WjrM>R0wl*V!uByB1wXz;WCjm;r-qOqfixX&t3h#uWokJfo$qcn ze=Dcp8m5K3>U!+0h0t9HPV-o|snHrBxN6kR>IU&Z)0t<1pN--$Z?eF+E^!@nm<7+L>UG-qV_R|)^um}X4eR{Nf+5CI1R z;ACZB;NydF{?B}qN7i|#rw^*?B7@IWWo3C=`D16Iiz}Bm%C`grLL|vxQa|KxYA9I} zAkau6--Li1zg9Jr1r!EQNUaOZ#K+Z;&=|X{h+9W@R|M0N5pS$SDA z{@}g&_71U7k+pZhBT7TtxE^8C>2lL#SKLd?2yiEfb z_zo>|7-)XOaw*PYn-q@N)UKW*6pvk8zkK_a_$EcbnU;`|k`tefhLyz2LGCVr_X0S> zcZVXiu*8rum{R}|nwbNo1k7Uc%AQe>)I@SHrtE%l%|srfWcj1b2LnXtT!6j*Ah7_~ z9(%{7@Rs27Mx9$=tp-$5fOF2cumIOjlLcK4#)_tjb_*@#uaV~GepNh_j_Dsn|`GV_2 zOy7p^bsh@XK37cF0{?~nj`0Qig_|pO!UHoWHg^E`3H2i+j3iwp&a5t&NBT#vj1iuJ zo+0eA;<@a(H{iT@9m}pzfn0>{GKvTDS#+O$CU9oU?;JD#lSKsrrxWGpuI3%n3z8Rq zIG->e?*{ZewukvTnql-?2LgW(z+eA&cdvdwRs2Juj945agB6M;FyDqK9tmRa@m2p6 z;|=9=)LXjGZwDDB<|NH=o)H&@jd8|9`HFN|W5{~pWdMvD8Fp~?$lj2na_dnGMvHoD zy$_@Q6#K0{j5~C>Yxm{U>8CH4=%F|lkuE_ySKLo+e-!z=Vu8!YUc3%aoOk-PYf2Xc zx86ul4%|cCpfLx|oUrQO{QdAxbRFoQIQ#+l{qj4h2H-UiL_O=mKa*rgU4QylkXeuT zn&7|T5CQBH_x8a~0@K^m2vCed7*NvE$Kl6`G=!<^6ExwoeEn7?I;MPvvkbdTUJRCW zY`(Q8btZ2NT^c>scJEZ}*@fg5x1_e}U9zu>UJ}WB(C79X{egWtdg6!bU{EPRU4+Gl z1}w4efn|X+t5-Fk4}fx|iMXL~x5GRN3KE&cLj%sEj3^GztxpNek=BrU<^dLxEy&8m-TfB4309Fe@H)BMh*pC(!B_FG z3Eqh9Aft~VB8=|P-)w})uf?YO9Y5WR1%Be)7gX0`7w_^+hw|BdZ%$vExY+wK^0oT{ z*sfYE)?efk_@`z7+PGl1pnl<1EyBZ4AVfaHxI5-}Ck!pg!nh&}mbW7Fu?@uXwIbj; znZ{r566Der(w7gW%@O_lYowfh23n>DR*eO6Xi1R&pyx<)+Kc>rd!q$b>a^F&JfFY6 zE!qRqGWc5M*b-KwQZH@pYC6|%P0>~_u!kRNBvAG8FD<_z<2 zspksSMy$|*=?BEIm7s7m1u~i=U;qFHA0ZQgKpZ`;$YETdu!&Hdil`fi(N7~&6Z2!g z2d#vF3HajV`fyHAbmKO|B*(B0Smywrlvye zM56q{U@lDfZ+6CLjwr$(CZQGgH$%Jog+qOCJWMbR4Z6_z+Id$)! z)w{c%diK9v)!nOC!<^Mpm0v35mtUN5;LFr3$+dTsz|bFmiORAssdO)(WTlv>W%Em6 z;wQIQJHSu4^!c{X<)A_|FQiFZD=vg z@9g%na&>eKO6G^UOnLA>0|1{pf@eLOEK5}r53swx7zDbq$W`{^;<5heN5vDhoarr& zt*N>$&(>pik7h(FpCVWYker5|x)SPD#xIRu0*hG+J>8M?fLddcA=QUpE5E>B=-l11 zXU){dWm$kcKljsE>|IcwXQm^@@{kKVUz)!f*FM?c>9D>`X%VpK2WWW|i8SGIRIBrN zQEKXI zDX1v$o|CRTq~_NCL`YQwjHlb6h0+VgbC?FVR2>`?pZu?p+h%%jw|lekSR_MS+= z_%q0xSfz4O+Nj8ICY&d8hLj-Z9P%&h>NVOO1b4ked}E)J-~E=5>0Jp7Jk+3$=Ah4q!! ze%|_fK{d{Sv+**Bamwjxl_C4`nEO9IYwGPi$iq#H_wofX4zo_Q1 zq+UvowREXPE{R)x3x+Vm~ul~@+e3d^1?xOl0&35ie%#fT9@%m=Vp+^lZ zptx)J{LQn=%I*&AbS44>2z@d$<=w(v_IC#8by+-3m4IQm+070s^&GII*_NWp=Taek zb;LHBN(~u?l(}pXmvX$Id=Hcyjl*+gWb1ir?HZx+>C+)8+Ije7W45xafw2i4?2mB> z&QN;+NWmR+s9y^LfuvnC@-k|;dn-^uWC1Zo2eY?&!Az2lI4Hf??xY?gK7ZSKekZ=_ z-41-2r~yFQUP<^u4qJ3i9Inp60^Q_iX+^?lA$kl=tE>r%fKx z3|chEZ_vT;9ZAt-qk+stFr=mF4;t6vT2`Sj`qLs_aSOBA7)Ph<1hpni)*Hmtev5lR zStzRtv|BSOhpA&K@@azJ`wy>#GM5>fxLOY~F#_~JlW3s0KrlW$%}Bfr%~0OYex&GQ zg6%2AdcYh!$;6O7e>dnwWVVpTiMYk#;StKpN3m~i z$N-^PDh#FZ$&CY7zv?n=*h1>02dHMVR}x-CNwU(pppHq=W#mT?RkH|`Q0d5l7cE1> z)^QPBla@ZKjp9p$g|>cr$HCU{B2mIKBI=iK#l%(}a?GN&Pq^+_;oJU25VlG&Q}w;N z$V0n2D>3gb%tNmk0on{7?Xa3{7VVjO(SY%!9}Uy})4kLP-(!sDMLCw`Y{Wt5vQvxa z5D{V{TS0#p_JaAP!tBh!f^I%+_`Z~+a7@kTK^A^0@-^?7G_2fIl{^t^kwtbP;|2_7 z2^U*gjOF~yK`!5unGe3Q`QDYBS|J@T9iC~(q;~8Gt-U zaZy-DQMQNPcgc=%Y(whem;kEG63AkJM-|`vGDamTq7XbDg+%cSoTi-K?;lJ2;$rTtM(^cp84UVPf_QUVzh8TT z@+^!3f(>yp_JkimSu=Y$daNBXi_?e4GA=nTn=#OO^6Zt+he4IV=l_;P{sHP;!zQml z5a44PZ0Vmi7GJH&=C)n>4Hj{7>kE&r7VmME9K+tG1<<%rUx}SL?oQzs*QJ-5&?k8f zxNZ*i)dUHHhokD=QG@kT65#c7n=Wn!D1@R6+W_x~Pp32Khl?5!2}2bBay_@f(( zm1x5i2PcHlQ!g!{MrMU3t^hPzf8F~cdAErQruKHo227vkySXR(=UoX~?6_q7{gw4n z-Zl7v*DCun_LbV%&69&4N4fvPQbBUc{R#y5_g?yty4&X3=P3MQkcuh?jet%zQGi2l zoV0H~{Ejdr%-)-DWIb=k| z3$Y1}qb8ppd-;&e*57QYT~lABU%ho!+L={|sRVS)1%fVN`*1`yDPt|OmM}n(0m7rs z5#p9R(8du$@ubXO2}~Y1c^M=s*V4HN=N+Ld&(aI3wj%F_uSTY(KZp3J_T<%>ACjT~ zfup@&sbG98q^hI}BMQI)4ur8m&T%b^3XEk?#;Guu1tljIThA-S(JF#>Pz#Wi;3-c) z_&I1xowJo;C3lje(F~>fSo2^8H5(&5s7Nc)G8KLB4S;2Cd@VJae=b>Yo@{u3UQa%gbV1wxt07kMBiac!b;xM;5tRGIu z9U%&+iD2Ub=|+%(?9_(=5z{AsTYayMw#f{g2hMi+NGdp{>n9yGI$IMZUnE_1;Wzh& z4_Y^_2jbu@+gLx+8a>ml^zUrGG&?xqHdHpf{90lgl<1Qm7&;W)HR>^;w{#4f;$EVG z4{kLEpF-?q0dl)Sn|ot_u$tv<*``~j+&DV44FF|8RN|ID0;A4m7KZrulC-TrSu1ykpNYa4|k9 zuS5^THm$dmFf1D)wHwr$?CceW|6Wial!dI+C`A2;hKX1d!IQE!MDZjMOwUO^iYa1} z-L9B8@0FwST5&*sK>1*F9ND=`PcY7^pU}8PGxTShW|$MF+D}wA&ZbISG%0m9ElX#s zL5hj4oH}jJiQ*{BN%Vrvs(zTjyfdU9S$mQbl5f{o%<2pw66>XvO&>X#ojqQ3FWKq(G z!EpAtt?E8mp8C@%J23TasuK@;Uv!ViLXvb>fOHU979l=WxArD&{P0$GTe>{+K6DCO z75pov^j$di)l7QkQimAUnO3Ruv8*hARJ_wm5DsWRVojre_#Lg|t%iD{8#3?M^0U;V*((=N*uPq2={XP z-lN9Jg~{cHO*(}0z9Z%i=F++eJVkJlSrRPst^8$ErWvlu2sLu@F34Rf*F87YrXx88 zXb1P!PU)ui>MWo0A$#dO3#Pu+1?q7Kz~l|EbSH2g_;l}nr0(M&z0vZduf^F%fFcr4 z9r~}(zbkrjiu5s%Q8qurkXpJN*Fe2cTtXU&;XyUA+0q$$Yz6FS+(GRzgiCxnyOh$5 z9B@^7o7lHaR_o6(xjkkF@>Un(fC;TUV_tK>;i)~v$3qhOX_)S~Qi+1;=tJ|$PfgRiw4>Se(Yb;=4 zF~mkm?}~Fz<|EI{X{(O;GS9&ozyq6>o~)mqhcy#bWDd@>2MXc4Dr^FDfWBGE6X76)=N6 zI+K6&Ww?n+NkJkqjXb|1b}`;zh8rhJw9oOXnh4zZvRfEE4VCQsv-F-jTFv?M7Ma66 zz_YE1u-q%5zv{Om1R;}B0ClixrS>x96_vcq*=HqFRc9cEMb1c5_`xm^yTZ}|daNAB z`~Ib)6b)pht18kH^GL!i`~|ulr}lcmq_X#F`zY8taxRWOj|J(Zl^8cz_bUM_JQ0MSuNpM-VMA%!}bQa?*4=Dy0^i9x4_d9}7fJJq-cx#MzFD2)P z&Dv->$3au3c3!VaTI!G^MYmT~6VEu!@hSl!`^4LsgT@2NgRn$H*)OULL^52n)W?~N-%UI|HOb4ykQ_MWSWaQT^ma0l>O=+qAIyKFl_a`&KDQNkO+=Tcdu8Y*W1lB)x zT+ZJ^#H5n1IlW|(eH%98%O4*>2s4FcL^tyLUJ2nA<$Ll69E}M~!Qi+n>`_B`2SY(T z3H>8Ph5cOA!ogj93>IpQwZ*5Rq?%)JOUnkAnt7j|Fq1(ZPSgOI=i z>X27Cor8&@9_?W1D=UsRPg}ObOZJ7Sfc;5<@oq5U7xv0l6(AciEw26e*uyRmW3=jg zJ+In?82yj<+yJNY*O-|Epn1HDOrOayfmqfN>Z_7G0ELg@XXW@;mw)Or5%NJru-Ai0 ziPYKvLW3qBg&(c6UxS7o`5#f>;TsUJuV`pvbbQe=|3-*xpWJB<| z*$&pt01lpO$GRI^a$R_b^le9giNMuY6O*zGt7gm zu8Mhr6<^nPczNy~AM}0%BjB>D!cJa#mW-OkD|+V}GPkF@ftH8?>-em&>V);sdPk!~ z08vuZy|h5l-mDp$OHjp{K@Jb83k25-X9j~7!%8*jfzNSx^oQ`_9hRl%P`a=s{3pYy zAJ_FGgm#{J{Ctc;8mTUa|5v-Ju zg3FTW*YIfoQv0`_>;w}01`m;)^V&|%&Yra}Vkrh}udtq2Qa&rD;qLi(OsRyo=~>rA zd%+N1ZpS;r)G1Dz9hJXtWEg*Kp#PvfnJ_q9@?|8H5jevlxy6K*TDo4(3h1rEAWBBob3wRSDAb9vj{|MyhjNZ^S3Xffs~Mgc2_tN$MB zz22L%lT~=w8$G!f(`&e?XtRhPP}JRl<`GFbILPS+>P~r9{ZK0{ zjhEO)=j66`G_W7Rb4fC0?V_gS*Ab^dS)a(aDqauFcZ6*{<1oUE z6a;e^n!};Mx9hqGbEf_#PdPCjL3!G*X}T`%asIJq(xIP^QZQK7EAS5)paRDWXDi@-eC8(ftn#&E zB#ofjd;cKB3H6@zc$k|Rfcbh#O!wvPF#0&}V5{Y*+n09j^EsDYyIOKgGhcrB7n9(f z?R~9yGtKodq+d@Dl1feXqLyjz1YQQ$gT~!$ZX)M!g(G&&6XF!g1%-4$nBI;t#*k{i zV$*z<#C;?d*zkTVD|rQ5uI96wOSDtA_ZNM(Nr(~j#0fXMDQ(zK|0H*8@-Wp|F1BTi zYkS4koP5^o26u!)bU{c44!u5L)2uy{8VZS!DL9QK{uhSJphW_DcU3iSwOOiLid)=c zdP+;CGLA*L`x&%V|0R=4TuCt`WqyE7mF(`nSDfhqtre(BXjJ;KB2SaTihlkIi9w1) z6`tinTRnpEPt#zq!7U+A=6UL;D?@!}eXPGS?=Xq&Vzb$?cz?ER-&257W{S^YGA%mb z)8P5+7M1IJw3EbZ6!_fhRn};QbZV!mzpQ(t{l_tS#QViW#g>}#FqKt|X%<{ts~c4s zfj9UQ>Aj2_fEQjnda|(By#n3~2!9saED=%+n?9?*Iup7cqjE4YY&jf|npy``5MTL!syF_|9tbmcvg%(kJp|%l zWgnqdePn&`et3T{zH@(5?}~}TDBOl-Q|gW1LLZFc)LZ&82SL=APOBuVqHX2($`yJI4Pluo+LA|+7bG3vzw=dn9AGs7pH#}CfaTIH~Ht{mD+ ztovTt-=uo3j|^*mf5&z4!ek}^c-(Z#lGJn>U2F>&RmQXKshfCE{FW8N2oFD$K_mPz4i zFqhtCXs+6al%%kU_6u5@(g^!?|A!|`8wYxzIeuClUM@A$uKo|4*h>Sw=?YnSL%Dy- zyRJWaYZgq<5cC-G1N}&?kU_dq^Lc^*d+*1THC_x?@m#Jgmdl~`!Jg0G!cK!P$-b6t zqUhHfj~A5C{Yza)ub>Q`1w1o7IT^_+>}PAZaCnEe{f0`i!VTAQ{g9#e$LBQa=jgi7{mL7PE}tqeL3WF2$Z^0_#K!@u^9= zE0zPBbAGq+t_B~<&R0g9QM|>R1Fa>BBhXK6zg2id|C;q6^`ssg?$OU}9vD2?-x^r4 zB3C}Zn*sAGW;4>0(rOvQQCkj&AI?2?oDb4SJIZnoF=0=I4kD{WC>w(7W0a_ra z!Xi90f#ib=_%WUw>|ABjAIgOEH*S)W<*Q7QeP?3KamJT${V3gJhs(^Rg7S046~&_wd{|3nu-lg%3CeQJiCIBV0JW)T$Bo zE$H3CBwA=-5CQYT86Fk#`R?#)|{wYHC{$O+(;M7NYtjwxzKRce% zGG*W9>a67SG;M(aOiK#1={C7vV8+l$B++E~3~Gi1BoUA{*B7;u4B5Q5SF6(xfN)lU z&Thw#>b<=XRmrPk1oGl;9PWF=_iOt+)!ai%!)`63=BeMl&sU%>H4^Z@m#eToJeZAZw|e%fNrEbXAUk#GHL0ydMn~tc2Oq0`}oX zBbIoBI#gF%&Wh`Up>v>ejozw}b|ayPFBx6qwmB8Alfyr}?(O)jDK|I%qv7C64R#)3 zT1=@pg+)+esvXN%Z*;NL<9^DsHZ->iWeoh$&AcRF_DPg6ikO^DaW|K?kn7_xRjlD`&c$v`uRH+L%sE?d`YhNd^OS*(~L(QEq}8ny6!)6*3S=Q zyn$cXUDRA@Tm$a|-)G(79w|;(PDoG$Xf|`LUDMx*UOVC$S&DEl>YT#D+jxe+ub-^L z;reC)5)LOgn4wGuSz#mRYgoe#m9h5J6J3&|8!5Z>`zS^k4`rgowynW5uG-FOLftiT z&vk7JEX6J^hfbBC-P|MJF~cGuV}KFff?N&CKP^ zhQ9>G-FsHnUA7@t0`DQk1s;25p3X202`ab&e3>tQudj34ztH)v`xzZStDz0MRNHQ1 z?*X8MuVv7?q6+|EhEjil-!l+y>G`N)y>L^ZTnd~DXtkJ@>8Cm#d1 z;DFraaR^YVo_K3icrS6kyiCbPWqA$Xl)pNJ^A|Sv$b)I;HqVc5T7;omvbP6bUi{I3 zu*!h6%pO`hq4C#Dt&PPp>HrL{)qkUI`cKZ25-2@=03^#3yDWRd)uTb|c8}cOr$I@y zmk~zOU#_kz6IsW0o)OUc(P9if9VH!C4X3oz^YertQtogs-6)B($JPnL2~lD}!$>T0 z>>Fk;K>^oE%+oxpY8;{jjN3%liHKtWhY=DA9e#3t0BgUtrcZqM23t6 zXj)?76z@aRc^ivspZ!Q^LDx|4kfyXFDNU8N|Ekw|;Y1bxf9 zw>rN(yqLS^=Khumlan9041Tg_c7h?G&H?cQmyQ@~q}5BorN@!hk8iz$!=m%5d$1Ip6uK`g+QPQU#ox}uwav85!#I=9 z>@agTz#gFs0%4=nnfV+>t%l17*t$758124vOW5Ze;}%onw^-9 zLYLUz>s+Bnki^H+CS(s)8}A@*z~~^gMSYo=C;KM=IrY^{;3R>skyTp?L55|3n02F4 z5}LE!Daku5s|_&$;sDf~-M{gzo^gFD|8|Z43#<+$c5`oeZxTt&W5*yI@cz|TxkbVn zwR%A}`)RijqF*_Q?w$gBYPHq-_2BLTnXPpAqANS0=iMk6PN;UMTJ=QYrqzNGEu;p* zv>;Na-7Nb)&%A=dBY%C`a<9pnH2M$GaBqZ&-GljMSOK>?P7oZ(*}+4{>MGs35o0v6 zMQScFBGtD72VRK+Q`$ZgVC!^E?)vx`ZQ91BSLzToRswx@a?rS=aQbQ{ofN!+>_v?v zv+URGF#Ni{GS@dvu+M;!PrPX;FU{m{}MpNQ`S?Q2B?0$hlLTT%<;dC6FE!^)o z{4RSPQgsyjY6Q+YU2DmaGK}$Kr}id`?vMg_ErMsG_@210H*9{qWkq^D5a+p z+SF?x720TBsAF`D-fnV!2}yea>!{v z1bWZe6}B@wC|*hjV6PRm)L_F66BZzOdfBf*tlg*>B zP!TG(5*Kv>-r+CA(*Op3AO zRO}K)Vn7)=>iY@?Vs$<{R#uY- zsd@bp;wE|iN0UrqiYlp&S~r<6V5Ipw3V%Oq+3pPB54XzRWHj-{{<;0H(D>6!>sxLH zp8u%=fuTPO72_nR3=!WKs7%onc)?x;?fT}Xh{zUc=Y%YX;7Fl5TJu3>luGxzlmH>? zM0+sHzO?D{;@ug#>){_-*{HW$Df#9l7aP1DQKjn9Kj>jc8Js=Qf&(B5!wnV-^Mu zMQXQ$K7IHs#VG3#aV?W4GpAOXO5C`EG5&JyHvap{|Al*f*ubo3zg@bIY*X(G;mP0$ z!0gWZO!ZxUQ?78=q#-a6+D0cJJ2H1Ta%jsu)JRF!U@2@I!sQvUiN1+BZ*Fe|H$jtBLD^65U4P@5gZD zRVLx6%HSz7p=yq8QMj>9%44!`@v}y&!N_7ag4Vfia7I!ZNBJ$J5ml1aT%}NC%ZX!N zWv1D@d?-hr-E?qP)f2QfnWxC%nv_v_k>*TBGAk=$Ri=+B+{r2@_@Hzd-HqD=$X}z! z=;0ogbDkhSf?+i+m7jE_%NjK^lRr}Ji!f!V?yI34I=v{&~rwOFy7B|j8!tw*0BQA9myyTq{a`2A91b3wD}^OpD5ZLt~)&}~?@-C^L= z6HD~6w1tuXGFbut|U5|7NLJ(6MyIQZdDfp?qR>sS%gcmA7VjVeP{ z&4QU9O3RT;8L?c&Xv8WVpCfEdPHmvF_cHd+ipE3yql!cP{vWay;LL3DMCpM}YpBT^ zo0ULfJKf5FL^6lJUYVn55)`qjGZ>V23mhAUmzWSS+BB@n$SiR5^mI+ujub(hVaLeq z^JHOmxvnysZIiG&-ZDU+$>ooP(|m(RQi2vxq->SA@c)jS_LbFa0QtMHKmFT6}yeL+?_?gq21V zPgDL1?cDTR6E=((({oPT2}nBGqhIp5ZhCfG|YpBGsM5C=#RE8syp%0ZByUsRDA zj8~cKKRvs#>Ek}VE(7FFrO$ny+MUA5XwJFJ7oFO6Q0~VKf-*kuG01+f~gYk$U4y?el+e6PzGdYcv{)m#h{w!zj%wF5g^EAk>*L5Dx zeOsL?WBG>*kdn*eGx?E3$tX@ND7kMUwOnb2%+2HQeQVYh#J!gSuxC6D?Cjm*wu(Vf zd)pr6H!iNfF$R(uAU<)!7HVL^6c(L@gTIw@v~<+u>TfV?-Vbg5A=n2VSJtgN^v$~1 z3Dp@&cW}F+ButN64e3AeC9-VT`IG4z8TUf9pZG5y@aCRr1|Xso0$J#Sa8C`_LXV43 zPC)K-5?>~WW@fJ$_2YnyZmZOGgbY*6Ka{4Vfm_*;cgw5yQeo&Wj_4_j=yn#+1pT;x zrDq6W``4M-mJy+^rG#s}Xz+KSXRvLqw!U;k+iLCPY<(hTo!2i?@Avm}g5XYd&&8YF zcM>fnKrwTh&(4{Zm)%Oo-23}7!G-YC!+`eNbjS6V<9AZPz~Y1V|sBj4QMhesbiiCcIHLn%5R zNmrzusi37|1KoPeV`X!sm8pQG0yABaFPUmFq>C%mIWnK z`rpfg{@w9=?O({h7jO^m87;gwTc3q^xkE-bxqI7@iwjCF#oQ+gj6`o=E^TOxz4tda zfUh2xFuyl+@5wmx1ra^O+$7vCV1Au>P+6`L1ZM5N#H}jADTJgU7uJW)$DW0rGQo;8 z5U*-Wu!H5}6Y1E$Vul5l4{90@VN$#|AA>>vpfzT&T{qh*X~PU)lXMoPXpCA6GQ9Yl zUa3nB>E!q{=LzqD-kV8r5T)Qh(?@$z0edi7H6hEab##IN%GeL}6Yn5j6qgr1bdK6wx`2R zjuVNSo*38`G>bg1+1adgFafxcfPeKNjyfN(Ju98;VL6Ke4bX_)cSSfyFnDo2o>Q2F zUq=&xYr2}^Z-SoZxx;CX6P4xFIqX)>H6EUikMuP^{4}iP9ZH)#ZoiL=cHYKNy!OjY zsr^gJ)Sd`R#ZITC=1A?9&*kPVx8X)lj}1j~8(OI)>lta}mU8lZYQ8iY09A+H=6J`n zn{BLpQ|yUrxbbNxC-P}9%HKfB9}zthvpw~PcCSLqL0ZPy654H|UxeW{JrVA&DOpdA z%I|Cn-pglDzpQBImjweCo*j-6^uzhQ3x4?TpB58&THYH&1gcdMT4VI^Z@O;hZqqK) z=k7QjYfnW47CjB?jnhv&0I%UWo2Fnp)`!JAx^Xn!nwV$D@tk$NybQrsmwP)d3+KGBNP?KtL-O|C69)#jLmQY)9gXi|A?Ui@70l;0ZGC45 zP<=fu9iUl+&nB?FmgL~ZuA@c$yW`tKi$+asb{CJWIv5u(gNj-{fNPg*H14mvR??0^Y_8^`mdMc6_izUZ5(a1Rlj&?t=7Xo-q$^ldsy|cQY%v15_{#9 z`Ug~RKK!r}T6KZ5hrMs^z-G1nIk_MWyj~LM-4Vv4poslK2(x&SIsMj_Ch6)w!lQ)) zxLqT}7KLicFETu)fR~@N=56a=_h>hLx77=pFIjGK?0?x$_#W)V{08h?Q)s^}ria#= z!|y0`$fi-f*kUXKQ^Es+Bm$0;uUq?Jte$n`mPbL!v&SFbAVQNw_;8N5Sk7LiB_D0MJ1c*&Qp! zi}E#@6Xh|Rwrbj=};*?XB+Vy+SDr?t|R@>cT5w>I;n%0ALc8Zh%)T`rT9Q0 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