From 8bf01b6218bb07944b0b42acda592404d98b489c Mon Sep 17 00:00:00 2001 From: Anna Brewer Date: Tue, 6 Nov 2018 23:14:16 -0800 Subject: [PATCH 001/203] Changed scale of avatar and window title. --- interface/resources/meshes/defaultAvatar_full.fst | 2 +- interface/src/Application.cpp | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/interface/resources/meshes/defaultAvatar_full.fst b/interface/resources/meshes/defaultAvatar_full.fst index b47faeb8a8..f1b5348d6f 100644 --- a/interface/resources/meshes/defaultAvatar_full.fst +++ b/interface/resources/meshes/defaultAvatar_full.fst @@ -1,6 +1,6 @@ name = mannequin type = body+head -scale = 1 +scale = 2 filename = mannequin/mannequin.baked.fbx joint = jointNeck = Neck joint = jointLean = Spine diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index c2faf8494a..d2622dd89a 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -6511,8 +6511,7 @@ void Application::updateWindowTitle() const { } } - QString title = QString() + (!username.isEmpty() ? username + " @ " : QString()) - + currentPlaceName + connectionStatus + loginStatus + buildVersion; + QString title = "Anna was here :)"; #ifndef WIN32 // crashes with vs2013/win32 From 71bf3f2e14adc3268fb47b1d837837e3e0925ccd Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Sun, 21 Apr 2019 20:18:59 -0700 Subject: [PATCH 002/203] Installation folder can be made. --- BUILD_WIN.md | 2 +- hifi_vcpkg.py | 11 ++ tools/qt-builder/README.md | 154 ++++++++++++++++++++++++ tools/qt-builder/patches/aec.patch | 40 ++++++ tools/qt-builder/patches/qfloat16.patch | 44 +++++++ tools/qt-builder/qt5vars.bat | 17 +++ 6 files changed, 267 insertions(+), 1 deletion(-) create mode 100644 tools/qt-builder/README.md create mode 100644 tools/qt-builder/patches/aec.patch create mode 100644 tools/qt-builder/patches/qfloat16.patch create mode 100644 tools/qt-builder/qt5vars.bat diff --git a/BUILD_WIN.md b/BUILD_WIN.md index a81fca5900..a8726b0a23 100644 --- a/BUILD_WIN.md +++ b/BUILD_WIN.md @@ -81,7 +81,7 @@ Remove `CMakeCache.txt` found in the `%HIFI_DIR%\build` directory. #### CMake can't find OpenSSL -Remove `CMakeCache.txt` found in the `%HIFI_DIR%\build` directory. Verify that your VCPKG_ROOT environment variable is set and pointing to the correct location. Verify that the file `${VCPKG_ROOT}/installed/x64-windows/include/openssl/ssl.h` exists. +Remove `CMakeCache.txt` found in the `%HIFI_DIR%\build` directory. Verify that your HIFI_VCPKG_BASE environment variable is set and pointing to the correct location. Verify that the file `${HIFI_VCPKG_BASE}/installed/x64-windows/include/openssl/ssl.h` exists. #### Qt is throwing an error diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index 4a8004f3a3..a750129360 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -171,6 +171,11 @@ endif() if not self.args.android: print("Installing build dependencies") self.run(['install', '--triplet', self.triplet, 'hifi-client-deps']) + + # If not android, install our Qt build + if not self.args.android: + print("Installing Qt") + self.installQt() def cleanBuilds(self): # Remove temporary build artifacts @@ -232,3 +237,9 @@ endif() print("Not implemented") + def installQt(self): + print("install Qt") + if not os.path.isdir(os.path.join(self.path, 'installed', 'hifi-qt5')): + dest = os.path.join(self.path, 'installed') + url = "https://hifi-qa.s3.amazonaws.com/hifi-qt5.tar.gz" + hifi_utils.downloadAndExtract(url, dest) diff --git a/tools/qt-builder/README.md b/tools/qt-builder/README.md new file mode 100644 index 0000000000..954dc6027b --- /dev/null +++ b/tools/qt-builder/README.md @@ -0,0 +1,154 @@ +# General +This document describes the process to build Qt 5.12.3 +## Requirements +### Windows +1. Visual Studio 2017 + If you don’t have Community or Professional edition of Visual Studio 2017, download [Visual Studio Community 2017](https://www.visualstudio.com/downloads/). +Install with defaults + +1. python 2.7.16 +Install from https://www.python.org/ftp/python/2.7.16/python-2.7.16.amd64.msi +Add path to python executable to PATH. +Verify that python runs python 2.7 (run “python --version”) + +NOTE: our regular build uses python 3. This will still work, because HIFI_PYTHON_EXEC points to the python 3 executable. + +1. git >= 1.6 +Verify by entering `git --version` +1. perl >= 5.14 +Install from Strawberry Perl - http://strawberryperl.com/ - 5.28.1.1 64 bit to C:\Strawberry\ +Verify by running `perl --version` +1. flex and bison +Download from https://sourceforge.net/projects/winflexbison/files/latest/download +Uncompress in C:\flex_bison +Rename win-bison.exe to bison.exe and win-flex.exe to flex.exe +Add C:\flex_bison to PATH +Verify by running `flex --version` +Verify by running `bison --version` +1. gperf +Install from http://gnuwin32.sourceforge.net/downlinks/gperf.php +Install +Add C:\Program Files (x86)\GnuWin32\bin to PATH +Verify by running `gperf --version` +### Linux +Tested on Ubuntu 18.04 +1. qt5 requirements +edit /etc/apt/sources.list (edit as root) +replace all *# deb-src* with *deb-src* (in vi `1,$s/# deb-src/deb-src/`) +`sudo apt-get update -y` +`sudo apt-get upgrade -y` +`sudo apt-get build-dep qt5-default` +1. git >= 1.6 +Verify if needed entering `git --version` +`sudo apt-get install -y git` +Verify again +1. python +Verify if needed running `python --version` - should return python 2.7.x +`sudo apt-get install -y python` (not python 3!) +Verify again +1. gperf +Verify if needed running gperf --version +`sudo apt-get install -y gperf` +Verify again +1. bison and flex +Verify if needed running `flex --version` +Verify if needed running `bison --version` +`sudo apt-get install -y flex bison` +Verify again +1. pkg-config (needed for qtwebengine) +Verify if needed running `pkg-config --version` +`sudo apt-get install -y pkg-config` +Verify again +1. OpenGL +Verify (first install mesa-utils - `sudo apt install -y mesa-utils`) by `glxinfo | grep "OpenGL version"` +`sudo apt-get install -y libgl1-mesa-dev` +`sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so.346.35 /usr/lib/x86_64-linux-gnu/libGL.so.1.2.0` +Verify again +1. make +Verify by running `make --version` +`sudo apt-get install -y make` +1. g++ +Verify by running `g++ --version` +`sudo apt-get install -y g++` +Verify again +1. dbus-1 (needed for qtwebengine) +`sudo apt-get install -y libdbus-glib-1-dev` +1. nss (needed for qtwebengine) +`sudo apt-get install -y libnss3-dev` +### Mac +1. git >= 1.6 +Verify by entering git --version +1. pkg-config +brew fontconfig dbus-glib stall pkg-config +1. dbus-1 +brew install dbus-glib +## Build Process +### General +qt is cloned to the qt5 folder. +The build is performed in the qt5-build folder. +Build products are installed to the qt5-install folder. +Before running configure, make sure that the qt5-build folder is empty. + +**Only run the patches once!!!** +### Windows +Before building, verify that **HIFI_VCPKG_BASE_VERSION** points to a *vcpkg* folder containing *packages\openssl-windows_x64-windows*. If not, follow https://github.com/highfidelity/vcpkg to install *vcpkg* and then *openssl*. + +git clone --recursive https://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch + +* Copy the **patches** folder to qt5 +* Copy the **qt5vars.bat** file to qt5 +* Apply the two patches to Qt +cd qt5 +git apply --ignore-space-change --ignore-whitespace patches/qfloat16.patch +git apply --ignore-space-change --ignore-whitespace patches/aec.patch + +cd .. +mkdir qt5-install +mkdir qt5-build +cd qt5-build + +run ..\qt5\qt5vars.bat +cd ..\..\qt5-build + +..\qt5\configure -opensource -confirm-license -opengl desktop -platform win32-msvc -openssl-linked OPENSSL_LIBS="-lssleay32 -llibeay32" -I %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\include -L %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\lib -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ..\qt5-install + +nmake +nmake install +### Linux +git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch + +* Copy the **patches** folder to qt5 +* Apply the two patches to Qt +cd qt5 +git apply --ignore-space-change --ignore-whitespace patches/qfloat16.patch +git apply --ignore-space-change --ignore-whitespace patches/aec.patch +cd .. + +mkdir qt5-install +mkdir qt5-build +cd qt5-build + +../qt5/configure -opensource -confirm-license -platform linux-g++-64 -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install + +make +make install +### Mac +git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch + +* Copy the **patches** folder to qt5 +* Apply the two patches to Qt +cd qt5 +git apply --ignore-space-change --ignore-whitespace patches/qfloat16.patch +git apply --ignore-space-change --ignore-whitespace patches/aec.patch +cd .. + +mkdir qt5-install +mkdir qt5-build +cd ../qt5-build + +../qt5/configure -opensource -confirm-license -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install + +make +make install +## Problems +*configure* errors, if any, may be viewed in **config.log** and **config.summary** diff --git a/tools/qt-builder/patches/aec.patch b/tools/qt-builder/patches/aec.patch new file mode 100644 index 0000000000..be159d857a --- /dev/null +++ b/tools/qt-builder/patches/aec.patch @@ -0,0 +1,40 @@ +diff --git a/qtmultimedia/src/plugins/opensles/qopenslesaudioinput.cpp b/qtmultimedia/src/plugins/opensles/qopenslesaudioinput.cpp +index ad87cb0..54ed18a 100644 +--- a/qtmultimedia/src/plugins/opensles/qopenslesaudioinput.cpp ++++ b/qtmultimedia/src/plugins/opensles/qopenslesaudioinput.cpp +@@ -117,6 +117,8 @@ QOpenSLESAudioInput::QOpenSLESAudioInput(const QByteArray &device) + m_recorderPreset = SL_ANDROID_RECORDING_PRESET_CAMCORDER; + else if (qstrcmp(device, QT_ANDROID_PRESET_VOICE_RECOGNITION) == 0) + m_recorderPreset = SL_ANDROID_RECORDING_PRESET_VOICE_RECOGNITION; ++ else if (qstrcmp(device, QT_ANDROID_PRESET_VOICE_COMMUNICATION) == 0) ++ m_recorderPreset = SL_ANDROID_RECORDING_PRESET_VOICE_COMMUNICATION; + else + m_recorderPreset = SL_ANDROID_RECORDING_PRESET_GENERIC; + #endif +diff --git a/qtmultimedia/src/plugins/opensles/qopenslesaudioinput.h b/qtmultimedia/src/plugins/opensles/qopenslesaudioinput.h +index ad84db0..35cc379 100644 +--- a/qtmultimedia/src/plugins/opensles/qopenslesaudioinput.h ++++ b/qtmultimedia/src/plugins/opensles/qopenslesaudioinput.h +@@ -50,6 +50,7 @@ + #define QT_ANDROID_PRESET_MIC "mic" + #define QT_ANDROID_PRESET_CAMCORDER "camcorder" + #define QT_ANDROID_PRESET_VOICE_RECOGNITION "voicerecognition" ++#define QT_ANDROID_PRESET_VOICE_COMMUNICATION "voicecommunication" + + #endif + +diff --git a/qtmultimedia/src/plugins/opensles/qopenslesengine.cpp b/qtmultimedia/src/plugins/opensles/qopenslesengine.cpp +index 1a16cc2..2577fb3 100644 +--- a/qtmultimedia/src/plugins/opensles/qopenslesengine.cpp ++++ b/qtmultimedia/src/plugins/opensles/qopenslesengine.cpp +@@ -114,7 +114,8 @@ QList QOpenSLESEngine::availableDevices(QAudio::Mode mode) const + #ifdef ANDROID + devices << QT_ANDROID_PRESET_MIC + << QT_ANDROID_PRESET_CAMCORDER +- << QT_ANDROID_PRESET_VOICE_RECOGNITION; ++ << QT_ANDROID_PRESET_VOICE_RECOGNITION ++ << QT_ANDROID_PRESET_VOICE_COMMUNICATION; + #else + devices << "default"; + #endif + \ No newline at end of file diff --git a/tools/qt-builder/patches/qfloat16.patch b/tools/qt-builder/patches/qfloat16.patch new file mode 100644 index 0000000000..2773573264 --- /dev/null +++ b/tools/qt-builder/patches/qfloat16.patch @@ -0,0 +1,44 @@ +diff --git a/qtbase/src/corelib/global/qfloat16.h b/qtbase/src/corelib/global/qfloat16.h +index 3e50ad8467..2453ff8847 100644 +--- a/qtbase/src/corelib/global/qfloat16.h ++++ b/qtbase/src/corelib/global/qfloat16.h +@@ -83,7 +83,9 @@ private: + Q_CORE_EXPORT static const quint32 shifttable[]; + + friend bool qIsNull(qfloat16 f) Q_DECL_NOTHROW; ++#if ! defined(QT_NO_FLOAT16_OPERATORS) + friend qfloat16 operator-(qfloat16 a) Q_DECL_NOTHROW; ++#endif + }; + + Q_DECLARE_TYPEINFO(qfloat16, Q_PRIMITIVE_TYPE); +@@ -165,6 +167,7 @@ inline qfloat16::operator float() const Q_DECL_NOTHROW + } + #endif + ++#if ! defined(QT_NO_FLOAT16_OPERATORS) + inline qfloat16 operator-(qfloat16 a) Q_DECL_NOTHROW + { + qfloat16 f; +@@ -206,11 +209,12 @@ QF16_MAKE_ARITH_OP_INT(-) + QF16_MAKE_ARITH_OP_INT(*) + QF16_MAKE_ARITH_OP_INT(/) + #undef QF16_MAKE_ARITH_OP_INT +- ++#endif + QT_WARNING_PUSH + QT_WARNING_DISABLE_CLANG("-Wfloat-equal") + QT_WARNING_DISABLE_GCC("-Wfloat-equal") + ++#if ! defined(QT_NO_FLOAT16_OPERATORS) + inline bool operator>(qfloat16 a, qfloat16 b) Q_DECL_NOTHROW { return static_cast(a) > static_cast(b); } + inline bool operator<(qfloat16 a, qfloat16 b) Q_DECL_NOTHROW { return static_cast(a) < static_cast(b); } + inline bool operator>=(qfloat16 a, qfloat16 b) Q_DECL_NOTHROW { return static_cast(a) >= static_cast(b); } +@@ -244,6 +248,7 @@ QF16_MAKE_BOOL_OP_INT(<=) + QF16_MAKE_BOOL_OP_INT(==) + QF16_MAKE_BOOL_OP_INT(!=) + #undef QF16_MAKE_BOOL_OP_INT ++#endif + + QT_WARNING_POP + diff --git a/tools/qt-builder/qt5vars.bat b/tools/qt-builder/qt5vars.bat new file mode 100644 index 0000000000..10ad5be4ae --- /dev/null +++ b/tools/qt-builder/qt5vars.bat @@ -0,0 +1,17 @@ +@echo off + +REM Set up \Microsoft Visual Studio 2015, where is \c amd64, \c x86, etc. +CALL "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x64 + +REM Edit this location to point to the source code of Qt +SET _ROOT=..\qt5 + +SET PATH=%_ROOT%\qtbase\bin;%_ROOT%\gnuwin32\bin;%PATH% + +REM Uncomment the below line when using a git checkout of the source repository +SET PATH=%_ROOT%\qtrepotools\bin;%PATH% + +SET _ROOT= + +REM Keeps the command line open when this script is run. +cmd /k \ No newline at end of file From 0da6e088cbf1298bf3db6168065ae6c5718578d1 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Mon, 22 Apr 2019 13:15:10 -0700 Subject: [PATCH 003/203] Updated readme. --- tools/qt-builder/README.md | 58 +++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/tools/qt-builder/README.md b/tools/qt-builder/README.md index 954dc6027b..c3cb8b5180 100644 --- a/tools/qt-builder/README.md +++ b/tools/qt-builder/README.md @@ -1,5 +1,7 @@ # General -This document describes the process to build Qt 5.12.3 +This document describes the process to build Qt 5.12.3. +Note that there are two patches. The first (to qfloat16.h) is needed to compiel QT 5.12.3 on Visual Studio 2017 due to a bug in Visual Studio (*bitset* will not compile. Note that there is a change in CMakeLists.txt to support this. +The second patch is to OpenSL ES audio. ## Requirements ### Windows 1. Visual Studio 2017 @@ -7,13 +9,16 @@ This document describes the process to build Qt 5.12.3 Install with defaults 1. python 2.7.16 +Check if needed running `python --version` - should return python 2.7.x Install from https://www.python.org/ftp/python/2.7.16/python-2.7.16.amd64.msi Add path to python executable to PATH. -Verify that python runs python 2.7 (run “python --version”) -NOTE: our regular build uses python 3. This will still work, because HIFI_PYTHON_EXEC points to the python 3 executable. +NOTE: REMOVE python 3 from PATH. Our regular build uses python 3. This will still work, because HIFI_PYTHON_EXEC points to the python 3 executable. +Verify that python runs python 2.7 (run “python --version”) 1. git >= 1.6 +Check if needed `git --version` +Download from https://git-scm.com/download/win Verify by entering `git --version` 1. perl >= 5.14 Install from Strawberry Perl - http://strawberryperl.com/ - 5.28.1.1 64 bit to C:\Strawberry\ @@ -37,47 +42,50 @@ edit /etc/apt/sources.list (edit as root) replace all *# deb-src* with *deb-src* (in vi `1,$s/# deb-src/deb-src/`) `sudo apt-get update -y` `sudo apt-get upgrade -y` -`sudo apt-get build-dep qt5-default` +`sudo apt-get build-dep qt5-default -y` 1. git >= 1.6 -Verify if needed entering `git --version` -`sudo apt-get install -y git` +Check if needed `git --version` +`sudo apt-get install git -y` Verify again 1. python -Verify if needed running `python --version` - should return python 2.7.x -`sudo apt-get install -y python` (not python 3!) +Check if needed `python --version` - should return python 2.7.x +`sudo apt-get install python -y` (not python 3!) Verify again 1. gperf -Verify if needed running gperf --version -`sudo apt-get install -y gperf` +Check if needed `gperf --version` +`sudo apt-get install gperf -y` Verify again 1. bison and flex -Verify if needed running `flex --version` -Verify if needed running `bison --version` -`sudo apt-get install -y flex bison` +Check if needed `flex --version` and `bison --version` +`sudo apt-get install flex bison -y` Verify again 1. pkg-config (needed for qtwebengine) -Verify if needed running `pkg-config --version` -`sudo apt-get install -y pkg-config` +Check if needed `pkg-config --version` +`sudo apt-get install pkg-config -y` Verify again 1. OpenGL -Verify (first install mesa-utils - `sudo apt install -y mesa-utils`) by `glxinfo | grep "OpenGL version"` -`sudo apt-get install -y libgl1-mesa-dev` +Verify (first install mesa-utils - `sudo apt install mesa-utils -y`) by `glxinfo | grep "OpenGL version"` +`sudo apt-get install libgl1-mesa-dev -y` `sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so.346.35 /usr/lib/x86_64-linux-gnu/libGL.so.1.2.0` Verify again 1. make -Verify by running `make --version` -`sudo apt-get install -y make` +Check if needed `make --version` +`sudo apt-get install make -y` +Verify again 1. g++ -Verify by running `g++ --version` -`sudo apt-get install -y g++` +Check if needed + `g++ --version` +`sudo apt-get install g++ -y` Verify again 1. dbus-1 (needed for qtwebengine) -`sudo apt-get install -y libdbus-glib-1-dev` +`sudo apt-get install libdbus-glib-1-dev -y` 1. nss (needed for qtwebengine) -`sudo apt-get install -y libnss3-dev` +`sudo apt-get install libnss3-dev -y` ### Mac 1. git >= 1.6 -Verify by entering git --version +Check if needed `git --version` +Install from https://git-scm.com/download/mac +Verify again 1. pkg-config brew fontconfig dbus-glib stall pkg-config 1. dbus-1 @@ -120,7 +128,6 @@ git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch * Copy the **patches** folder to qt5 * Apply the two patches to Qt cd qt5 -git apply --ignore-space-change --ignore-whitespace patches/qfloat16.patch git apply --ignore-space-change --ignore-whitespace patches/aec.patch cd .. @@ -138,7 +145,6 @@ git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch * Copy the **patches** folder to qt5 * Apply the two patches to Qt cd qt5 -git apply --ignore-space-change --ignore-whitespace patches/qfloat16.patch git apply --ignore-space-change --ignore-whitespace patches/aec.patch cd .. From bfcdec62a28ae8e5d01158bb224f89239bd3aac6 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Mon, 22 Apr 2019 15:00:22 -0700 Subject: [PATCH 004/203] Before testing. --- hifi_vcpkg.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index a750129360..1fbbaa4028 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -241,5 +241,12 @@ endif() print("install Qt") if not os.path.isdir(os.path.join(self.path, 'installed', 'hifi-qt5')): dest = os.path.join(self.path, 'installed') - url = "https://hifi-qa.s3.amazonaws.com/hifi-qt5.tar.gz" + if platform.system() == 'Windows': + # url = "https://hifi-qa.s3.amazonaws.com/qt5/Windows/qt5-install.zip" + url = "https://hifi-qa.s3.amazonaws.com/qt5/Windows/hifi-qt5.tar.gz" + elif platform.system() == 'Darwin': + url = "https://hifi-qa.s3.amazonaws.com/qt5/Mac/qt5-install.zip" + elif platform.system() == 'Linux': + url = "https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/qt5-install.zip" + hifi_utils.downloadAndExtract(url, dest) From 4b26ef7c0f0dff4fee40168fdbdfc4ebea056ac4 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Mon, 22 Apr 2019 16:19:40 -0700 Subject: [PATCH 005/203] Updated with upload to AWS instructions. --- tools/qt-builder/README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tools/qt-builder/README.md b/tools/qt-builder/README.md index c3cb8b5180..79516def85 100644 --- a/tools/qt-builder/README.md +++ b/tools/qt-builder/README.md @@ -122,6 +122,10 @@ cd ..\..\qt5-build nmake nmake install + +Create a tar file called qt5-install.tar from the qt5-install folder (e.g. using 7-zip) +Create a gzip file called qt5-install.tar.gz from qt5-install.tar folder (e.g. using 7-zip) +Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Windows/ ### Linux git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch @@ -139,6 +143,9 @@ cd qt5-build make make install + +tar -zcvf qt5-install.tar.gz qt5-install +Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/ ### Mac git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch @@ -156,5 +163,8 @@ cd ../qt5-build make make install + +tar -zcvf qt5-install.tar.gz qt5-install +Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Mac/ ## Problems *configure* errors, if any, may be viewed in **config.log** and **config.summary** From 24110ebf8691a488bf7e3bdb070ad18fc2434399 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Mon, 22 Apr 2019 17:58:20 -0700 Subject: [PATCH 006/203] Ready for Mac/Linux testing. --- cmake/macros/SetupQt.cmake | 49 +++++--------------------------------- hifi_vcpkg.py | 10 ++++---- 2 files changed, 12 insertions(+), 47 deletions(-) diff --git a/cmake/macros/SetupQt.cmake b/cmake/macros/SetupQt.cmake index 71f5314d2f..c287b103c1 100644 --- a/cmake/macros/SetupQt.cmake +++ b/cmake/macros/SetupQt.cmake @@ -1,4 +1,3 @@ -# # Created by Bradley Austin Davis on 2017/09/02 # Copyright 2013-2017 High Fidelity, Inc. # @@ -6,49 +5,18 @@ # See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html # -# Construct a default QT location from a root path, a version and an architecture -function(calculate_default_qt_dir _RESULT_NAME) - if (ANDROID) - set(QT_DEFAULT_ARCH "android_armv7") - elseif(UWP) - set(QT_DEFAULT_ARCH "winrt_x64_msvc2017") - elseif(APPLE) - set(QT_DEFAULT_ARCH "clang_64") - elseif(WIN32) - set(QT_DEFAULT_ARCH "msvc2017_64") - else() - set(QT_DEFAULT_ARCH "gcc_64") - endif() - - if (WIN32 OR (ANDROID AND ("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Windows"))) - set(QT_DEFAULT_ROOT "c:/Qt") - else() - set(QT_DEFAULT_ROOT "$ENV{HOME}/Qt") - endif() - - set_from_env(QT_ROOT QT_ROOT ${QT_DEFAULT_ROOT}) - set_from_env(QT_VERSION QT_VERSION "5.10.1") - set_from_env(QT_ARCH QT_ARCH ${QT_DEFAULT_ARCH}) - - set(${_RESULT_NAME} "${QT_ROOT}/${QT_VERSION}/${QT_ARCH}" PARENT_SCOPE) -endfunction() - # Sets the QT_CMAKE_PREFIX_PATH and QT_DIR variables # Also enables CMAKE_AUTOMOC and CMAKE_AUTORCC macro(setup_qt) # if QT_CMAKE_PREFIX_PATH was not specified before hand, # try to use the environment variable - if (NOT QT_CMAKE_PREFIX_PATH) - set(QT_CMAKE_PREFIX_PATH "$ENV{QT_CMAKE_PREFIX_PATH}") - endif() - if (("QT_CMAKE_PREFIX_PATH" STREQUAL "") OR (NOT EXISTS "${QT_CMAKE_PREFIX_PATH}")) - calculate_default_qt_dir(QT_DIR) - set(QT_CMAKE_PREFIX_PATH "${QT_DIR}/lib/cmake") - else() - # figure out where the qt dir is - get_filename_component(QT_DIR "${QT_CMAKE_PREFIX_PATH}/../../" ABSOLUTE) + if (NOT DEFINED ENV{QT_CMAKE_PREFIX_PATH} ) + set(QT_CMAKE_PREFIX_PATH $ENV{HIFI_VCPKG_BASE_VERSION} "/installed/qt5-install/lib/cmake") endif() + # figure out where the qt dir is + get_filename_component(QT_DIR "${QT_CMAKE_PREFIX_PATH}/../../" ABSOLUTE) + if (WIN32) # windows shell does not like backslashes expanded on the command line, # so convert all backslashes in the QT path to forward slashes @@ -56,11 +24,6 @@ macro(setup_qt) string(REPLACE \\ / QT_DIR ${QT_DIR}) endif() - # This check doesn't work on Mac - #if (NOT EXISTS "${QT_DIR}/include/QtCore/QtGlobal") - # message(FATAL_ERROR "Unable to locate Qt includes in ${QT_DIR}") - #endif() - if (NOT EXISTS "${QT_CMAKE_PREFIX_PATH}/Qt5Core/Qt5CoreConfig.cmake") message(FATAL_ERROR "Unable to locate Qt cmake config in ${QT_CMAKE_PREFIX_PATH}") endif() @@ -77,4 +40,4 @@ macro(setup_qt) add_paths_to_fixup_libs("${QT_DIR}/bin") endif () -endmacro() +endmacro() \ No newline at end of file diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index 1fbbaa4028..363fbb51d9 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -238,15 +238,17 @@ endif() def installQt(self): - print("install Qt") - if not os.path.isdir(os.path.join(self.path, 'installed', 'hifi-qt5')): + if not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): + print ("Downloading Qt from AWS") dest = os.path.join(self.path, 'installed') if platform.system() == 'Windows': - # url = "https://hifi-qa.s3.amazonaws.com/qt5/Windows/qt5-install.zip" - url = "https://hifi-qa.s3.amazonaws.com/qt5/Windows/hifi-qt5.tar.gz" + url = "https://hifi-qa.s3.amazonaws.com/qt5/Windows/qt5-install.tar.gz" elif platform.system() == 'Darwin': url = "https://hifi-qa.s3.amazonaws.com/qt5/Mac/qt5-install.zip" elif platform.system() == 'Linux': url = "https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/qt5-install.zip" hifi_utils.downloadAndExtract(url, dest) + else: + print ("Qt has already been downloaded") + From d7197dba650b5728098cc4c3425adb10c5ff15dd Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Mon, 22 Apr 2019 20:56:32 -0700 Subject: [PATCH 007/203] Use QT_CMAKE_PREFIX_PATH only on local builds. --- cmake/macros/SetupQt.cmake | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/cmake/macros/SetupQt.cmake b/cmake/macros/SetupQt.cmake index c287b103c1..1a59a510f1 100644 --- a/cmake/macros/SetupQt.cmake +++ b/cmake/macros/SetupQt.cmake @@ -8,9 +8,12 @@ # Sets the QT_CMAKE_PREFIX_PATH and QT_DIR variables # Also enables CMAKE_AUTOMOC and CMAKE_AUTORCC macro(setup_qt) - # if QT_CMAKE_PREFIX_PATH was not specified before hand, - # try to use the environment variable - if (NOT DEFINED ENV{QT_CMAKE_PREFIX_PATH} ) + # if we are in a development build and QT_CMAKE_PREFIX_PATH is specified + # then use it, + # otherwise, use the vcpkg'ed version + if ((RELEASE_TYPE STREQUAL "DEV") AND DEFINED ENV{QT_CMAKE_PREFIX_PATH} ) + set(QT_CMAKE_PREFIX_PATH $ENV{QT_CMAKE_PREFIX_PATH}) + else () set(QT_CMAKE_PREFIX_PATH $ENV{HIFI_VCPKG_BASE_VERSION} "/installed/qt5-install/lib/cmake") endif() From dd85e224a46e84564fe0d602aeba2214ebd548c5 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Mon, 22 Apr 2019 20:58:15 -0700 Subject: [PATCH 008/203] Activate Qt patch. --- CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 551cfd2636..a6e92ef0a5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -196,6 +196,12 @@ find_package( Threads ) add_definitions(-DGLM_FORCE_RADIANS) add_definitions(-DGLM_ENABLE_EXPERIMENTAL) add_definitions(-DGLM_FORCE_CTOR_INIT) + +if (WIN32) + # Deal with fakakta Visual Studo 2017 bug + add_definitions(-DQT_NO_FLOAT16_OPERATORS) +endif() + if (HIFI_USE_OPTIMIZED_IK) MESSAGE(STATUS "SET THE USE IK DEFINITION ") add_definitions(-DHIFI_USE_OPTIMIZED_IK) From 01a838b5cb129913e89ff55e9c04b23e89bdcac5 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Mon, 22 Apr 2019 21:36:35 -0700 Subject: [PATCH 009/203] Updated for Jenkins. --- cmake/macros/SetupQt.cmake | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/cmake/macros/SetupQt.cmake b/cmake/macros/SetupQt.cmake index 1a59a510f1..76b4ec098e 100644 --- a/cmake/macros/SetupQt.cmake +++ b/cmake/macros/SetupQt.cmake @@ -11,10 +11,18 @@ macro(setup_qt) # if we are in a development build and QT_CMAKE_PREFIX_PATH is specified # then use it, # otherwise, use the vcpkg'ed version - if ((RELEASE_TYPE STREQUAL "DEV") AND DEFINED ENV{QT_CMAKE_PREFIX_PATH} ) - set(QT_CMAKE_PREFIX_PATH $ENV{QT_CMAKE_PREFIX_PATH}) + if (RELEASE_TYPE STREQUAL "DEV") + if (DEFINED ENV{QT_CMAKE_PREFIX_PATH} ) + set(QT_CMAKE_PREFIX_PATH $ENV{QT_CMAKE_PREFIX_PATH}) + else () + set(QT_CMAKE_PREFIX_PATH $ENV{HIFI_VCPKG_BASE_VERSION} "/installed/qt5-install/lib/cmake") + endif() else () - set(QT_CMAKE_PREFIX_PATH $ENV{HIFI_VCPKG_BASE_VERSION} "/installed/qt5-install/lib/cmake") + if (WIN32) + set(QT_CMAKE_PREFIX_PATH "C:/Windows/TEMP/hifi/vcpkg/installed/qt5-install/lib/cmake") + else () + set(QT_CMAKE_PREFIX_PATH "/tmp/hifi/vcpkg/installed/qt5-install/lib/cmake") + endif() endif() # figure out where the qt dir is From bffc0e8a85e0b9d86e0b0e4e0e803bc121b30ef6 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Mon, 22 Apr 2019 23:28:43 -0700 Subject: [PATCH 010/203] Re-ordered commands. --- CMakeLists.txt | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a6e92ef0a5..c8792d87ad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -86,9 +86,9 @@ if (ANDROID) set(PLATFORM_QT_COMPONENTS AndroidExtras WebView) add_definitions(-DHIFI_ANDROID_APP=\"${HIFI_ANDROID_APP}\") if ( - (${HIFI_ANDROID_APP} STREQUAL "questInterface") OR + (${HIFI_ANDROID_APP} STREQUAL "questInterface") OR (${HIFI_ANDROID_APP} STREQUAL "questFramePlayer") OR - (${HIFI_ANDROID_APP} STREQUAL "framePlayer") + (${HIFI_ANDROID_APP} STREQUAL "framePlayer") ) # We know the quest hardware has this extension, so we can force the use of instanced stereo add_definitions(-DHAVE_EXT_clip_cull_distance) @@ -98,18 +98,18 @@ if (ANDROID) # We can also use our own foveated textures add_definitions(-DHAVE_QCOM_texture_foveated) - # if set, the application itself or some library it depends on MUST implement + # if set, the application itself or some library it depends on MUST implement # `DisplayPluginList getDisplayPlugins()` and `InputPluginList getInputPlugins()` - add_definitions(-DCUSTOM_INPUT_PLUGINS) - add_definitions(-DCUSTOM_DISPLAY_PLUGINS) + add_definitions(-DCUSTOM_INPUT_PLUGINS) + add_definitions(-DCUSTOM_DISPLAY_PLUGINS) set(PLATFORM_PLUGIN_LIBRARIES oculusMobile oculusMobilePlugin) endif() # Allow client code to use preprocessor macros to distinguish between quest and non-quest builds if (${HIFI_ANDROID_APP} STREQUAL "questInterface") - add_definitions(-DANDROID_APP_QUEST_INTERFACE) + add_definitions(-DANDROID_APP_QUEST_INTERFACE) elseif(${HIFI_ANDROID_APP} STREQUAL "interface") - add_definitions(-DANDROID_APP_INTERFACE) + add_definitions(-DANDROID_APP_INTERFACE) endif() else () set(PLATFORM_QT_COMPONENTS WebEngine Xml) @@ -187,6 +187,8 @@ GroupSources("scripts") GroupSources("unpublishedScripts") unset(JS_SRC) +set_packaging_parameters() + # Locate the required Qt build on the filesystem setup_qt() list(APPEND CMAKE_PREFIX_PATH "${QT_CMAKE_PREFIX_PATH}") @@ -214,8 +216,6 @@ setup_externals_binary_dir() option(USE_NSIGHT "Attempt to find the nSight libraries" 1) -set_packaging_parameters() - # FIXME hack to work on the proper Android toolchain if (ANDROID) add_subdirectory(android/apps/${HIFI_ANDROID_APP}) @@ -249,11 +249,11 @@ add_subdirectory(tools) if (BUILD_TESTS) # Turn on testing so that add_test works - # MUST be in the root cmake file for ctest to work + # MUST be in the root cmake file for ctest to work include(CTest) enable_testing() add_subdirectory(tests) - if (BUILD_MANUAL_TESTS) + if (BUILD_MANUAL_TESTS) add_subdirectory(tests-manual) endif() endif() From 5144c3b0a8b9b5f180b54e97668d4ff6f80bed02 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Tue, 23 Apr 2019 07:22:29 -0700 Subject: [PATCH 011/203] testing --- hifi_vcpkg.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index 363fbb51d9..dc3558db82 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -238,7 +238,7 @@ endif() def installQt(self): - if not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): + if True or not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): print ("Downloading Qt from AWS") dest = os.path.join(self.path, 'installed') if platform.system() == 'Windows': From 55e184135858854b7ccca0acdde4e73301cd4f24 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Tue, 23 Apr 2019 07:58:33 -0700 Subject: [PATCH 012/203] testing --- cmake/macros/SetupQt.cmake | 4 +++- hifi_vcpkg.py | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/cmake/macros/SetupQt.cmake b/cmake/macros/SetupQt.cmake index 76b4ec098e..b3db49166a 100644 --- a/cmake/macros/SetupQt.cmake +++ b/cmake/macros/SetupQt.cmake @@ -34,7 +34,9 @@ macro(setup_qt) string(REPLACE \\ / QT_CMAKE_PREFIX_PATH ${QT_CMAKE_PREFIX_PATH}) string(REPLACE \\ / QT_DIR ${QT_DIR}) endif() - +message("==================") +message(STATUS ${QT_CMAKE_PREFIX_PATH}) +message("==================") if (NOT EXISTS "${QT_CMAKE_PREFIX_PATH}/Qt5Core/Qt5CoreConfig.cmake") message(FATAL_ERROR "Unable to locate Qt cmake config in ${QT_CMAKE_PREFIX_PATH}") endif() diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index dc3558db82..1cd33ed54d 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -248,6 +248,10 @@ endif() elif platform.system() == 'Linux': url = "https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/qt5-install.zip" + print("+++++++++++++++++++++++") + print(dest) + print(url) + print("+++++++++++++++++++++++") hifi_utils.downloadAndExtract(url, dest) else: print ("Qt has already been downloaded") From 182799b4ec4c858385ed24bd88cd8591cd836648 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Tue, 23 Apr 2019 08:07:25 -0700 Subject: [PATCH 013/203] testing --- cmake/macros/SetupQt.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/macros/SetupQt.cmake b/cmake/macros/SetupQt.cmake index b3db49166a..7697ce0477 100644 --- a/cmake/macros/SetupQt.cmake +++ b/cmake/macros/SetupQt.cmake @@ -24,6 +24,7 @@ macro(setup_qt) set(QT_CMAKE_PREFIX_PATH "/tmp/hifi/vcpkg/installed/qt5-install/lib/cmake") endif() endif() +set(QT_CMAKE_PREFIX_PATH "C:\Windows\TEMP\hifi\vcpkg\cb433fd7\installed/lib/cmake") # figure out where the qt dir is get_filename_component(QT_DIR "${QT_CMAKE_PREFIX_PATH}/../../" ABSOLUTE) From e7b780fcb9c0e4f052299d7bbf3a17b610b34217 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Tue, 23 Apr 2019 08:11:09 -0700 Subject: [PATCH 014/203] testing --- cmake/macros/SetupQt.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/macros/SetupQt.cmake b/cmake/macros/SetupQt.cmake index 7697ce0477..be0fa23fb2 100644 --- a/cmake/macros/SetupQt.cmake +++ b/cmake/macros/SetupQt.cmake @@ -24,7 +24,7 @@ macro(setup_qt) set(QT_CMAKE_PREFIX_PATH "/tmp/hifi/vcpkg/installed/qt5-install/lib/cmake") endif() endif() -set(QT_CMAKE_PREFIX_PATH "C:\Windows\TEMP\hifi\vcpkg\cb433fd7\installed/lib/cmake") +set(QT_CMAKE_PREFIX_PATH "C:/Windows/TEMP/hifi/vcpkg/cb433fd7/installed/lib/cmake") # figure out where the qt dir is get_filename_component(QT_DIR "${QT_CMAKE_PREFIX_PATH}/../../" ABSOLUTE) From 2963dd8fa57291d03b4c1e6e0e3dafedab90ec21 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Tue, 23 Apr 2019 08:18:41 -0700 Subject: [PATCH 015/203] testing --- cmake/macros/SetupQt.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/macros/SetupQt.cmake b/cmake/macros/SetupQt.cmake index be0fa23fb2..c40a177a44 100644 --- a/cmake/macros/SetupQt.cmake +++ b/cmake/macros/SetupQt.cmake @@ -24,7 +24,7 @@ macro(setup_qt) set(QT_CMAKE_PREFIX_PATH "/tmp/hifi/vcpkg/installed/qt5-install/lib/cmake") endif() endif() -set(QT_CMAKE_PREFIX_PATH "C:/Windows/TEMP/hifi/vcpkg/cb433fd7/installed/lib/cmake") +set(QT_CMAKE_PREFIX_PATH "C:/Windows/TEMP/hifi/vcpkg/cb433fd7/installed/qt5-install/lib/cmake") # figure out where the qt dir is get_filename_component(QT_DIR "${QT_CMAKE_PREFIX_PATH}/../../" ABSOLUTE) From 0179ba8e67a145d30a10ec6c492433c444bff03c Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Tue, 23 Apr 2019 09:12:47 -0700 Subject: [PATCH 016/203] testing - removed oven. --- tools/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index fd74786a5e..cd77516259 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -31,7 +31,7 @@ if (BUILD_TOOLS) ac-client skeleton-dump atp-client - oven + # oven ) else() set(ALL_TOOLS @@ -44,7 +44,7 @@ if (BUILD_TOOLS) ac-client skeleton-dump atp-client - oven + # oven nitpick ) endif() From c9d128ae71ac6d899e16f7aafa440c3a4ff24b9f Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Tue, 23 Apr 2019 10:39:52 -0700 Subject: [PATCH 017/203] testing --- cmake/macros/SetupQt.cmake | 19 +++++++------------ hifi_vcpkg.py | 11 +++++------ tools/CMakeLists.txt | 4 ++-- 3 files changed, 14 insertions(+), 20 deletions(-) diff --git a/cmake/macros/SetupQt.cmake b/cmake/macros/SetupQt.cmake index c40a177a44..d6f47e20da 100644 --- a/cmake/macros/SetupQt.cmake +++ b/cmake/macros/SetupQt.cmake @@ -14,17 +14,14 @@ macro(setup_qt) if (RELEASE_TYPE STREQUAL "DEV") if (DEFINED ENV{QT_CMAKE_PREFIX_PATH} ) set(QT_CMAKE_PREFIX_PATH $ENV{QT_CMAKE_PREFIX_PATH}) - else () - set(QT_CMAKE_PREFIX_PATH $ENV{HIFI_VCPKG_BASE_VERSION} "/installed/qt5-install/lib/cmake") - endif() - else () - if (WIN32) - set(QT_CMAKE_PREFIX_PATH "C:/Windows/TEMP/hifi/vcpkg/installed/qt5-install/lib/cmake") - else () - set(QT_CMAKE_PREFIX_PATH "/tmp/hifi/vcpkg/installed/qt5-install/lib/cmake") endif() +### else () +### if (WIN32) +### set(QT_CMAKE_PREFIX_PATH "C:/Windows/TEMP/hifi/vcpkg/installed/qt5-install/lib/cmake") +### else () +### set(QT_CMAKE_PREFIX_PATH "/tmp/hifi/vcpkg/installed/qt5-install/lib/cmake") +### endif() endif() -set(QT_CMAKE_PREFIX_PATH "C:/Windows/TEMP/hifi/vcpkg/cb433fd7/installed/qt5-install/lib/cmake") # figure out where the qt dir is get_filename_component(QT_DIR "${QT_CMAKE_PREFIX_PATH}/../../" ABSOLUTE) @@ -35,9 +32,7 @@ set(QT_CMAKE_PREFIX_PATH "C:/Windows/TEMP/hifi/vcpkg/cb433fd7/installed/qt5-inst string(REPLACE \\ / QT_CMAKE_PREFIX_PATH ${QT_CMAKE_PREFIX_PATH}) string(REPLACE \\ / QT_DIR ${QT_DIR}) endif() -message("==================") -message(STATUS ${QT_CMAKE_PREFIX_PATH}) -message("==================") + if (NOT EXISTS "${QT_CMAKE_PREFIX_PATH}/Qt5Core/Qt5CoreConfig.cmake") message(FATAL_ERROR "Unable to locate Qt cmake config in ${QT_CMAKE_PREFIX_PATH}") endif() diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index 1cd33ed54d..1c621543b5 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -19,6 +19,7 @@ get_filename_component(CMAKE_TOOLCHAIN_FILE "{}" ABSOLUTE CACHE) get_filename_component(CMAKE_TOOLCHAIN_FILE_UNCACHED "{}" ABSOLUTE) set(VCPKG_INSTALL_ROOT "{}") set(VCPKG_TOOLS_DIR "{}") +set(QT_CMAKE_PREFIX_PATH "{}") """ CMAKE_TEMPLATE_NON_ANDROID = """ @@ -217,6 +218,7 @@ endif() cmakeScript = os.path.join(self.path, 'scripts/buildsystems/vcpkg.cmake') installPath = os.path.join(self.path, 'installed', self.triplet) toolsPath = os.path.join(self.path, 'installed', self.hostTriplet, 'tools') + cmakePrefixPath = os.path.join(self.path, 'installed', 'qt5-install/lib/cmake') cmakeTemplate = VcpkgRepo.CMAKE_TEMPLATE if not self.args.android: cmakeTemplate += VcpkgRepo.CMAKE_TEMPLATE_NON_ANDROID @@ -226,7 +228,7 @@ endif() cmakeTemplate += 'set(HIFI_ANDROID_PRECOMPILED "{}")\n'.format(precompiled) cmakeTemplate += 'set(QT_CMAKE_PREFIX_PATH "{}")\n'.format(qtCmakePrefix) - cmakeConfig = cmakeTemplate.format(cmakeScript, cmakeScript, installPath, toolsPath).replace('\\', '/') + cmakeConfig = cmakeTemplate.format(cmakeScript, cmakeScript, installPath, toolsPath, cmakePrefixPath).replace('\\', '/') with open(self.configFilePath, 'w') as f: f.write(cmakeConfig) @@ -238,7 +240,8 @@ endif() def installQt(self): - if True or not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): + if not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): + #if True or not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): print ("Downloading Qt from AWS") dest = os.path.join(self.path, 'installed') if platform.system() == 'Windows': @@ -248,10 +251,6 @@ endif() elif platform.system() == 'Linux': url = "https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/qt5-install.zip" - print("+++++++++++++++++++++++") - print(dest) - print(url) - print("+++++++++++++++++++++++") hifi_utils.downloadAndExtract(url, dest) else: print ("Qt has already been downloaded") diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index cd77516259..fd74786a5e 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -31,7 +31,7 @@ if (BUILD_TOOLS) ac-client skeleton-dump atp-client - # oven + oven ) else() set(ALL_TOOLS @@ -44,7 +44,7 @@ if (BUILD_TOOLS) ac-client skeleton-dump atp-client - # oven + oven nitpick ) endif() From 2edf1676eafe9013b04a6efcd78a9a97386f9108 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Tue, 23 Apr 2019 10:45:33 -0700 Subject: [PATCH 018/203] Corrected filenames for Mac and Ubuntu. --- hifi_vcpkg.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index 1c621543b5..d74d008a96 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -247,9 +247,9 @@ endif() if platform.system() == 'Windows': url = "https://hifi-qa.s3.amazonaws.com/qt5/Windows/qt5-install.tar.gz" elif platform.system() == 'Darwin': - url = "https://hifi-qa.s3.amazonaws.com/qt5/Mac/qt5-install.zip" + url = "https://hifi-qa.s3.amazonaws.com/qt5/Mac/qt5-install.tar.gz" elif platform.system() == 'Linux': - url = "https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/qt5-install.zip" + url = "https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/qt5-install.tar.gz" hifi_utils.downloadAndExtract(url, dest) else: From ffa0902dfc83534596e1deab653168c304ecfa85 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Tue, 23 Apr 2019 13:04:16 -0700 Subject: [PATCH 019/203] testing. --- hifi_vcpkg.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index d74d008a96..854033e95f 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -240,8 +240,8 @@ endif() def installQt(self): - if not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): - #if True or not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): + ### if not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): + if True or not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): print ("Downloading Qt from AWS") dest = os.path.join(self.path, 'installed') if platform.system() == 'Windows': From d3e3fa5249fb78172c0db9455f3a97e5cb7765e0 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Tue, 23 Apr 2019 13:20:13 -0700 Subject: [PATCH 020/203] Added debug message. --- hifi_vcpkg.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index 854033e95f..89bb5734b7 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -242,7 +242,7 @@ endif() def installQt(self): ### if not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): if True or not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): - print ("Downloading Qt from AWS") + print ("Downloading Qt from AWS ") dest = os.path.join(self.path, 'installed') if platform.system() == 'Windows': url = "https://hifi-qa.s3.amazonaws.com/qt5/Windows/qt5-install.tar.gz" @@ -250,7 +250,8 @@ endif() url = "https://hifi-qa.s3.amazonaws.com/qt5/Mac/qt5-install.tar.gz" elif platform.system() == 'Linux': url = "https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/qt5-install.tar.gz" - + + print("Extracting " + url + " to " + dest) hifi_utils.downloadAndExtract(url, dest) else: print ("Qt has already been downloaded") From 9b8f07989930189d5823d43a5bf59c1a6da4479f Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Tue, 23 Apr 2019 13:37:47 -0700 Subject: [PATCH 021/203] Testing. --- hifi_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hifi_utils.py b/hifi_utils.py index 24e43dc83c..d117011c99 100644 --- a/hifi_utils.py +++ b/hifi_utils.py @@ -118,6 +118,6 @@ def downloadAndExtract(url, destPath, hash=None, hasher=hashlib.sha512(), isZip= zip.extractall(destPath) else: # Extract the archive - with tarfile.open(tempFileName, 'r:gz') as tgz: + with tarfile.open(tempFileName, 'r:*') as tgz: tgz.extractall(destPath) os.remove(tempFileName) From 68f9b473a6a84270a914c2742178a67f697e728f Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Tue, 23 Apr 2019 15:06:17 -0700 Subject: [PATCH 022/203] Updated python interface. --- tools/nitpick/src/PythonInterface.cpp | 14 +++++++++----- tools/nitpick/src/PythonInterface.h | 4 ++-- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/tools/nitpick/src/PythonInterface.cpp b/tools/nitpick/src/PythonInterface.cpp index dcf4ecc682..48ca3b30e0 100644 --- a/tools/nitpick/src/PythonInterface.cpp +++ b/tools/nitpick/src/PythonInterface.cpp @@ -16,12 +16,16 @@ QString PythonInterface::getPythonCommand() { #ifdef Q_OS_WIN if (_pythonCommand.isNull()) { - QString pythonPath = PathUtils::getPathToExecutable("python.exe"); + // Use the python launcher as we need python 3, and python 2 may be installed + // See https://www.python.org/dev/peps/pep-0397/ + const QString pythonLauncherExecutable{ "py.exe" }; + QString pythonPath = PathUtils::getPathToExecutable(pythonLauncherExecutable); if (!pythonPath.isNull()) { _pythonCommand = pythonPath + _pythonExe; - } else { - QMessageBox::critical(0, "python.exe not found", - "Please verify that pyton.exe is in the PATH"); + } + else { + QMessageBox::critical(0, pythonLauncherExecutable + " not found", + "Please verify that py.exe is in the PATH"); exit(-1); } } @@ -35,4 +39,4 @@ QString PythonInterface::getPythonCommand() { #endif return _pythonCommand; -} +} \ No newline at end of file diff --git a/tools/nitpick/src/PythonInterface.h b/tools/nitpick/src/PythonInterface.h index 7972d55cce..d51b51d007 100644 --- a/tools/nitpick/src/PythonInterface.h +++ b/tools/nitpick/src/PythonInterface.h @@ -18,7 +18,7 @@ public: private: #ifdef Q_OS_WIN - const QString _pythonExe{ "python.exe" }; + const QString _pythonExe{ "py.exe" }; #else // Both Mac and Linux use "python" const QString _pythonExe{ "python" }; @@ -27,4 +27,4 @@ private: QString _pythonCommand; }; -#endif // hifi_PythonInterface_h +#endif // hifi_PythonInterface_h \ No newline at end of file From f4b1aedbaeb29fc364492f20b9ed0557b92256bc Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Tue, 23 Apr 2019 15:06:40 -0700 Subject: [PATCH 023/203] Minor cleanup. --- cmake/macros/SetupQt.cmake | 12 ++---------- hifi_vcpkg.py | 3 +-- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/cmake/macros/SetupQt.cmake b/cmake/macros/SetupQt.cmake index d6f47e20da..fafed63e88 100644 --- a/cmake/macros/SetupQt.cmake +++ b/cmake/macros/SetupQt.cmake @@ -11,16 +11,8 @@ macro(setup_qt) # if we are in a development build and QT_CMAKE_PREFIX_PATH is specified # then use it, # otherwise, use the vcpkg'ed version - if (RELEASE_TYPE STREQUAL "DEV") - if (DEFINED ENV{QT_CMAKE_PREFIX_PATH} ) - set(QT_CMAKE_PREFIX_PATH $ENV{QT_CMAKE_PREFIX_PATH}) - endif() -### else () -### if (WIN32) -### set(QT_CMAKE_PREFIX_PATH "C:/Windows/TEMP/hifi/vcpkg/installed/qt5-install/lib/cmake") -### else () -### set(QT_CMAKE_PREFIX_PATH "/tmp/hifi/vcpkg/installed/qt5-install/lib/cmake") -### endif() + if (RELEASE_TYPE STREQUAL "DEV" AND DEFINED ENV{QT_CMAKE_PREFIX_PATH} ) + set(QT_CMAKE_PREFIX_PATH $ENV{QT_CMAKE_PREFIX_PATH}) endif() # figure out where the qt dir is diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index 89bb5734b7..e1d509b9df 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -240,8 +240,7 @@ endif() def installQt(self): - ### if not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): - if True or not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): + if not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): print ("Downloading Qt from AWS ") dest = os.path.join(self.path, 'installed') if platform.system() == 'Windows': From e755e717b15d4e3e7aace2de350121d008b2feff Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Tue, 23 Apr 2019 15:59:03 -0700 Subject: [PATCH 024/203] Restored code. --- hifi_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hifi_utils.py b/hifi_utils.py index d117011c99..24e43dc83c 100644 --- a/hifi_utils.py +++ b/hifi_utils.py @@ -118,6 +118,6 @@ def downloadAndExtract(url, destPath, hash=None, hasher=hashlib.sha512(), isZip= zip.extractall(destPath) else: # Extract the archive - with tarfile.open(tempFileName, 'r:*') as tgz: + with tarfile.open(tempFileName, 'r:gz') as tgz: tgz.extractall(destPath) os.remove(tempFileName) From 70531bca5242cb0b7131e189b243e8594047d038 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Tue, 23 Apr 2019 16:51:27 -0700 Subject: [PATCH 025/203] Updated with new Ubuntu zip instructions. --- tools/qt-builder/README.md | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/tools/qt-builder/README.md b/tools/qt-builder/README.md index 79516def85..5a2df21685 100644 --- a/tools/qt-builder/README.md +++ b/tools/qt-builder/README.md @@ -122,7 +122,7 @@ cd ..\..\qt5-build nmake nmake install - +#### Uploading Create a tar file called qt5-install.tar from the qt5-install folder (e.g. using 7-zip) Create a gzip file called qt5-install.tar.gz from qt5-install.tar folder (e.g. using 7-zip) Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Windows/ @@ -142,10 +142,22 @@ cd qt5-build ../qt5/configure -opensource -confirm-license -platform linux-g++-64 -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install make -make install +make install +#### Uploading +1. Return to the home folder +`cd ..` + +1. Open a python 3 shell +`python3` -tar -zcvf qt5-install.tar.gz qt5-install -Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/ +1. Run the following snippet: +`import os` +`import tarfile` +`filename=tarfile.open("qt5-install.tar.gz", "w:gz"))` +`filename.add("qt5-install", os.path.basename("qt5-install"))` +`exit()` + +1. Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/ ### Mac git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch @@ -163,7 +175,7 @@ cd ../qt5-build make make install - +#### Uploading tar -zcvf qt5-install.tar.gz qt5-install Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Mac/ ## Problems From a0068cabb76e290f9673aa898a76a07d3399244f Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Tue, 23 Apr 2019 17:04:33 -0700 Subject: [PATCH 026/203] Force download of Qt. --- hifi_vcpkg.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index e1d509b9df..7bc35b28c3 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -240,7 +240,7 @@ endif() def installQt(self): - if not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): + if True or not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): print ("Downloading Qt from AWS ") dest = os.path.join(self.path, 'installed') if platform.system() == 'Windows': From 960443323f21e268025587b5ac45af48bcc6e969 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Tue, 23 Apr 2019 18:47:43 -0700 Subject: [PATCH 027/203] Cleaned up readme --- tools/qt-builder/README.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/tools/qt-builder/README.md b/tools/qt-builder/README.md index 5a2df21685..c6dfa3ce78 100644 --- a/tools/qt-builder/README.md +++ b/tools/qt-builder/README.md @@ -44,43 +44,43 @@ replace all *# deb-src* with *deb-src* (in vi `1,$s/# deb-src/deb-src/`) `sudo apt-get upgrade -y` `sudo apt-get build-dep qt5-default -y` 1. git >= 1.6 -Check if needed `git --version` +Check if needed `git --version` `sudo apt-get install git -y` -Verify again +Verify again 1. python -Check if needed `python --version` - should return python 2.7.x +Check if needed `python --version` - should return python 2.7.x `sudo apt-get install python -y` (not python 3!) -Verify again +Verify again 1. gperf -Check if needed `gperf --version` +Check if needed `gperf --version` `sudo apt-get install gperf -y` -Verify again +Verify again 1. bison and flex Check if needed `flex --version` and `bison --version` `sudo apt-get install flex bison -y` -Verify again +Verify again 1. pkg-config (needed for qtwebengine) Check if needed `pkg-config --version` -`sudo apt-get install pkg-config -y` -Verify again +`sudo apt-get install pkg-config -y` +Verify again 1. OpenGL Verify (first install mesa-utils - `sudo apt install mesa-utils -y`) by `glxinfo | grep "OpenGL version"` `sudo apt-get install libgl1-mesa-dev -y` `sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so.346.35 /usr/lib/x86_64-linux-gnu/libGL.so.1.2.0` -Verify again +Verify again 1. make -Check if needed `make --version` +Check if needed `make --version` `sudo apt-get install make -y` Verify again 1. g++ Check if needed - `g++ --version` -`sudo apt-get install g++ -y` -Verify again + `g++ --version` +`sudo apt-get install g++ -y` +Verify again 1. dbus-1 (needed for qtwebengine) `sudo apt-get install libdbus-glib-1-dev -y` 1. nss (needed for qtwebengine) -`sudo apt-get install libnss3-dev -y` +`sudo apt-get install libnss3-dev -y` ### Mac 1. git >= 1.6 Check if needed `git --version` From 4b7a3ac332dec4aa5c66c49a2e502c5e1ab06011 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Tue, 23 Apr 2019 19:00:30 -0700 Subject: [PATCH 028/203] Cleaned up readme --- tools/qt-builder/README.md | 68 +++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/tools/qt-builder/README.md b/tools/qt-builder/README.md index c6dfa3ce78..bbeb1b257c 100644 --- a/tools/qt-builder/README.md +++ b/tools/qt-builder/README.md @@ -101,48 +101,48 @@ Before running configure, make sure that the qt5-build folder is empty. ### Windows Before building, verify that **HIFI_VCPKG_BASE_VERSION** points to a *vcpkg* folder containing *packages\openssl-windows_x64-windows*. If not, follow https://github.com/highfidelity/vcpkg to install *vcpkg* and then *openssl*. -git clone --recursive https://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch +`git clone --recursive https://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch` * Copy the **patches** folder to qt5 * Copy the **qt5vars.bat** file to qt5 * Apply the two patches to Qt -cd qt5 -git apply --ignore-space-change --ignore-whitespace patches/qfloat16.patch -git apply --ignore-space-change --ignore-whitespace patches/aec.patch +`cd qt5` +`git apply --ignore-space-change --ignore-whitespace patches/qfloat16.patch` +`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` -cd .. -mkdir qt5-install -mkdir qt5-build -cd qt5-build +`cd ..` +`mkdir qt5-install` +`mkdir qt5-build` +`cd qt5-build` -run ..\qt5\qt5vars.bat -cd ..\..\qt5-build +run `..\qt5\qt5vars.bat` +`cd ..\..\qt5-build` -..\qt5\configure -opensource -confirm-license -opengl desktop -platform win32-msvc -openssl-linked OPENSSL_LIBS="-lssleay32 -llibeay32" -I %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\include -L %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\lib -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ..\qt5-install +`..\qt5\configure -opensource -confirm-license -opengl desktop -platform win32-msvc -openssl-linked OPENSSL_LIBS="-lssleay32 -llibeay32" -I %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\include -L %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\lib -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ..\qt5-install` -nmake -nmake install +`nmake` +`nmake install` #### Uploading Create a tar file called qt5-install.tar from the qt5-install folder (e.g. using 7-zip) Create a gzip file called qt5-install.tar.gz from qt5-install.tar folder (e.g. using 7-zip) Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Windows/ ### Linux -git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch +`git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch` * Copy the **patches** folder to qt5 -* Apply the two patches to Qt -cd qt5 -git apply --ignore-space-change --ignore-whitespace patches/aec.patch -cd .. +* Apply one patch to Qt +`cd qt5` +`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` +`cd ..` -mkdir qt5-install -mkdir qt5-build -cd qt5-build +`mkdir qt5-install` +`mkdir qt5-build` +`cd qt5-build` -../qt5/configure -opensource -confirm-license -platform linux-g++-64 -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install +`../qt5/configure -opensource -confirm-license -platform linux-g++-64 -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` -make -make install +`make` +`make install` #### Uploading 1. Return to the home folder `cd ..` @@ -163,20 +163,20 @@ git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch * Copy the **patches** folder to qt5 * Apply the two patches to Qt -cd qt5 -git apply --ignore-space-change --ignore-whitespace patches/aec.patch -cd .. +`cd qt5` +`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` +`cd ..` -mkdir qt5-install -mkdir qt5-build -cd ../qt5-build +`mkdir qt5-install` +`mkdir qt5-build` +`cd ../qt5-build` -../qt5/configure -opensource -confirm-license -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install +`../qt5/configure -opensource -confirm-license -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` -make -make install +`make` +`make install` #### Uploading -tar -zcvf qt5-install.tar.gz qt5-install +`tar -zcvf qt5-install.tar.gz qt5-install` Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Mac/ ## Problems *configure* errors, if any, may be viewed in **config.log** and **config.summary** From 030f17299992b90aab462f09d3183a194dc09a78 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Wed, 24 Apr 2019 10:28:11 -0700 Subject: [PATCH 029/203] Updated readme for "Fix" --- tools/qt-builder/README.md | 43 ++++++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/tools/qt-builder/README.md b/tools/qt-builder/README.md index bbeb1b257c..5a46ce7202 100644 --- a/tools/qt-builder/README.md +++ b/tools/qt-builder/README.md @@ -32,9 +32,23 @@ Verify by running `flex --version` Verify by running `bison --version` 1. gperf Install from http://gnuwin32.sourceforge.net/downlinks/gperf.php -Install Add C:\Program Files (x86)\GnuWin32\bin to PATH Verify by running `gperf --version` +1. 7-zip +Download from https://www.7-zip.org/download.html +1. Bash shell +From *Settings* select *Update & Security* +Select *For Developers* +Enable *Developer mode* +Restart PC +Open Control Panel and select *Programs and Features* +Select *Turn Windows features on or off* +Check *Windows Subsystem for Linux* +Click *Restart now* +Download from the Microsoft Store - Search for *bash* and choose the latest Ubuntu version +[First run will take a few minutes] +Enter a user name - all small letters (this is not required for later use) +Choose a password ### Linux Tested on Ubuntu 18.04 1. qt5 requirements @@ -100,7 +114,7 @@ Before running configure, make sure that the qt5-build folder is empty. **Only run the patches once!!!** ### Windows Before building, verify that **HIFI_VCPKG_BASE_VERSION** points to a *vcpkg* folder containing *packages\openssl-windows_x64-windows*. If not, follow https://github.com/highfidelity/vcpkg to install *vcpkg* and then *openssl*. - +#### Preparing source files `git clone --recursive https://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch` * Copy the **patches** folder to qt5 @@ -109,8 +123,8 @@ Before building, verify that **HIFI_VCPKG_BASE_VERSION** points to a *vcpkg* fol `cd qt5` `git apply --ignore-space-change --ignore-whitespace patches/qfloat16.patch` `git apply --ignore-space-change --ignore-whitespace patches/aec.patch` - `cd ..` +#### Configuring `mkdir qt5-install` `mkdir qt5-build` `cd qt5-build` @@ -119,14 +133,21 @@ run `..\qt5\qt5vars.bat` `cd ..\..\qt5-build` `..\qt5\configure -opensource -confirm-license -opengl desktop -platform win32-msvc -openssl-linked OPENSSL_LIBS="-lssleay32 -llibeay32" -I %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\include -L %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\lib -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ..\qt5-install` - +#### Make `nmake` `nmake install` +#### Fixing +The *.prl* files have an absolute path that needs to be removed +1. Open a bash terminal +1. `cd` to the *qt5-install* folder (e.g. `cd /mnt/d/qt5-install/`) +1. Run the following command (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) +` find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;` #### Uploading Create a tar file called qt5-install.tar from the qt5-install folder (e.g. using 7-zip) -Create a gzip file called qt5-install.tar.gz from qt5-install.tar folder (e.g. using 7-zip) +Create a gzip file called qt5-install.tar.gz from the qt5-install.tar file just created (e.g. using 7-zip) Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Windows/ ### Linux +#### Preparing source files `git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch` * Copy the **patches** folder to qt5 @@ -134,15 +155,17 @@ Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Windows/ `cd qt5` `git apply --ignore-space-change --ignore-whitespace patches/aec.patch` `cd ..` +#### Configuring `mkdir qt5-install` `mkdir qt5-build` `cd qt5-build` `../qt5/configure -opensource -confirm-license -platform linux-g++-64 -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` - +#### Make `make` `make install` +#### Fixing #### Uploading 1. Return to the home folder `cd ..` @@ -159,22 +182,24 @@ Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Windows/ 1. Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/ ### Mac +#### Preparing source files git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch * Copy the **patches** folder to qt5 -* Apply the two patches to Qt +* Apply one patch to Qt `cd qt5` `git apply --ignore-space-change --ignore-whitespace patches/aec.patch` `cd ..` - +#### Configuring `mkdir qt5-install` `mkdir qt5-build` `cd ../qt5-build` `../qt5/configure -opensource -confirm-license -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` - +#### Make `make` `make install` +#### Fixing #### Uploading `tar -zcvf qt5-install.tar.gz qt5-install` Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Mac/ From 2009ce95b2a2524379c2ab719b755b7cdfd9d157 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Wed, 24 Apr 2019 11:37:46 -0700 Subject: [PATCH 030/203] Updated readme. --- tools/qt-builder/README.md | 305 +++++++++++++++++++------------------ 1 file changed, 154 insertions(+), 151 deletions(-) diff --git a/tools/qt-builder/README.md b/tools/qt-builder/README.md index 5a46ce7202..e2ad3db6ea 100644 --- a/tools/qt-builder/README.md +++ b/tools/qt-builder/README.md @@ -1,207 +1,210 @@ # General -This document describes the process to build Qt 5.12.3. -Note that there are two patches. The first (to qfloat16.h) is needed to compiel QT 5.12.3 on Visual Studio 2017 due to a bug in Visual Studio (*bitset* will not compile. Note that there is a change in CMakeLists.txt to support this. +This document describes the process to build Qt 5.12.3. +Note that there are two patches. The first (to qfloat16.h) is needed to compiel QT 5.12.3 on Visual Studio 2017 due to a bug in Visual Studio (*bitset* will not compile. Note that there is a change in CMakeLists.txt to support this. The second patch is to OpenSL ES audio. ## Requirements ### Windows -1. Visual Studio 2017 - If you don’t have Community or Professional edition of Visual Studio 2017, download [Visual Studio Community 2017](https://www.visualstudio.com/downloads/). +1. Visual Studio 2017 + If you don’t have Community or Professional edition of Visual Studio 2017, download [Visual Studio Community 2017](https://www.visualstudio.com/downloads/). Install with defaults -1. python 2.7.16 -Check if needed running `python --version` - should return python 2.7.x -Install from https://www.python.org/ftp/python/2.7.16/python-2.7.16.amd64.msi -Add path to python executable to PATH. +1. python 2.7.16 +Check if needed running `python --version` - should return python 2.7.x +Install from https://www.python.org/ftp/python/2.7.16/python-2.7.16.amd64.msi +Add path to python executable to PATH. NOTE: REMOVE python 3 from PATH. Our regular build uses python 3. This will still work, because HIFI_PYTHON_EXEC points to the python 3 executable. -Verify that python runs python 2.7 (run “python --version”) -1. git >= 1.6 -Check if needed `git --version` -Download from https://git-scm.com/download/win +Verify that python runs python 2.7 (run “python --version”) +1. git >= 1.6 +Check if needed `git --version` +Download from https://git-scm.com/download/win Verify by entering `git --version` -1. perl >= 5.14 -Install from Strawberry Perl - http://strawberryperl.com/ - 5.28.1.1 64 bit to C:\Strawberry\ +1. perl >= 5.14 +Install from Strawberry Perl - http://strawberryperl.com/ - 5.28.1.1 64 bit to C:\Strawberry\ Verify by running `perl --version` -1. flex and bison -Download from https://sourceforge.net/projects/winflexbison/files/latest/download -Uncompress in C:\flex_bison -Rename win-bison.exe to bison.exe and win-flex.exe to flex.exe -Add C:\flex_bison to PATH -Verify by running `flex --version` +1. flex and bison +Download from https://sourceforge.net/projects/winflexbison/files/latest/download +Uncompress in C:\flex_bison +Rename win-bison.exe to bison.exe and win-flex.exe to flex.exe +Add C:\flex_bison to PATH +Verify by running `flex --version` Verify by running `bison --version` -1. gperf -Install from http://gnuwin32.sourceforge.net/downlinks/gperf.php -Add C:\Program Files (x86)\GnuWin32\bin to PATH +1. gperf +Install from http://gnuwin32.sourceforge.net/downlinks/gperf.php +Add C:\Program Files (x86)\GnuWin32\bin to PATH Verify by running `gperf --version` 1. 7-zip -Download from https://www.7-zip.org/download.html +Download from https://www.7-zip.org/download.html 1. Bash shell -From *Settings* select *Update & Security* -Select *For Developers* -Enable *Developer mode* -Restart PC -Open Control Panel and select *Programs and Features* -Select *Turn Windows features on or off* -Check *Windows Subsystem for Linux* +From *Settings* select *Update & Security* +Select *For Developers* +Enable *Developer mode* +Restart PC +Open Control Panel and select *Programs and Features* +Select *Turn Windows features on or off* +Check *Windows Subsystem for Linux* Click *Restart now* Download from the Microsoft Store - Search for *bash* and choose the latest Ubuntu version -[First run will take a few minutes] -Enter a user name - all small letters (this is not required for later use) -Choose a password +[First run will take a few minutes] +Enter a user name - all small letters (this is not required for later use) +Choose a password ### Linux -Tested on Ubuntu 18.04 -1. qt5 requirements -edit /etc/apt/sources.list (edit as root) -replace all *# deb-src* with *deb-src* (in vi `1,$s/# deb-src/deb-src/`) -`sudo apt-get update -y` -`sudo apt-get upgrade -y` +Tested on Ubuntu 18.04 +1. qt5 requirements +edit /etc/apt/sources.list (edit as root) +replace all *# deb-src* with *deb-src* (in vi `1,$s/# deb-src/deb-src/`) +`sudo apt-get update -y` +`sudo apt-get upgrade -y` `sudo apt-get build-dep qt5-default -y` -1. git >= 1.6 -Check if needed `git --version` -`sudo apt-get install git -y` -Verify again -1. python -Check if needed `python --version` - should return python 2.7.x -`sudo apt-get install python -y` (not python 3!) -Verify again -1. gperf -Check if needed `gperf --version` -`sudo apt-get install gperf -y` -Verify again -1. bison and flex -Check if needed `flex --version` and `bison --version` -`sudo apt-get install flex bison -y` -Verify again -1. pkg-config (needed for qtwebengine) -Check if needed `pkg-config --version` -`sudo apt-get install pkg-config -y` -Verify again -1. OpenGL -Verify (first install mesa-utils - `sudo apt install mesa-utils -y`) by `glxinfo | grep "OpenGL version"` -`sudo apt-get install libgl1-mesa-dev -y` -`sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so.346.35 /usr/lib/x86_64-linux-gnu/libGL.so.1.2.0` -Verify again -1. make -Check if needed `make --version` -`sudo apt-get install make -y` -Verify again -1. g++ -Check if needed - `g++ --version` -`sudo apt-get install g++ -y` -Verify again -1. dbus-1 (needed for qtwebengine) -`sudo apt-get install libdbus-glib-1-dev -y` -1. nss (needed for qtwebengine) -`sudo apt-get install libnss3-dev -y` -### Mac -1. git >= 1.6 -Check if needed `git --version` -Install from https://git-scm.com/download/mac +1. git >= 1.6 +Check if needed `git --version` +`sudo apt-get install git -y` Verify again -1. pkg-config +1. python +Check if needed `python --version` - should return python 2.7.x +`sudo apt-get install python -y` (not python 3!) +Verify again +1. gperf +Check if needed `gperf --version` +`sudo apt-get install gperf -y` +Verify again +1. bison and flex +Check if needed `flex --version` and `bison --version` +`sudo apt-get install flex bison -y` +Verify again +1. pkg-config (needed for qtwebengine) +Check if needed `pkg-config --version` +`sudo apt-get install pkg-config -y` +Verify again +1. OpenGL +Verify (first install mesa-utils - `sudo apt install mesa-utils -y`) by `glxinfo | grep "OpenGL version"` +`sudo apt-get install libgl1-mesa-dev -y` +`sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so.346.35 /usr/lib/x86_64-linux-gnu/libGL.so.1.2.0` +Verify again +1. make +Check if needed `make --version` +`sudo apt-get install make -y` +Verify again +1. g++ +Check if needed + `g++ --version` +`sudo apt-get install g++ -y` +Verify again +1. dbus-1 (needed for qtwebengine) +`sudo apt-get install libdbus-glib-1-dev -y` +1. nss (needed for qtwebengine) +`sudo apt-get install libnss3-dev -y` +### Mac +1. git >= 1.6 +Check if needed `git --version` +Install from https://git-scm.com/download/mac +Verify again +1. pkg-config brew fontconfig dbus-glib stall pkg-config -1. dbus-1 +1. dbus-1 brew install dbus-glib ## Build Process ### General -qt is cloned to the qt5 folder. -The build is performed in the qt5-build folder. -Build products are installed to the qt5-install folder. +qt is cloned to the qt5 folder. +The build is performed in the qt5-build folder. +Build products are installed to the qt5-install folder. Before running configure, make sure that the qt5-build folder is empty. **Only run the patches once!!!** ### Windows -Before building, verify that **HIFI_VCPKG_BASE_VERSION** points to a *vcpkg* folder containing *packages\openssl-windows_x64-windows*. If not, follow https://github.com/highfidelity/vcpkg to install *vcpkg* and then *openssl*. -#### Preparing source files -`git clone --recursive https://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch` +Before building, verify that **HIFI_VCPKG_BASE_VERSION** points to a *vcpkg* folder containing *packages\openssl-windows_x64-windows*. If not, follow https://github.com/highfidelity/vcpkg to install *vcpkg* and then *openssl*. +#### Preparing source files +`git clone --recursive https://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch` -* Copy the **patches** folder to qt5 -* Copy the **qt5vars.bat** file to qt5 -* Apply the two patches to Qt -`cd qt5` -`git apply --ignore-space-change --ignore-whitespace patches/qfloat16.patch` -`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` -`cd ..` +* Copy the **patches** folder to qt5 +* Copy the **qt5vars.bat** file to qt5 +* Apply the two patches to Qt +`cd qt5` +`git apply --ignore-space-change --ignore-whitespace patches/qfloat16.patch` +`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` +`cd ..` #### Configuring -`mkdir qt5-install` -`mkdir qt5-build` -`cd qt5-build` +`mkdir qt5-install` +`mkdir qt5-build` +`cd qt5-build` -run `..\qt5\qt5vars.bat` -`cd ..\..\qt5-build` +run `..\qt5\qt5vars.bat` +`cd ..\..\qt5-build` -`..\qt5\configure -opensource -confirm-license -opengl desktop -platform win32-msvc -openssl-linked OPENSSL_LIBS="-lssleay32 -llibeay32" -I %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\include -L %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\lib -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ..\qt5-install` +`..\qt5\configure -opensource -confirm-license -opengl desktop -platform win32-msvc -openssl-linked OPENSSL_LIBS="-lssleay32 -llibeay32" -I %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\include -L %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\lib -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ..\qt5-install` #### Make -`nmake` -`nmake install` +`nmake` +`nmake install` #### Fixing -The *.prl* files have an absolute path that needs to be removed +The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) 1. Open a bash terminal -1. `cd` to the *qt5-install* folder (e.g. `cd /mnt/d/qt5-install/`) -1. Run the following command (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) -` find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;` -#### Uploading -Create a tar file called qt5-install.tar from the qt5-install folder (e.g. using 7-zip) -Create a gzip file called qt5-install.tar.gz from the qt5-install.tar file just created (e.g. using 7-zip) +1. `cd` to the *qt5-install* folder (e.g. `cd /mnt/d/qt5-install/`) +1. Run the following command +` find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;` +#### Uploading +Create a tar file called qt5-install.tar from the qt5-install folder (e.g. using 7-zip) +Create a gzip file called qt5-install.tar.gz from the qt5-install.tar file just created (e.g. using 7-zip) Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Windows/ ### Linux -#### Preparing source files -`git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch` +#### Preparing source files +`git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch` -* Copy the **patches** folder to qt5 -* Apply one patch to Qt -`cd qt5` -`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` -`cd ..` +* Copy the **patches** folder to qt5 +* Apply one patch to Qt +`cd qt5` +`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` +`cd ..` #### Configuring -`mkdir qt5-install` -`mkdir qt5-build` -`cd qt5-build` +`mkdir qt5-install` +`mkdir qt5-build` +`cd qt5-build` -`../qt5/configure -opensource -confirm-license -platform linux-g++-64 -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` +`../qt5/configure -opensource -confirm-license -platform linux-g++-64 -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` #### Make -`make` -`make install` +`make` +`make install` #### Fixing -#### Uploading -1. Return to the home folder +The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) +`cd ../qt5-install` +` find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;` +#### Uploading +1. Return to the home folder `cd ..` - -1. Open a python 3 shell -`python3` -1. Run the following snippet: -`import os` -`import tarfile` -`filename=tarfile.open("qt5-install.tar.gz", "w:gz"))` -`filename.add("qt5-install", os.path.basename("qt5-install"))` -`exit()` - +1. Open a python 3 shell +`python3` + +1. Run the following snippet: +`import os` +`import tarfile` +`filename=tarfile.open("qt5-install.tar.gz", "w:gz")` +`filename.add("qt5-install", os.path.basename("qt5-install"))` +`exit()` + 1. Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/ ### Mac -#### Preparing source files +#### Preparing source files git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch -* Copy the **patches** folder to qt5 -* Apply one patch to Qt -`cd qt5` -`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` -`cd ..` +* Copy the **patches** folder to qt5 +* Apply one patch to Qt +`cd qt5` +`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` +`cd ..` #### Configuring -`mkdir qt5-install` -`mkdir qt5-build` -`cd ../qt5-build` +`mkdir qt5-install` +`mkdir qt5-build` +`cd ../qt5-build` -`../qt5/configure -opensource -confirm-license -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` +`../qt5/configure -opensource -confirm-license -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` #### Make -`make` -`make install` +`make` +`make install` #### Fixing -#### Uploading -`tar -zcvf qt5-install.tar.gz qt5-install` +#### Uploading +`tar -zcvf qt5-install.tar.gz qt5-install` Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Mac/ ## Problems *configure* errors, if any, may be viewed in **config.log** and **config.summary** From bd40ea057b4ebd3541981fea8217f14e1d273a26 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Wed, 24 Apr 2019 14:42:18 -0700 Subject: [PATCH 031/203] Testing `windeployqt` --- cmake/macros/PackageLibrariesForDeployment.cmake | 7 +++++++ hifi_vcpkg.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/cmake/macros/PackageLibrariesForDeployment.cmake b/cmake/macros/PackageLibrariesForDeployment.cmake index 29f4617a6f..fa7f52993b 100644 --- a/cmake/macros/PackageLibrariesForDeployment.cmake +++ b/cmake/macros/PackageLibrariesForDeployment.cmake @@ -36,6 +36,13 @@ macro(PACKAGE_LIBRARIES_FOR_DEPLOYMENT) endif () # add a post-build command to call windeployqt to copy Qt plugins +message("+++++++++++++++++++++++++++++++++++++") +message(STATUS ${TARGET_NAME}) +message(STATUS ${QT_DIR}) +message(STATUS ${TARGET_FILE}) +message(STATUS ${WINDEPLOYQT_COMMAND}) +message(STATUS ${EXTRA_DEPLOY_OPTIONS}) +message("-------------------------------------") add_custom_command( TARGET ${TARGET_NAME} POST_BUILD diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index 7bc35b28c3..e1d509b9df 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -240,7 +240,7 @@ endif() def installQt(self): - if True or not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): + if not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): print ("Downloading Qt from AWS ") dest = os.path.join(self.path, 'installed') if platform.system() == 'Windows': From 331f692e34929d9d9d579da724fb942e4131ede4 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Wed, 24 Apr 2019 17:39:02 -0700 Subject: [PATCH 032/203] Cleanup of readme. --- tools/qt-builder/README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tools/qt-builder/README.md b/tools/qt-builder/README.md index e2ad3db6ea..f3aeb7a497 100644 --- a/tools/qt-builder/README.md +++ b/tools/qt-builder/README.md @@ -134,7 +134,7 @@ run `..\qt5\qt5vars.bat` `..\qt5\configure -opensource -confirm-license -opengl desktop -platform win32-msvc -openssl-linked OPENSSL_LIBS="-lssleay32 -llibeay32" -I %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\include -L %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\lib -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ..\qt5-install` #### Make -`nmake` +`nmake` `nmake install` #### Fixing The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) @@ -163,7 +163,7 @@ Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Windows/ `../qt5/configure -opensource -confirm-license -platform linux-g++-64 -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` #### Make -`make` +`make` `make install` #### Fixing The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) @@ -176,12 +176,12 @@ The *.prl* files have an absolute path that needs to be removed (see http://www. 1. Open a python 3 shell `python3` -1. Run the following snippet: -`import os` -`import tarfile` -`filename=tarfile.open("qt5-install.tar.gz", "w:gz")` -`filename.add("qt5-install", os.path.basename("qt5-install"))` -`exit()` +1. Run the following snippet: +`import os` +`import tarfile` +`filename=tarfile.open("qt5-install.tar.gz", "w:gz")` +`filename.add("qt5-install", os.path.basename("qt5-install"))` +`exit()` 1. Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/ ### Mac @@ -200,11 +200,11 @@ git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch `../qt5/configure -opensource -confirm-license -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` #### Make -`make` +`make` `make install` #### Fixing #### Uploading -`tar -zcvf qt5-install.tar.gz qt5-install` +`tar -zcvf qt5-install.tar.gz qt5-install` Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Mac/ ## Problems *configure* errors, if any, may be viewed in **config.log** and **config.summary** From ba9733aa039d513c4495eae1b5104b9f6d7669c7 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Wed, 24 Apr 2019 17:40:08 -0700 Subject: [PATCH 033/203] Removed test code. --- cmake/macros/PackageLibrariesForDeployment.cmake | 7 ------- 1 file changed, 7 deletions(-) diff --git a/cmake/macros/PackageLibrariesForDeployment.cmake b/cmake/macros/PackageLibrariesForDeployment.cmake index fa7f52993b..29f4617a6f 100644 --- a/cmake/macros/PackageLibrariesForDeployment.cmake +++ b/cmake/macros/PackageLibrariesForDeployment.cmake @@ -36,13 +36,6 @@ macro(PACKAGE_LIBRARIES_FOR_DEPLOYMENT) endif () # add a post-build command to call windeployqt to copy Qt plugins -message("+++++++++++++++++++++++++++++++++++++") -message(STATUS ${TARGET_NAME}) -message(STATUS ${QT_DIR}) -message(STATUS ${TARGET_FILE}) -message(STATUS ${WINDEPLOYQT_COMMAND}) -message(STATUS ${EXTRA_DEPLOY_OPTIONS}) -message("-------------------------------------") add_custom_command( TARGET ${TARGET_NAME} POST_BUILD From c05ac9a5dda9c92930c222bb858538f19999cf5e Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Wed, 24 Apr 2019 17:51:27 -0700 Subject: [PATCH 034/203] testing. --- cmake/templates/FixupBundlePostBuild.cmake.in | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cmake/templates/FixupBundlePostBuild.cmake.in b/cmake/templates/FixupBundlePostBuild.cmake.in index bb96fe49f3..3e816433a0 100644 --- a/cmake/templates/FixupBundlePostBuild.cmake.in +++ b/cmake/templates/FixupBundlePostBuild.cmake.in @@ -73,5 +73,10 @@ else() set(PLUGIN_EXTENSION "so") endif() +message("+++++++++") +message(${BUNDLE_PLUGIN_DIR}) +message(${PLUGIN_EXTENSION}) +message("---------") + file(GLOB EXTRA_PLUGINS "${BUNDLE_PLUGIN_DIR}/*.${PLUGIN_EXTENSION}") fixup_bundle("${BUNDLE_EXECUTABLE}" "${EXTRA_PLUGINS}" "@FIXUP_LIBS@" IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe") From 91eacf7d3cb02f577496d1f15b253dd6c7964469 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Wed, 24 Apr 2019 18:02:39 -0700 Subject: [PATCH 035/203] Added message to know Qt path. --- cmake/macros/SetupQt.cmake | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cmake/macros/SetupQt.cmake b/cmake/macros/SetupQt.cmake index fafed63e88..6407aaaf04 100644 --- a/cmake/macros/SetupQt.cmake +++ b/cmake/macros/SetupQt.cmake @@ -11,8 +11,11 @@ macro(setup_qt) # if we are in a development build and QT_CMAKE_PREFIX_PATH is specified # then use it, # otherwise, use the vcpkg'ed version - if (RELEASE_TYPE STREQUAL "DEV" AND DEFINED ENV{QT_CMAKE_PREFIX_PATH} ) + if (RELEASE_TYPE STREQUAL "DEV" AND DEFINED ENV{QT_CMAKE_PREFIX_PATH}) + message("Development build and QT_CMAKE_PREFIX_PATH is defined in environment - using this path for Qt") set(QT_CMAKE_PREFIX_PATH $ENV{QT_CMAKE_PREFIX_PATH}) + else() + message(" Using vcpkg'ed version of Qt") endif() # figure out where the qt dir is From db77fda6269cbc4393eb1015aa86bce9214cb5b0 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Thu, 25 Apr 2019 07:46:23 -0700 Subject: [PATCH 036/203] testing. --- cmake/macros/PackageLibrariesForDeployment.cmake | 2 +- cmake/templates/FixupBundlePostBuild.cmake.in | 5 ----- tools/qt-builder/README.md | 6 +++--- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/cmake/macros/PackageLibrariesForDeployment.cmake b/cmake/macros/PackageLibrariesForDeployment.cmake index 29f4617a6f..96305839f3 100644 --- a/cmake/macros/PackageLibrariesForDeployment.cmake +++ b/cmake/macros/PackageLibrariesForDeployment.cmake @@ -39,7 +39,7 @@ macro(PACKAGE_LIBRARIES_FOR_DEPLOYMENT) add_custom_command( TARGET ${TARGET_NAME} POST_BUILD - COMMAND CMD /C "SET PATH=%PATH%;${QT_DIR}/bin && ${WINDEPLOYQT_COMMAND}\ + COMMAND CMD /C "SET PATH=%PATH%;BBBBBBBBBBBB/bin && ${WINDEPLOYQT_COMMAND}\ ${EXTRA_DEPLOY_OPTIONS} $<$,$,$>:--release>\ --no-compiler-runtime --no-opengl-sw --no-angle -no-system-d3d-compiler \"$\"" ) diff --git a/cmake/templates/FixupBundlePostBuild.cmake.in b/cmake/templates/FixupBundlePostBuild.cmake.in index 3e816433a0..bb96fe49f3 100644 --- a/cmake/templates/FixupBundlePostBuild.cmake.in +++ b/cmake/templates/FixupBundlePostBuild.cmake.in @@ -73,10 +73,5 @@ else() set(PLUGIN_EXTENSION "so") endif() -message("+++++++++") -message(${BUNDLE_PLUGIN_DIR}) -message(${PLUGIN_EXTENSION}) -message("---------") - file(GLOB EXTRA_PLUGINS "${BUNDLE_PLUGIN_DIR}/*.${PLUGIN_EXTENSION}") fixup_bundle("${BUNDLE_EXECUTABLE}" "${EXTRA_PLUGINS}" "@FIXUP_LIBS@" IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe") diff --git a/tools/qt-builder/README.md b/tools/qt-builder/README.md index f3aeb7a497..2cd2b879c7 100644 --- a/tools/qt-builder/README.md +++ b/tools/qt-builder/README.md @@ -125,9 +125,9 @@ Before building, verify that **HIFI_VCPKG_BASE_VERSION** points to a *vcpkg* fol `git apply --ignore-space-change --ignore-whitespace patches/aec.patch` `cd ..` #### Configuring -`mkdir qt5-install` -`mkdir qt5-build` -`cd qt5-build` +`mkdir qt5-install` +`mkdir qt5-build` +`cd qt5-build` run `..\qt5\qt5vars.bat` `cd ..\..\qt5-build` From bf1d73b413336a566f94c18930b6f5c342acc59b Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Thu, 25 Apr 2019 08:29:53 -0700 Subject: [PATCH 037/203] Undid testing. --- cmake/macros/PackageLibrariesForDeployment.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/macros/PackageLibrariesForDeployment.cmake b/cmake/macros/PackageLibrariesForDeployment.cmake index 96305839f3..29f4617a6f 100644 --- a/cmake/macros/PackageLibrariesForDeployment.cmake +++ b/cmake/macros/PackageLibrariesForDeployment.cmake @@ -39,7 +39,7 @@ macro(PACKAGE_LIBRARIES_FOR_DEPLOYMENT) add_custom_command( TARGET ${TARGET_NAME} POST_BUILD - COMMAND CMD /C "SET PATH=%PATH%;BBBBBBBBBBBB/bin && ${WINDEPLOYQT_COMMAND}\ + COMMAND CMD /C "SET PATH=%PATH%;${QT_DIR}/bin && ${WINDEPLOYQT_COMMAND}\ ${EXTRA_DEPLOY_OPTIONS} $<$,$,$>:--release>\ --no-compiler-runtime --no-opengl-sw --no-angle -no-system-d3d-compiler \"$\"" ) From 450bc96c39a7573efc696d7a512943e9efa00e93 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Thu, 25 Apr 2019 08:53:25 -0700 Subject: [PATCH 038/203] Cleanup. --- tools/qt-builder/README.md | 295 ++++++++++++++++++------------------- 1 file changed, 146 insertions(+), 149 deletions(-) diff --git a/tools/qt-builder/README.md b/tools/qt-builder/README.md index 2cd2b879c7..312a3d4622 100644 --- a/tools/qt-builder/README.md +++ b/tools/qt-builder/README.md @@ -15,167 +15,165 @@ Add path to python executable to PATH. NOTE: REMOVE python 3 from PATH. Our regular build uses python 3. This will still work, because HIFI_PYTHON_EXEC points to the python 3 executable. -Verify that python runs python 2.7 (run “python --version”) -1. git >= 1.6 -Check if needed `git --version` -Download from https://git-scm.com/download/win -Verify by entering `git --version` -1. perl >= 5.14 -Install from Strawberry Perl - http://strawberryperl.com/ - 5.28.1.1 64 bit to C:\Strawberry\ -Verify by running `perl --version` -1. flex and bison -Download from https://sourceforge.net/projects/winflexbison/files/latest/download -Uncompress in C:\flex_bison -Rename win-bison.exe to bison.exe and win-flex.exe to flex.exe -Add C:\flex_bison to PATH -Verify by running `flex --version` -Verify by running `bison --version` -1. gperf -Install from http://gnuwin32.sourceforge.net/downlinks/gperf.php -Add C:\Program Files (x86)\GnuWin32\bin to PATH -Verify by running `gperf --version` -1. 7-zip -Download from https://www.7-zip.org/download.html -1. Bash shell -From *Settings* select *Update & Security* -Select *For Developers* -Enable *Developer mode* -Restart PC -Open Control Panel and select *Programs and Features* -Select *Turn Windows features on or off* -Check *Windows Subsystem for Linux* -Click *Restart now* -Download from the Microsoft Store - Search for *bash* and choose the latest Ubuntu version -[First run will take a few minutes] -Enter a user name - all small letters (this is not required for later use) -Choose a password -### Linux -Tested on Ubuntu 18.04 -1. qt5 requirements -edit /etc/apt/sources.list (edit as root) -replace all *# deb-src* with *deb-src* (in vi `1,$s/# deb-src/deb-src/`) -`sudo apt-get update -y` -`sudo apt-get upgrade -y` -`sudo apt-get build-dep qt5-default -y` -1. git >= 1.6 -Check if needed `git --version` -`sudo apt-get install git -y` -Verify again -1. python -Check if needed `python --version` - should return python 2.7.x -`sudo apt-get install python -y` (not python 3!) -Verify again -1. gperf -Check if needed `gperf --version` -`sudo apt-get install gperf -y` -Verify again -1. bison and flex -Check if needed `flex --version` and `bison --version` -`sudo apt-get install flex bison -y` -Verify again -1. pkg-config (needed for qtwebengine) -Check if needed `pkg-config --version` -`sudo apt-get install pkg-config -y` -Verify again -1. OpenGL -Verify (first install mesa-utils - `sudo apt install mesa-utils -y`) by `glxinfo | grep "OpenGL version"` -`sudo apt-get install libgl1-mesa-dev -y` -`sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so.346.35 /usr/lib/x86_64-linux-gnu/libGL.so.1.2.0` -Verify again -1. make -Check if needed `make --version` -`sudo apt-get install make -y` -Verify again -1. g++ -Check if needed - `g++ --version` -`sudo apt-get install g++ -y` -Verify again -1. dbus-1 (needed for qtwebengine) -`sudo apt-get install libdbus-glib-1-dev -y` -1. nss (needed for qtwebengine) -`sudo apt-get install libnss3-dev -y` -### Mac -1. git >= 1.6 -Check if needed `git --version` -Install from https://git-scm.com/download/mac -Verify again -1. pkg-config -brew fontconfig dbus-glib stall pkg-config -1. dbus-1 -brew install dbus-glib +Verify that python runs python 2.7 (run “python --version”) +1. git >= 1.6 +Check if needed `git --version` +Download from https://git-scm.com/download/win +Verify by entering `git --version` +1. perl >= 5.14 +Install from Strawberry Perl - http://strawberryperl.com/ - 5.28.1.1 64 bit to C:\Strawberry\ +Verify by running `perl --version` +1. flex and bison +Download from https://sourceforge.net/projects/winflexbison/files/latest/download +Uncompress in C:\flex_bison +Rename win-bison.exe to bison.exe and win-flex.exe to flex.exe +Add C:\flex_bison to PATH +Verify by running `flex --version` +Verify by running `bison --version` +1. gperf +Install from http://gnuwin32.sourceforge.net/downlinks/gperf.php +Add C:\Program Files (x86)\GnuWin32\bin to PATH +Verify by running `gperf --version` +1. 7-zip +Download from https://www.7-zip.org/download.html +1. Bash shell +From *Settings* select *Update & Security* +Select *For Developers* +Enable *Developer mode* +Restart PC +Open Control Panel and select *Programs and Features* +Select *Turn Windows features on or off* +Check *Windows Subsystem for Linux* +Click *Restart now* +Download from the Microsoft Store - Search for *bash* and choose the latest Ubuntu version +[First run will take a few minutes] +Enter a user name - all small letters (this is used for *sudo* commands) +Choose a password +### Linux +Tested on Ubuntu 18.04 +1. qt5 requirements +edit /etc/apt/sources.list (edit as root) +replace all *# deb-src* with *deb-src* (in vi `1,$s/# deb-src/deb-src/`) +`sudo apt-get update -y` +`sudo apt-get upgrade -y` +`sudo apt-get build-dep qt5-default -y` +1. git >= 1.6 +Check if needed `git --version` +`sudo apt-get install git -y` +Verify again +1. python +Check if needed `python --version` - should return python 2.7.x +`sudo apt-get install python -y` (not python 3!) +Verify again +1. gperf +Check if needed `gperf --version` +`sudo apt-get install gperf -y` +Verify again +1. bison and flex +Check if needed `flex --version` and `bison --version` +`sudo apt-get install flex bison -y` +Verify again +1. pkg-config (needed for qtwebengine) +Check if needed `pkg-config --version` +`sudo apt-get install pkg-config -y` +Verify again +1. OpenGL +Verify (first install mesa-utils - `sudo apt install mesa-utils -y`) by `glxinfo | grep "OpenGL version"` +`sudo apt-get install libgl1-mesa-dev -y` +`sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so.346.35 /usr/lib/x86_64-linux-gnu/libGL.so.1.2.0` +Verify again +1. make +Check if needed `make --version` +`sudo apt-get install make -y` +Verify again +1. g++ +Check if needed + `g++ --version` +`sudo apt-get install g++ -y` +Verify again +1. dbus-1 (needed for qtwebengine) +`sudo apt-get install libdbus-glib-1-dev -y` +1. nss (needed for qtwebengine) +`sudo apt-get install libnss3-dev -y` +### Mac +1. git >= 1.6 +Check if needed `git --version` +Install from https://git-scm.com/download/mac +Verify again +1. pkg-config +brew fontconfig dbus-glib stall pkg-config +1. dbus-1 +brew install dbus-glib ## Build Process ### General -qt is cloned to the qt5 folder. -The build is performed in the qt5-build folder. -Build products are installed to the qt5-install folder. -Before running configure, make sure that the qt5-build folder is empty. +qt is cloned to the qt5 folder. +The build is performed in the qt5-build folder. +Build products are installed to the qt5-install folder. +Before running configure, make sure that the qt5-build folder is empty. -**Only run the patches once!!!** +**Only run the patches once!!!** ### Windows -Before building, verify that **HIFI_VCPKG_BASE_VERSION** points to a *vcpkg* folder containing *packages\openssl-windows_x64-windows*. If not, follow https://github.com/highfidelity/vcpkg to install *vcpkg* and then *openssl*. +Before building, verify that **HIFI_VCPKG_BASE_VERSION** points to a *vcpkg* folder containing *packages\openssl-windows_x64-windows*. +If not, follow https://github.com/highfidelity/vcpkg to install *vcpkg* and then *openssl*. #### Preparing source files -`git clone --recursive https://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch` +`git clone --recursive https://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch` -* Copy the **patches** folder to qt5 -* Copy the **qt5vars.bat** file to qt5 -* Apply the two patches to Qt -`cd qt5` -`git apply --ignore-space-change --ignore-whitespace patches/qfloat16.patch` -`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` +* Copy the **patches** folder to qt5 +* Copy the **qt5vars.bat** file to qt5 +* Apply the two patches to Qt +`cd qt5` +`git apply --ignore-space-change --ignore-whitespace patches/qfloat16.patch` +`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` `cd ..` #### Configuring `mkdir qt5-install` `mkdir qt5-build` `cd qt5-build` -run `..\qt5\qt5vars.bat` -`cd ..\..\qt5-build` +run `..\qt5\qt5vars.bat` +`cd ..\..\qt5-build` -`..\qt5\configure -opensource -confirm-license -opengl desktop -platform win32-msvc -openssl-linked OPENSSL_LIBS="-lssleay32 -llibeay32" -I %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\include -L %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\lib -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ..\qt5-install` +`..\qt5\configure -opensource -confirm-license -opengl desktop -platform win32-msvc -openssl-linked OPENSSL_LIBS="-lssleay32 -llibeay32" -I %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\include -L %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\lib -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ..\qt5-install` #### Make `nmake` -`nmake install` +`nmake install` #### Fixing -The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) -1. Open a bash terminal -1. `cd` to the *qt5-install* folder (e.g. `cd /mnt/d/qt5-install/`) -1. Run the following command -` find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;` +The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) +1. Open a bash terminal +1. `cd` to the *qt5-install* folder (e.g. `cd /mnt/d/qt5-install/`) +1. Run the following command +` find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;` #### Uploading -Create a tar file called qt5-install.tar from the qt5-install folder (e.g. using 7-zip) -Create a gzip file called qt5-install.tar.gz from the qt5-install.tar file just created (e.g. using 7-zip) -Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Windows/ +Create a tar file called qt5-install.tar from the qt5-install folder (e.g. using 7-zip) +Create a gzip file called qt5-install.tar.gz from the qt5-install.tar file just created (e.g. using 7-zip) +Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Windows/ ### Linux #### Preparing source files -`git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch` +`git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch` -* Copy the **patches** folder to qt5 -* Apply one patch to Qt -`cd qt5` -`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` -`cd ..` +* Copy the **patches** folder to qt5 +* Apply one patch to Qt +`cd qt5` +`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` +`cd ..` #### Configuring +`mkdir qt5-install` +`mkdir qt5-build` +`cd qt5-build` -`mkdir qt5-install` -`mkdir qt5-build` -`cd qt5-build` - -`../qt5/configure -opensource -confirm-license -platform linux-g++-64 -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` +`../qt5/configure -opensource -confirm-license -platform linux-g++-64 -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` #### Make `make` -`make install` +`make install` #### Fixing -The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) -`cd ../qt5-install` -` find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;` +The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) +`cd ../qt5-install` +` find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;` #### Uploading -1. Return to the home folder -`cd ..` - -1. Open a python 3 shell -`python3` - +1. Return to the home folder +`cd ..` +1. Open a python 3 shell +`python3` 1. Run the following snippet: `import os` `import tarfile` @@ -183,28 +181,27 @@ The *.prl* files have an absolute path that needs to be removed (see http://www. `filename.add("qt5-install", os.path.basename("qt5-install"))` `exit()` -1. Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/ +1. Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/ ### Mac #### Preparing source files -git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch +git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch -* Copy the **patches** folder to qt5 -* Apply one patch to Qt -`cd qt5` -`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` -`cd ..` +* Copy the **patches** folder to qt5 +* Apply one patch to Qt +`cd qt5` +`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` +`cd ..` #### Configuring -`mkdir qt5-install` -`mkdir qt5-build` -`cd ../qt5-build` +`mkdir qt5-install` +`mkdir qt5-build` +`cd ../qt5-build` -`../qt5/configure -opensource -confirm-license -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` +`../qt5/configure -opensource -confirm-license -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` #### Make `make` -`make install` -#### Fixing +`make install` #### Uploading `tar -zcvf qt5-install.tar.gz qt5-install` -Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Mac/ +Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Mac/ ## Problems *configure* errors, if any, may be viewed in **config.log** and **config.summary** From 90d7948e0d0aa89e6233839296a2ca744a90b4ab Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Thu, 25 Apr 2019 09:01:10 -0700 Subject: [PATCH 039/203] TEST --- CMakeLists.txt | 3 ++- cmake/externals/quazip/CMakeLists.txt | 2 ++ cmake/macros/SetupQt.cmake | 2 ++ hifi_vcpkg.py | 2 ++ 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c8792d87ad..964d00b37d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -192,7 +192,8 @@ set_packaging_parameters() # Locate the required Qt build on the filesystem setup_qt() list(APPEND CMAKE_PREFIX_PATH "${QT_CMAKE_PREFIX_PATH}") - +message("=========================================================================TOP CMakeLists") +message(${QT_CMAKE_PREFIX_PATH}) find_package( Threads ) add_definitions(-DGLM_FORCE_RADIANS) diff --git a/cmake/externals/quazip/CMakeLists.txt b/cmake/externals/quazip/CMakeLists.txt index f99d995a0c..4785fadd40 100644 --- a/cmake/externals/quazip/CMakeLists.txt +++ b/cmake/externals/quazip/CMakeLists.txt @@ -11,6 +11,8 @@ set(QUAZIP_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DZLIB_ROOT=${VCPKG_INSTALL_ROOT} -DCMAKE_POSITION_INDEPENDENT_CODE=ON) +message("=========================================================================Quazip CMakeList") +message(${QT_CMAKE_PREFIX_PATH}) if (NOT APPLE) set(QUAZIP_CMAKE_ARGS ${QUAZIP_CMAKE_ARGS} -DCMAKE_CXX_STANDARD=11) diff --git a/cmake/macros/SetupQt.cmake b/cmake/macros/SetupQt.cmake index 6407aaaf04..76b437b397 100644 --- a/cmake/macros/SetupQt.cmake +++ b/cmake/macros/SetupQt.cmake @@ -43,5 +43,7 @@ macro(setup_qt) if (WIN32) add_paths_to_fixup_libs("${QT_DIR}/bin") endif () +message("=========================================================================SetupQtMake") +message(${QT_CMAKE_PREFIX_PATH}) endmacro() \ No newline at end of file diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index e1d509b9df..d449de8fa1 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -219,6 +219,8 @@ endif() installPath = os.path.join(self.path, 'installed', self.triplet) toolsPath = os.path.join(self.path, 'installed', self.hostTriplet, 'tools') cmakePrefixPath = os.path.join(self.path, 'installed', 'qt5-install/lib/cmake') + print("==========================================================hifi_vcpkg") + print(cmakePrefixPath) cmakeTemplate = VcpkgRepo.CMAKE_TEMPLATE if not self.args.android: cmakeTemplate += VcpkgRepo.CMAKE_TEMPLATE_NON_ANDROID From 9b22614135cee1a22c36f1e00c0fef8486e9e0c7 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Thu, 25 Apr 2019 10:16:15 -0700 Subject: [PATCH 040/203] Removed test code. --- CMakeLists.txt | 3 +-- cmake/externals/quazip/CMakeLists.txt | 2 -- cmake/macros/SetupQt.cmake | 2 -- hifi_vcpkg.py | 2 -- 4 files changed, 1 insertion(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 964d00b37d..c8792d87ad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -192,8 +192,7 @@ set_packaging_parameters() # Locate the required Qt build on the filesystem setup_qt() list(APPEND CMAKE_PREFIX_PATH "${QT_CMAKE_PREFIX_PATH}") -message("=========================================================================TOP CMakeLists") -message(${QT_CMAKE_PREFIX_PATH}) + find_package( Threads ) add_definitions(-DGLM_FORCE_RADIANS) diff --git a/cmake/externals/quazip/CMakeLists.txt b/cmake/externals/quazip/CMakeLists.txt index 4785fadd40..f99d995a0c 100644 --- a/cmake/externals/quazip/CMakeLists.txt +++ b/cmake/externals/quazip/CMakeLists.txt @@ -11,8 +11,6 @@ set(QUAZIP_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DZLIB_ROOT=${VCPKG_INSTALL_ROOT} -DCMAKE_POSITION_INDEPENDENT_CODE=ON) -message("=========================================================================Quazip CMakeList") -message(${QT_CMAKE_PREFIX_PATH}) if (NOT APPLE) set(QUAZIP_CMAKE_ARGS ${QUAZIP_CMAKE_ARGS} -DCMAKE_CXX_STANDARD=11) diff --git a/cmake/macros/SetupQt.cmake b/cmake/macros/SetupQt.cmake index 76b437b397..6407aaaf04 100644 --- a/cmake/macros/SetupQt.cmake +++ b/cmake/macros/SetupQt.cmake @@ -43,7 +43,5 @@ macro(setup_qt) if (WIN32) add_paths_to_fixup_libs("${QT_DIR}/bin") endif () -message("=========================================================================SetupQtMake") -message(${QT_CMAKE_PREFIX_PATH}) endmacro() \ No newline at end of file diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index d449de8fa1..e1d509b9df 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -219,8 +219,6 @@ endif() installPath = os.path.join(self.path, 'installed', self.triplet) toolsPath = os.path.join(self.path, 'installed', self.hostTriplet, 'tools') cmakePrefixPath = os.path.join(self.path, 'installed', 'qt5-install/lib/cmake') - print("==========================================================hifi_vcpkg") - print(cmakePrefixPath) cmakeTemplate = VcpkgRepo.CMAKE_TEMPLATE if not self.args.android: cmakeTemplate += VcpkgRepo.CMAKE_TEMPLATE_NON_ANDROID From 230493035d4731f9af2e13833653f9a3cd151ac4 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Thu, 25 Apr 2019 14:28:11 -0700 Subject: [PATCH 041/203] To update the vcpkg Qt. --- hifi_vcpkg.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index e1d509b9df..7bc35b28c3 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -240,7 +240,7 @@ endif() def installQt(self): - if not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): + if True or not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): print ("Downloading Qt from AWS ") dest = os.path.join(self.path, 'installed') if platform.system() == 'Windows': From 5aff0bf3e9580c963a5a7d881b47c88a7066b9d8 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Thu, 25 Apr 2019 15:07:34 -0700 Subject: [PATCH 042/203] Make sure vcpkg'ed version of windeployqt.exe is used. --- cmake/macros/PackageLibrariesForDeployment.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/macros/PackageLibrariesForDeployment.cmake b/cmake/macros/PackageLibrariesForDeployment.cmake index 29f4617a6f..b3f725b2b0 100644 --- a/cmake/macros/PackageLibrariesForDeployment.cmake +++ b/cmake/macros/PackageLibrariesForDeployment.cmake @@ -39,7 +39,7 @@ macro(PACKAGE_LIBRARIES_FOR_DEPLOYMENT) add_custom_command( TARGET ${TARGET_NAME} POST_BUILD - COMMAND CMD /C "SET PATH=%PATH%;${QT_DIR}/bin && ${WINDEPLOYQT_COMMAND}\ + COMMAND CMD /C "SET PATH=${QT_DIR}/bin;%PATH% && ${WINDEPLOYQT_COMMAND}\ ${EXTRA_DEPLOY_OPTIONS} $<$,$,$>:--release>\ --no-compiler-runtime --no-opengl-sw --no-angle -no-system-d3d-compiler \"$\"" ) From 08ca27bf42076615f0a4032d1400691ce93140ac Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Fri, 26 Apr 2019 15:30:00 -0700 Subject: [PATCH 043/203] Add qt.conf and updated README.md --- tools/qt-builder/README.md | 3 ++- tools/qt-builder/qt.conf | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 tools/qt-builder/qt.conf diff --git a/tools/qt-builder/README.md b/tools/qt-builder/README.md index 312a3d4622..0a8c4d18b1 100644 --- a/tools/qt-builder/README.md +++ b/tools/qt-builder/README.md @@ -143,6 +143,7 @@ The *.prl* files have an absolute path that needs to be removed (see http://www. 1. `cd` to the *qt5-install* folder (e.g. `cd /mnt/d/qt5-install/`) 1. Run the following command ` find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;` +1. Copy *qt.conf* to *qt5-install\bin* #### Uploading Create a tar file called qt5-install.tar from the qt5-install folder (e.g. using 7-zip) Create a gzip file called qt5-install.tar.gz from the qt5-install.tar file just created (e.g. using 7-zip) @@ -161,7 +162,7 @@ Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Windows/ `mkdir qt5-build` `cd qt5-build` -`../qt5/configure -opensource -confirm-license -platform linux-g++-64 -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` +`../qt5/configure -opensource -confirm-license -platform linux-g++-64 -qt-zlib -qt-libjpeg -qt=libpng -qt-xcb -qt-freetype [qt-pcre -qt-harfbuzz -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` #### Make `make` `make install` diff --git a/tools/qt-builder/qt.conf b/tools/qt-builder/qt.conf new file mode 100644 index 0000000000..01f4e8c707 --- /dev/null +++ b/tools/qt-builder/qt.conf @@ -0,0 +1,2 @@ +[Paths] +Prefix=.. From ced1f7d82b905573d91e4bafb75a693404e8f1b9 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Fri, 26 Apr 2019 15:30:40 -0700 Subject: [PATCH 044/203] Typo --- tools/qt-builder/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/qt-builder/README.md b/tools/qt-builder/README.md index 0a8c4d18b1..41d59b3ec9 100644 --- a/tools/qt-builder/README.md +++ b/tools/qt-builder/README.md @@ -162,7 +162,7 @@ Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Windows/ `mkdir qt5-build` `cd qt5-build` -`../qt5/configure -opensource -confirm-license -platform linux-g++-64 -qt-zlib -qt-libjpeg -qt=libpng -qt-xcb -qt-freetype [qt-pcre -qt-harfbuzz -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` +`../qt5/configure -opensource -confirm-license -platform linux-g++-64 -qt-zlib -qt-libjpeg -qt-libpng -qt-xcb -qt-freetype -qt-pcre -qt-harfbuzz -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` #### Make `make` `make install` From b84f8110f0984ec63fc4c1c2b72bc28f4d7d091d Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Fri, 26 Apr 2019 15:53:38 -0700 Subject: [PATCH 045/203] Updated for Mac. --- tools/qt-builder/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/qt-builder/README.md b/tools/qt-builder/README.md index 41d59b3ec9..4159915ab0 100644 --- a/tools/qt-builder/README.md +++ b/tools/qt-builder/README.md @@ -197,7 +197,7 @@ git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch `mkdir qt5-build` `cd ../qt5-build` -`../qt5/configure -opensource -confirm-license -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` +`../qt5/configure -opensource -confirm-license -qt-zlib -qt-libjpeg -qt-libpng -qt-xcb -qt-freetype -qt-pcre -qt-harfbuzz -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` #### Make `make` `make install` From 6f7cc6d07f932df5d78be550adcc6361983916a8 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Fri, 26 Apr 2019 16:27:02 -0700 Subject: [PATCH 046/203] Corrected README.md for Mac. --- tools/qt-builder/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/qt-builder/README.md b/tools/qt-builder/README.md index 4159915ab0..a3df8e60e1 100644 --- a/tools/qt-builder/README.md +++ b/tools/qt-builder/README.md @@ -197,7 +197,7 @@ git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch `mkdir qt5-build` `cd ../qt5-build` -`../qt5/configure -opensource -confirm-license -qt-zlib -qt-libjpeg -qt-libpng -qt-xcb -qt-freetype -qt-pcre -qt-harfbuzz -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` +`../qt5/configure -opensource -confirm-license -qt-zlib -qt-libjpeg -qt-libpng -qt-freetype -qt-pcre -qt-harfbuzz -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` #### Make `make` `make install` From 03b4d1b4728fb6e4b49eb0944ea94c70e2246fb4 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Sat, 27 Apr 2019 11:00:15 -0700 Subject: [PATCH 047/203] Updated readme. --- tools/qt-builder/README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tools/qt-builder/README.md b/tools/qt-builder/README.md index a3df8e60e1..2012cf7d7c 100644 --- a/tools/qt-builder/README.md +++ b/tools/qt-builder/README.md @@ -167,9 +167,10 @@ Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Windows/ `make` `make install` #### Fixing -The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) +1. The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) `cd ../qt5-install` ` find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;` +1. Copy *qt.conf* to *qt5-install\bin* #### Uploading 1. Return to the home folder `cd ..` @@ -201,6 +202,11 @@ git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch #### Make `make` `make install` +#### Fixing +1. The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) +`cd ../qt5-install` +` find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;` +1. Copy *qt.conf* to *qt5-install\bin* #### Uploading `tar -zcvf qt5-install.tar.gz qt5-install` Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Mac/ From 88f2cfa96513fe2ca4f51962a4b8622b5b6bdfe0 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Sat, 27 Apr 2019 22:22:57 -0700 Subject: [PATCH 048/203] Updated for Ubuntu 16.04 --- tools/qt-builder/README.md | 330 ++++++++++++++++++------------------- 1 file changed, 165 insertions(+), 165 deletions(-) diff --git a/tools/qt-builder/README.md b/tools/qt-builder/README.md index 2012cf7d7c..4c8399ab13 100644 --- a/tools/qt-builder/README.md +++ b/tools/qt-builder/README.md @@ -15,200 +15,200 @@ Add path to python executable to PATH. NOTE: REMOVE python 3 from PATH. Our regular build uses python 3. This will still work, because HIFI_PYTHON_EXEC points to the python 3 executable. -Verify that python runs python 2.7 (run “python --version”) -1. git >= 1.6 -Check if needed `git --version` -Download from https://git-scm.com/download/win -Verify by entering `git --version` -1. perl >= 5.14 -Install from Strawberry Perl - http://strawberryperl.com/ - 5.28.1.1 64 bit to C:\Strawberry\ -Verify by running `perl --version` -1. flex and bison -Download from https://sourceforge.net/projects/winflexbison/files/latest/download -Uncompress in C:\flex_bison -Rename win-bison.exe to bison.exe and win-flex.exe to flex.exe -Add C:\flex_bison to PATH -Verify by running `flex --version` -Verify by running `bison --version` -1. gperf -Install from http://gnuwin32.sourceforge.net/downlinks/gperf.php -Add C:\Program Files (x86)\GnuWin32\bin to PATH -Verify by running `gperf --version` -1. 7-zip -Download from https://www.7-zip.org/download.html -1. Bash shell -From *Settings* select *Update & Security* -Select *For Developers* -Enable *Developer mode* -Restart PC -Open Control Panel and select *Programs and Features* -Select *Turn Windows features on or off* -Check *Windows Subsystem for Linux* -Click *Restart now* -Download from the Microsoft Store - Search for *bash* and choose the latest Ubuntu version -[First run will take a few minutes] -Enter a user name - all small letters (this is used for *sudo* commands) -Choose a password -### Linux -Tested on Ubuntu 18.04 -1. qt5 requirements -edit /etc/apt/sources.list (edit as root) -replace all *# deb-src* with *deb-src* (in vi `1,$s/# deb-src/deb-src/`) -`sudo apt-get update -y` -`sudo apt-get upgrade -y` -`sudo apt-get build-dep qt5-default -y` -1. git >= 1.6 -Check if needed `git --version` -`sudo apt-get install git -y` -Verify again -1. python -Check if needed `python --version` - should return python 2.7.x -`sudo apt-get install python -y` (not python 3!) -Verify again -1. gperf -Check if needed `gperf --version` -`sudo apt-get install gperf -y` -Verify again -1. bison and flex -Check if needed `flex --version` and `bison --version` -`sudo apt-get install flex bison -y` -Verify again -1. pkg-config (needed for qtwebengine) -Check if needed `pkg-config --version` -`sudo apt-get install pkg-config -y` -Verify again -1. OpenGL -Verify (first install mesa-utils - `sudo apt install mesa-utils -y`) by `glxinfo | grep "OpenGL version"` -`sudo apt-get install libgl1-mesa-dev -y` -`sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so.346.35 /usr/lib/x86_64-linux-gnu/libGL.so.1.2.0` -Verify again -1. make -Check if needed `make --version` -`sudo apt-get install make -y` -Verify again -1. g++ -Check if needed - `g++ --version` -`sudo apt-get install g++ -y` -Verify again -1. dbus-1 (needed for qtwebengine) -`sudo apt-get install libdbus-glib-1-dev -y` -1. nss (needed for qtwebengine) -`sudo apt-get install libnss3-dev -y` -### Mac -1. git >= 1.6 -Check if needed `git --version` -Install from https://git-scm.com/download/mac -Verify again -1. pkg-config -brew fontconfig dbus-glib stall pkg-config -1. dbus-1 -brew install dbus-glib +Verify that python runs python 2.7 (run “python --version”) +1. git >= 1.6 +Check if needed `git --version` +Download from https://git-scm.com/download/win +Verify by entering `git --version` +1. perl >= 5.14 +Install from Strawberry Perl - http://strawberryperl.com/ - 5.28.1.1 64 bit to C:\Strawberry\ +Verify by running `perl --version` +1. flex and bison +Download from https://sourceforge.net/projects/winflexbison/files/latest/download +Uncompress in C:\flex_bison +Rename win-bison.exe to bison.exe and win-flex.exe to flex.exe +Add C:\flex_bison to PATH +Verify by running `flex --version` +Verify by running `bison --version` +1. gperf +Install from http://gnuwin32.sourceforge.net/downlinks/gperf.php +Add C:\Program Files (x86)\GnuWin32\bin to PATH +Verify by running `gperf --version` +1. 7-zip +Download from https://www.7-zip.org/download.html +1. Bash shell +From *Settings* select *Update & Security* +Select *For Developers* +Enable *Developer mode* +Restart PC +Open Control Panel and select *Programs and Features* +Select *Turn Windows features on or off* +Check *Windows Subsystem for Linux* +Click *Restart now* +Download from the Microsoft Store - Search for *bash* and choose the latest Ubuntu version +[First run will take a few minutes] +Enter a user name - all small letters (this is used for *sudo* commands) +Choose a password +### Linux +Tested on Ubuntu 18.04 +1. qt5 requirements +edit /etc/apt/sources.list (edit as root) +replace all *# deb-src* with *deb-src* (in vi `1,$s/# deb-src/deb-src/`) +`sudo apt-get update -y` +`sudo apt-get upgrade -y` +`sudo apt-get build-dep qt5-default -y` +1. git >= 1.6 +Check if needed `git --version` +`sudo apt-get install git -y` +Verify again +1. python +Check if needed `python --version` - should return python 2.7.x +`sudo apt-get install python -y` (not python 3!) +Verify again +1. gperf +Check if needed `gperf --version` +`sudo apt-get install gperf -y` +Verify again +1. bison and flex +Check if needed `flex --version` and `bison --version` +`sudo apt-get install flex bison -y` +Verify again +1. pkg-config (needed for qtwebengine) +Check if needed `pkg-config --version` +`sudo apt-get install pkg-config -y` +Verify again +1. OpenGL +Verify (first install mesa-utils - `sudo apt install mesa-utils -y`) by `glxinfo | grep "OpenGL version"` +`sudo apt-get install libgl1-mesa-dev -y` +`sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so.346.35 /usr/lib/x86_64-linux-gnu/libGL.so.1.2.0` +Verify again +1. make +Check if needed `make --version` +`sudo apt-get install make -y` +Verify again +1. g++ +Check if needed + `g++ --version` +`sudo apt-get install g++ -y` +Verify again +1. dbus-1 (needed for qtwebengine) +`sudo apt-get install libdbus-glib-1-dev -y` +1. nss (needed for qtwebengine) +`sudo apt-get install libnss3-dev -y` +### Mac +1. git >= 1.6 +Check if needed `git --version` +Install from https://git-scm.com/download/mac +Verify again +1. pkg-config +brew fontconfig dbus-glib stall pkg-config +1. dbus-1 +brew install dbus-glib ## Build Process ### General -qt is cloned to the qt5 folder. -The build is performed in the qt5-build folder. -Build products are installed to the qt5-install folder. -Before running configure, make sure that the qt5-build folder is empty. +qt is cloned to the qt5 folder. +The build is performed in the qt5-build folder. +Build products are installed to the qt5-install folder. +Before running configure, make sure that the qt5-build folder is empty. -**Only run the patches once!!!** +**Only run the patches once!!!** ### Windows -Before building, verify that **HIFI_VCPKG_BASE_VERSION** points to a *vcpkg* folder containing *packages\openssl-windows_x64-windows*. -If not, follow https://github.com/highfidelity/vcpkg to install *vcpkg* and then *openssl*. +Before building, verify that **HIFI_VCPKG_BASE_VERSION** points to a *vcpkg* folder containing *packages\openssl-windows_x64-windows*. +If not, follow https://github.com/highfidelity/vcpkg to install *vcpkg* and then *openssl*. #### Preparing source files -`git clone --recursive https://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch` +`git clone --recursive https://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch` -* Copy the **patches** folder to qt5 -* Copy the **qt5vars.bat** file to qt5 -* Apply the two patches to Qt -`cd qt5` -`git apply --ignore-space-change --ignore-whitespace patches/qfloat16.patch` -`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` +* Copy the **patches** folder to qt5 +* Copy the **qt5vars.bat** file to qt5 +* Apply the two patches to Qt +`cd qt5` +`git apply --ignore-space-change --ignore-whitespace patches/qfloat16.patch` +`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` `cd ..` #### Configuring -`mkdir qt5-install` -`mkdir qt5-build` -`cd qt5-build` +`mkdir qt5-install` +`mkdir qt5-build` +`cd qt5-build` -run `..\qt5\qt5vars.bat` -`cd ..\..\qt5-build` +run `..\qt5\qt5vars.bat` +`cd ..\..\qt5-build` -`..\qt5\configure -opensource -confirm-license -opengl desktop -platform win32-msvc -openssl-linked OPENSSL_LIBS="-lssleay32 -llibeay32" -I %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\include -L %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\lib -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ..\qt5-install` +`..\qt5\configure -opensource -confirm-license -opengl desktop -platform win32-msvc -openssl-linked OPENSSL_LIBS="-lssleay32 -llibeay32" -I %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\include -L %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\lib -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ..\qt5-install` #### Make -`nmake` -`nmake install` +`nmake` +`nmake install` #### Fixing -The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) -1. Open a bash terminal -1. `cd` to the *qt5-install* folder (e.g. `cd /mnt/d/qt5-install/`) -1. Run the following command -` find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;` -1. Copy *qt.conf* to *qt5-install\bin* +The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) +1. Open a bash terminal +1. `cd` to the *qt5-install* folder (e.g. `cd /mnt/d/qt5-install/`) +1. Run the following command +` find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;` +1. Copy *qt.conf* to *qt5-install\bin* #### Uploading -Create a tar file called qt5-install.tar from the qt5-install folder (e.g. using 7-zip) -Create a gzip file called qt5-install.tar.gz from the qt5-install.tar file just created (e.g. using 7-zip) -Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Windows/ +Create a tar file called qt5-install.tar from the qt5-install folder (e.g. using 7-zip) +Create a gzip file called qt5-install.tar.gz from the qt5-install.tar file just created (e.g. using 7-zip) +Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Windows/ ### Linux #### Preparing source files -`git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch` +`git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch` -* Copy the **patches** folder to qt5 -* Apply one patch to Qt -`cd qt5` -`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` -`cd ..` +* Copy the **patches** folder to qt5 +* Apply one patch to Qt +`cd qt5` +`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` +`cd ..` #### Configuring -`mkdir qt5-install` -`mkdir qt5-build` -`cd qt5-build` +`mkdir qt5-install` +`mkdir qt5-build` +`cd qt5-build` -`../qt5/configure -opensource -confirm-license -platform linux-g++-64 -qt-zlib -qt-libjpeg -qt-libpng -qt-xcb -qt-freetype -qt-pcre -qt-harfbuzz -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` +`../qt5/configure -opensource -confirm-license -platform linux-g++-64 -qt-zlib -qt-libjpeg -qt-libpng -qt-xcb -qt-freetype -qt-pcre -qt-harfbuzz -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -no-egl -no-icu -prefix ../qt5-install` #### Make -`make` -`make install` +`make` +`make install` #### Fixing -1. The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) -`cd ../qt5-install` -` find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;` -1. Copy *qt.conf* to *qt5-install\bin* +1. The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) +`cd ../qt5-install` +` find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;` +1. Copy *qt.conf* to *qt5-install\bin* #### Uploading -1. Return to the home folder -`cd ..` -1. Open a python 3 shell -`python3` -1. Run the following snippet: -`import os` -`import tarfile` -`filename=tarfile.open("qt5-install.tar.gz", "w:gz")` -`filename.add("qt5-install", os.path.basename("qt5-install"))` -`exit()` +1. Return to the home folder +`cd ..` +1. Open a python 3 shell +`python3` +1. Run the following snippet: +`import os` +`import tarfile` +`filename=tarfile.open("qt5-install.tar.gz", "w:gz")` +`filename.add("qt5-install", os.path.basename("qt5-install"))` +`exit()` -1. Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/ +1. Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/ ### Mac #### Preparing source files -git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch +git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch -* Copy the **patches** folder to qt5 -* Apply one patch to Qt -`cd qt5` -`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` -`cd ..` +* Copy the **patches** folder to qt5 +* Apply one patch to Qt +`cd qt5` +`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` +`cd ..` #### Configuring -`mkdir qt5-install` -`mkdir qt5-build` -`cd ../qt5-build` +`mkdir qt5-install` +`mkdir qt5-build` +`cd ../qt5-build` -`../qt5/configure -opensource -confirm-license -qt-zlib -qt-libjpeg -qt-libpng -qt-freetype -qt-pcre -qt-harfbuzz -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` +`../qt5/configure -opensource -confirm-license -qt-zlib -qt-libjpeg -qt-libpng -qt-freetype -qt-pcre -qt-harfbuzz -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` #### Make -`make` -`make install` +`make` +`make install` #### Fixing -1. The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) -`cd ../qt5-install` -` find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;` -1. Copy *qt.conf* to *qt5-install\bin* +1. The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) +`cd ../qt5-install` +` find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;` +1. Copy *qt.conf* to *qt5-install\bin* #### Uploading -`tar -zcvf qt5-install.tar.gz qt5-install` -Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Mac/ +`tar -zcvf qt5-install.tar.gz qt5-install` +Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Mac/ ## Problems *configure* errors, if any, may be viewed in **config.log** and **config.summary** From 79f73cf06c5bd2c4b7947faf42201037c341b1e1 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Sat, 27 Apr 2019 22:52:55 -0700 Subject: [PATCH 049/203] Minor cleanup --- tools/qt-builder/README.md | 344 +++++++++++++++++++------------------ 1 file changed, 173 insertions(+), 171 deletions(-) diff --git a/tools/qt-builder/README.md b/tools/qt-builder/README.md index 4c8399ab13..fc7cf7062a 100644 --- a/tools/qt-builder/README.md +++ b/tools/qt-builder/README.md @@ -1,214 +1,216 @@ # General This document describes the process to build Qt 5.12.3. -Note that there are two patches. The first (to qfloat16.h) is needed to compiel QT 5.12.3 on Visual Studio 2017 due to a bug in Visual Studio (*bitset* will not compile. Note that there is a change in CMakeLists.txt to support this. +Note that there are two patches. The first (to qfloat16.h) is needed to compiel QT 5.12.3 on Visual Studio 2017 due to a bug in Visual Studio (*bitset* will not compile. Note that there is a change in CMakeLists.txt to support this. The second patch is to OpenSL ES audio. ## Requirements ### Windows -1. Visual Studio 2017 - If you don’t have Community or Professional edition of Visual Studio 2017, download [Visual Studio Community 2017](https://www.visualstudio.com/downloads/). +1. Visual Studio 2017 + If you don’t have Community or Professional edition of Visual Studio 2017, download [Visual Studio Community 2017](https://www.visualstudio.com/downloads/). Install with defaults 1. python 2.7.16 -Check if needed running `python --version` - should return python 2.7.x -Install from https://www.python.org/ftp/python/2.7.16/python-2.7.16.amd64.msi +Check if needed running `python --version` - should return python 2.7.x +Install from https://www.python.org/ftp/python/2.7.16/python-2.7.16.amd64.msi Add path to python executable to PATH. NOTE: REMOVE python 3 from PATH. Our regular build uses python 3. This will still work, because HIFI_PYTHON_EXEC points to the python 3 executable. -Verify that python runs python 2.7 (run “python --version”) -1. git >= 1.6 -Check if needed `git --version` -Download from https://git-scm.com/download/win -Verify by entering `git --version` -1. perl >= 5.14 -Install from Strawberry Perl - http://strawberryperl.com/ - 5.28.1.1 64 bit to C:\Strawberry\ -Verify by running `perl --version` -1. flex and bison -Download from https://sourceforge.net/projects/winflexbison/files/latest/download -Uncompress in C:\flex_bison -Rename win-bison.exe to bison.exe and win-flex.exe to flex.exe -Add C:\flex_bison to PATH -Verify by running `flex --version` -Verify by running `bison --version` -1. gperf -Install from http://gnuwin32.sourceforge.net/downlinks/gperf.php -Add C:\Program Files (x86)\GnuWin32\bin to PATH -Verify by running `gperf --version` -1. 7-zip -Download from https://www.7-zip.org/download.html -1. Bash shell -From *Settings* select *Update & Security* -Select *For Developers* -Enable *Developer mode* -Restart PC -Open Control Panel and select *Programs and Features* -Select *Turn Windows features on or off* -Check *Windows Subsystem for Linux* -Click *Restart now* -Download from the Microsoft Store - Search for *bash* and choose the latest Ubuntu version -[First run will take a few minutes] -Enter a user name - all small letters (this is used for *sudo* commands) -Choose a password +Verify that python runs python 2.7 (run “python --version”) +1. git >= 1.6 +Check if needed `git --version` +Download from https://git-scm.com/download/win +Verify by entering `git --version` +1. perl >= 5.14 +Install from Strawberry Perl - http://strawberryperl.com/ - 5.28.1.1 64 bit to C:\Strawberry\ +Verify by running `perl --version` +1. flex and bison +Download from https://sourceforge.net/projects/winflexbison/files/latest/download +Uncompress in C:\flex_bison +Rename win-bison.exe to bison.exe and win-flex.exe to flex.exe +Add C:\flex_bison to PATH +Verify by running `flex --version` +Verify by running `bison --version` +1. gperf +Install from http://gnuwin32.sourceforge.net/downlinks/gperf.php +Add C:\Program Files (x86)\GnuWin32\bin to PATH +Verify by running `gperf --version` +1. 7-zip +Download from https://www.7-zip.org/download.html +1. Bash shell +From *Settings* select *Update & Security* +Select *For Developers* +Enable *Developer mode* +Restart PC +Open Control Panel and select *Programs and Features* +Select *Turn Windows features on or off* +Check *Windows Subsystem for Linux* +Click *Restart now* +Download from the Microsoft Store - Search for *bash* and choose the latest Ubuntu version +[First run will take a few minutes] +Enter a user name - all small letters (this is used for *sudo* commands) +Choose a password ### Linux -Tested on Ubuntu 18.04 -1. qt5 requirements -edit /etc/apt/sources.list (edit as root) -replace all *# deb-src* with *deb-src* (in vi `1,$s/# deb-src/deb-src/`) -`sudo apt-get update -y` -`sudo apt-get upgrade -y` -`sudo apt-get build-dep qt5-default -y` -1. git >= 1.6 -Check if needed `git --version` -`sudo apt-get install git -y` -Verify again -1. python -Check if needed `python --version` - should return python 2.7.x -`sudo apt-get install python -y` (not python 3!) -Verify again -1. gperf -Check if needed `gperf --version` -`sudo apt-get install gperf -y` -Verify again -1. bison and flex -Check if needed `flex --version` and `bison --version` -`sudo apt-get install flex bison -y` -Verify again -1. pkg-config (needed for qtwebengine) -Check if needed `pkg-config --version` -`sudo apt-get install pkg-config -y` -Verify again -1. OpenGL -Verify (first install mesa-utils - `sudo apt install mesa-utils -y`) by `glxinfo | grep "OpenGL version"` -`sudo apt-get install libgl1-mesa-dev -y` -`sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so.346.35 /usr/lib/x86_64-linux-gnu/libGL.so.1.2.0` -Verify again -1. make -Check if needed `make --version` -`sudo apt-get install make -y` -Verify again -1. g++ -Check if needed - `g++ --version` -`sudo apt-get install g++ -y` -Verify again -1. dbus-1 (needed for qtwebengine) -`sudo apt-get install libdbus-glib-1-dev -y` -1. nss (needed for qtwebengine) -`sudo apt-get install libnss3-dev -y` +Tested on Ubuntu 16.04 and 18.04. +**16.04 NEEDED FOR JENKINS~~ ** +1. qt5 requirements +edit /etc/apt/sources.list (edit as root) +replace all *# deb-src* with *deb-src* (in vi `1,$s/# deb-src/deb-src/`) +`sudo apt-get update -y` +`sudo apt-get upgrade -y` +`sudo apt-get build-dep qt5-default -y` +1. git >= 1.6 +Check if needed `git --version` +`sudo apt-get install git -y` +Verify again +1. python +Check if needed `python --version` - should return python 2.7.x +`sudo apt-get install python -y` (not python 3!) +Verify again +1. gperf +Check if needed `gperf --version` +`sudo apt-get install gperf -y` +Verify again +1. bison and flex +Check if needed `flex --version` and `bison --version` +`sudo apt-get install flex bison -y` +Verify again +1. pkg-config (needed for qtwebengine) +Check if needed `pkg-config --version` +`sudo apt-get install pkg-config -y` +Verify again +1. OpenGL +Verify (first install mesa-utils - `sudo apt install mesa-utils -y`) by `glxinfo | grep "OpenGL version"` +`sudo apt-get install libgl1-mesa-dev -y` +`sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so.346.35 /usr/lib/x86_64-linux-gnu/libGL.so.1.2.0` +Verify again +1. make +Check if needed `make --version` +`sudo apt-get install make -y` +Verify again +1. g++ +Check if needed + `g++ --version` +`sudo apt-get install g++ -y` +Verify again +1. dbus-1 (needed for qtwebengine) +`sudo apt-get install libdbus-glib-1-dev -y` +1. nss (needed for qtwebengine) +`sudo apt-get install libnss3-dev -y` ### Mac -1. git >= 1.6 -Check if needed `git --version` -Install from https://git-scm.com/download/mac -Verify again -1. pkg-config -brew fontconfig dbus-glib stall pkg-config -1. dbus-1 -brew install dbus-glib +1. git >= 1.6 +Check if needed `git --version` +Install from https://git-scm.com/download/mac +Verify again +1. pkg-config +brew fontconfig dbus-glib stall pkg-config +1. dbus-1 +brew install dbus-glib ## Build Process ### General -qt is cloned to the qt5 folder. -The build is performed in the qt5-build folder. -Build products are installed to the qt5-install folder. -Before running configure, make sure that the qt5-build folder is empty. +qt is cloned to the qt5 folder. +The build is performed in the qt5-build folder. +Build products are installed to the qt5-install folder. +Before running configure, make sure that the qt5-build folder is empty. -**Only run the patches once!!!** +**Only run the patches once!!!** ### Windows -Before building, verify that **HIFI_VCPKG_BASE_VERSION** points to a *vcpkg* folder containing *packages\openssl-windows_x64-windows*. -If not, follow https://github.com/highfidelity/vcpkg to install *vcpkg* and then *openssl*. +Before building, verify that **HIFI_VCPKG_BASE_VERSION** points to a *vcpkg* folder containing *packages\openssl-windows_x64-windows*. +If not, follow https://github.com/highfidelity/vcpkg to install *vcpkg* and then *openssl*. #### Preparing source files -`git clone --recursive https://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch` +`git clone --recursive https://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch` + +* Copy the **patches** folder to qt5 +* Copy the **qt5vars.bat** file to qt5 +* Apply the two patches to Qt -* Copy the **patches** folder to qt5 -* Copy the **qt5vars.bat** file to qt5 -* Apply the two patches to Qt -`cd qt5` -`git apply --ignore-space-change --ignore-whitespace patches/qfloat16.patch` -`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` -`cd ..` -#### Configuring -`mkdir qt5-install` -`mkdir qt5-build` -`cd qt5-build` +`cd qt5` +`git apply --ignore-space-change --ignore-whitespace patches/qfloat16.patch` +`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` +`cd ..` +#### Configuring +`mkdir qt5-install` +`mkdir qt5-build` +`cd qt5-build` -run `..\qt5\qt5vars.bat` -`cd ..\..\qt5-build` +run `..\qt5\qt5vars.bat` +`cd ..\..\qt5-build` -`..\qt5\configure -opensource -confirm-license -opengl desktop -platform win32-msvc -openssl-linked OPENSSL_LIBS="-lssleay32 -llibeay32" -I %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\include -L %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\lib -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ..\qt5-install` +`..\qt5\configure -opensource -confirm-license -opengl desktop -platform win32-msvc -openssl-linked OPENSSL_LIBS="-lssleay32 -llibeay32" -I %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\include -L %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\lib -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ..\qt5-install` #### Make -`nmake` -`nmake install` +`nmake` +`nmake install` #### Fixing -The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) -1. Open a bash terminal -1. `cd` to the *qt5-install* folder (e.g. `cd /mnt/d/qt5-install/`) -1. Run the following command -` find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;` -1. Copy *qt.conf* to *qt5-install\bin* +The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) +1. Open a bash terminal +1. `cd` to the *qt5-install* folder (e.g. `cd /mnt/d/qt5-install/`) +1. Run the following command +`find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;` +1. Copy *qt.conf* to *qt5-install\bin* #### Uploading -Create a tar file called qt5-install.tar from the qt5-install folder (e.g. using 7-zip) -Create a gzip file called qt5-install.tar.gz from the qt5-install.tar file just created (e.g. using 7-zip) -Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Windows/ +Create a tar file called qt5-install.tar from the qt5-install folder (e.g. using 7-zip) +Create a gzip file called qt5-install.tar.gz from the qt5-install.tar file just created (e.g. using 7-zip) +Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Windows/ ### Linux #### Preparing source files -`git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch` - -* Copy the **patches** folder to qt5 -* Apply one patch to Qt -`cd qt5` -`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` +`git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch` + +* Copy the **patches** folder to qt5 +* Apply one patch to Qt +`cd qt5` +`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` `cd ..` #### Configuring -`mkdir qt5-install` -`mkdir qt5-build` -`cd qt5-build` +`mkdir qt5-install` +`mkdir qt5-build` +`cd qt5-build` -`../qt5/configure -opensource -confirm-license -platform linux-g++-64 -qt-zlib -qt-libjpeg -qt-libpng -qt-xcb -qt-freetype -qt-pcre -qt-harfbuzz -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -no-egl -no-icu -prefix ../qt5-install` +`../qt5/configure -opensource -confirm-license -platform linux-g++-64 -qt-zlib -qt-libjpeg -qt-libpng -qt-xcb -qt-freetype -qt-pcre -qt-harfbuzz -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -no-egl -no-icu -prefix ../qt5-install` #### Make -`make` -`make install` +`make` +`make install` #### Fixing -1. The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) -`cd ../qt5-install` -` find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;` -1. Copy *qt.conf* to *qt5-install\bin* +1. The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) +`cd ../qt5-install` +`find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;` +1. Copy *qt.conf* to *qt5-install\bin* #### Uploading -1. Return to the home folder -`cd ..` -1. Open a python 3 shell -`python3` -1. Run the following snippet: -`import os` -`import tarfile` -`filename=tarfile.open("qt5-install.tar.gz", "w:gz")` -`filename.add("qt5-install", os.path.basename("qt5-install"))` -`exit()` +1. Return to the home folder +`cd ..` +1. Open a python 3 shell +`python3` +1. Run the following snippet: +`import os` +`import tarfile` +`filename=tarfile.open("qt5-install.tar.gz", "w:gz")` +`filename.add("qt5-install", os.path.basename("qt5-install"))` +`exit()` -1. Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/ +1. Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/ ### Mac #### Preparing source files -git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch - -* Copy the **patches** folder to qt5 -* Apply one patch to Qt -`cd qt5` -`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` -`cd ..` +git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch + +* Copy the **patches** folder to qt5 +* Apply one patch to Qt +`cd qt5` +`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` +`cd ..` #### Configuring -`mkdir qt5-install` -`mkdir qt5-build` -`cd ../qt5-build` +`mkdir qt5-install` +`mkdir qt5-build` +`cd ../qt5-build` -`../qt5/configure -opensource -confirm-license -qt-zlib -qt-libjpeg -qt-libpng -qt-freetype -qt-pcre -qt-harfbuzz -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` +`../qt5/configure -opensource -confirm-license -qt-zlib -qt-libjpeg -qt-libpng -qt-freetype -qt-pcre -qt-harfbuzz -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` #### Make -`make` -`make install` +`make` +`make install` #### Fixing -1. The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) -`cd ../qt5-install` -` find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;` -1. Copy *qt.conf* to *qt5-install\bin* +1. The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) +`cd ../qt5-install` +`find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;` +1. Copy *qt.conf* to *qt5-install\bin* #### Uploading -`tar -zcvf qt5-install.tar.gz qt5-install` -Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Mac/ +`tar -zcvf qt5-install.tar.gz qt5-install` +Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Mac/ ## Problems *configure* errors, if any, may be viewed in **config.log** and **config.summary** From 67fb5efa37e3f0a8a91931489818b59028a81ebe Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Sun, 28 Apr 2019 18:25:00 -0700 Subject: [PATCH 050/203] Do not always download Qt. --- hifi_vcpkg.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index 7bc35b28c3..e1d509b9df 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -240,7 +240,7 @@ endif() def installQt(self): - if True or not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): + if not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): print ("Downloading Qt from AWS ") dest = os.path.join(self.path, 'installed') if platform.system() == 'Windows': From 7eaa45f5c178fc55ccccf5be6fc441932c6f9368 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Mon, 29 Apr 2019 12:33:23 -0700 Subject: [PATCH 051/203] Added macdeployqt to local builds. --- BUILD.md | 20 ++- BUILD_LINUX.md | 23 ++-- BUILD_OSX.md | 12 +- BUILD_WIN.md | 18 +-- cmake/macros/FixupInterface.cmake | 4 +- cmake/macros/FixupNitpick.cmake | 4 +- .../PackageLibrariesForDeployment.cmake | 118 ++++++++++-------- tools/qt-builder/README.md | 2 +- 8 files changed, 93 insertions(+), 108 deletions(-) diff --git a/BUILD.md b/BUILD.md index 25bbc89951..435ca74619 100644 --- a/BUILD.md +++ b/BUILD.md @@ -8,7 +8,7 @@ ### Dependencies - [cmake](https://cmake.org/download/): 3.9 -- [Qt](https://www.qt.io/download-open-source): 5.10.1 +- [Qt](https://www.qt.io/download-open-source): 5.12.3 - [Python](https://www.python.org/downloads/): 3.6 or higher ### CMake External Project Dependencies @@ -36,16 +36,14 @@ These are not placed in your normal build tree when doing an out of source build Hifi uses CMake to generate build files and project files for your platform. #### Qt +CMake will download Qt 5.12.3 using vcpkg. -In order for CMake to find the Qt5 find modules, you will need to set a QT_CMAKE_PREFIX_PATH environment variable pointing to your Qt installation. +To override this (i.e. use an installed Qt configuration - you will need to set a QT_CMAKE_PREFIX_PATH environment variable pointing to your Qt **lib/cmake** folder. +This can either be entered directly into your shell session before you build or in your shell profile (e.g.: ~/.bash_profile, ~/.bashrc, ~/.zshrc - this depends on your shell and environment). The path it needs to be set to will depend on where and how Qt5 was installed. e.g. -This can either be entered directly into your shell session before you build or in your shell profile (e.g.: ~/.bash_profile, ~/.bashrc, ~/.zshrc - this depends on your shell and environment). - -The path it needs to be set to will depend on where and how Qt5 was installed. e.g. - - export QT_CMAKE_PREFIX_PATH=/usr/local/Qt5.10.1/5.10.1/gcc_64/lib/cmake - export QT_CMAKE_PREFIX_PATH=/usr/local/qt/5.10.1/clang_64/lib/cmake/ - export QT_CMAKE_PREFIX_PATH=/usr/local/Cellar/qt5/5.10.1/lib/cmake + export QT_CMAKE_PREFIX_PATH=/usr/local/Qt5.12.3/gcc_64/lib/cmake + export QT_CMAKE_PREFIX_PATH=/usr/local/qt/5.12.3/clang_64/lib/cmake/ + export QT_CMAKE_PREFIX_PATH=/usr/local/Cellar/qt5/5.12.3/lib/cmake export QT_CMAKE_PREFIX_PATH=/usr/local/opt/qt5/lib/cmake #### Vcpkg @@ -68,13 +66,13 @@ Create a build directory in the root of your checkout and then run the CMake bui cd build cmake .. -If cmake gives you the same error message repeatedly after the build fails (e.g. you had a typo in the QT_CMAKE_PREFIX_PATH that you fixed but the `.cmake` files still cannot be found), try removing `CMakeCache.txt`. +If cmake gives you the same error message repeatedly after the build fails, try removing `CMakeCache.txt`. #### Variables Any variables that need to be set for CMake to find dependencies can be set as ENV variables in your shell profile, or passed directly to CMake with a `-D` flag appended to the `cmake ..` command. -For example, to pass the QT_CMAKE_PREFIX_PATH variable during build file generation: +For example, to pass the QT_CMAKE_PREFIX_PATH variable (if not using the vcpkg'ed version) during build file generation: cmake .. -DQT_CMAKE_PREFIX_PATH=/usr/local/qt/5.10.1/lib/cmake diff --git a/BUILD_LINUX.md b/BUILD_LINUX.md index 8820bda8f6..6b274b7f5b 100644 --- a/BUILD_LINUX.md +++ b/BUILD_LINUX.md @@ -19,23 +19,19 @@ sudo apt-get update ``` ### Prepare environment -Install Qt 5.10.1: -```bash -wget http://debian.highfidelity.com/pool/h/hi/hifiqt5.10.1_5.10.1_amd64.deb -sudo dpkg -i hifiqt5.10.1_5.10.1_amd64.deb -``` - -Install build dependencies: +Add the following line to *.bash_profile* +`export QT_QPA_FONTDIR=/usr/share/fonts/truetype/dejavu/` +#### Install build dependencies: ```bash sudo apt-get install libasound2 libxmu-dev libxi-dev freeglut3-dev libasound2-dev libjack0 libjack-dev libxrandr-dev libudev-dev libssl-dev zlib1g-dev ``` -To compile interface in a server you must install: +#### To compile interface in a server you must install: ```bash sudo apt-get -y install libpulse0 libnss3 libnspr4 libfontconfig1 libxcursor1 libxcomposite1 libxtst6 libxslt1.1 ``` -Install build tools: +#### Install build tools: ```bash # For Ubuntu 18.04 sudo apt-get install cmake @@ -46,14 +42,11 @@ wget https://cmake.org/files/v3.9/cmake-3.9.5-Linux-x86_64.sh sudo sh cmake-3.9.5-Linux-x86_64.sh --prefix=/usr/local --exclude-subdir ``` -Install Python 3: +#### Install Python 3: ```bash -sudo apt-get install python3.6 +sudo apt-get install python3 ``` - - ### Get code and checkout the tag you need - Clone this repository: ```bash git clone https://github.com/highfidelity/hifi.git @@ -80,7 +73,7 @@ cd hifi/build Prepare makefiles: ```bash -cmake -DQT_CMAKE_PREFIX_PATH=/usr/local/Qt5.10.1/5.10.1/gcc_64/lib/cmake .. +cmake .. ``` Start compilation of the server and get a cup of coffee: diff --git a/BUILD_OSX.md b/BUILD_OSX.md index 488c38e909..181ae29022 100644 --- a/BUILD_OSX.md +++ b/BUILD_OSX.md @@ -4,7 +4,7 @@ Please read the [general build guide](BUILD.md) for information on dependencies [Homebrew](https://brew.sh/) is an excellent package manager for macOS. It makes install of some High Fidelity dependencies very simple. - brew install cmake openssl qt + brew install cmake openssl ### Python 3 @@ -18,16 +18,6 @@ For OpenSSL installed via homebrew, set OPENSSL_ROOT_DIR: export OPENSSL_ROOT_DIR=/usr/local/Cellar/openssl/1.0.2l Note that this uses the version from the homebrew formula at the time of this writing, and the version in the path will likely change. - -### Qt - -Assuming you've installed Qt using the homebrew instructions above, you'll need to set QT_CMAKE_PREFIX_PATH so CMake can find your installations. -For Qt installed via homebrew, set QT_CMAKE_PREFIX_PATH: - - export QT_CMAKE_PREFIX_PATH=/usr/local/Cellar/qt/5.10.1/lib/cmake - -Note that this uses the version from the homebrew formula at the time of this writing, and the version in the path will likely change. - ### Xcode If Xcode is your editor of choice, you can ask CMake to generate Xcode project files instead of Unix Makefiles. diff --git a/BUILD_WIN.md b/BUILD_WIN.md index a8726b0a23..c9938fd3f3 100644 --- a/BUILD_WIN.md +++ b/BUILD_WIN.md @@ -1,7 +1,6 @@ -This is a stand-alone guide for creating your first High Fidelity build for Windows 64-bit. - +This is a stand-alone guide for creating your first High Fidelity build for Windows 64-bit. ## Building High Fidelity -Note: We are now using Visual Studio 2017 and Qt 5.10.1. If you are upgrading from Visual Studio 2013 and Qt 5.6.2, do a clean uninstall of those versions before going through this guide. +Note: We are now using Visual Studio 2017 and Qt 5.10.1. If you are upgrading from Visual Studio 2013 and Qt 5.6.2, do a clean uninstall of those versions before going through this guide. Note: The prerequisites will require about 10 GB of space on your drive. You will also need a system with at least 8GB of main memory. @@ -22,19 +21,6 @@ If you do not wish to use the Python installation bundled with Visual Studio, yo Download and install the latest version of CMake 3.9. Download the file named win64-x64 Installer from the [CMake Website](https://cmake.org/download/). You can access the installer on this [3.9 Version page](https://cmake.org/files/v3.9/). During installation, make sure to check "Add CMake to system PATH for all users" when prompted. - -### Step 3. Installing Qt - -Download and install the [Qt Open Source Online Installer](https://www.qt.io/download-open-source/?hsCtaTracking=f977210e-de67-475f-a32b-65cec207fd03%7Cd62710cd-e1db-46aa-8d4d-2f1c1ffdacea). While installing, you only need to have the following components checked under Qt 5.10.1: "msvc2017 64-bit", "Qt WebEngine", and "Qt Script (Deprecated)". - -Note: Installing the Sources is optional but recommended if you have room for them (~2GB). - -### Step 4. Setting Qt Environment Variable - -Go to `Control Panel > System > Advanced System Settings > Environment Variables > New...` (or search “Environment Variables” in Start Search). -* Set "Variable name": `QT_CMAKE_PREFIX_PATH` -* Set "Variable value": `C:\Qt\5.10.1\msvc2017_64\lib\cmake` - ### Step 5. Running CMake to Generate Build Files Run Command Prompt from Start and run the following commands: diff --git a/cmake/macros/FixupInterface.cmake b/cmake/macros/FixupInterface.cmake index 93b5cc25fb..d08ad2ac41 100644 --- a/cmake/macros/FixupInterface.cmake +++ b/cmake/macros/FixupInterface.cmake @@ -18,10 +18,10 @@ macro(fixup_interface) find_program(MACDEPLOYQT_COMMAND macdeployqt PATHS "${QT_DIR}/bin" NO_DEFAULT_PATH) - if (NOT MACDEPLOYQT_COMMAND AND (PRODUCTION_BUILD OR PR_BUILD)) + if (NOT MACDEPLOYQT_COMMAND) message(FATAL_ERROR "Could not find macdeployqt at ${QT_DIR}/bin.\ It is required to produce an relocatable interface application.\ - Check that the environment variable QT_DIR points to your Qt installation.\ + Check that the variable QT_DIR points to your Qt installation.\ ") endif () diff --git a/cmake/macros/FixupNitpick.cmake b/cmake/macros/FixupNitpick.cmake index 8477b17823..97ad313000 100644 --- a/cmake/macros/FixupNitpick.cmake +++ b/cmake/macros/FixupNitpick.cmake @@ -17,10 +17,10 @@ macro(fixup_nitpick) find_program(MACDEPLOYQT_COMMAND macdeployqt PATHS "${QT_DIR}/bin" NO_DEFAULT_PATH) - if (NOT MACDEPLOYQT_COMMAND AND (PRODUCTION_BUILD OR PR_BUILD)) + if (NOT MACDEPLOYQT_COMMAND) message(FATAL_ERROR "Could not find macdeployqt at ${QT_DIR}/bin.\ It is required to produce a relocatable nitpick application.\ - Check that the environment variable QT_DIR points to your Qt installation.\ + Check that the variable QT_DIR points to your Qt installation.\ ") endif () diff --git a/cmake/macros/PackageLibrariesForDeployment.cmake b/cmake/macros/PackageLibrariesForDeployment.cmake index b3f725b2b0..f6963f9d82 100644 --- a/cmake/macros/PackageLibrariesForDeployment.cmake +++ b/cmake/macros/PackageLibrariesForDeployment.cmake @@ -10,59 +10,77 @@ # macro(PACKAGE_LIBRARIES_FOR_DEPLOYMENT) - if (WIN32) - configure_file( - ${HF_CMAKE_DIR}/templates/FixupBundlePostBuild.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/FixupBundlePostBuild.cmake - @ONLY - ) + if (WIN32) + configure_file( + ${HF_CMAKE_DIR}/templates/FixupBundlePostBuild.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/FixupBundlePostBuild.cmake + @ONLY + ) - set(PLUGIN_PATH "plugins") + set(PLUGIN_PATH "plugins") - # add a post-build command to copy DLLs beside the executable - add_custom_command( - TARGET ${TARGET_NAME} - POST_BUILD - COMMAND ${CMAKE_COMMAND} - -DBUNDLE_EXECUTABLE="$" - -DBUNDLE_PLUGIN_DIR="$/${PLUGIN_PATH}" - -P "${CMAKE_CURRENT_BINARY_DIR}/FixupBundlePostBuild.cmake" - ) + # add a post-build command to copy DLLs beside the executable + add_custom_command( + TARGET ${TARGET_NAME} + POST_BUILD + COMMAND ${CMAKE_COMMAND} + -DBUNDLE_EXECUTABLE="$" + -DBUNDLE_PLUGIN_DIR="$/${PLUGIN_PATH}" + -P "${CMAKE_CURRENT_BINARY_DIR}/FixupBundlePostBuild.cmake" + ) - find_program(WINDEPLOYQT_COMMAND windeployqt PATHS ${QT_DIR}/bin NO_DEFAULT_PATH) + find_program(WINDEPLOYQT_COMMAND windeployqt PATHS ${QT_DIR}/bin NO_DEFAULT_PATH) - if (NOT WINDEPLOYQT_COMMAND) - message(FATAL_ERROR "Could not find windeployqt at ${QT_DIR}/bin. windeployqt is required.") + if (NOT WINDEPLOYQT_COMMAND) + message(FATAL_ERROR "Could not find windeployqt at ${QT_DIR}/bin. windeployqt is required.") + endif () + + # add a post-build command to call windeployqt to copy Qt plugins + add_custom_command( + TARGET ${TARGET_NAME} + POST_BUILD + COMMAND CMD /C "SET PATH=${QT_DIR}/bin;%PATH% && ${WINDEPLOYQT_COMMAND}\ + ${EXTRA_DEPLOY_OPTIONS} $<$,$,$>:--release>\ + --no-compiler-runtime --no-opengl-sw --no-angle -no-system-d3d-compiler \"$\"" + ) + + set(QTAUDIO_PATH "$/audio") + set(QTAUDIO_WIN7_PATH "$/audioWin7/audio") + set(QTAUDIO_WIN8_PATH "$/audioWin8/audio") + + # copy qtaudio_wasapi.dll and qtaudio_windows.dll in the correct directories for runtime selection + add_custom_command( + TARGET ${TARGET_NAME} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory "${QTAUDIO_WIN7_PATH}" + COMMAND ${CMAKE_COMMAND} -E make_directory "${QTAUDIO_WIN8_PATH}" + # copy release DLLs + COMMAND if exist "${QTAUDIO_PATH}/qtaudio_windows.dll" ( ${CMAKE_COMMAND} -E copy "${QTAUDIO_PATH}/qtaudio_windows.dll" "${QTAUDIO_WIN7_PATH}" ) + COMMAND if exist "${QTAUDIO_PATH}/qtaudio_windows.dll" ( ${CMAKE_COMMAND} -E copy "${WASAPI_DLL_PATH}/qtaudio_wasapi.dll" "${QTAUDIO_WIN8_PATH}" ) + # copy debug DLLs + COMMAND if exist "${QTAUDIO_PATH}/qtaudio_windowsd.dll" ( ${CMAKE_COMMAND} -E copy "${QTAUDIO_PATH}/qtaudio_windowsd.dll" "${QTAUDIO_WIN7_PATH}" ) + COMMAND if exist "${QTAUDIO_PATH}/qtaudio_windowsd.dll" ( ${CMAKE_COMMAND} -E copy "${WASAPI_DLL_PATH}/qtaudio_wasapid.dll" "${QTAUDIO_WIN8_PATH}" ) + # remove directory + COMMAND ${CMAKE_COMMAND} -E remove_directory "${QTAUDIO_PATH}" + ) + elseif (APPLE) + find_program(MACDEPLOYQT_COMMAND macdeployqt PATHS "${QT_DIR}/bin" NO_DEFAULT_PATH) + + if (NOT MACDEPLOYQT_COMMAND) + message(FATAL_ERROR "Could not find macdeployqt at ${QT_DIR}/bin. macdeployqt is required.") + endif () + + # add a post-build command to call macdeployqt to copy Qt plugins + add_custom_command(TARGET ${TARGET_NAME} POST_BUILD + (COMMAND ${MACDEPLOYQT_COMMAND}\${CMAKE_INSTALL_PREFIX}/${_INTERFACE_INSTALL_PATH}/ -verbose=2 -qmldir=${CMAKE_SOURCE_DIR}/interface/resources/qml/ + ) + + add_custom_command( + TARGET ${TARGET_NAME} + POST_BUILD + COMMAND CMD /C "SET PATH=${QT_DIR}/bin;%PATH% && ${WINDEPLOYQT_COMMAND}\ + ${EXTRA_DEPLOY_OPTIONS} $<$,$,$>:--release>\ + --no-compiler-runtime --no-opengl-sw --no-angle -no-system-d3d-compiler \"$\"" + ) endif () - - # add a post-build command to call windeployqt to copy Qt plugins - add_custom_command( - TARGET ${TARGET_NAME} - POST_BUILD - COMMAND CMD /C "SET PATH=${QT_DIR}/bin;%PATH% && ${WINDEPLOYQT_COMMAND}\ - ${EXTRA_DEPLOY_OPTIONS} $<$,$,$>:--release>\ - --no-compiler-runtime --no-opengl-sw --no-angle -no-system-d3d-compiler \"$\"" - ) - - set(QTAUDIO_PATH "$/audio") - set(QTAUDIO_WIN7_PATH "$/audioWin7/audio") - set(QTAUDIO_WIN8_PATH "$/audioWin8/audio") - - # copy qtaudio_wasapi.dll and qtaudio_windows.dll in the correct directories for runtime selection - add_custom_command( - TARGET ${TARGET_NAME} - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory "${QTAUDIO_WIN7_PATH}" - COMMAND ${CMAKE_COMMAND} -E make_directory "${QTAUDIO_WIN8_PATH}" - # copy release DLLs - COMMAND if exist "${QTAUDIO_PATH}/qtaudio_windows.dll" ( ${CMAKE_COMMAND} -E copy "${QTAUDIO_PATH}/qtaudio_windows.dll" "${QTAUDIO_WIN7_PATH}" ) - COMMAND if exist "${QTAUDIO_PATH}/qtaudio_windows.dll" ( ${CMAKE_COMMAND} -E copy "${WASAPI_DLL_PATH}/qtaudio_wasapi.dll" "${QTAUDIO_WIN8_PATH}" ) - # copy debug DLLs - COMMAND if exist "${QTAUDIO_PATH}/qtaudio_windowsd.dll" ( ${CMAKE_COMMAND} -E copy "${QTAUDIO_PATH}/qtaudio_windowsd.dll" "${QTAUDIO_WIN7_PATH}" ) - COMMAND if exist "${QTAUDIO_PATH}/qtaudio_windowsd.dll" ( ${CMAKE_COMMAND} -E copy "${WASAPI_DLL_PATH}/qtaudio_wasapid.dll" "${QTAUDIO_WIN8_PATH}" ) - # remove directory - COMMAND ${CMAKE_COMMAND} -E remove_directory "${QTAUDIO_PATH}" - ) - - endif () endmacro() diff --git a/tools/qt-builder/README.md b/tools/qt-builder/README.md index fc7cf7062a..b23a691e3a 100644 --- a/tools/qt-builder/README.md +++ b/tools/qt-builder/README.md @@ -1,6 +1,6 @@ # General This document describes the process to build Qt 5.12.3. -Note that there are two patches. The first (to qfloat16.h) is needed to compiel QT 5.12.3 on Visual Studio 2017 due to a bug in Visual Studio (*bitset* will not compile. Note that there is a change in CMakeLists.txt to support this. +Note that there are two patches. The first (to qfloat16.h) is needed to compile QT 5.12.3 on Visual Studio 2017 due to a bug in Visual Studio (*bitset* will not compile. Note that there is a change in CMakeLists.txt to support this. The second patch is to OpenSL ES audio. ## Requirements ### Windows From 52636564a1a0818e5de27680f76243cd28daf85c Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Mon, 29 Apr 2019 12:36:02 -0700 Subject: [PATCH 052/203] Added macdeployqt to local builds for nitpick. --- tools/nitpick/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/nitpick/CMakeLists.txt b/tools/nitpick/CMakeLists.txt index 44eace5e70..6076f80c16 100644 --- a/tools/nitpick/CMakeLists.txt +++ b/tools/nitpick/CMakeLists.txt @@ -195,5 +195,7 @@ if (WIN32) set(TARGET_INSTALL_DIR ${NITPICK_INSTALL_DIR}) set(TARGET_INSTALL_COMPONENT ${CLIENT_COMPONENT}) + package_libraries_for_deployment() +elseif (APPLE) package_libraries_for_deployment() endif() From 53c5e966db9c19b15e24e709bee8ce19c86fb0d5 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Mon, 29 Apr 2019 12:47:39 -0700 Subject: [PATCH 053/203] Debugging when to use macdeployqt. --- cmake/macros/FixupNitpick.cmake | 35 +++--- .../PackageLibrariesForDeployment.cmake | 118 ++++++++---------- 2 files changed, 65 insertions(+), 88 deletions(-) diff --git a/cmake/macros/FixupNitpick.cmake b/cmake/macros/FixupNitpick.cmake index 97ad313000..6fcb9b3c7c 100644 --- a/cmake/macros/FixupNitpick.cmake +++ b/cmake/macros/FixupNitpick.cmake @@ -10,27 +10,22 @@ # macro(fixup_nitpick) - if (APPLE) - string(REPLACE " " "\\ " ESCAPED_BUNDLE_NAME ${NITPICK_BUNDLE_NAME}) - string(REPLACE " " "\\ " ESCAPED_INSTALL_PATH ${NITPICK_INSTALL_DIR}) - set(_NITPICK_INSTALL_PATH "${ESCAPED_INSTALL_PATH}/${ESCAPED_BUNDLE_NAME}.app") + if (APPLE) + string(REPLACE " " "\\ " ESCAPED_BUNDLE_NAME ${NITPICK_BUNDLE_NAME}) + string(REPLACE " " "\\ " ESCAPED_INSTALL_PATH ${NITPICK_INSTALL_DIR}) + set(_NITPICK_INSTALL_PATH "${ESCAPED_INSTALL_PATH}/${ESCAPED_BUNDLE_NAME}.app") - find_program(MACDEPLOYQT_COMMAND macdeployqt PATHS "${QT_DIR}/bin" NO_DEFAULT_PATH) + find_program(MACDEPLOYQT_COMMAND macdeployqt PATHS "${QT_DIR}/bin" NO_DEFAULT_PATH) - if (NOT MACDEPLOYQT_COMMAND) - message(FATAL_ERROR "Could not find macdeployqt at ${QT_DIR}/bin.\ - It is required to produce a relocatable nitpick application.\ - Check that the variable QT_DIR points to your Qt installation.\ - ") + if (NOT MACDEPLOYQT_COMMAND) + message(FATAL_ERROR "Could not find macdeployqt at ${QT_DIR}/bin.\ + It is required to produce a relocatable nitpick application.\ + Check that the variable QT_DIR points to your Qt installation.\ + ") + endif () + + add_custom_command(TARGET ${TARGET_NAME} POST_BUILD + (COMMAND ${MACDEPLOYQT_COMMAND}\${CMAKE_INSTALL_PREFIX}/${_INTERFACE_INSTALL_PATH}/ -verbose=2 -qmldir=${CMAKE_SOURCE_DIR}/interface/resources/qml/ + ) endif () - - install(CODE " - execute_process(COMMAND ${MACDEPLOYQT_COMMAND}\ - \${CMAKE_INSTALL_PREFIX}/${_NITPICK_INSTALL_PATH}/\ - -verbose=2 -qmldir=${CMAKE_SOURCE_DIR}/interface/resources/qml/\ - )" - COMPONENT ${CLIENT_COMPONENT} - ) - - endif () endmacro() diff --git a/cmake/macros/PackageLibrariesForDeployment.cmake b/cmake/macros/PackageLibrariesForDeployment.cmake index f6963f9d82..b3f725b2b0 100644 --- a/cmake/macros/PackageLibrariesForDeployment.cmake +++ b/cmake/macros/PackageLibrariesForDeployment.cmake @@ -10,77 +10,59 @@ # macro(PACKAGE_LIBRARIES_FOR_DEPLOYMENT) - if (WIN32) - configure_file( - ${HF_CMAKE_DIR}/templates/FixupBundlePostBuild.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/FixupBundlePostBuild.cmake - @ONLY - ) + if (WIN32) + configure_file( + ${HF_CMAKE_DIR}/templates/FixupBundlePostBuild.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/FixupBundlePostBuild.cmake + @ONLY + ) - set(PLUGIN_PATH "plugins") + set(PLUGIN_PATH "plugins") - # add a post-build command to copy DLLs beside the executable - add_custom_command( - TARGET ${TARGET_NAME} - POST_BUILD - COMMAND ${CMAKE_COMMAND} - -DBUNDLE_EXECUTABLE="$" - -DBUNDLE_PLUGIN_DIR="$/${PLUGIN_PATH}" - -P "${CMAKE_CURRENT_BINARY_DIR}/FixupBundlePostBuild.cmake" - ) + # add a post-build command to copy DLLs beside the executable + add_custom_command( + TARGET ${TARGET_NAME} + POST_BUILD + COMMAND ${CMAKE_COMMAND} + -DBUNDLE_EXECUTABLE="$" + -DBUNDLE_PLUGIN_DIR="$/${PLUGIN_PATH}" + -P "${CMAKE_CURRENT_BINARY_DIR}/FixupBundlePostBuild.cmake" + ) - find_program(WINDEPLOYQT_COMMAND windeployqt PATHS ${QT_DIR}/bin NO_DEFAULT_PATH) + find_program(WINDEPLOYQT_COMMAND windeployqt PATHS ${QT_DIR}/bin NO_DEFAULT_PATH) - if (NOT WINDEPLOYQT_COMMAND) - message(FATAL_ERROR "Could not find windeployqt at ${QT_DIR}/bin. windeployqt is required.") - endif () - - # add a post-build command to call windeployqt to copy Qt plugins - add_custom_command( - TARGET ${TARGET_NAME} - POST_BUILD - COMMAND CMD /C "SET PATH=${QT_DIR}/bin;%PATH% && ${WINDEPLOYQT_COMMAND}\ - ${EXTRA_DEPLOY_OPTIONS} $<$,$,$>:--release>\ - --no-compiler-runtime --no-opengl-sw --no-angle -no-system-d3d-compiler \"$\"" - ) - - set(QTAUDIO_PATH "$/audio") - set(QTAUDIO_WIN7_PATH "$/audioWin7/audio") - set(QTAUDIO_WIN8_PATH "$/audioWin8/audio") - - # copy qtaudio_wasapi.dll and qtaudio_windows.dll in the correct directories for runtime selection - add_custom_command( - TARGET ${TARGET_NAME} - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory "${QTAUDIO_WIN7_PATH}" - COMMAND ${CMAKE_COMMAND} -E make_directory "${QTAUDIO_WIN8_PATH}" - # copy release DLLs - COMMAND if exist "${QTAUDIO_PATH}/qtaudio_windows.dll" ( ${CMAKE_COMMAND} -E copy "${QTAUDIO_PATH}/qtaudio_windows.dll" "${QTAUDIO_WIN7_PATH}" ) - COMMAND if exist "${QTAUDIO_PATH}/qtaudio_windows.dll" ( ${CMAKE_COMMAND} -E copy "${WASAPI_DLL_PATH}/qtaudio_wasapi.dll" "${QTAUDIO_WIN8_PATH}" ) - # copy debug DLLs - COMMAND if exist "${QTAUDIO_PATH}/qtaudio_windowsd.dll" ( ${CMAKE_COMMAND} -E copy "${QTAUDIO_PATH}/qtaudio_windowsd.dll" "${QTAUDIO_WIN7_PATH}" ) - COMMAND if exist "${QTAUDIO_PATH}/qtaudio_windowsd.dll" ( ${CMAKE_COMMAND} -E copy "${WASAPI_DLL_PATH}/qtaudio_wasapid.dll" "${QTAUDIO_WIN8_PATH}" ) - # remove directory - COMMAND ${CMAKE_COMMAND} -E remove_directory "${QTAUDIO_PATH}" - ) - elseif (APPLE) - find_program(MACDEPLOYQT_COMMAND macdeployqt PATHS "${QT_DIR}/bin" NO_DEFAULT_PATH) - - if (NOT MACDEPLOYQT_COMMAND) - message(FATAL_ERROR "Could not find macdeployqt at ${QT_DIR}/bin. macdeployqt is required.") - endif () - - # add a post-build command to call macdeployqt to copy Qt plugins - add_custom_command(TARGET ${TARGET_NAME} POST_BUILD - (COMMAND ${MACDEPLOYQT_COMMAND}\${CMAKE_INSTALL_PREFIX}/${_INTERFACE_INSTALL_PATH}/ -verbose=2 -qmldir=${CMAKE_SOURCE_DIR}/interface/resources/qml/ - ) - - add_custom_command( - TARGET ${TARGET_NAME} - POST_BUILD - COMMAND CMD /C "SET PATH=${QT_DIR}/bin;%PATH% && ${WINDEPLOYQT_COMMAND}\ - ${EXTRA_DEPLOY_OPTIONS} $<$,$,$>:--release>\ - --no-compiler-runtime --no-opengl-sw --no-angle -no-system-d3d-compiler \"$\"" - ) + if (NOT WINDEPLOYQT_COMMAND) + message(FATAL_ERROR "Could not find windeployqt at ${QT_DIR}/bin. windeployqt is required.") endif () + + # add a post-build command to call windeployqt to copy Qt plugins + add_custom_command( + TARGET ${TARGET_NAME} + POST_BUILD + COMMAND CMD /C "SET PATH=${QT_DIR}/bin;%PATH% && ${WINDEPLOYQT_COMMAND}\ + ${EXTRA_DEPLOY_OPTIONS} $<$,$,$>:--release>\ + --no-compiler-runtime --no-opengl-sw --no-angle -no-system-d3d-compiler \"$\"" + ) + + set(QTAUDIO_PATH "$/audio") + set(QTAUDIO_WIN7_PATH "$/audioWin7/audio") + set(QTAUDIO_WIN8_PATH "$/audioWin8/audio") + + # copy qtaudio_wasapi.dll and qtaudio_windows.dll in the correct directories for runtime selection + add_custom_command( + TARGET ${TARGET_NAME} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory "${QTAUDIO_WIN7_PATH}" + COMMAND ${CMAKE_COMMAND} -E make_directory "${QTAUDIO_WIN8_PATH}" + # copy release DLLs + COMMAND if exist "${QTAUDIO_PATH}/qtaudio_windows.dll" ( ${CMAKE_COMMAND} -E copy "${QTAUDIO_PATH}/qtaudio_windows.dll" "${QTAUDIO_WIN7_PATH}" ) + COMMAND if exist "${QTAUDIO_PATH}/qtaudio_windows.dll" ( ${CMAKE_COMMAND} -E copy "${WASAPI_DLL_PATH}/qtaudio_wasapi.dll" "${QTAUDIO_WIN8_PATH}" ) + # copy debug DLLs + COMMAND if exist "${QTAUDIO_PATH}/qtaudio_windowsd.dll" ( ${CMAKE_COMMAND} -E copy "${QTAUDIO_PATH}/qtaudio_windowsd.dll" "${QTAUDIO_WIN7_PATH}" ) + COMMAND if exist "${QTAUDIO_PATH}/qtaudio_windowsd.dll" ( ${CMAKE_COMMAND} -E copy "${WASAPI_DLL_PATH}/qtaudio_wasapid.dll" "${QTAUDIO_WIN8_PATH}" ) + # remove directory + COMMAND ${CMAKE_COMMAND} -E remove_directory "${QTAUDIO_PATH}" + ) + + endif () endmacro() From d1a29daf36783a49f9f4fec9821f2694149b96e6 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Mon, 29 Apr 2019 12:56:49 -0700 Subject: [PATCH 054/203] Corrected both installers. --- cmake/macros/FixupNitpick.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/macros/FixupNitpick.cmake b/cmake/macros/FixupNitpick.cmake index 6fcb9b3c7c..3c7d89e833 100644 --- a/cmake/macros/FixupNitpick.cmake +++ b/cmake/macros/FixupNitpick.cmake @@ -25,7 +25,7 @@ macro(fixup_nitpick) endif () add_custom_command(TARGET ${TARGET_NAME} POST_BUILD - (COMMAND ${MACDEPLOYQT_COMMAND}\${CMAKE_INSTALL_PREFIX}/${_INTERFACE_INSTALL_PATH}/ -verbose=2 -qmldir=${CMAKE_SOURCE_DIR}/interface/resources/qml/ + COMMAND ${MACDEPLOYQT_COMMAND}\${CMAKE_INSTALL_PREFIX}/${_INTERFACE_INSTALL_PATH}/ -verbose=2 -qmldir=${CMAKE_SOURCE_DIR}/interface/resources/qml/ ) endif () endmacro() From f2678ddb73bca06a6570b27559e3234cc96df270 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Mon, 29 Apr 2019 12:57:08 -0700 Subject: [PATCH 055/203] Corrected both installers. --- cmake/macros/FixupInterface.cmake | 34 +++++++++++++------------------ cmake/macros/FixupNitpick.cmake | 2 +- 2 files changed, 15 insertions(+), 21 deletions(-) diff --git a/cmake/macros/FixupInterface.cmake b/cmake/macros/FixupInterface.cmake index d08ad2ac41..fd3918964a 100644 --- a/cmake/macros/FixupInterface.cmake +++ b/cmake/macros/FixupInterface.cmake @@ -10,28 +10,22 @@ # macro(fixup_interface) - if (APPLE) + if (APPLE) + string(REPLACE " " "\\ " ESCAPED_BUNDLE_NAME ${INTERFACE_BUNDLE_NAME}) + string(REPLACE " " "\\ " ESCAPED_INSTALL_PATH ${INTERFACE_INSTALL_DIR}) + set(_INTERFACE_INSTALL_PATH "${ESCAPED_INSTALL_PATH}/${ESCAPED_BUNDLE_NAME}.app") - string(REPLACE " " "\\ " ESCAPED_BUNDLE_NAME ${INTERFACE_BUNDLE_NAME}) - string(REPLACE " " "\\ " ESCAPED_INSTALL_PATH ${INTERFACE_INSTALL_DIR}) - set(_INTERFACE_INSTALL_PATH "${ESCAPED_INSTALL_PATH}/${ESCAPED_BUNDLE_NAME}.app") + find_program(MACDEPLOYQT_COMMAND macdeployqt PATHS "${QT_DIR}/bin" NO_DEFAULT_PATH) - find_program(MACDEPLOYQT_COMMAND macdeployqt PATHS "${QT_DIR}/bin" NO_DEFAULT_PATH) + if (NOT MACDEPLOYQT_COMMAND) + message(FATAL_ERROR "Could not find macdeployqt at ${QT_DIR}/bin.\ + It is required to produce a relocatable interface application.\ + Check that the variable QT_DIR points to your Qt installation.\ + ") + endif () - if (NOT MACDEPLOYQT_COMMAND) - message(FATAL_ERROR "Could not find macdeployqt at ${QT_DIR}/bin.\ - It is required to produce an relocatable interface application.\ - Check that the variable QT_DIR points to your Qt installation.\ - ") + add_custom_command(TARGET ${TARGET_NAME} POST_BUILD + COMMAND ${MACDEPLOYQT_COMMAND}\${CMAKE_INSTALL_PREFIX}/${_INTERFACE_INSTALL_PATH}/ -verbose=2 -qmldir=${CMAKE_SOURCE_DIR}/interface/resources/qml/ + ) endif () - - install(CODE " - execute_process(COMMAND ${MACDEPLOYQT_COMMAND}\ - \${CMAKE_INSTALL_PREFIX}/${_INTERFACE_INSTALL_PATH}/\ - -verbose=2 -qmldir=${CMAKE_SOURCE_DIR}/interface/resources/qml/\ - )" - COMPONENT ${CLIENT_COMPONENT} - ) - - endif () endmacro() diff --git a/cmake/macros/FixupNitpick.cmake b/cmake/macros/FixupNitpick.cmake index 3c7d89e833..4ca6c01869 100644 --- a/cmake/macros/FixupNitpick.cmake +++ b/cmake/macros/FixupNitpick.cmake @@ -25,7 +25,7 @@ macro(fixup_nitpick) endif () add_custom_command(TARGET ${TARGET_NAME} POST_BUILD - COMMAND ${MACDEPLOYQT_COMMAND}\${CMAKE_INSTALL_PREFIX}/${_INTERFACE_INSTALL_PATH}/ -verbose=2 -qmldir=${CMAKE_SOURCE_DIR}/interface/resources/qml/ + COMMAND ${MACDEPLOYQT_COMMAND}\${CMAKE_INSTALL_PREFIX}/${_NITPICK_INSTALL_PATH}/ -verbose=2 -qmldir=${CMAKE_SOURCE_DIR}/interface/resources/qml/ ) endif () endmacro() From c12d270f8a2edb4175b3e20f0ca8b5001037e6af Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Mon, 29 Apr 2019 14:33:17 -0700 Subject: [PATCH 056/203] Use macdeployqt in post build --- cmake/macros/FixupInterface.cmake | 2 +- cmake/macros/FixupNitpick.cmake | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/macros/FixupInterface.cmake b/cmake/macros/FixupInterface.cmake index fd3918964a..a2959a73e3 100644 --- a/cmake/macros/FixupInterface.cmake +++ b/cmake/macros/FixupInterface.cmake @@ -25,7 +25,7 @@ macro(fixup_interface) endif () add_custom_command(TARGET ${TARGET_NAME} POST_BUILD - COMMAND ${MACDEPLOYQT_COMMAND}\${CMAKE_INSTALL_PREFIX}/${_INTERFACE_INSTALL_PATH}/ -verbose=2 -qmldir=${CMAKE_SOURCE_DIR}/interface/resources/qml/ + COMMAND ${MACDEPLOYQT_COMMAND} "$/../.." -verbose=2 -qmldir=${CMAKE_SOURCE_DIR}/interface/resources/qml/ ) endif () endmacro() diff --git a/cmake/macros/FixupNitpick.cmake b/cmake/macros/FixupNitpick.cmake index 4ca6c01869..231e1bfec9 100644 --- a/cmake/macros/FixupNitpick.cmake +++ b/cmake/macros/FixupNitpick.cmake @@ -25,7 +25,7 @@ macro(fixup_nitpick) endif () add_custom_command(TARGET ${TARGET_NAME} POST_BUILD - COMMAND ${MACDEPLOYQT_COMMAND}\${CMAKE_INSTALL_PREFIX}/${_NITPICK_INSTALL_PATH}/ -verbose=2 -qmldir=${CMAKE_SOURCE_DIR}/interface/resources/qml/ + COMMAND ${MACDEPLOYQT_COMMAND} "$/../.." -verbose=2 -qmldir=${CMAKE_SOURCE_DIR}/interface/resources/qml/ ) endif () endmacro() From 676f762348dd47f05c8490f24891ed0ebc13a311 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Tue, 30 Apr 2019 08:32:25 -0700 Subject: [PATCH 057/203] Updating readme's. --- BUILD.md | 31 +++++---- BUILD_LINUX.md | 178 ++++++++++++++++++++----------------------------- BUILD_OSX.md | 5 +- BUILD_WIN.md | 32 ++++----- 4 files changed, 103 insertions(+), 143 deletions(-) diff --git a/BUILD.md b/BUILD.md index 435ca74619..bd264a74ad 100644 --- a/BUILD.md +++ b/BUILD.md @@ -6,26 +6,25 @@ * [BUILD_ANDROID.md](BUILD_ANDROID.md) - additional instructions for Android ### Dependencies - +- [git](https://git-scm.com/downloads): >= 1.6 - [cmake](https://cmake.org/download/): 3.9 -- [Qt](https://www.qt.io/download-open-source): 5.12.3 - [Python](https://www.python.org/downloads/): 3.6 or higher ### CMake External Project Dependencies These dependencies need not be installed manually. They are automatically downloaded on the platforms where they are required. -- [Bullet Physics Engine](https://github.com/bulletphysics/bullet3/releases): 2.83 -- [glm](https://glm.g-truc.net/0.9.8/index.html): 0.9.8 -- [Oculus SDK](https://developer.oculus.com/downloads/): 1.11 (Win32) / 0.5 (Mac) -- [OpenVR](https://github.com/ValveSoftware/openvr): 1.0.6 (Win32 only) -- [Polyvox](http://www.volumesoffun.com/): 0.2.1 -- [QuaZip](https://sourceforge.net/projects/quazip/files/quazip/): 0.7.3 -- [SDL2](https://www.libsdl.org/download-2.0.php): 2.0.3 -- [Intel Threading Building Blocks](https://www.threadingbuildingblocks.org/): 4.3 -- [vcpkg](https://github.com/highfidelity/vcpkg): -- [VHACD](https://github.com/virneo/v-hacd) -- [zlib](http://www.zlib.net/): 1.28 (Win32 only) -- [nvtt](https://github.com/highfidelity/nvidia-texture-tools): 2.1.1 (customized) +- [Bullet Physics Engine](https://github.com/bulletphysics/bullet3/releases): 2.83 +- [glm](https://glm.g-truc.net/0.9.8/index.html): 0.9.8 +- [Oculus SDK](https://developer.oculus.com/downloads/): 1.11 (Win32) / 0.5 (Mac) +- [OpenVR](https://github.com/ValveSoftware/openvr): 1.0.6 (Win32 only) +- [Polyvox](http://www.volumesoffun.com/): 0.2.1 +- [QuaZip](https://sourceforge.net/projects/quazip/files/quazip/): 0.7.3 +- [SDL2](https://www.libsdl.org/download-2.0.php): 2.0.3 +- [Intel Threading Building Blocks](https://www.threadingbuildingblocks.org/): 4.3 +- [vcpkg](https://github.com/highfidelity/vcpkg): +- [VHACD](https://github.com/virneo/v-hacd) +- [zlib](http://www.zlib.net/): 1.28 (Win32 only) +- [nvtt](https://github.com/highfidelity/nvidia-texture-tools): 2.1.1 (customized) The above dependencies will be downloaded, built, linked and included automatically by CMake where we require them. The CMakeLists files that handle grabbing each of the following external dependencies can be found in the [cmake/externals folder](cmake/externals). The resulting downloads, source files and binaries will be placed in the `build/ext` folder in each of the subfolders for each external project. @@ -38,7 +37,7 @@ Hifi uses CMake to generate build files and project files for your platform. #### Qt CMake will download Qt 5.12.3 using vcpkg. -To override this (i.e. use an installed Qt configuration - you will need to set a QT_CMAKE_PREFIX_PATH environment variable pointing to your Qt **lib/cmake** folder. +To override this (i.e. use an installed Qt configuration - you will need to set a QT_CMAKE_PREFIX_PATH environment variable pointing to your Qt **lib/cmake** folder. This can either be entered directly into your shell session before you build or in your shell profile (e.g.: ~/.bash_profile, ~/.bashrc, ~/.zshrc - this depends on your shell and environment). The path it needs to be set to will depend on where and how Qt5 was installed. e.g. export QT_CMAKE_PREFIX_PATH=/usr/local/Qt5.12.3/gcc_64/lib/cmake @@ -74,7 +73,7 @@ Any variables that need to be set for CMake to find dependencies can be set as E For example, to pass the QT_CMAKE_PREFIX_PATH variable (if not using the vcpkg'ed version) during build file generation: - cmake .. -DQT_CMAKE_PREFIX_PATH=/usr/local/qt/5.10.1/lib/cmake + cmake .. -DQT_CMAKE_PREFIX_PATH=/usr/local/qt/5.12.3/lib/cmake #### Finding Dependencies diff --git a/BUILD_LINUX.md b/BUILD_LINUX.md index 6b274b7f5b..e8599ffce4 100644 --- a/BUILD_LINUX.md +++ b/BUILD_LINUX.md @@ -1,7 +1,6 @@ # Linux build guide Please read the [general build guide](BUILD.md) for information on dependencies required for all platforms. Only Linux specific instructions are found in this file. - ## Qt5 Dependencies Should you choose not to install Qt5 via a package manager that handles dependencies for you, you may be missing some Qt5 dependencies. On Ubuntu, for example, the following additional packages are required: @@ -9,43 +8,43 @@ Should you choose not to install Qt5 via a package manager that handles dependen libasound2 libxmu-dev libxi-dev freeglut3-dev libasound2-dev libjack0 libjack-dev libxrandr-dev libudev-dev libssl-dev zlib1g-dev ## Ubuntu 16.04/18.04 specific build guide - -### Ubuntu 18.04 only -Add the universe repository: -_(This is not enabled by default on the server edition)_ -```bash -sudo add-apt-repository universe -sudo apt-get update -``` - -### Prepare environment +### Ubuntu 16.04 only Add the following line to *.bash_profile* `export QT_QPA_FONTDIR=/usr/share/fonts/truetype/dejavu/` +### Ubuntu 18.04 only +Add the universe repository: +_(This is not enabled by default on the server edition)_ +`sudo add-apt-repository universe` +`sudo apt-get update` #### Install build dependencies: -```bash -sudo apt-get install libasound2 libxmu-dev libxi-dev freeglut3-dev libasound2-dev libjack0 libjack-dev libxrandr-dev libudev-dev libssl-dev zlib1g-dev -``` - +1. OpenSSL +`sudo apt-get install libssl-dev` +Verify with `openssl version` +1. OpenGL +Verify (first install mesa-utils - `sudo apt install mesa-utils -y`) by `glxinfo | grep "OpenGL version"` +`sudo apt-get install libgl1-mesa-dev -y` +`sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so.346.35 /usr/lib/x86_64-linux-gnu/libGL.so.1.2.0` #### To compile interface in a server you must install: -```bash -sudo apt-get -y install libpulse0 libnss3 libnspr4 libfontconfig1 libxcursor1 libxcomposite1 libxtst6 libxslt1.1 -``` - +`sudo apt-get -y install libpulse0 libnss3 libnspr4 libfontconfig1 libxcursor1 libxcomposite1 libxtst6 libxslt1.1` #### Install build tools: -```bash -# For Ubuntu 18.04 -sudo apt-get install cmake -``` -```bash -# For Ubuntu 16.04 -wget https://cmake.org/files/v3.9/cmake-3.9.5-Linux-x86_64.sh -sudo sh cmake-3.9.5-Linux-x86_64.sh --prefix=/usr/local --exclude-subdir -``` - -#### Install Python 3: -```bash -sudo apt-get install python3 -``` +1. First update the repositiories: +`sudo apt-get update -y` +`sudo apt-get upgrade -y` +1. git +`sudo apt-get install git -y` +Verify by git --version +1. g++ +`sudo apt-get install g++ -y` +Verify by g++ --version +1. cmake +`sudo apt-get install cmake -y` +Verify by git --version +1. cmake +`wget https://cmake.org/files/v3.14/cmake-3.14.2-Linux-x86_64.sh` +`sudo sh cmake-3.14.2-Linux-x86_64.sh --prefix=/usr/local --exclude-subdir` +##### Python +Add to _bash_profile: +` ### Get code and checkout the tag you need Clone this repository: ```bash @@ -53,110 +52,75 @@ git clone https://github.com/highfidelity/hifi.git ``` To compile a RELEASE version checkout the tag you need getting a list of all tags: -```bash -git fetch -a -git tags -``` - +`git fetch -a` +`git tags` Then checkout last tag with: -```bash -git checkout tags/v0.79.0 -``` - +`git checkout tags/v0.79.0` ### Compiling Create the build directory: -```bash -mkdir -p hifi/build -cd hifi/build -``` - +`mkdir -p hifi/build` +`cd hifi/build` Prepare makefiles: -```bash -cmake .. -``` +`cmake ..` + +* If cmake fails with a vcpkg error - delete /tmp/hifi/vcpkg. Start compilation of the server and get a cup of coffee: -```bash -make domain-server assignment-client -``` - -To compile interface: -```bash -make interface -``` +`make domain-server assignment-client` +To compile interface: +`make interface` In a server, it does not make sense to compile interface - ### Running the software #### Domain server Running domain server: -```bash -./domain-server/domain-server -``` - +`./domain-server/domain-server` #### Assignment clients Running assignment client: -```bash -./assignment-client/assignment-client -n 6 -``` - +`./assignment-client/assignment-client -n 6` #### Interface Running interface: -```bash -./interface/interface -``` +`./interface/interface` -Go to localhost in the running interface. +Go to localhost in the running interface. ##### Ubuntu 18.04 only In Ubuntu 18.04 there is a problem related with NVidia driver library version. -It can be workarounded following these steps: +It can be worked around following these steps: -Uninstall incompatible nvtt libraries: -```bash -sudo apt-get remove libnvtt2 libnvtt-dev -``` +1. Uninstall incompatible nvtt libraries: +`sudo apt-get remove libnvtt2 libnvtt-dev` -Install libssl1.0-dev: -```bash -sudo apt-get -y install libssl1.0-dev -``` +1. Install libssl1.0-dev: +`sudo apt-get -y install libssl1.0-dev` -Clone castano nvidia-texture-tools: -``` -git clone https://github.com/castano/nvidia-texture-tools -cd nvidia-texture-tools/ -``` +1. Clone castano nvidia-texture-tools: +`git clone https://github.com/castano/nvidia-texture-tools` +`cd nvidia-texture-tools/` -Make these changes in repo: -* In file **VERSION** set `2.2.1` -* In file **configure**: - * set `build="release"` - * set `-DNVTT_SHARED=1` +1. Make these changes in repo: +* In file **VERSION** set `2.2.1` +* In file **configure**: + * set `build="release"` + * set `-DNVTT_SHARED=1` -Configure, build and install: -``` -./configure -make -sudo make install -``` +1. Configure, build and install: +`./configure` +`make` +`sudo make install` -Link compiled files: -``` -sudo ln -s /usr/local/lib/libnvcore.so /usr/lib/libnvcore.so -sudo ln -s /usr/local/lib/libnvimage.so /usr/lib/libnvimage.so -sudo ln -s /usr/local/lib/libnvmath.so /usr/lib/libnvmath.so -sudo ln -s /usr/local/lib/libnvtt.so /usr/lib/libnvtt.so -``` +1.. Link compiled files: +`sudo ln -s /usr/local/lib/libnvcore.so /usr/lib/libnvcore.so` +`sudo ln -s /usr/local/lib/libnvimage.so /usr/lib/libnvimage.so` +`sudo ln -s /usr/local/lib/libnvmath.so /usr/lib/libnvmath.so` +`sudo ln -s /usr/local/lib/libnvtt.so /usr/lib/libnvtt.so` -After running this steps you can run interface: -``` -interface/interface -``` +`. After running this steps you can run interface: +`interface/interface` diff --git a/BUILD_OSX.md b/BUILD_OSX.md index 181ae29022..875d49bcb8 100644 --- a/BUILD_OSX.md +++ b/BUILD_OSX.md @@ -8,11 +8,12 @@ Please read the [general build guide](BUILD.md) for information on dependencies ### Python 3 -Download an install Python 3.6.6 or higher from [here](https://www.python.org/downloads/). Execute the `Update Shell Profile.command` script that is provided with the installer. +Download an install Python 3.6.6 or higher from [here](https://www.python.org/downloads/). +Execute the `Update Shell Profile.command` script that is provided with the installer. ### OpenSSL -Assuming you've installed OpenSSL using the homebrew instructions above, you'll need to set OPENSSL_ROOT_DIR so CMake can find your installations. +Assuming you've installed OpenSSL using the homebrew instructions above, you'll need to set OPENSSL_ROOT_DIR so CMake can find your installations. For OpenSSL installed via homebrew, set OPENSSL_ROOT_DIR: export OPENSSL_ROOT_DIR=/usr/local/Cellar/openssl/1.0.2l diff --git a/BUILD_WIN.md b/BUILD_WIN.md index c9938fd3f3..20ece131f4 100644 --- a/BUILD_WIN.md +++ b/BUILD_WIN.md @@ -1,6 +1,7 @@ This is a stand-alone guide for creating your first High Fidelity build for Windows 64-bit. ## Building High Fidelity -Note: We are now using Visual Studio 2017 and Qt 5.10.1. If you are upgrading from Visual Studio 2013 and Qt 5.6.2, do a clean uninstall of those versions before going through this guide. +Note: We are now using Visual Studio 2017 and Qt 5.12.3. +If you are upgrading from previous versions, do a clean uninstall of those versions before going through this guide. Note: The prerequisites will require about 10 GB of space on your drive. You will also need a system with at least 8GB of main memory. @@ -8,7 +9,8 @@ Note: The prerequisites will require about 10 GB of space on your drive. You wil If you don’t have Community or Professional edition of Visual Studio 2017, download [Visual Studio Community 2017](https://www.visualstudio.com/downloads/). -When selecting components, check "Desktop development with C++". Also on the right on the Summary toolbar, check "Windows 8.1 SDK and UCRT SDK" and "VC++ 2015.3 v140 toolset (x86,x64)". If you do not already have a python development environment installed, also check "Python Development" in this screen. +Leave default components. +If you do not already have a python development environment installed, also check "Python Development" in this screen. If you already have Visual Studio installed and need to add python, open the "Add or remove programs" control panel and find the "Microsoft Visual Studio Installer". Select it and click "Modify". In the installer, select "Modify" again, then check "Python Development" and allow the installer to apply the changes. @@ -23,13 +25,11 @@ Download and install the latest version of CMake 3.9. Download the file named win64-x64 Installer from the [CMake Website](https://cmake.org/download/). You can access the installer on this [3.9 Version page](https://cmake.org/files/v3.9/). During installation, make sure to check "Add CMake to system PATH for all users" when prompted. ### Step 5. Running CMake to Generate Build Files -Run Command Prompt from Start and run the following commands: -``` -cd "%HIFI_DIR%" -mkdir build -cd build -cmake .. -G "Visual Studio 15 Win64" -``` +Run Command Prompt from Start and run the following commands: +`cd "%HIFI_DIR%"` +`mkdir build` +`cd build` +`cmake .. -G "Visual Studio 15 Win64"` Where `%HIFI_DIR%` is the directory for the highfidelity repository. @@ -55,11 +55,11 @@ Note: You can also run Interface by launching it from command line or File Explo ## Troubleshooting -For any problems after Step #7, first try this: -* Delete your locally cloned copy of the highfidelity repository -* Restart your computer -* Redownload the [repository](https://github.com/highfidelity/hifi) -* Restart directions from Step #7 +For any problems after Step #7, first try this: +* Delete your locally cloned copy of the highfidelity repository +* Restart your computer +* Redownload the [repository](https://github.com/highfidelity/hifi) +* Restart directions from Step #7 #### CMake gives you the same error message repeatedly after the build fails @@ -68,7 +68,3 @@ Remove `CMakeCache.txt` found in the `%HIFI_DIR%\build` directory. #### CMake can't find OpenSSL Remove `CMakeCache.txt` found in the `%HIFI_DIR%\build` directory. Verify that your HIFI_VCPKG_BASE environment variable is set and pointing to the correct location. Verify that the file `${HIFI_VCPKG_BASE}/installed/x64-windows/include/openssl/ssl.h` exists. - -#### Qt is throwing an error - -Make sure you have the correct version (5.10.1) installed and `QT_CMAKE_PREFIX_PATH` environment variable is set correctly. From 80bf1e592dee7f7cd0ad1cdc07d22222e256aa3b Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Fri, 3 May 2019 20:37:40 -0700 Subject: [PATCH 058/203] Allow build on both Ubuntu 16.04 (Jenkins) and 18.04 --- hifi_vcpkg.py | 24 ++++++++++++++++-------- tools/qt-builder/README.md | 19 +++++++++++++++---- 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index e1d509b9df..6d64a76f73 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -241,17 +241,25 @@ endif() def installQt(self): if not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): - print ("Downloading Qt from AWS ") + print ('Downloading Qt from AWS') dest = os.path.join(self.path, 'installed') + if platform.system() == 'Windows': - url = "https://hifi-qa.s3.amazonaws.com/qt5/Windows/qt5-install.tar.gz" + url = 'https://hifi-qa.s3.amazonaws.com/qt5/Windows/qt5-install.tar.gz' elif platform.system() == 'Darwin': - url = "https://hifi-qa.s3.amazonaws.com/qt5/Mac/qt5-install.tar.gz" + url = 'https://hifi-qa.s3.amazonaws.com/qt5/Mac/qt5-install.tar.gz' elif platform.system() == 'Linux': - url = "https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/qt5-install.tar.gz" - - print("Extracting " + url + " to " + dest) + if (platform.linux_distribution()[1] == '16.04': + self.vcpkgUrl = 'https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/16.04/qt5-install.tar.gz' + elif platform.linux_distribution()[1] == '18.04': + self.vcpkgUrl = "https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/18.04/qt5-install.tar.gz" + else: + print('UNKNOWN LINUX VERSION!!!') + else: + print('UNKNOWN OPERATING SYSTEM!!!') + + print('Extracting ' + url + ' to ' + dest) + hifi_utils.downloadAndExtract(url, dest) else: - print ("Qt has already been downloaded") - + print ('Qt has already been downloaded') diff --git a/tools/qt-builder/README.md b/tools/qt-builder/README.md index b23a691e3a..8c59b8578f 100644 --- a/tools/qt-builder/README.md +++ b/tools/qt-builder/README.md @@ -96,6 +96,8 @@ Verify again `sudo apt-get install libdbus-glib-1-dev -y` 1. nss (needed for qtwebengine) `sudo apt-get install libnss3-dev -y` +1. Add the following line to *.bash_profile* (otherwise fonts will not be displayed) +`export QT_QPA_FONTDIR=/usr/share/fonts/truetype/dejavu/` ### Mac 1. git >= 1.6 Check if needed `git --version` @@ -112,7 +114,7 @@ The build is performed in the qt5-build folder. Build products are installed to the qt5-install folder. Before running configure, make sure that the qt5-build folder is empty. -**Only run the patches once!!!** +**Only run the git patches once!!!** ### Windows Before building, verify that **HIFI_VCPKG_BASE_VERSION** points to a *vcpkg* folder containing *packages\openssl-windows_x64-windows*. If not, follow https://github.com/highfidelity/vcpkg to install *vcpkg* and then *openssl*. @@ -164,8 +166,12 @@ Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Windows/ `mkdir qt5-build` `cd qt5-build` +*Ubuntu 16.04* `../qt5/configure -opensource -confirm-license -platform linux-g++-64 -qt-zlib -qt-libjpeg -qt-libpng -qt-xcb -qt-freetype -qt-pcre -qt-harfbuzz -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -no-egl -no-icu -prefix ../qt5-install` -#### Make + +*Ubuntu 18.04* +`../qt5/configure -opensource -confirm-license -platform linux-g++-64 -qt-zlib -qt-libjpeg -qt-libpng -qt-xcb -qt-freetype -qt-pcre -qt-harfbuzz -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` +#### Make `make` `make install` #### Fixing @@ -185,8 +191,13 @@ Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Windows/ `filename.add("qt5-install", os.path.basename("qt5-install"))` `exit()` -1. Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/ -### Mac +*Ubuntu 16.04* +1. Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/16.04 + +*Ubuntu 16.04* +1. Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/18.04 + +1. ### Mac #### Preparing source files git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch From cec0cd658b1c5b2ce4cc8a65197264d99fc267b2 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Fri, 3 May 2019 20:42:49 -0700 Subject: [PATCH 059/203] Typo. --- hifi_vcpkg.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index 6d64a76f73..39e4a3a788 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -249,7 +249,7 @@ endif() elif platform.system() == 'Darwin': url = 'https://hifi-qa.s3.amazonaws.com/qt5/Mac/qt5-install.tar.gz' elif platform.system() == 'Linux': - if (platform.linux_distribution()[1] == '16.04': + if platform.linux_distribution()[1] == '16.04': self.vcpkgUrl = 'https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/16.04/qt5-install.tar.gz' elif platform.linux_distribution()[1] == '18.04': self.vcpkgUrl = "https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/18.04/qt5-install.tar.gz" From b7f8e7802d56f181fd808cff626065269c1eaf19 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Fri, 3 May 2019 21:10:19 -0700 Subject: [PATCH 060/203] Error in variable name. --- hifi_vcpkg.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index 39e4a3a788..fb7e13a0c2 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -244,22 +244,22 @@ endif() print ('Downloading Qt from AWS') dest = os.path.join(self.path, 'installed') + url = 'NOT DEFINED' if platform.system() == 'Windows': url = 'https://hifi-qa.s3.amazonaws.com/qt5/Windows/qt5-install.tar.gz' elif platform.system() == 'Darwin': url = 'https://hifi-qa.s3.amazonaws.com/qt5/Mac/qt5-install.tar.gz' elif platform.system() == 'Linux': if platform.linux_distribution()[1] == '16.04': - self.vcpkgUrl = 'https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/16.04/qt5-install.tar.gz' + url = 'https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/16.04/qt5-install.tar.gz' elif platform.linux_distribution()[1] == '18.04': - self.vcpkgUrl = "https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/18.04/qt5-install.tar.gz" + url = "https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/18.04/qt5-install.tar.gz" else: print('UNKNOWN LINUX VERSION!!!') else: print('UNKNOWN OPERATING SYSTEM!!!') print('Extracting ' + url + ' to ' + dest) - hifi_utils.downloadAndExtract(url, dest) else: print ('Qt has already been downloaded') From ec4a3fed4381c9d8429b1e700f0e2b2ca05b64e4 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Fri, 3 May 2019 21:20:18 -0700 Subject: [PATCH 061/203] Using Andrew's configure line. --- tools/qt-builder/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/qt-builder/README.md b/tools/qt-builder/README.md index 8c59b8578f..2b6ecda8ac 100644 --- a/tools/qt-builder/README.md +++ b/tools/qt-builder/README.md @@ -170,7 +170,8 @@ Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Windows/ `../qt5/configure -opensource -confirm-license -platform linux-g++-64 -qt-zlib -qt-libjpeg -qt-libpng -qt-xcb -qt-freetype -qt-pcre -qt-harfbuzz -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -no-egl -no-icu -prefix ../qt5-install` *Ubuntu 18.04* -`../qt5/configure -opensource -confirm-license -platform linux-g++-64 -qt-zlib -qt-libjpeg -qt-libpng -qt-xcb -qt-freetype -qt-pcre -qt-harfbuzz -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` +`../qt5/configure -force-debug-info -release -opensource -confirm-license -gdb-index -recheck-all -nomake tests -nomake examples -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -c++std c++14 -prefix ../qt5-install` + #### Make `make` `make install` From c9e372aa53d3c615297c9d334a64fe183395449b Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Sat, 4 May 2019 17:30:10 -0700 Subject: [PATCH 062/203] Updated for Ubuntu 16.04/18.04 --- tools/qt-builder/README.md | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/tools/qt-builder/README.md b/tools/qt-builder/README.md index 2b6ecda8ac..c8823c89c5 100644 --- a/tools/qt-builder/README.md +++ b/tools/qt-builder/README.md @@ -96,8 +96,6 @@ Verify again `sudo apt-get install libdbus-glib-1-dev -y` 1. nss (needed for qtwebengine) `sudo apt-get install libnss3-dev -y` -1. Add the following line to *.bash_profile* (otherwise fonts will not be displayed) -`export QT_QPA_FONTDIR=/usr/share/fonts/truetype/dejavu/` ### Mac 1. git >= 1.6 Check if needed `git --version` @@ -174,33 +172,39 @@ Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Windows/ #### Make `make` + +*Ubuntu 18.04 only* +`make module-qtwebengine` +`make module-qtscript` + +*Both* `make install` #### Fixing 1. The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) `cd ../qt5-install` `find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;` 1. Copy *qt.conf* to *qt5-install\bin* -#### Uploading -1. Return to the home folder +#### Uploading +*Ubuntu 16.04* +1. Return to the home folder `cd ..` 1. Open a python 3 shell `python3` 1. Run the following snippet: `import os` `import tarfile` -`filename=tarfile.open("qt5-install.tar.gz", "w:gz")` -`filename.add("qt5-install", os.path.basename("qt5-install"))` +`filename=tarfile.open("qt5-install.tar.gz", "w:gz")` +`filename.add("qt5-install", os.path.basename("qt5-install"))` `exit()` +1. Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/16.04 -*Ubuntu 16.04* -1. Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/16.04 - -*Ubuntu 16.04* +*Ubuntu 18.04* +``tar -zcvf qt5-install.tar.gz qt5-install` 1. Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/18.04 -1. ### Mac -#### Preparing source files -git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch +1. ### Mac +#### Preparing source files +git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch * Copy the **patches** folder to qt5 * Apply one patch to Qt From 50d1958c4c79c4631b9a1e2d1cf187b545b531c9 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Sat, 4 May 2019 17:30:49 -0700 Subject: [PATCH 063/203] Reverted unneeded changes. --- cmake/macros/FixupInterface.cmake | 34 +++++++++++++++++------------- cmake/macros/FixupNitpick.cmake | 35 ++++++++++++++++++------------- 2 files changed, 40 insertions(+), 29 deletions(-) diff --git a/cmake/macros/FixupInterface.cmake b/cmake/macros/FixupInterface.cmake index a2959a73e3..93b5cc25fb 100644 --- a/cmake/macros/FixupInterface.cmake +++ b/cmake/macros/FixupInterface.cmake @@ -10,22 +10,28 @@ # macro(fixup_interface) - if (APPLE) - string(REPLACE " " "\\ " ESCAPED_BUNDLE_NAME ${INTERFACE_BUNDLE_NAME}) - string(REPLACE " " "\\ " ESCAPED_INSTALL_PATH ${INTERFACE_INSTALL_DIR}) - set(_INTERFACE_INSTALL_PATH "${ESCAPED_INSTALL_PATH}/${ESCAPED_BUNDLE_NAME}.app") + if (APPLE) - find_program(MACDEPLOYQT_COMMAND macdeployqt PATHS "${QT_DIR}/bin" NO_DEFAULT_PATH) + string(REPLACE " " "\\ " ESCAPED_BUNDLE_NAME ${INTERFACE_BUNDLE_NAME}) + string(REPLACE " " "\\ " ESCAPED_INSTALL_PATH ${INTERFACE_INSTALL_DIR}) + set(_INTERFACE_INSTALL_PATH "${ESCAPED_INSTALL_PATH}/${ESCAPED_BUNDLE_NAME}.app") - if (NOT MACDEPLOYQT_COMMAND) - message(FATAL_ERROR "Could not find macdeployqt at ${QT_DIR}/bin.\ - It is required to produce a relocatable interface application.\ - Check that the variable QT_DIR points to your Qt installation.\ - ") - endif () + find_program(MACDEPLOYQT_COMMAND macdeployqt PATHS "${QT_DIR}/bin" NO_DEFAULT_PATH) - add_custom_command(TARGET ${TARGET_NAME} POST_BUILD - COMMAND ${MACDEPLOYQT_COMMAND} "$/../.." -verbose=2 -qmldir=${CMAKE_SOURCE_DIR}/interface/resources/qml/ - ) + if (NOT MACDEPLOYQT_COMMAND AND (PRODUCTION_BUILD OR PR_BUILD)) + message(FATAL_ERROR "Could not find macdeployqt at ${QT_DIR}/bin.\ + It is required to produce an relocatable interface application.\ + Check that the environment variable QT_DIR points to your Qt installation.\ + ") endif () + + install(CODE " + execute_process(COMMAND ${MACDEPLOYQT_COMMAND}\ + \${CMAKE_INSTALL_PREFIX}/${_INTERFACE_INSTALL_PATH}/\ + -verbose=2 -qmldir=${CMAKE_SOURCE_DIR}/interface/resources/qml/\ + )" + COMPONENT ${CLIENT_COMPONENT} + ) + + endif () endmacro() diff --git a/cmake/macros/FixupNitpick.cmake b/cmake/macros/FixupNitpick.cmake index 231e1bfec9..8477b17823 100644 --- a/cmake/macros/FixupNitpick.cmake +++ b/cmake/macros/FixupNitpick.cmake @@ -10,22 +10,27 @@ # macro(fixup_nitpick) - if (APPLE) - string(REPLACE " " "\\ " ESCAPED_BUNDLE_NAME ${NITPICK_BUNDLE_NAME}) - string(REPLACE " " "\\ " ESCAPED_INSTALL_PATH ${NITPICK_INSTALL_DIR}) - set(_NITPICK_INSTALL_PATH "${ESCAPED_INSTALL_PATH}/${ESCAPED_BUNDLE_NAME}.app") + if (APPLE) + string(REPLACE " " "\\ " ESCAPED_BUNDLE_NAME ${NITPICK_BUNDLE_NAME}) + string(REPLACE " " "\\ " ESCAPED_INSTALL_PATH ${NITPICK_INSTALL_DIR}) + set(_NITPICK_INSTALL_PATH "${ESCAPED_INSTALL_PATH}/${ESCAPED_BUNDLE_NAME}.app") - find_program(MACDEPLOYQT_COMMAND macdeployqt PATHS "${QT_DIR}/bin" NO_DEFAULT_PATH) + find_program(MACDEPLOYQT_COMMAND macdeployqt PATHS "${QT_DIR}/bin" NO_DEFAULT_PATH) - if (NOT MACDEPLOYQT_COMMAND) - message(FATAL_ERROR "Could not find macdeployqt at ${QT_DIR}/bin.\ - It is required to produce a relocatable nitpick application.\ - Check that the variable QT_DIR points to your Qt installation.\ - ") - endif () - - add_custom_command(TARGET ${TARGET_NAME} POST_BUILD - COMMAND ${MACDEPLOYQT_COMMAND} "$/../.." -verbose=2 -qmldir=${CMAKE_SOURCE_DIR}/interface/resources/qml/ - ) + if (NOT MACDEPLOYQT_COMMAND AND (PRODUCTION_BUILD OR PR_BUILD)) + message(FATAL_ERROR "Could not find macdeployqt at ${QT_DIR}/bin.\ + It is required to produce a relocatable nitpick application.\ + Check that the environment variable QT_DIR points to your Qt installation.\ + ") endif () + + install(CODE " + execute_process(COMMAND ${MACDEPLOYQT_COMMAND}\ + \${CMAKE_INSTALL_PREFIX}/${_NITPICK_INSTALL_PATH}/\ + -verbose=2 -qmldir=${CMAKE_SOURCE_DIR}/interface/resources/qml/\ + )" + COMPONENT ${CLIENT_COMPONENT} + ) + + endif () endmacro() From 844fbec36fe830be36e96d8d64f3fa1a289c151f Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Sat, 4 May 2019 18:09:54 -0700 Subject: [PATCH 064/203] So that both Jenkins and local Mac are happy. --- cmake/macros/FixupInterface.cmake | 44 ++++++++++++++++-------------- cmake/macros/FixupNitpick.cmake | 45 +++++++++++++++++-------------- tools/nitpick/src/Nitpick.cpp | 11 ++++---- tools/nitpick/src/Nitpick.h | 5 ++-- 4 files changed, 58 insertions(+), 47 deletions(-) diff --git a/cmake/macros/FixupInterface.cmake b/cmake/macros/FixupInterface.cmake index 93b5cc25fb..e1ade61c7a 100644 --- a/cmake/macros/FixupInterface.cmake +++ b/cmake/macros/FixupInterface.cmake @@ -10,28 +10,32 @@ # macro(fixup_interface) - if (APPLE) + if (APPLE) + string(REPLACE " " "\\ " ESCAPED_BUNDLE_NAME ${INTERFACE_BUNDLE_NAME}) + string(REPLACE " " "\\ " ESCAPED_INSTALL_PATH ${INTERFACE_INSTALL_DIR}) + set(_INTERFACE_INSTALL_PATH "${ESCAPED_INSTALL_PATH}/${ESCAPED_BUNDLE_NAME}.app") - string(REPLACE " " "\\ " ESCAPED_BUNDLE_NAME ${INTERFACE_BUNDLE_NAME}) - string(REPLACE " " "\\ " ESCAPED_INSTALL_PATH ${INTERFACE_INSTALL_DIR}) - set(_INTERFACE_INSTALL_PATH "${ESCAPED_INSTALL_PATH}/${ESCAPED_BUNDLE_NAME}.app") + find_program(MACDEPLOYQT_COMMAND macdeployqt PATHS "${QT_DIR}/bin" NO_DEFAULT_PATH) - find_program(MACDEPLOYQT_COMMAND macdeployqt PATHS "${QT_DIR}/bin" NO_DEFAULT_PATH) + if (NOT MACDEPLOYQT_COMMAND AND (PRODUCTION_BUILD OR PR_BUILD)) + message(FATAL_ERROR "Could not find macdeployqt at ${QT_DIR}/bin.\ + It is required to produce an relocatable interface application.\ + Check that the variable QT_DIR points to your Qt installation.\ + ") + endif () - if (NOT MACDEPLOYQT_COMMAND AND (PRODUCTION_BUILD OR PR_BUILD)) - message(FATAL_ERROR "Could not find macdeployqt at ${QT_DIR}/bin.\ - It is required to produce an relocatable interface application.\ - Check that the environment variable QT_DIR points to your Qt installation.\ - ") + if (DEV_BUILD) + install(CODE " + execute_process(COMMAND ${MACDEPLOYQT_COMMAND}\ + \${CMAKE_INSTALL_PREFIX}/${_INTERFACE_INSTALL_PATH}/\ + -verbose=2 -qmldir=${CMAKE_SOURCE_DIR}/interface/resources/qml/\ + )" + COMPONENT ${CLIENT_COMPONENT} + ) + else () + add_custom_command(TARGET ${TARGET_NAME} POST_BUILD + COMMAND ${MACDEPLOYQT_COMMAND} "$/../.." -verbose=2 -qmldir=${CMAKE_SOURCE_DIR}/interface/resources/qml/ + ) + endif() endif () - - install(CODE " - execute_process(COMMAND ${MACDEPLOYQT_COMMAND}\ - \${CMAKE_INSTALL_PREFIX}/${_INTERFACE_INSTALL_PATH}/\ - -verbose=2 -qmldir=${CMAKE_SOURCE_DIR}/interface/resources/qml/\ - )" - COMPONENT ${CLIENT_COMPONENT} - ) - - endif () endmacro() diff --git a/cmake/macros/FixupNitpick.cmake b/cmake/macros/FixupNitpick.cmake index 8477b17823..0930019197 100644 --- a/cmake/macros/FixupNitpick.cmake +++ b/cmake/macros/FixupNitpick.cmake @@ -10,27 +10,32 @@ # macro(fixup_nitpick) - if (APPLE) - string(REPLACE " " "\\ " ESCAPED_BUNDLE_NAME ${NITPICK_BUNDLE_NAME}) - string(REPLACE " " "\\ " ESCAPED_INSTALL_PATH ${NITPICK_INSTALL_DIR}) - set(_NITPICK_INSTALL_PATH "${ESCAPED_INSTALL_PATH}/${ESCAPED_BUNDLE_NAME}.app") + if (APPLE) + string(REPLACE " " "\\ " ESCAPED_BUNDLE_NAME ${NITPICK_BUNDLE_NAME}) + string(REPLACE " " "\\ " ESCAPED_INSTALL_PATH ${NITPICK_INSTALL_DIR}) + set(_NITPICK_INSTALL_PATH "${ESCAPED_INSTALL_PATH}/${ESCAPED_BUNDLE_NAME}.app") - find_program(MACDEPLOYQT_COMMAND macdeployqt PATHS "${QT_DIR}/bin" NO_DEFAULT_PATH) + find_program(MACDEPLOYQT_COMMAND macdeployqt PATHS "${QT_DIR}/bin" NO_DEFAULT_PATH) - if (NOT MACDEPLOYQT_COMMAND AND (PRODUCTION_BUILD OR PR_BUILD)) - message(FATAL_ERROR "Could not find macdeployqt at ${QT_DIR}/bin.\ - It is required to produce a relocatable nitpick application.\ - Check that the environment variable QT_DIR points to your Qt installation.\ - ") + if (NOT MACDEPLOYQT_COMMAND AND (PRODUCTION_BUILD OR PR_BUILD)) + message(FATAL_ERROR "Could not find macdeployqt at ${QT_DIR}/bin.\ + It is required to produce a relocatable nitpick application.\ + Check that the variable QT_DIR points to your Qt installation.\ + ") + endif () + + if (DEV_BUILD) + install(CODE " + execute_process(COMMAND ${MACDEPLOYQT_COMMAND}\ + \${CMAKE_INSTALL_PREFIX}/${_NITPICK_INSTALL_PATH}/\ + -verbose=2 -qmldir=${CMAKE_SOURCE_DIR}/interface/resources/qml/\ + )" + COMPONENT ${CLIENT_COMPONENT} + ) + else () + add_custom_command(TARGET ${TARGET_NAME} POST_BUILD + COMMAND ${MACDEPLOYQT_COMMAND} "$/../.." -verbose=2 -qmldir=${CMAKE_SOURCE_DIR}/interface/resources/qml/ + ) + endif() endif () - - install(CODE " - execute_process(COMMAND ${MACDEPLOYQT_COMMAND}\ - \${CMAKE_INSTALL_PREFIX}/${_NITPICK_INSTALL_PATH}/\ - -verbose=2 -qmldir=${CMAKE_SOURCE_DIR}/interface/resources/qml/\ - )" - COMPONENT ${CLIENT_COMPONENT} - ) - - endif () endmacro() diff --git a/tools/nitpick/src/Nitpick.cpp b/tools/nitpick/src/Nitpick.cpp index 16cad8726c..3bed7cde65 100644 --- a/tools/nitpick/src/Nitpick.cpp +++ b/tools/nitpick/src/Nitpick.cpp @@ -192,14 +192,19 @@ void Nitpick::on_createTestsOutlinePushbutton_clicked() { _testCreator->createTestsOutline(); } +// TestRail interface void Nitpick::on_createTestRailTestCasesPushbutton_clicked() { _testCreator->createTestRailTestCases(); } -void Nitpick::on_createTestRailRunButton_clicked() { +void Nitpick::on_createTestRailRunPushButton_clicked() { _testCreator->createTestRailRun(); } +void Nitpick::on_updateTestRailRunResultsPushbutton_clicked() { + _testCreator->updateTestRailRunResult(); +} + void Nitpick::on_setWorkingFolderRunOnDesktopPushbutton_clicked() { _testRunnerDesktop->setWorkingFolderAndEnableControls(); } @@ -231,10 +236,6 @@ void Nitpick::automaticTestRunEvaluationComplete(QString zippedFolderName, int n _testRunnerDesktop->automaticTestRunEvaluationComplete(zippedFolderName, numberOfFailures); } -void Nitpick::on_updateTestRailRunResultsPushbutton_clicked() { - _testCreator->updateTestRailRunResult(); -} - // To toggle between show and hide // if (uState & ABS_AUTOHIDE) on_showTaskbarButton_clicked(); // else on_hideTaskbarButton_clicked(); diff --git a/tools/nitpick/src/Nitpick.h b/tools/nitpick/src/Nitpick.h index 9aa0ea00ba..d1f077a344 100644 --- a/tools/nitpick/src/Nitpick.h +++ b/tools/nitpick/src/Nitpick.h @@ -65,8 +65,10 @@ private slots: void on_createTestsOutlinePushbutton_clicked(); + // TestRail interface void on_createTestRailTestCasesPushbutton_clicked(); - void on_createTestRailRunButton_clicked(); + void on_createTestRailRunPushButton_clicked(); + void on_updateTestRailRunResultsPushbutton_clicked(); void on_setWorkingFolderRunOnDesktopPushbutton_clicked(); void on_runNowPushbutton_clicked(); @@ -75,7 +77,6 @@ private slots: void on_runLatestOnDesktopCheckBox_clicked(); void on_runFullSuiteOnDesktopCheckBox_clicked(); - void on_updateTestRailRunResultsPushbutton_clicked(); void on_hideTaskbarPushbutton_clicked(); void on_showTaskbarPushbutton_clicked(); From 6ff6c0c410e1a99cc4341417585fac854e02535e Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Sat, 4 May 2019 18:45:27 -0700 Subject: [PATCH 065/203] Reverted erroneous commit. --- tools/nitpick/src/Nitpick.cpp | 11 +++++------ tools/nitpick/src/Nitpick.h | 5 ++--- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/tools/nitpick/src/Nitpick.cpp b/tools/nitpick/src/Nitpick.cpp index 3bed7cde65..16cad8726c 100644 --- a/tools/nitpick/src/Nitpick.cpp +++ b/tools/nitpick/src/Nitpick.cpp @@ -192,19 +192,14 @@ void Nitpick::on_createTestsOutlinePushbutton_clicked() { _testCreator->createTestsOutline(); } -// TestRail interface void Nitpick::on_createTestRailTestCasesPushbutton_clicked() { _testCreator->createTestRailTestCases(); } -void Nitpick::on_createTestRailRunPushButton_clicked() { +void Nitpick::on_createTestRailRunButton_clicked() { _testCreator->createTestRailRun(); } -void Nitpick::on_updateTestRailRunResultsPushbutton_clicked() { - _testCreator->updateTestRailRunResult(); -} - void Nitpick::on_setWorkingFolderRunOnDesktopPushbutton_clicked() { _testRunnerDesktop->setWorkingFolderAndEnableControls(); } @@ -236,6 +231,10 @@ void Nitpick::automaticTestRunEvaluationComplete(QString zippedFolderName, int n _testRunnerDesktop->automaticTestRunEvaluationComplete(zippedFolderName, numberOfFailures); } +void Nitpick::on_updateTestRailRunResultsPushbutton_clicked() { + _testCreator->updateTestRailRunResult(); +} + // To toggle between show and hide // if (uState & ABS_AUTOHIDE) on_showTaskbarButton_clicked(); // else on_hideTaskbarButton_clicked(); diff --git a/tools/nitpick/src/Nitpick.h b/tools/nitpick/src/Nitpick.h index d1f077a344..9aa0ea00ba 100644 --- a/tools/nitpick/src/Nitpick.h +++ b/tools/nitpick/src/Nitpick.h @@ -65,10 +65,8 @@ private slots: void on_createTestsOutlinePushbutton_clicked(); - // TestRail interface void on_createTestRailTestCasesPushbutton_clicked(); - void on_createTestRailRunPushButton_clicked(); - void on_updateTestRailRunResultsPushbutton_clicked(); + void on_createTestRailRunButton_clicked(); void on_setWorkingFolderRunOnDesktopPushbutton_clicked(); void on_runNowPushbutton_clicked(); @@ -77,6 +75,7 @@ private slots: void on_runLatestOnDesktopCheckBox_clicked(); void on_runFullSuiteOnDesktopCheckBox_clicked(); + void on_updateTestRailRunResultsPushbutton_clicked(); void on_hideTaskbarPushbutton_clicked(); void on_showTaskbarPushbutton_clicked(); From c0201ac2ba702cec996ee2ed2ede191f208b4caa Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Sat, 4 May 2019 18:45:51 -0700 Subject: [PATCH 066/203] Corrected cmake macros. --- cmake/macros/FixupInterface.cmake | 2 +- cmake/macros/FixupNitpick.cmake | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/macros/FixupInterface.cmake b/cmake/macros/FixupInterface.cmake index e1ade61c7a..0bfc1cb39c 100644 --- a/cmake/macros/FixupInterface.cmake +++ b/cmake/macros/FixupInterface.cmake @@ -24,7 +24,7 @@ macro(fixup_interface) ") endif () - if (DEV_BUILD) + if (RELEASE_TYPE STREQUAL "DEV") install(CODE " execute_process(COMMAND ${MACDEPLOYQT_COMMAND}\ \${CMAKE_INSTALL_PREFIX}/${_INTERFACE_INSTALL_PATH}/\ diff --git a/cmake/macros/FixupNitpick.cmake b/cmake/macros/FixupNitpick.cmake index 0930019197..db96fec724 100644 --- a/cmake/macros/FixupNitpick.cmake +++ b/cmake/macros/FixupNitpick.cmake @@ -24,7 +24,7 @@ macro(fixup_nitpick) ") endif () - if (DEV_BUILD) + if (RELEASE_TYPE STREQUAL "DEV") install(CODE " execute_process(COMMAND ${MACDEPLOYQT_COMMAND}\ \${CMAKE_INSTALL_PREFIX}/${_NITPICK_INSTALL_PATH}/\ From f1593cad709ff58c5797e9bc687fe789de454195 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Sun, 5 May 2019 17:16:38 -0700 Subject: [PATCH 067/203] Updated readmes. --- BUILD_LINUX.md | 13 ++++--------- tools/qt-builder/README.md | 13 ++++++++----- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/BUILD_LINUX.md b/BUILD_LINUX.md index e8599ffce4..0bfb99c4cf 100644 --- a/BUILD_LINUX.md +++ b/BUILD_LINUX.md @@ -11,7 +11,7 @@ Should you choose not to install Qt5 via a package manager that handles dependen ### Ubuntu 16.04 only Add the following line to *.bash_profile* `export QT_QPA_FONTDIR=/usr/share/fonts/truetype/dejavu/` -### Ubuntu 18.04 only +### Ubuntu 18.04 server only Add the universe repository: _(This is not enabled by default on the server edition)_ `sudo add-apt-repository universe` @@ -36,20 +36,15 @@ Verify by git --version 1. g++ `sudo apt-get install g++ -y` Verify by g++ --version -1. cmake +1. *Ubuntu 18.04* cmake `sudo apt-get install cmake -y` Verify by git --version -1. cmake +1. *Ubuntu 16.04* cmake `wget https://cmake.org/files/v3.14/cmake-3.14.2-Linux-x86_64.sh` `sudo sh cmake-3.14.2-Linux-x86_64.sh --prefix=/usr/local --exclude-subdir` -##### Python -Add to _bash_profile: -` ### Get code and checkout the tag you need Clone this repository: -```bash -git clone https://github.com/highfidelity/hifi.git -``` +`git clone https://github.com/highfidelity/hifi.git` To compile a RELEASE version checkout the tag you need getting a list of all tags: `git fetch -a` diff --git a/tools/qt-builder/README.md b/tools/qt-builder/README.md index c8823c89c5..4cd49ce865 100644 --- a/tools/qt-builder/README.md +++ b/tools/qt-builder/README.md @@ -135,7 +135,7 @@ If not, follow https://github.com/highfidelity/vcpkg to install *vcpkg* and then run `..\qt5\qt5vars.bat` `cd ..\..\qt5-build` -`..\qt5\configure -opensource -confirm-license -opengl desktop -platform win32-msvc -openssl-linked OPENSSL_LIBS="-lssleay32 -llibeay32" -I %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\include -L %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\lib -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ..\qt5-install` +`..\qt5\configure -force-debug-info -opensource -confirm-license -opengl desktop -platform win32-msvc -openssl-linked OPENSSL_LIBS="-lssleay32 -llibeay32" -I %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\include -L %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\lib -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ..\qt5-install` #### Make `nmake` `nmake install` @@ -170,12 +170,14 @@ Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Windows/ *Ubuntu 18.04* `../qt5/configure -force-debug-info -release -opensource -confirm-license -gdb-index -recheck-all -nomake tests -nomake examples -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -c++std c++14 -prefix ../qt5-install` + +???`../qt5/configure -opensource -confirm-license -gdb-index -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` #### Make `make` -*Ubuntu 18.04 only* -`make module-qtwebengine` -`make module-qtscript` +????*Ubuntu 18.04 only* +????`make module-qtwebengine` +????`make module-qtscript` *Both* `make install` @@ -216,7 +218,7 @@ git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch `mkdir qt5-build` `cd ../qt5-build` -`../qt5/configure -opensource -confirm-license -qt-zlib -qt-libjpeg -qt-libpng -qt-freetype -qt-pcre -qt-harfbuzz -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` +`../qt5/configure -force-debug-info -opensource -confirm-license -qt-zlib -qt-libjpeg -qt-libpng -qt-freetype -qt-pcre -qt-harfbuzz -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install` #### Make `make` `make install` @@ -224,6 +226,7 @@ git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch 1. The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) `cd ../qt5-install` `find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;` +`cd ..` 1. Copy *qt.conf* to *qt5-install\bin* #### Uploading `tar -zcvf qt5-install.tar.gz qt5-install` From 6445d6d03194c0dbcc284a5828c3668510fc8df7 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Sun, 5 May 2019 17:42:06 -0700 Subject: [PATCH 068/203] For testing. --- hifi_vcpkg.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index fb7e13a0c2..b32279cbe7 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -240,7 +240,7 @@ endif() def installQt(self): - if not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): + if True or not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): print ('Downloading Qt from AWS') dest = os.path.join(self.path, 'installed') From 71f1d870388f017a5eeda00c6f95a0bc12204f16 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Sun, 5 May 2019 22:51:57 -0700 Subject: [PATCH 069/203] Removed test code. --- hifi_vcpkg.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index b32279cbe7..fb7e13a0c2 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -240,7 +240,7 @@ endif() def installQt(self): - if True or not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): + if not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): print ('Downloading Qt from AWS') dest = os.path.join(self.path, 'installed') From 2d21b5c2699b93ea6355ea5f6bc8fbf4e59d2041 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Mon, 13 May 2019 14:26:16 -0700 Subject: [PATCH 070/203] use qt.conf file to find Qt resources --- interface/CMakeLists.txt | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index bb8ebbd2a0..7bf6bc1a86 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -333,11 +333,11 @@ if (APPLE) COMMAND "${CMAKE_COMMAND}" -E copy_directory "${PROJECT_SOURCE_DIR}/resources/fonts" "${RESOURCES_DEV_DIR}/fonts" - #copy serverless for android - COMMAND "${CMAKE_COMMAND}" -E copy_directory - "${PROJECT_SOURCE_DIR}/resources/serverless" - "${RESOURCES_DEV_DIR}/serverless" - # add redirect json to macOS builds. + #copy serverless for android + COMMAND "${CMAKE_COMMAND}" -E copy_directory + "${PROJECT_SOURCE_DIR}/resources/serverless" + "${RESOURCES_DEV_DIR}/serverless" + # add redirect json to macOS builds. COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${PROJECT_SOURCE_DIR}/resources/serverless/redirect.json" "${RESOURCES_DEV_DIR}/serverless/redirect.json" @@ -400,6 +400,29 @@ else() endif() endif() +if (APPLE OR UNIX) + # need to worry about hard-coded search paths in the Qt libraries + set(QT_LIB_PATH "${VCPKG_INSTALL_ROOT}/../qt5-install") + if (APPLE) + set(QT_CONF_OVERRIDE "${RESOURCES_DEV_DIR}/../qt.conf") + else () + set(QT_CONF_OVERRIDE "${INTERFACE_EXEC_DIR}/qt.conf") + endif () + if (DEFINED ENV{QT_CMAKE_PREFIX_PATH}) + # using VCPKG-installed Qt rather than a custom install + # TODO: erase old qt.conf file if it exists + # HINT: the file(REMOVE) operation below does not succeed + #file(REMOVE ${QT_CONF_OVERRIDE}) + else () + # using VCPKG-installed Qt rather than a custom install + # need to create qt.conf file to override hard coded + file(GENERATE + OUTPUT "${QT_CONF_OVERRIDE}" + CONTENT "[Paths]\nPrefix=${QT_LIB_PATH}\n" + ) + endif() +endif() + if (SCRIPTS_INSTALL_DIR) # setup install of scripts beside interface executable install( From 5a27f15821bc4e1668d76deba7ecf91f9e2a814f Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Wed, 15 May 2019 09:33:43 -0700 Subject: [PATCH 071/203] new qt5 assets in a more correct aws bucket --- hifi_vcpkg.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index fb7e13a0c2..576b200ea4 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -245,21 +245,31 @@ endif() dest = os.path.join(self.path, 'installed') url = 'NOT DEFINED' + sha512sum = None if platform.system() == 'Windows': - url = 'https://hifi-qa.s3.amazonaws.com/qt5/Windows/qt5-install.tar.gz' + # TODO: figure out how to download with versionId + #url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-windows.tar.gz?versionId=Etx8novAe0.IxQ7AosLFtop7fZur.cx9' + url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-windows.tar.gz' + sha512sum = 'c0d1416d28ff8f4570651cf7d18857709f573567d34ac66f62a368983b8643dde20806b8c1de19886cd60b5586d98aa49f109b15a842def82ab3c4f76419d99e' elif platform.system() == 'Darwin': - url = 'https://hifi-qa.s3.amazonaws.com/qt5/Mac/qt5-install.tar.gz' + #url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-macos.tar.gz?versionId=QrGxwssB.WwU_z3QCyG7ghP1_VjTkQeK' + url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-macos.tar.gz' + sha512sum = '025a1aa258f6ca41c9544e1ab871b7af5fde891fc2be2cbfca3ba6c89f40c7cf5794997f5e78e83dc20fa0aaeab7223f2c82923df1ce698bdc87fe4f2aebf23f' elif platform.system() == 'Linux': if platform.linux_distribution()[1] == '16.04': - url = 'https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/16.04/qt5-install.tar.gz' + #url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-ubuntu-16.04.tar.gz?versionId=c9j7PW4uBDPLif7DKmgIhorh9WBMjZRB' + url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-ubuntu-16.04.tar.gz' + sha512sum = '290fdf0ac1bbc54791650bcff971dc69502bbacbcc88f69a9f439d23a5ca5c114a2d7d8bd354c29abfd48e20d0757aaf1eac3d12bac8b207d9ab6ad24b5f30b8' elif platform.linux_distribution()[1] == '18.04': - url = "https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/18.04/qt5-install.tar.gz" + #url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-ubuntu-18.04.tar.gz?versionId=Z3TojPFdb5pXdahF3oi85jjKocpL0xqw' + url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-ubuntu-18.04.tar.gz' + sha512sum = '74bcce1879251ec5e78b82d9b99a73a5b94698a4937ba91d6abf0047daee08d21cab364be6cbda8bb97e1f4cfa35c931bd42265032bff468d0ecbc0b8f5fab77' else: print('UNKNOWN LINUX VERSION!!!') else: print('UNKNOWN OPERATING SYSTEM!!!') print('Extracting ' + url + ' to ' + dest) - hifi_utils.downloadAndExtract(url, dest) + hifi_utils.downloadAndExtract(url, dest, sha512sum) else: print ('Qt has already been downloaded') From 9884d390b898650ebedc46583e0c164eef839b89 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Wed, 15 May 2019 09:34:08 -0700 Subject: [PATCH 072/203] fix qt.conf location for MacOS --- interface/CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index 7bf6bc1a86..133ef05136 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -404,20 +404,20 @@ if (APPLE OR UNIX) # need to worry about hard-coded search paths in the Qt libraries set(QT_LIB_PATH "${VCPKG_INSTALL_ROOT}/../qt5-install") if (APPLE) - set(QT_CONF_OVERRIDE "${RESOURCES_DEV_DIR}/../qt.conf") + set(QT_CONF_FILE "${RESOURCES_DEV_DIR}/../Resources/qt.conf") else () - set(QT_CONF_OVERRIDE "${INTERFACE_EXEC_DIR}/qt.conf") + set(QT_CONF_FILE "${INTERFACE_EXEC_DIR}/qt.conf") endif () if (DEFINED ENV{QT_CMAKE_PREFIX_PATH}) # using VCPKG-installed Qt rather than a custom install # TODO: erase old qt.conf file if it exists # HINT: the file(REMOVE) operation below does not succeed - #file(REMOVE ${QT_CONF_OVERRIDE}) + #file(REMOVE ${QT_CONF_FILE}) else () # using VCPKG-installed Qt rather than a custom install # need to create qt.conf file to override hard coded file(GENERATE - OUTPUT "${QT_CONF_OVERRIDE}" + OUTPUT "${QT_CONF_FILE}" CONTENT "[Paths]\nPrefix=${QT_LIB_PATH}\n" ) endif() From 0be4feff2c16f5efc2c972d96588b8ac50ed6e47 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Wed, 15 May 2019 14:38:42 -0700 Subject: [PATCH 073/203] remove sha512sum checks for now --- hifi_vcpkg.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index 576b200ea4..faa1842395 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -245,31 +245,26 @@ endif() dest = os.path.join(self.path, 'installed') url = 'NOT DEFINED' - sha512sum = None if platform.system() == 'Windows': # TODO: figure out how to download with versionId #url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-windows.tar.gz?versionId=Etx8novAe0.IxQ7AosLFtop7fZur.cx9' url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-windows.tar.gz' - sha512sum = 'c0d1416d28ff8f4570651cf7d18857709f573567d34ac66f62a368983b8643dde20806b8c1de19886cd60b5586d98aa49f109b15a842def82ab3c4f76419d99e' elif platform.system() == 'Darwin': #url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-macos.tar.gz?versionId=QrGxwssB.WwU_z3QCyG7ghP1_VjTkQeK' url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-macos.tar.gz' - sha512sum = '025a1aa258f6ca41c9544e1ab871b7af5fde891fc2be2cbfca3ba6c89f40c7cf5794997f5e78e83dc20fa0aaeab7223f2c82923df1ce698bdc87fe4f2aebf23f' elif platform.system() == 'Linux': if platform.linux_distribution()[1] == '16.04': #url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-ubuntu-16.04.tar.gz?versionId=c9j7PW4uBDPLif7DKmgIhorh9WBMjZRB' url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-ubuntu-16.04.tar.gz' - sha512sum = '290fdf0ac1bbc54791650bcff971dc69502bbacbcc88f69a9f439d23a5ca5c114a2d7d8bd354c29abfd48e20d0757aaf1eac3d12bac8b207d9ab6ad24b5f30b8' elif platform.linux_distribution()[1] == '18.04': #url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-ubuntu-18.04.tar.gz?versionId=Z3TojPFdb5pXdahF3oi85jjKocpL0xqw' url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-ubuntu-18.04.tar.gz' - sha512sum = '74bcce1879251ec5e78b82d9b99a73a5b94698a4937ba91d6abf0047daee08d21cab364be6cbda8bb97e1f4cfa35c931bd42265032bff468d0ecbc0b8f5fab77' else: print('UNKNOWN LINUX VERSION!!!') else: print('UNKNOWN OPERATING SYSTEM!!!') print('Extracting ' + url + ' to ' + dest) - hifi_utils.downloadAndExtract(url, dest, sha512sum) + hifi_utils.downloadAndExtract(url, dest) else: print ('Qt has already been downloaded') From abc5a0e7e8f8bbc2ef9a01a9bf624027dc6691aa Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Wed, 15 May 2019 14:59:58 -0700 Subject: [PATCH 074/203] remove symbols for Release build --- CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6eedd380cd..49ac30b5db 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,6 +42,9 @@ project(hifi) include("cmake/init.cmake") include("cmake/compiler.cmake") +set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s") +set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s") + add_paths_to_fixup_libs(${VCPKG_INSTALL_ROOT}/bin) add_paths_to_fixup_libs(${VCPKG_INSTALL_ROOT}/debug/bin) From a4d43bbff904667d24c8fcbb8d6adacff50c8884 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Wed, 15 May 2019 15:54:58 -0700 Subject: [PATCH 075/203] more correct stripping of symbols APPLE and UNIX --- CMakeLists.txt | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 49ac30b5db..22a62c19cd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,9 +42,6 @@ project(hifi) include("cmake/init.cmake") include("cmake/compiler.cmake") -set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s") -set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s") - add_paths_to_fixup_libs(${VCPKG_INSTALL_ROOT}/bin) add_paths_to_fixup_libs(${VCPKG_INSTALL_ROOT}/debug/bin) @@ -199,6 +196,15 @@ unset(JS_SRC) set_packaging_parameters() +if (PRODUCTION_BUILD) + if (APPLE) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-s") + elseif(UNIX) + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s") + endif() +endif() + # Locate the required Qt build on the filesystem setup_qt() list(APPEND CMAKE_PREFIX_PATH "${QT_CMAKE_PREFIX_PATH}") From 595edb9f6ecfaa61660b636e09ed7e30eaf0eab6 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Thu, 16 May 2019 12:29:37 -0700 Subject: [PATCH 076/203] more correct QT_VERSION detection --- CMakeLists.txt | 6 ++-- cmake/macros/SetupQt.cmake | 58 ++++++++++++++++++++++++++++++++------ hifi_vcpkg.py | 23 +++++++-------- 3 files changed, 66 insertions(+), 21 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 22a62c19cd..eb4c82b599 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,8 +36,8 @@ endif() if(NOT EXISTS "${CMAKE_BINARY_DIR}/vcpkg.cmake") message(FATAL_ERROR "vcpkg configuration missing.") endif() - include("${CMAKE_BINARY_DIR}/vcpkg.cmake") + project(hifi) include("cmake/init.cmake") include("cmake/compiler.cmake") @@ -196,7 +196,9 @@ unset(JS_SRC) set_packaging_parameters() -if (PRODUCTION_BUILD) +if (NOT DEV_BUILD) + # add options to strip symbols for PRODUCTION and PR builds + # TODO?: call set_packaging_parameters() earlier and move this symbol stripping into compiler.cmake if (APPLE) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-s") elseif(UNIX) diff --git a/cmake/macros/SetupQt.cmake b/cmake/macros/SetupQt.cmake index 2580697d7a..18b4f5aecc 100644 --- a/cmake/macros/SetupQt.cmake +++ b/cmake/macros/SetupQt.cmake @@ -5,34 +5,76 @@ # See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html # +function(get_sub_directories result curdir) + file(GLOB children RELATIVE ${curdir} ${curdir}/*) + set(dirlist "") + foreach(child ${children}) + if(IS_DIRECTORY ${curdir}/${child}) + LIST(APPEND dirlist ${child}) + endif() + endforeach() + set(${result} ${dirlist} PARENT_SCOPE) +endfunction() + +function(calculate_qt5_version result _QT_DIR) + # All Qt5 packages have little "private" include directories named with the actual Qt version such as: + # .../include/QtCore/5.12.3/QtCore/private + # Sometimes we need to include these private headers for debug hackery. + # Hence we find one of these directories and pick apart its path to determine the actual QT_VERSION. + set(_QT_CORE_DIR "${_QT_DIR}/include/QtCore") + if(NOT EXISTS "${_QT_CORE_DIR}") + message(FATAL_ERROR "Could not find 'include/QtCore' in '${_QT_DIR}'") + endif() + set(subdirs "") + get_sub_directories(subdirs ${_QT_CORE_DIR}) + + foreach(subdir ${subdirs}) + string(REGEX MATCH "5.[0-9]+.[0-9]+$" _QT_VERSION ${subdir}) + if (NOT "${_QT_VERSION}" STREQUAL "") + # found it! + set(${result} "${_QT_VERSION}" PARENT_SCOPE) + break() + endif() + endforeach() +endfunction() + # Sets the QT_CMAKE_PREFIX_PATH and QT_DIR variables # Also enables CMAKE_AUTOMOC and CMAKE_AUTORCC macro(setup_qt) # if we are in a development build and QT_CMAKE_PREFIX_PATH is specified # then use it, # otherwise, use the vcpkg'ed version - if (RELEASE_TYPE STREQUAL "DEV" AND DEFINED ENV{QT_CMAKE_PREFIX_PATH}) - message("Development build and QT_CMAKE_PREFIX_PATH is defined in environment - using this path for Qt") - set(QT_CMAKE_PREFIX_PATH $ENV{QT_CMAKE_PREFIX_PATH}) + if(NOT DEFINED VCPKG_QT_CMAKE_PREFIX_PATH) + message(FATAL_ERROR "VCPKG_QT_CMAKE_PREFIX_PATH should have been set by hifi_vcpkg.py") + endif() + if (NOT DEFINED ENV{QT_CMAKE_PREFIX_PATH} OR NOT DEV_BUILD) + # HACK we ignore QT_CMAKE_PREFIX_PATH for PRODUCTION and PR builds + # so we can punt updating the automated build OS images while switching to vcpkg for Qt + set(QT_CMAKE_PREFIX_PATH ${VCPKG_QT_CMAKE_PREFIX_PATH}) else() - message(" Using vcpkg'ed version of Qt") + set(QT_CMAKE_PREFIX_PATH $ENV{QT_CMAKE_PREFIX_PATH}) endif() # figure out where the qt dir is get_filename_component(QT_DIR "${QT_CMAKE_PREFIX_PATH}/../../" ABSOLUTE) + set(QT_VERSION "unknown") + calculate_qt5_version(QT_VERSION "${QT_DIR}") + if (QT_VERSION STREQUAL "unknown") + message(FATAL_ERROR "Could not determine QT_VERSION") + endif() - if (WIN32) + if(WIN32) # windows shell does not like backslashes expanded on the command line, # so convert all backslashes in the QT path to forward slashes string(REPLACE \\ / QT_CMAKE_PREFIX_PATH ${QT_CMAKE_PREFIX_PATH}) string(REPLACE \\ / QT_DIR ${QT_DIR}) endif() - if (NOT EXISTS "${QT_CMAKE_PREFIX_PATH}/Qt5Core/Qt5CoreConfig.cmake") - message(FATAL_ERROR "Unable to locate Qt cmake config in ${QT_CMAKE_PREFIX_PATH}") + if(NOT EXISTS "${QT_CMAKE_PREFIX_PATH}/Qt5Core/Qt5CoreConfig.cmake") + message(FATAL_ERROR "Unable to locate Qt5CoreConfig.cmake in '${QT_CMAKE_PREFIX_PATH}'") endif() - message(STATUS "The Qt build in use is: \"${QT_DIR}\"") + message(STATUS "Using Qt build in : '${QT_DIR}' with version ${QT_VERSION}") # Instruct CMake to run moc automatically when needed. set(CMAKE_AUTOMOC ON) diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index faa1842395..77e0c70ecf 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -15,11 +15,12 @@ print = functools.partial(print, flush=True) # Encapsulates the vcpkg system class VcpkgRepo: CMAKE_TEMPLATE = """ +# this file auto-generated by hifi_vcpkg.py get_filename_component(CMAKE_TOOLCHAIN_FILE "{}" ABSOLUTE CACHE) get_filename_component(CMAKE_TOOLCHAIN_FILE_UNCACHED "{}" ABSOLUTE) set(VCPKG_INSTALL_ROOT "{}") set(VCPKG_TOOLS_DIR "{}") -set(QT_CMAKE_PREFIX_PATH "{}") +set(VCPKG_QT_CMAKE_PREFIX_PATH "{}") """ CMAKE_TEMPLATE_NON_ANDROID = """ @@ -218,17 +219,17 @@ endif() cmakeScript = os.path.join(self.path, 'scripts/buildsystems/vcpkg.cmake') installPath = os.path.join(self.path, 'installed', self.triplet) toolsPath = os.path.join(self.path, 'installed', self.hostTriplet, 'tools') - cmakePrefixPath = os.path.join(self.path, 'installed', 'qt5-install/lib/cmake') - cmakeTemplate = VcpkgRepo.CMAKE_TEMPLATE - if not self.args.android: - cmakeTemplate += VcpkgRepo.CMAKE_TEMPLATE_NON_ANDROID - else: - precompiled = os.path.realpath(self.androidPackagePath) - qtCmakePrefix = os.path.realpath(os.path.join(precompiled, 'qt/lib/cmake')) - cmakeTemplate += 'set(HIFI_ANDROID_PRECOMPILED "{}")\n'.format(precompiled) - cmakeTemplate += 'set(QT_CMAKE_PREFIX_PATH "{}")\n'.format(qtCmakePrefix) - cmakeConfig = cmakeTemplate.format(cmakeScript, cmakeScript, installPath, toolsPath, cmakePrefixPath).replace('\\', '/') + cmakeTemplate = VcpkgRepo.CMAKE_TEMPLATE + qtCmakePrefixPath = os.path.join(self.path, 'installed', 'qt5-install/lib/cmake') + if self.args.android: + precompiled = os.path.realpath(self.androidPackagePath) + cmakeTemplate += 'set(HIFI_ANDROID_PRECOMPILED "{}")\n'.format(precompiled) + qtCmakePrefixPath = os.path.realpath(os.path.join(precompiled, 'qt/lib/cmake')) + else: + cmakeTemplate += VcpkgRepo.CMAKE_TEMPLATE_NON_ANDROID + + cmakeConfig = cmakeTemplate.format(cmakeScript, cmakeScript, installPath, toolsPath, qtCmakePrefixPath).replace('\\', '/') with open(self.configFilePath, 'w') as f: f.write(cmakeConfig) From 3e63734123944cd270cc7eb289967d38de9838d5 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Thu, 16 May 2019 13:50:23 -0700 Subject: [PATCH 077/203] more correct QT_VERSION detection for MacOS --- cmake/macros/SetupQt.cmake | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/cmake/macros/SetupQt.cmake b/cmake/macros/SetupQt.cmake index 18b4f5aecc..b6ebaf6239 100644 --- a/cmake/macros/SetupQt.cmake +++ b/cmake/macros/SetupQt.cmake @@ -21,7 +21,11 @@ function(calculate_qt5_version result _QT_DIR) # .../include/QtCore/5.12.3/QtCore/private # Sometimes we need to include these private headers for debug hackery. # Hence we find one of these directories and pick apart its path to determine the actual QT_VERSION. - set(_QT_CORE_DIR "${_QT_DIR}/include/QtCore") + if (APPLE) + set(_QT_CORE_DIR "${_QT_DIR}/lib/QtCore.framework/Versions/5/Headers") + else() + set(_QT_CORE_DIR "${_QT_DIR}/include/QtCore") + endif() if(NOT EXISTS "${_QT_CORE_DIR}") message(FATAL_ERROR "Could not find 'include/QtCore' in '${_QT_DIR}'") endif() @@ -74,7 +78,9 @@ macro(setup_qt) message(FATAL_ERROR "Unable to locate Qt5CoreConfig.cmake in '${QT_CMAKE_PREFIX_PATH}'") endif() - message(STATUS "Using Qt build in : '${QT_DIR}' with version ${QT_VERSION}") + message("adebug") + message("adebug Using Qt build in : '${QT_DIR}' with version ${QT_VERSION}") + message("adebug") # Instruct CMake to run moc automatically when needed. set(CMAKE_AUTOMOC ON) From 9e8d604373e94c225b7298d0a0aae7771b6ad634 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Thu, 16 May 2019 16:35:16 -0700 Subject: [PATCH 078/203] remove debug logs --- cmake/macros/SetupQt.cmake | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cmake/macros/SetupQt.cmake b/cmake/macros/SetupQt.cmake index b6ebaf6239..316172a204 100644 --- a/cmake/macros/SetupQt.cmake +++ b/cmake/macros/SetupQt.cmake @@ -78,9 +78,7 @@ macro(setup_qt) message(FATAL_ERROR "Unable to locate Qt5CoreConfig.cmake in '${QT_CMAKE_PREFIX_PATH}'") endif() - message("adebug") - message("adebug Using Qt build in : '${QT_DIR}' with version ${QT_VERSION}") - message("adebug") + message(STATUS "Using Qt build in : '${QT_DIR}' with version ${QT_VERSION}") # Instruct CMake to run moc automatically when needed. set(CMAKE_AUTOMOC ON) From f4d9aa71a4d671cf4a69b5246fe5874f7302e1d3 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Thu, 16 May 2019 16:35:49 -0700 Subject: [PATCH 079/203] remove manual symbol stripping --- CMakeLists.txt | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index eb4c82b599..ae2183e427 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -196,17 +196,6 @@ unset(JS_SRC) set_packaging_parameters() -if (NOT DEV_BUILD) - # add options to strip symbols for PRODUCTION and PR builds - # TODO?: call set_packaging_parameters() earlier and move this symbol stripping into compiler.cmake - if (APPLE) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-s") - elseif(UNIX) - set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s") - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s") - endif() -endif() - # Locate the required Qt build on the filesystem setup_qt() list(APPEND CMAKE_PREFIX_PATH "${QT_CMAKE_PREFIX_PATH}") From 93db5ec0548db9c48948c32c66320650bc7e0f50 Mon Sep 17 00:00:00 2001 From: Howard Stearns Date: Fri, 17 May 2019 11:25:05 -0700 Subject: [PATCH 080/203] Defer avatar PoP check --- assignment-client/src/avatars/AvatarMixerClientData.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/assignment-client/src/avatars/AvatarMixerClientData.cpp b/assignment-client/src/avatars/AvatarMixerClientData.cpp index cdd639ed80..361f87a635 100644 --- a/assignment-client/src/avatars/AvatarMixerClientData.cpp +++ b/assignment-client/src/avatars/AvatarMixerClientData.cpp @@ -204,7 +204,10 @@ void AvatarMixerClientData::processSetTraitsMessage(ReceivedMessage& message, if (traitType == AvatarTraits::SkeletonModelURL) { // special handling for skeleton model URL, since we need to make sure it is in the whitelist checkSkeletonURLAgainstWhitelist(slaveSharedData, sendingNode, packetTraitVersion); +#ifdef AVATAR_POP_CHECK + // Deferred for UX work. With no PoP check, no need to get the .fst. _avatar->fetchAvatarFST(); +#endif } anyTraitsChanged = true; From df098cab2f9b2152694159a8f44086150baa4d5d Mon Sep 17 00:00:00 2001 From: milad Date: Fri, 17 May 2019 12:36:03 -0700 Subject: [PATCH 081/203] changed size of always on overlays to be smaller --- .../resources/modules/defaultLocalEntityProps.js | 0 .../simplifiedNametag/resources/modules/entityMaker.js | 0 .../resources/modules/nameTagListManager.js | 7 +++---- .../simplifiedNametag/resources/modules/objectAssign.js | 0 .../resources/modules/pickRayController.js | 0 .../simplifiedNametag/resources/modules/textHelper.js | 0 .../simplifiedNametag/simplifiedNametag.js | 1 - 7 files changed, 3 insertions(+), 5 deletions(-) rename scripts/system/{ => simplifiedUI}/simplifiedNametag/resources/modules/defaultLocalEntityProps.js (100%) rename scripts/system/{ => simplifiedUI}/simplifiedNametag/resources/modules/entityMaker.js (100%) rename scripts/system/{ => simplifiedUI}/simplifiedNametag/resources/modules/nameTagListManager.js (99%) rename scripts/system/{ => simplifiedUI}/simplifiedNametag/resources/modules/objectAssign.js (100%) rename scripts/system/{ => simplifiedUI}/simplifiedNametag/resources/modules/pickRayController.js (100%) rename scripts/system/{ => simplifiedUI}/simplifiedNametag/resources/modules/textHelper.js (100%) rename scripts/system/{ => simplifiedUI}/simplifiedNametag/simplifiedNametag.js (99%) diff --git a/scripts/system/simplifiedNametag/resources/modules/defaultLocalEntityProps.js b/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/defaultLocalEntityProps.js similarity index 100% rename from scripts/system/simplifiedNametag/resources/modules/defaultLocalEntityProps.js rename to scripts/system/simplifiedUI/simplifiedNametag/resources/modules/defaultLocalEntityProps.js diff --git a/scripts/system/simplifiedNametag/resources/modules/entityMaker.js b/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/entityMaker.js similarity index 100% rename from scripts/system/simplifiedNametag/resources/modules/entityMaker.js rename to scripts/system/simplifiedUI/simplifiedNametag/resources/modules/entityMaker.js diff --git a/scripts/system/simplifiedNametag/resources/modules/nameTagListManager.js b/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/nameTagListManager.js similarity index 99% rename from scripts/system/simplifiedNametag/resources/modules/nameTagListManager.js rename to scripts/system/simplifiedUI/simplifiedNametag/resources/modules/nameTagListManager.js index 98f73456d6..d77bbcf1b5 100644 --- a/scripts/system/simplifiedNametag/resources/modules/nameTagListManager.js +++ b/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/nameTagListManager.js @@ -10,7 +10,6 @@ // Helps manage the list of avatars added to the nametag list // - var ON = 'ON'; var OFF = 'OFF'; var DEBUG_ON = true; @@ -63,7 +62,7 @@ function maybeClearInterval() { var Z_SIZE = 0.01; var LINE_HEIGHT_SCALER = 0.99; var DISTANCE_SCALER_ON = 0.35; -var DISTANCE_SCALER_ALWAYS_ON = 0.65; +var DISTANCE_SCALER_ALWAYS_ON = 0.50; var distanceScaler = DISTANCE_SCALER_ON; var userScaler = 1.0; var DEFAULT_LINE_HEIGHT = entityProps.lineHeight; @@ -251,10 +250,10 @@ var RIGHT_MARGIN_SCALER = 0.10; var TOP_MARGIN_SCALER = 0.07; var BOTTOM_MARGIN_SCALER = 0.03; var ABOVE_HEAD_OFFSET = 0.30; -var DISTANCE_SCALER_INTERPOLATION_OFFSET_ALWAYSON = 25; +var DISTANCE_SCALER_INTERPOLATION_OFFSET_ALWAYSON = 5; var DISTANCE_SCALER_INTERPOLATION_OFFSET_ON = 10; var maxDistance = MAX_RADIUS_IGNORE_METERS; -var onModeScalar = 0.60; +var onModeScalar = 0.55; var alwaysOnModeScalar = -0.55; function makeNameTag(uuid) { var avatar = _this.avatars[uuid]; diff --git a/scripts/system/simplifiedNametag/resources/modules/objectAssign.js b/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/objectAssign.js similarity index 100% rename from scripts/system/simplifiedNametag/resources/modules/objectAssign.js rename to scripts/system/simplifiedUI/simplifiedNametag/resources/modules/objectAssign.js diff --git a/scripts/system/simplifiedNametag/resources/modules/pickRayController.js b/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/pickRayController.js similarity index 100% rename from scripts/system/simplifiedNametag/resources/modules/pickRayController.js rename to scripts/system/simplifiedUI/simplifiedNametag/resources/modules/pickRayController.js diff --git a/scripts/system/simplifiedNametag/resources/modules/textHelper.js b/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/textHelper.js similarity index 100% rename from scripts/system/simplifiedNametag/resources/modules/textHelper.js rename to scripts/system/simplifiedUI/simplifiedNametag/resources/modules/textHelper.js diff --git a/scripts/system/simplifiedNametag/simplifiedNametag.js b/scripts/system/simplifiedUI/simplifiedNametag/simplifiedNametag.js similarity index 99% rename from scripts/system/simplifiedNametag/simplifiedNametag.js rename to scripts/system/simplifiedUI/simplifiedNametag/simplifiedNametag.js index 75379f4e02..9b4d9cfad3 100644 --- a/scripts/system/simplifiedNametag/simplifiedNametag.js +++ b/scripts/system/simplifiedUI/simplifiedNametag/simplifiedNametag.js @@ -8,7 +8,6 @@ // // Click on someone to get a nametag for them // - var PickRayController = Script.require('./resources/modules/pickRayController.js?' + Date.now()); var NameTagListManager = Script.require('./resources/modules/nameTagListManager.js?' + Date.now()); var pickRayController = new PickRayController(); From 935d152617983d13869646a2a2c941111e98ad13 Mon Sep 17 00:00:00 2001 From: milad Date: Fri, 17 May 2019 12:42:10 -0700 Subject: [PATCH 082/203] forgot to copy a folder in to the local repo --- .../modules/defaultLocalEntityProps.js | 26 + .../resources/modules/entityMaker.js | 154 ++++ .../resources/modules/nameTagListManager.js | 668 ++++++++++++++++++ .../resources/modules/objectAssign.js | 32 + .../resources/modules/pickRayController.js | 305 ++++++++ .../resources/modules/textHelper.js | 224 ++++++ .../simplifiedNametag/simplifiedNametag.js | 95 +++ scripts/system/simplifiedUI/simplifiedUI.js | 3 +- 8 files changed, 1505 insertions(+), 2 deletions(-) create mode 100644 scripts/system/simplifiedUI/simplifiedNametag/resources/modules/defaultLocalEntityProps.js create mode 100644 scripts/system/simplifiedUI/simplifiedNametag/resources/modules/entityMaker.js create mode 100644 scripts/system/simplifiedUI/simplifiedNametag/resources/modules/nameTagListManager.js create mode 100644 scripts/system/simplifiedUI/simplifiedNametag/resources/modules/objectAssign.js create mode 100644 scripts/system/simplifiedUI/simplifiedNametag/resources/modules/pickRayController.js create mode 100644 scripts/system/simplifiedUI/simplifiedNametag/resources/modules/textHelper.js create mode 100644 scripts/system/simplifiedUI/simplifiedNametag/simplifiedNametag.js diff --git a/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/defaultLocalEntityProps.js b/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/defaultLocalEntityProps.js new file mode 100644 index 0000000000..1947a47220 --- /dev/null +++ b/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/defaultLocalEntityProps.js @@ -0,0 +1,26 @@ +// +// Simplified Nametag +// defaultLocalEntityProps.js +// Created by Milad Nazeri on 2019-03-09 +// Copyright 2019 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// +// Base properties for the Local Entities +// + +var localEntityProps = { + dimensions: [1, 0.1, 0], + type: "Text", + lineHeight: 0.1, + textColor: "#ffffff", + textAlpha: 1.0, + backgroundColor: "#2d2d2d", + backgroundAlpha: 0.6, + billboardMode: "full", + lifetime: 3, + canCastShadow: true +}; + +module.exports = localEntityProps; \ No newline at end of file diff --git a/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/entityMaker.js b/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/entityMaker.js new file mode 100644 index 0000000000..5b254f9ba5 --- /dev/null +++ b/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/entityMaker.js @@ -0,0 +1,154 @@ +// +// Simplified Nametag +// entityMaker.js +// Created by Milad Nazeri on 2019-02-19 +// Copyright 2019 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// +// A helper library to make entities +// + + +Script.require('./objectAssign.js'); + +function EntityMaker(type) { + this.properties = {}; + this.cache = {}; + this.id = null; + this.created = null; + this.type = type; +} + + +// ************************************* +// START API +// ************************************* +// #region API + + +// Add properties to the cache / temporary storage +function add(props){ + // You can either add an object of props or 2 arguments as key and value + if (arguments.length === 2) { + var property = arguments[0]; + var value = arguments[1]; + props = {}; + props[property] = value; + } + + this.properties = Object.assign({}, this.properties, props); + this.cache = Object.assign({}, this.cache, this.properties); + + return this; +} + + +// Sends the current temporary stroage to edit the entity +function sync(){ + Entities.editEntity(this.id, this.properties); + this.properties = {}; + + return this; +} + + +// Immediately edit the entity with the properties given +function edit(props){ + if (arguments.length === 2) { + var property = arguments[0]; + var value = arguments[1]; + props = {}; + props[property] = value; + } + this.properties = Object.assign({}, this.properties, props); + this.cache = Object.assign({}, this.cache, this.properties); + this.sync(); + + return this; +} + + +// Get a property either from the cache or by querying the entity directly +function get(propertyKeys, queryEntity){ + if (queryEntity && typeof propertyKeys === 'string') { + var propertyValue = Entities.getEntityProperties(this.id, propertyKeys)[propertyKeys]; + this.properties[propertyKeys] = propertyValue; + this.cache = Object.assign({}, this.cache, this.properties); + return propertyValue; + } + + if (queryEntity && Array.isArray(propertyKeys)) { + var entityProps = Entities.getEntityProperties(this.id, propertyKeys); + for (var prop in entityProps) { + if (propertyKeys.indexOf(prop) === -1) { + delete entityProps[prop]; + } else { + this.properties[prop] = entityProps[prop]; + } + } + return entityProps; + } + + if (Array.isArray(propertyKeys)) { + var recombinedProps = {}; + propertyKeys.forEach(function (prop) { + recombinedProps[prop] = this.cache[prop]; + }, this); + return recombinedProps; + } + + return this.cache[propertyKeys]; +} + + +// Show the entity +function show(){ + this.edit({ visible: true }); + + return this; +} + + +// Hide the enity +function hide(){ + this.edit({ visible: false }); +} + + +// Add an entity if it isn't created +function create(clearPropertiesAfter){ + this.id = Entities.addEntity(this.properties, this.type); + if (clearPropertiesAfter) { + this.properties = {}; + } + return this; +} + + +// Delete the entity +function destroy(){ + Entities.deleteEntity(this.id); + + return this; +} + + +// #endregion +// ************************************* +// END API +// ************************************* + +EntityMaker.prototype = { + add: add, + sync: sync, + edit: edit, + get: get, + show: show, + hide: hide, + create: create, + destroy: destroy +}; + +module.exports = EntityMaker; \ No newline at end of file diff --git a/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/nameTagListManager.js b/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/nameTagListManager.js new file mode 100644 index 0000000000..d77bbcf1b5 --- /dev/null +++ b/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/nameTagListManager.js @@ -0,0 +1,668 @@ +// +// Simplified Nametag +// nameTagListManager.js +// Created by Milad Nazeri on 2019-03-09 +// Copyright 2019 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// +// Helps manage the list of avatars added to the nametag list +// + +var ON = 'ON'; +var OFF = 'OFF'; +var DEBUG_ON = true; +var DEBUG_OFF = false; +var log = Script.require( + 'https://hifi-content.s3.amazonaws.com/milad/ROLC/d/ROLC_High-Fidelity/02_Organize/O_Projects/Repos/hifi-content/developerTools/sharedLibraries/easyLog/easyLog.js?' + + Date.now())(DEBUG_OFF, 'nameTagListManager.js'); + + +var EntityMaker = Script.require('./entityMaker.js?' + Date.now()); +var entityProps = Script.require('./defaultLocalEntityProps.js?' + Date.now()); +var textHelper = new (Script.require('./textHelper.js?' + Date.now())); +var X = 0; +var Y = 1; +var Z = 2; +var HALF = 0.5; +var CLEAR_ENTITY_EDIT_PROPS = true; +var MILISECONDS_IN_SECOND = 1000; + +// ************************************* +// START UTILTY +// ************************************* +// #region UTILTY + + +// Properties to give new avatars added to the list +function NewAvatarProps() { + return { + avatarInfo: null, + previousDistance: null, + currentDistance: null, + initialDistance: null, + initialDimensions: null, + previousName: null, + timeoutStarted: false + }; +} + + +// Makes sure clear interval exists before changing +function maybeClearInterval() { + if (_this.redrawTimeout) { + Script.clearInterval(_this.redrawTimeout); + _this.redrawTimeout = null; + } +} + + +// Calculate our initial properties for the nametag +var Z_SIZE = 0.01; +var LINE_HEIGHT_SCALER = 0.99; +var DISTANCE_SCALER_ON = 0.35; +var DISTANCE_SCALER_ALWAYS_ON = 0.50; +var distanceScaler = DISTANCE_SCALER_ON; +var userScaler = 1.0; +var DEFAULT_LINE_HEIGHT = entityProps.lineHeight; +function calculateInitialProperties(uuid) { + var avatar = _this.avatars[uuid]; + var avatarInfo = avatar.avatarInfo; + + var adjustedScaler = null; + var distance = null; + var dimensions = null; + var lineHeight = null; + var scaledDimensions = null; + var name = null; + + // Handle if we are asking for the main or sub properties + name = avatarInfo.displayName; + + // Use the text helper to calculate what our dimensions for the text box should be + textHelper + .setText(name) + .setLineHeight(DEFAULT_LINE_HEIGHT); + + // Calculate the distance from the camera to the target avatar + distance = getDistance(uuid); + + // Adjust the distance by the distance scaler + distanceScaler = avatarNametagMode === "on" ? DISTANCE_SCALER_ON : DISTANCE_SCALER_ALWAYS_ON; + adjustedScaler = distance * distanceScaler; + // Get the new dimensions from the text helper + dimensions = [textHelper.getTotalTextLength(), DEFAULT_LINE_HEIGHT, Z_SIZE]; + // Adjust the dimensions by the modified distance scaler + scaledDimensions = Vec3.multiply(dimensions, adjustedScaler); + + // Adjust the lineheight to be the new scaled dimensions Y + lineHeight = scaledDimensions[Y] * LINE_HEIGHT_SCALER; + + return { + distance: distance, + scaledDimensions: scaledDimensions, + lineHeight: lineHeight + }; +} + + +// Used in alwaysOn mode to show or hide if they reached the max radius +function showHide(uuid, type) { + var avatar = _this.avatars[uuid]; + var nametag = avatar.nametag; + + if (type === "show") { + nametag.show(); + } else { + nametag.hide(); + } +} + + +// Go through the selected avatar list and see if any of the avatars need a redraw +function checkAllSelectedForRedraw() { + for (var avatar in _this.selectedAvatars) { + maybeRedraw(avatar); + } +} + + +// Remake the nametags if the display name changes +function updateName(uuid) { + var avatar = _this.avatars[uuid]; + avatar.nametag.destroy(); + + avatar.nametag = new EntityMaker('local').add(entityProps); + + makeNameTag(uuid); +} + + +// Get the current data for an avatar. +function getAvatarData(uuid) { + var avatar = _this.avatars[uuid]; + var avatarInfo = avatar.avatarInfo; + + var newAvatarInfo = AvatarManager.getAvatar(uuid); + // Save the username so it doesn't get overwritten when grabbing new avatarData + var combinedAvatarInfo = Object.assign({}, newAvatarInfo, { + username: avatarInfo === null ? null : avatarInfo.username + }); + + // Now combine that avatar data with the main avatar object + _this.avatars[uuid] = Object.assign({}, avatar, { avatarInfo: combinedAvatarInfo }); + + return _this; +} + + +// Calculate the distance between the camera and the target avatar +function getDistance(uuid, checkAvatar, shouldSave) { + checkAvatar = checkAvatar || false; + shouldSave = shouldSave || true; + var eye = checkAvatar ? MyAvatar.position : Camera.position; + var avatar = _this.avatars[uuid]; + var avatarInfo = avatar.avatarInfo; + + var target = avatarInfo.position; + + var currentDistance = Vec3.distance(target, eye); + + if (!checkAvatar && shouldSave) { + avatar.previousDistance = avatar.currentDistance; + avatar.currentDistance = currentDistance; + } + + return currentDistance; +} + + +// Check to see if we need to toggle our interval check because we went to 0 avatars +// or if we got our first avatar in the select list +function shouldToggleInterval() { + var currentNumberOfAvatarsSelected = Object.keys(_this.selectedAvatars).length; + + if (currentNumberOfAvatarsSelected === 0 && _this.redrawTimeout) { + toggleInterval(); + return; + } + + if (currentNumberOfAvatarsSelected > 0 && !_this.redrawTimeout) { + toggleInterval(); + return; + } +} + + +// Turn off and on the redraw check +var INTERVAL_CHECK_MS = 30; +function toggleInterval() { + if (_this.redrawTimeout) { + maybeClearInterval(); + } else { + _this.redrawTimeout = + Script.setInterval(checkAllSelectedForRedraw, INTERVAL_CHECK_MS); + } +} + + +// handle turning the peristenet mode on +function handleAlwaysOnMode(shouldTurnOnAlwaysOnMode) { + _this.reset(); + if (shouldTurnOnAlwaysOnMode) { + AvatarManager + .getAvatarIdentifiers() + .forEach(function (avatar) { + if (avatar) { + add(avatar); + } + }); + } +} + + +// #endregion +// ************************************* +// END UTILTY +// ************************************* + +// ************************************* +// START Nametag +// ************************************* +// #region Nametag + + +var _this = null; +function nameTagListManager() { + _this = this; + + _this.avatars = {}; + _this.selectedAvatars = {}; + _this.redrawTimeout = null; +} + + +// Create or make visible either the sub or the main tag. +var REDRAW_TIMEOUT_AMOUNT_MS = 500; +var LEFT_MARGIN_SCALER = 0.15; +var RIGHT_MARGIN_SCALER = 0.10; +var TOP_MARGIN_SCALER = 0.07; +var BOTTOM_MARGIN_SCALER = 0.03; +var ABOVE_HEAD_OFFSET = 0.30; +var DISTANCE_SCALER_INTERPOLATION_OFFSET_ALWAYSON = 5; +var DISTANCE_SCALER_INTERPOLATION_OFFSET_ON = 10; +var maxDistance = MAX_RADIUS_IGNORE_METERS; +var onModeScalar = 0.55; +var alwaysOnModeScalar = -0.55; +function makeNameTag(uuid) { + var avatar = _this.avatars[uuid]; + var avatarInfo = avatar.avatarInfo; + var nametag = avatar.nametag; + + // Make sure an anonymous name is covered before sending to calculate + + avatarInfo.displayName = avatarInfo.displayName === "" ? "anonymous" : avatarInfo.displayName.trim(); + avatar.previousName = avatarInfo.displayName; + + // Returns back the properties we need based on what we are looking for and the distance from the avatar + var calculatedProps = calculateInitialProperties(uuid); + var distance = calculatedProps.distance; + var scaledDimensions = calculatedProps.scaledDimensions; + var lineHeight = calculatedProps.lineHeight; + + // Capture the inital dimensions, distance, and displayName in case we need to redraw + avatar.previousDisplayName = avatarInfo.displayName; + avatar.initialDimensions = scaledDimensions; + avatar.initialDistance = distance; + var name = avatarInfo.displayName; + var parentID = uuid; + + nametag.add("text", name); + + // Multiply the new dimensions and line height with the user selected scaler + scaledDimensions = Vec3.multiply(scaledDimensions, userScaler); + + maxDistance = avatarNametagMode === "on" + ? MAX_ON_MODE_DISTANCE + DISTANCE_SCALER_INTERPOLATION_OFFSET_ON + : MAX_RADIUS_IGNORE_METERS + DISTANCE_SCALER_INTERPOLATION_OFFSET_ALWAYSON; + var finalScaler = (distance - maxDistance) / (MIN_DISTANCE - maxDistance); + + var remainder = 1 - finalScaler; + var multipliedRemainderOn = remainder * onModeScalar; + var multipliedRemainderAlwaysOn = remainder * alwaysOnModeScalar; + finalScaler = avatarNametagMode === "on" ? finalScaler + multipliedRemainderOn : finalScaler + multipliedRemainderAlwaysOn; + + scaledDimensions = Vec3.multiply(scaledDimensions, finalScaler); + + lineHeight = scaledDimensions[Y] * LINE_HEIGHT_SCALER; + // Add some room for the margin by using lineHeight as a reference + scaledDimensions[X] += (lineHeight * LEFT_MARGIN_SCALER) + (lineHeight * RIGHT_MARGIN_SCALER); + scaledDimensions[Y] += (lineHeight * TOP_MARGIN_SCALER) + (lineHeight * BOTTOM_MARGIN_SCALER); + + var scaledDimenionsYHalf = scaledDimensions[Y] * HALF; + var AvatarData = AvatarManager.getAvatar(uuid); + var headJointIndex = AvatarData.getJointIndex("Head"); + var jointInObjectFrame = AvatarData.getAbsoluteJointTranslationInObjectFrame(headJointIndex); + var nameTagPosition = jointInObjectFrame.y + scaledDimenionsYHalf + ABOVE_HEAD_OFFSET; + var localPosition = [0, nameTagPosition, 0]; + + var visible = true; + if (avatarNametagMode === "alwaysOn") { + var currentDistance = getDistance(uuid, CHECK_AVATAR, false); + visible = currentDistance > MAX_RADIUS_IGNORE_METERS ? false : true; + } + + nametag + .add("leftMargin", lineHeight * LEFT_MARGIN_SCALER) + .add("rightMargin", lineHeight * RIGHT_MARGIN_SCALER) + .add("topMargin", lineHeight * TOP_MARGIN_SCALER) + .add("bottomMargin", lineHeight * BOTTOM_MARGIN_SCALER) + .add("lineHeight", lineHeight) + .add("dimensions", scaledDimensions) + .add("parentID", parentID) + .add("localPosition", localPosition) + .add("visible", visible) + .create(CLEAR_ENTITY_EDIT_PROPS); + + Script.setTimeout(function () { + nametag.edit("visible", true); + }, REDRAW_TIMEOUT_AMOUNT_MS); +} + + +// Check to see if the display named changed or if the distance is big enough to need a redraw. +var MAX_RADIUS_IGNORE_METERS = 22; +var MAX_ON_MODE_DISTANCE = 30; +var CHECK_AVATAR = true; +var MIN_DISTANCE = 0.2; +function maybeRedraw(uuid) { + var avatar = _this.avatars[uuid]; + var avatarInfo = avatar.avatarInfo; + getAvatarData(uuid); + + getDistance(uuid); + var avatarDistance = getDistance(uuid, CHECK_AVATAR, false); + if (avatarNametagMode === "alwaysOn" && avatarDistance > MAX_RADIUS_IGNORE_METERS) { + showHide(uuid, "hide"); + } + + if (avatarNametagMode === "alwaysOn" && avatarDistance < MAX_RADIUS_IGNORE_METERS) { + showHide(uuid, "show"); + } + + avatarInfo.displayName = avatarInfo.displayName === "" ? "anonymous" : avatarInfo.displayName.trim(); + + if (avatar.previousName !== avatarInfo.displayName) { + updateName(uuid, avatarInfo.displayName); + } else { + redraw(uuid); + } + +} + + +// Handle redrawing if needed +function redraw(uuid) { + var avatar = _this.avatars[uuid]; + + var nametag = avatar.nametag; + var initialDimensions = null; + var initialDistance = null; + var currentDistance = null; + var newDimensions = null; + var lineHeight = null; + + initialDistance = avatar.initialDistance; + currentDistance = avatar.currentDistance; + + initialDimensions = avatar.initialDimensions; + + // Find our new dimensions from the new distance + newDimensions = [ + (initialDimensions[X] / initialDistance) * currentDistance, + (initialDimensions[Y] / initialDistance) * currentDistance, + (initialDimensions[Z] / initialDistance) * currentDistance + ]; + + // Multiply the new dimensions and line height with the user selected scaler + newDimensions = Vec3.multiply(newDimensions, userScaler); + + var distance = getDistance(uuid, false, false); + + maxDistance = avatarNametagMode === "on" + ? MAX_ON_MODE_DISTANCE + DISTANCE_SCALER_INTERPOLATION_OFFSET_ON + : MAX_RADIUS_IGNORE_METERS + DISTANCE_SCALER_INTERPOLATION_OFFSET_ALWAYSON; + var finalScaler = (distance - maxDistance) / (MIN_DISTANCE - maxDistance); + var remainder = 1 - finalScaler; + var multipliedRemainderOn = remainder * onModeScalar; + var multipliedRemainderAlwaysOn = remainder * alwaysOnModeScalar; + finalScaler = avatarNametagMode === "on" ? finalScaler + multipliedRemainderOn : finalScaler + multipliedRemainderAlwaysOn; + + newDimensions = Vec3.multiply(newDimensions, finalScaler); + + lineHeight = newDimensions[Y] * LINE_HEIGHT_SCALER; + + // Add some room for the margin by using lineHeight as a reference + newDimensions[X] += (lineHeight * LEFT_MARGIN_SCALER) + (lineHeight * RIGHT_MARGIN_SCALER); + newDimensions[Y] += (lineHeight * TOP_MARGIN_SCALER) + (lineHeight * BOTTOM_MARGIN_SCALER); + + // We can generalize some of the processes that are similar in makeNameTag() and redraw() if we wanted to reduce some code + var newDimenionsYHalf = newDimensions[Y] * HALF; + var AvatarData = AvatarManager.getAvatar(uuid); + var headJointIndex = AvatarData.getJointIndex("Head"); + var jointInObjectFrame = AvatarData.getAbsoluteJointTranslationInObjectFrame(headJointIndex); + var nameTagPosition = jointInObjectFrame.y + newDimenionsYHalf + ABOVE_HEAD_OFFSET; + var localPosition = [0, nameTagPosition, 0]; + + nametag + .add("leftMargin", lineHeight * LEFT_MARGIN_SCALER) + .add("rightMargin", lineHeight * RIGHT_MARGIN_SCALER) + .add("topMargin", lineHeight * TOP_MARGIN_SCALER) + .add("bottomMargin", lineHeight * BOTTOM_MARGIN_SCALER) + .add("lineHeight", lineHeight) + .add("dimensions", newDimensions) + .add("localPosition", localPosition) + .sync(); +} + +// Add a user to the list. +var DEFAULT_LIFETIME = entityProps.lifetime; + + +// add a user to our current selections +function add(uuid) { + // User Doesn't exist so give them new props and save in the cache, and get their current avatar info. + if (!_this.avatars[uuid]) { + _this.avatars[uuid] = new NewAvatarProps(); + getAvatarData(uuid); + } + + var avatar = _this.avatars[uuid]; + + _this.selectedAvatars[uuid] = true; + if (avatarNametagMode === "alwaysOn") { + entityProps.lifetime = -1; + } else { + entityProps.lifetime = DEFAULT_LIFETIME; + } + + avatar.nametag = new EntityMaker('local').add(entityProps); + + // When the user clicks someone, we create their nametag + makeNameTag(uuid); + var deleteEnttyInMiliseconds = entityProps.lifetime * MILISECONDS_IN_SECOND; + + // Remove from list after lifetime is over + if (avatarNametagMode === "on") { + avatar.timeoutStarted = Script.setTimeout(function () { + removeNametag(uuid); + }, deleteEnttyInMiliseconds); + } + + // Check to see if anyone is in the selected list now to see if we need to start the interval checking + shouldToggleInterval(); + + return _this; +} + + +// Remove the avatar from the list. +function remove(uuid) { + if (_this.selectedAvatars[uuid]) { + delete _this.selectedAvatars[uuid]; + } + + removeNametag(uuid); + + shouldToggleInterval(); + delete _this.avatars[uuid]; + + return _this; +} + + +// Remove all the current nametags. +function removeAllNametags() { + for (var uuid in _this.selectedAvatars) { + removeNametag(uuid); + } + + return _this; +} + + +// Remove a single Nametag. +function removeNametag(uuid) { + var avatar = _this.avatars[uuid]; + + if (avatar) { + avatar.nametag.destroy(); + delete _this.selectedAvatars[uuid]; + return _this; + } + +} + + +// #endregion +// ************************************* +// END Nametag +// ************************************* + +// ************************************* +// START API +// ************************************* +// #region API + + +// Create the manager and hook up username signal +function create() { + + return _this; +} + + +// Destory the manager and disconnect from username signal +function destroy() { + _this.reset(); + return _this; +} + + +// Check to see if we need to delete any close by nametags +var MAX_DELETE_RANGE = 4; +function checkIfAnyAreClose(target) { + var targetPosition = AvatarManager.getAvatar(target).position; + for (var uuid in _this.selectedAvatars) { + var position = AvatarManager.getAvatar(uuid).position; + var distance = Vec3.distance(position, targetPosition); + if (distance <= MAX_DELETE_RANGE) { + var timeoutStarted = _this.avatars[uuid].timeoutStarted; + if (timeoutStarted) { + Script.clearTimeout(timeoutStarted); + timeoutStarted = null; + } + removeNametag(uuid); + } + } +} + +// Handles what happens when an avatar gets triggered on +function handleSelect(uuid) { + if (avatarNametagMode === "off" || avatarNametagMode === "alwaysOn") { + return; + } + + var inSelected = uuid in _this.selectedAvatars; + + if (inSelected) { + if (avatarNametagMode === "on") { + var timeoutStarted = _this.avatars[uuid].timeoutStarted; + if (timeoutStarted) { + Script.clearTimeout(timeoutStarted); + timeoutStarted = null; + } + } + + removeNametag(uuid); + + } else { + checkIfAnyAreClose(uuid); + add(uuid); + } +} + + +// Check to see if we need to clear timeouts for avatars +function maybeClearAllTimeouts() { + for (var uuid in _this.selectedAvatars) { + var timeoutStarted = _this.avatars[uuid].timeoutStarted; + if (timeoutStarted) { + Script.clearTimeout(timeoutStarted); + timeoutStarted = null; + } + } +} + + +// Check to see if the uuid is in the avatars list before removing +function maybeRemove(uuid) { + if (uuid in _this.avatars) { + remove(uuid); + } +} + + +// Check to see if we need to add this user to our list +function maybeAdd(uuid) { + if (uuid && avatarNametagMode === "alwaysOn" && !(uuid in _this.avatars)) { + add(uuid); + } +} + + +// Register the beggining scaler in case it was saved from a previous session +function registerInitialScaler(initalScaler) { + userScaler = initalScaler; +} + + +// Handle the user updating scale +function updateUserScaler(newUSerScaler) { + userScaler = newUSerScaler; + for (var avatar in _this.selectedAvatars) { + redraw(avatar); + } +} + + +// Reset the avatar list +function reset() { + maybeClearAllTimeouts(); + removeAllNametags(); + _this.avatars = {}; + shouldToggleInterval(); + + return _this; +} + + +// Update the nametag display mode +var avatarNametagMode = "on"; +function handleAvatarNametagMode(newAvatarNametagMode) { + if (avatarNametagMode === "alwaysOn") { + handleAlwaysOnMode(false); + } + + avatarNametagMode = newAvatarNametagMode; + if (avatarNametagMode === "alwaysOn") { + handleAlwaysOnMode(true); + } + + if (avatarNametagMode === "off" || avatarNametagMode === "on") { + reset(); + } +} + + +// #endregion +// ************************************* +// END API +// ************************************* + + +nameTagListManager.prototype = { + create: create, + destroy: destroy, + handleSelect: handleSelect, + maybeRemove: maybeRemove, + maybeAdd: maybeAdd, + registerInitialScaler: registerInitialScaler, + updateUserScaler: updateUserScaler, + handleAvatarNametagMode: handleAvatarNametagMode, + reset: reset +}; + + +module.exports = nameTagListManager; \ No newline at end of file diff --git a/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/objectAssign.js b/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/objectAssign.js new file mode 100644 index 0000000000..c408b0ebc8 --- /dev/null +++ b/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/objectAssign.js @@ -0,0 +1,32 @@ +// taken from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign + +if (typeof Object.assign != 'function') { + // Must be writable: true, enumerable: false, configurable: true + Object.defineProperty(Object, "assign", { + value: function assign(target, varArgs) { // .length of function is 2 + 'use strict'; + if (target == null) { // TypeError if undefined or null + throw new TypeError('Cannot convert undefined or null to object'); + } + + var to = Object(target); + + for (var index = 1; index < arguments.length; index++) { + var nextSource = arguments[index]; + + if (nextSource != null) { // Skip over if undefined or null + for (var nextKey in nextSource) { + // Avoid bugs when hasOwnProperty is shadowed + if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { + to[nextKey] = nextSource[nextKey]; + } + } + } + } + return to; + }, + writable: true, + configurable: true + }); +} + diff --git a/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/pickRayController.js b/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/pickRayController.js new file mode 100644 index 0000000000..87d05fa838 --- /dev/null +++ b/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/pickRayController.js @@ -0,0 +1,305 @@ +// +// Simplified Nametag +// pickRayController.js +// Created by Milad Nazeri on 2019-03-08 +// Copyright 2019 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// +// Easy pickray controllers for Entities, Overlays, and Avatars +// + + +var _this; +function PickRayController(){ + _this = this; + + _this.rayType = null; + _this.eventHandler = null; + _this.intersection = null; + _this.lastPick = null; + _this.currentPick = null; + _this.mappingName = null; + _this.mapping = null; + _this._boundMousePressHandler = null; + _this.shouldDoublePress = null; + _this.controllEnabled = false; +} + + +// ************************************* +// START UTILITY +// ************************************* +// #region UTILITY + + +// Returns the right UUID based on hand triggered +function getUUIDFromLaser(hand) { + hand = hand === Controller.Standard.LeftHand + ? Controller.Standard.LeftHand + : Controller.Standard.RightHand; + + var pose = getControllerWorldLocation(hand); + var start = pose.position; + // Get the direction that the hand is facing in the world + var direction = Vec3.multiplyQbyV(pose.orientation, [0, 1, 0]); + + pickRayTypeHandler(start, direction); + + if (_this.currentPick) { + _this.eventHandler(_this.currentPick, _this.intersection); + } +} + + +// The following two functions are a modified version of what's found in scripts/system/libraries/controllers.js + +// Utility function for the ControllerWorldLocation offset +function getGrabPointSphereOffset(handController) { + // These values must match what's in scripts/system/libraries/controllers.js + // x = upward, y = forward, z = lateral + var GRAB_POINT_SPHERE_OFFSET = { x: 0.04, y: 0.13, z: 0.039 }; + var offset = GRAB_POINT_SPHERE_OFFSET; + if (handController === Controller.Standard.LeftHand) { + offset = { + x: -GRAB_POINT_SPHERE_OFFSET.x, + y: GRAB_POINT_SPHERE_OFFSET.y, + z: GRAB_POINT_SPHERE_OFFSET.z + }; + } + + return Vec3.multiply(MyAvatar.sensorToWorldScale, offset); +} + + +// controllerWorldLocation is where the controller would be, in-world, with an added offset +function getControllerWorldLocation(handController, doOffset) { + var orientation; + var position; + var valid = false; + + if (handController >= 0) { + var pose = Controller.getPoseValue(handController); + valid = pose.valid; + var controllerJointIndex; + if (pose.valid) { + if (handController === Controller.Standard.RightHand) { + controllerJointIndex = MyAvatar.getJointIndex("_CAMERA_RELATIVE_CONTROLLER_RIGHTHAND"); + } else { + controllerJointIndex = MyAvatar.getJointIndex("_CAMERA_RELATIVE_CONTROLLER_LEFTHAND"); + } + orientation = Quat.multiply(MyAvatar.orientation, MyAvatar.getAbsoluteJointRotationInObjectFrame(controllerJointIndex)); + position = Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(MyAvatar.orientation, MyAvatar.getAbsoluteJointTranslationInObjectFrame(controllerJointIndex))); + + // add to the real position so the grab-point is out in front of the hand, a bit + if (doOffset) { + var offset = getGrabPointSphereOffset(handController); + position = Vec3.sum(position, Vec3.multiplyQbyV(orientation, offset)); + } + + } else if (!HMD.isHandControllerAvailable()) { + // NOTE: keep _this offset in sync with scripts/system/controllers/handControllerPointer.js:493 + var VERTICAL_HEAD_LASER_OFFSET = 0.1 * MyAvatar.sensorToWorldScale; + position = Vec3.sum(Camera.position, Vec3.multiplyQbyV(Camera.orientation, { x: 0, y: VERTICAL_HEAD_LASER_OFFSET, z: 0 })); + orientation = Quat.multiply(Camera.orientation, Quat.angleAxis(-90, { x: 1, y: 0, z: 0 })); + valid = true; + } + } + + return { + position: position, + translation: position, + orientation: orientation, + rotation: orientation, + valid: valid + }; +} + + +// Handle if the uuid picked on is new or different +function handleUUID(uuid){ + if (!_this.lastPick && !_this.currentPick) { + _this.currentPick = uuid; + _this.lastPick = uuid; + } else { + _this.lastPick = _this.currentPick; + _this.currentPick = uuid; + } +} + + +function pickRayTypeHandler(pickRay){ + // Handle if pickray is system generated or user generated + if (arguments.length === 2) { + pickRay = { origin: arguments[0], direction: arguments[1] }; + } + + // Each different ray pick type needs a different findRayIntersection function + switch (_this.rayType) { + case 'avatar': + var avatarIntersection = AvatarList.findRayIntersection(pickRay, [], [MyAvatar.sessionUUID], false); + _this.intersection = avatarIntersection; + handleUUID(avatarIntersection.avatarID); + break; + case 'local': + var overlayIntersection = Overlays.findRayIntersection(pickRay, [], []); + _this.intersection = overlayIntersection; + handleUUID(overlayIntersection.overlayID); + break; + case 'entity': + var entityIntersection = Entities.findRayIntersection(pickRay, [], []); + _this.intersection = entityIntersection; + handleUUID(entityIntersection.avatarID); + break; + default: + console.log("ray type not handled"); + } +} + + +// Handle the interaction when in desktop and a mouse is pressed +function mousePressHandler(event) { + if (HMD.active || !event.isLeftButton) { + return; + } + var pickRay = Camera.computePickRay(event.x, event.y); + pickRayTypeHandler(pickRay); + if (_this.currentPick) { + _this.eventHandler(_this.currentPick, _this.intersection); + } +} + + +// Function to call when double press is singled +function doublePressHandler(event) { + mousePressHandler(event); +} + + +// #endregion +// ************************************* +// END UTILITY +// ************************************* + +// ************************************* +// START API +// ************************************* +// #region API + + +// After setup is given, this gets the Controller ready to be enabled +function create(){ + _this.mapping = Controller.newMapping(_this.mappingName); + + _this.mapping.from(Controller.Standard.LTClick).to(function (value) { + if (value === 0) { + return; + } + + getUUIDFromLaser(Controller.Standard.LeftHand); + }); + + + _this.mapping.from(Controller.Standard.RTClick).to(function (value) { + if (value === 0) { + return; + } + + getUUIDFromLaser(Controller.Standard.RightHand); + }); + + return _this; +} + + +// Set type of raypick for what kind of uuids to return +function setType(type){ + _this.rayType = type; + + return _this; +} + + +// Set if double presses should register as well +function setShouldDoublePress(shouldDoublePress){ + _this.shouldDoublePress = shouldDoublePress; + + return _this; +} + + +// Set the mapping name for the controller +function setMapName(name) { + _this.mappingName = name; + + return _this; +} + + +// Enables mouse press and trigger events +function enable(){ + if (!_this.controllEnabled) { + Controller.mousePressEvent.connect(mousePressHandler); + if (_this.shouldDoublePress) { + Controller.mouseDoublePressEvent.connect(doublePressHandler); + } + Controller.enableMapping(_this.mappingName); + _this.controllEnabled = true; + + return _this; + } + + return -1; +} + + +// Disable the controller and mouse press +function disable(){ + if (_this.controllEnabled) { + Controller.mousePressEvent.disconnect(mousePressHandler); + if (_this.shouldDoublePress){ + Controller.mouseDoublePressEvent.disconnect(doublePressHandler); + } + Controller.disableMapping(_this.mappingName); + _this.controllEnabled = false; + + return _this; + } + + return -1; +} + + +// Synonym for disable +function destroy(){ + _this.disable(); +} + + +// Register the function to be called on a click +function registerEventHandler(fn){ + _this.eventHandler = fn; + + return _this; +} + + +// #endregion +// ************************************* +// END API +// ************************************* + +PickRayController.prototype = { + create: create, + setType: setType, + setShouldDoublePress: setShouldDoublePress, + setMapName: setMapName, + enable: enable, + disable: disable, + destroy: destroy, + registerEventHandler: registerEventHandler +}; + + +module.exports = PickRayController; diff --git a/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/textHelper.js b/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/textHelper.js new file mode 100644 index 0000000000..72013a2ac5 --- /dev/null +++ b/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/textHelper.js @@ -0,0 +1,224 @@ +// +// Simplified Nametag +// textHelper.js +// Created by Milad Nazeri on 2019-03-08 +// Copyright 2019 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// +// Module to help calculate text size +// + + +// ************************************* +// START MAPS +// ************************************* +// #region MAPS + + +var charMap = { + a: 0.05, + b: 0.051, + c: 0.05, + d: 0.051, + e: 0.05, + f: 0.035, + g: 0.051, + h: 0.051, + i: 0.025, + j: 0.025, + k: 0.05, + l: 0.025, + m: 0.0775, + n: 0.051, + o: 0.051, + p: 0.051, + q: 0.051, + r: 0.035, + s: 0.05, + t: 0.035, + u: 0.051, + v: 0.05, + w: 0.07, + x: 0.05, + y: 0.05, + z: 0.05, + A: 0.06, + B: 0.06, + C: 0.06, + D: 0.06, + E: 0.05, + F: 0.05, + G: 0.06, + H: 0.0625, + I: 0.0275, + J: 0.05, + K: 0.06, + L: 0.05, + M: 0.075, + N: 0.0625, + O: 0.0625, + P: 0.06, + Q: 0.0625, + R: 0.06, + S: 0.06, + T: 0.06, + U: 0.06, + V: 0.06, + W: 0.075, + X: 0.06, + Y: 0.06, + Z: 0.06 +}; + +var symbolMap = { + "!": 0.025, + "@": 0.08, + "#": 0.07, + "$": 0.058, + "%": 0.07, + "^": 0.04, + "&": 0.06, + "*": 0.04, + "(": 0.04, + ")": 0.04, + "_": 0.041, + "{": 0.034, + "}": 0.034, + "/": 0.04, + "|": 0.02, + "<": 0.049, + ">": 0.049, + "[": 0.0300, + "]": 0.0300, + ".": 0.0260, + ",": 0.0260, + "?": 0.048, + "~": 0.0610, + "`": 0.0310, + "+": 0.0510, + "=": 0.0510 +}; + + +// #endregion +// ************************************* +// END MAPS +// ************************************* + +var _this = null; +function TextHelper(){ + _this = this; + + this.text = ""; + this.textArray = ""; + this.lineHeight = 0; + this.totalTextLength = 0; + this.scaler = 1.0; +} + + +// ************************************* +// START UTILITY +// ************************************* +// #region UTILITY + + +// Split the string into a text array to be operated on +function createTextArray(){ + _this.textArray = _this.text.split(""); +} + + +// Account for the text length +function adjustForScale(defaultTextLength){ + _this.totalTextLength = defaultTextLength * _this.scaler; +} + + +// #endregion +// ************************************* +// END UTILITY +// ************************************* + +// #endregion +// ************************************* +// END name +// ************************************* + +// ************************************* +// START API +// ************************************* +// #region API + + +// Set the text that needs to be calculated on +function setText(newText){ + _this.text = newText; + createTextArray(); + + return _this; +} + + +// Set the line height which helps calculate the font size +var DEFAULT_LINE_HEIGHT = 0.1; +function setLineHeight(newLineHeight){ + _this.lineHeight = newLineHeight; + _this.scaler = _this.lineHeight / DEFAULT_LINE_HEIGHT; + + return _this; +} + + +// Calculate the sign dimensions +var DEFAULT_CHAR_SIZE = 0.025; +var NUMBER = 0.05; +var DIGIT_REGEX = /\d/g; +var WHITE_SPACE_REGEX = /[ ]/g; +var SPACE = 0.018; +function getTotalTextLength(){ + // Map the string array to it's sizes + var lengthArray = _this.textArray.map(function(letter){ + if (charMap[letter]){ + return charMap[letter]; + } else if (letter.match(DIGIT_REGEX)){ + return NUMBER; + } else if (symbolMap[letter]) { + return symbolMap[letter]; + } else if (letter.match(WHITE_SPACE_REGEX)) { + return SPACE; + } else { + return DEFAULT_CHAR_SIZE; + } + }); + + // add up all the values in the array + var defaultTextLength = lengthArray.reduce(function(prev, curr){ + return prev + curr; + }, 0); + + adjustForScale(defaultTextLength); + + return _this.totalTextLength; +} + + +// #endregion +// ************************************* +// END API +// ************************************* + +TextHelper.prototype = { + setText: setText, + setLineHeight: setLineHeight, + getTotalTextLength: getTotalTextLength +}; + +module.exports = TextHelper; + +// var text = new TextHelper(); +// text.setText("lowbar"); +// text.setLineHeight("0.1"); +// text.getTotalTextLength(); \ No newline at end of file diff --git a/scripts/system/simplifiedUI/simplifiedNametag/simplifiedNametag.js b/scripts/system/simplifiedUI/simplifiedNametag/simplifiedNametag.js new file mode 100644 index 0000000000..9b4d9cfad3 --- /dev/null +++ b/scripts/system/simplifiedUI/simplifiedNametag/simplifiedNametag.js @@ -0,0 +1,95 @@ +// +// Simplified Nametag +// Created by Milad Nazeri on 2019-02-16 +// Copyright 2019 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// +// Click on someone to get a nametag for them +// +var PickRayController = Script.require('./resources/modules/pickRayController.js?' + Date.now()); +var NameTagListManager = Script.require('./resources/modules/nameTagListManager.js?' + Date.now()); +var pickRayController = new PickRayController(); +var nameTagListManager = new NameTagListManager(); + +// Handles avatar being solo'd +pickRayController + .registerEventHandler(selectAvatar) + .setType("avatar") + .setMapName("hifi_simplifiedNametag") + .setShouldDoublePress(true) + .create() + .enable(); + + +function selectAvatar(uuid, intersection) { + nameTagListManager.handleSelect(uuid, intersection); +} + + +// Handles reset of list if you change domains +function onDomainChange() { + nameTagListManager.reset(); +} + + +// Handles removing an avatar from the list if they leave the domain +function onAvatarRemoved(uuid) { + nameTagListManager.maybeRemove(uuid); +} + + +// Automatically add an avatar if they come into the domain. Mainly used for alwaysOn mode. +function onAvatarAdded(uuid) { + nameTagListManager.maybeAdd(uuid); +} + + +// Called on init +var avatarNametagMode; +function create() { + nameTagListManager.create(); + handleAvatarNametagMode(Settings.getValue("simplifiedNametag/avatarNametagMode", "on")); + + Window.domainChanged.connect(onDomainChange); + AvatarManager.avatarRemovedEvent.connect(onAvatarRemoved); + AvatarManager.avatarAddedEvent.connect(onAvatarAdded); +} + + +// Called when the script is closing +function destroy() { + nameTagListManager.destroy(); + pickRayController.destroy(); + Window.domainChanged.disconnect(onDomainChange); + AvatarManager.avatarRemovedEvent.disconnect(onAvatarRemoved); + AvatarManager.avatarAddedEvent.disconnect(onAvatarAdded); +} + + +// chose which mode you want the nametags in. On, off, or alwaysOn. +function handleAvatarNametagMode(newAvatarNameTagMode) { + avatarNametagMode = newAvatarNameTagMode; + nameTagListManager.handleAvatarNametagMode(avatarNametagMode); + Settings.setValue("simplifiedNametag/avatarNametagMode", avatarNametagMode); +} + + +// ************************************* +// START api +// ************************************* +// #region api + + +module.exports = { + create: create, + destroy: destroy, + handleAvatarNametagMode: handleAvatarNametagMode +}; + + +// #endregion +// ************************************* +// END api +// ************************************* \ No newline at end of file diff --git a/scripts/system/simplifiedUI/simplifiedUI.js b/scripts/system/simplifiedUI/simplifiedUI.js index c6181d2ad9..3efee2ce4e 100644 --- a/scripts/system/simplifiedUI/simplifiedUI.js +++ b/scripts/system/simplifiedUI/simplifiedUI.js @@ -434,8 +434,7 @@ function ensureFirstPersonCameraInHMD(isHMDMode) { } } - -var simplifiedNametag = Script.require("../simplifiedNametag/simplifiedNametag.js"); +var simplifiedNametag = Script.require("./simplifiedNametag/simplifiedNametag.js?" + Date.now()); var oldShowAudioTools; var oldShowBubbleTools; var keepExistingUIAndScriptsSetting = Settings.getValue("simplifiedUI/keepExistingUIAndScripts", false); From 06056b9531c57404d6c977139afac40d30ef5a8a Mon Sep 17 00:00:00 2001 From: milad Date: Fri, 17 May 2019 13:00:26 -0700 Subject: [PATCH 083/203] updated location in main UI --- .../resources/modules/nameTagListManager.js | 6 +++--- scripts/system/simplifiedUI/simplifiedUI.js | 3 +-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/nameTagListManager.js b/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/nameTagListManager.js index d77bbcf1b5..9e8f6c734a 100644 --- a/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/nameTagListManager.js +++ b/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/nameTagListManager.js @@ -62,7 +62,7 @@ function maybeClearInterval() { var Z_SIZE = 0.01; var LINE_HEIGHT_SCALER = 0.99; var DISTANCE_SCALER_ON = 0.35; -var DISTANCE_SCALER_ALWAYS_ON = 0.50; +var DISTANCE_SCALER_ALWAYS_ON = 0.45; var distanceScaler = DISTANCE_SCALER_ON; var userScaler = 1.0; var DEFAULT_LINE_HEIGHT = entityProps.lineHeight; @@ -250,11 +250,11 @@ var RIGHT_MARGIN_SCALER = 0.10; var TOP_MARGIN_SCALER = 0.07; var BOTTOM_MARGIN_SCALER = 0.03; var ABOVE_HEAD_OFFSET = 0.30; -var DISTANCE_SCALER_INTERPOLATION_OFFSET_ALWAYSON = 5; +var DISTANCE_SCALER_INTERPOLATION_OFFSET_ALWAYSON = 15; var DISTANCE_SCALER_INTERPOLATION_OFFSET_ON = 10; var maxDistance = MAX_RADIUS_IGNORE_METERS; var onModeScalar = 0.55; -var alwaysOnModeScalar = -0.55; +var alwaysOnModeScalar = -0.75; function makeNameTag(uuid) { var avatar = _this.avatars[uuid]; var avatarInfo = avatar.avatarInfo; diff --git a/scripts/system/simplifiedUI/simplifiedUI.js b/scripts/system/simplifiedUI/simplifiedUI.js index c6181d2ad9..b69a1d48b2 100644 --- a/scripts/system/simplifiedUI/simplifiedUI.js +++ b/scripts/system/simplifiedUI/simplifiedUI.js @@ -434,8 +434,7 @@ function ensureFirstPersonCameraInHMD(isHMDMode) { } } - -var simplifiedNametag = Script.require("../simplifiedNametag/simplifiedNametag.js"); +var simplifiedNametag = Script.require("./simplifiedNametag/simplifiedNametag.js"); var oldShowAudioTools; var oldShowBubbleTools; var keepExistingUIAndScriptsSetting = Settings.getValue("simplifiedUI/keepExistingUIAndScripts", false); From 0d80761cf00569364bd4154aa7f67363bd852e1f Mon Sep 17 00:00:00 2001 From: milad Date: Fri, 17 May 2019 13:23:03 -0700 Subject: [PATCH 084/203] added larger distance for on --- .../simplifiedNametag/resources/modules/nameTagListManager.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/nameTagListManager.js b/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/nameTagListManager.js index 9e8f6c734a..ded67745f8 100644 --- a/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/nameTagListManager.js +++ b/scripts/system/simplifiedUI/simplifiedNametag/resources/modules/nameTagListManager.js @@ -333,7 +333,7 @@ function makeNameTag(uuid) { // Check to see if the display named changed or if the distance is big enough to need a redraw. var MAX_RADIUS_IGNORE_METERS = 22; -var MAX_ON_MODE_DISTANCE = 30; +var MAX_ON_MODE_DISTANCE = 35; var CHECK_AVATAR = true; var MIN_DISTANCE = 0.2; function maybeRedraw(uuid) { From e40e34856ba78f84556022243285f4ae0fa14635 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Fri, 17 May 2019 13:28:59 -0700 Subject: [PATCH 085/203] Remove some extra menus from top bar; Only show VR button if headset connected --- .../hifi/simplifiedUI/topBar/SimplifiedTopBar.qml | 12 ++++++++++++ scripts/system/simplifiedUI/simplifiedUI.js | 3 ++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/simplifiedUI/topBar/SimplifiedTopBar.qml b/interface/resources/qml/hifi/simplifiedUI/topBar/SimplifiedTopBar.qml index a5a079b4dc..09873396fa 100644 --- a/interface/resources/qml/hifi/simplifiedUI/topBar/SimplifiedTopBar.qml +++ b/interface/resources/qml/hifi/simplifiedUI/topBar/SimplifiedTopBar.qml @@ -250,6 +250,7 @@ Rectangle { anchors.rightMargin: 14 width: 32 height: width + visible: false Image { id: displayModeImage @@ -306,6 +307,17 @@ Rectangle { } } } + + Component.onCompleted: { + // Don't show VR button unless they have a VR headset. + var displayPluginCount = Window.getDisplayPluginCount(); + for (var i = 0; i < displayPluginCount; i++) { + if (Window.isDisplayPluginHmd(i)) { + hmdButtonContainer.visible = true; + return; + } + } + } } } diff --git a/scripts/system/simplifiedUI/simplifiedUI.js b/scripts/system/simplifiedUI/simplifiedUI.js index c6181d2ad9..3917e69646 100644 --- a/scripts/system/simplifiedUI/simplifiedUI.js +++ b/scripts/system/simplifiedUI/simplifiedUI.js @@ -45,7 +45,8 @@ function runNewDefaultsTogether() { // Uncomment this out once the work is actually complete. // Until then, users are required to access some functionality from the top menu bar. //var MENU_NAMES = ["File", "Edit", "Display", "View", "Navigate", "Settings", "Developer", "Help"]; -var MENU_NAMES = ["File", "Edit", "View", "Navigate", "Help"]; +var MENU_NAMES = ["File", "Edit", "Display", "View", "Navigate", "Help", + "Settings > General...", "Settings > Controls...", "Settings > Audio...", "Settings > Graphics...", "Settings > Security..."]; var keepMenusSetting = Settings.getValue("simplifiedUI/keepMenus", false); function maybeRemoveDesktopMenu() { if (!keepMenusSetting) { From f1e8343b305c5025e511e9b6753c50c77220419c Mon Sep 17 00:00:00 2001 From: Howard Stearns Date: Fri, 17 May 2019 14:30:30 -0700 Subject: [PATCH 086/203] put DomainServerCheckIn on NodeList thread --- interface/src/Application.cpp | 13 +++---------- libraries/networking/src/NodeList.cpp | 6 ------ 2 files changed, 3 insertions(+), 16 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 7727708c0f..0dba4498d5 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1190,13 +1190,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo // setup a timer for domain-server check ins QTimer* domainCheckInTimer = new QTimer(this); - QWeakPointer nodeListWeak = nodeList; - connect(domainCheckInTimer, &QTimer::timeout, [this, nodeListWeak] { - auto nodeList = nodeListWeak.lock(); - if (!isServerlessMode() && nodeList) { - nodeList->sendDomainServerCheckIn(); - } - }); + connect(domainCheckInTimer, &QTimer::timeout, nodeList.data(), &NodeList::sendDomainServerCheckIn); domainCheckInTimer->start(DOMAIN_SERVER_CHECK_IN_MSECS); connect(this, &QCoreApplication::aboutToQuit, [domainCheckInTimer] { domainCheckInTimer->stop(); @@ -3886,6 +3880,7 @@ void Application::setIsInterstitialMode(bool interstitialMode) { } void Application::setIsServerlessMode(bool serverlessDomain) { + DependencyManager::get()->setSendDomainServerCheckInEnabled(!serverlessDomain); auto tree = getEntities()->getTree(); if (tree) { tree->setIsServerlessMode(serverlessDomain); @@ -5439,9 +5434,7 @@ void Application::init() { qCDebug(interfaceapp) << "Loaded settings"; // fire off an immediate domain-server check in now that settings are loaded - if (!isServerlessMode()) { - DependencyManager::get()->sendDomainServerCheckIn(); - } + QMetaObject::invokeMethod(DependencyManager::get().data(), "sendDomainServerCheckIn"); // This allows collision to be set up properly for shape entities supported by GeometryCache. // This is before entity setup to ensure that it's ready for whenever instance collision is initialized. diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index 3a80745115..f6d36a6023 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -292,12 +292,6 @@ void NodeList::addSetOfNodeTypesToNodeInterestSet(const NodeSet& setOfNodeTypes) void NodeList::sendDomainServerCheckIn() { - // This function is called by the server check-in timer thread - // not the NodeList thread. Calling it on the NodeList thread - // resulted in starvation of the server check-in function. - // be VERY CAREFUL modifying this code as members of NodeList - // may be called by multiple threads. - if (!_sendDomainServerCheckInEnabled) { qCDebug(networking_ice) << "Refusing to send a domain-server check in while it is disabled."; return; From 0039fb2f5493d5659cc22b3671692c5a2863298a Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Fri, 17 May 2019 14:47:38 -0700 Subject: [PATCH 087/203] attempt to fix material crash --- libraries/render-utils/src/Model.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 938cc4a485..64a46f3c1e 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -1577,9 +1577,11 @@ void Model::applyMaterialMapping() { priorityMapPerResource[shapeID] = ++_priorityMap[shapeID]; } - auto materialLoaded = [this, networkMaterialResource, shapeIDs, priorityMapPerResource, renderItemsKey, primitiveMode, useDualQuaternionSkinning, - modelMeshRenderItemIDs, modelMeshRenderItemShapes, shouldInvalidatePayloadShapeKeyMap]() { - if (networkMaterialResource->isFailed() || networkMaterialResource->parsedMaterials.names.size() == 0) { + std::weak_ptr weakSelf = shared_from_this(); + auto materialLoaded = [networkMaterialResource, shapeIDs, priorityMapPerResource, renderItemsKey, primitiveMode, useDualQuaternionSkinning, + modelMeshRenderItemIDs, modelMeshRenderItemShapes, shouldInvalidatePayloadShapeKeyMap, weakSelf]() { + std::shared_ptr self = weakSelf.lock(); + if (!self || networkMaterialResource->isFailed() || networkMaterialResource->parsedMaterials.names.size() == 0) { return; } render::Transaction transaction; @@ -1607,8 +1609,8 @@ void Model::applyMaterialMapping() { bool invalidatePayloadShapeKey = shouldInvalidatePayloadShapeKeyMap.at(meshIndex); graphics::MaterialLayer material = graphics::MaterialLayer(networkMaterial, priorityMapPerResource.at(shapeID)); { - std::unique_lock lock(_materialMappingMutex); - _materialMapping[shapeID].push_back(material); + std::unique_lock lock(self->_materialMappingMutex); + self->_materialMapping[shapeID].push_back(material); } transaction.updateItem(itemID, [material, renderItemsKey, invalidatePayloadShapeKey, primitiveMode, useDualQuaternionSkinning](ModelMeshPartPayload& data) { From 3273f46179e6267ec6d52b01f4deac45e46ea25e Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Fri, 17 May 2019 15:29:27 -0700 Subject: [PATCH 088/203] fix avatar loading spheres --- interface/src/avatar/AvatarManager.cpp | 2 +- interface/src/avatar/OtherAvatar.cpp | 2 +- .../src/avatars-renderer/Avatar.cpp | 23 ++++++++++--------- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index df620b9a08..80b9762213 100755 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -412,7 +412,7 @@ AvatarSharedPointer AvatarManager::newSharedAvatar(const QUuid& sessionUUID) { auto otherAvatar = new OtherAvatar(qApp->thread()); otherAvatar->setSessionUUID(sessionUUID); auto nodeList = DependencyManager::get(); - if (!nodeList || !nodeList->isIgnoringNode(sessionUUID)) { + if (nodeList && !nodeList->isIgnoringNode(sessionUUID)) { otherAvatar->createOrb(); } return AvatarSharedPointer(otherAvatar, [](OtherAvatar* ptr) { ptr->deleteLater(); }); diff --git a/interface/src/avatar/OtherAvatar.cpp b/interface/src/avatar/OtherAvatar.cpp index 107932d5ec..06dcd9767d 100755 --- a/interface/src/avatar/OtherAvatar.cpp +++ b/interface/src/avatar/OtherAvatar.cpp @@ -62,7 +62,7 @@ void OtherAvatar::removeOrb() { } void OtherAvatar::updateOrbPosition() { - if (_otherAvatarOrbMeshPlaceholderID.isNull()) { + if (!_otherAvatarOrbMeshPlaceholderID.isNull()) { EntityItemProperties properties; properties.setPosition(getHead()->getPosition()); DependencyManager::get()->editEntity(_otherAvatarOrbMeshPlaceholderID, properties); diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index e836ecf7eb..78481fdc2e 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1519,18 +1519,19 @@ void Avatar::scaleVectorRelativeToPosition(glm::vec3 &positionToScale) const { } void Avatar::setSkeletonModelURL(const QUrl& skeletonModelURL) { - AvatarData::setSkeletonModelURL(skeletonModelURL); - if (QThread::currentThread() == thread()) { - - if (!isMyAvatar() && !DependencyManager::get()->isIgnoringNode(getSessionUUID())) { - createOrb(); - } - - _skeletonModel->setURL(_skeletonModelURL); - indicateLoadingStatus(LoadingStatus::LoadModel); - } else { - QMetaObject::invokeMethod(_skeletonModel.get(), "setURL", Qt::QueuedConnection, Q_ARG(QUrl, _skeletonModelURL)); + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "setSkeletonModelURL", Q_ARG(const QUrl&, skeletonModelURL)); + return; } + + AvatarData::setSkeletonModelURL(skeletonModelURL); + + if (!isMyAvatar() && !DependencyManager::get()->isIgnoringNode(getSessionUUID())) { + createOrb(); + } + indicateLoadingStatus(LoadingStatus::LoadModel); + + _skeletonModel->setURL(_skeletonModelURL); } void Avatar::setModelURLFinished(bool success) { From 72a9017fdfb2268cb48b8cbd98c63f7794e7dc81 Mon Sep 17 00:00:00 2001 From: Howard Stearns Date: Fri, 17 May 2019 15:30:54 -0700 Subject: [PATCH 089/203] put back modified version of earlier comment --- libraries/networking/src/NodeList.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index f6d36a6023..b3862e4252 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -292,6 +292,13 @@ void NodeList::addSetOfNodeTypesToNodeInterestSet(const NodeSet& setOfNodeTypes) void NodeList::sendDomainServerCheckIn() { + // On ThreadedAssignments (assignment clients), this function + // is called by the server check-in timer thread + // not the NodeList thread. Calling it on the NodeList thread + // resulted in starvation of the server check-in function. + // be VERY CAREFUL modifying this code as members of NodeList + // may be called by multiple threads. + if (!_sendDomainServerCheckInEnabled) { qCDebug(networking_ice) << "Refusing to send a domain-server check in while it is disabled."; return; From 15bdb66943c664a3c8f3f32101083527abaa9804 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Fri, 17 May 2019 17:25:48 -0700 Subject: [PATCH 090/203] Integrate Status into top bar; improve Audio settings; improve spacing between settings --- .../simplifiedUI/settingsApp/audio/Audio.qml | 12 +- .../settingsApp/general/General.qml | 7 +- .../hifi/simplifiedUI/settingsApp/vr/VR.qml | 9 +- .../SimplifiedConstants.qml | 7 +- .../simplifiedControls/RadioButton.qml | 2 +- .../simplifiedUI/topBar/SimplifiedTopBar.qml | 54 ++++ .../simplifiedUI/topBar/images/status.svg | 3 + .../simplifiedStatusIndicator.js | 244 ++++++++++++++++++ scripts/system/simplifiedUI/simplifiedUI.js | 32 +++ 9 files changed, 356 insertions(+), 14 deletions(-) create mode 100644 interface/resources/qml/hifi/simplifiedUI/topBar/images/status.svg create mode 100644 scripts/system/simplifiedUI/simplifiedStatusIndicator/simplifiedStatusIndicator.js diff --git a/interface/resources/qml/hifi/simplifiedUI/settingsApp/audio/Audio.qml b/interface/resources/qml/hifi/simplifiedUI/settingsApp/audio/Audio.qml index 840a2bb69a..da924615e3 100644 --- a/interface/resources/qml/hifi/simplifiedUI/settingsApp/audio/Audio.qml +++ b/interface/resources/qml/hifi/simplifiedUI/settingsApp/audio/Audio.qml @@ -19,8 +19,8 @@ Flickable { id: root contentWidth: parent.width contentHeight: audioColumnLayout.height - topMargin: 16 - bottomMargin: 16 + topMargin: 24 + bottomMargin: 24 clip: true function changePeakValuesEnabled(enabled) { @@ -189,7 +189,7 @@ Flickable { Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin interactive: false height: contentItem.height - spacing: 4 + spacing: simplifiedUI.margins.settings.spacingBetweenRadiobuttons clip: true model: AudioScriptingInterface.devices.input delegate: Item { @@ -200,6 +200,8 @@ Flickable { id: inputDeviceCheckbox anchors.left: parent.left width: parent.width - inputLevel.width + height: paintedHeight + wrapLabel: false checked: selectedDesktop text: model.devicename ButtonGroup.group: inputDeviceButtonGroup @@ -288,7 +290,7 @@ Flickable { Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin interactive: false height: contentItem.height - spacing: 4 + spacing: simplifiedUI.margins.settings.spacingBetweenRadiobuttons clip: true model: AudioScriptingInterface.devices.output delegate: Item { @@ -299,8 +301,10 @@ Flickable { id: outputDeviceCheckbox anchors.left: parent.left width: parent.width + height: paintedHeight checked: selectedDesktop text: model.devicename + wrapLabel: false ButtonGroup.group: outputDeviceButtonGroup onClicked: { AudioScriptingInterface.setOutputDevice(model.info, false); // `false` argument for Desktop mode setting diff --git a/interface/resources/qml/hifi/simplifiedUI/settingsApp/general/General.qml b/interface/resources/qml/hifi/simplifiedUI/settingsApp/general/General.qml index de5e75b7e5..e32890a2dd 100644 --- a/interface/resources/qml/hifi/simplifiedUI/settingsApp/general/General.qml +++ b/interface/resources/qml/hifi/simplifiedUI/settingsApp/general/General.qml @@ -20,8 +20,8 @@ Flickable { id: root contentWidth: parent.width contentHeight: generalColumnLayout.height - topMargin: 16 - bottomMargin: 16 + topMargin: 24 + bottomMargin: 24 clip: true onAvatarNametagModeChanged: { @@ -63,6 +63,7 @@ Flickable { ColumnLayout { id: avatarNameTagsRadioButtonGroup Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin + spacing: simplifiedUI.margins.settings.spacingBetweenRadiobuttons SimplifiedControls.RadioButton { id: avatarNameTagsOff @@ -110,6 +111,7 @@ Flickable { ColumnLayout { id: performanceRadioButtonGroup Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin + spacing: simplifiedUI.margins.settings.spacingBetweenRadiobuttons SimplifiedControls.RadioButton { id: performanceLow @@ -157,6 +159,7 @@ Flickable { ColumnLayout { id: cameraRadioButtonGroup Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin + spacing: simplifiedUI.margins.settings.spacingBetweenRadiobuttons SimplifiedControls.RadioButton { id: firstPerson diff --git a/interface/resources/qml/hifi/simplifiedUI/settingsApp/vr/VR.qml b/interface/resources/qml/hifi/simplifiedUI/settingsApp/vr/VR.qml index a462af0722..96dbc5e180 100644 --- a/interface/resources/qml/hifi/simplifiedUI/settingsApp/vr/VR.qml +++ b/interface/resources/qml/hifi/simplifiedUI/settingsApp/vr/VR.qml @@ -19,8 +19,8 @@ Flickable { id: root contentWidth: parent.width contentHeight: vrColumnLayout.height - topMargin: 16 - bottomMargin: 16 + topMargin: 24 + bottomMargin: 24 clip: true function changePeakValuesEnabled(enabled) { @@ -70,6 +70,7 @@ Flickable { id: controlsRadioButtonGroup width: parent.width Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin + spacing: simplifiedUI.margins.settings.spacingBetweenRadiobuttons ButtonGroup { id: controlsButtonGroup } @@ -202,7 +203,7 @@ Flickable { Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin interactive: false height: contentItem.height - spacing: 4 + spacing: simplifiedUI.margins.settings.spacingBetweenRadiobuttons clip: true model: AudioScriptingInterface.devices.input delegate: Item { @@ -301,7 +302,7 @@ Flickable { Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin interactive: false height: contentItem.height - spacing: 4 + spacing: simplifiedUI.margins.settings.spacingBetweenRadiobuttons clip: true model: AudioScriptingInterface.devices.output delegate: Item { diff --git a/interface/resources/qml/hifi/simplifiedUI/simplifiedConstants/SimplifiedConstants.qml b/interface/resources/qml/hifi/simplifiedUI/simplifiedConstants/SimplifiedConstants.qml index 5ccc1a7e5c..5d71d8bdb2 100644 --- a/interface/resources/qml/hifi/simplifiedUI/simplifiedConstants/SimplifiedConstants.qml +++ b/interface/resources/qml/hifi/simplifiedUI/simplifiedConstants/SimplifiedConstants.qml @@ -182,9 +182,10 @@ QtObject { } readonly property QtObject settings: QtObject { - property real subtitleTopMargin: 2 - property real settingsGroupTopMargin: 10 - property real spacingBetweenSettings: 48 + property int subtitleTopMargin: 2 + property int settingsGroupTopMargin: 24 + property int spacingBetweenSettings: 48 + property int spacingBetweenRadiobuttons: 14 } } diff --git a/interface/resources/qml/hifi/simplifiedUI/simplifiedControls/RadioButton.qml b/interface/resources/qml/hifi/simplifiedUI/simplifiedControls/RadioButton.qml index 59c4fa26e4..43d4aaee33 100644 --- a/interface/resources/qml/hifi/simplifiedUI/simplifiedControls/RadioButton.qml +++ b/interface/resources/qml/hifi/simplifiedUI/simplifiedControls/RadioButton.qml @@ -87,7 +87,6 @@ RadioButton { contentItem: Text { id: radioButtonLabel - height: root.radioButtonRadius font.pixelSize: 14 font.family: "Graphik" font.weight: Font.Normal @@ -99,5 +98,6 @@ RadioButton { enabled: root.enabled verticalAlignment: Text.AlignVCenter leftPadding: radioButtonIndicator.width + root.labelLeftMargin + topPadding: -3 // For perfect alignment when using Graphik } } diff --git a/interface/resources/qml/hifi/simplifiedUI/topBar/SimplifiedTopBar.qml b/interface/resources/qml/hifi/simplifiedUI/topBar/SimplifiedTopBar.qml index 09873396fa..ae50a746b6 100644 --- a/interface/resources/qml/hifi/simplifiedUI/topBar/SimplifiedTopBar.qml +++ b/interface/resources/qml/hifi/simplifiedUI/topBar/SimplifiedTopBar.qml @@ -242,6 +242,56 @@ Rectangle { } + Item { + id: statusButtonContainer + anchors.verticalCenter: parent.verticalCenter + anchors.left: outputDeviceButtonContainer.right + anchors.leftMargin: 2 + width: 32 + height: width + + Rectangle { + id: statusButton + property string currentStatus: "" + anchors.centerIn: parent + width: 20 + height: width + radius: width/2 + visible: false + } + + ColorOverlay { + anchors.fill: statusButton + opacity: statusButtonMouseArea.containsMouse ? 1.0 : 0.7 + source: statusButton + color: if (statusButton.currentStatus === "busy") { + "red" + } else if (statusButton.currentStatus === "available") { + "green" + } else { + "yellow" + } + } + + MouseArea { + id: statusButtonMouseArea + anchors.fill: parent + hoverEnabled: true + onEntered: { + Tablet.playSound(TabletEnums.ButtonHover); + } + onClicked: { + Tablet.playSound(TabletEnums.ButtonClick); + + sendToScript({ + "source": "SimplifiedTopBar.qml", + "method": "toggleStatus" + }); + } + } + } + + Item { id: hmdButtonContainer @@ -401,6 +451,10 @@ Rectangle { outputDeviceButton.outputMuted = message.data.outputMuted; break; + case "updateStatusButton": + statusButton.currentStatus = message.data.currentStatus; + break; + default: console.log('SimplifiedTopBar.qml: Unrecognized message from JS'); break; diff --git a/interface/resources/qml/hifi/simplifiedUI/topBar/images/status.svg b/interface/resources/qml/hifi/simplifiedUI/topBar/images/status.svg new file mode 100644 index 0000000000..ebd844c471 --- /dev/null +++ b/interface/resources/qml/hifi/simplifiedUI/topBar/images/status.svg @@ -0,0 +1,3 @@ + + + diff --git a/scripts/system/simplifiedUI/simplifiedStatusIndicator/simplifiedStatusIndicator.js b/scripts/system/simplifiedUI/simplifiedStatusIndicator/simplifiedStatusIndicator.js new file mode 100644 index 0000000000..a56e9f3a24 --- /dev/null +++ b/scripts/system/simplifiedUI/simplifiedStatusIndicator/simplifiedStatusIndicator.js @@ -0,0 +1,244 @@ +// +// simplifiedStatusIndicator.js +// +// Created by Robin Wilson on 2019-05-17 +// Copyright 2019 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html + + +function simplifiedStatusIndicator(properties) { + var that = this; + var DEBUG = false; + + // #region HEARTBEAT + + // Send heartbeat with updates to database + // When this stops, the database will set status to offline + var HEARTBEAT_TIMEOUT_MS = 5000, + heartbeat; + function startHeartbeatTimer() { + if (heartbeat) { + Script.clearTimeout(heartbeat); + heartbeat = false; + } + + heartbeat = Script.setTimeout(function() { + heartbeat = false; + getStatus(setStatus); + }, HEARTBEAT_TIMEOUT_MS); + } + + // #endregion HEARTBEAT + + + // #region SEND/GET STATUS REQUEST + + function setStatusExternally(newStatus) { + if (!newStatus) { + return; + } + + setStatus(newStatus); + } + + + var request = Script.require('request').request, + REQUEST_URL = "https://highfidelity.co/api/statusIndicator/"; + function setStatus(newStatus) { + if (heartbeat) { + Script.clearTimeout(heartbeat); + heartbeat = false; + } + + if (newStatus && currentStatus !== newStatus) { + currentStatus = newStatus; + that.statusChanged(); + } + + var displayNameToSend = MyAvatar.sessionDisplayName; + queryParamString += currentStatus; + if (displayNameToSend === "") { + displayNameToSend = MyAvatar.displayName; + } + + var queryParamString = "type=heartbeat"; + queryParamString += "&username=" + AccountServices.username; + queryParamString += "&displayName=" + displayNameToSend; + queryParamString += "&status="; + queryParamString += currentStatus; + + var uri = REQUEST_URL + "?" + queryParamString; + + if (DEBUG) { + console.log("setStatus: " + uri); + } + + request({ + uri: uri + }, function (error, response) { + startHeartbeatTimer(); + + if (error || !response || response.status !== "success") { + console.error("Error with setStatus: " + JSON.stringify(response)); + return; + } + }); + } + + // Get status from database + function getStatus(callback) { + var queryParamString = "type=getStatus"; + queryParamString += "&username=" + AccountServices.username; + + var uri = REQUEST_URL + "?" + queryParamString; + + if (DEBUG) { + console.log("getStatus: " + uri); + } + + request({ + uri: uri + }, function (error, response) { + if (error || !response || response.status !== "success") { + console.error("Error with getStatus: " + JSON.stringify(response)); + } else if (response.data.userStatus.toLowerCase() !== "offline") { + if (response.data.userStatus !== currentStatus) { + currentStatus = response.data.userStatus; + that.statusChanged(); + } + } + + if (callback) { + callback(); + } + }); + } + + + function getLocalStatus() { + return currentStatus; + } + + // #endregion SEND/GET STATUS REQUEST + + + // #region SIGNALS + + var currentStatus = "available"; // Default is available + function toggleStatus() { + if (currentStatus === "busy") { + currentStatus = "available"; + // Else if current status is "available" OR anything else (custom) + } else { + currentStatus = "busy"; + } + + that.statusChanged(); + + setStatus(); + } + + + // When avatar becomes active from being away + // Set status back to previousStatus + function onWentActive() { + if (currentStatus !== previousStatus) { + currentStatus = previousStatus; + that.statusChanged(); + } + setStatus(); + } + + + // When avatar goes away, set status to busy + var previousStatus; + function onWentAway() { + previousStatus = currentStatus; + if (currentStatus !== "busy") { + currentStatus = "busy"; + that.statusChanged(); + } + setStatus(); + } + + + // Domain changed update avatar location + function onDomainChanged() { + var queryParamString = "type=updateEmployee"; + queryParamString += "&username=" + AccountServices.username; + queryParamString += "&location=unknown"; + + var uri = REQUEST_URL + "?" + queryParamString; + + if (DEBUG) { + console.log("simplifiedStatusIndicator onDomainChanged: " + uri); + } + + request({ + uri: uri + }, function (error, response) { + if (error || !response || response.status !== "success") { + console.error("Error with onDomainChanged: " + JSON.stringify(response)); + } else { + // successfully sent updateLocation + if (DEBUG) { + console.log("Successfully updated location after domain change."); + } + } + }); + } + + + function statusChanged() { + + } + + // #endregion SIGNALS + + + // #region APP LIFETIME + + // Creates the app button and sets up signals and hearbeat + function startup() { + MyAvatar.wentAway.connect(onWentAway); + MyAvatar.wentActive.connect(onWentActive); + MyAvatar.displayNameChanged.connect(setStatus); + Window.domainChanged.connect(onDomainChanged); + + getStatus(setStatus); + } + + + // Cleans up timeouts, signals, and overlays + function unload() { + MyAvatar.wentAway.disconnect(onWentAway); + MyAvatar.wentActive.disconnect(onWentActive); + MyAvatar.displayNameChanged.disconnect(setStatus); + Window.domainChanged.disconnect(onDomainChanged); + if (heartbeat) { + Script.clearTimeout(heartbeat); + heartbeat = false; + } + } + + // #endregion APP LIFETIME + + that.startup = startup; + that.unload = unload; + that.toggleStatus = toggleStatus; + that.setStatus = setStatus; + that.getLocalStatus = getLocalStatus; + that.statusChanged = statusChanged; + + // Overwrite with the given properties + var overwriteableKeys = ["statusChanged"]; + Object.keys(properties).forEach(function (key) { + if (overwriteableKeys.indexOf(key) > -1) { + that[key] = properties[key]; + } + }); +} + +module.exports = simplifiedStatusIndicator; \ No newline at end of file diff --git a/scripts/system/simplifiedUI/simplifiedUI.js b/scripts/system/simplifiedUI/simplifiedUI.js index c3556a1fbf..f208fcaf1e 100644 --- a/scripts/system/simplifiedUI/simplifiedUI.js +++ b/scripts/system/simplifiedUI/simplifiedUI.js @@ -276,6 +276,11 @@ function setOutputMuted(outputMuted) { } +function toggleStatus() { + +} + + var TOP_BAR_MESSAGE_SOURCE = "SimplifiedTopBar.qml"; function onMessageFromTopBar(message) { if (message.source !== TOP_BAR_MESSAGE_SOURCE) { @@ -295,6 +300,10 @@ function onMessageFromTopBar(message) { setOutputMuted(message.data.outputMuted); break; + case "toggleStatus": + si.toggleStatus(); + break; + default: console.log("Unrecognized message from " + TOP_BAR_MESSAGE_SOURCE + ": " + JSON.stringify(message)); break; @@ -435,7 +444,25 @@ function ensureFirstPersonCameraInHMD(isHMDMode) { } } + +function onStatusChanged() { + var currentStatus = si.getLocalStatus(); + + if (topBarWindow) { + topBarWindow.sendToQml({ + "source": "simplifiedUI.js", + "method": "updateStatusButton", + "data": { + "currentStatus": currentStatus + } + }); + } +} + + var simplifiedNametag = Script.require("./simplifiedNametag/simplifiedNametag.js"); +var SimplifiedStatusIndicator = Script.require("./simplifiedStatusIndicator/simplifiedStatusIndicator.js"); +var si; var oldShowAudioTools; var oldShowBubbleTools; var keepExistingUIAndScriptsSetting = Settings.getValue("simplifiedUI/keepExistingUIAndScripts", false); @@ -456,6 +483,10 @@ function startup() { loadSimplifiedTopBar(); simplifiedNametag.create(); + si = new SimplifiedStatusIndicator({ + statusChanged: onStatusChanged + }); + si.startup(); updateInputDeviceMutedOverlay(Audio.muted); updateOutputDeviceMutedOverlay(isOutputMuted()); Audio.mutedDesktopChanged.connect(onDesktopInputDeviceMutedChanged); @@ -506,6 +537,7 @@ function shutdown() { maybeDeleteOutputDeviceMutedOverlay(); simplifiedNametag.destroy(); + si.unload(); Audio.mutedDesktopChanged.disconnect(onDesktopInputDeviceMutedChanged); Window.geometryChanged.disconnect(onGeometryChanged); From 528a64c6188f49a9c7089deaf624504ba4991c7a Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Sat, 18 May 2019 06:45:25 -0700 Subject: [PATCH 091/203] hack QT_CMAKE_PREFIX_PATH for Jenkins macos builds --- CMakeLists.txt | 9 +++++++-- cmake/macros/SetupQt.cmake | 8 +++++++- hifi_vcpkg.py | 19 +++++++++++++++---- prebuild.py | 1 + 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ae2183e427..1f6cffb7c1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,14 +17,19 @@ if (APPLE) set(ENV{MACOSX_DEPLOYMENT_TARGET} 10.9) endif() +set(RELEASE_TYPE "$ENV{RELEASE_TYPE}") +if ((NOT "${RELEASE_TYPE}" STREQUAL "PRODUCTION") AND (NOT "${RELEASE_TYPE}" STREQUAL "PR")) + set(RELEASE_TYPE "DEV") +endif() + if (HIFI_ANDROID) execute_process( - COMMAND ${HIFI_PYTHON_EXEC} ${CMAKE_CURRENT_SOURCE_DIR}/prebuild.py --android ${HIFI_ANDROID_APP} --build-root ${CMAKE_BINARY_DIR} + COMMAND ${HIFI_PYTHON_EXEC} ${CMAKE_CURRENT_SOURCE_DIR}/prebuild.py --release-type ${RELEASE_TYPE} --android ${HIFI_ANDROID_APP} --build-root ${CMAKE_BINARY_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) else() execute_process( - COMMAND ${HIFI_PYTHON_EXEC} ${CMAKE_CURRENT_SOURCE_DIR}/prebuild.py --build-root ${CMAKE_BINARY_DIR} + COMMAND ${HIFI_PYTHON_EXEC} ${CMAKE_CURRENT_SOURCE_DIR}/prebuild.py --release-type ${RELEASE_TYPE} --build-root ${CMAKE_BINARY_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) # squelch the Policy CMP0074 warning without requiring an update to cmake 3.12. diff --git a/cmake/macros/SetupQt.cmake b/cmake/macros/SetupQt.cmake index 316172a204..45ddd87035 100644 --- a/cmake/macros/SetupQt.cmake +++ b/cmake/macros/SetupQt.cmake @@ -54,7 +54,13 @@ macro(setup_qt) if (NOT DEFINED ENV{QT_CMAKE_PREFIX_PATH} OR NOT DEV_BUILD) # HACK we ignore QT_CMAKE_PREFIX_PATH for PRODUCTION and PR builds # so we can punt updating the automated build OS images while switching to vcpkg for Qt - set(QT_CMAKE_PREFIX_PATH ${VCPKG_QT_CMAKE_PREFIX_PATH}) + if (APPLE AND NOT DEV_BUILD) + # DOUBLE HACK for Jenkins + macos build: always store qt5 in /var/tmp/ + # because that is where the manually-edited hard-coded path thinks it is + set(QT_CMAKE_PREFIX_PATH "/var/tmp/qt5-install/lib/cmake") + else() + set(QT_CMAKE_PREFIX_PATH ${VCPKG_QT_CMAKE_PREFIX_PATH}) + endif() else() set(QT_CMAKE_PREFIX_PATH $ENV{QT_CMAKE_PREFIX_PATH}) endif() diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index 77e0c70ecf..3df714e6f9 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -213,6 +213,17 @@ endif() with open(self.tagFile, 'w') as f: f.write(self.tagContents) + def getQt5InstallPath(self): + qt5InstallPath = os.path.join(self.path, 'installed', 'qt5-install') + if platform.system() == "Darwin" and self.args.release_type != "DEV": + # HACK for MacOS Jenkins PRODUCTION and PR builds during Qt-5.12.3 transition + # we always supply /var/tmp/qt5-install for QT_CMAKE_PREFIX_PATH + qt5InstallPath = "/var/tmp/qt5-install" + elif self.args.android: + precompiled = os.path.realpath(self.androidPackagePath) + qt5InstallPath = os.path.realpath(os.path.join(precompiled, 'qt')) + return qt5InstallPath + def writeConfig(self): print("Writing cmake config to {}".format(self.configFilePath)) # Write out the configuration for use by CMake @@ -221,14 +232,13 @@ endif() toolsPath = os.path.join(self.path, 'installed', self.hostTriplet, 'tools') cmakeTemplate = VcpkgRepo.CMAKE_TEMPLATE - qtCmakePrefixPath = os.path.join(self.path, 'installed', 'qt5-install/lib/cmake') if self.args.android: precompiled = os.path.realpath(self.androidPackagePath) cmakeTemplate += 'set(HIFI_ANDROID_PRECOMPILED "{}")\n'.format(precompiled) - qtCmakePrefixPath = os.path.realpath(os.path.join(precompiled, 'qt/lib/cmake')) else: cmakeTemplate += VcpkgRepo.CMAKE_TEMPLATE_NON_ANDROID + qtCmakePrefixPath = os.path.join(self.getQt5InstallPath(), "lib/cmake") cmakeConfig = cmakeTemplate.format(cmakeScript, cmakeScript, installPath, toolsPath, qtCmakePrefixPath).replace('\\', '/') with open(self.configFilePath, 'w') as f: f.write(cmakeConfig) @@ -241,9 +251,10 @@ endif() def installQt(self): - if not os.path.isdir(os.path.join(self.path, 'installed', 'qt5-install')): + qt5InstallPath = self.getQt5InstallPath() + if not os.path.isdir(qt5InstallPath): print ('Downloading Qt from AWS') - dest = os.path.join(self.path, 'installed') + dest, tail = os.path.split(qt5InstallPath) url = 'NOT DEFINED' if platform.system() == 'Windows': diff --git a/prebuild.py b/prebuild.py index b401c94e7f..1fb96290b3 100644 --- a/prebuild.py +++ b/prebuild.py @@ -91,6 +91,7 @@ def parse_args(): parser.add_argument('--debug', action='store_true') parser.add_argument('--force-bootstrap', action='store_true') parser.add_argument('--force-build', action='store_true') + parser.add_argument('--release-type', type=str, default="DEV", help="DEV, PR, or PRODUCTION") parser.add_argument('--vcpkg-root', type=str, help='The location of the vcpkg distribution') parser.add_argument('--build-root', required=True, type=str, help='The location of the cmake build') parser.add_argument('--ports-path', type=str, default=defaultPortsPath) From edaede041253ea0fe0e565b7a964a899d635c257 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Wed, 15 May 2019 07:25:46 -0700 Subject: [PATCH 092/203] debian directory for building debian-style package --- debian/changelog | 5 ++ debian/compat | 1 + debian/control | 15 +++++ debian/copyright | 23 ++++++++ debian/hifi-interface-docs.docs | 2 + debian/hifi-interface.dirs | 1 + debian/patches/hifi_use_system_qt.diff | 76 ++++++++++++++++++++++++++ debian/patches/series | 1 + debian/rules | 24 ++++++++ debian/source/format | 1 + debian/source/include-binaries | 6 ++ 11 files changed, 155 insertions(+) create mode 100644 debian/changelog create mode 100644 debian/compat create mode 100644 debian/control create mode 100644 debian/copyright create mode 100644 debian/hifi-interface-docs.docs create mode 100644 debian/hifi-interface.dirs create mode 100644 debian/patches/hifi_use_system_qt.diff create mode 100644 debian/patches/series create mode 100755 debian/rules create mode 100644 debian/source/format create mode 100644 debian/source/include-binaries diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000000..9e55d78ff0 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,5 @@ +hifi-interface (84-1) unstable; urgency=medium + + * Initial release + + -- Seth Alves Tue, 14 May 2019 19:45:31 -0700 diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000000..b4de394767 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +11 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000000..15d354d0b3 --- /dev/null +++ b/debian/control @@ -0,0 +1,15 @@ +Source: hifi-interface +Section: comm +Priority: optional +Maintainer: Seth Alves +Build-Depends: debhelper (>= 11), cmake +Standards-Version: 4.1.3 +Homepage: https://www.highfidelity.com/ +Vcs-Browser: https://github.com/highfidelity/hifi +Vcs-Git: https://github.com/highfidelity/hifi.git + +Package: hifi-interface +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, libqt5quick5, libqt5quickcontrols2-5, libqt5quickwidgets5, qml-module-qtquick-controls, qml-module-qtquick-controls2, qml-module-qtquick-dialogs, libqt5webchannel5, qml-module-qtwebchannel, qml-module-qtwebengine, qml-module-qt-labs-folderlistmodel, qml-module-qt-labs-settings +Description: High Fidelity allows creation and sharing of VR experiences. + The High Fidelity metaverse provides built-in social features, including avatar interactions, spatialized audio and interactive physics. Additionally, you have the ability to import any 3D object into your virtual environment. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000000..4ead9ced4e --- /dev/null +++ b/debian/copyright @@ -0,0 +1,23 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: hifi-interface +Source: https://github.com/highfidelity/hifi + +Files: * +Copyright: 2013-2019, High Fidelity, Inc. +License: Apache-2.0 + +License: Apache-2.0 + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + . + https://www.apache.org/licenses/LICENSE-2.0 + . + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + . + On Debian systems, the complete text of the Apache version 2.0 license + can be found in "/usr/share/common-licenses/Apache-2.0". diff --git a/debian/hifi-interface-docs.docs b/debian/hifi-interface-docs.docs new file mode 100644 index 0000000000..efea0a6a24 --- /dev/null +++ b/debian/hifi-interface-docs.docs @@ -0,0 +1,2 @@ +README.Debian +README.source diff --git a/debian/hifi-interface.dirs b/debian/hifi-interface.dirs new file mode 100644 index 0000000000..ad46df23bf --- /dev/null +++ b/debian/hifi-interface.dirs @@ -0,0 +1 @@ +opt/hifi/interface/ diff --git a/debian/patches/hifi_use_system_qt.diff b/debian/patches/hifi_use_system_qt.diff new file mode 100644 index 0000000000..2bd7009928 --- /dev/null +++ b/debian/patches/hifi_use_system_qt.diff @@ -0,0 +1,76 @@ +Index: hifi-interface-84/cmake/macros/SetupQt.cmake +=================================================================== +--- hifi-interface-84.orig/cmake/macros/SetupQt.cmake ++++ hifi-interface-84/cmake/macros/SetupQt.cmake +@@ -18,19 +18,19 @@ function(calculate_default_qt_dir _QT_VE + elseif(WIN32) + set(QT_DEFAULT_ARCH "msvc2017_64") + else() +- set(QT_DEFAULT_ARCH "gcc_64") ++ set(QT_DEFAULT_ARCH "x86_64-linux-gnu") + endif() + + if (WIN32 OR (ANDROID AND ("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Windows"))) + set(QT_DEFAULT_ROOT "c:/Qt") + else() +- set(QT_DEFAULT_ROOT "$ENV{HOME}/Qt") ++ set(QT_DEFAULT_ROOT "/usr/lib") + endif() + + set_from_env(QT_ROOT QT_ROOT ${QT_DEFAULT_ROOT}) + set_from_env(QT_ARCH QT_ARCH ${QT_DEFAULT_ARCH}) + +- set(${_RESULT_NAME} "${QT_ROOT}/${_QT_VERSION}/${QT_ARCH}" PARENT_SCOPE) ++ set(${_RESULT_NAME} "${QT_ROOT}/${QT_ARCH}" PARENT_SCOPE) + endfunction() + + # Sets the QT_CMAKE_PREFIX_PATH and QT_DIR variables +@@ -44,7 +44,7 @@ macro(setup_qt) + endif() + if (("QT_CMAKE_PREFIX_PATH" STREQUAL "") OR (NOT EXISTS "${QT_CMAKE_PREFIX_PATH}")) + calculate_default_qt_dir(${QT_VERSION} QT_DIR) +- set(QT_CMAKE_PREFIX_PATH "${QT_DIR}/lib/cmake") ++ set(QT_CMAKE_PREFIX_PATH "${QT_DIR}/cmake") + else() + # figure out where the qt dir is + get_filename_component(QT_DIR "${QT_CMAKE_PREFIX_PATH}/../../" ABSOLUTE) +Index: hifi-interface-84/interface/CMakeLists.txt +=================================================================== +--- hifi-interface-84.orig/interface/CMakeLists.txt ++++ hifi-interface-84/interface/CMakeLists.txt +@@ -35,7 +35,7 @@ else () + add_custom_command( + OUTPUT ${RESOURCES_RCC} + DEPENDS ${RESOURCES_QRC} ${GENERATE_QRC_DEPENDS} +- COMMAND "${QT_DIR}/bin/rcc" ++ COMMAND "rcc" + ARGS ${RESOURCES_QRC} -binary -o ${RESOURCES_RCC} + ) + endif() +@@ -399,6 +399,13 @@ else() + + optional_win_executable_signing() + endif() ++ ++ install( ++ DIRECTORY "$/" ++ DESTINATION ${INTERFACE_INSTALL_DIR} ++ COMPONENT ${CLIENT_COMPONENT} ++ ) ++ + endif() + + if (SCRIPTS_INSTALL_DIR) +Index: hifi-interface-84/tools/nitpick/CMakeLists.txt +=================================================================== +--- hifi-interface-84.orig/tools/nitpick/CMakeLists.txt ++++ hifi-interface-84/tools/nitpick/CMakeLists.txt +@@ -12,7 +12,7 @@ generate_qrc(OUTPUT ${RESOURCES_QRC} PAT + add_custom_command( + OUTPUT ${RESOURCES_RCC} + DEPENDS ${RESOURCES_QRC} ${GENERATE_QRC_DEPENDS} +- COMMAND "${QT_DIR}/bin/rcc" ++ COMMAND "rcc" + ARGS ${RESOURCES_QRC} -binary -o ${RESOURCES_RCC} + ) + diff --git a/debian/patches/series b/debian/patches/series new file mode 100644 index 0000000000..65ac370483 --- /dev/null +++ b/debian/patches/series @@ -0,0 +1 @@ +hifi_use_system_qt.diff diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000000..8a56eecdfb --- /dev/null +++ b/debian/rules @@ -0,0 +1,24 @@ +#!/usr/bin/make -f + +%: + dh $@ + + +override_dh_auto_configure: + mkdir obj-$(DEB_TARGET_MULTIARCH) + (cd obj-$(DEB_TARGET_MULTIARCH) && cmake .. -DCMAKE_INSTALL_PREFIX=/opt/hifi -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON "-GUnix Makefiles" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCLIENT_ONLY=ON -DDOWNLOAD_SERVERLESS_CONTENT=ON -DCMAKE_CXX_COMPILER=/usr/lib/llvm-7/bin/clang\+\+ -DOpenGL_GL_PREFERENCE=GLVND) + +override_dh_auto_build: + (cd obj-$(DEB_TARGET_MULTIARCH) && make -j4) + +S=obj-$(DEB_TARGET_MULTIARCH) +I=debian/hifi-interface/opt/hifi/interface + +override_dh_auto_install: + cp $(S)/interface/interface $(I) + cp $(S)/ext/makefiles/steamworks/project/src/steamworks/redistributable_bin/linux64/libsteam_api.so $(I) + cp $(S)/ext/makefiles/quazip/project/build/libquazip5.so.1 $(I) + cp $(S)/ext/makefiles/polyvox/project/build/library/PolyVoxCore/libPolyVoxCore.so.0 $(I) + cp $(S)/interface/resources.rcc $(I) + cp -r $(S)/interface/scripts $(I)/scripts + cp -r $(S)/interface/plugins $(I)/plugins diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000000..163aaf8d82 --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/debian/source/include-binaries b/debian/source/include-binaries new file mode 100644 index 0000000000..0d2847f83c --- /dev/null +++ b/debian/source/include-binaries @@ -0,0 +1,6 @@ +interface/compiledResources/resources.rcc +tools/nitpick/compiledResources/resources.rcc +__pycache__/hifi_android.cpython-37.pyc +__pycache__/hifi_singleton.cpython-37.pyc +__pycache__/hifi_utils.cpython-37.pyc +__pycache__/hifi_vcpkg.cpython-37.pyc From 9b78edd0625b3d7d9eb0ff85e157acd0890cd21f Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Mon, 20 May 2019 11:50:09 -0400 Subject: [PATCH 093/203] more correct qt.conf for Linux and MacOS dev environment --- interface/CMakeLists.txt | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index 85364d08d2..0b94c4296d 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -403,25 +403,16 @@ endif() if (APPLE OR UNIX) # need to worry about hard-coded search paths in the Qt libraries - set(QT_LIB_PATH "${VCPKG_INSTALL_ROOT}/../qt5-install") + set(QT_LIB_PATH "${QT_CMAKE_PREFIX_PATH}/../..") if (APPLE) set(QT_CONF_FILE "${RESOURCES_DEV_DIR}/../Resources/qt.conf") else () set(QT_CONF_FILE "${INTERFACE_EXEC_DIR}/qt.conf") endif () - if (DEFINED ENV{QT_CMAKE_PREFIX_PATH}) - # using VCPKG-installed Qt rather than a custom install - # TODO: erase old qt.conf file if it exists - # HINT: the file(REMOVE) operation below does not succeed - #file(REMOVE ${QT_CONF_FILE}) - else () - # using VCPKG-installed Qt rather than a custom install - # need to create qt.conf file to override hard coded - file(GENERATE - OUTPUT "${QT_CONF_FILE}" - CONTENT "[Paths]\nPrefix=${QT_LIB_PATH}\n" - ) - endif() + file(GENERATE + OUTPUT "${QT_CONF_FILE}" + CONTENT "[Paths]\nPrefix=${QT_LIB_PATH}\n" + ) endif() if (SCRIPTS_INSTALL_DIR) From fa7621896a8c317d41ed79f9e062c37f5ef6d5b4 Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Mon, 20 May 2019 11:58:01 -0700 Subject: [PATCH 094/203] Add debug icon which shows on render items with transitions --- interface/src/Menu.cpp | 6 ++ interface/src/Menu.h | 1 + libraries/render/src/render/DrawStatus.cpp | 89 +++++++++++++++------- libraries/render/src/render/DrawStatus.h | 3 + 4 files changed, 70 insertions(+), 29 deletions(-) diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 9341b2316c..524831a13e 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -522,6 +522,12 @@ Menu::Menu() { addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::ComputeBlendshapes, 0, true, DependencyManager::get().data(), SLOT(setComputeBlendshapes(bool))); + { + auto drawStatusConfig = qApp->getRenderEngine()->getConfiguration()->getConfig("RenderMainView.DrawStatus"); + addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::HighlightTransitions, 0, false, + drawStatusConfig, SLOT(setShowFade(bool))); + } + // Developer > Assets >>> // Menu item is not currently needed but code should be kept in case it proves useful again at some stage. //#define WANT_ASSET_MIGRATION diff --git a/interface/src/Menu.h b/interface/src/Menu.h index eeede178c7..7c462e4e74 100644 --- a/interface/src/Menu.h +++ b/interface/src/Menu.h @@ -228,6 +228,7 @@ namespace MenuOption { const QString NotificationSoundsTablet = "play_notification_sounds_tablet"; const QString ForceCoarsePicking = "Force Coarse Picking"; const QString ComputeBlendshapes = "Compute Blendshapes"; + const QString HighlightTransitions = "Highlight Transitions"; } #endif // hifi_Menu_h diff --git a/libraries/render/src/render/DrawStatus.cpp b/libraries/render/src/render/DrawStatus.cpp index 76ed5aa663..8ea79c74b1 100644 --- a/libraries/render/src/render/DrawStatus.cpp +++ b/libraries/render/src/render/DrawStatus.cpp @@ -26,7 +26,7 @@ using namespace render; void DrawStatusConfig::dirtyHelper() { - _isEnabled = showNetwork || showDisplay; + _isEnabled = showNetwork || showDisplay || showFade; emit dirty(); } @@ -79,6 +79,7 @@ const gpu::TexturePointer DrawStatus::getStatusIconMap() const { void DrawStatus::configure(const Config& config) { _showDisplay = config.showDisplay; _showNetwork = config.showNetwork; + _showFade = config.showFade; } void DrawStatus::run(const RenderContextPointer& renderContext, const Input& input) { @@ -96,40 +97,70 @@ void DrawStatus::run(const RenderContextPointer& renderContext, const Input& inp int nbItems = 0; render::ItemBounds itemBounds; std::vector> itemStatus; - { - for (size_t i = 0; i < inItems.size(); ++i) { - const auto& item = inItems[i]; - if (!item.bound.isInvalid()) { - if (!item.bound.isNull()) { - itemBounds.emplace_back(render::ItemBound(item.id, item.bound)); - } else { - itemBounds.emplace_back(item.id, AABox(item.bound.getCorner(), 0.1f)); - } - auto& itemScene = scene->getItem(item.id); + for (size_t i = 0; i < inItems.size(); ++i) { + const auto& item = inItems[i]; + if (!item.bound.isInvalid()) { + if (!item.bound.isNull()) { + itemBounds.emplace_back(render::ItemBound(item.id, item.bound)); + } else { + itemBounds.emplace_back(item.id, AABox(item.bound.getCorner(), 0.1f)); + } - auto itemStatusPointer = itemScene.getStatus(); - if (itemStatusPointer) { - itemStatus.push_back(std::pair()); - // Query the current status values, this is where the statusGetter lambda get called - auto&& currentStatusValues = itemStatusPointer->getCurrentValues(); - int valueNum = 0; - for (int vec4Num = 0; vec4Num < NUM_STATUS_VEC4_PER_ITEM; vec4Num++) { - auto& value = (vec4Num ? itemStatus[nbItems].first : itemStatus[nbItems].second); - value = glm::ivec4(Item::Status::Value::INVALID.getPackedData()); - for (int component = 0; component < VEC4_LENGTH; component++) { - valueNum = vec4Num * VEC4_LENGTH + component; - if (valueNum < (int)currentStatusValues.size()) { - value[component] = currentStatusValues[valueNum].getPackedData(); + auto& itemScene = scene->getItem(item.id); + + if (_showNetwork || _showFade) { + const static auto invalid = glm::ivec4(Item::Status::Value::INVALID.getPackedData()); + itemStatus.emplace_back(invalid, invalid); + int vec4Num = 0; + int vec4Component = 0; + + if (_showNetwork) { + auto itemStatusPointer = itemScene.getStatus(); + if (itemStatusPointer) { + // Query the current status values, this is where the statusGetter lambda get called + auto&& currentStatusValues = itemStatusPointer->getCurrentValues(); + for (const auto& statusValue : currentStatusValues) { + if (vec4Num == NUM_STATUS_VEC4_PER_ITEM) { + // Ran out of space + break; + } + + auto& value = (vec4Num == 0 ? itemStatus[nbItems].first : itemStatus[nbItems].second); + value[vec4Component] = statusValue.getPackedData(); + + ++vec4Component; + if (vec4Component == VEC4_LENGTH) { + vec4Component = 0; + ++vec4Num; } } } - } else { - auto invalid = glm::ivec4(Item::Status::Value::INVALID.getPackedData()); - itemStatus.emplace_back(invalid, invalid); } - nbItems++; + + if (_showFade && vec4Num != NUM_STATUS_VEC4_PER_ITEM) { + auto& value = (vec4Num == 0 ? itemStatus[nbItems].first : itemStatus[nbItems].second); + + Item::Status::Value status; + status.setColor(Item::Status::Value::CYAN); + status.setIcon(3); // RenderItemStatusIcon::SIMULATION_OWNER (RenderableModelEntityItem.cpp) + if (itemScene.getTransitionId() != INVALID_INDEX) { + // We have a transition. Show this icon. + status.setScale(1.0f); + } else { + status.setScale(0.0f); + } + value[vec4Component] = status.getPackedData(); + + ++vec4Component; + if (vec4Component == VEC4_LENGTH) { + vec4Component = 0; + ++vec4Num; + } + } } + + nbItems++; } } @@ -169,7 +200,7 @@ void DrawStatus::run(const RenderContextPointer& renderContext, const Input& inp batch.setPipeline(getDrawItemStatusPipeline()); - if (_showNetwork) { + if (_showNetwork || _showFade) { if (!_instanceBuffer) { _instanceBuffer = std::make_shared(); } diff --git a/libraries/render/src/render/DrawStatus.h b/libraries/render/src/render/DrawStatus.h index 2959ca59c5..6e0783f000 100644 --- a/libraries/render/src/render/DrawStatus.h +++ b/libraries/render/src/render/DrawStatus.h @@ -27,10 +27,12 @@ namespace render { bool showDisplay{ false }; bool showNetwork{ false }; + bool showFade{ false }; public slots: void setShowDisplay(bool enabled) { showDisplay = enabled; dirtyHelper(); } void setShowNetwork(bool enabled) { showNetwork = enabled; dirtyHelper(); } + void setShowFade(bool enabled) { showFade = enabled; dirtyHelper(); } signals: void dirty(); @@ -57,6 +59,7 @@ namespace render { protected: bool _showDisplay; // initialized by Config bool _showNetwork; // initialized by Config + bool _showFade; // initialized by Config gpu::Stream::FormatPointer _drawItemFormat; gpu::PipelinePointer _drawItemBoundsPipeline; From 5aff4d9f69c7dfc5fcc1fde2f8191ed89ab96b8f Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Mon, 20 May 2019 11:58:55 -0700 Subject: [PATCH 095/203] Update comment on render item status --- libraries/entities-renderer/src/RenderableEntityItem.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableEntityItem.cpp b/libraries/entities-renderer/src/RenderableEntityItem.cpp index fb6fbad2ac..659bdb215f 100644 --- a/libraries/entities-renderer/src/RenderableEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableEntityItem.cpp @@ -32,8 +32,8 @@ using namespace render; using namespace render::entities; -// These or the icon "name" used by the render item status value, they correspond to the atlas texture used by the DrawItemStatus -// job in the current rendering pipeline defined as of now (11/2015) in render-utils/RenderDeferredTask.cpp. +// These or the icon "name" used by the render item status value, they correspond to the atlas texture used by the DrawStatus +// job in the current rendering pipeline defined as of now (2019/05) in render-utils/RenderDeferredTask.cpp. enum class RenderItemStatusIcon { ACTIVE_IN_BULLET = 0, PACKET_SENT = 1, From f2f11b9509d2ddd2507178b08ecf15e64ba0be84 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Mon, 20 May 2019 15:00:07 -0400 Subject: [PATCH 096/203] only build qt.conf for DEV macos and unix builds --- interface/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index 0b94c4296d..9553b571c5 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -401,8 +401,8 @@ else() endif() endif() -if (APPLE OR UNIX) - # need to worry about hard-coded search paths in the Qt libraries +if (DEV_BUILD AND (APPLE OR UNIX)) + # create a qt.conf file to override hard-coded search paths in Qt libs set(QT_LIB_PATH "${QT_CMAKE_PREFIX_PATH}/../..") if (APPLE) set(QT_CONF_FILE "${RESOURCES_DEV_DIR}/../Resources/qt.conf") From 03a8e77ade43c6172b41c36f868f997adaba1eb1 Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Mon, 20 May 2019 12:07:41 -0700 Subject: [PATCH 097/203] Move RenderItemStatusIcon to Item.h --- .../src/RenderableEntityItem.cpp | 39 +++++++------------ libraries/render/src/render/DrawStatus.cpp | 2 +- libraries/render/src/render/Item.h | 11 ++++++ 3 files changed, 25 insertions(+), 27 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableEntityItem.cpp b/libraries/entities-renderer/src/RenderableEntityItem.cpp index 659bdb215f..01d31856e0 100644 --- a/libraries/entities-renderer/src/RenderableEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableEntityItem.cpp @@ -32,19 +32,6 @@ using namespace render; using namespace render::entities; -// These or the icon "name" used by the render item status value, they correspond to the atlas texture used by the DrawStatus -// job in the current rendering pipeline defined as of now (2019/05) in render-utils/RenderDeferredTask.cpp. -enum class RenderItemStatusIcon { - ACTIVE_IN_BULLET = 0, - PACKET_SENT = 1, - PACKET_RECEIVED = 2, - SIMULATION_OWNER = 3, - HAS_ACTIONS = 4, - OTHER_SIMULATION_OWNER = 5, - ENTITY_HOST_TYPE = 6, - NONE = 255 -}; - void EntityRenderer::initEntityRenderers() { REGISTER_ENTITY_TYPE_WITH_FACTORY(Model, RenderableModelEntityItem::factory) REGISTER_ENTITY_TYPE_WITH_FACTORY(PolyVox, RenderablePolyVoxEntityItem::factory) @@ -67,7 +54,7 @@ void EntityRenderer::makeStatusGetters(const EntityItemPointer& entity, Item::St return render::Item::Status::Value(1.0f - normalizedDelta, (normalizedDelta > 1.0f ? render::Item::Status::Value::GREEN : render::Item::Status::Value::RED), - (unsigned char)RenderItemStatusIcon::PACKET_RECEIVED); + (unsigned char)render::Item::Status::Icon::PACKET_RECEIVED); }); statusGetters.push_back([entity] () -> render::Item::Status::Value { @@ -79,17 +66,17 @@ void EntityRenderer::makeStatusGetters(const EntityItemPointer& entity, Item::St return render::Item::Status::Value(1.0f - normalizedDelta, (normalizedDelta > 1.0f ? render::Item::Status::Value::MAGENTA : render::Item::Status::Value::CYAN), - (unsigned char)RenderItemStatusIcon::PACKET_SENT); + (unsigned char)render::Item::Status::Icon::PACKET_SENT); }); statusGetters.push_back([entity] () -> render::Item::Status::Value { ObjectMotionState* motionState = static_cast(entity->getPhysicsInfo()); if (motionState && motionState->isActive()) { return render::Item::Status::Value(1.0f, render::Item::Status::Value::BLUE, - (unsigned char)RenderItemStatusIcon::ACTIVE_IN_BULLET); + (unsigned char)render::Item::Status::Icon::ACTIVE_IN_BULLET); } return render::Item::Status::Value(0.0f, render::Item::Status::Value::BLUE, - (unsigned char)RenderItemStatusIcon::ACTIVE_IN_BULLET); + (unsigned char)render::Item::Status::Icon::ACTIVE_IN_BULLET); }); statusGetters.push_back([entity, myNodeID] () -> render::Item::Status::Value { @@ -98,39 +85,39 @@ void EntityRenderer::makeStatusGetters(const EntityItemPointer& entity, Item::St if (weOwnSimulation) { return render::Item::Status::Value(1.0f, render::Item::Status::Value::BLUE, - (unsigned char)RenderItemStatusIcon::SIMULATION_OWNER); + (unsigned char)render::Item::Status::Icon::SIMULATION_OWNER); } else if (otherOwnSimulation) { return render::Item::Status::Value(1.0f, render::Item::Status::Value::RED, - (unsigned char)RenderItemStatusIcon::OTHER_SIMULATION_OWNER); + (unsigned char)render::Item::Status::Icon::OTHER_SIMULATION_OWNER); } return render::Item::Status::Value(0.0f, render::Item::Status::Value::BLUE, - (unsigned char)RenderItemStatusIcon::SIMULATION_OWNER); + (unsigned char)render::Item::Status::Icon::SIMULATION_OWNER); }); statusGetters.push_back([entity] () -> render::Item::Status::Value { if (entity->hasActions()) { return render::Item::Status::Value(1.0f, render::Item::Status::Value::GREEN, - (unsigned char)RenderItemStatusIcon::HAS_ACTIONS); + (unsigned char)render::Item::Status::Icon::HAS_ACTIONS); } return render::Item::Status::Value(0.0f, render::Item::Status::Value::GREEN, - (unsigned char)RenderItemStatusIcon::HAS_ACTIONS); + (unsigned char)render::Item::Status::Icon::HAS_ACTIONS); }); statusGetters.push_back([entity, myNodeID] () -> render::Item::Status::Value { if (entity->isAvatarEntity()) { if (entity->getOwningAvatarID() == myNodeID) { return render::Item::Status::Value(1.0f, render::Item::Status::Value::GREEN, - (unsigned char)RenderItemStatusIcon::ENTITY_HOST_TYPE); + (unsigned char)render::Item::Status::Icon::ENTITY_HOST_TYPE); } else { return render::Item::Status::Value(1.0f, render::Item::Status::Value::RED, - (unsigned char)RenderItemStatusIcon::ENTITY_HOST_TYPE); + (unsigned char)render::Item::Status::Icon::ENTITY_HOST_TYPE); } } else if (entity->isLocalEntity()) { return render::Item::Status::Value(1.0f, render::Item::Status::Value::BLUE, - (unsigned char)RenderItemStatusIcon::ENTITY_HOST_TYPE); + (unsigned char)render::Item::Status::Icon::ENTITY_HOST_TYPE); } return render::Item::Status::Value(0.0f, render::Item::Status::Value::GREEN, - (unsigned char)RenderItemStatusIcon::ENTITY_HOST_TYPE); + (unsigned char)render::Item::Status::Icon::ENTITY_HOST_TYPE); }); } diff --git a/libraries/render/src/render/DrawStatus.cpp b/libraries/render/src/render/DrawStatus.cpp index 8ea79c74b1..0484c0c125 100644 --- a/libraries/render/src/render/DrawStatus.cpp +++ b/libraries/render/src/render/DrawStatus.cpp @@ -143,7 +143,7 @@ void DrawStatus::run(const RenderContextPointer& renderContext, const Input& inp Item::Status::Value status; status.setColor(Item::Status::Value::CYAN); - status.setIcon(3); // RenderItemStatusIcon::SIMULATION_OWNER (RenderableModelEntityItem.cpp) + status.setIcon((unsigned char)Item::Status::Icon::SIMULATION_OWNER); if (itemScene.getTransitionId() != INVALID_INDEX) { // We have a transition. Show this icon. status.setScale(1.0f); diff --git a/libraries/render/src/render/Item.h b/libraries/render/src/render/Item.h index 79557e3e44..d5d3e6942a 100644 --- a/libraries/render/src/render/Item.h +++ b/libraries/render/src/render/Item.h @@ -354,6 +354,17 @@ public: // This is Used for monitoring and dynamically adjust the quality class Status { public: + + enum class Icon { + ACTIVE_IN_BULLET = 0, + PACKET_SENT = 1, + PACKET_RECEIVED = 2, + SIMULATION_OWNER = 3, + HAS_ACTIONS = 4, + OTHER_SIMULATION_OWNER = 5, + ENTITY_HOST_TYPE = 6, + NONE = 255 + }; // Status::Value class is the data used to represent the transient information of a status as a square icon // The "icon" is a square displayed in the 3D scene over the render::Item AABB center. From 07e9c3d6482a7a72aaf1a2814769dbb8f2fc8501 Mon Sep 17 00:00:00 2001 From: Howard Stearns Date: Mon, 20 May 2019 12:48:06 -0700 Subject: [PATCH 098/203] reduce time in which you see yourself going away --- libraries/networking/src/LimitedNodeList.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/networking/src/LimitedNodeList.h b/libraries/networking/src/LimitedNodeList.h index 60c91c8ff6..9f4a0177f5 100644 --- a/libraries/networking/src/LimitedNodeList.h +++ b/libraries/networking/src/LimitedNodeList.h @@ -49,7 +49,7 @@ const int INVALID_PORT = -1; -const quint64 NODE_SILENCE_THRESHOLD_MSECS = 20 * 1000; +const quint64 NODE_SILENCE_THRESHOLD_MSECS = 10 * 1000; static const size_t DEFAULT_MAX_CONNECTION_RATE { std::numeric_limits::max() }; From 5d37a076d5fb389d7a24f51878b167652c28b4e1 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Mon, 20 May 2019 13:05:57 -0700 Subject: [PATCH 099/203] Don't crash on trying to add items to non-existent menus --- libraries/ui-plugins/src/ui-plugins/PluginContainer.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libraries/ui-plugins/src/ui-plugins/PluginContainer.cpp b/libraries/ui-plugins/src/ui-plugins/PluginContainer.cpp index 58dc971cb9..0c71d4fa69 100644 --- a/libraries/ui-plugins/src/ui-plugins/PluginContainer.cpp +++ b/libraries/ui-plugins/src/ui-plugins/PluginContainer.cpp @@ -72,6 +72,11 @@ struct MenuCache { } flushCache(menu); MenuWrapper* parentItem = menu->getMenu(path); + if (!parentItem) { + qWarning() << "Attempted to add item to non-existent path " << path; + return; + } + QAction* action = menu->addActionToQMenuAndActionHash(parentItem, name); if (!groupName.isEmpty()) { QActionGroup* group{ nullptr }; From 2e666836c716ba99aa50c13b64e4cc5918dc4a8a Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Mon, 20 May 2019 13:42:53 -0700 Subject: [PATCH 100/203] add more options to render scripting interface --- interface/src/Menu.cpp | 50 ++-------- .../scripting/RenderScriptingInterface.cpp | 94 +++++++++++++++++-- .../src/scripting/RenderScriptingInterface.h | 52 +++++++++- .../render-utils/src/AntialiasingEffect.h | 2 - 4 files changed, 144 insertions(+), 54 deletions(-) diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 9341b2316c..5880076358 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -49,16 +49,13 @@ #include "DeferredLightingEffect.h" #include "PickManager.h" -#include "LightingModel.h" -#include "AmbientOcclusionEffect.h" -#include "RenderShadowTask.h" -#include "AntialiasingEffect.h" - #include "scripting/SettingsScriptingInterface.h" #if defined(Q_OS_MAC) || defined(Q_OS_WIN) #include "SpeechRecognizer.h" #endif +#include "scripting/RenderScriptingInterface.h" + extern bool DEV_DECIMATE_TEXTURES; Menu* Menu::getInstance() { @@ -367,45 +364,14 @@ Menu::Menu() { // Developer > Render >>> MenuWrapper* renderOptionsMenu = developerMenu->addMenu("Render"); - action = addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::AntiAliasing, 0, true); - connect(action, &QAction::triggered, [action] { - auto renderConfig = qApp->getRenderEngine()->getConfiguration(); - if (renderConfig) { - auto mainViewJitterCamConfig = renderConfig->getConfig("RenderMainView.JitterCam"); - auto mainViewAntialiasingConfig = renderConfig->getConfig("RenderMainView.Antialiasing"); - if (mainViewJitterCamConfig && mainViewAntialiasingConfig) { - if (action->isChecked()) { - mainViewJitterCamConfig->play(); - mainViewAntialiasingConfig->setDebugFXAA(false); - } else { - mainViewJitterCamConfig->none(); - mainViewAntialiasingConfig->setDebugFXAA(true); - } - } - } - }); + addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::AntiAliasing, 0, RenderScriptingInterface::getInstance()->getAntialiasingEnabled(), + RenderScriptingInterface::getInstance(), SLOT(setAntialiasingEnabled(bool))); - action = addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::Shadows, 0, true); - connect(action, &QAction::triggered, [action] { - auto renderConfig = qApp->getRenderEngine()->getConfiguration(); - if (renderConfig) { - auto lightingModelConfig = renderConfig->getConfig("RenderMainView.LightingModel"); - if (lightingModelConfig) { - lightingModelConfig->setShadow(action->isChecked()); - } - } - }); + addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::Shadows, 0, RenderScriptingInterface::getInstance()->getShadowsEnabled(), + RenderScriptingInterface::getInstance(), SLOT(setShadowsEnabled(bool))); - action = addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::AmbientOcclusion, 0, false); - connect(action, &QAction::triggered, [action] { - auto renderConfig = qApp->getRenderEngine()->getConfiguration(); - if (renderConfig) { - auto lightingModelConfig = renderConfig->getConfig("RenderMainView.LightingModel"); - if (lightingModelConfig) { - lightingModelConfig->setAmbientOcclusion(action->isChecked()); - } - } - }); + addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::AmbientOcclusion, 0, RenderScriptingInterface::getInstance()->getAmbientOcclusionEnabled(), + RenderScriptingInterface::getInstance(), SLOT(setAmbientOcclusionEnabled(bool))); addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::WorldAxes); addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::DefaultSkybox, 0, true); diff --git a/interface/src/scripting/RenderScriptingInterface.cpp b/interface/src/scripting/RenderScriptingInterface.cpp index 8581c7527d..360a75b557 100644 --- a/interface/src/scripting/RenderScriptingInterface.cpp +++ b/interface/src/scripting/RenderScriptingInterface.cpp @@ -7,6 +7,9 @@ // #include "RenderScriptingInterface.h" +#include "LightingModel.h" +#include "AntialiasingEffect.h" + const QString DEFERRED = "deferred"; const QString FORWARD = "forward"; @@ -17,6 +20,9 @@ RenderScriptingInterface* RenderScriptingInterface::getInstance() { RenderScriptingInterface::RenderScriptingInterface() { setRenderMethod((render::Args::RenderMethod)_renderMethodSetting.get() == render::Args::RenderMethod::DEFERRED ? DEFERRED : FORWARD); + setShadowsEnabled(_shadowsEnabledSetting.get()); + setAmbientOcclusionEnabled(_ambientOcclusionEnabledSetting.get()); + setAntialiasingEnabled(_antialiasingEnabledSetting.get()); } QString RenderScriptingInterface::getRenderMethod() { @@ -24,6 +30,11 @@ QString RenderScriptingInterface::getRenderMethod() { } void RenderScriptingInterface::setRenderMethod(const QString& renderMethod) { + render::Args::RenderMethod newMethod = renderMethod == FORWARD ? render::Args::RenderMethod::FORWARD : render::Args::RenderMethod::DEFERRED; + if (_renderMethodSetting.get() == newMethod) { + return; + } + if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "setRenderMethod", Q_ARG(const QString&, renderMethod)); return; @@ -31,14 +42,81 @@ void RenderScriptingInterface::setRenderMethod(const QString& renderMethod) { auto config = dynamic_cast(qApp->getRenderEngine()->getConfiguration()->getConfig("RenderMainView.DeferredForwardSwitch")); if (config) { - if (renderMethod == DEFERRED) { - _renderMethodSetting.set(render::Args::RenderMethod::DEFERRED); - config->setBranch(render::Args::RenderMethod::DEFERRED); - emit config->dirtyEnabled(); - } else if (renderMethod == FORWARD) { - _renderMethodSetting.set(render::Args::RenderMethod::FORWARD); - config->setBranch(render::Args::RenderMethod::FORWARD); - emit config->dirtyEnabled(); + _renderMethodSetting.set(newMethod); + config->setBranch(newMethod); + emit config->dirtyEnabled(); + } +} + +bool RenderScriptingInterface::getShadowsEnabled() { + return _shadowsEnabledSetting.get(); +} + +void RenderScriptingInterface::setShadowsEnabled(bool enabled) { + if (_shadowsEnabledSetting.get() == enabled) { + return; + } + + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "setShadowsEnabled", Q_ARG(bool, enabled)); + return; + } + + auto lightingModelConfig = qApp->getRenderEngine()->getConfiguration()->getConfig("RenderMainView.LightingModel"); + if (lightingModelConfig) { + Menu::getInstance()->setIsOptionChecked(MenuOption::Shadows, enabled); + _shadowsEnabledSetting.set(enabled); + lightingModelConfig->setShadow(enabled); + } +} + +bool RenderScriptingInterface::getAmbientOcclusionEnabled() { + return _ambientOcclusionEnabledSetting.get(); +} + +void RenderScriptingInterface::setAmbientOcclusionEnabled(bool enabled) { + if (_ambientOcclusionEnabledSetting.get() == enabled) { + return; + } + + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "setAmbientOcclusionEnabled", Q_ARG(bool, enabled)); + return; + } + + auto lightingModelConfig = qApp->getRenderEngine()->getConfiguration()->getConfig("RenderMainView.LightingModel"); + if (lightingModelConfig) { + Menu::getInstance()->setIsOptionChecked(MenuOption::AmbientOcclusion, enabled); + _ambientOcclusionEnabledSetting.set(enabled); + lightingModelConfig->setAmbientOcclusion(enabled); + } +} + +bool RenderScriptingInterface::getAntialiasingEnabled() { + return _antialiasingEnabledSetting.get(); +} + +void RenderScriptingInterface::setAntialiasingEnabled(bool enabled) { + if (_antialiasingEnabledSetting.get() == enabled) { + return; + } + + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "setAntialiasingEnabled", Q_ARG(bool, enabled)); + return; + } + + auto mainViewJitterCamConfig = qApp->getRenderEngine()->getConfiguration()->getConfig("RenderMainView.JitterCam"); + auto mainViewAntialiasingConfig = qApp->getRenderEngine()->getConfiguration()->getConfig("RenderMainView.Antialiasing"); + if (mainViewJitterCamConfig && mainViewAntialiasingConfig) { + Menu::getInstance()->setIsOptionChecked(MenuOption::AntiAliasing, enabled); + _antialiasingEnabledSetting.set(enabled); + if (enabled) { + mainViewJitterCamConfig->play(); + mainViewAntialiasingConfig->setDebugFXAA(false); + } else { + mainViewJitterCamConfig->none(); + mainViewAntialiasingConfig->setDebugFXAA(true); } } } \ No newline at end of file diff --git a/interface/src/scripting/RenderScriptingInterface.h b/interface/src/scripting/RenderScriptingInterface.h index 2aff3a08b6..329433fb60 100644 --- a/interface/src/scripting/RenderScriptingInterface.h +++ b/interface/src/scripting/RenderScriptingInterface.h @@ -26,6 +26,9 @@ class RenderScriptingInterface : public QObject { Q_OBJECT Q_PROPERTY(QString renderMethod READ getRenderMethod WRITE setRenderMethod) + Q_PROPERTY(bool shadowsEnabled READ getShadowsEnabled WRITE setShadowsEnabled) + Q_PROPERTY(bool ambientOcclusionEnabled READ getAmbientOcclusionEnabled WRITE setAmbientOcclusionEnabled) + Q_PROPERTY(bool antialiasingEnabled READ getAntialiasingEnabled WRITE setAntialiasingEnabled) public: RenderScriptingInterface(); @@ -37,8 +40,8 @@ public slots: * Get a config for a job by name * @function Render.getConfig * @param {string} name - Can be: - * - . Search for the first job named job_name traversing the the sub graph of task and jobs (from this task as root) - * - .[.]. Allows you to first look for the parent_name job (from this task as root) and then search from there for the + * - : Search for the first job named job_name traversing the the sub graph of task and jobs (from this task as root) + * - .[.]: Allows you to first look for the parent_name job (from this task as root) and then search from there for the * optional sub_parent_names and finally from there looking for the job_name (assuming every job in the path is found) * @returns {object} The sub job config. */ @@ -58,8 +61,53 @@ public slots: */ void setRenderMethod(const QString& renderMethod); + /**jsdoc + * Whether or not shadows are enabled + * @function Render.getShadowsEnabled + * @returns {bool} true if shadows are enabled, otherwise false + */ + bool getShadowsEnabled(); + + /**jsdoc + * Enables or disables shadows + * @function Render.setShadowsEnabled + * @param {bool} enabled - true to enable shadows, false to disable them + */ + void setShadowsEnabled(bool enabled); + + /**jsdoc + * Whether or not ambient occlusion is enabled + * @function Render.getAmbientOcclusionEnabled + * @returns {bool} true if ambient occlusion is enabled, otherwise false + */ + bool getAmbientOcclusionEnabled(); + + /**jsdoc + * Enables or disables ambient occlusion + * @function Render.setAmbientOcclusionEnabled + * @param {bool} enabled - true to enable ambient occlusion, false to disable it + */ + void setAmbientOcclusionEnabled(bool enabled); + + /**jsdoc + * Whether or not anti-aliasing is enabled + * @function Render.getAntialiasingEnabled + * @returns {bool} true if anti-aliasing is enabled, otherwise false + */ + bool getAntialiasingEnabled(); + + /**jsdoc + * Enables or disables anti-aliasing + * @function Render.setAntialiasingEnabled + * @param {bool} enabled - true to enable anti-aliasing, false to disable it + */ + void setAntialiasingEnabled(bool enabled); + private: Setting::Handle _renderMethodSetting { "renderMethod", RENDER_FORWARD ? render::Args::RenderMethod::FORWARD : render::Args::RenderMethod::DEFERRED }; + Setting::Handle _shadowsEnabledSetting { "shadowsEnabled", true }; + Setting::Handle _ambientOcclusionEnabledSetting { "ambientOcclusionEnabled", false }; + Setting::Handle _antialiasingEnabledSetting { "antialiasingEnabled", true }; }; #endif // hifi_RenderScriptingInterface_h diff --git a/libraries/render-utils/src/AntialiasingEffect.h b/libraries/render-utils/src/AntialiasingEffect.h index 936ade043d..8057601317 100644 --- a/libraries/render-utils/src/AntialiasingEffect.h +++ b/libraries/render-utils/src/AntialiasingEffect.h @@ -107,8 +107,6 @@ public: AntialiasingConfig() : render::Job::Config(true) {} void setDebugFXAA(bool debug) { debugFXAAX = (debug ? 0.0f : 1.0f); emit dirty();} - bool debugFXAA() const { return (debugFXAAX == 0.0f ? true : false); } - float blend{ 0.25f }; float sharpen{ 0.05f }; From 0e478de1a28216b6df4ea5ca05fd7da4851ee599 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Wed, 8 May 2019 10:47:06 +1200 Subject: [PATCH 101/203] Stub out missing Script JSDoc --- libraries/script-engine/src/ScriptEngine.h | 4 ++- libraries/shared/src/BaseScriptEngine.h | 33 ++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/libraries/script-engine/src/ScriptEngine.h b/libraries/script-engine/src/ScriptEngine.h index 3549578ed5..c4d4dd2c31 100644 --- a/libraries/script-engine/src/ScriptEngine.h +++ b/libraries/script-engine/src/ScriptEngine.h @@ -359,6 +359,7 @@ public: * @param {boolean} [deleteScriptCache=false] */ Q_INVOKABLE void resetModuleCache(bool deleteScriptCache = false); + QScriptValue currentModule(); bool registerModuleWithParent(const QScriptValue& module, const QScriptValue& parent); QScriptValue newModule(const QString& modulePath, const QScriptValue& parent = QScriptValue()); @@ -496,7 +497,7 @@ public: * @function Script.callEntityScriptMethod * @param {Uuid} entityID * @param {string} methodName - * @param {string[]} parameters + * @param {string[]} [parameters=[]] * @param {Uuid} [remoteCallerID=Uuid.NULL] */ Q_INVOKABLE void callEntityScriptMethod(const EntityItemID& entityID, const QString& methodName, @@ -721,6 +722,7 @@ signals: /**jsdoc * @function Script.entityScriptPreloadFinished + * @param {Uuid} entityID * @returns {Signal} */ // Emitted when an entity script has finished running preload diff --git a/libraries/shared/src/BaseScriptEngine.h b/libraries/shared/src/BaseScriptEngine.h index 8820a386bf..0a1addaa2e 100644 --- a/libraries/shared/src/BaseScriptEngine.h +++ b/libraries/shared/src/BaseScriptEngine.h @@ -31,8 +31,29 @@ public: BaseScriptEngine() {} + /**jsdoc + * @function Script.lintScript + * @param {string} sourceCode + * @param {string} fileName + * @param {number} [lineNumber=1] + * @returns {object} + */ Q_INVOKABLE QScriptValue lintScript(const QString& sourceCode, const QString& fileName, const int lineNumber = 1); + + /**jsdoc + * @function Script.makeError + * @param {object} [other] + * @param {string} [type="Error"] + * @returns {object} + */ Q_INVOKABLE QScriptValue makeError(const QScriptValue& other = QScriptValue(), const QString& type = "Error"); + + /**jsdoc + * @function Script.formatExecption + * @param {object} exception + * @param {boolean} inludeExtendeDetails + * @returns {string} + */ Q_INVOKABLE QString formatException(const QScriptValue& exception, bool includeExtendedDetails); QScriptValue cloneUncaughtException(const QString& detail = QString()); @@ -48,6 +69,18 @@ public: // helper to detect and log warnings when other code invokes QScriptEngine/BaseScriptEngine in thread-unsafe ways static bool IS_THREADSAFE_INVOCATION(const QThread *thread, const QString& method); signals: + /**jsdoc + * @function Script.signalHandlerException + * @param {object} exception + * @returns {Signal} + */ + // Script.signalHandlerException is exposed by QScriptEngine. + + /**jsdoc + * @function Script.unhandledException + * @param {object} exception + * @returns {Signal} + */ void unhandledException(const QScriptValue& exception); protected: From d196e357012b61394067b3a25d7a467b32578115 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Fri, 10 May 2019 08:33:03 +1200 Subject: [PATCH 102/203] Polish existing Script JSDoc --- libraries/script-engine/src/ScriptEngine.h | 84 ++++++++++++++-------- 1 file changed, 54 insertions(+), 30 deletions(-) diff --git a/libraries/script-engine/src/ScriptEngine.h b/libraries/script-engine/src/ScriptEngine.h index c4d4dd2c31..36e115411c 100644 --- a/libraries/script-engine/src/ScriptEngine.h +++ b/libraries/script-engine/src/ScriptEngine.h @@ -100,6 +100,8 @@ public: }; /**jsdoc + * The Script API provides facilities for working with scripts. + * * @namespace Script * * @hifi-interface @@ -150,9 +152,18 @@ public: QList getListOfEntityScriptIDs(); /**jsdoc - * Stop the current script. + * Stops and unloads the current script. * @function Script.stop - * @param {boolean} [marshal=false] + * @param {boolean} [marshal=false] - Marshal. + *

Deprecated: This parameter is deprecated and will be removed.

+ * @example Stop a script after 5s. + * Script.setInterval(function () { + * print("Hello"); + * }, 1000); + * + * Script.setTimeout(function () { + * Script.stop(true); + * }, 5000); */ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // NOTE - this is intended to be a public interface for Agent scripts, and local scripts, but not for EntityScripts @@ -292,9 +303,10 @@ public: Q_INVOKABLE void removeEventHandler(const EntityItemID& entityID, const QString& eventName, QScriptValue handler); /**jsdoc - * Start a new Interface or entity script. + * Starts running another script in Interface. + *

Note: Only works for Interface and avatar scripts.

* @function Script.load - * @param {string} filename - The URL of the script to load. Can be relative to the current script. + * @param {string} filename - The URL of the script to load. This can be relative to the current script's URL. * @example Load a script from another script. * // First file: scriptA.js * print("This is script A"); @@ -303,7 +315,7 @@ public: * print("This is script B"); * Script.load("scriptA.js"); * - * // If you run scriptB.js you should see both scripts in the running scripts list. + * // If you run scriptB.js you should see both scripts in the Running Scripts dialog. * // And you should see the following output: * // This is script B * // This is script A @@ -311,21 +323,23 @@ public: Q_INVOKABLE void load(const QString& loadfile); /**jsdoc - * Include JavaScript from other files in the current script. If a callback is specified the files are loaded and included - * asynchronously, otherwise they are included synchronously (i.e., script execution blocks while the files are included). + * Includes JavaScript from other files in the current script. If a callback is specified, the files are loaded and + * included asynchronously, otherwise they are included synchronously (i.e., script execution blocks while the files are + * included). * @function Script.include + * @variation 0 * @param {string[]} filenames - The URLs of the scripts to include. Each can be relative to the current script. - * @param {function} [callback=null] - The function to call back when the scripts have been included. Can be an in-line + * @param {function} [callback=null] - The function to call back when the scripts have been included. It can be an in-line * function or the name of a function. */ Q_INVOKABLE void include(const QStringList& includeFiles, QScriptValue callback = QScriptValue()); /**jsdoc - * Include JavaScript from another file in the current script. If a callback is specified the file is loaded and included + * Includes JavaScript from another file in the current script. If a callback is specified, the file is loaded and included * asynchronously, otherwise it is included synchronously (i.e., script execution blocks while the file is included). * @function Script.include - * @param {string} filename - The URL of the script to include. Can be relative to the current script. - * @param {function} [callback=null] - The function to call back when the script has been included. Can be an in-line + * @param {string} filename - The URL of the script to include. It can be relative to the current script. + * @param {function} [callback=null] - The function to call back when the script has been included. It can be an in-line * function or the name of a function. * @example Include a script file asynchronously. * // First file: scriptA.js @@ -367,53 +381,53 @@ public: QScriptValue instantiateModule(const QScriptValue& module, const QString& sourceCode); /**jsdoc - * Call a function at a set interval. + * Calls a function repeatedly, at a set interval. * @function Script.setInterval - * @param {function} function - The function to call. Can be an in-line function or the name of a function. + * @param {function} function - The function to call. This can be an in-line function or the name of a function. * @param {number} interval - The interval at which to call the function, in ms. - * @returns {object} A handle to the interval timer. Can be used by {@link Script.clearInterval}. + * @returns {object} A handle to the interval timer. This can be used by {@link Script.clearInterval}. * @example Print a message every second. * Script.setInterval(function () { - * print("Timer fired"); + * print("Interval timer fired"); * }, 1000); */ Q_INVOKABLE QObject* setInterval(const QScriptValue& function, int intervalMS); /**jsdoc - * Call a function after a delay. + * Calls a function once, after a delay. * @function Script.setTimeout - * @param {function} function - The function to call. Can be an in-line function or the name of a function. + * @param {function} function - The function to call. This can be an in-line function or the name of a function. * @param {number} timeout - The delay after which to call the function, in ms. - * @returns {object} A handle to the timeout timer. Can be used by {@link Script.clearTimeout}. - * @example Print a message after a second. + * @returns {object} A handle to the timeout timer. This can be used by {@link Script.clearTimeout}. + * @example Print a message once, after a second. * Script.setTimeout(function () { - * print("Timer fired"); + * print("Timeout timer fired"); * }, 1000); */ Q_INVOKABLE QObject* setTimeout(const QScriptValue& function, int timeoutMS); /**jsdoc - * Stop an interval timer set by {@link Script.setInterval|setInterval}. + * Stops an interval timer set by {@link Script.setInterval|setInterval}. * @function Script.clearInterval - * @param {object} timer - The interval timer to clear. + * @param {object} timer - The interval timer to stop. * @example Stop an interval timer. * // Print a message every second. * var timer = Script.setInterval(function () { - * print("Timer fired"); + * print("Interval timer fired"); * }, 1000); * * // Stop the timer after 10 seconds. * Script.setTimeout(function () { - * print("Stop timer"); + * print("Stop interval timer"); * Script.clearInterval(timer); * }, 10000); */ Q_INVOKABLE void clearInterval(QObject* timer) { stopTimer(reinterpret_cast(timer)); } /**jsdoc - * Clear a timeout timer set by {@link Script.setTimeout|setTimeout}. + * Stops a timeout timer set by {@link Script.setTimeout|setTimeout}. * @function Script.clearTimeout - * @param {object} timer - The timeout timer to clear. + * @param {object} timer - The timeout timer to stop. * @example Stop a timeout timer. * // Print a message after two seconds. * var timer = Script.setTimeout(function () { @@ -432,10 +446,16 @@ public: Q_INVOKABLE void print(const QString& message); /**jsdoc - * Resolve a relative path to an absolute path. + * Resolves a relative path to an absolute path. The relative path is relative to the script's location. * @function Script.resolvePath * @param {string} path - The relative path to resolve. * @returns {string} The absolute path. + * @example Report the directory and filename of the running script. + * print(Script.resolvePath("")); + * @example Report the directory of the running script. + * print(Script.resolvePath(".")); + * @example Report the path to a file located relative to the running script. + * print(Script.resolvePath("../assets/sounds/hello.wav")); */ Q_INVOKABLE QUrl resolvePath(const QString& path) const; @@ -606,18 +626,22 @@ signals: void errorLoadingScript(const QString& scriptFilename); /**jsdoc - * Triggered regularly at a system-determined frequency. + * Triggered frequently at a system-determined interval. * @function Script.update * @param {number} deltaTime - The time since the last update, in s. * @returns {Signal} + * @example Report script update intervals. + * Script.update.connect(function (deltaTime) { + * print("Update: " + deltaTime); + * }); */ void update(float deltaTime); /**jsdoc - * Triggered when the script is ending. + * Triggered when the script is stopping. * @function Script.scriptEnding * @returns {Signal} - * @example Connect to the scriptEnding signal. + * @example Report when a script is stopping. * print("Script started"); * * Script.scriptEnding.connect(function () { From 0a0a25139c09dbcc6ebf3bec29ad4391cd0f0d69 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sat, 11 May 2019 09:29:13 +1200 Subject: [PATCH 103/203] Deprecate items that shouldn't be in the Script API --- libraries/script-engine/src/ScriptEngine.h | 105 ++++++++++++--------- libraries/shared/src/BaseScriptEngine.h | 17 ++-- 2 files changed, 72 insertions(+), 50 deletions(-) diff --git a/libraries/script-engine/src/ScriptEngine.h b/libraries/script-engine/src/ScriptEngine.h index 36e115411c..b81829aa54 100644 --- a/libraries/script-engine/src/ScriptEngine.h +++ b/libraries/script-engine/src/ScriptEngine.h @@ -178,18 +178,20 @@ public: /**jsdoc * @function Script.registerGlobalObject - * @param {string} name - * @param {object} object + * @param {string} name - Name. + * @param {object} object - Object. + * @deprecated This function is deprecated and will be removed. */ /// registers a global object by name Q_INVOKABLE void registerGlobalObject(const QString& name, QObject* object); /**jsdoc * @function Script.registerGetterSetter - * @param {string} name - * @param {object} getter - * @param {object} setter - * @param {string} [parent=""] + * @param {string} name - Name. + * @param {object} getter - Getter. + * @param {object} setter - Setter. + * @param {string} [parent=""] - Parent. + * @deprecated This function is deprecated and will be removed. */ /// registers a global getter/setter Q_INVOKABLE void registerGetterSetter(const QString& name, QScriptEngine::FunctionSignature getter, @@ -197,19 +199,21 @@ public: /**jsdoc * @function Script.registerFunction - * @param {string} name - * @param {object} function - * @param {number} [numArguments=-1] + * @param {string} name - Name. + * @param {object} function - Function. + * @param {number} [numArguments=-1] - Number of arguments. + * @deprecated This function is deprecated and will be removed. */ /// register a global function Q_INVOKABLE void registerFunction(const QString& name, QScriptEngine::FunctionSignature fun, int numArguments = -1); /**jsdoc * @function Script.registerFunction - * @param {string} parent - * @param {string} name - * @param {object} function - * @param {number} [numArguments=-1] + * @param {string} parent - Parent. + * @param {string} name - Name. + * @param {object} function - Function. + * @param {number} [numArguments=-1] - Number of arguments. + * @deprecated This function is deprecated and will be removed. */ /// register a function as a method on a previously registered global object Q_INVOKABLE void registerFunction(const QString& parent, const QString& name, QScriptEngine::FunctionSignature fun, @@ -217,27 +221,30 @@ public: /**jsdoc * @function Script.registerValue - * @param {string} name - * @param {object} value + * @param {string} name - Name. + * @param {object} value - Value. + * @deprecated This function is deprecated and will be removed. */ /// registers a global object by name Q_INVOKABLE void registerValue(const QString& valueName, QScriptValue value); /**jsdoc * @function Script.evaluate - * @param {string} program - * @param {string} filename - * @param {number} [lineNumber=-1] - * @returns {object} + * @param {string} program - Program. + * @param {string} filename - File name. + * @param {number} [lineNumber=-1] - Line number. + * @returns {object} Object. + * @deprecated This function is deprecated and will be removed. */ /// evaluate some code in the context of the ScriptEngine and return the result Q_INVOKABLE QScriptValue evaluate(const QString& program, const QString& fileName, int lineNumber = 1); // this is also used by the script tool widget /**jsdoc * @function Script.evaluateInClosure - * @param {object} locals - * @param {object} program - * @returns {object} + * @param {object} locals - Locals. + * @param {object} program - Program. + * @returns {object} Object. + * @deprecated This function is deprecated and will be removed. */ Q_INVOKABLE QScriptValue evaluateInClosure(const QScriptValue& locals, const QScriptProgram& program); @@ -495,21 +502,24 @@ public: /**jsdoc * @function Script.loadEntityScript - * @param {Uuid} entityID - * @param {string} script - * @param {boolean} forceRedownload + * @param {Uuid} entityID - Entity IUD. + * @param {string} script - Script. + * @param {boolean} forceRedownload - Force re-download. + * @deprecated This function is deprecated and will be removed. */ Q_INVOKABLE void loadEntityScript(const EntityItemID& entityID, const QString& entityScript, bool forceRedownload); /**jsdoc * @function Script.unloadEntityScript - * @param {Uuid} entityID - * @param {boolean} [shouldRemoveFromMap=false] + * @param {Uuid} entityID - Entity ID. + * @param {boolean} [shouldRemoveFromMap=false] - Should remove from map. + * @deprecated This function is deprecated and will be removed. */ Q_INVOKABLE void unloadEntityScript(const EntityItemID& entityID, bool shouldRemoveFromMap = false); // will call unload method /**jsdoc * @function Script.unloadAllEntityScripts + * @deprecated This function is deprecated and will be removed. */ Q_INVOKABLE void unloadAllEntityScripts(); @@ -548,7 +558,8 @@ public: /**jsdoc * @function Script.generateUUID - * @returns {Uuid} + * @returns {Uuid} A new UUID. + * @deprecated This function is deprecated and will be removed. Use {@link Uuid.generate} instead. */ Q_INVOKABLE QUuid generateUUID() { return QUuid::createUuid(); } @@ -605,7 +616,8 @@ public slots: /**jsdoc * @function Script.updateMemoryCost - * @param {number} deltaSize + * @param {number} deltaSize - Delta size. + * @deprecated This function is deprecated and will be removed. */ void updateMemoryCost(const qint64&); @@ -657,16 +669,18 @@ signals: /**jsdoc * @function Script.finished - * @param {string} filename - * @param {object} engine + * @param {string} filename - File name. + * @param {object} engine - Engine. * @returns {Signal} + * @deprecated This signal is deprecated and will be removed. */ void finished(const QString& fileNameString, ScriptEnginePointer); /**jsdoc * @function Script.cleanupMenuItem - * @param {string} menuItem + * @param {string} menuItem - Menu item. * @returns {Signal} + * @deprecated This signal is deprecated and will be removed. */ void cleanupMenuItem(const QString& menuItemString); @@ -711,6 +725,7 @@ signals: /**jsdoc * @function Script.clearDebugWindow * @returns {Signal} + * @deprecated This signal is deprecated and will be removed. */ void clearDebugWindow(); @@ -739,6 +754,7 @@ signals: /**jsdoc * @function Script.entityScriptDetailsUpdated * @returns {Signal} + * @deprecated This signal is deprecated and will be removed. */ // Emitted when an entity script is added or removed, or when the status of an entity // script is updated (goes from RUNNING to ERROR_RUNNING_SCRIPT, for example) @@ -757,16 +773,18 @@ protected: /**jsdoc * @function Script.executeOnScriptThread - * @param {object} function - * @param {ConnectionType} [type=2] + * @param {object} function - Function. + * @param {ConnectionType} [type=2] - Connection type. + * @deprecated This function is deprecated and will be removed. */ Q_INVOKABLE void executeOnScriptThread(std::function function, const Qt::ConnectionType& type = Qt::QueuedConnection ); /**jsdoc * @function Script._requireResolve - * @param {string} module - * @param {string} [relativeTo=""] - * @returns {string} + * @param {string} module - Module. + * @param {string} [relativeTo=""] - Relative to. + * @returns {string} Result. + * @deprecated This function is deprecated and will be removed. */ // note: this is not meant to be called directly, but just to have QMetaObject take care of wiring it up in general; // then inside of init() we just have to do "Script.require.resolve = Script._requireResolve;" @@ -789,12 +807,13 @@ protected: /**jsdoc * @function Script.entityScriptContentAvailable - * @param {Uuid} entityID - * @param {string} scriptOrURL - * @param {string} contents - * @param {boolean} isURL - * @param {boolean} success - * @param {string} status + * @param {Uuid} entityID - Entity ID. + * @param {string} scriptOrURL - Path. + * @param {string} contents - Contents. + * @param {boolean} isURL - Is URL. + * @param {boolean} success - Success. + * @param {string} status - Status. + * @deprecated This function is deprecated and will be removed. */ Q_INVOKABLE void entityScriptContentAvailable(const EntityItemID& entityID, const QString& scriptOrURL, const QString& contents, bool isURL, bool success, const QString& status); diff --git a/libraries/shared/src/BaseScriptEngine.h b/libraries/shared/src/BaseScriptEngine.h index 0a1addaa2e..6baa5d3c35 100644 --- a/libraries/shared/src/BaseScriptEngine.h +++ b/libraries/shared/src/BaseScriptEngine.h @@ -42,17 +42,19 @@ public: /**jsdoc * @function Script.makeError - * @param {object} [other] - * @param {string} [type="Error"] - * @returns {object} + * @param {object} [other] - Other. + * @param {string} [type="Error"] - Errorl + * @returns {object} Object. + * @deprecated This function is deprecated and will be removed. */ Q_INVOKABLE QScriptValue makeError(const QScriptValue& other = QScriptValue(), const QString& type = "Error"); /**jsdoc * @function Script.formatExecption - * @param {object} exception - * @param {boolean} inludeExtendeDetails - * @returns {string} + * @param {object} exception - Exception. + * @param {boolean} inludeExtendeDetails - Include extended details. + * @returns {string} String. + * @deprecated This function is deprecated and will be removed. */ Q_INVOKABLE QString formatException(const QScriptValue& exception, bool includeExtendedDetails); @@ -71,8 +73,9 @@ public: signals: /**jsdoc * @function Script.signalHandlerException - * @param {object} exception + * @param {object} exception - Exception. * @returns {Signal} + * @deprecated This signal is deprecated and will be removed. */ // Script.signalHandlerException is exposed by QScriptEngine. From ca7ddece8b1dc6c763dfc4c226836cc367522f43 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Tue, 21 May 2019 09:49:21 +1200 Subject: [PATCH 104/203] Add missing Script JSDoc --- .../entities/src/EntityScriptingInterface.h | 12 ++ libraries/script-engine/src/ScriptEngine.cpp | 29 ++- libraries/script-engine/src/ScriptEngine.h | 202 +++++++++++++----- libraries/shared/src/BaseScriptEngine.h | 17 +- 4 files changed, 199 insertions(+), 61 deletions(-) diff --git a/libraries/entities/src/EntityScriptingInterface.h b/libraries/entities/src/EntityScriptingInterface.h index c072dedaf9..39700bfc31 100644 --- a/libraries/entities/src/EntityScriptingInterface.h +++ b/libraries/entities/src/EntityScriptingInterface.h @@ -1770,6 +1770,7 @@ signals: /**jsdoc * Triggered on the client that is the physics simulation owner during the collision of two entities. Note: Isn't triggered * for a collision with an avatar. + *

See also, {@link Script.addEventHandler}.

* @function Entities.collisionWithEntity * @param {Uuid} idA - The ID of one entity in the collision. For an entity script, this is the ID of the entity containing * the script. @@ -1882,6 +1883,7 @@ signals: /**jsdoc * Triggered when a mouse button is clicked while the mouse cursor is on an entity, or a controller trigger is fully * pressed while its laser is on an entity. + *

See also, {@link Script.addEventHandler}.

* @function Entities.mousePressOnEntity * @param {Uuid} entityID - The ID of the entity that was pressed. * @param {PointerEvent} event - Details of the event. @@ -1906,6 +1908,7 @@ signals: /**jsdoc * Repeatedly triggered while the mouse cursor or controller laser moves on an entity. + *

See also, {@link Script.addEventHandler}.

* @function Entities.mouseMoveOnEntity * @param {Uuid} entityID - The ID of the entity that was moved on. * @param {PointerEvent} event - Details of the event. @@ -1916,6 +1919,7 @@ signals: /**jsdoc * Triggered when a mouse button is released after clicking on an entity or the controller trigger is partly or fully * released after pressing on an entity, even if the mouse pointer or controller laser has moved off the entity. + *

See also, {@link Script.addEventHandler}.

* @function Entities.mouseReleaseOnEntity * @param {Uuid} entityID - The ID of the entity that was originally pressed. * @param {PointerEvent} event - Details of the event. @@ -1942,6 +1946,7 @@ signals: /**jsdoc * Triggered when a mouse button is clicked while the mouse cursor is on an entity. Note: Not triggered by controller. + *

See also, {@link Script.addEventHandler}.

* @function Entities.clickDownOnEntity * @param {Uuid} entityID - The ID of the entity that was clicked. * @param {PointerEvent} event - Details of the event. @@ -1952,6 +1957,7 @@ signals: /**jsdoc * Repeatedly triggered while a mouse button continues to be held after clicking an entity, even if the mouse cursor has * moved off the entity. Note: Not triggered by controller. + *

See also, {@link Script.addEventHandler}.

* @function Entities.holdingClickOnEntity * @param {Uuid} entityID - The ID of the entity that was originally clicked. * @param {PointerEvent} event - Details of the event. @@ -1962,6 +1968,7 @@ signals: /**jsdoc * Triggered when a mouse button is released after clicking on an entity, even if the mouse cursor has moved off the * entity. Note: Not triggered by controller. + *

See also, {@link Script.addEventHandler}.

* @function Entities.clickReleaseOnEntity * @param {Uuid} entityID - The ID of the entity that was originally clicked. * @param {PointerEvent} event - Details of the event. @@ -1971,6 +1978,7 @@ signals: /**jsdoc * Triggered when the mouse cursor or controller laser starts hovering on an entity. + *

See also, {@link Script.addEventHandler}.

* @function Entities.hoverEnterEntity * @param {Uuid} entityID - The ID of the entity that is being hovered. * @param {PointerEvent} event - Details of the event. @@ -1980,6 +1988,7 @@ signals: /**jsdoc * Repeatedly triggered when the mouse cursor or controller laser moves while hovering over an entity. + *

See also, {@link Script.addEventHandler}.

* @function Entities.hoverOverEntity * @param {Uuid} entityID - The ID of the entity that is being hovered. * @param {PointerEvent} event - Details of the event. @@ -1989,6 +1998,7 @@ signals: /**jsdoc * Triggered when the mouse cursor or controller laser stops hovering over an entity. + *

See also, {@link Script.addEventHandler}.

* @function Entities.hoverLeaveEntity * @param {Uuid} entityID - The ID of the entity that was being hovered. * @param {PointerEvent} event - Details of the event. @@ -1999,6 +2009,7 @@ signals: /**jsdoc * Triggered when an avatar enters an entity. + *

See also, {@link Script.addEventHandler}.

* @function Entities.enterEntity * @param {Uuid} entityID - The ID of the entity that the avatar entered. * @returns {Signal} @@ -2032,6 +2043,7 @@ signals: /**jsdoc * Triggered when an avatar leaves an entity. + *

See also, {@link Script.addEventHandler}.

* @function Entities.leaveEntity * @param {Uuid} entityID - The ID of the entity that the avatar left. * @returns {Signal} diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 7abb63ca1c..309161206c 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -987,6 +987,31 @@ void ScriptEngine::addEventHandler(const EntityItemID& entityID, const QString& }; }; + /**jsdoc + * The name of an entity event. When the entity event occurs, any function that has been registered for that event via + * {@link Script.addEventHandler} is called with parameters per the entity event. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Event NameEntity Event
"enterEntity"{@link Entities.enterEntity}
"leaveEntity"{@link Entities.leaveEntity}
"mousePressOnEntity"{@link Entities.mousePressOnEntity}
"mouseMoveOnEntity"{@link Entities.mouseMoveOnEntity}
"mouseReleaseOnEntity"{@link Entities.mouseReleaseOnEntity}
"clickDownOnEntity"{@link Entities.clickDownOnEntity}
"holdingClickOnEntity"{@link Entities.holdingClickOnEntity}
"clickReleaseOnEntity"{@link Entities.clickReleaseOnEntity}
"hoverEnterEntity"{@link Entities.hoverEnterEntity}
"hoverOverEntity"{@link Entities.hoverOverEntity}
"hoverLeaveEntity"{@link Entities.hoverLeaveEntity}
"collisionWithEntity"{@link Entities.collisionWithEntity}
+ * + * @typedef {string} Script.EntityEvent + */ connect(entities.data(), &EntityScriptingInterface::enterEntity, this, makeSingleEntityHandler("enterEntity")); connect(entities.data(), &EntityScriptingInterface::leaveEntity, this, makeSingleEntityHandler("leaveEntity")); @@ -2147,7 +2172,7 @@ void ScriptEngine::loadEntityScript(const EntityItemID& entityID, const QString& } /**jsdoc - * Triggered when the script starts for a user. + * Triggered when the script starts for a user. See also, {@link Script.entityScriptPreloadFinished}. *

Note: Can only be connected to via this.preload = function (...) { ... } in the entity script.

*
Available in:Client Entity ScriptsServer Entity Scripts
* @function Entities.preload @@ -2161,7 +2186,7 @@ void ScriptEngine::loadEntityScript(const EntityItemID& entityID, const QString& * this.entityID = entityID; * print("Entity ID: " + this.entityID); * }; - * ); + * }); * * var entityID = Entities.addEntity({ * type: "Box", diff --git a/libraries/script-engine/src/ScriptEngine.h b/libraries/script-engine/src/ScriptEngine.h index b81829aa54..c6b1135fc6 100644 --- a/libraries/script-engine/src/ScriptEngine.h +++ b/libraries/script-engine/src/ScriptEngine.h @@ -110,7 +110,14 @@ public: * @hifi-server-entity * @hifi-assignment-client * - * @property {string} context + * @property {string} context - The context that the script is running in: + *
    + *
  • "client": An Interface or avatar script.
  • + *
  • "entity_client": A client entity script.
  • + *
  • "entity_server": A server entity script.
  • + *
  • "agent": An assignment client script.
  • + *
+ * Read-only. */ class ScriptEngine : public BaseScriptEngine, public EntitiesScriptEngineProvider { Q_OBJECT @@ -153,6 +160,7 @@ public: /**jsdoc * Stops and unloads the current script. + *

Warning: If an assignment client script, the script gets restarted after stopping.

* @function Script.stop * @param {boolean} [marshal=false] - Marshal. *

Deprecated: This parameter is deprecated and will be removed.

@@ -255,38 +263,53 @@ public: bool hasValidScriptSuffix(const QString& scriptFileName); /**jsdoc + * Gets the context that the script is running in: Interface/avatar, client entity, server entity, or assignment client. * @function Script.getContext - * @returns {string} + * @returns {string} The context that the script is running in: + *
    + *
  • "client": An Interface or avatar script.
  • + *
  • "entity_client": A client entity script.
  • + *
  • "entity_server": A server entity script.
  • + *
  • "agent": An assignment client script.
  • + *
*/ Q_INVOKABLE QString getContext() const; /**jsdoc + * Checks whether the script is running as an Interface or avatar script. * @function Script.isClientScript - * @returns {boolean} + * @returns {boolean} true if the script is running as an Interface or avatar script, false if it + * isn't. */ Q_INVOKABLE bool isClientScript() const { return _context == CLIENT_SCRIPT; } /**jsdoc + * Checks whether the application was compiled as a debug build. * @function Script.isDebugMode - * @returns {boolean} + * @returns {boolean} true if the software was compiled as a debug build, false if it was + * compiled as a release build. */ Q_INVOKABLE bool isDebugMode() const; /**jsdoc + * Checks whether the script content is a client entity script. * @function Script.isEntityClientScript - * @returns {boolean} + * @returns {boolean} true if the script is running as a client entity script, false if it isn't. */ Q_INVOKABLE bool isEntityClientScript() const { return _context == ENTITY_CLIENT_SCRIPT; } /**jsdoc + * Checks whether the script context is a server entity script. * @function Script.isEntityServerScript - * @returns {boolean} + * @returns {boolean} true if the script is running as a server entity script, false if it isn't. */ Q_INVOKABLE bool isEntityServerScript() const { return _context == ENTITY_SERVER_SCRIPT; } /**jsdoc + * Checks whether the script is running as an assignment client script. * @function Script.isAgentScript - * @returns {boolean} + * @returns {boolean} true if the script is running as an assignment client script, false if it + * isn't. */ Q_INVOKABLE bool isAgentScript() const { return _context == AGENT_SCRIPT; } @@ -294,24 +317,40 @@ public: // NOTE - these are intended to be public interfaces available to scripts /**jsdoc + * Adds a function to the list of functions called upon the occurrence of an entity event on a particular entity. * @function Script.addEventHandler - * @param {Uuid} entityID - * @param {string} eventName - * @param {function} handler + * @param {Uuid} entityID - The ID of the entity. + * @param {Script.EntityEvent} eventName - The name of the entity event. + * @param {function} handler - The function to call when the entity event occurs on the entity. It can be either the name + * of a function or an in-line definition. + * @example Report when a mouse press occurs on a particular entity. + * var entityID = Entities.addEntity({ + * type: "Box", + * position: Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(MyAvatar.orientation, { x: 0, y: 0, z: -5 })), + * dimensions: { x: 0.5, y: 0.5, z: 0.5 }, + * lifetime: 300 // Delete after 5 minutes. + * }); + * + * function reportMousePress(entityID, event) { + * print("Mouse pressed on entity: " + JSON.stringify(event)); + * } + * + * Script.addEventHandler(entityID, "mousePressOnEntity", reportMousePress); */ Q_INVOKABLE void addEventHandler(const EntityItemID& entityID, const QString& eventName, QScriptValue handler); /**jsdoc + * Removes a function from the list of functions called upon the occurrence of an entity event on a particular entity. * @function Script.removeEventHandler - * @param {Uuid} entityID - * @param {string} eventName - * @param {function} handler + * @param {Uuid} entityID - The ID of the entity. + * @param {Script.EntityEvent} eventName - The name of the entity event. + * @param {function} handler - The name of the function to no longer call when the entity event occurs on the entity. */ Q_INVOKABLE void removeEventHandler(const EntityItemID& entityID, const QString& eventName, QScriptValue handler); /**jsdoc * Starts running another script in Interface. - *

Note: Only works for Interface and avatar scripts.

+ *
Available in:Interface ScriptsAvatar Scripts
* @function Script.load * @param {string} filename - The URL of the script to load. This can be relative to the current script's URL. * @example Load a script from another script. @@ -336,8 +375,8 @@ public: * @function Script.include * @variation 0 * @param {string[]} filenames - The URLs of the scripts to include. Each can be relative to the current script. - * @param {function} [callback=null] - The function to call back when the scripts have been included. It can be an in-line - * function or the name of a function. + * @param {function} [callback=null] - The function to call back when the scripts have been included. It can be either the + * name of a function or an in-line definition. */ Q_INVOKABLE void include(const QStringList& includeFiles, QScriptValue callback = QScriptValue()); @@ -346,8 +385,8 @@ public: * asynchronously, otherwise it is included synchronously (i.e., script execution blocks while the file is included). * @function Script.include * @param {string} filename - The URL of the script to include. It can be relative to the current script. - * @param {function} [callback=null] - The function to call back when the script has been included. It can be an in-line - * function or the name of a function. + * @param {function} [callback=null] - The function to call back when the script has been included. It can be either the + * name of a function or an in-line definition. * @example Include a script file asynchronously. * // First file: scriptA.js * print("This is script A"); @@ -370,14 +409,18 @@ public: // MODULE related methods /**jsdoc + * Provides access to methods or objects provided in an external JavaScript or JSON file. + * See {@link https://docs.highfidelity.com/script/js-tips.html} for further details. * @function Script.require - * @param {string} module + * @param {string} module - The module to use. May be a JavaScript file or the name of system model such as + * "sppUi". */ Q_INVOKABLE QScriptValue require(const QString& moduleId); /**jsdoc * @function Script.resetModuleCache - * @param {boolean} [deleteScriptCache=false] + * @param {boolean} [deleteScriptCache=false] - Delete script cache. + * @deprecated This function is deprecated and will be removed. */ Q_INVOKABLE void resetModuleCache(bool deleteScriptCache = false); @@ -390,7 +433,7 @@ public: /**jsdoc * Calls a function repeatedly, at a set interval. * @function Script.setInterval - * @param {function} function - The function to call. This can be an in-line function or the name of a function. + * @param {function} function - The function to call. This can be either the name of a function or an in-line definition. * @param {number} interval - The interval at which to call the function, in ms. * @returns {object} A handle to the interval timer. This can be used by {@link Script.clearInterval}. * @example Print a message every second. @@ -403,7 +446,7 @@ public: /**jsdoc * Calls a function once, after a delay. * @function Script.setTimeout - * @param {function} function - The function to call. This can be an in-line function or the name of a function. + * @param {function} function - The function to call. This can be either the name of a function or an in-line definition. * @param {number} timeout - The delay after which to call the function, in ms. * @returns {object} A handle to the timeout timer. This can be used by {@link Script.clearTimeout}. * @example Print a message once, after a second. @@ -447,8 +490,16 @@ public: Q_INVOKABLE void clearTimeout(QObject* timer) { stopTimer(reinterpret_cast(timer)); } /**jsdoc + * Prints a message to the program log. + *

Alternatively, you can use {@link print}, {@link console.log}, or one of the other {@link console} methods.

* @function Script.print - * @param {string} message + * @param {string} message - The message to print. + */ + /**jsdoc + * Prints a message to the program log. + *

This is an alias of {@link Script.print}.

+ * @function print + * @param {string} message - The message to print. */ Q_INVOKABLE void print(const QString& message); @@ -467,20 +518,25 @@ public: Q_INVOKABLE QUrl resolvePath(const QString& path) const; /**jsdoc + * Gets the path to the resources directory for QML files. * @function Script.resourcesPath - * @returns {string} + * @returns {string} The path to the resources directory for QML files. */ Q_INVOKABLE QUrl resourcesPath() const; /**jsdoc + * Starts timing a section of code in order to send usage data about it to High Fidelity. Shouldn't be used outside of the + * standard scripts. * @function Script.beginProfileRange - * @param {string} label + * @param {string} label - A name that identifies the section of code. */ Q_INVOKABLE void beginProfileRange(const QString& label) const; /**jsdoc + * Finishes timing a section of code in order to send usage data about it to High Fidelity. Shouldn't be used outside of + * the standard scripts. * @function Script.endProfileRange - * @param {string} label + * @param {string} label - A name that identifies the section of code. */ Q_INVOKABLE void endProfileRange(const QString& label) const; @@ -488,9 +544,10 @@ public: // Entity Script Related methods /**jsdoc + * Checks whether an entity has an entity script running. * @function Script.isEntityScriptRunning - * @param {Uuid} entityID - * @returns {boolean} + * @param {Uuid} entityID - The ID of the entity. + * @returns {boolean} true if the entity has an entity script running, false if it doesn't. */ Q_INVOKABLE bool isEntityScriptRunning(const EntityItemID& entityID) { QReadLocker locker { &_entityScriptsLock }; @@ -524,34 +581,41 @@ public: Q_INVOKABLE void unloadAllEntityScripts(); /**jsdoc + * Calls a method in an entity script. * @function Script.callEntityScriptMethod - * @param {Uuid} entityID - * @param {string} methodName - * @param {string[]} [parameters=[]] - * @param {Uuid} [remoteCallerID=Uuid.NULL] + * @param {Uuid} entityID - The ID of the entity running the entity script. + * @param {string} methodName - The name of the method to call. + * @param {string[]} [parameters=[]] - The parameters to call the specified method with. + * @param {Uuid} [remoteCallerID=Uuid.NULL] - An ID that identifies the caller. */ Q_INVOKABLE void callEntityScriptMethod(const EntityItemID& entityID, const QString& methodName, const QStringList& params = QStringList(), const QUuid& remoteCallerID = QUuid()) override; /**jsdoc + * Calls a method in an entity script. * @function Script.callEntityScriptMethod - * @param {Uuid} entityID - * @param {string} methodName - * @param {PointerEvent} event + * @param {Uuid} entityID - Entity ID. + * @param {string} methodName - Method name. + * @param {PointerEvent} event - Pointer event. + * @deprecated This function is deprecated and will be removed. */ Q_INVOKABLE void callEntityScriptMethod(const EntityItemID& entityID, const QString& methodName, const PointerEvent& event); /**jsdoc + * Calls a method in an entity script. * @function Script.callEntityScriptMethod - * @param {Uuid} entityID - * @param {string} methodName - * @param {Uuid} otherID - * @param {Collision} collision + * @param {Uuid} entityID - Entity ID. + * @param {string} methodName - Method name. + * @param {Uuid} otherID - Other entity ID. + * @param {Collision} collision - Collision. + * @deprecated This function is deprecated and will be removed. */ Q_INVOKABLE void callEntityScriptMethod(const EntityItemID& entityID, const QString& methodName, const EntityItemID& otherID, const Collision& collision); /**jsdoc + * Manually runs the JavaScript garbage collector which reclaims memory by disposing of objects that are no longer + * reachable. * @function Script.requestGarbageCollection */ Q_INVOKABLE void requestGarbageCollection() { collectGarbage(); } @@ -625,15 +689,17 @@ signals: /**jsdoc * @function Script.scriptLoaded - * @param {string} filename + * @param {string} filename - File name. * @returns {Signal} + * @deprecated This signal is deprecated and will be removed. */ void scriptLoaded(const QString& scriptFilename); /**jsdoc * @function Script.errorLoadingScript - * @param {string} filename + * @param {string} filename - File name. * @returns {Signal} + * @deprecated This signal is deprecated and will be removed. */ void errorLoadingScript(const QString& scriptFilename); @@ -685,38 +751,44 @@ signals: void cleanupMenuItem(const QString& menuItemString); /**jsdoc + * Triggered when a script prints a message to the program log via {@link Script.print}, {@link print}, + * {@link console.log}, {@link console.info}, {@link console.warn}, {@link console.error}, or {@link console.debug}. * @function Script.printedMessage - * @param {string} message - * @param {string} scriptName + * @param {string} message - The message. + * @param {string} scriptName - The name of the script that generated the message. * @returns {Signal} */ void printedMessage(const QString& message, const QString& scriptName); /**jsdoc + * Triggered when a script generates an error or {@link console.error} is called. * @function Script.errorMessage - * @param {string} message - * @param {string} scriptName + * @param {string} message - The error message. + * @param {string} scriptName - The name of the script that generated the error message. * @returns {Signal} */ void errorMessage(const QString& message, const QString& scriptName); /**jsdoc + * Triggered when a script generates a warning or {@link console.warn} is called. * @function Script.warningMessage - * @param {string} message - * @param {string} scriptName + * @param {string} message - The warning message. + * @param {string} scriptName - The name of the script that generated the warning message. * @returns {Signal} */ void warningMessage(const QString& message, const QString& scriptName); /**jsdoc + * Triggered when a script generates an information message or {@link console.info} is called. * @function Script.infoMessage - * @param {string} message - * @param {string} scriptName + * @param {string} message - The information message. + * @param {string} scriptName - The name of the script that generated the information message. * @returns {Signal} */ void infoMessage(const QString& message, const QString& scriptName); /**jsdoc + * Triggered when the running state of the script changes, e.g., from running to stopping. * @function Script.runningStateChanged * @returns {Signal} */ @@ -731,21 +803,24 @@ signals: /**jsdoc * @function Script.loadScript - * @param {string} scriptName - * @param {boolean} isUserLoaded + * @param {string} scriptName - Script name. + * @param {boolean} isUserLoaded - Is user loaded. * @returns {Signal} + * @deprecated This signal is deprecated and will be removed. */ void loadScript(const QString& scriptName, bool isUserLoaded); /**jsdoc * @function Script.reloadScript - * @param {string} scriptName - * @param {boolean} isUserLoaded + * @param {string} scriptName - Script name. + * @param {boolean} isUserLoaded - Is user loaded. * @returns {Signal} + * @deprecated This signal is deprecated and will be removed. */ void reloadScript(const QString& scriptName, bool isUserLoaded); /**jsdoc + * Triggered when the script has stopped. * @function Script.doneRunning * @returns {Signal} */ @@ -761,9 +836,28 @@ signals: void entityScriptDetailsUpdated(); /**jsdoc + * Triggered when the script starts for the user. See also, {@link Entities.preload}. + *
Available in:Client Entity ScriptsServer Entity Scripts
* @function Script.entityScriptPreloadFinished - * @param {Uuid} entityID + * @param {Uuid} entityID - The ID of the entity that the script is running in. * @returns {Signal} + * @example Get the ID of the entity that a client entity script is running in. + * var entityScript = (function () { + * this.entityID = Uuid.NULL; + * + * Script.entityScriptPreloadFinished.connect(function (entityID) { + * this.entityID = entityID; + * print("Entity ID: " + this.entityID); + * }); + * + * var entityID = Entities.addEntity({ + * type: "Box", + * position: Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(MyAvatar.orientation, { x: 0, y: 0, z: -5 })), + * dimensions: { x: 0.5, y: 0.5, z: 0.5 }, + * color: { red: 255, green: 0, blue: 0 }, + * script: "(" + entityScript + ")", // Could host the script on a Web server instead. + * lifetime: 300 // Delete after 5 minutes. + * }); */ // Emitted when an entity script has finished running preload void entityScriptPreloadFinished(const EntityItemID& entityID); diff --git a/libraries/shared/src/BaseScriptEngine.h b/libraries/shared/src/BaseScriptEngine.h index 6baa5d3c35..b750c20028 100644 --- a/libraries/shared/src/BaseScriptEngine.h +++ b/libraries/shared/src/BaseScriptEngine.h @@ -33,10 +33,11 @@ public: /**jsdoc * @function Script.lintScript - * @param {string} sourceCode - * @param {string} fileName - * @param {number} [lineNumber=1] - * @returns {object} + * @param {string} sourceCode - Source code. + * @param {string} fileName - File name. + * @param {number} [lineNumber=1] - Line number. + * @returns {object} Object. + * @deprecated This function is deprecated and will be removed. */ Q_INVOKABLE QScriptValue lintScript(const QString& sourceCode, const QString& fileName, const int lineNumber = 1); @@ -80,9 +81,15 @@ signals: // Script.signalHandlerException is exposed by QScriptEngine. /**jsdoc + * Triggered when a script generates an unhandled exception. * @function Script.unhandledException - * @param {object} exception + * @param {object} exception - The details of the exception. * @returns {Signal} + * @example Report the details of an unhandled exception. + * Script.unhandledException.connect(function (exception) { + * print("Unhandled exception: " + JSON.stringify(exception)); + * }); + * var properties = JSON.parse("{ x: 1"); // Invalid JSON string. */ void unhandledException(const QScriptValue& exception); From 5227b35c6b96295e4655ae1182872c85c7b3cbbc Mon Sep 17 00:00:00 2001 From: David Rowe Date: Tue, 21 May 2019 10:16:01 +1200 Subject: [PATCH 105/203] Revise changes --- libraries/script-engine/src/ScriptEngine.h | 32 +++++++++++----------- libraries/shared/src/BaseScriptEngine.h | 2 +- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/libraries/script-engine/src/ScriptEngine.h b/libraries/script-engine/src/ScriptEngine.h index c6b1135fc6..e58609f01d 100644 --- a/libraries/script-engine/src/ScriptEngine.h +++ b/libraries/script-engine/src/ScriptEngine.h @@ -196,8 +196,8 @@ public: /**jsdoc * @function Script.registerGetterSetter * @param {string} name - Name. - * @param {object} getter - Getter. - * @param {object} setter - Setter. + * @param {function} getter - Getter. + * @param {function} setter - Setter. * @param {string} [parent=""] - Parent. * @deprecated This function is deprecated and will be removed. */ @@ -208,7 +208,7 @@ public: /**jsdoc * @function Script.registerFunction * @param {string} name - Name. - * @param {object} function - Function. + * @param {function} function - Function. * @param {number} [numArguments=-1] - Number of arguments. * @deprecated This function is deprecated and will be removed. */ @@ -219,7 +219,7 @@ public: * @function Script.registerFunction * @param {string} parent - Parent. * @param {string} name - Name. - * @param {object} function - Function. + * @param {function} function - Function. * @param {number} [numArguments=-1] - Number of arguments. * @deprecated This function is deprecated and will be removed. */ @@ -286,20 +286,20 @@ public: /**jsdoc * Checks whether the application was compiled as a debug build. * @function Script.isDebugMode - * @returns {boolean} true if the software was compiled as a debug build, false if it was + * @returns {boolean} true if the application was compiled as a debug build, false if it was * compiled as a release build. */ Q_INVOKABLE bool isDebugMode() const; /**jsdoc - * Checks whether the script content is a client entity script. + * Checks whether the script is running as a client entity script. * @function Script.isEntityClientScript * @returns {boolean} true if the script is running as a client entity script, false if it isn't. */ Q_INVOKABLE bool isEntityClientScript() const { return _context == ENTITY_CLIENT_SCRIPT; } /**jsdoc - * Checks whether the script context is a server entity script. + * Checks whether the script is running as a server entity script. * @function Script.isEntityServerScript * @returns {boolean} true if the script is running as a server entity script, false if it isn't. */ @@ -317,7 +317,7 @@ public: // NOTE - these are intended to be public interfaces available to scripts /**jsdoc - * Adds a function to the list of functions called upon the occurrence of an entity event on a particular entity. + * Adds a function to the list of functions called when an entity event occurs on a particular entity. * @function Script.addEventHandler * @param {Uuid} entityID - The ID of the entity. * @param {Script.EntityEvent} eventName - The name of the entity event. @@ -340,7 +340,7 @@ public: Q_INVOKABLE void addEventHandler(const EntityItemID& entityID, const QString& eventName, QScriptValue handler); /**jsdoc - * Removes a function from the list of functions called upon the occurrence of an entity event on a particular entity. + * Removes a function from the list of functions called when an entity event occurs on a particular entity. * @function Script.removeEventHandler * @param {Uuid} entityID - The ID of the entity. * @param {Script.EntityEvent} eventName - The name of the entity event. @@ -412,7 +412,7 @@ public: * Provides access to methods or objects provided in an external JavaScript or JSON file. * See {@link https://docs.highfidelity.com/script/js-tips.html} for further details. * @function Script.require - * @param {string} module - The module to use. May be a JavaScript file or the name of system model such as + * @param {string} module - The module to use. May be a JavaScript file or the name of a system module such as * "sppUi". */ Q_INVOKABLE QScriptValue require(const QString& moduleId); @@ -435,7 +435,7 @@ public: * @function Script.setInterval * @param {function} function - The function to call. This can be either the name of a function or an in-line definition. * @param {number} interval - The interval at which to call the function, in ms. - * @returns {object} A handle to the interval timer. This can be used by {@link Script.clearInterval}. + * @returns {object} A handle to the interval timer. This can be used in {@link Script.clearInterval}. * @example Print a message every second. * Script.setInterval(function () { * print("Interval timer fired"); @@ -448,7 +448,7 @@ public: * @function Script.setTimeout * @param {function} function - The function to call. This can be either the name of a function or an in-line definition. * @param {number} timeout - The delay after which to call the function, in ms. - * @returns {object} A handle to the timeout timer. This can be used by {@link Script.clearTimeout}. + * @returns {object} A handle to the timeout timer. This can be used in {@link Script.clearTimeout}. * @example Print a message once, after a second. * Script.setTimeout(function () { * print("Timeout timer fired"); @@ -559,7 +559,7 @@ public: /**jsdoc * @function Script.loadEntityScript - * @param {Uuid} entityID - Entity IUD. + * @param {Uuid} entityID - Entity ID. * @param {string} script - Script. * @param {boolean} forceRedownload - Force re-download. * @deprecated This function is deprecated and will be removed. @@ -669,7 +669,7 @@ public slots: /**jsdoc * @function Script.callAnimationStateHandler - * @param {function} callback - Callback. + * @param {function} callback - Callback function. * @param {object} parameters - Parameters. * @param {string[]} names - Names. * @param {boolean} useNames - Use names. @@ -867,7 +867,7 @@ protected: /**jsdoc * @function Script.executeOnScriptThread - * @param {object} function - Function. + * @param {function} function - Function. * @param {ConnectionType} [type=2] - Connection type. * @deprecated This function is deprecated and will be removed. */ @@ -904,7 +904,7 @@ protected: * @param {Uuid} entityID - Entity ID. * @param {string} scriptOrURL - Path. * @param {string} contents - Contents. - * @param {boolean} isURL - Is URL. + * @param {boolean} isURL - Is a URL. * @param {boolean} success - Success. * @param {string} status - Status. * @deprecated This function is deprecated and will be removed. diff --git a/libraries/shared/src/BaseScriptEngine.h b/libraries/shared/src/BaseScriptEngine.h index b750c20028..443c7b0500 100644 --- a/libraries/shared/src/BaseScriptEngine.h +++ b/libraries/shared/src/BaseScriptEngine.h @@ -44,7 +44,7 @@ public: /**jsdoc * @function Script.makeError * @param {object} [other] - Other. - * @param {string} [type="Error"] - Errorl + * @param {string} [type="Error"] - Error. * @returns {object} Object. * @deprecated This function is deprecated and will be removed. */ From 43874fbfb39ed0e08219959e9db63b7db346a2b7 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Mon, 20 May 2019 17:21:10 -0700 Subject: [PATCH 106/203] fix AA toggle --- libraries/render-utils/src/AntialiasingEffect.cpp | 6 ++++-- libraries/render-utils/src/AntialiasingEffect.h | 1 + libraries/render-utils/src/RenderDeferredTask.cpp | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/libraries/render-utils/src/AntialiasingEffect.cpp b/libraries/render-utils/src/AntialiasingEffect.cpp index a445ea2343..180e914d60 100644 --- a/libraries/render-utils/src/AntialiasingEffect.cpp +++ b/libraries/render-utils/src/AntialiasingEffect.cpp @@ -378,6 +378,8 @@ void JitterSample::configure(const Config& config) { } } else if (config.stop) { _sampleSequence.currentIndex = -1; + } else { + _sampleSequence.currentIndex = config.getIndex(); } _scale = config.scale; } @@ -392,10 +394,10 @@ void JitterSample::run(const render::RenderContextPointer& renderContext, Output } } - jitter.x = 0.0f; - jitter.y = 0.0f; if (current >= 0) { jitter = _sampleSequence.offsets[current]; + } else { + jitter = glm::vec2(0.0f); } } diff --git a/libraries/render-utils/src/AntialiasingEffect.h b/libraries/render-utils/src/AntialiasingEffect.h index 8057601317..7d8bbb44d9 100644 --- a/libraries/render-utils/src/AntialiasingEffect.h +++ b/libraries/render-utils/src/AntialiasingEffect.h @@ -107,6 +107,7 @@ public: AntialiasingConfig() : render::Job::Config(true) {} void setDebugFXAA(bool debug) { debugFXAAX = (debug ? 0.0f : 1.0f); emit dirty();} + bool debugFXAA() const { return (debugFXAAX == 0.0f ? true : false); } float blend{ 0.25f }; float sharpen{ 0.05f }; diff --git a/libraries/render-utils/src/RenderDeferredTask.cpp b/libraries/render-utils/src/RenderDeferredTask.cpp index d808823d0c..624869bbf5 100644 --- a/libraries/render-utils/src/RenderDeferredTask.cpp +++ b/libraries/render-utils/src/RenderDeferredTask.cpp @@ -248,7 +248,7 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren // Debugging task is happening in the "over" layer after tone mapping and just before HUD { // Debug the bounds of the rendered items, still look at the zbuffer - const auto extraDebugBuffers = RenderDeferredTaskDebug::ExtraBuffers(linearDepthTarget, surfaceGeometryFramebuffer, ambientOcclusionFramebuffer, ambientOcclusionFramebuffer, scatteringResource, velocityBuffer); + const auto extraDebugBuffers = RenderDeferredTaskDebug::ExtraBuffers(linearDepthTarget, surfaceGeometryFramebuffer, ambientOcclusionFramebuffer, ambientOcclusionUniforms, scatteringResource, velocityBuffer); const auto debugInputs = RenderDeferredTaskDebug::Input(fetchedItems, shadowTaskOutputs, lightingStageInputs, lightClusters, prepareDeferredOutputs, extraDebugBuffers, deferredFrameTransform, jitter, lightingModel).asVarying(); task.addJob("DebugRenderDeferredTask", debugInputs); From 8dcc617acc220ffc84a53bb1d43929829f229163 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Mon, 20 May 2019 20:20:20 -0700 Subject: [PATCH 107/203] obey QT_CMAKE_PREFIX_PATH for non DEV_BUILD on UNIX --- cmake/macros/SetupQt.cmake | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/cmake/macros/SetupQt.cmake b/cmake/macros/SetupQt.cmake index 45ddd87035..1d94cb278b 100644 --- a/cmake/macros/SetupQt.cmake +++ b/cmake/macros/SetupQt.cmake @@ -51,18 +51,24 @@ macro(setup_qt) if(NOT DEFINED VCPKG_QT_CMAKE_PREFIX_PATH) message(FATAL_ERROR "VCPKG_QT_CMAKE_PREFIX_PATH should have been set by hifi_vcpkg.py") endif() - if (NOT DEFINED ENV{QT_CMAKE_PREFIX_PATH} OR NOT DEV_BUILD) - # HACK we ignore QT_CMAKE_PREFIX_PATH for PRODUCTION and PR builds - # so we can punt updating the automated build OS images while switching to vcpkg for Qt - if (APPLE AND NOT DEV_BUILD) - # DOUBLE HACK for Jenkins + macos build: always store qt5 in /var/tmp/ - # because that is where the manually-edited hard-coded path thinks it is + if (NOT DEV_BUILD) + if (APPLE) + # HACK: manually set the QT_CMAKE_PREFIX_PATH so that hard-coded paths find new QT libs where we'll put them set(QT_CMAKE_PREFIX_PATH "/var/tmp/qt5-install/lib/cmake") + elseif (UNIX) + # HACK: obey QT_CMAKE_PREFIX_PATH to allow UNIX to use older QT libs + set(QT_CMAKE_PREFIX_PATH $ENV{QT_CMAKE_PREFIX_PATH}) else() + # WIN32: ignore QT_CMAKE_PREFIX_PATH so Win32 uses new QT libs for installers set(QT_CMAKE_PREFIX_PATH ${VCPKG_QT_CMAKE_PREFIX_PATH}) endif() else() - set(QT_CMAKE_PREFIX_PATH $ENV{QT_CMAKE_PREFIX_PATH}) + # DEV_BUILD + if (DEFINED ENV{QT_CMAKE_PREFIX_PATH}) + set(QT_CMAKE_PREFIX_PATH $ENV{QT_CMAKE_PREFIX_PATH}) + else() + set(QT_CMAKE_PREFIX_PATH ${VCPKG_QT_CMAKE_PREFIX_PATH}) + endif() endif() # figure out where the qt dir is From d9f164ba3b4b9a15d0096b4229d4853c7206efe5 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 20 May 2019 22:00:26 -0700 Subject: [PATCH 108/203] Add support for application config --- interface/src/main.cpp | 45 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 11054d25d0..9d8b733ba7 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -75,6 +75,7 @@ int main(int argc, const char* argv[]) { QCommandLineOption helpOption = parser.addHelpOption(); QCommandLineOption urlOption("url", "", "value"); + QCommandLineOption noLauncherOption("no-launcher", "Do not execute the launcher"); QCommandLineOption noUpdaterOption("no-updater", "Do not show auto-updater"); QCommandLineOption checkMinSpecOption("checkMinSpec", "Check if machine meets minimum specifications"); QCommandLineOption runServerOption("runServer", "Whether to run the server"); @@ -84,6 +85,7 @@ int main(int argc, const char* argv[]) { QCommandLineOption overrideScriptsPathOption(SCRIPTS_SWITCH, "set scripts ", "path"); parser.addOption(urlOption); + parser.addOption(noLauncherOption); parser.addOption(noUpdaterOption); parser.addOption(checkMinSpecOption); parser.addOption(runServerOption); @@ -106,6 +108,49 @@ int main(int argc, const char* argv[]) { Q_UNREACHABLE(); } + QString applicationPath; + { + // A temporary application instance is needed to get the location of the running executable + // Tests using high_resolution_clock show that this takes about 30-50 microseconds (on my machine, YMMV) + // If we wanted to avoid the QCoreApplication, we would need to write our own + // cross-platform implementation. + QCoreApplication tempApp(argc, const_cast(argv)); + applicationPath = QCoreApplication::applicationDirPath(); + } + + static const QString APPLICATION_CONFIG_FILENAME = "config.json"; + QDir applicationDir(applicationPath); + QFile configFile(applicationDir.filePath(APPLICATION_CONFIG_FILENAME)); + + if (configFile.exists()) { + if (!configFile.open(QIODevice::ReadOnly)) { + qWarning() << "Found application config, but could not open it"; + } else { + auto contents = configFile.readAll(); + QJsonParseError error; + + auto doc = QJsonDocument::fromJson(contents, &error); + if (error.error) { + qWarning() << "Found application config, but could not parse it: " << error.errorString(); + } else { + static const QString LAUNCHER_PATH_KEY = "launcherPath"; + QString launcherPath = doc.object()[LAUNCHER_PATH_KEY].toString(); + if (!launcherPath.isEmpty()) { + if (!parser.isSet(noLauncherOption)) { + qDebug() << "Found a launcherPath in application config. Starting launcher."; + QProcess launcher; + launcher.setProgram(launcherPath); + launcher.startDetached(); + return 0; + } else { + qDebug() << "Found a launcherPath in application config, but the launcher" + " has been suppressed. Continuing normal execution."; + } + } + } + } + } + // Early check for --traceFile argument auto tracer = DependencyManager::set(); const char * traceFile = nullptr; From 19a7d91aef13baf04d1dc9b3fb113c6ad894d1f0 Mon Sep 17 00:00:00 2001 From: amerhifi Date: Mon, 20 May 2019 22:37:25 -0700 Subject: [PATCH 109/203] testing linux cpu info --- libraries/platform/src/LinuxPlatform.cpp | 46 +++++++++++++++++++++--- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/libraries/platform/src/LinuxPlatform.cpp b/libraries/platform/src/LinuxPlatform.cpp index aa63eb1e08..03952a8655 100644 --- a/libraries/platform/src/LinuxPlatform.cpp +++ b/libraries/platform/src/LinuxPlatform.cpp @@ -9,15 +9,51 @@ #include "LinuxPlatform.h" #include "platformJsonKeys.h" #include - +#include using namespace platform; + +static void getLCpuId( uint32_t* p, uint32_t ax ) +{ + +#if Q_OS_LINUX + __asm __volatile + ( "movl %%ebx, %%esi\n\t" + "cpuid\n\t" + "xchgl %%ebx, %%esi" + : "=a" (p[0]), "=S" (p[1]), + "=c" (p[2]), "=d" (p[3]) + : "0" (ax) + ); +#endif +} + void LinuxInstance::enumerateCpu() { json cpu = {}; + + uint32_t cpuInfo[4]={0,0,0,0}; + char CPUBrandString[16]; + char CPUModelString[16]; + char CPUClockString[16]; + uint32_t nExIds; + getLCpuId(cpuInfo, 0x80000000); + nExIds = cpuInfo[0]; + + for (uint32_t i = 0x80000000; i <= nExIds; ++i) { + getLCpuId(cpuInfo, i); + // Interpret CPU brand string + if (i == 0x80000002) { + memcpy(CPUBrandString, cpuInfo, sizeof(cpuInfo)); + } else if (i == 0x80000003) { + memcpy(CPUModelString, cpuInfo, sizeof(cpuInfo)); + } else if (i == 0x80000004) { + memcpy(CPUClockString, cpuInfo, sizeof(cpuInfo)); + } + } - cpu["cpuBrand"] = ""; - cpu["cpuModel"] = ""; - cpu["cpuClockSpeed"] = ""; - cpu["cpuNumCores"] = ""; + cpu["cpuBrand"] = CPUBrandString; + cpu["cpuModel"] = CPUModelString; + cpu["cpuClockSpeed"] = CPUClockString; + cpu["cpuNumCores"] = std::thread::hardware_concurrency(); _cpu.push_back(cpu); } From 670effd372cd965ab38f5fb3036a1f6d01321772 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Tue, 21 May 2019 03:52:01 -0700 Subject: [PATCH 110/203] handle case when QT_CMAKE_PREFIX_PATH not defined on UNIX --- cmake/macros/SetupQt.cmake | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cmake/macros/SetupQt.cmake b/cmake/macros/SetupQt.cmake index 1d94cb278b..b9ee425169 100644 --- a/cmake/macros/SetupQt.cmake +++ b/cmake/macros/SetupQt.cmake @@ -55,11 +55,10 @@ macro(setup_qt) if (APPLE) # HACK: manually set the QT_CMAKE_PREFIX_PATH so that hard-coded paths find new QT libs where we'll put them set(QT_CMAKE_PREFIX_PATH "/var/tmp/qt5-install/lib/cmake") - elseif (UNIX) + elseif (UNIX AND DEFINED ENV{QT_CMAKE_PREFIX_PATH}) # HACK: obey QT_CMAKE_PREFIX_PATH to allow UNIX to use older QT libs set(QT_CMAKE_PREFIX_PATH $ENV{QT_CMAKE_PREFIX_PATH}) else() - # WIN32: ignore QT_CMAKE_PREFIX_PATH so Win32 uses new QT libs for installers set(QT_CMAKE_PREFIX_PATH ${VCPKG_QT_CMAKE_PREFIX_PATH}) endif() else() From 47a612b195dc038118dc3d3eb71c422edb4eeeca Mon Sep 17 00:00:00 2001 From: amerhifi Date: Tue, 21 May 2019 07:46:02 -0700 Subject: [PATCH 111/203] testing gpu ident changes --- libraries/platform/src/LinuxPlatform.cpp | 2 +- libraries/shared/src/GPUIdent.cpp | 22 +++++++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/libraries/platform/src/LinuxPlatform.cpp b/libraries/platform/src/LinuxPlatform.cpp index 03952a8655..20034a4340 100644 --- a/libraries/platform/src/LinuxPlatform.cpp +++ b/libraries/platform/src/LinuxPlatform.cpp @@ -15,7 +15,7 @@ using namespace platform; static void getLCpuId( uint32_t* p, uint32_t ax ) { -#if Q_OS_LINUX +#ifdef Q_OS_LINUX __asm __volatile ( "movl %%ebx, %%esi\n\t" "cpuid\n\t" diff --git a/libraries/shared/src/GPUIdent.cpp b/libraries/shared/src/GPUIdent.cpp index 773e40aaee..16c95ff9ce 100644 --- a/libraries/shared/src/GPUIdent.cpp +++ b/libraries/shared/src/GPUIdent.cpp @@ -28,6 +28,7 @@ #endif +#include #include #include "SharedLogging.h" @@ -83,7 +84,26 @@ GPUIdent* GPUIdent::ensureQuery(const QString& vendor, const QString& renderer) _dedicatedMemoryMB = bestVRAM; CGLDestroyRendererInfo(rendererInfo); - +#elif defined(Q_OS_LINUX) +//get gpu name + FILE* stream = popen("system_profiler SPDisplaysDataType | grep Chipset", "r"); + + std::ostringstream hostStream; + while (!feof(stream) && !ferror(stream)) { + char buf[128]; + int bytesRead = fread(buf, 1, 128, stream); + hostStream.write(buf, bytesRead); + } + + QString result = QString::fromStdString(hostStream.str()); + QStringList parts = result.split('\n'); + std::string name; + + for (int i = 0; i < parts.size(); ++i) { + if (parts[i].toLower().contains("radeon") || parts[i].toLower().contains("nvidia")) { + _name=parts[i]; + } + } #elif defined(Q_OS_WIN) struct ConvertLargeIntegerToQString { From 045b0f7cf83552a46042a00727f85044a64865e3 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Tue, 21 May 2019 07:49:21 -0700 Subject: [PATCH 112/203] check for unloaded model --- libraries/entities-renderer/src/RenderableModelEntityItem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index bf0abe92dd..cc6ba0176b 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -363,7 +363,7 @@ void RenderableModelEntityItem::computeShapeInfo(ShapeInfo& shapeInfo) { ShapeType type = getShapeType(); auto model = getModel(); - if (!model) { + if (!model || !model->isLoaded()) { type = SHAPE_TYPE_NONE; } From 5f8122497668841fcabf771b7338529050372776 Mon Sep 17 00:00:00 2001 From: amerhifi Date: Tue, 21 May 2019 08:59:04 -0700 Subject: [PATCH 113/203] did not work on linux, backing out change --- libraries/shared/src/GPUIdent.cpp | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/libraries/shared/src/GPUIdent.cpp b/libraries/shared/src/GPUIdent.cpp index 16c95ff9ce..dcbc83cfc1 100644 --- a/libraries/shared/src/GPUIdent.cpp +++ b/libraries/shared/src/GPUIdent.cpp @@ -84,26 +84,7 @@ GPUIdent* GPUIdent::ensureQuery(const QString& vendor, const QString& renderer) _dedicatedMemoryMB = bestVRAM; CGLDestroyRendererInfo(rendererInfo); -#elif defined(Q_OS_LINUX) -//get gpu name - FILE* stream = popen("system_profiler SPDisplaysDataType | grep Chipset", "r"); - - std::ostringstream hostStream; - while (!feof(stream) && !ferror(stream)) { - char buf[128]; - int bytesRead = fread(buf, 1, 128, stream); - hostStream.write(buf, bytesRead); - } - - QString result = QString::fromStdString(hostStream.str()); - QStringList parts = result.split('\n'); - std::string name; - - for (int i = 0; i < parts.size(); ++i) { - if (parts[i].toLower().contains("radeon") || parts[i].toLower().contains("nvidia")) { - _name=parts[i]; - } - } + #elif defined(Q_OS_WIN) struct ConvertLargeIntegerToQString { From 4f547040c0187ff55042b9d21ddf9ded0a5ff0e2 Mon Sep 17 00:00:00 2001 From: amerhifi Date: Tue, 21 May 2019 09:01:40 -0700 Subject: [PATCH 114/203] removing include --- libraries/shared/src/GPUIdent.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libraries/shared/src/GPUIdent.cpp b/libraries/shared/src/GPUIdent.cpp index dcbc83cfc1..d5c2f3ec6c 100644 --- a/libraries/shared/src/GPUIdent.cpp +++ b/libraries/shared/src/GPUIdent.cpp @@ -28,9 +28,8 @@ #endif -#include -#include +#include #include "SharedLogging.h" GPUIdent GPUIdent::_instance {}; From 56d8e0123fb70f2efc33a54e4ced1b95f197ab08 Mon Sep 17 00:00:00 2001 From: amerhifi Date: Tue, 21 May 2019 09:19:56 -0700 Subject: [PATCH 115/203] resolving qt moc error with propertie missing for android --- interface/src/ui/Stats.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/interface/src/ui/Stats.h b/interface/src/ui/Stats.h index 1939e7fa0e..8fdced40b3 100644 --- a/interface/src/ui/Stats.h +++ b/interface/src/ui/Stats.h @@ -320,6 +320,8 @@ class Stats : public QQuickItem { STATS_PROPERTY(int, nodeListThreadQueueDepth, -1); #else STATS_PROPERTY(bool, eventQueueDebuggingOn, false) + STATS_PROPERTY(int, mainThreadQueueDepth, 0); + STATS_PROPERTY(int, nodeListThreadQueueDepth, 0); #endif // DEBUG_EVENT_QUEUE public: From b3285050eda7fb8080b023a52391b716b8f7126c Mon Sep 17 00:00:00 2001 From: amerhifi Date: Tue, 21 May 2019 09:43:09 -0700 Subject: [PATCH 116/203] moving the properties out of the define since the values are going to be the same either way --- interface/src/ui/Stats.h | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/interface/src/ui/Stats.h b/interface/src/ui/Stats.h index 8fdced40b3..cb13945320 100644 --- a/interface/src/ui/Stats.h +++ b/interface/src/ui/Stats.h @@ -314,14 +314,13 @@ class Stats : public QQuickItem { STATS_PROPERTY(QVector3D, parabolaPicksUpdated, QVector3D(0, 0, 0)) STATS_PROPERTY(QVector3D, collisionPicksUpdated, QVector3D(0, 0, 0)) -#ifdef DEBUG_EVENT_QUEUE - STATS_PROPERTY(bool, eventQueueDebuggingOn, true) STATS_PROPERTY(int, mainThreadQueueDepth, -1); STATS_PROPERTY(int, nodeListThreadQueueDepth, -1); + +#ifdef DEBUG_EVENT_QUEUE + STATS_PROPERTY(bool, eventQueueDebuggingOn, true) #else STATS_PROPERTY(bool, eventQueueDebuggingOn, false) - STATS_PROPERTY(int, mainThreadQueueDepth, 0); - STATS_PROPERTY(int, nodeListThreadQueueDepth, 0); #endif // DEBUG_EVENT_QUEUE public: From 264051ed6d9dfff8f2867aab414574c39a89b7c8 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Tue, 21 May 2019 10:40:58 -0700 Subject: [PATCH 117/203] fix myavatar setSkeletonModelURL --- assignment-client/src/avatars/ScriptableAvatar.h | 2 +- interface/src/avatar/MyAvatar.cpp | 5 +++++ interface/src/avatar/MyAvatar.h | 2 +- libraries/avatars-renderer/src/avatars-renderer/Avatar.h | 2 +- libraries/avatars/src/AvatarData.h | 2 +- 5 files changed, 9 insertions(+), 4 deletions(-) diff --git a/assignment-client/src/avatars/ScriptableAvatar.h b/assignment-client/src/avatars/ScriptableAvatar.h index 54e9fa2fba..34dc25914f 100644 --- a/assignment-client/src/avatars/ScriptableAvatar.h +++ b/assignment-client/src/avatars/ScriptableAvatar.h @@ -138,7 +138,7 @@ public: /// Returns the index of the joint with the specified name, or -1 if not found/unknown. Q_INVOKABLE virtual int getJointIndex(const QString& name) const override; - virtual void setSkeletonModelURL(const QUrl& skeletonModelURL) override; + Q_INVOKABLE virtual void setSkeletonModelURL(const QUrl& skeletonModelURL) override; /**jsdoc * @comment Uses the base class's JSDoc. diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 39f2d9f332..7ac2103543 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -2367,6 +2367,11 @@ void MyAvatar::clearJointsData() { } void MyAvatar::setSkeletonModelURL(const QUrl& skeletonModelURL) { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "setSkeletonModelURL", Q_ARG(const QUrl&, skeletonModelURL)); + return; + } + _skeletonModelChangeCount++; int skeletonModelChangeCount = _skeletonModelChangeCount; diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index bb5e4c17df..5b12885d1f 100755 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -2409,7 +2409,7 @@ private: void updateEyeContactTarget(float deltaTime); // These are made private for MyAvatar so that you will use the "use" methods instead - virtual void setSkeletonModelURL(const QUrl& skeletonModelURL) override; + Q_INVOKABLE virtual void setSkeletonModelURL(const QUrl& skeletonModelURL) override; virtual void updatePalms() override {} void lateUpdatePalms(); diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h index 61901d662a..adafca1d1f 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h @@ -339,7 +339,7 @@ public: */ Q_INVOKABLE glm::quat jointToWorldRotation(const glm::quat& rotation, const int jointIndex = -1) const; - virtual void setSkeletonModelURL(const QUrl& skeletonModelURL) override; + Q_INVOKABLE virtual void setSkeletonModelURL(const QUrl& skeletonModelURL) override; virtual void setAttachmentData(const QVector& attachmentData) override; void updateDisplayNameAlpha(bool showDisplayName); diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 9219c2c03f..e5131ff94b 100755 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -1211,7 +1211,7 @@ public: const QString& getDisplayName() const { return _displayName; } const QString& getSessionDisplayName() const { return _sessionDisplayName; } bool getLookAtSnappingEnabled() const { return _lookAtSnappingEnabled; } - virtual void setSkeletonModelURL(const QUrl& skeletonModelURL); + Q_INVOKABLE virtual void setSkeletonModelURL(const QUrl& skeletonModelURL); virtual void setDisplayName(const QString& displayName); virtual void setSessionDisplayName(const QString& sessionDisplayName) { From 4b15ee9c3a6377de7da308f44c3ec4f644855485 Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Tue, 21 May 2019 10:45:48 -0700 Subject: [PATCH 118/203] Always calculate tangents --- libraries/model-baker/src/model-baker/Baker.cpp | 12 +++++------- .../CalculateBlendshapeTangentsTask.cpp | 13 +------------ .../model-baker/CalculateBlendshapeTangentsTask.h | 2 +- .../src/model-baker/CalculateMeshTangentsTask.cpp | 14 +------------- .../src/model-baker/CalculateMeshTangentsTask.h | 2 +- 5 files changed, 9 insertions(+), 34 deletions(-) diff --git a/libraries/model-baker/src/model-baker/Baker.cpp b/libraries/model-baker/src/model-baker/Baker.cpp index 70269c6401..c896613df5 100644 --- a/libraries/model-baker/src/model-baker/Baker.cpp +++ b/libraries/model-baker/src/model-baker/Baker.cpp @@ -27,7 +27,7 @@ namespace baker { class GetModelPartsTask { public: using Input = hfm::Model::Pointer; - using Output = VaryingSet6, hifi::URL, baker::MeshIndicesToModelNames, baker::BlendshapesPerMesh, QHash, std::vector>; + using Output = VaryingSet5, hifi::URL, baker::MeshIndicesToModelNames, baker::BlendshapesPerMesh, std::vector>; using JobModel = Job::ModelIO; void run(const BakeContextPointer& context, const Input& input, Output& output) { @@ -40,8 +40,7 @@ namespace baker { for (int i = 0; i < hfmModelIn->meshes.size(); i++) { blendshapesPerMesh.push_back(hfmModelIn->meshes[i].blendshapes.toStdVector()); } - output.edit4() = hfmModelIn->materials; - output.edit5() = hfmModelIn->joints.toStdVector(); + output.edit4() = hfmModelIn->joints.toStdVector(); } }; @@ -134,17 +133,16 @@ namespace baker { const auto url = modelPartsIn.getN(1); const auto meshIndicesToModelNames = modelPartsIn.getN(2); const auto blendshapesPerMeshIn = modelPartsIn.getN(3); - const auto materials = modelPartsIn.getN(4); - const auto jointsIn = modelPartsIn.getN(5); + const auto jointsIn = modelPartsIn.getN(4); // Calculate normals and tangents for meshes and blendshapes if they do not exist // Note: Normals are never calculated here for OBJ models. OBJ files optionally define normals on a per-face basis, so for consistency normals are calculated beforehand in OBJSerializer. const auto normalsPerMesh = model.addJob("CalculateMeshNormals", meshesIn); - const auto calculateMeshTangentsInputs = CalculateMeshTangentsTask::Input(normalsPerMesh, meshesIn, materials).asVarying(); + const auto calculateMeshTangentsInputs = CalculateMeshTangentsTask::Input(normalsPerMesh, meshesIn).asVarying(); const auto tangentsPerMesh = model.addJob("CalculateMeshTangents", calculateMeshTangentsInputs); const auto calculateBlendshapeNormalsInputs = CalculateBlendshapeNormalsTask::Input(blendshapesPerMeshIn, meshesIn).asVarying(); const auto normalsPerBlendshapePerMesh = model.addJob("CalculateBlendshapeNormals", calculateBlendshapeNormalsInputs); - const auto calculateBlendshapeTangentsInputs = CalculateBlendshapeTangentsTask::Input(normalsPerBlendshapePerMesh, blendshapesPerMeshIn, meshesIn, materials).asVarying(); + const auto calculateBlendshapeTangentsInputs = CalculateBlendshapeTangentsTask::Input(normalsPerBlendshapePerMesh, blendshapesPerMeshIn, meshesIn).asVarying(); const auto tangentsPerBlendshapePerMesh = model.addJob("CalculateBlendshapeTangents", calculateBlendshapeTangentsInputs); // Build the graphics::MeshPointer for each hfm::Mesh diff --git a/libraries/model-baker/src/model-baker/CalculateBlendshapeTangentsTask.cpp b/libraries/model-baker/src/model-baker/CalculateBlendshapeTangentsTask.cpp index ba8fd94f09..b807aea38f 100644 --- a/libraries/model-baker/src/model-baker/CalculateBlendshapeTangentsTask.cpp +++ b/libraries/model-baker/src/model-baker/CalculateBlendshapeTangentsTask.cpp @@ -19,7 +19,6 @@ void CalculateBlendshapeTangentsTask::run(const baker::BakeContextPointer& conte const auto& normalsPerBlendshapePerMesh = input.get0(); const auto& blendshapesPerMesh = input.get1(); const auto& meshes = input.get2(); - const auto& materials = input.get3(); auto& tangentsPerBlendshapePerMeshOut = output; tangentsPerBlendshapePerMeshOut.reserve(normalsPerBlendshapePerMesh.size()); @@ -30,16 +29,6 @@ void CalculateBlendshapeTangentsTask::run(const baker::BakeContextPointer& conte tangentsPerBlendshapePerMeshOut.emplace_back(); auto& tangentsPerBlendshapeOut = tangentsPerBlendshapePerMeshOut[tangentsPerBlendshapePerMeshOut.size()-1]; - // Check if we actually need to calculate the tangents, or just append empty arrays - bool needTangents = false; - for (const auto& meshPart : mesh.parts) { - auto materialIt = materials.find(meshPart.materialID); - if (materialIt != materials.end() && (*materialIt).needTangentSpace()) { - needTangents = true; - break; - } - } - for (size_t j = 0; j < blendshapes.size(); j++) { const auto& blendshape = blendshapes[j]; const auto& tangentsIn = blendshape.tangents; @@ -54,7 +43,7 @@ void CalculateBlendshapeTangentsTask::run(const baker::BakeContextPointer& conte } // Check if we can and should calculate tangents (we need normals to calculate the tangents) - if (normals.empty() || !needTangents) { + if (normals.empty()) { continue; } tangentsOut.resize(normals.size()); diff --git a/libraries/model-baker/src/model-baker/CalculateBlendshapeTangentsTask.h b/libraries/model-baker/src/model-baker/CalculateBlendshapeTangentsTask.h index c24b41d2d9..4ad8fee036 100644 --- a/libraries/model-baker/src/model-baker/CalculateBlendshapeTangentsTask.h +++ b/libraries/model-baker/src/model-baker/CalculateBlendshapeTangentsTask.h @@ -18,7 +18,7 @@ // Calculate blendshape tangents if not already present in the blendshape class CalculateBlendshapeTangentsTask { public: - using Input = baker::VaryingSet4, baker::BlendshapesPerMesh, std::vector, QHash>; + using Input = baker::VaryingSet3, baker::BlendshapesPerMesh, std::vector>; using Output = std::vector; using JobModel = baker::Job::ModelIO; diff --git a/libraries/model-baker/src/model-baker/CalculateMeshTangentsTask.cpp b/libraries/model-baker/src/model-baker/CalculateMeshTangentsTask.cpp index d2144a0e30..58c54c9189 100644 --- a/libraries/model-baker/src/model-baker/CalculateMeshTangentsTask.cpp +++ b/libraries/model-baker/src/model-baker/CalculateMeshTangentsTask.cpp @@ -13,21 +13,9 @@ #include "ModelMath.h" -bool needTangents(const hfm::Mesh& mesh, const QHash& materials) { - // Check if we actually need to calculate the tangents - for (const auto& meshPart : mesh.parts) { - auto materialIt = materials.find(meshPart.materialID); - if (materialIt != materials.end() && (*materialIt).needTangentSpace()) { - return true; - } - } - return false; -} - void CalculateMeshTangentsTask::run(const baker::BakeContextPointer& context, const Input& input, Output& output) { const auto& normalsPerMesh = input.get0(); const std::vector& meshes = input.get1(); - const auto& materials = input.get2(); auto& tangentsPerMeshOut = output; tangentsPerMeshOut.reserve(meshes.size()); @@ -42,7 +30,7 @@ void CalculateMeshTangentsTask::run(const baker::BakeContextPointer& context, co // Otherwise confirm if we have the normals needed, and need to calculate the tangents if (!tangentsIn.empty()) { tangentsOut = tangentsIn.toStdVector(); - } else if (!normals.empty() && needTangents(mesh, materials)) { + } else if (!normals.empty()) { tangentsOut.resize(normals.size()); baker::calculateTangents(mesh, [&mesh, &normals, &tangentsOut](int firstIndex, int secondIndex, glm::vec3* outVertices, glm::vec2* outTexCoords, glm::vec3& outNormal) { diff --git a/libraries/model-baker/src/model-baker/CalculateMeshTangentsTask.h b/libraries/model-baker/src/model-baker/CalculateMeshTangentsTask.h index b8fdb7d5f4..2ad5759476 100644 --- a/libraries/model-baker/src/model-baker/CalculateMeshTangentsTask.h +++ b/libraries/model-baker/src/model-baker/CalculateMeshTangentsTask.h @@ -22,7 +22,7 @@ class CalculateMeshTangentsTask { public: using NormalsPerMesh = std::vector>; - using Input = baker::VaryingSet3, QHash>; + using Input = baker::VaryingSet2>; using Output = baker::TangentsPerMesh; using JobModel = baker::Job::ModelIO; From cb43a0efea91519b12a03ea171fc19e3fa04053b Mon Sep 17 00:00:00 2001 From: amerhifi Date: Tue, 21 May 2019 10:59:33 -0700 Subject: [PATCH 119/203] trying to bypass android error with output constraint --- libraries/platform/src/LinuxPlatform.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/platform/src/LinuxPlatform.cpp b/libraries/platform/src/LinuxPlatform.cpp index 20034a4340..e376a45165 100644 --- a/libraries/platform/src/LinuxPlatform.cpp +++ b/libraries/platform/src/LinuxPlatform.cpp @@ -15,7 +15,7 @@ using namespace platform; static void getLCpuId( uint32_t* p, uint32_t ax ) { -#ifdef Q_OS_LINUX +#if defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID) __asm __volatile ( "movl %%ebx, %%esi\n\t" "cpuid\n\t" From dddb171b52040a3e7081424a35a7be56319eb0fd Mon Sep 17 00:00:00 2001 From: Roxanne Skelly Date: Tue, 21 May 2019 11:23:04 -0700 Subject: [PATCH 120/203] BUGZ-223 - Physics was not starting in TheSpot-dev This was caused by two issues involving the SafeLanding system: * Race condition on domain load The domain is hard-reset twice during typical start, first after login completes, and second, when ice/domain renegotiation occurs Entities added during the first reset caused an add to the safe landing system which, because those adds were queued, possibly happened after the second hard reset. Second, Safe landing checks whether physics is ready on entities before letting physics start. Physics is ready when the entities have a physics shape associated with them if they're static meshes. The physics shape is only generated if the entity is in Region 1 or 2. Safe landing, however, was not checking the region of the entity and was therefore waiting on entities that were not in region 1 or 2 --- interface/src/octree/SafeLanding.cpp | 46 +++++++++++++++------------- interface/src/octree/SafeLanding.h | 3 +- 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/interface/src/octree/SafeLanding.cpp b/interface/src/octree/SafeLanding.cpp index 479c2a5860..26bd3ac41f 100644 --- a/interface/src/octree/SafeLanding.cpp +++ b/interface/src/octree/SafeLanding.cpp @@ -10,7 +10,6 @@ // #include "SafeLanding.h" - #include #include "EntityTreeRenderer.h" @@ -35,24 +34,26 @@ bool SafeLanding::SequenceLessThan::operator()(const int& a, const int& b) const } void SafeLanding::startEntitySequence(QSharedPointer entityTreeRenderer) { - auto entityTree = entityTreeRenderer->getTree(); - if (entityTree) { - Locker lock(_lock); - _entityTree = entityTree; - _trackedEntities.clear(); - _trackingEntities = true; - _maxTrackedEntityCount = 0; - connect(std::const_pointer_cast(_entityTree).get(), - &EntityTree::addingEntity, this, &SafeLanding::addTrackedEntity); - connect(std::const_pointer_cast(_entityTree).get(), - &EntityTree::deletingEntity, this, &SafeLanding::deleteTrackedEntity); + if (!entityTreeRenderer.isNull()) { + auto entityTree = entityTreeRenderer->getTree(); + if (entityTree) { + Locker lock(_lock); + _entityTreeRenderer = entityTreeRenderer; + _trackedEntities.clear(); + _trackingEntities = true; + _maxTrackedEntityCount = 0; + connect(std::const_pointer_cast(entityTree).get(), + &EntityTree::addingEntity, this, &SafeLanding::addTrackedEntity, Qt::DirectConnection); + connect(std::const_pointer_cast(entityTree).get(), + &EntityTree::deletingEntity, this, &SafeLanding::deleteTrackedEntity); - _sequenceNumbers.clear(); - _initialStart = INVALID_SEQUENCE; - _initialEnd = INVALID_SEQUENCE; - _startTime = usecTimestampNow(); - EntityTreeRenderer::setEntityLoadingPriorityFunction(&ElevatedPriority); + _sequenceNumbers.clear(); + _initialStart = INVALID_SEQUENCE; + _initialEnd = INVALID_SEQUENCE; + _startTime = usecTimestampNow(); + EntityTreeRenderer::setEntityLoadingPriorityFunction(&ElevatedPriority); + } } } @@ -70,7 +71,7 @@ void SafeLanding::stopEntitySequence() { void SafeLanding::addTrackedEntity(const EntityItemID& entityID) { if (_trackingEntities) { Locker lock(_lock); - EntityItemPointer entity = _entityTree->findEntityByID(entityID); + EntityItemPointer entity = _entityTreeRenderer->getTree()->findEntityByID(entityID); if (entity && !entity->isLocalEntity() && entity->getCreated() < _startTime) { @@ -111,7 +112,7 @@ bool SafeLanding::isLoadSequenceComplete() { Locker lock(_lock); _initialStart = INVALID_SEQUENCE; _initialEnd = INVALID_SEQUENCE; - _entityTree = nullptr; + _entityTreeRenderer.clear(); _trackingEntities = false; // Don't track anything else that comes in. EntityTreeRenderer::setEntityLoadingPriorityFunction(StandardPriority); } @@ -158,7 +159,7 @@ bool SafeLanding::isSequenceNumbersComplete() { return false; } -bool isEntityPhysicsReady(const EntityItemPointer& entity) { +bool SafeLanding::isEntityPhysicsReady(const EntityItemPointer& entity) { if (entity && !entity->getCollisionless()) { const auto& entityType = entity->getType(); if (entityType == EntityTypes::Model) { @@ -168,7 +169,10 @@ bool isEntityPhysicsReady(const EntityItemPointer& entity) { bool hasAABox; entity->getAABox(hasAABox); if (hasAABox && downloadedCollisionTypes.count(modelEntity->getShapeType()) != 0) { - return (!entity->shouldBePhysical() || entity->isInPhysicsSimulation() || modelEntity->computeShapeFailedToLoad()); + auto space = _entityTreeRenderer->getWorkloadSpace(); + uint8_t region = space ? space->getRegion(entity->getSpaceIndex()) : workload::Region::INVALID; + bool shouldBePhysical = region < workload::Region::R3 && entity->shouldBePhysical(); + return (!shouldBePhysical || entity->isInPhysicsSimulation() || modelEntity->computeShapeFailedToLoad()); } } } diff --git a/interface/src/octree/SafeLanding.h b/interface/src/octree/SafeLanding.h index 51357b60ff..428ca15bdc 100644 --- a/interface/src/octree/SafeLanding.h +++ b/interface/src/octree/SafeLanding.h @@ -38,13 +38,14 @@ private slots: private: bool isSequenceNumbersComplete(); + bool isEntityPhysicsReady(const EntityItemPointer& entity); void debugDumpSequenceIDs() const; bool isEntityLoadingComplete(); std::mutex _lock; using Locker = std::lock_guard; bool _trackingEntities { false }; - EntityTreePointer _entityTree; + QSharedPointer _entityTreeRenderer; using EntityMap = std::map; EntityMap _trackedEntities; From 10db88c07b6914d53cd4dde0afe504570e25147b Mon Sep 17 00:00:00 2001 From: Roxanne Skelly Date: Tue, 21 May 2019 12:32:01 -0700 Subject: [PATCH 121/203] Fix ubuntu warning --- interface/src/octree/SafeLanding.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/octree/SafeLanding.cpp b/interface/src/octree/SafeLanding.cpp index 26bd3ac41f..de552b7b84 100644 --- a/interface/src/octree/SafeLanding.cpp +++ b/interface/src/octree/SafeLanding.cpp @@ -170,7 +170,7 @@ bool SafeLanding::isEntityPhysicsReady(const EntityItemPointer& entity) { entity->getAABox(hasAABox); if (hasAABox && downloadedCollisionTypes.count(modelEntity->getShapeType()) != 0) { auto space = _entityTreeRenderer->getWorkloadSpace(); - uint8_t region = space ? space->getRegion(entity->getSpaceIndex()) : workload::Region::INVALID; + uint8_t region = space ? space->getRegion(entity->getSpaceIndex()) : (uint8_t)workload::Region::INVALID; bool shouldBePhysical = region < workload::Region::R3 && entity->shouldBePhysical(); return (!shouldBePhysical || entity->isInPhysicsSimulation() || modelEntity->computeShapeFailedToLoad()); } From 5749392e838da5ffccf481f8e30902c58b2c0e7c Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Tue, 21 May 2019 14:10:27 -0700 Subject: [PATCH 122/203] New bg color; Final status indicator design; Fixed HMD icon --- .../SimplifiedConstants.qml | 2 +- .../simplifiedUI/topBar/SimplifiedTopBar.qml | 41 +++++++++------- .../hifi/simplifiedUI/topBar/images/focus.svg | 13 +++++ .../AbstractHMDScriptingInterface.h | 2 +- scripts/system/simplifiedUI/simplifiedUI.js | 49 +++++++++++-------- 5 files changed, 66 insertions(+), 41 deletions(-) create mode 100644 interface/resources/qml/hifi/simplifiedUI/topBar/images/focus.svg diff --git a/interface/resources/qml/hifi/simplifiedUI/simplifiedConstants/SimplifiedConstants.qml b/interface/resources/qml/hifi/simplifiedUI/simplifiedConstants/SimplifiedConstants.qml index 5d71d8bdb2..752c989500 100644 --- a/interface/resources/qml/hifi/simplifiedUI/simplifiedConstants/SimplifiedConstants.qml +++ b/interface/resources/qml/hifi/simplifiedUI/simplifiedConstants/SimplifiedConstants.qml @@ -147,7 +147,7 @@ QtObject { } readonly property color darkSeparator: "#595959" - readonly property color darkBackground: "#1A1A1A" + readonly property color darkBackground: "#000000" readonly property color darkBackgroundHighlight: "#575757" readonly property color highlightOnDark: Qt.rgba(1, 1, 1, 0.2) readonly property color white: "#FFFFFF" diff --git a/interface/resources/qml/hifi/simplifiedUI/topBar/SimplifiedTopBar.qml b/interface/resources/qml/hifi/simplifiedUI/topBar/SimplifiedTopBar.qml index ae50a746b6..c0511c69a4 100644 --- a/interface/resources/qml/hifi/simplifiedUI/topBar/SimplifiedTopBar.qml +++ b/interface/resources/qml/hifi/simplifiedUI/topBar/SimplifiedTopBar.qml @@ -246,15 +246,17 @@ Rectangle { id: statusButtonContainer anchors.verticalCenter: parent.verticalCenter anchors.left: outputDeviceButtonContainer.right - anchors.leftMargin: 2 - width: 32 + anchors.leftMargin: 8 + width: 36 height: width Rectangle { id: statusButton - property string currentStatus: "" + property string currentStatus anchors.centerIn: parent - width: 20 + anchors.horizontalCenterOffset: 1 + anchors.verticalCenterOffset: 2 + width: 13 height: width radius: width/2 visible: false @@ -262,20 +264,31 @@ Rectangle { ColorOverlay { anchors.fill: statusButton - opacity: statusButtonMouseArea.containsMouse ? 1.0 : 0.7 + opacity: statusButton.currentStatus ? 1 : 0 source: statusButton color: if (statusButton.currentStatus === "busy") { - "red" + "#ff001a" } else if (statusButton.currentStatus === "available") { - "green" - } else { - "yellow" + "#009036" + } else if (statusButton.currentStatus) { + "#ffed00" } } + Image { + id: focusIcon + source: "./images/focus.svg" + opacity: statusButtonMouseArea.containsMouse ? 1.0 : (statusButton.currentStatus === "busy" ? 0.7 : 0.3) + anchors.centerIn: parent + width: 36 + height: 20 + fillMode: Image.PreserveAspectFit + } + MouseArea { id: statusButtonMouseArea anchors.fill: parent + enabled: statusButton.currentStatus hoverEnabled: true onEntered: { Tablet.playSound(TabletEnums.ButtonHover); @@ -330,11 +343,6 @@ Rectangle { Tablet.playSound(TabletEnums.ButtonClick); var displayPluginCount = Window.getDisplayPluginCount(); if (HMD.active) { - // This next line seems backwards and shouldn't be necessary - the NOTIFY handler should - // result in `displayModeImage.source` changing automatically - but that's not working. - // This is working. So, I'm keeping it. - displayModeImage.source = "./images/vrMode.svg"; - // Switch to desktop mode - selects first VR display plugin for (var i = 0; i < displayPluginCount; i++) { if (!Window.isDisplayPluginHmd(i)) { @@ -343,11 +351,6 @@ Rectangle { } } } else { - // This next line seems backwards and shouldn't be necessary - the NOTIFY handler should - // result in `displayModeImage.source` changing automatically - but that's not working. - // This is working. So, I'm keeping it. - displayModeImage.source = "./images/desktopMode.svg"; - // Switch to VR mode - selects first HMD display plugin for (var i = 0; i < displayPluginCount; i++) { if (Window.isDisplayPluginHmd(i)) { diff --git a/interface/resources/qml/hifi/simplifiedUI/topBar/images/focus.svg b/interface/resources/qml/hifi/simplifiedUI/topBar/images/focus.svg new file mode 100644 index 0000000000..f7950650c6 --- /dev/null +++ b/interface/resources/qml/hifi/simplifiedUI/topBar/images/focus.svg @@ -0,0 +1,13 @@ + + + + + + image/svg+xml + + + + + + + diff --git a/libraries/display-plugins/src/display-plugins/AbstractHMDScriptingInterface.h b/libraries/display-plugins/src/display-plugins/AbstractHMDScriptingInterface.h index c1253f825f..de6141c9d8 100644 --- a/libraries/display-plugins/src/display-plugins/AbstractHMDScriptingInterface.h +++ b/libraries/display-plugins/src/display-plugins/AbstractHMDScriptingInterface.h @@ -15,7 +15,7 @@ // These properties have JSDoc documentation in HMDScriptingInterface.h. class AbstractHMDScriptingInterface : public QObject { Q_OBJECT - Q_PROPERTY(bool active READ isHMDMode NOTIFY mountedChanged) + Q_PROPERTY(bool active READ isHMDMode NOTIFY displayModeChanged) Q_PROPERTY(float ipd READ getIPD) Q_PROPERTY(float eyeHeight READ getEyeHeight) Q_PROPERTY(float playerHeight READ getPlayerHeight) diff --git a/scripts/system/simplifiedUI/simplifiedUI.js b/scripts/system/simplifiedUI/simplifiedUI.js index f208fcaf1e..fbf9972fc3 100644 --- a/scripts/system/simplifiedUI/simplifiedUI.js +++ b/scripts/system/simplifiedUI/simplifiedUI.js @@ -276,8 +276,21 @@ function setOutputMuted(outputMuted) { } -function toggleStatus() { - +var WAIT_FOR_TOP_BAR_MS = 1000; +function sendLocalStatusToQml() { + var currentStatus = si.getLocalStatus(); + + if (topBarWindow && currentStatus) { + topBarWindow.sendToQml({ + "source": "simplifiedUI.js", + "method": "updateStatusButton", + "data": { + "currentStatus": currentStatus + } + }); + } else { + Script.setTimeout(sendLocalStatusToQml, WAIT_FOR_TOP_BAR_MS); + } } @@ -355,13 +368,19 @@ function loadSimplifiedTopBar() { topBarWindow.fromQml.connect(onMessageFromTopBar); topBarWindow.closed.connect(onTopBarClosed); - topBarWindow.sendToQml({ - "source": "simplifiedUI.js", - "method": "updateOutputMuted", - "data": { - "outputMuted": isOutputMuted() - } - }) + // The eventbridge takes a nonzero time to initialize, so we have to wait a bit + // for the QML to load and for that to happen before updating the UI. + Script.setTimeout(function() { + topBarWindow.sendToQml({ + "source": "simplifiedUI.js", + "method": "updateOutputMuted", + "data": { + "outputMuted": isOutputMuted() + } + }); + + sendLocalStatusToQml(); + }, WAIT_FOR_TOP_BAR_MS); } @@ -446,17 +465,7 @@ function ensureFirstPersonCameraInHMD(isHMDMode) { function onStatusChanged() { - var currentStatus = si.getLocalStatus(); - - if (topBarWindow) { - topBarWindow.sendToQml({ - "source": "simplifiedUI.js", - "method": "updateStatusButton", - "data": { - "currentStatus": currentStatus - } - }); - } + sendLocalStatusToQml(); } From 4eeff52746852ad526aa2e4f66d174bf25179d27 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Tue, 21 May 2019 15:30:28 -0700 Subject: [PATCH 123/203] add version to texmeta.json files, fallback to original file if version has changed for skyboxes --- libraries/graphics/src/graphics/skybox.slf | 11 ++--------- libraries/image/src/image/TextureProcessing.cpp | 2 ++ libraries/ktx/src/TextureMeta.cpp | 5 +++++ libraries/ktx/src/TextureMeta.h | 2 ++ .../src/material-networking/TextureCache.cpp | 15 +++++++++++++++ .../src/procedural/proceduralSkybox.slf | 2 +- 6 files changed, 27 insertions(+), 10 deletions(-) diff --git a/libraries/graphics/src/graphics/skybox.slf b/libraries/graphics/src/graphics/skybox.slf index c20dd94bf4..231c1f4140 100755 --- a/libraries/graphics/src/graphics/skybox.slf +++ b/libraries/graphics/src/graphics/skybox.slf @@ -26,13 +26,6 @@ layout(location=0) in vec3 _normal; layout(location=0) out vec4 _fragColor; void main(void) { - vec3 coord = normalize(_normal); - vec3 color = skybox.color.rgb; - - // blend is only set if there is a cubemap - float check = float(skybox.color.a > 0.0); - color = mix(color, texture(cubeMap, coord).rgb, check); - color *= mix(vec3(1.0), skybox.color.rgb, check * float(skybox.color.a < 1.0)); - - _fragColor = vec4(color, 0.0); + vec3 skyboxColor = texture(cubeMap, normalize(_normal)).rgb; + _fragColor = vec4(mix(skybox.color.rgb, skyboxColor, skybox.color.a), 1.0); } diff --git a/libraries/image/src/image/TextureProcessing.cpp b/libraries/image/src/image/TextureProcessing.cpp index 429859d109..c144ed530a 100644 --- a/libraries/image/src/image/TextureProcessing.cpp +++ b/libraries/image/src/image/TextureProcessing.cpp @@ -690,6 +690,8 @@ void convertImageToLDRTexture(gpu::Texture* texture, Image&& image, BackendTarge compressionOptions.setFormat(nvtt::Format_BC4); } else if (mipFormat == gpu::Element::COLOR_COMPRESSED_BCX_XY) { compressionOptions.setFormat(nvtt::Format_BC5); + } else if (mipFormat == gpu::Element::COLOR_COMPRESSED_BCX_HDR_RGB) { + compressionOptions.setFormat(nvtt::Format_BC6); } else if (mipFormat == gpu::Element::COLOR_COMPRESSED_BCX_SRGBA_HIGH) { alphaMode = nvtt::AlphaMode_Transparency; compressionOptions.setFormat(nvtt::Format_BC7); diff --git a/libraries/ktx/src/TextureMeta.cpp b/libraries/ktx/src/TextureMeta.cpp index c8427c1f60..f97b5404e1 100644 --- a/libraries/ktx/src/TextureMeta.cpp +++ b/libraries/ktx/src/TextureMeta.cpp @@ -16,6 +16,7 @@ #include const QString TEXTURE_META_EXTENSION = ".texmeta.json"; +const uint16_t KTX_VERSION = 1; bool TextureMeta::deserialize(const QByteArray& data, TextureMeta* meta) { QJsonParseError error; @@ -46,6 +47,9 @@ bool TextureMeta::deserialize(const QByteArray& data, TextureMeta* meta) { } } } + if (root.contains("version")) { + meta->version = root["version"].toInt(); + } return true; } @@ -62,6 +66,7 @@ QByteArray TextureMeta::serialize() { root["original"] = original.toString(); root["uncompressed"] = uncompressed.toString(); root["compressed"] = compressed; + root["version"] = KTX_VERSION; doc.setObject(root); return doc.toJson(); diff --git a/libraries/ktx/src/TextureMeta.h b/libraries/ktx/src/TextureMeta.h index 5450fee110..fc39db6ef1 100644 --- a/libraries/ktx/src/TextureMeta.h +++ b/libraries/ktx/src/TextureMeta.h @@ -19,6 +19,7 @@ #include "khronos/KHR.h" extern const QString TEXTURE_META_EXTENSION; +extern const uint16_t KTX_VERSION; namespace std { template<> struct hash { @@ -37,6 +38,7 @@ struct TextureMeta { QUrl original; QUrl uncompressed; std::unordered_map availableTextureTypes; + uint16_t version { 0 }; }; diff --git a/libraries/material-networking/src/material-networking/TextureCache.cpp b/libraries/material-networking/src/material-networking/TextureCache.cpp index 8ffcad0c69..b15632c6be 100644 --- a/libraries/material-networking/src/material-networking/TextureCache.cpp +++ b/libraries/material-networking/src/material-networking/TextureCache.cpp @@ -1065,6 +1065,21 @@ void NetworkTexture::loadMetaContent(const QByteArray& content) { return; } + // Version 0 ktx skyboxes and ambient maps don't work on AMD anymore, so we fallback to the original texture + if (meta.version == 0 && _type == image::TextureUsage::Type::SKY_TEXTURE || + _type == image::TextureUsage::Type::AMBIENT_TEXTURE && !meta.original.isEmpty()) { + _currentlyLoadingResourceType = ResourceType::ORIGINAL; + _activeUrl = _activeUrl.resolved(meta.original); + + auto textureCache = DependencyManager::get(); + auto self = _self.lock(); + if (!self) { + return; + } + QMetaObject::invokeMethod(this, "attemptRequest", Qt::QueuedConnection); + return; + } + auto& backend = DependencyManager::get()->getGPUContext()->getBackend(); for (auto pair : meta.availableTextureTypes) { gpu::Element elFormat; diff --git a/libraries/procedural/src/procedural/proceduralSkybox.slf b/libraries/procedural/src/procedural/proceduralSkybox.slf index 12e8de9dc3..f938e0b9a2 100644 --- a/libraries/procedural/src/procedural/proceduralSkybox.slf +++ b/libraries/procedural/src/procedural/proceduralSkybox.slf @@ -42,5 +42,5 @@ void main(void) { color = max(color, vec3(0)); // Procedural Shaders are expected to be Gamma corrected so let's bring back the RGB in linear space for the rest of the pipeline color = pow(color, vec3(2.2)); - _fragColor = vec4(color, 0.0); + _fragColor = vec4(color, 1.0); } From a672b79cd8b0920d60340433c3dd73589a7254d6 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Tue, 21 May 2019 15:35:43 -0700 Subject: [PATCH 124/203] add version to default skybox --- .../Default-Sky-9-cubemap/Default-Sky-9-cubemap.texmeta.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/interface/resources/images/Default-Sky-9-cubemap/Default-Sky-9-cubemap.texmeta.json b/interface/resources/images/Default-Sky-9-cubemap/Default-Sky-9-cubemap.texmeta.json index 28512662d9..729bb2d70f 100644 --- a/interface/resources/images/Default-Sky-9-cubemap/Default-Sky-9-cubemap.texmeta.json +++ b/interface/resources/images/Default-Sky-9-cubemap/Default-Sky-9-cubemap.texmeta.json @@ -4,5 +4,6 @@ "COMPRESSED_SRGB8_ETC2": "Default-Sky-9-cubemap_COMPRESSED_SRGB8_ETC2.ktx" }, "original": "Default-Sky-9-cubemap.jpg", - "uncompressed": "Default-Sky-9-cubemap.ktx" + "uncompressed": "Default-Sky-9-cubemap.ktx", + "version": 1 } From b92e26722c223e27e69bf18ed2286807b97738a4 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Tue, 21 May 2019 15:58:46 -0700 Subject: [PATCH 125/203] rebake default skybox --- .../Default-Sky-9-cubemap-ambient.jpg | Bin 0 -> 561218 bytes .../Default-Sky-9-cubemap-ambient.ktx | Bin 0 -> 33554792 bytes ...Default-Sky-9-cubemap-ambient.texmeta.json | 9 +++++++++ ...ent_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT.ktx | Bin 0 -> 8389136 bytes ...-cubemap-ambient_COMPRESSED_SRGB8_ETC2.ktx | Bin 0 -> 1049020 bytes .../Default-Sky-9-cubemap.ktx | Bin 33554792 -> 33554620 bytes ...map_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT.ktx | Bin 8389136 -> 8388964 bytes ...lt-Sky-9-cubemap_COMPRESSED_SRGB8_ETC2.ktx | Bin 1049020 -> 1048848 bytes .../src/DeferredLightingEffect.cpp | 3 ++- 9 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 interface/resources/images/Default-Sky-9-cubemap/Default-Sky-9-cubemap-ambient.jpg create mode 100644 interface/resources/images/Default-Sky-9-cubemap/Default-Sky-9-cubemap-ambient.ktx create mode 100644 interface/resources/images/Default-Sky-9-cubemap/Default-Sky-9-cubemap-ambient.texmeta.json create mode 100644 interface/resources/images/Default-Sky-9-cubemap/Default-Sky-9-cubemap-ambient_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT.ktx create mode 100644 interface/resources/images/Default-Sky-9-cubemap/Default-Sky-9-cubemap-ambient_COMPRESSED_SRGB8_ETC2.ktx diff --git a/interface/resources/images/Default-Sky-9-cubemap/Default-Sky-9-cubemap-ambient.jpg b/interface/resources/images/Default-Sky-9-cubemap/Default-Sky-9-cubemap-ambient.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7977396159cfce9f942589cf402b926e6425603e GIT binary patch literal 561218 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
  • R+tew+Y=mq%+!DLA^Kiu?oX@=!4 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 z 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 _Q%xzqk^XI9| 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

    Ggt&H|fK~MCOiqX6IqyW%Ig{ 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 z{B=Dtk@+Dr&T)@O5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp) z5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp) z5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp) z5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp) z5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp) z5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp) z5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp) z5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp) z5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp) z5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp) z5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp) z5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp) z5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp) z5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp) z5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp) z5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp) z5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp) z5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp) z5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp) z5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp) z5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp) z5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp) z5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp) z5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp) z5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp) z5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp)5fKp) z5fKp)5fKp)5fKp)kq0JE|F4bVYrp^l3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| z0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdb zFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?0 z00Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u< z3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs# zzyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d|0}L?000Rs#zyJdbFu(u<3^2d| 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 z zRS~M8y^H#plx=U9Qo45?X@j@DX-jR6w2rUydDE8K{CUyW!D`#%lAL?;BF`tdB zHxIjPN{eq23714HNAsyZX*Zp7l?}TjY&0Y>Ceo6XZy%-2{WUEi=p6rT!<3~Te=}w3 z>81f)@i$@V>82@0anlsz>HDp~j&D0#8Bc%TTGhAz5H{2l{-M>vlvL1U{%J~j`sXk( zQ}|0ODE=jEQ20JPXT{|a)o&u8u-u$pgU0!5p?PzZ*%Sfy+9EijHbHXt-j9IEO)AvJ z&>Ye>L^rsn$?S-L$sKOpy&Vz8BpydK=zMN|9@q2lM?e7%&dnbOK?au5>ty~AVf`@z z7%&28_t2SH!_<*^^mYC?2n^0f0B!P*5li>ZMvU-TJp%3#|BTM?s>urxFp1`nG1R{h z0mZ*4wmki-VoUL_N>v4P%?fq&c;T-K$b4^3J&&U^xjk0vpgg?>I!CMLeGmNhZ#?kF z9nlKVIOq3KXy)5a568UDY%a<1XYOi!GLMec=F~dwn}}l0%!QixiWhXX&PDZa7B4_& zsSNdz6|3Z=u!a@yiV;@x40D7vmbGLJvZhr$HN3`BUp(7; ztY3xNw4?n=PPVsiSViWL*w^0`Lyir1#rjMfo9M!hPIPgyv7=SMLe`+Kl+_(Abcr-r z%EpMJrL2zR%;HgpQzYo|Lylamm*#hh=2GIJKrUA16nlGujDv}w!GT1ucH=40jF53k zmP#p+*gGE7?arihyE3VYc9(K0M_$}jqaBWXRa?Dz-FClAva+=!Eh5|Zitp}m zNtL`UxESvq4oUAGM!CGG(#8`Z>FtDzg8C}oITt4+wGF2=E~!o98%~#vx+F8sQJ3VL z2pJVZl5-}_c(ZXpHItW!A_*((eq*>n4N|}44R6n<+G@+tjQ6v z<=fvxD*CZ4VnEM%+7`jS-4wxo+!O&nZW>hM`-6ZW<9d955D-r{MNE-#tH{qob;TW( z6*>nEicvL(Vlf(F&}VDD{o_9?;M)s>6x1i^JZh6XiS#(hSw*_my8ZO*AShlK1W*6@ z)%o@lg;BhvfZ`{Epr9$ie4`h1Bxe!z^z^jEd^+s#TxIT{048F zhw}5quQ{Lo#XznXxn$Etf6me+f6kmE*Gs$NcgC&~4rlC&BiE}dt%;er>d5sHBmSK3 zYAM@$)e(##BUM~2tuZxHS`#DZe-bYhvbO!7Gud9VJ(FCuwXPJh2A2w5F*~jlx@9nLGw9FuUK(B#qw_=Ytii>2mT{?Ht)b_k9Pgv!>^y#* zUvmFa|C-p@xV5CPhH*y7_9ABm^Et_QS5@@&lJO+tY=0NyOn+Bdyen1_U5nNkPFgxM z+=ZQ;=rV=It;Wt4x+qDiP3K7)jh7`$N!{5}5<5B36+2l-QnIm=np34LcCwVUXqNPACcC5!K^7;}^#?hV>)|W`J zR@`j{C zei!4QKV<4ahf9OT)wa-)mJaO6Yfw8R2^|#F$I{XPA+5DTQgDxpAqXMtz~Qtc98OEY z!y!yaq;0nOIAukR*A(CzFLRD7WfKZukTH_aC;)kLLIH1%b5Kr$Yf#-BEJtf(+>nNHrZNg> zqAV{e3+~Msg~4Cr$G<3`siJU(gg!DXS+kL ztioKhMtOb#pUu(voS@I`)!JkZANhH~fHz)AXTXc?4R~LP-5mvJu*Vx;EPDknHj>Eo z64!fjRgLvHW5o49uGb!C?7C*GC#VVpW4!BrXKc)d8~z~ne{}?7WBxLd$1$MRjQfKs zM=(aC&$;OQ&%0jgGR4=S{#dEY)b+v|160fBt>*K2ex6l-tk7kT#lG$2Zxp(!8ZUHV zsCHx`+p9ut*45!`uNAX-SBKXa)*x%5F=C{DO;x0}miV!abq&`>d!`t!*WVSRjr4c1 zhPz^z-F$ynjCtOH`U`0|8KYeqPU=v8sK2W!GJj|yXDu66BJJ+Qbux0v~m)SjjK+Mr^J&PT24G!Dm#%$863;xbSFwq2_d<@ zQcicw;gX0xhf85wih9U_L)(!t@hbZ9h>BWmk?lpD=U2P_B^dFjAJ9!Jzhf`z;! z6kLE7oN*a+&bSy%O=Bz2wX_0L{xHBg!T{;4U~fkl>)aOxd-sJwXHOXH?NMWAB8=@# zgms<$17L6e0N6b|0QM5&0|42LVum&a_7v%@jS*wvzd z9VWK7D2yE&6m0tjrDj_<4C=P~6{8LXY(@Mkz2BjL?SZnb0mb0meM(ht?^9~hwok!) zf*Riz6!7+81+-P*JFFONl@)An8CX#85)yVn#39vfGH$_<&?aRm@tC*07Q z0=8xpu(jxhX5K9-0NFa@hVN3g&br}NhetK50D26!XWfv{>qtEp-*!9#EDwBp)?I-D z-qy4^9x>kbdLZi&c$?DZeZ*jEJ+Q5U?Ez0!Tlaae?LD3avGsVgqV4CRRc#%PR<(UJ zTC*J!7vOfz)`=)U2I^Tq3Oie5OS`?YEuAd_7WB%xy&DRKxqCOrbLW>K zuhTCZ@HLkGEixoJI|}m_3=}k#&-=ZHy=C!o`%v7A;T+0y$T*73Si&1Ob1308bujKV zu&h1qjW3k(L@u3*G)#M=M}rQVY9rQ+`pE(VxKNDt9{tH?xZ7Su9S@3Ds}1p@0m5R8xv(?6KgEdb&Js+8_xEc zVXig2CU#@E%hD&qU9s^hD$TDpHa?LwFwB`q#%SY(Z0yEF8S2}mK5NLvMkv=OvK5U? zWOY|2vX-tEvNgF<$TF^$)`&DTPWNrM9Xa$nMY=1F9Cp=T&Y|%Ue=c@~g2z#f=88Wk znhIFt{Xy|+ASGT31a((>a+ahaSkmE=&T`IpUD6qc>a-&-BB+1bYlA-|nK{#u z#!hvFDmvYfmQL)qD6C97g;6z#HM1hc;Ie_2k!NH;4VLF_ZE+(U0b4-c5Lxf=J!AbUyt^&#RGQ*jH;c{cLY4JGwy-G zyQojGd*2%Xp4*;?2zHX zjskWlP|(Qm5anP%HtJw&(AycTJw3r#?Q*d@n*T>g>CX=M^Z%qj7@O>1p9$a^ zltW{S=$0d>`|plm?6#kmiruzh(h)Sc?MNBiainay>qr@x&MkGtcy}GS>Pp#|9rsIF z9sQgDwI>T*vD-G?DJ2aS(R?m*#K+hjcjF+;p@zNTxk{hKplx*xqsY|qm#IsU(SWnQ>jYNupYWW=LkD*#QhmFZO#`W=3Stccx<;3fh zk&IKiUUEt!Caya|x-mycy5UV@V_p|_-S3h{yk)3Q8$sh%_JpLXdqUEc4wrPL14W}t zdtA~LA!H#fT@ljK)x&vK!Uc#chw~EcQX(&1Nw@%V>70dO7hs%ofs4Z~aOQAcLe3^s zXU^p{E^u}@FP$Am(FM-XM%n)9Q5WOXa9+YjUEt)f3!r#vG%pdSCtLt4xWFkBCudyX z#Ec7^Y-}}ZX$2=ZC;efA6aFxEtRoDL?F)lGEu!|Z9#&sZxT0f;Fz8E!!BI_L|A4vS z0bpu;0302rpnhfm;5>@ODaKKU0*=nMLRg#v*zA;=LwOB!DA>^!g#kAx0Q%jKcC^C{ zVZhum!3|FwcEe+}h`V7Qay-H~dfZ(WSKAQf&Xx7a5gnaJ?LOHJk0RFy1svr-na#m* zH`HBI+eatd5Kg$^(M&{#`n28&H+CrF*7auGEUgAbrmpCQRu0a%Z96dIhKC#;cyQKj zaA4Mr9dvl~HpvAY9w>Ot9q>nO^1uTW!S7)(V_Q7%KmduB?Tf+#JyCctu13_x;!!B{ zL}Ac`fX3oc7)0mr9wT%<$7ggj&gmWXU~nR8s&^tlK+Gf~)E)ZjkKsSXuA zjNYP$ai|z&=<8_f;rXQ~>^0LU81jc21;)Wf!Inb~0UmP5suls#dcA_FLtYv7ZYVpn zL57F?nk_Qy^{a4hgA5P)tSj9%m9ac_LiwDtISO7-}<~+#cV#xjR)SNvSPgV4poT}(S zBB(R3&BZdD@^gan`JX%oK=H2TULY5{{}Z{_k&4~*v;M6k6?+iK{VaUu&lx#Vv1&5@ z+=9wFa#hjK2ynZQjTunS5p1>58vLA@Z0xfF>jBp{8%H&j@N*2;<@fP3>pyTfMN6eM z`WW7~-zl7KMo$g^$Kr;H!YtAxBn8#|mgxRJ;kj3-=xxH0UqZG6;) z-57P*GB)Z0*C))46qZ*G3^Yb^S6jlmE2QlYgGxp^!r&^gFAPR_ zJz;Q#ay1dguJnh&mHq+Ur3C7ibC-q(uq)#O;8JD)T+FZ$<#fd3O3Z?hGvo-ZpL81%}DNZ>xTA4R6+zI$-}C_cmxi{ z-MVDl4bL8T!{l){Jaew>tQ=vSmfi5Q95Fa^P0NueN6I;^p46PW7Qt}scmyJ6CfvHy z<8H>8i3mKMLELIAx*_jW(aktnbW@W z@aj&s2vwc%dRZ-A$P(ZQw2oJ^L4fmhVuP1)%r9Uk`~r4zi@*xV(4a$rCj+VzDDFYz zGC_uRoIvxa+T?MWF?hTH2hYvT&~Sl~lnc7S;ezU#H*TPf4P7hf&R#3%lGh3vZ#>Bv z9Q7LTHMo!JCRjuF*gii_`g|R|7TqTGD55#UAi55Z>_y8bC%hPa7Pe}eowrG@(i}8) zqr@61dE?h-Rb!3aWwYM68B$x0Li~DTw<%^lRHI!7MYFY0?s}syK4v1DNyTcB$)qrP zPCk>;c5r$p%se`JS9DN>9#G zK9Gy$1F2ZfWPNnayx$%Ltz%NF_*1Mv4%ga^c|Tg$e9m+r$9U||8BF_gEJrRz%aoE; zpCO><45*Ia`y~Gm)fBS2Y$;1wBW5|7QZ`l%KPT&OVpj9WIEj3n@tKLb9;vS$D?f9| z`-9?KW&J^ed>~~>>B%wji5$l%rG4d{j|Jv-=CKrbd=rQlQ(ro$YXa8=QU~Rt^paNVj?fyJ*PqKL|(eXxqU9rxHIem zyt|_=aCbDMyEE#-?oPO{I}M$Db2!l`e z8Qtm$>-cdp_GwQTe3}S@Py55*mIk%QhgqMF4`AacW(IIX?eR>QRU81sjp6_po7Ld< z6d0SG0yijQ4h6gJP{8$;LETu3!nnRcF*W8_R2>Sqt{Dp`V5Fmrt_jxRx+2>*Pc%Y@Y2cGUxo!aNYP#@*b#G}^EMd8JX3mVi` zUCLa5mnLXYc!`#wYuT}jXpB~jLaY>pLyZE<;e|sE0S>iPmuwLjgDpa3UI7xx4FViQ z{8U736S&qSUop2ufV8140%Nd4U<`E#48wRpfV9DYpc~pF!{i>JqM<#4fz_NrK`@o< z5wO9-GGiz%V}n{8O2}~VxKT18>#h&Wa0Izlc70T)6ySBr*aYg+<1!qXU|pY(;dNAZ zuK-6X$rK>(dZqxc7rgOmt`-WAN9K$ayz!Bl+FZx=1$e#WjgOQHP=(s8v69yS%^@mX zm(5N6!G}A}{B3ikvej$hp|Gl|(LPhmy$IR zJ90I7?01ShdOfRkQ6AOVWp)jEZngEM(QBl99tbiX2Z9WK+}KZvpI5}LkLEw_N!eCR z<;6Wk`9`uL7eJ!FkaUbPTf0%WDJPhtc$; zaGZkrjEozai@+O5F#>PQm>ZjM!?BqNyguWGBd9$a(OsW)!!bux<&8q#b*~2-^GD&B z--BKEdvqgPJgk5R5?2FJcx8(R$EyJpJ#b`SRBs#l`=W+%GLOVt$357m=c2k>!%=u^ z*rWUOoCia>Pc^qjJ@D3O6n;A4DI4`bY$6Ij&8WsvEULzfQFx<@u}tL}b^HRnfiwz? zafeXWC_oxt%k&)rG&9yBz#A=s8odG>LpEsq0=&){+akd09ReKDpf-)a{JtIC94X8KWbr!+mt_)XtWu&9gk0YUfq5Ch0F+L}zYu z^jW)7yV726d%I0pp4qL==Qv+J`%eeDhP+T&z}K%DJ+H zQ>;jKipZ0M(M-Z=Q!X|`d6LMPdX{jC&w5ldJ-Hb2ghH-|>rk!cc_OH{NzM?_y40Nc zwEv^WDL(HB*6jc535s9oQsOrWqw+Xi8^pCw0zo6~xx$x$V42@3GVpT<_4xy;XKLwr zT6-qoWRPo=qf>msP}iPG1T`sf#-?Yo{aULv(HaD)A^m4^uA=ATPRYv5xRdcL6XZCh zXEk_Uax%Vhgs|t{P?g2YKb&WLmB?ey6Zx`pd5Pr$&(FEQvvYZgG3){}C^zf^yyp`xR>1|HnRs3Z>1GNp zgJ&}#-Sft9Wi4T#^M?Uz06g~(fUi2#_`G8PJR|lEfEixT05J0`F~E3|7%1x>0J`A; zfXrx~jSuLaWCnCInE^0UapeZ1)$!<`vyk7wszZ()+zZ>Q?*$%fZ6L6PxQ0;wgnBC`w#drihjz?he zIOm)jVzL{mBCse&;A2hkT0}J-fyHrm*+c{qk27lf@wglNe8R0mW5nl~2sT}e!0DnJ z`+O#%nvFnW+7X3{SB2Vy;`LCx+e;=aSO*iFncblIv#~c=3Lols68BopHWDCW;BX@HX7BD9EzV!s2+@ZFw#e{ zob$j3sLwz-Rc6A2WiuX_DMlF&N>RrBQWV~86tD-40({^Q;QboiZIN~N9dZTbwI8$y z@PW7Nu2-mRg8;4E_Y3eYvPFh>x1cD%yB#vT!wbj|x!obd+W`UI-lGu&I4KD5c8|)$_!;zhDzg*W*RCsglT&~x$~(-4{N@Wpv%=TAH5)}Nw=K6h8UzS-+SxyONS zhJIe}@Wss-uQR{%|FgJ{F%$QhGCTXD9Dn}j`*>a{7el@z94_?lU%iZhv9jQ3<5<(wjlyk{AwNPBuO7n?!#i{ROK&Ysa+?3v7ZKJG+kBSW6fp&Bb+ z$xhX{Q^ZD{;y3c#eJ48&zDnd`1X=t0(V+O9Tr1<+X4jjQos94CJoZ|%a!U7IB4yk6 ziIg~t<-`{<#;~;+7tl4f0$ocO5HI~<(6Frx^@$h$uO9S zb1nkEqseZlL-}iN?3-(DO$2^79)aJCN8oo8s&6JDs!Rl8#R$~RMBq0wgYc`Fh^cR8 z-MX)4-MZ%v56kO;UwNb0Gp`3e^G7wPZ6e@-R%X!HzNo>>zNqfW@n~5*3TJxC=&_l& zNB8A94`b$B)YOyVDE8%Wlr^gMi=$E1L=<9~D15A$E=IA(#V9Ol9ybcQFH2EXqW~*% z2(Z{_?(;^kZrUL*9y`2cEduw`vWzLiGL|2fE6Q@?$~Czr`B8y2Aw!k`72=)@XJ%MWN-~_8tA?$g}H1@1z zS~t@;RMoSVA^6NY%|ba$UF*4b+R|4Wrr}o`d~xL2mTCBG1I-tI#+liI>dIz1e3qVc zOhdv@7x2ZcJlp4+JHZ#9(LCAbGnm=uGxbF9F~}NB+&2x;`m~wDK7(h6eFkQA)pF%^ zy5r9*8Lx%rJ+Hx6hr4ZgE_ACZuH7AfZby75&gzao*YM|l(ziPQKk=qxrX1;*nJ*n7 z?0>X`Vl&>fCLf#e=3~!n`VVhD_MC9!W6vCE-G4apvF8q#$or-g)P0q4mX&fbBWj$g z{U(!(&DVFCoQa_Lohh?gHaDBenH$f=jGW>u=ZAYvbbeyI%mk~u7ZhKPFRq56pwUgI z*f8W2U&^@{(Kr+oX$@me5!azwT}o`AG~P@Z(BoF^#-S9}bTcI`wb0a;VhyE4M6X9} zO4CrzVCl_VjmY{raoIzor4QBh%3~>U8N)cIT$>Y@p>=6o{Tp99C8F`6b6%PrI(29* zx{umqeVqT=DK&DMnnSwA=8!>Cb6RThrKP35ynUPVcn+G!Lt{&~l`Z=qZ)xcVc~i@} zQ9f-7jTs!tOUP0!l0J@od5Kusm*=FVrNsHXwCu7CV|hvC0?Wo+V5z2Q%*9wb8Nz)W zCqrQAblI|}A)_T>uxz!prJGv~mTe1TZ)^*LH}E$Wb%>l6V;S^X#`(g^`P+lDy0LzFkrU2uIDL{LpS4aO?c-{@0h9Veh>xLo_Y5EwAxna}CgqFJ*fxM+RBXH?t1UAtgMj+CNd{Nf)bPzWE z5Mea_5P^-&7gW9|BpRAMy2i~OgNDr>6H(Z(ISL!!i^7KYqVQ$F=taN-U+#-y4f~^v zmp#$4<55U7oWG#ANe;z^^PJ03s2hty;>Bpx((I_GY$6J2-%UizG8Z874T{Am{H}Nb zepk8xztMcxDCoX%2&@*a@0H;&WhOkBoD{#ioS%^a7pC&y*@6^zU-w#43(^%vF>AC6l#dSxtHj0#{BffaUhenNkK7)onpOH2f)suF^ zhttrA9{yTV-->d<}9f z8`0{_uAk4zIo%|Fl6*RGd1b|m~o0P4RW!Urp#*5**v9dc$hLjhf_7>wsAc)pSR>;N^E+VV>CW= zE~upsohE|fQbtZax6)BR=aTbo%CHVPoAc=NHfk?3b2BJ1hH|38L#MRtrc-)D(|j{0 z^4@ru!W<7%*ovD@shL9NlIR#piAeL!`5^mnN-G{3IZSe9btH%OOWG(lbLcVDUimd^ zRdY!7bxK;*oR?NLyExjoY2<3Z4oVg2Yow(XU)k!-d99zvZPZ`AIc>?gEzM}zoW@pf z%S$aEq**A(S^a?v@SNQt;OusR6-QLfM_d);rDhW=`ts6>BYA0MALYCYtURBWOlfti zP|amtURp_vxd5_i(gjwbi27Q6^O#GMmzpQ@(uzqJSTXGaE2l#olrviOGz3;Y4S^LX zE(x1jwK|NoYz~7}o5NrwvN{Y_Y-X+87RFZX4`VF{!;Fd2oOd1}lla0kG;c zhNHXrmr$A_8|9@u;$iaE|lu{Th>T-JO!YCw;#Amd|N-DDIZ4rGj? z<=&W#!Z#j9;j&4>1D8Eib8mbRWqlom#ImoW*c(d(Y}pbSd!t##mNm<8>1r7+TP?t) znq@u#F7*kpiLaTpnA7+V5HMQe$4YbQ@2AONpHVH26ScR-TaIioOC|(TAc6<#1k$q>tly8LmQxR4XpawygZPfa{ts%g|vm z2j!YSF2Lq78Ll8EWw>IpPASk>n0)y?N|KN8Z#+uS=x;Cm-8q#@bzC!)A@oB@!>aAyW;_`IwoP zC8ucM$j8hye4R7l6dRC-8m-^h915hHyPhny0! z>SozWG_MA$9;QU1;L)qvXH76$7%>$Zi#y8Wv4C>{)h^?jb#gZw~0%9uBZ>4uJNDQ()s4Q+mGriz%@2hqCq`rWhNW6&0#!9>m^S zJ;>O&TA>Vrjgu-c+?uDxgh++Pa%=sEWXilV$B+M2wzB;KrvB z*#3h8%G|L12RGcHEU4Y7lrMcRU0=)b#3oO%XUVg zsr^xCNBhBO*@sbxorprlc@M-cdtm!m6t-WE!i{4_cnpmrle7!4Z88em9$tWLU#Ql9 zaRF;vBIwqC?SbovB?9EFUm~cQ)v>ip1h}@DwGNG~CS_Wt#=K z?meUR+XQUgHUX~P$?|GB6iJ(}S@(g!@xpc8*4B0ljCDr@Z2b`du0=j9Tlb-?qw{O~ z1h}?OhHFpA(0c+!fq`i|2mu1*GBw(bCBH_I(>qw4{-jB7~k7ei` zQ@O`v*vcW}?nwc*68B};`VbMI^PvD+rv>Po7GUdB8FPLu!&cf41=zY|8alBd=v+Mn zTbHm<4(EMC5JNQ;ka}hgnd=*Z&UTj9H_d4E`Qp0vY1rC6#6dY4JMMmO$dq^65a!-F zRN4L^=%uXPKh5;LJBMKF{_5859Kv(ad@JjAPV3gA>l~?WUH7!=$TTF@9+_r+I1SC9 z^_hI%G-P}@4cGPg;uG!N`saP|#kTIe z&(zxUzIpL}>?^zMixX=vcbogTJ6`6Cuhm%X&rR0Uu7m1Hn~r216xV&+ZLoICXUaR~ zGxcImC}!qmN5~Xi+wegMYy2P`YuFizHEc77#&tW>vBqtvpVu{POIOvjEp4iCTb`q> zzbzDN+|2QXVx~6dW4tC`9&2n?Bk9)`U1F1galNI@d6q99Th<&B4SX)qK&yMh7ow!a zH+Y*vB5%1bBszG_E^)zp?G$Ov%^}gzoE9B8qIL-V-nqEKASkY|(wr7mA#p`D^cu}+ zabpXs2vE7{=QA zT6OKGTN!Aq{dAb2=BT>MtpK~(3N~V4u#xzp73h8l12b>^5XRp5Aq?JWj(~TX2g_DR zKt=7w@r|n^U}O6r_D=gCc+1S@LGac#);l{D-NyY2_SSx-tXl!t5e2+;WU%Z*1t1$y zPHVq&LILlbA1oVE0P@!PK^^W7DPZHrgW#>3s&{TG;4M=T@Yc-;cxO@pZ<%?hfOo!7 z0ExK$Q~~d3-ugkQY9p#?eq`{D?-6)svxS|Hz&r0<0B>QBz+3M<0yu~A7B=pG#CYrA zBh~&#;2qNb&;#E(@d(g1o`0me{0NwNYwVE@k5hd#hWnF`z{bf(;H`(MjSnB`-umJZ zw(*Ncpq;YuYp%bf0NRP>0??sca{+8@_CghE7r@5VUij8(6bqo;R{(7|dLe4#e!CZ{ z3ZPBXzPW(4Z7!(ZD*)R1_X@hU_hitvtpM72J56$Q4I1BB02@*KfYtUv0krMZbQb{Q zNCD^$dLhw%#0%R#6tML;qJG)>K5y9xs!iqBq5O#gSl3qoC?aj=y^vUc-V4_cd12d- zfT6aL0NXALa2+w^g=;T+A&M+P?O*o7^~lG9YD|FZ$GoaZFI+q6h3km>0z}q7)JzKy zSvM`fwNJg+y05*A^(+nRt?|M2 zANt_BBW3(GQJ>5$&m;5Mi1xnF=xet14NzW($O)^>i{p#AhTY(G6@(001p)TU15ztz?6LH#rE%l-`Ph_d@f zecJ2t{?f0Bf6eoGjr6+wI^;Se(&J`1dVDVJ)t!p9sPf+y(kAq|`H9i5$L?O}IdZ=jk!JP4;J%q2dM4&5em=}6XDs7SAE)~Zh*jUGG9-p(b4!<9}eg0ag&tK27Z+5@uku%#1-VeVglWSPboo^mpYd&jO z-8-u_t?JEQvsJFjXe9_QDy({UjyeN@^v z*&98N;dToAx^Xb#;qIRXV_*%MO%e+dp zrek;i6hJ=moM9yIKG;F>Y8&TK_&bLEbjaM!dm zH`)2`Izv6ZUafoK>us!s_JZf3T7Ldd*{AlN^sLm;d3t|_8nSo#bx~`gHa+K~&VRSZ zvvLPPzmN2MdfiHGdX81wFrWJD&~x}anTKjf8%JusWuChi%p7|D0<_WlWVMd|9#*Ka zn!9Lu`dP~B(*84g9%SKld5z?C@UN5Pe~S2X+Dk33pWnAtzm_$Bt+l_Ddx!Q(zei-> zbdGLo-)k2)ntdNuzfUjTb!)k%S#2#jyRT*MJkJPruVbgqYA<%?q8f64?AF&(N7kkz ze@%LfwE1h0JRSKOJAHaSYV&jWal18U^A;+{?~(8G*P+JI^Mtz(b}SUr^ECH677Np7 z&kF3CmB!fL_h9FtF?w#bT6&zGx7cm^y7jj4J^ZELlg0l0)YoVKoY(J1{eHY=pMeE< z4pd*G{7krhFYMookI@``< zF{}MQZtbml4XgF6@@P%7YnkP&*7&LOWUq7Cht=y}sC!NJM&d%9Uth&K_3v7**>|n_ z>#2XHU%_Xf|L&juj;M4!Qe!vLYuTMc*U|Iq?fRbuyPpB_8M0enud9Ey7W*?m|Nf5Q z_jKy_f6?!M{T?skJ^qEA|L1bCfs)-yO*qiF19g$b1s%bx@A((`{1!ONsQ}QF|`?=GUnA7yi%3T;3NubLjWV zPCZ{k&tI%IeNDU9py$wSyYuNfdOqK_TSw2M=g@7s=5=kO*ZaD@w)*QTKcigidqMxX zskayY@0g(6`_x-WoKlm@d6#RQ@wQp2sHHPy1I`i#Uy4FIB&3AvV z+kC5^Ep&dquX!QYqW2-Twa?sNUVmhUV7nOm$rIVxN3-|n@elHjPUiLSv(0}j0(laeoSIzn8pDM0V zY5mt_jK4>Q*Tuhw^mD{YV|1O?=CAd$?4vXLB3X#@d3_D_8B+Z_MEN^J{a)1XMg22S z{|wYW1NF~9{WDPi448ce4ByrH@9sa-KKXC5$r<9Oj8^BBpK4EL`*{_6LFZ<2ZFD`- zMzPZM={l?Su}lBk-_gwK=y9v|KYjmirgO=9XxwV*aRF68?2U5nlqX;)j*>TFHVBWu+o`@G|)z8~m4V)oGR zr@v*;`)&Bs-_mDx`u#O)t3MCW&jh0U{gM2fsK;ODJz4DM7G(W;EI%XqHQkH)&y`>2 z&y`==`%ZsPuD7kuCiQ&%vr+#H)bbf%zPD4~;hFF6+P}a3Q}n@qVQRSZGd)(d&7U8% zKEEdETdhaNt3|8%_59E4oLPTA=JtN@pZ|H?$5-&3keo5*axF4 zH7nK9V+%2lUXO3{>(~2pfB)yHN4-y-@Bc$koSXLdk*XJKl|(b zpU<mrPk^4kyNxvR{J>UQ9?{)pXu73t9e+KBk zYkw8@iaw*Gc9r{6(>T5MLavL}qSs#NeJ{jb`Tg11quHFFQ4amtFx(q$fApUlJMF)} z`@q1?yn2oL42V7x|C-uj!=H@4uW+Vp_|xCjYyr-wru%I8)8GB$0<4YpM}EhFM5{j+ zWSovxwZHbf;b+@I{5|k1UW5KO>S}HJJo~z~@xRqy`Yn!D_k+B4ew?01xA{7{Pu3z4 zjWO*?pH2RIN2OY7jJ`hKrt9ps=eh(kMy_ScrD?@29fa)zoDYgzA?P+RG>*2l{K z7GLRJp!d1bIP>SP%5#Fn_{_ZOYm$4xzm|pA2YoO3^{x8!oLAK*=Z87RhP~TN@xNzc zRcDc>zn56m)bkei{^ykEKL_*a^RG)=3;kJP#^`HU%)vGMSiQe6f2QdBuRUKNIsWIG z;huAI=hdg)PyV`mzuI;9div)RZdW;*)w(`kUu}KExY@a`${tPUn62|u<+%Oh=Sp+k z3%Az1`*!!S(AS;sdUp3+sm^2%md{>HYAfa{U6&uTTAQz<`!&w7`tJ5?&y)MO(D#9S zN2lXLU*lD;N57VO+uqsr*L0uw&ttXMPU@@G@#Fk=47$(P*88=6PRYIG@7v#Z{&qV; z<+q8KRAdg0)OS}yoBobW*U@>tZKuvoO{H}!&8NreZR2}dzbEy3QvVFpKLhjl43O{O zD4MN9kK-EdXE}2&`u$$h=dN?9;pbSb&F`6?XV@<~yU}Mku1(hC^SEzy?wf0#yS8P2 zuIn$>JiGg@RA;s~t9rBAN;#`_%<@+2nAMV8jdRF%Z4{~RaE9-B^BJSBLE7_KkDp7{ zq+i27e*atjT4bD`NBU&EQY5wYxUip%`u%)8?kD|cr`mf;pBL%2**tQ-w2Jf`{_j(| zPwL1zr2i^nwb!^%d!Sz%X_ITy{e^6!y>shz{C%hDcb&i8PLS^|rjh>MMt@(V@?;$n zt?HOLmwwwp@b{S8Gks6={gcagN{|wYW1L!k=&wf_tzPaYfd9qrZ>-sg!qyJ8)+h%K!KND5=UFmh1?aibf z|F;-swUu%v>saQj)~U2ct#e+J^GE%4ydLMspZohr|NNMc3;OSrdb@tUt$zmUp8>m{0d)4Ys;zit=FZdncSqbec^~jR zi}SYW8t9D1U5oTh*SA=k%rT9%&Z(ap^|L|!UR1spR-ftDHgEE0{-?_E-~ASKAM-r- zzOM6s*YMkIKQ(f1t@c62=MvGHR`clVp_)pyWDS0fS)Q)p*W}0OK3NOzh5kK*xqWu6 z&ave^bLX%foxgp*u6_^DXMq1~)cddQnFar6uzv5Y@BN~FXZRU?SE}!&{>UyF16&+1J5z47-_U#mY~==II*+@PNiekt?mGgPHE|9UFbRvWXs7GH<@{Mvkt z)wosOY)!tl#{T=iYtZR)ZCuB69=i69SBO44)7Rzi0rNe3f%nH>%T9j>{GdZe?Z?hs zlN$QHpxb&a^ZM)O-uknT`e&g28F&pp1HYE%C$H7_*ZO(?^*WEd!uPZOZ{7>@yx>*7 zXRq{Hui?4aSk4xhHmN7qiA{ANsk7J|orG=J#F8e17g?_A8zJDvedz6FskL zoBj?+okOd(=Q^*JYmi#_!T(~%riR~IV)je#eIeTP{%o#SX|Hz1tgd4hS>AlRaZTE{6kr%#`L zJ3YUd)75vl+;QA$Uw!U*95w!*`)|s%s6Lb?|V4jH2o}(pAPpc{@_1;cpRo{UnlrpHI1zw z#<+33YudSa!Un?M#Qgg%@2@acievmG(~sMnKW_f?5B~dKt-BwPkN@T$!@B*K_7{(- z^m>}td%3jTwU6<*#-`WqXYTrA$KtiepGD`R_xX6HdmE!;uukLRyKE&{&# z>?{6V@^DR^k9}XRxxc;M&R>6co*zfy8vSAU!v5aOOWUlC)jy2spKz?>JsHDmKm#8d z2xFIYPa@8X)9Ll$G0xv&I_+!Dw$pK?$9&zi&G#_8ndu{uQ+sVh@Z+Sa#^57*_x zze&aG^l$%->Sf)qjr3YtK5ei0v9Pa~V;lC9A4hzC_vuf6|GmE+zV3b=y#L3a-#eU- zIF|b4r{DkU^cCluuK({;=A4^!ZimP8JLd|IclbG&dXJ-@4+o5$=5)7a+2w!lk&h?y z@%z;4`SQJ=AHDzde)8iOo~PH+V`&-lw*I+WGtMs^+nVh?&AOHUrgc81J?eQjo@*X| zongJwx!vQqO8ae@H+<&CzuQdHEyw)r-wnKcZl`tg$9x}CpY!4M{CgT-GrjXzDZfr0 z_MhhMeJu93tpD`=^7!$7(;3b~Z21hw;~37`kCBJx`S17Ayl|Mq`JoW_jlG0i{AV>+(z_~zf1SBz&L-siB7Iqy5}H%@=Mja|kswcnr5 zG=J>#W9qfiIP3Etf4_KsrncqvdDkZS`C8j#zP%@T{*2=S?`fZV2G#TY$xnazS?gCk z*0@fbpHH_gm#;TGkLwQ8rDgV-7xy2h$M*m3_rLtC^fk7Q*Xpf4!MVBQXHo5b!5Qbr zYlkg9_v7}{^z8jy;BPRFy;m`IFJjJEe{4H@zc%N%&$Db8Psg!!8vnlh45Xihw0s;N zhj}l{rR9gmI3^C$ANCiwGd5lh>&0#Ock2%SPCfhg+wZ^kVeFi*Hyleo&+}_u6CC+{ z%fTh|+wi^pPm zw|gjuUI(;XgPi3aMSiU5xbpc+p6A#2OSX~LiQ78+eTwOS+unPOKWBfnG5(xw^jfxd zEFZ?tY1|zizduYrjNv_BcRte3pU3lmrd;`ZG%;4r$H!NE{&3wmTnnb_!?EkhscXi# z?$omJ^|;>HbX+H&9@b0q;&hrAl72G|%Jpey)e#dFlHWr_;PMJ(hkyn>YJDM}F;=pTqq1 z-JTEk1M=(2bdTW3$6;KTAJ?4crEy_t{nq7P);;mxP_+H+L~YF7YfRs1J1fVvXI%fK zA!E(gpC{*H@wwPzOr3v!_Somv`>0*N#Oto9>#}?sY2AE&Z9ApqO7r4aDD9)?W88je zI_<0U+LC#nzW>qd*H`a<`0^F!XVY;%`D|LIJ_5O$N-hXfQS3I`3 zew-ht<1*KrUU!cue!q{HPCsk$aX60jJWi*1rN`dKKJ26SHrH&g^q$ST-hGe{T~+?K zDm~_xK2ObibMK*aPD8&ue4M((-ebEv-K~@ACH~3ik{; zjQ>Z^nQ`ZMQ_j!J`I$2wEuFVH>rXBF#rt2re*O5DpMCMu*RQE{H+ucyb9U}^*zkFr z)=AUpGdj&*^O&}kw!L&)aXU-5m9BZ?F{F7dk6p%+y~n3%{9D^@di~(XIG*i!ET4S! z{x4d-e)r}3m#?^doIgy**Wz@(T+8#?`f+}oZrSFNWm?+aYngcbwSC5AhUwaJaeiDU z&d;Y?m&?~X>+|$}&U$=jJ+AZ_F!%VNd$NdQ7&+2)9=5w>r7{Mxq8IDhPYTea9?F{E+xX$wR<{X@6 z+;#MQhkXC(KET+xG%b@qj;-Uh{hB+=xcf9?>obh;v+@1Z^Onz!{P%jxIz6rx()Hci zZOtA}kByV3{!Kbxx3YY7OguJTZhY;{G33Ye?elyrm*%I({Pji8$By}+@qg?oH8wov z$20a?zU&syYx|G$OUIp#C10-Pd0KaPjLXOQaXKzjnvTovIUSFsb-!_)xzl6&sBLR( zou047{rBANmfMQQoTlT??bWB#d)neLKR09hh|89ii?3gGI=@~S-bb7_^}gb=!*pCe zf6epb?@#2{tDbK*Caj&?;y66N2hjWZ-NycB7=M3$hB5Ea$1rou-Fx{oUR&~*f0o7P zbEa$K+(q;A@oHrZU7A0PH}mx##IOzxw9ot99MD&Q+(=&xyy!`&U;yAL)19 z86WfWIdzP4m!I06*Xw^r)W}KRj zTep5bV_dw&vZG_Wv2owjYx%fvYWd!;=lhS(r}h<>9j2$2-{STB7%uX>b)06oZN|*b z>o(^#-b*<89LHlZ{d$jRI2XehHJ+1v%sTdb>3U<^yy9zT8keW@mmgD_UwfQde(LqK z-F&&bJ$E1CnEMbX8~fMB@ZIMhITk;341DDHd)W6uWAM*^{G;Q>;0KPqHyJZ-F%Dh2 z&3wGNbURDe%lCic=SPnx?0=gvqx0&#K2rm6e0;=o>$w~|wzQ40WzO3H;R>z!o0 zov!yh-g7MWyLUhTv(ndd_we&Sd-w7czwaOC|L)y4pFWX3<36r8 z-LIMW{i#jI@7pjPm&;#E&s&yB%kKFYk1I_t*?(Gh{P8zm{^I59@w|<%_jcJO$GFcr z?oqtn6S&iue0Z<e|Hhx_@f9yT2-S(38j~IKW z<80Y?S~fnmtasOC+;jMN&!IXFPvi6K|NDH8@%dqYqi#H2|NkA^Z5+Mw7em8}XZv$={&92vvC-Ty#rX1Zj5|!n{Lcr{I%s6-LIC+otcN~kCK99^h<~m^Qc|XVax;7q&YEzWx#SBKE)bh~xCFr%PkmIIpz-`1&y2vP{0t9?zGIZ2zm?}d8(WUgmw#66|GBZpvF2miJ@z?wANeuv_q^A& zS3Wk6&$rq~ukBuIJ8>**`tja?^Wl7y8W_gdaehALj;|dx9gis~{@W8pEG?Ug>+8A8$TR*z)>oYv|NW1jzZrM79#cL(ZCx)emv3Wu zJ{(hAX0Peeu^cyV%j=XlF7Nqo==pZz^DW;`-)+Zh=+^7yxXzsExcxcnS=Ja=0~*+( zf%rRVm>%25oMp$hlfRa4*Ykd#aeG})#s8kiw$uCEZ^*~#OP-g`{gUnUSf@0`*=pXN z%w;?Ua^XI`7bN?~!BfmVJNmzIlAzIu0)_SNfSWZ=c_(W9NClv3KdSHI7|N zW8~hiPi?PsjOU&guj$rYzs=cBT-LPlQLhGm{m1|OPu6_J{{MW=ole_Gk5|5* zkRN;R`v|q|ZE>Gq({cM(@BiWtzbgO#h7R-Bj@AG0i+}jHZ+|wPW87UD=brh!mX5dY zyk6tfFSFxXvfZh%_mXWMyH0+6)AE^@uj6_9b?TgR)iRc_%st1_zxnNVUcS~g5Vtip zy>>sn*8lpq|KSJ2SFi0|Z9Dnzkg?;B%eF2T*U6{jHsWiw`Ei*&r}J@rdY&Icnx7u? z*FB&2*_K~F%sGGgx}LwiHr#qFP#WL2-cKm4o6k%40rJOuxv}T@y2JB_<$v|fo3Z+p z=B4j(?S4Ry`D@4EQ|mwT7(IP|uJG7*ES`^lhv#p9N0s+kT5ivI@z{rZ0ekMdeP44v zFD*Oo+N5;8;&rR(dyb`#{Jx)YESrw$j*qd0z3wr@^PKNLy%y)2UjBQk^ck@Iyubay zZ+7`w|9QCmx#)k4XT6rY;&H7R(=?5-zx+kexA;CzV76`g1P(J;od^+ zd(d;=Y5ZQ>m-+ksJwbWA9LK9`rrXD!>1SyDW9fL0IF5Du%s&fT&r80Z=jG3Q*Rjj5 zWAAkC(imv%<8aR6Hq!I-7+>3JI(^@^+P>|6{M!KMq3t}R9zDMOU7UYz_c}-UcDH-J z^?ir(=lXW%-%!MPJ;$%5ZI!-HrSW}fxnbVa-#L`FmCq~PZy1{w z_nF>PZS0+1@9|jM$CmSlaqgDe-*Vf>j?tfEJYD;_+jIU^KAZMF&R*9xw)6Hna<6k@ z%+ogJah}G`(|7*$*NeW!w&^v^wKcHU@5;OFXZ!1kt?o7S9rJI09$t@k&UI}ZC)cLu zZ10TA*4|f-`8~$OwQa;PdYaD1{Zr4=dTSoX?jzLpKde)FUt5lq)3!@v=JeX!$GEMr z|DU$FT>t5|`(Wk$wys-RE+7A&_wU!&{@&U1_w(8Jb+>DjtGr*=@@?1h&wrk3W98QK zQ(M10|JT3$PSaN$zsGfI^W!oP(|`9jKX~}6>_2WdPS=(nn_pYMHa~4EzP|l*>-X1k zTmBBHeO~1ItSvXppR?@PcAoXM{2Hm{edg(^q5~7JNKHm=3YR{y2Cwz+C780Q`_FFy&Ez|$s!t?7j&(A)_h-2Bkj&-kn#{I{@EYD?K`e>#_9ZhobebP)3)~$wmQFgTOXgtzc+dN^YXe* zT&`t$Y+F})E&tr^dF=VN@A`b3Yvs~?f!BFozx#6XtMuQHEZr|C9e-)L+Pr)`TN-QR z%k25QbUas?x7B$n-3J((w`@GW|9CyM9KXNAy!iZV)9IL}9^-LOE&I%`-}Q55%lF;$ zy5PRsir2oc*Pd_BM_g{09$WV8uhrj68pEc?w)Yvg_xj$4ZEW}Tvp;(G^0n7~%KIG7 zQT=_!b)I*67@xj=KYsS%d2P%Zm#aMj~$6g;>E*-jt8j@vrpXWVliQ@pO4zE0ZyT-1-}aSWV~VIIfK zkIOE7E#HUdam->`4;nbGfu;8dmVVEc?(Z(^rTYfke@33+b9&ojxZAaF@9{}~KVj|j zkM|?q{x=j#$6dP5P+G1w_AMXJGJd!b$;!r?{E$O_3*z3zv0)rcb|U}-}msm^fh;xVfoT_#`YKYF*Y5y8<&goTc_jt zcbdM#&$Ra#KgX6$PmjOz&-G_{UcR0fzh=zedyj48+Z>)R+3r5;?0NlurV`#$sUzH=R0{<)F={?A{}pXbZ3 zeO})FvhjIsOrGX1yVh~N*!R4hX*?CjgZXidy_S}Z%jDB(nX$)wo%lSi7w4NU-;21~ zd1?9n#${Tk$Ie5`HrB4+vX36i_`Tfs_wt#}=e_PPv|K~w*Ga90(W@1XyC@Ao$prDL1>y}k4D_xOAG`1|=xzhC2V z4b%Ct<*(<@AD3T0PJiBOm@{2Z4ad^sn!9xyV`GT)THIEeS9)w+uC%Us&oNf^eZ1E9 zvGr%Rb-B6U|G3?)r_c6#-tpA0DeiS&p>%!sc>VVF`tM$^-(?(D8nZ5)_d5Qc^Z(gU zUiR0&`tF~U?g1=4wz=!w<@?|3ectQ$#rW8_d@k~J&htC?<5)faY)t<)o*whp^XJ2I z`8>~;oRh7uOP6fF^*TFkyLEZXU2FX2`{nzkfn^P(-;G;6F8Qpn&UV)*&wo$hUiSpb z*Y(rqpw}4d%-fkez8+hCxR3C0{6E|Sc>Ee$FTHl=^K`ajTiW!!*UQK9)4v1Cp9L-J zy9_lAyy|twR@ZLBc6(h{$7AfZP1{*^&F{Q9ZyM0R5e>x8fnL*B{oH%1xp>}t347l!sO|4O z6JKlD){wfReqy>*?Q`|P=`vEz^XIm>iO?bv##ZQJ~3{k%-q3u_;@x~{U_ zpSh1v9DkL@WJ~7t8ONnDd+S)Nwp`lI-jB88x%T|oJyhOrX*+$oX*s_?`9I(3Gw8^;ZfURgkoHp=@1)m;$I|QOIWHQhH;{gQjyy-{81{M` zjO}Zwv2A*7{G6Zj{G{udHIMNc&2*n@_HD<|rSZ{S=Iu8QY#A%wdzsbERnA{&yY1ii zKL76C=l8%f{61at*^<`1;%DoJ*StB5AtKEZ6_^Pd)@r{7|ywIZtm1T z`dv|aY&{R9b+?$;BJQ_UT*vg;uO-rT+M35_xYj+>dvFh-G!E=BuYD|e{qcS6eDyd7 zwQaY~FCRnsXE6Vp_^Ic{?`wXSr*+fkR(hTu(|nIdU)%Jw#d~SJ-fdkj9b@bAmNWL$ zfClc;K>GbydK^0krR96gYmx7(CST6;GhKtF>%%pV?Uc4LXZ>N> z(l)L=uRLx&=e>g3SiHx3C~v#HkJ=dC&-$9*pKI4W)91-^9ZN4guX)C<35VC_?rUm$ zUO(Ab4EA)k{vFS%-^uys!`S)EmtFgOiF}`fe4gh=o|CoLufzK7V-U;EJy&za?sK=D zFF$8r`!3sK{Jh6D%477gdll_}KksKJ?=?N|@jGm48~N|(xP1Pa=Sx1*dswpH(mG?; zRbE?n4ZF$t1Fq|gzf&C3hu_ut=i_i*@_9?2=ko2e$k*|_-}k5OT*hnRCDZ9T-sAEy z-rDha%egP@Bd%9^z0bTo#_r4a@j8aDegA6z_MYa~*1O02CBHLzt+V&<%IDkPT5X>( z*Lp8%g@i+Yxy_^ zH9ddK*g8fpo!epE()_V`t^0djZu!`J?BCwwYp-MYG$x<>IRCtloujM0w&rJe?(da+ zUvt;DeE!+jYWeT@x92>4_K!X0`x{%T@59b1aW7U2?oB#NEHRF7gt`G8gYo0H$ zW`EXwd!0CaPV(`c{_Eeoyq1<39^-OxzUiso>1#}Fd+POg9gr^@ zUo%~~UI2h+R{Q+B(fl>nNBO#*KijwO%Rk%C6Qfm_IIOu22<}fzb?z4$My5qJm2s7e%o`sYRtCr_|x|LjPHLk{7plL zuiC%A5A#dgf0mz-?cT?`?7#go*P7oA@%MXeI^TY6xu>5G0N_4C^EF?74e9xIh~IDSrdaZEpFz56b^)Y_lf(r3}sHcRU~?K}X0vv3b#^qO<(8rJJq z9BZ}SBPcEREcXpc?`_Gv+V{VAMWtRs4;G>(| zKUjLbo7VIA4CA}nn6_p9R`(5B_FY?M&i5qW#+-HUx$II)e^)&GE-sw&hu3fNd;8^m z0swFhce@Uq@qU+%1FUzp@n$}Dp7T7vZ%|wJZ14Gbj%Trj=OF!#DE%C#*KYX;0KmP? z7)#%2+0wYdysM2zjq`gq8~;0ZwQbkbmY896iq6lJD75t^)u7a2DD7u#=OJ%iLa&e73Uo> zz0{IpP4D^kj{pDwcjKPHoBIMw#??#K$t~K(x8J|oy6N?&e*^#kpfC3eHoafq{PxWi z004j;xo1%P_xanL7XSbNC~?2w{PzX`003Z5?iKX8R{#J20MFzu_X_|30DyL9x?cbQ z0010s$-M#q007{54fhHF000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000D#;0{4d}6at<`00S#zC0~*kP1~i}n4QN0E8qk0SG@tOV000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000Ek^WpaB4YK^S&RIJkdR2%$|d zKn4H+000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000I=?J<^v6AKm!`kfCe<60S#zC0~*kP1~i}n4QN0E8qk0SG@teMs!~ZPN)!PCpr8+_Cw@WdgIscU9Gf!LlS(ClB=|AD4VGAPsU^(_ z>tF{XTIo<6edjgb#!dgb#!dgb#!d zgb#!dgb#!dgb&nwU|pQuM{hs=U-vhP9D`5Kv*pwH9Eo!d{|X-n9|#`^9|#`^9|#`^AGp(fpoXEAp7SaS;{Q#2&HM1D zrCht#Ps_Q-dB*!Sd?0)vd?0)vd?0)vd?0+_)9M4Yari;${5`4l>up-)b=%hLKmEE- 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 zEQyw6DN`8GJ<-3?Bmq7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;= zV1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~ z0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz z7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|Xg zfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_1{h#~0R|XgfB^;=V1NMz7+`<_ z1{h#~0S2~gp!wfTb!_|XcszC)V1NMz7+`<_1{h#~0R|Y@%s}59J|6G;7{_bI?Em#2 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 z z**^9a*Whv|jd6+aA)U)=zC;?7Mcn&%UOw4RKccsS`{oc?r z4=;~({j8(bTl1XU-}i`r-)o$UZ}J_qkLOO~i%os5a%{7i?XkzsZT*#F=~%bzSgcpB z$9CnhrtKkZ%D%?vqwLdmx8F$Ir~SE4{*F$+%Xlx+`jDKLeXM_bQ}5Fu=Plp4L;Bd~ zHtQVQnv;w-Ct3G=a@4tS$KM^wd3)P-*FNX!nU|0HJJ?$O#?8l9@=hw>m1%ny-+i^u zvHE?rv0NORmB-_;v|b+Xx?T1Yx4ZT+R=s@gvHH_bnTvmM?mzjdSjyvLY{&ks&))Ab z@5dP5)vEi5pLgiFavww6?@zn@e9X%+o^QFYye#|7`u)exEt9!fM_x3A4`5*sRx$OIQ zwaMpA)4Ah4Z>qE2{pEXR=yrS`E$SoIP3vX-c)aactk-3|>}$2#+cXZ#_jsGGY17xT zuKCE$&C|BW*=&?R@#z80T5sM;bf!9UI2+<}&Te^OpVE-tKvy@5lGEjTuP4 zMQr1BZTgzZ=k3t#@^cLBXGptz?(S`C@6)_5FBiWjyPt0redX)S%XE&szS`y3Xq-m z4;B5D$A@f}@4O*>#5QC17yBM}J&%8ymR-jwP3_mQzso->%yo?APv@BNo>)KqXU^`0 zd*L~8`kYwDGkmObbbVjNdbM-M0_7L=6PJ6*TrQ%w)Aq0x$HjnG1C0JshX-?(a5#?-F!?9Bgu{pf#r#P@x6zHi_4`o8N;ydU%TyNPp;ea>wj zD|NrNI2O$7n;GAAzvg^>`FdBgjB|%ot=Hxvt2);%_Pgr2dF+2%?oTZfY2O&v*Qf7V z-Btf@*K6lo?Y{ghiOa6flh|hU>-qiF|2et%+RDE3c3uuWXKruVJ{Qm9BFpuSe|Pa- zr}?nr9&CFCcJXh^HLw5KYh2JiF39(%>-a0zZ(7#+Np)-c_jg~{@%`%RjWL(gN4I}& z-E^Pw+`s9#{q_61zWI39zrV%v+v8_ht-o5^TD{u7THA5=#pif_9>;yQT>m(5?0dfL^CQ>SZ4Q6##sBCh-K%c*%6(e>eH!~YrN8yRYm9T+e{<+EcHHec zwXuBHeYNp@t!=Gd+*fNe&OYh5-IvwQ(_>bT{~hx2p9%3CP3x;Vcl=vj|N1)L zQE3d4&zHv|d3#%y`MNCEKVE9P=VxWkVII2rxz+Aw=|}$aUtd_7?qAuqsh<72n~&9h zcWuvT$2RxQ+?MgvHeAQ}^Ml3X^8C4npSzrQ)XrJfN!zu0wSCL9?b=`M9R2s5wfXZp zK5y;6dpGX9y_S(>_m%(sxITGb_T1amK0ja9vCQxBb)2iuIr4Q`u6LYaJiPjGb+>zL z4%h8IZOivH_H~rse{H+zoMqjndh6If_O-KLbH!t4aXr5)ELZoA-sITpY@NI7yrOHpIB$q;%Jo<;u6L~$+l;fG z{=EeMZo)YCviuwBeqYP)zqZ|Ujb+`Ydc*e*{~W{5d3-P9XIr+fb+%vjx?}sa9L?ea=4pm-7hQ-R6AV?o*yej=StT*B>^YUuM2O z<~>Y(HQm3l&(puZI6v=}iPQfUeV@P6eW@FtgVx7+zbzU^I6gnNTFpHfYwR2QX}k8W z^&L(6=D*wK>xk{sdhDa^SgcpBx3z0KR`z3i_WM|TKa9i18HdIDxUTVf zKIgj5*X2B2=RvXFqJCrD-CeKEWBbfGYwd^b+ot(_pL@_=w<$-sEG@K|fn%?tye_ocKCGXG6 zzQ^0@m&eNOe9qZr9$U75hqG;R-Qn};wsB{9tQ?2h&fl4(EXaTiY)1yl=l1y9`MtAv z8Q)jsdvKZU*l$`d`&x9otY2;~+rI2?f3}Uw`;E)<{o40=TkZ38o#$>-z4*UdFF#W{ z)^@FJZOgv)X**}!viq}P{++cy?}+g~TlqdNx66CC>f`h0%VWRz+3WN2*>Q6EXE?d- z@v?2aHrsZ#onyOtKYsni&z#9}?%Y%FkEQQ@XlvVatZ9GKxnupb9_z(paevc#tY7xk z)Mg*|@9N*F>u!3-G`+K8{iZt2`{TQGc756Rd-?t@w-@za*0(+T{dB({<_z8E4EbK| z)7-J^XK9;vk8!N)b?i&MoF&Wde}6-tal6%S8{d89HI>`t`=;CR)A3w628rXAv|b)B zx6AsrPw(w!?!`9Do67lKZM*3@W8J1YX@9KOv|hGvsu%aiHgUi8+21U-{eBGj9=o)O zb-J#{dsViH$MSkvXA|3-evUbRet*PwZr+!d@mN~V`}49qe!Sg0E?YEyD90PNoA2fN z?v1%j_qj~ISNk%b?fN<5Zv|c3Y)ifTomno<`PuyU;m3H^j`!}%^X6sW4fF5w{9ez? z^8KFo=Vd&e_gOB!ul?`QI>+c;<_Wn@TDD!=kb1F=_1&5m`@Z(;`-*?t<#!v8#r3jY z({^mLsr6MntMwV*Z*60Qcx>_dvg4iAv@geXX?w_cG4?a0{qD3e&ssdsiuY(+=E>W3 z9q}GnU!197&!ydYuJr$W@tHgHx!v{tEO)Ln=TDz6&;5rl2g;%6+!Ce{9?T zJKA>pc+Y*N{yANA&$iv7>vw$oOl;RZE#J{?pSP^L%(gLC*D+?_-xN;k=dp70vYZ#B z?b_U+YrR_A+P<#+mGx?U?f$-fnn!Qyv($6D``K9jbCrKXX?t_`r9LM=eP(q#-u2me zcIqwjE?%Z>+jzmT?HcPfe;-}N&$Eo!&$g_e`#a}mO4D_f_2PDH(`A3GQ?57l73;-1 zX+0iWX1(k;ZZFgCs@lfuYg=E{`N!zD?YcL0Y!%AS5|zhnH$Stt^WH2POO&5yQT?vR z{hm-8>n<8scWX2M?<6cchv+&d=~}Prd}i6}?s}f}*W1**d#v+ra!$ILbJw!{BP+O; z< ze=FtskngPQBW|bu;`Tb$S7ja7?i^k6GIWen_C2(p*lrbLz5VNR(Qga0$7knQwK+*` z&fK+Lt!-^zt-rqeYW?p1zGdg}v)}LT-;erlUO6jce7@Y*%yK33|M_Rn?BAw;=H7kI zp6+FQSB$w{zRPOc@qD%8_N{8XwJNK+-qdd#`0iyYkO73 zx<36Z8soH$k>atY_0)gUu|E6f$KCzLnfui~&N*uLAs)}`v-O()`vhI*V>5HDlmFg9 z-(}Zxskd9d3G~Uq7~gH}eD!|2&Cm1SOu3x>8``gDO25z6=h?lgx{KajjxRgDiDF+v z#P(yYH_a|Lo=bru%mLKhv$v$7=iPbF|gXb!*p<_O1Imw)K2t-Jhm@s{4C=-?jOBEsM2! zr~CTNb?5(XcDsGoXJuQxq3?y<=g{`rHNAhw($xQu{foxRWuImJc)UDjd-ynfZTAk= zX&3$`Tw~|wPkjC_T2J?NQJp@=$I|DV>Mr^Y^Z2n`*4mYI#@gPu`9S~AlYS@YJ_oAJ z&zAr94~ER4tMkv6e|KTXIabjo&5_e}uA=YQXXCx-HAip$zJJ8OKi}i;rm60-&#~IG z(!O=Sd&e-=HP^uuPviS**?SWET4sF=%bZ`^G|r9V z=W^T|kLC3)b#mP<%cgPtS=pcGho}EMw)?+#klPHK3pdVh8-4?bbK`ZcH(gKPd3fJz zZaVL5KlwXoUUvU&=&WQue$Fn>h_*WAGc4CFpHsDZwL13oc`q)j&$&|FJa&og^1gBz z>%_KYJ=>@Eb@06a*fnE3`}8sVy)n|ir?9MYtYEv(I5>~F`z~u^^4@)%`T14<-wTfC zs>k!v{QJY=x1bN8ls`=9(5^YxqRo{jx||7Mq|-{-lcZqs{g zSxx;ev)?#sxp7qW{sFLAt9Z8Wd7tH2qWrwIEKK08nde^x@Zr8Pbt)AZw z`pi$~e`i=`&fUFjxB374oP7Rz+w1hX7yDJW_P5bz-_XCsU;9V@^R#X5!*bC(VOfj% zUv#{D4|mKHXqB@Q*dyo3eZQAOd?cWdj z&aY?dcb)$?-{aZ-PUrUfH8*em{PUl)Evt);wf#-i+P2kqtnC>c)#|mW)$g-!Ti&rd zdmR9<&$eVPzRlNBj=SQumdE;TFQf0d&TjoUuc^&h;_)%p`^@R~uWr-4y=njaJa_-@ z$?0cYCTFz_+qa76TTOYMnzBxx?Y8$zJZ8Q4cLM-`^()`UXK1?|-!1y=W&NSsLk&IO z*=rZ)X?^Edv2EY=eV+U7(`Wm&7eCYcyRBuxzau~Pv*ld+@5n7-nd@2f{C7Oe-2njN z*x-z;r?KXc&$`qYbqULy_iVSV&HcvQw@-8Hb$*s*=JDxwp)`LlzsIIIeXQH}H>I;( zzptUsn*1zoYCrjH;pE*^*2(+N#1a5tTbz;K4Z3{Ja(tS$bGzEHF8hY+()Zb}6X%e% zxn4XT*HhiN-FJPRbL~~0tMBKI_2d1H`{R17W4+JcYF~Z&ZmOG~bC##i{F!?J0Kl=P z@zS2|uZ^GEK5MOh*L`hjePp#`_AQ!&#<}Y%)>k!`U*=ky?n$lBrn>ew{cR1^)Ze20 zZO@@Ie+&SC?Xai66O8e>7LE6tjt|w;pZ#f$TbmP?`-7| zxXgd&F80%B-7{+T83h0U8&Qr+_h>uLPr81t*rxCL5Pi>~zPWsvfg#F1hHh8?t}5SA zwcb8FYXAV?EZB#!`-q=m@ce0jq36^Fn9&)a8C80!uZ+n@FI z!3O-6Q2qWJ`l;64r@t2f0DwjIX%4jHXBjegA8N?C*4<{Pv9EL4?{(+e0{{SQizVmT z`_g{sJa?#}=gaMe%I*6s(|6pbey+PO*_eI~004lq#%~70=fnd|=hTI~zt7V5ck=&B z2LJ%Txbl2!&zF7X;9cvMYVG#@zIOV20002&rak+upf+z$``SKdtxa3~y*dT}001?6 z_ItrzejWe-09Yr#6^!%y0ssI2?31(ddjS9d0MOkw{aye7003;>klzXb004mfm3}J# z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z007R6pE!5!+*3cRxCb&I12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW z12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3 zG9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9Uvo zAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW z12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3 zG9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9Uvo zAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW z12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3 zG9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9Uvo zAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW z12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3 zG9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9Uvo zAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW z12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3 zG9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9Uvo zAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW z12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3 zG9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9Uvo zAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW z12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3 zG9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9Uvo zAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW z12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3 zG9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9Uvo zAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW z12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3 zG9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9Uvo zAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW z12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3 zG9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9Uvo zAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW z12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3 zG9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9Uvo zAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW z12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3 zG9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9Uvo zAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW z12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3 zG9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9Uvo zAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW z12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3 zG9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9UvoAOkWW12P~3G9Uvo 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 z+^Jih?bNN$b{ej93h7#t>+M})tG!DI`TzSie+K!e|6J{EA+>&1`IwT=K|YsR!$kO$ zZoK`JZfNDCuH4zA)?OC~8@r#c|%|ICJFcTs|T~S7E&E=w(f`9o=#2sAx7hb##Acj*8SFre}_d^zvRa z%SU%?J0_&lO=jDUiR_eNaq5`i%rPOIlP(_bO{(IWCq=%ge_b z*4s`rT$?(fyFPP5cVp&+*jP5)Y&)sD)ppWw>ZI7VoH;4P?2gWrle(_E-tJ1b8$tM|4dww**_CkZ0OI#H7Wi~d})^d zRQ%q|{;Bvz`1^VdzRcg_wYGFMy;|RUrPo69_g(3AW_{n~uHD0~{mY#jS91ng-y3p? zt1{~nS8UlO4t3cj8nzt~md>^#d!0HWT)TA79BEORIUw1xo z&DWd!*t%ZjWApj2-??+p8F1x|;{{E}IPOR_0((6!u-<4d~ zmpdO0J6{evm*jst>`Xi8EIjD!Jm{?5?_8E&Yd*WJkDJeS>*L+$fAef;o*B)vq)y&m#4lCPQd8d|Sy^DJ%teKr41 zt>1fd7tQ@Nx7OTbbHBTLZ@yNn>&JR*z82-jyU&8%=god+Tj-C(zKTB*2U`A?IMD33 z#G!`1B@R`5OI(pn_7?eQ?JM%pnyc2Fm5*}nT04q0kDF(7^9*m^MVfaIxqHZ6 zqbwiI_l;LFQ?1v{dQGj@+xmSp|IV6!x6KVS_tM-}bBnv%-QB%)Jy?&;*O&e=006+% zvTMJyW{mZ?dlog%s^%HiJlmRQUh^z$o{`P7bN7y8%~@;iHt#UI_ZDl8TXS7L?%q}8 zjw1IExnlqT0Koqp$X!P6Epjgb0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000fNLl8-vsg+&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk4 z01eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp z4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$ z&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk4 z01eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp z4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$ z&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk4 z01eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp z4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$ z&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk4 z01eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp z4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$ z&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk4 z01eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp z4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$ z&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk4 z01eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp z4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$ z&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk4 z01eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp z4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$ z&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk4 z01eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp z4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$ z&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk4 z01eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp z4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$ z&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk4 z01eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp z4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$ z&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk4 z01eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp z4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$ z&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk4 z01eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp z4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$ z&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk4 z01eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp z4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$ z&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk4 z01eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp z4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$ z&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk4 z01eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp4bT7$&;Sk401eOp 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

    qFRWQ+&eJF}Q0#@& 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� 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 zRlR@Jd)Zo}jrTeL!0!v&b2aO8gSuMJHPqFbKdh@Yhp4M{Z?mq}^A783%_Y{=x;NUd z*5@1RYRxP5t2Mh=SL-v9{c4|O?62)}jrH34%w@mY=N$WM`^;m1ZOuLQt2O&nUac9Z z@@maOl~-#fvS00Uk@dQAKC*sopO389_W8(qZJ&><*Vb%gzgn}A@fp|lEXY0&+4qjE z*VewWb?tMC;kZ*YyDLs{+H|cr#Z`68&|P(`WZyAqvDrF)tgJqMO!SpYhN_O24ObnP zaNlu>T8d27F3om(F->0D7WN$EU%bVcp?0{{U0 zZ{mPi%04?)J}bJ~^PcAqgc;p)Lc?IkJx7r z^{hla3$bPi0002^BfvJ-*yowb=Rejn9{Y10HM6K^HfsJ*&r6KGA^-pY0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000006jVLT!S44`_e}Xn+Q2fCgxQ255i= zXn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2 zfCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ z255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i= zXn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2 zfCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ z255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i= zXn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2 zfCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ z255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i= zXn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2 zfCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ z255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i= zXn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2 zfCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ z255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i= zXn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2 zfCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ z255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i= zXn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2 zfCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ z255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i= zXn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2 zfCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ z255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i= zXn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2 zfCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ z255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i= zXn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2 zfCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ z255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i= zXn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2 zfCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ z255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i= zXn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2 zfCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ z255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i= zXn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2 zfCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ z255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i= zXn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2 zfCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ z255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i= zXn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2 zfCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ255i=Xn+Q2fCgxQ258`aQ3I(qx!?WY z^!?-ih5G>w&;Sk4z#mHkzmGNlu)p(<<$K20$@`lIXn+Q2;E%C^!`9zFq<{X$_ z<9+$_*7}@km&?4bGlBYZ)_?a}ulMC^SAXXI{uyx}_`i1_;AhUy{CCm7{e7>xKmWe_ zdjGzbKX2zV?#i?b2e}I^JGZA8#)k8gDlYkGD&B zrDSxa-7vP&ZaB8mZWv!_mv~i2C{gl!vdXY8Rb|+ps_N)Z_jL>?XZtz^XZt#a=1LCF z_Zfy4#yduoi{l-UrIMq|;~m#4b1NM;D7RKRZd7isbljxeDH$!U7~Z_QQgW}V^A@F4 zcV52sA2bhK>7QN8tZ=2DPvyV6mM#waJ@;4lzl(bU{|(lb-$MiXc$=ig+ax#MCfaJ7 zL|5BncC}4%t8F4R?c%O!mrzZ+#A@0lG0-mQfp(c6XqTmdcG;S2m*Ql*>`k_dbE;k3 zQ|;2a-Y%i_c8RXH%h-CmB-Yy{x!x}6^>&#((jjw4I%NJxhb$cFki{b%vUH?FmXCBu z&U95)3s-x`EREOc>REOchREOdGR7cslsSd;0 zsSd;RREJ?|s>3ij)nS;J>M)E?b(9^O>M)E=b(D=xbr^=HI!dm0NXS%Q?9MIM~24uZs&~!-FJBIdZI+eqw;oTa;k=>fkkz!3} z#B{V+(>c0R^7@?`!yC413~$`7F}!K3rt_w)fzGJu&A9=?TXF-Px0>FT8!)^*H(>a% z<$=zJo5q$0Iv=q-Y52(HNyA4iPj)`q^f615osTtr+|p#{nCat});gbH`oyKR&L^2Z zd1*=P?SgPrI=2A`9vrM18RMYjGrJAn9(tzP}mj=3?w=~f8 zeA5>!4RpP5d7$e>rY~Ne>`E?AcHOZ&+4Yj;$*z~0zHE82>ra;_yI#J$*7b_zwXT#h zSMtu>n&Eh^rdv6&RdRBx#&BwD!0^KMfZ_D^fMI%j(lE0#X_(!aG@RL4Gkj%n&G1#l zHN#gIYkFS2ThsFzo3nd0HV1lUWw7TiyV_un^0nGvkH~WSz4J=5fckg8%X#3ib^coa zIr9K(?C)WXy)S>K*4HM{@iv(oZ+Q0$-Y!zxA@+bx8a|ha@j_NcuvD%w6b^ zg^L}sbg@Hn7dvFTwo`U$J7u@FQ{-r;Xv3Z28txSLaHq5kcS`GUr-Y_EB|P0J(dkZ! zO?S$ea-&n?8=aCcO>T5bN_n))FnzSE?CjC5OAdF*)l3g}U1n;ytK@W-B&WMVrsosW zhJA_YuDx@*8PHr+L-j81nADZ|rU!=~ZTbV+@>Yed;P-4#)`Y;=t(-5Xuk zTe>#7ZcsWmx^7fz8(lYP8(mQ;d9!SE-Mn|P>lV{ncQ1C`rYv6Uy500)JGI>pS8msK z$4nowRoneY(?{iMyC1DwuI+w|>0_5_yB}vdwpeTU_{E{_CoBwgKhg9_^F!TFo*(Ld zigIqK`>At7-SN4h?x)R`eERHA_cLaPx}TXI>V8)Gg5k4M7rLL5y3n0SUFd#pvgGrU z7rLLHywLrE#D(q`n!YH0q5H-0i`~ii#qK-e7rS3FcCq`VrY{@2*!`!mi`_4eUF?2E z>|%Gy^v+mqk8(U(aw1x5I2o-qoC?<(UI-5vPKSpK)8V0>OsHfwG-Nmv8tRz|UFdnG zQoqpiD$`f%7YtvcU+8&_ez9j(zu0q^>1*|ihOg5v8opky)s=71YxOs_mV8rdt>Ij2 zt>K$nYxTF7zO}X1@NKO_`rA$4(K=-K&ekD)-t=9qL;AZ--_tszzqj>*;rm)I=$RTG=(V0D%g~TV`Pl>fTzKd*MWo}(Udw!NrJ3M&H4j|tnt#~uyT4`u_4oXd ztU3QzzfRY9n}o*OBtG6Iv*T^DG~OmV>hthKo9L@;GG=}zURrIF;%b{{Yi-8oV%_>& zT+=S;ns%A5DSa;99%z@{fp&2YwoA)kdwD%hO|{GXRJ$x&Yx2c*ab9dU*5uaO4hhwE zNVK*?#)dj1G1MXHA#+W>&>>3~I%MlYhwNPJkll+NqHT1D>u9I69_^IS(N2jDcS?M? zQ<>obHt6jZWFx=#-s}PT4!!C8BkSrge!k+$FAXm$<`S(vt3y)^wNX z=`IPSyCj_Jl4!0=VoI%B#7y z(>*t(N=8%Zo|~1)bk8lxbkD8IM7rm;M7rm8Wjx*Uuz0%X;mWaePi!pL^9W@u*Yn6& zuIEw8Xs+kc(Ol1Cl;K>@V@)3y%JqzyK3>oDJi+vdt+}2jwdQ)B+^XqMZqf9ov}pQM zTQoi1qUld_Yx>jOn*I#8ra#kF@>woTf3{20pX1c@gj3U>>(un;X`23g(-&x({zB38 z7m237STsGkcT~S)@2LKg-J|+TmBnHGWjn+ApY9CnFW(;4U$H%`r?yJonHx47UmiA` zSQ^$Rm5amrl<9?qVZ-V9VZ-#?u%1!Q4(r+3X+4{s)@Mv#nVQyLrA$uiuU00e_17rl z)B0?DTEAru~pT1vjR<*4UiLl2u;;_BVb4cg!=8^iOMc8b>{)aUd+ss)xO3R^3FolqlZMltPifPh zPixbj&uG)0CDYGp)1J?1)1J?penFe|d{H($e8>iKTCrd^`udNx+mE^+m|x29c^HSNY{Otrqv z4z$ah`TSRX=2Xvsmj~J)y^lyA;jOqB7Vn+F)rNben5o>r}hwQ>8UAI@K;Q z^RsGVs$G&(?UGiXTg`QHVX9r0%=L0>y?p?8SD`%=J^Pp)R$KUTl|^ zi|xi*s+;R+*j!U%YF(}Eka%r}Bx*Y(In*I3bB&!<>+Dd6%nx zl*QprS)T5c+;pdGPj^ajx>NQxIz@7wqUAcpnd=mn)+KJOOIoxpY1O(!4|ho@+$G^~ zm&DRtGM4U=c)Cjxxh_fOx+InBl60<1=Cp2^*Scjv>z2iEw=9LbWjWm~xpcQ|rMqQ2 z*DX7_ZYk!vWmoHwJ*`Kiu1Bu@)2Ws{gKL8UVl_9uRmHD&Fhbe z=Jm&h^ZMh$d3`LL*B>7$`2;<$KT*%?Ptx=HlUwupQ(E)-Q(H>L-Ff|K?!5kVcV2&n zE3ZG(mDiu;%-Uo>Wfr+^JmFJmaPlOPb;2qUM=040|pt zl$@Rqd(x(vxv*h&F6_z9hCMU0Vb3d->9FTj%2e3%>QvbC8f7xy+`d=k@Wl=MC|+=Z#|}-!zu?%*9H+IhOXkC6@NQHCpm*(X{97;hg6krtb{p zJoBNP=UqxY=XtlD^SnpTdETpR&3WF}n)AHBHRt(2OUZ?noagQq&HF*O=KYXc^M2T^ zc|YRTydQOI-j69=ns?EqdGB#)-jBO9?fW^B+U~UB`tG!MeRsoq(R8D@ zVVEm!80L!`hJ~FC!_A$eKIK;|w~zY1YWlV9qlRDK9`=2GYuLAC`i-q&-#1OawKZ(` z?X79U@8qTpznhyj{9bO_x1HNC{C;l3@CUgK!yo20d_T$^^(%jD`jgyI!=L7k`gd}} zhCj;<8~!{u?Ei)7FLTp|zsgNt?$)%w(qC^)n{N0;8|o6LscWdKtb3@-uw|&LWNnwU z9-v;^CHlqAeTFV}Uh+bxD8mOBz0fJqp-aYwIxllO9(Ms6G!`x{r1mwjAv=RG$+q)q15=pBt5G?XuP{ zwT8t^)mmm5KiX-i*0zNCIWslfX{gpYYpql3-JGdf_mm6f`lr^wCDY~MPRS{!J7vpM zt&2ORYJJ=_-J9+dNncV+Us^NOx@oMPYW>W0irZ#OuG3JhrN(-y)>N%aLZ)G@%P<=5 zGK{HpHryp+;Vy}rCc<5kNOwsx-6bj0bh=Asm1^zHb;*3LOBPHQwQgB5UDmoKr*+F# zxa4-YTXw?TQcQQtZn|6c(%mANZqf4H;xu*TyTx7CBQ143(puLedR>o%M|vbW(j&2v z9vRE@NIcUciA;|q^F5Nv_eeV5BeQk7%+={KU#H7Loi2-Yx-8Y{vOJ); zk8H_$9@UcdJh~<8c}z>z^H_J*^Eh|bGiLgDch>U+ch>Vnch>VHSJv}nSJv|s!-D6j zu7W4-EO?&gEO?&oEO?%w)C!(wY6Z`;w1Vf^TEX)iDR>f6@H|%vp65%!^Mbv+=Y@ND z&x>~Ro)_=tJ;`F;b4M}ndC5-R^V03S=VjY@&!2APJulzNdtQ;N^QLlj-aD5|jxW`D z#~16o6Uv1;@1%0R&O4=?tMgt^&enOS({_=xva@e%K< z$40!bF`bQ#c<+jhcwZYW`MU6k_w~xqi1!Vl5$_xI5$~Ints~yK){OVfEgA1ylA(e0e~W7|3J;+9hL-ILRNAJ1vNPvkV;Czmzf zr{~Hi zoeTR`XT!cV!?bUGHtoBZF1e9T8|Kn!UoMsQT|GDWeqB;LBm0>OLtFRXMwdtRSwLsA@9QccHIPjOIe-#b~ z{@V0!!s)=@n*Lol9oRMf`*1Gs52pVZ&ISI-^q<38@L$4O@Lx^$LR#=Qp>Xgw;e-9R zaQINARnrZ1O~1^LrXOfn(@W-hWS{9Cxy*2nT&C6|mQk(elDTd<&~&%hjitMhfIAL^{ueW2>I-a)F*f0e4wgO#fFsZwjbvR~EO zWmm0ZcDK~JW@%gB)EZ~0);i0gTK8=3hP(H<7w#^r)5x)-DN}hZo{xzQ|o#pY8tESF&wMwF^rG&7$!z~43i^0k}^$adJJbXJu;W+ zk$KaFe2?K`zDJf!m+N%N)# z=lW#Ub3-!gxiO_Icy3A;JkfN)b91`jxkWi!@Z37<@ZL7-@ZPSRb9f&%=kPv!&f$$2 zM!b)hi+CS77x6x7F5-RkT*UjBxrq01a}n>@T*UkMxrp}(a}n&1Jn$p38cl zGMDu}bvEmb&t|<(o6UNkKAZJEV>au3=4{sctaR4<>~z-qoOITkNN2szO=Z2$OBKA& zPZhi`NEN&hK#|qv% z#|qwYWvt+xh!wn(%4oqm6)ku#L>;~hVTW%z?C_1$mM!`HbYzSlb=zBf1{zBf7}zBg$R-<;{2wTSO667juNBEGjt#P{~S z5#KwMyCc4L?q+=R#fW`@7v1w-k;0(K9I}!7M3%_kDae@B74T-uKCL-uJ0=-uLNL z-uIbQoqs7==l@)?&j0yDo&O7oI{z2rb^bq#*ZIFRR_9+<#_IfERz~amE71|d)$oXa zO&J>TuPgNt|3zi%h<`)bGUCrE-5G!0o$(h;H(eS3S4_X^%=o`%`gLdC|8*_z-_r8_ zZzv`2|EA>q-!lF7Ue5m=LoM*#T`llE)9qa?@cm-R9~8B~50yLNz>jvqfgdZk!-1b{ zhXX$~-PsNYex}??2Y$Yl4*bIOms{z;uS|cP%LV@2w3y2U{=)PxbGg7@Ei1L)UoUIH zzcKyWWi9x3%UW=ENf{3Q{Zcsi52pXP6b}B=Qabq0izWYMF&+HZ#dL7bFc(VW{=~=c3m8UyEArf1AoZTCdy_?tOsr?vhn^hkL8;PWM*ZthqbgTXT1= z_lV8fyS0$rqjzhEdyf{fdwwkMF^uOuAybLxOD6K3k{OR!CNrLWCPq95Tj!B0n%5(YHJKjKugTdF{gQRM@wv->RiDAGruvL_CDrG*!&IN^4pV*JJ4m$-RjSsd zO09LuepPE$rD_eU)LPT5t6JOa?y0rTra1H~syXz_HP=OJeY9U)5&b~j5&be-BKkgC zBf7L^_p4|1vZ1WL&u~^R8!hN%V+FnJSV7-s+~F}yI6P&O4o}%s#1m4cBcAih*@&l4 zIT!Kt&t*OR^I6Y;av|#(R4!&cLyHB^&{DxOyj1XnmrIW19NtLI;T_F6yw`6zyf-Mf z9o`$aBi@^KBHrju#C!8j#CuCI;=Q$)_1?Cd_1U)Yd>U*j->WgcmzNcxU zzGrBozGrHqzGrEpzGrJQzJxa8d#=p*o+mTD=gW-m1v2A%k<9pByqEPQ_p-h__Oia0 z>}7o~-Oc*`bT{jJ`EJ(tirs=QRV;aDvEaLNr{EjkDflLo+XdgG>C{%icfoWzSMa5C z1z%>lWOljWn^`LOUTNs?ziQFpf3Ae!|rM6>?8qgnq4!&(1_!dd@^!&(1FLRtSuLs|dFLRtT! zp7r0OXZ;`73;s{E7W|)VE%-mxTJV3mrQrWeOToX?Qt*G)UGRU-UGRV2UGRUwRq+3r z%MtjJ%Mn<1mi)5QVYs3>0;{HL;s~r8MgkX=dn193y^%m}cO;N2js)_>kw9Um;3ys zUGG1H>U#fCsn_-XlU~>R&w5?&zvv^q|7yC|I@0@_){)+SGyV70Oz(fRWP1OzCDZ#~ zrvKfN@0I_T@0EwvY&{m{Blb#q;)#^#acI>XxL5yPX+BZgY@NZGpPkx<>S zk&xq9#<2ca#_)m1GG!lhEE9Urv3%&krVlxmH*_A$8y-8B4;?#Jcm7`4TzCHZaMq_B zwTxzck!aR863zOCqgmfjG~yeKMtlR&h_BzYFX}KnA9a)sMGM}`&3b#IS+87X#488t z@XDbUJaVthdgMME@kphyi05~&!y{wArPexgZ?5(=>1wa-Yu1%sryQQEns#`u=&ZwY zsB;d_ej^@H&L84J#B-U85zl2VMLZ?59#Jk=n9F*~Ze>0D+%9-RrssDGW&3stp1xwi z({JeT_U}5p1Ezy}4#Od-HyoBx@31!N4J)0a-Vvp1)EjZlcq8r^@2Gpmd%dz{#(RUZ zb<=yJzUjS5-}FZHP4CU2P46wraJ}!=aJ}!gaJ}#LXua=Y(R$y*W23%UY}EIN*r@N3 zW23%Djg9&q9iQ<%CO+ePY<$M|xWtTaEHUGId}7o0gv6%riOEghlaiahCnq<3Pf2e2 zo|>%p$CLH`r={xsPfykRpOLEfKhyMCsZsxPQltJvYSjPS)TsaY$x;6clB50?B}e@) zPLBGM$x;7Hk~997CT9FEOU(FRo|y5!A~EAn#b^9?nvTb3{1am(C&y;|Q!(YH|3Ylj zKOHTZj&Axh;gZ?Vrr}Iz)Bj4nAy?q-t@oLz3G3Qt3L30 zSAF0OuKK_moh9F-)d%LZ`oNo|KJXT)54?5H5qO*F+jkv-ckDU>?<_h3^F>GCT|1G$ zyOrCKz3t?(febkqxUCD&C&Z)&C$D~IeLGlIeLGtMS6dslt}L{CDQvV ziS+(jBE5euk>287ruQ$DyP4j<+|Bg<)o!NuuZx-9zbR&V|F)R#{kxr#yW9ERzu(UH z{=;^@_aC?Nz5ldT7y4&qt}gU1xw_E5F4u+jmg_>lS*{EH+frTV-%bBxsV?-NOLd|D zTC5BG_u@!M?kV|zdqzSJxVvQ4-6Mw8caMas-!&4dDVqr$QNB47sx>|O=8U0sSH`gJ zu6$WXCU01u$s0Z}lMg*GQ+NJBrVq~4oqzD1b>|;q>b$e=yz|bH^T$k&-#KD<;?5Dn zhC4Hcjdy0wH{Ovsf6}z+j?DR{JM!mUrp?gFJmlUEk?Duk7u`Lg4md zcAvKuvw>TS*}yHuNFZ8_1a8`m1a35R1a2_Be%BGWzF6>&nnsERf25eLFyfEc9NBSH zSn!RQhIa}!v%c_UMts9p)ZrVdaB#;_VZl3Kvwx?s&%T|4&8+wQl`Lkx%FuyEyrFw( zZ!zMPLv?s%_qTA*;l0;Nz4w~c>b=*bv)+4EUG?5Wb=P|jwWZ!$a?~r8wvKx3hFV9x zA^no)_0f`{QLnPkaK_sgp7HkE9Ei@89gNKw4#j3lj%|8}O~YfG-f(==J7OA1Yt_@!hsi^7h3U z-@_I+eGgyS^u?AoeUDh$^gVKU)Ay+5djF$y_5R1?>iv(+)%zc}HR>PR8udSZYt;XQ z?NR@ewnzO>-kI?~WoO3!)SVfByg1{3T5-nz^x~%f8O2TiGj})r&)VJeKYMr6|D4_W zKw`H(@Z8<{!1H$N1JB>B54>=-(ZC(Mqk)&~js{+~I~sWT?r7i@ zyQ6{B?r7l7;!I%NbfP#DnB18OOqpKTo(W8E&jixSt(ib(Ycr7D+6>I(O1?6;8Fx1t|)Cb?0s1MG^>x1u#*9YG{Rv&!N*l6&*vC-iBVxz(L zM@NGnh>ivq!lS{v!=u3uhDL)Q3XKLotd9miqK^hY+BzEiSnFtTu|+u(yvIEg{J482 z_zBlc@RP2Y;HOjw$JfA{q((Wi%4{t8gUr*WpO$Z^Dt#--aWhzY9e|yP-(v??aK$KZGKoe+)%J|D45})@+To*b2kOyQ9oe#(w9(zF6@c09==Z`<2aQ=kyH~I4orj7rf7Ws~Et3LewFEefH zoMV}(Fcqf4l#-|zkX?jO&``}KIwY_lCQQ-vSu@Xl1(=1o=E z4x3`}!yQLVv9=?pSp3MTZv3dJZv1G6Z>rlif7dqKF}t?m$2yMNwGBURR~2!*#^!$9ud3nC<+&qt-ljqU1^E`T1-d(mV@3uwrZuHF2 zTxh8+8Cp7Pm=Epd4lNy=m1|s5mTX)ym~32}oy9jU-h;cbIWt$Tp*fRlXevuKG|lQy zHbiWEL!_T?kR9QE-r;VL9AdxQCiLePS@>D$+#=4wrjs_1PJR!55lHiknE%MVh?#>< zyLU^u7wwi?NdE^^DmO=RAvFh?O8!SgD!E%axo|E#&HqPOn*UyCn*U+_{KEfFGW^2- zu`It3n*-1Cdmys>LSk??a*!{hhWS0v!+gmozmTyd7c!&Cg&@Bhn@=ueCrY@9WJw{p zkaq}$oJ}m|Y*I023s2^3@?>tIJn3E(nRYK~ax}Xj+hP~AXt7IJw8SMWT572j7M4{EsB2Q^&c z6B;h{3k@;9&~TYwXt>-jG+g0V8m{y!4Oaz}hIl|}XbUI}*97#26#>2B+JN40T|jTR zA)q(32cX7|0MvM60BXD`05z@*K#i*cP~*)3p|R7^6%cHz1484PfY7)$AT+KED2?kK z8v;sW!ml)T`<2EXztWg=C_bf8_34e8PjBq?>5VCiS8wd|>W#O0^~Q}}y>XMpqc`5> z(Hn2~=#6)H^u~0h1qyAhghF>#LZQ1{Q0Q*QJuWD8-?Tf_KkW`}nRJKlpLB;FD7r%r z7Tlp<6x^YQCfuQiC-_h%&xf|=`OqVyeCW|pKJ?fyANu7WA9{R{4?U6PLjzep^kjw) zJ(b}@zv@qhe%+r8J)KU5o=GJ`gQ;X_D3J{PCXoz1+nEggwlf*}U3)V0`}SmLIBv;> zMq;_pbC#A|==qjh=!Ix5^rA)1gO}`r* z_m$+mZgjhsN4I-;^c4?}zFNtnuUT9?`nrop-g$THl6{%N=e{qtZCS{&>_cMXoA zA7{tVPqJg^rXCI;*jNcUEKHbXH@o4$fB5!P)j|<7|7kakhP0IorOi z9JX(354PX(9&CR{jP5#d>gWeGfj*aaeti?eO{@{P6lQ{D}H7{K&eJ zqw2=+qaD7wYGS_Qn7V4>SQ|$i=QzHOBTjIfSl2`N9SiDuh?8t%#L0DI#3_zb>&A#v z7gUp{EvP0>cLWwxlXVL?+ZhWu@{GEFhh0wDdXQ7a78LEdY(V!kWGpL7_1{K?qpb}ba6GDrFLZ~??gqngvC=!Hh zau6yD2ld9XfZjMu3MfB7Xq4s<1Hv3oqxfxpsIf$E5dC_C@I83H@*i=2We%Z%bFhBl zJAhyK0Z;?;J!n7le?ebF|GyT{7cp~yfW8MdpqFt0y^Ig&WkNtN69allP+ug?5f18$ z!a=CPB0C~M$kr5u8k$h3q1mw*g=|Yu$hH)P8kV9$!c-f&5a-f(FP)EH}l8e3bS#>-lu#w%Kc#w%k& z<5e-C@#>h+*cMY7uZby*D`HCHbup#!`nb|~LtJlckL!&$#`VUV;(FuCxZb!b4ux)s zL!nMbR~!nhjtjOmaly7WE`-)O*2k6521g>Ugu3HOs3)$3k})Nu#FUU4(?eQJ5B0|M zP^v`_^|k1sTOAu)^w6fL9=a{6hi;GRp*x~_C@n+iW*I{7ble3X^lkv5_W%gJ7lqLK zPzdcuA#{r+2%+}}A@qSDggzLA&|d@~^q~NRW&#kp)eoVM_#yOBKZHK!gV104AoK|z zgl4@EI^c!SC%q8*lm|k8<$=(rJp%fSM?eQF1$3xVKz~yypwGGl^mi@+{k=;-|1iy? z!+K5v=e(HHV1FOKr)OQSsc@~|a|jt(Z#ZG%a4ESp4gnG(G}i5mS$ z)J!MQaZ4(R=2J;@dm@RxV(CnxuXg6p*V=RF>+L!8jd;nMu^c)P%b`13a_C!@Xbycl znnT}_bLhKr4t)=}G0Xd?8!Mo0Y-iAo{W0jqJ_xw64+C!OBflH_li!W~+3&`RJ~y_@ z=f*zv^4KR{9{be8V}J4R*k3Do?6XQ9o2=xqDHo4@?&7h(O>@}ar#bA4Ne=sRlEc25 z?7^msJ=jdK2m42%2m89vgZ*=&2m9AV5BBeg9_*WZ59ZolQn76e+sm={wlQq)kuhu^ z$G#(D*nUHnYJ7joKs8=DP>okPs<&3#+*_-0_f`&vws1J?K(=r=vYEqcHgmXVbC0dI zug7*kUk`quk>zoUmZrmf`IwjSa*$MJ1r#0icQTgM20>lm@XR!yGNT1}qpIHk3kJhhc0 zPjj5!%8`Lqj;w3#v7OP{L;lF|t{fHcD~ARAiakL16^_dXA=_nxI`(a?S*0wNRcx1L73`9% zfL-jkC@WwWWd!WPjDTH`fw1Kn2y4ke*!dXSsAWl7_>UH+g_0D6{x{7j$f1Xt9Ze~Hw}cY1M1GJElD{RK5WWQp zNk2eLK;NP_3g5za>i+{uBme)GgwptZgoNS{8ij<=D9#}zgtBl#D3cRHStKDeMiPpx zDWQ}#CluS_gwnV;Rk9?dlr2puwlhlxJE1*hNK-H{(YFPp8%?M~JBcOd5 z0lhUNpc^v+x~X44Z|fJ(+xr#tj(!DArxkQ_T0!qjE9hNm1-(0^p!cK{^j^n(2?gy> zDCm}ig5KY$pbvB^=!2aK`io8leW+bQA8uFBOuK?^jVtIQaRq%euAq;_6!e!d1${iG zpxG7$9ca~AqQ{`Z(0|Dwf>f7#;3zlyr?>8Kl@k=^*$vK#*= zaO3|1Zv5Y<8~+C7aaVmwMICS3YXNWDdp?iv zt8%#8QjxL*({+fTQ0)X%nZRB$Ut)o<;w{d{W=wQy?>wP@=Y)!=B{I!1-Ij#22AYI+v7rJBaJ za5O##v8AVs+%i_Ob&M{lX2`h)s+kgwAqO~ya&)w-^o{Y7o8n^G%D70cjKlOzj+JqP zS{a+AQY&LBbyJH!{2#CZr{@vRAur2O~iK{I>1HZ~=;8!}X@EQ2!J{7;rr{b+%6_0sU{8F!q zU*Z*Q7kfqgBCm*F=oRq`JTSi81LG}oobQ40^F0P;t28jndEatwrCQ=rvF{SGb6p~K zj%8Z-0T6bM&8D$~)kCUtb#4~S0cWoH(3^vt4CwzQ~}Eh#E{SX@-TML?V9 zXetP0k%I7l0YW4H4>c8_vgQI*wzvS5Eh#`{OACLg;yp^NWzJr3j(R9TyZK+l564y~uHK5kfC z%1Hse%5n9ifW{{Uv~5~IuW?*EEuhy;3+VOJ0@^;UpdHf+degLmu5_vBDwm4h;!@F0 zmx^{dR=ZSmjY~z>x(wSomw~Q#Y;YN9!eyY{jvkkRCT%dLxL{0m!IOL8 zZJ7|T`zHkKfe8V7FfU-g$P3s*c>#NPRKT{53fLo~0`};zfIT)WV80v|u*U}l?1@1E z%MJ?IKvuw>%nI03SpoZ1M!1_H0_gew$XX-=`Jq4=Dv3PAS-k zC81!?B^2y=OQ(Xp(5YZAwwJuru3#_66>QX|W7}dnHs;8+=$LMa>X;GLG1DUJ*to1? zd0EG{108z>=-8_O!e2!p{52H9Uq>PQjUa@-8HDhOAcXG-Lik$&2!A^O;qL?>{9V6* zzvmb5_x%E1@Co=%pMd|-;uY`@yaN8ASHM5=3izKq0{&-@f)_mszN=EfKdw~pPbwAs zQQPU2J3IsEg<9R9ar4*#N&rIa-f8=xc z*LgSbuTeMg?@>4L&9IwrjkpQdkejF&aua(ElXRc`u6Rc`vnj-OQV z^iQjJ`e#)<9jqv+ui)vQS0w3$6-jzgMUrl)NYafJIXYC4qtP-qgE{aDH-lI34B;Rv zk_)dm)(#t$Q$|%@_NU0{i^NSewDm7t&%I!B6&?(B-_#=8Bf9F z)sCxDFnOiTAg)Ll#N`QtxXh*!t(MN+Vx3}1yGU3rwZX)tv*IvOV&Ip~aY@XuT^uv; zi(~2@E@@G17q^II7qy7C3tL3|!l;N}5QV>Ec@&<*z*^*z^JSy#JlQBaS2nP7WEDFH zl$;IJ?{yYXZOedYivkggq9tdd;{Ongor%KO(*Gm~WB)q_y3}!I&?t)rjk0AyqwK7p zVLLl$l${eaZ081zvh#w5?fjro))F*q%Y#PQ1wq4hVbHK$6g1F_9hU?R^ioGGXxLhV z26|c0KreS(5j4;%9ajYn^y;92#)B{xM`5fDg|TZ;7+c}E7KO3vP#C)&g|QnP?EuC) z0F2!TVC*IUW2*p+-3&ym)6oS)Y&8(EHIB8ih^>=FY`rXE8*D0;kX5W(RwFZ3G6k$#EMnu-k!w-GLfd8a1%ZsDa&y8rWSy1G_tD zVD|lO900255V{Xei(ny591H{VfzSRfgk9cAHQ7?=?=7sUc zJuv=+2gb7=7$2yF@h2-`{3#cV|H=j9zjnd+)6)<>I1S-L(-8ifNdbR$Qow&(6!6~{ z1^f?10Us_1_=sgfz@M8C@aHE4{DpkUi+KTmX;i>pwhRmS=&*oq8&>eK!IE57!S$?y z8P&=#9x6xd<#PR3Sb`72EiK<-y1ko#8&WTmA- zAgd|_vf8GQ?wKSBS*DUCyeml}mYqqmW@nD{>?o<-o+A&~o+A(3o+A(1=B6wMZ*xW=@a_g^of0L+TYF73mhkP^YqDGJbg-6l0MaOT33=jy(>otEFC$zt|LdE z(cxx(b6O( zye-_y+vHZBm0Oc+#L_lbj%~7Z%+Zx&OWa)3tZp~Ap+)*02)DtpK8kSbqb56RL)2t9 zL^XE3T(VA<*tHfQv1@DyyV`=zGQn!p1YN;d8tAeFN;(75p8OK%^do!nA)wP|GP7>+ zY0NENi)6dmD={~Fk=;BdZCPd0=#`F}JQ96lWl2XRLbp3^s5B|d^)8dT&ZXI|b!oO0 zE@`)Eky}p3mrDAO{`clDFeGcWned?46NPJkutCwQwDZZ%D`4SR;3K==9Gcm zk~XkTM_1agtxm)Enly~BO~d#)$NDskZ%D&$1gt9UxC;+s<{ey8KEl#1V-Qt^8dDt=!=#rqQm zzNOQ^@9#A52RjY?7o7(FP`iOY+-~5Rb_0JTZs3o`4g9f~f&VgQ;7`O1JlkU611$#r zWQ&166*cf*M-BYxsDVEt!^EHr6Tbm4@hpIe-vXHU9SRe_M`7X*L6{g0!o-Lr029vz zVB&c{OuS(6!NiL`n0Uzt6EAyVV$|XhiESQ{81slku2Lj)i%TR7mq?h?0x>=<5P8d_ zKy05Bh*ydV@oG^aUMrNmUQmcPCKTe$35A%*E5r`RTcZl`_NYRF?ew2a8KV=}Y*bkAr`XTb;eu(@e4UwOw1@bRxf&6Pq zAU{h9Rm&I-RPm)2Ra%lpMGKq7PaC(Fe~jIb=RWA39&4z4J=u%@gRu<_YxS z^A!4sc?x}GtwJAFtI$W+>Na1kPS3B^>0_!O=GZETIj#y~j<*TS2~`4fVwJ%7D+Fdi zg}|Itp)e;qPN`6sQ!8}lw3!@p`b>@q*xaCQ$_>t#a)TdDxxtU8+~6luZt&A7H~85u z-WJ@&gZf=O`1vj#EZoI|MZ0*=uq$b6+?fQSok@T?u${Rwd}q!^?92gThnpoG)DE|e z-r;8H9X!i8zz*KV?%-K=N0Q|n{LZ9J*qO75J99Q^r<=2c9r8{$C-3CB$gYy6T|C#c zE6FuG7Vk=OOQv$RrBgZEnNx1w5}heoHp7=x2z-gcFPl}R@RqY|I)9c!9hC%iSQ3-xM_I8-pg@VF_rq8v`1BQ$X6y zFVQ#p5nG2Jq1*i?wFjR`b@((}yHB&-;FGB9eG+w@Pol21coAyF9!zqD*CemmgGRP_ zG&1hd$g3S!c{K7Wk7T>jBav5lB=T~PL|*1W$kxj5V-m4BF0C|)ODav`;!2aa$Ys&~ z3yHY!e`*>g{x>d|Ht@1Z1HW*NizW@*#gj(aC6k8j(n$lqbW*j&imI)(sFqz;RBe|R zRofLs)pli3wOv(I%dRe}ws=v++Z@*vReXix+M9rzj&()Dw!UcK8;S;=C>nTo(ZG9( z2A;IRgi?eFwFnbh5hi+zFp(<4M4#i#m3Ux6B_7PH#6x+NcsQ>TnNgK^WK<;{ z9aV|PhE?M6VU>7dSS7N9D)Ho?N<5V{h+kz5;@4S&cqU^IgBgPu>NkjI`wil^{RZ*7 zv_bqnZ4kq$l97}_JeMeWzSAIHu(TV*i|sIJc_|K)FUMhWGzOE~VlX+@Qj&|pq#lJy zLxxFHhRJamCi6hFZAV4&6;vc&4T|JzL6LktD3WgkMDopmNKW`ID!Id_l5hD`@@=n5 zzT;KNcfBh4o~PvfN|h{Bs^m_WLH^NYkRP}V^22GJ{AgMy|1_zS#YvsqH3?B47a{7C zB1C;!gs8t1AnLOML`_Zz)YODPeLf*jf6EKh7kPpDGA~eHjVjdis6x#QE7aG+3iZ!n zh5FZ^Lj8MCr@k4~Dc68bRXFzAs#AM!g=ot@TT1rb0@3?zhUon_3%1HWfv$2?cPq5J zTcIIKmqNo`3XOE>bWN8|dpb&LJ9PShHi$W}4Pp+mv_j0mtpamMtH2!EDlp#VCG(am z%wfwE=I~_-bA(N2j*RHcQ4yUvI-)ba2n6OwAaD!|fn!++9LGZ7coqUDun;(r6@Z@= zzyekPCt(6O*>MUcfKxFAoQ5gjbW8z(dIi+gE8vWJ1^lR90Y9$S!B6US@KeXn>U0pS z(?NY5#QwYvVi(py?4mk|ZK#9T#yW@%)d?)>!0LoDyiTzZb&8E#ps?fuouwS~0^PV1B<2s*KcD+w4yTPZ~+I&DQPJY&~9$ zNP0Cw@tQW(YZ98*BznCjk@A{EpVuUA^_s*+uSsn3n#65hguLC0kau_yGVMjk&5k?0 z2zi$mA@BAgd>dmqz}|rIAm&H1ZjjMh>|&@;B2e`Ruex{%%?&e?O^` zf0$Is;i5{86b*8uV35xh4D$JcLB23i@?zc~U$TrEdnrQiFT3N(JoSN#YO7v zxJbPd7pZq+D)nAWrQUB*sX~iN?To6_AEPSufvi#=$}05{P^muwgZeXCQbY~vBRb<5(V5y22plj3fdd@}4ME`G0SFv20D(gX1mN8&fO(F?wg}+x zEdn@VivW(?B7mbdE8u8{uTKH<`xJ0Yp8}5UQ^0ZEIyk;t2Pbsv;KXhn_`7wmpj!tg zbwTXOT@ZUp7sQ_01+k}fLG0;W0vqTO*t#x(J)=utf7BtcKkg9NpL8hfPdgO$XB`R~ z>`>VH4u$=Bhr%vw)7eFBI@{2uvyE*!8*0;8v<>1cm;-NvIJ`~Z2nX3FaAcdpQ4YFI zu`zAB4YcVtwhiJfoP%!@Y(ksBi#COq9N{*F54Y*O?1;2MLX)Gp4HBB$1YvQ9AS|&d z!cxbX9l8+hDp}SAiDx;^?h?dvx=YUOR&3{WE8=n39L#XU{zvID-#H~DPb}*J4t0UE5;XR1qSAkXP%9kQMv=1XWQ4j-Hp%N9 zH^}B5+GW$$A)Dllj+3~E%6OgDO zzefGWuTj7CYt--j8ubUCMh*KkYQ*uJPotjqmb~EAs29B&^^&LLWsgaXS}ILyTct^j zRhm@J;xZ}SWm1OAq)f;7v_a)34Ql%&Outfu=~s&|{aOL0UoXJ)8xt`7<^)VnGuakx{wv=omrLsV@9Pv$f)#({VM%Yze@i(t}RQi!TxnHsI)AA zLDd2nRL>V}?)f5s=7|8d)QSM96+um{2s~9PsC67rp@IV|RB%v*3J$JN!67p`ICMq_ zUdxmY=1u9~uqhoJzDoy3?1I=McR}n?J4=q<39-JN5IcW|z#g+hV2|A)u*Yo|*yFbg z>)%$gV4K38v`t}89#Pm+Ms)Vn5uH74L}yPQ(b>8Yh&y8h;(jy&aX%h` zxSxzb+)sxD?q@>+7aS6}`XPb)`H;XZ98$PNLkib0q;QQx3KtquICMzouz?bMK&crc*ztb-fSd2Rp_c!w|~2%k=bVL`IS++saS=%7#>}`VWob7^i?smm? z-gaF&e}^u$*r4$89Z>j!9YXkmokIA+ol5v3$Hlw!@Fg}#zH}EP$EF~;)h5W7%?R@4 zGlG1@j38e*qsUiQsPa`6s(f{YD#tBVhTJx*){w8Mg(KI@D_Jogj;xq3Mpi7??bzg)p-U%O|{HKH-^F!*8f8SzkHMt+Tjh^>XW`HEz94;?_?}+=f|2gj+wy zx}wRhE12wB$C`r4u9?tmt0%OQyu^0RHHxsE-!_b}ox>)u+~T--&;+*(YTt2lRs%O@ zC9uk|GAos2B(O4rd{;jLR@qEu)gClvl_jk)E7PT2m6n*B(-L#b9uVf1RLRXLgjtnB zn3Xn@Uilpwy)vQEs~lGECebUuWmQ6=S9Ky~H+LfREu9G6xd)T#oTIDLw5@J8_pqkj zq}H@+)Y|`nb?usMeY;c=m#7VnL|n3U$0b`&Tq;Y(C7TkLY-&uhX)&p+HzwIqG0D~! zlge(5Nw$qKiP{v?sM{R3$297Wm_}`mY1ExDjk+tQQFq5Q>YkWJ-5WD)_r*-AKW0+* z$4u&hm`ObtGpS$1OzPp7No8UPz18tZ46!{LL+Hn12>r_zgnqmQp`U0$=xhr@541?O zCtD=?S5b+6Ix5kFQHdUkO7yc)iT<4|(SML7dRUg|5ety$=YT{%4>bA(3#!pCq8j}Y zs?jeyMuQr?EvV6Bj$A;a^?*hj0n=vsO?upK(s{p0Z@2hN`W2r^zv?sT*SseEy4R%N z@FL8cUWA$OAk14Hgn8S8Fz7|dTM4Cb@E!A#~2W@^-6J|Bg_--coE_hA@(F$jY% z2VpRsg~3b~2481k@Xrhk{+)rrH~k`TZ4p7m=90ZOi(v1*l6|^Guy3~r_Ulq@`**3J zvO@(`mNpesx2eG0W&n4q0iad`z{?GQIBJ#|z_ScyYa=BGL}2zn7G@7(VfJ7aW)Hzc z_E5*XdXYV>UStoi7uh4~RNIktDtpudl|6ca%K8?l?ED1=d(8ZjW9J*}aq|rJ_<06< z!aSHeu@>h1wJ^7!7UoW>g}IZfMDCO-kvp|YNLzbrmXiMup1#s6yp_ zJfm|znbEnQ&gk6FW^^t%1Mxqff%t_p5Wi>!;u~fJJ~Sinr~{i(Z1{{~Bc^m4Ii=gE zDM+x;Q;@(+2{te#2w+MP*eONeY`VZt>4IRHfke?E%|N0wBZy&#JfnyaONAjeIhrdB zad8DKS(a3Y(o&l$omr(yQJWzxt1_gsY;gGOS~z@8t!O*9Rt=w5tA@|F%rn9*^NjHF zd9ZxJ{E`dj!}3K7MEPRJC3T{FX`L#^9If@Ld|ACAUyd2_6^<)eIC2#WN3OO+#7I0M zM%tE%k!zNTkrm6-$hFJV$aTxr$o0z&+YPNoq`lRMbhN@v9c^&ajg}6v>BcUx=_X6J z*tD`wE!nI#SypYa7`8{Fa`Pimxp`~UQ#k9vDfv!UO5Qx(E2pP><;|1fl44liTnNi|6l&z#Cu-!|@-_0N{CIfNsHHc&Y1lCs z4sRT+32)5Sgg0i!rCV*iQeS^bDjk+msTx~vVq7fi>=iXjdstL0@fuOF#4O{2(qieg zC8NDUG8z_=a#-k*!$P-QBP77AaXx|0>gBtGjzF02ndJ}j-ToR|!e7I0@Qrhp^}ca# zo!8Q9TkGxR)_N>qZjGhVQd73tRpS_ESI?R@+11k;+cj%aV^`ZGcJ-{H#Fijz*Q^4< zmYASx)`STxtIIU7+LHf15?Gy=z?#vLwWHGaK)@QyFalQpAd^`=Y%*&GO=fkO#;pDh ziCJyQmaNH24uo0zLoz14&apmY+BRg&JtQ(F-EGt8o{UC!&yldYf481~$(HPwY)Zdm zQ~M=aO-r;kM{ioPrP7kEFD=<_O-r_oY00)JEzz4&5`Ehox2L4CJ5myTM_QuOX^GyP zmgqZEC3mGH`tFoQ-<#6t`%)UcC8g2#J03`Bwg*!t{ZPuJA5NL{)|5#Qzre( zlu19HGU+EA*%ZQ922u#~WCCHHN+8Uy5(x9_1j0O>K$vG7L!Aion@)uJZKuTizEfg` zJ0)hMU1FYVmzd|} zz@$e4QyvL??vcRXDkbnmr3AjLl)zV&8klxzV8*3^f4DU8^|T89Ijw?!O{(CVNfo%J zR8X2&5X?eDA`1_Q zEHWUnHCszOTST_jrm_cYR@nnLtL#CWRrcV%l0&);_RwyF^>!KTye@-1tjk~z?=aXS zI$-X|4wyTt4d#w+gE?Ot%*}5Txno*I?$}n5JFZpaj$bZvCoETOCoWSt|1yW;Ch|YQMEP3;O7e(HtibB0AiZ(-(>J2em4@(xg9+o2YqOGZ3l$z>Qso8=V(qhbzme}C% zQWg%M$%?ipD~6-28eYb#;j>sHe0IbF%jZO3`P>LBpXWG#nJBj`6XoU0EvkIMa#g-? zxhh}Os>&C)8n#PX4f)bGLyonP-KR$4eMY2h zvk|#wvk_Ub1#Y_5aotw9>H4i=(+vY+Q~Q9})G?$s-8iH+-87;$tsF6$R*e`3nNu1v}4N?E?cal1>FZ+Cg*+ox;f+bomgVaujsuWe(YH@vYB4&ORaW9!S0 zOMRo3UMV%)E2Rd*Wxd%No0b_D)y%l4^!M(T4vV%_SX5IrqME1?wZyofbSVWG!XBXq~+Xc^}dmZ+td-(Zn@`So(R1cdqZpr&jcTEnkH$2nVYoLd_l=hg*# zO9H)INtjz_@t3Ui*Od5bxHV>BSlyVkMJJI=22^s?)}Bh0R^472MTR$De$Ts3Us zdszQ^%d`pBIjr8pqzTqfYTvPLQY$HHU|mrH>%Yf_f;0yLHhfE>fY`bx5L?d#vWMgZ z0+a~^s1qh*QNAs2GD==!REL(=Y`uBSmKxP;eWRM~)=|l}aa1bXG%PW6;CERB{62$#;S2&sG6;AsgMjDz5%5Ak0$%J#z)SrIcsY%LQOCA4 z0>)AZ$fYEpTM`m55)v>I5*SZNAm1s0?T%MECGcvy1YT>G!0YW2cq1->Hysmk3G9eT z;H{Vh-i~SDofZwe+oFN@S~O5-(ZJ5A2L2e;z=u%{d?ah&PqGI7ENh?$G_VV3;A3Ed zPk;$NMNRNm)C8ZQCYTDE;Papf{vI^J7eNzz88E?D0fe0nAnZT<2>Z1kVgKnz*njyE z_TN5){lFu!1{$e-jm zd5g%OvPI=j-J-SLv%%MGHuy984E{%b2LIzeSoldFEc~<^7Jk+Z3&Czt z_<6S|EbJ16MO~`U(4`8EU8)f3QU$cjuwh+>fOo;7h3JAsvP-m4U8+bsm@Y#E4z>%H zESyc0_%2ZrY^o%7sgl%X*uq_gBzM7Kxf>2gy5VqBw-|1=so}-lYIsSvVO!b<%a$|y zU^(howpoI?Doc@%mYH$P&wjdW*DV16Gn?wK>csiHN!6cmC~5 zf9v1A^jV9qZ|QFwL*7VXYnJJtY`6~nS8UY zKh-?zk#wqgYg%sJnv$C{DNl1IQSxwSzUiUPeA9#N`KAZjQ%(0<;;E(wY;x26F^i{Z zON*zezs1vZUo;=Ncb1%w+#{zV_W+9=xf`A3iQEQTX;ZORy0sXV z`ifzxw-A=JLXD(N)JVOyaj`c)E^7H+Q5)?Q)nQ9mR0d0ugEe9@TO;;l#|2wvT1Jj`1*#B2Bsu^K+%=#GtZ-7VkN z%XLRfdZN9yWHihr8r6RzM474fok!N1I^Jpr)NKFt-seZ4pN?8Tc4-bcB`is+*;WSHdgk6 zO^(|td&_Qj_1f-m_1e;|UfX6@ukB7(FSv7B19v&@p4M#lOl!7#r#0Js)0%C|vQUim;BkY^~2s_b_ushNS`&JrZ-%ca!J1K;HH-)h8r4aW01i}^)2)i?ZupcB4_QOtu z{isu7|J*6D#de9^)h@9gw@d6Naf$s)Tw?zkm)Or@5<3}_*r}Mt{w=1le{a#)FIzPB zs}_x&iE8XWq8j^kRAc`YHQ9g5Ci{(SvaX29R#;e*-OI5zi*S2m2)7T0aQk8ix1XgR z;r6dbxXOBotE!i{>N<&Y*GU{yCvk9{WZVlT zj44C-KaAG*UnAxEzLxQ2SiuTbu!0qA`@Ci{uvos&^Zf9BeeUbJ|AFgg zi+dY>zPPvH7mIrvemTFzd!_J#F6W{q?NZ`_qVfKy}z5?>aEf3_10>p z_j*sC-ssbuF}=}u=CoIL*7R22*@knb_xkFl_xjw^8&UV{Mzns`tMkly(T3TrI`8aW z)Tf!>i=y)z0We_m8v#D=)e-YvKrVWLU$+$m7Po@n@>W1C?*+7`I156>S-=#VF-^GG zjIlZ&7Af{&QIikjOmQ7=ieoWT9BVXXb(>9D>|9e8I}bMF=fh@vi`|De*?ss0hCkTj z_#f?Y{7;TJ{%1!P|BEAwH#^Nli_=V8=rj|5b^3_ERr!d&SNVv4RKg@{SDa{b zWr>Swv&6q@&E&sp&E$V-&E$XGKJtHVAKC7XlkHfX?7-sW#aNcSn9h=y&}P5pQr_pk z%y4;ATz5rN)_+Ay*5BEZ^>?+H1DY$_e7dXJ;(@C=;(@C>vISk)z}7BvaI0tzZcX`u zaZP`GRbnt6ObljqPYj6E69X8vYegSMWi-7Sn92w+mFa}3QB6BcJ>ISaA8S>DkG6`z zN1Dap!&|W6P7Vu>aBy&#f`h|A2|QG%1a{Pjfd^~E!2LC1;J#`skk(YffpkT|edUV( zzB0vsf0^ii022KVlwi91OECX^MX)Zt1o_hoGC8y$llRUEzW1KwOa&TY74+p9Kd=t6og%4=mikg3uKT2GPqV#Cxh$i z1aMuA0IshoG*tt@HPrz0R0Gg$=&6Lhp}RsxHOX=Tl?-AzKm|=1geG*dFHt7@;*dr# z0N>V<6_9Uh3FN!FMD|`?v_kM+rCCaNuUtaCS1znEXYsDMY9`m9xmq)&Ni=NL$Qty3 zF|et9x_x zTZOd}^;>$kR}_3QEjf4hmYloC zux(4uy^YJcuQBv;Id@7!<=ofm67K6(fQ0*c!wn#zyAdSZHyQdsLe~!x?*6)j`)0%T zx`g|dx`g}Ix`g}ox`cb6F5w=mOStc>OStc!^&b^~1=YFUr=N_)fxksvV?uV;$?nkO~?nkS0?#HTg?#C+&Mk{mfjA2(rPWMDb zPWNPaPPe-}=YFa@=iXD6bB~qf+~Z|A_tQ|${S1_IKMUpDdrNZeY)Q_YE6KU#qMTbP z%DL4dOMQOHTtBg7uAf{o*Y8^}*FU#luAf>k*H3Ha%=ORDnd@JeGuOX3W3GQ`#$5mM zjJbYh%2z)-<*R>n%2)rI?5lrW_SL^3`|95u^VQFd`ReD#eD!aS`s&{u_0_*O>Z^Z$ zI9~t3aJ+tDI9~tZP`v)5p?LkrL-G1g2jcag4aDo02D0^^4`l1V?90}F-IuN3-P{#Wj?7XkxNIu?h z6di9knvORdL&qDArLzsk(bqW%oy%6V}#3$k(yc`=CAc(fm$CHtc~la z+Binn#<7qti!rrXEL@w#ShpFExXpOfZN@pwhx3LQ=EEDYIKJ6%E}g~CqqF$=w3*mK zn~5gA-~!%9{DJoof8>3{pZGZOXFg8+r72D{H)V;I7BhKai<$gui<$gei<$g;i;w(A zi;w(gn~!X5i<50_aq^;$EcvgFEcu@axN3bT*inHd7j5 z+DwVF8XqOi`l#f5LHB%|>RyafJ(}e>)l;0KwrNZ`Y8#xRu7NG|ie9@#H(oB$W91UP z$M95{L_bxA7eF|z*$pA|?h=H4((ptPLO)TYQoD*&Dzl_enFWO!ofE0i8Ic;D5~;^! zjCxGQs7J>z>X9*w+Bu3*Bbs5D8X1DAkpY<6*{1{_?p1=1^oqep1w$tmd_>cZ1s`sQ zgF9Q{;7GF)7}+8QhPQ};hd43tAcqAW&`<^d2Xu9c|GpZ26z)iCgDn;+8pq z*ghi=+ou3=^BVm!Ao^v9=o{0>_)Vh)H;xMUjl%^u4GVbR5WxElHxEGgc1<6I-`po- zeZ4YvW3P-|*DGV!Y83?RdO^T$&~$15c6~d*uG2wSsujX|TOsTk!?tD_^ccFg2nTQi zNa_HPG*p2|K|llr0)TXhIvLf(bpjf%(STKnYDgzkL#R+K`$SEpM)(%slPU_56_Bs{ z+sb9HCTWoL3f`oqYz6Qp%Yau}3xd2F(I7yOSAgV(RV8wRSR$+vN`wZX1T+Xm{}-r1 zTtg~?8l)wQF1eKRtmt0IeMiq+V%4^}glF4K!gGzGcP8QKokBe+!?iN%xlTqs*Bfpa zLv=Tfp`IJZES{T23;ISatNMp6o|_HZhb_8WhAp~Vhb^Al47U$kJOjfP&mBV+&z(aS z&)q{7&%Hwy&(M&?lOD2o?jN#v9vHHC9vrZE9vZNCh6gO3kpYWm=YYlY@Br$0WB~O% zHh_8_A3!~$eFd35)U(U*L?7yTq8If%Y1rM1dY;k9WQBSTF^~lYrM`=bqYBTD|Z$Uj1TN0j0F5%h7B|Oh@3C|Rj@Jv$)&+}Bm z^8!eCUIYoxOCaHSxh~;(r7q!_t;=~{t;u;_tI2s@ugQ7dsLpxbtj>Afs?K@lDs!H< zD|4QADs!H9D=ZD~S6CW8D7Q2$lv^4W%PkEbm021-F0(XzQf6uR46-yVL1@D=gf@Ip zf;N0vf;N0zf;Q|gK^uyS6Ai`1iH3E>iH3ug;|&Kd#~ao!XB*ZpW*asb4q41Ll+0_) zUemnUd#GmC>^*GO>^*$e=iNB#^O~o9Udy!43r)wpuoCwoO5AHz;$EAQ^_D7G@22sr z_XwTYS2k|;*)wL}kr|)wsEp5dOvdLsHskXhHxl=ikHmeBk+|>pbli7BI_vvEI_os%^&>s!@(4P#((Vq^+(aQcfTGgLLf7YKxf8K8fzvwrE zU-g?ob-x+7Qf6>k$_##!@`2x`eBgH}ANYOB2WnD2P@9T_S}_hzH=H5H!I@%Kcb1q1 zXNy^Ij%da-b)p$_8|p6PpL)#JPiU z;=FX0I6s{wwxrEu(}8u5{T9*L8G8Htn4nJn3o$&wf9%>KWQ zoBe+qH~arS?(_d++~@!2xX<4<9`|3Q#QpzLvi^Thn*;xuHV6JYZ4Ufz+81aybj-#B z7i;FTflC&%flC+7!AqCT!ONC?!OJzpiQpB6PE#(}Wy%Gwge}ySb_;ct-9lY$N2#qE z2TH{a31@;5oC!*-N>HLJM@g<6m8{KC-L)3F$6c_^ZK1EhG$`GRp>&Ey>1*kP?m9j} zU(YA#8~7Z3W0RpJN8i+D32FK|ETO(GG}NyV3vL!s-S$)>lx z0v5PefCKk*!hyTn75`nWqW{ij(SOGl4W=99umTG94`_fw-ma-r$lGf~-9U{<4pd|0 zpr#Td@2G^yJ1YwAC|8Jqa)r39Tp?~LQ;6+lB5_NZNZbl(Fygk7f?JDV-7QNHv3&_5 z`j=$9Z$ZXyT9EM@=LFpia{_+-j0Whgn*zFPWk{EjAv`svk+ELQsEl1RDqz4UIq`ee}C`z?YDdIdq35(M3~ox-Z?I)U!mP5@Hv-v)te zTMJUHkgm5CDrkm4Z?lYQuF(nTwk>M`^qLhMgle{}l6~8#ZxejmD8YA)1{}}}z^W7g z1$Dres)Kyje#>=rkng%0*{iwUa6^sky`ft6-dHW@ZmJe^eU*Z@zf$ntTnTjBD}i@= z1@PXo#;p~=dus*cy-iaNd2criltbP@!yV<2_fErI<&gL8a>#p6IpiHGhrH=B$a{Yo zx65dy*65iLQ65iM4g!c_O;eAWa zdFRG*-ubbd_wBKq_npz4_ubK)_x;hF_k-b_cVXD#TO6|ZJ{q$4J|438J{hq1J{z$3 zmijEdB1PW{D1d7lJ)Jo@28^=EwJ0dBMS-Ih1;@KkaDod3C%O{gBv%5Q zT$KP7RSDp%N`O9AnGa#%2z z1I13Wqu8(QDE3=Biv7-xVm0=JuGXHwPS@qIGvFL{CY;00GMo)t@N*1xumyL+C|++W z@R$;KgDHV~4L(y2M@=~#m~uF#vk?q0GQ8H#vkd5{Px!Il|&$Z{s^Bg(yd`FJl;;{IeoEHBD zPSpPgjRW=n(V6i7*_rVF#hLIoJ9GY)s+|AADofz6E=%BVE;R5D7aI7d3k|fo&_J6j z5xB^e2>h!y7x;H=F7O|>CHP;rCHOx#8fIy?Ak5XNlrUZ3mQ-ZpxB|%-?rpZxTJ91RKD@P@|EVM=tEwpHmQYf8Fp>%gYO84|9 z=xu`u`Wi!TI!C9{Ir>`7h$VF0h$VD=#uB<=91Yz#j)rbh&`_U}2=z}VLN{w>6QS+1 zxzH_!TjwpzZSxl9_C*UbuxMch7g6Sp<$^nl0drTepu5{7Fn60|<{k|!GxzGC@Q~r9 z5+eL!5fOggFkM81r|)~VE!H4^p2ifW14rNgORl{l5D z#HrB=gnGOJp&lzos7F_nsli7K4?|LL=ZX?MSbzj~79qihb!y<@A~o>Hk`j1iNen!) zpuqwU&tZX)87we70|$0Y!GQ;-;J^-9@oOF$Q~bkYqJMZ)^gpB-#{4^mG5>=@nE(DE z*ni&u>>twfDdfGq3VBbjLf$Qiy1N9CysJ|r@9f0LJK75dTVdTmGfWONE5z+v3U1>R z;xqfE`eW5x3OA#4R-iw^qZ%tO09M`B2f%H85V*Y$0t1>}2n_Z@;10u` zy%4xlfWTdbyE|oc#XX&}?%sA89cmYJ>2?9V&v1XcfIeV&uvI{J7=~K~bfi^4A8r-U zM_L8+u~q>cZ57arVOOhwKG7_oPc{qa?q&gf%CM(dK*yQ|blmWCvw%LM*&?IQZjsTw zTVyo5MMiT5nUi%2C!?w%Ps!*6C8Lv+jP9dk^f@4-Q$R+ifsDQYWc0;48GX4opK~vjzfh)j(jb1_EzaL*Sii2)tVjf%mH+@If^M7Aqm}VI>4U zu7toRl@R!}5(1x90I*a6z;XouUsM3_Wd#6Vl>@N99DpK6L9rcxb#?#_G8}9NU_C78 zHoyWn1QtLEEC3TMfJ03JILst~!%Z^SXp({1Bm;{{22imKU;|PNVb)>@vl&X4E!d`I z3wFe^1uI)bG5aEl9l3~NN6n+y(eo&F%sh%6JBwn+%_gw&*#vg{YyvxBI)VLQI)R-y zox@I=&S57{=dg-JcHuD$e{SI zG6}polfX~QB=BEn68LXM68P^%a`^8@a(K;14zJauEyU?*3vou;LY$el5ND-P;%vh? zX_Tl-CkS^sLDXvobA)FwM>GuP2(QjU`UWi|I%pxmAWCBWD2eM5B+;KB$^HcC@6VBe z{u~+X&yiHW#ZUKJ{Gon}pXo>a;eOQ5_M`qtf5IQ_Px!h1grD!v`D6V#e`CKTu({t7 zICszzIDZfgY#BrYP3c77f^;JAhjb$F$B|s%Pb0a&pGPdgzl>Od%_ElJg&8#X*9;o` zTP6|wdnOV5Msf%?9>XPXM zb*W}HL0vYRqb{G%QI{{~s4EsNbf=+f(L!HoxM~rluhuN1^wwg5ju#7bqFA7XVp%5^ z%d})j7Rz*ZF%;@CL7{CXD0B@BLcK5urC=d+t-atnyAZlwCx>pZ%b^<`a_A-p#Pm5J zrr!ZEH#-2c-2s?eoPfF237FfQ0&}}lU&ALnIul$Y7}ggpChXP$k#GtbWJlI&c2!CS3K_DxMQ!M>r{Qt&!w)xE}9 z+1DsdKCF2a6wKD;!!vcs@GCXR@XIyH@JrRn@Qc+%_{B;?g*CjY+!}sCQM%Q#yp&1HMO{8q_>hrv`V|NWmvH)p+m;!>(#1 zxT_KgW^`&GQ>g|Rbs@p38fcsU+;OjCvj9xX$3kCY*SMQDfo`g10L#B@Q2!0i1->~kS9}58cL;%=lod8?v1lZ@D0Q<5NU|+Wj*#33_E9xjHZWFL|hJ)G! z?4T9_JGe!_)*Ci73D_Y`GFDwKT;>)N4W+3Xt#hL;}-B^-2z@-E8vb=89%;O#!sk~ z@gLO6_=zqVKgk6VC%Yh`!UYkhxFF((E{OP%3lKkc0pcevKvcQ_QB@@nr&bBX&#MID z7gYlBt16jrRmsF@RWkAGDw+6g6-5573L<~+gvc5vMAkY1dAi{YCm_#s3c9l#0(rJW zAkT5gWSv7M-42TeD}{oM(ue>erI)hSSI zPJz0}DNz4%%GAG|GW8#)O#QD)rrLE7-BAV67aK0A0`#RWKwqX4=*wLKeT7S)J9RSM z<&x;RYeW4ML(@&`E9~lr(g^mL@2CYZDZ{O$WlaH-Yd#69^AB zf$$wIAbe+w5WcHL2;bczgzssQ!}qqy;h{E&O}9bpeQgkXe;Z&QXanqnZGhd;Ca@26 z2<&i&z>ajt?899$`$(6}KH3FE9uo^57eQpykP(H*E=@{^Jdu)hPxi}^C;Or3?iGU| z`qUbG(!#2*O33IJC1iBjuvB7;epXcQX^}1ZiDoGu`FO!FmyCS0VkQ~Ud^kfyKAb98 zoFXC%G7%fn-4+!Ory(?3`d_-_mpz zyxE=)uXv+9uY0{cAAY?(8GgMr8Gfxf8GdaG5q^~`nB}bDS*l=$vVOxWAkXOPlFTbL zN#|d}Q%|pG$Ek50LXEc`FxHAtW6c^hsM(|0BCUZ3_i!ta;2vs)8rY)& z2RsGTz*9gvpiT-rRfp?#*WrQPHOT+1TJ?XE;)t|B*wX@W zWLhAON(;o%X@NLqP$rHWl!@{|nQ#os#PK?aJfR;Vf6xz+C-y_+N&OIcaz8{m`vG}M z3Xnfc0rE#FK>j2J$e)S=St$x+l_-#>iURp_Q6_)UC6mAGlF8~WnRInQ{?oc3|8Ke= z|8Kh>|L?nizorZLYrBB|^e(}FhNeUCpV=Y!&+3qMXLrc{b2^|vT?Z6!>p-Bs4Fo)G zAkfeT0^T-3=W7!JXqy}WZE^r>lLJH>6eQcApuY_S1BPIm5Tx3KAl)VeLoGs(X_15B z7CFeaKvc8^qPP}_;#(jp)&i);7C>!o0o1uIfI6=QQ0KP@)Rq>3YHAUv3t9x~4=n=q z#}=9TbBj#^`^vjc>>G+iKcWtR}Ts!Ir6-6e#! zigGA!NQe+4h!7)+5F;6qB4D~j!1Sa5vn?es*YpcaZ@`eo)?!*%^o`1*b*d_zAJ zzEKClH}!*X-yjIzJSc>>r-kq>X*qmrS`ObfSaAEG93B{y!-Inmd&eNe-j#;fyVHQZ zcSK-^G6I{<2<&|snY}+Fvkw>^%s`PH87T5l28s-4pvcZ~5P5hUL>?IzB9Dy=k;lj7 z$fzMR4n;M)Gzy45p@8U<(;6YVdsZVypEB&3g*eUFEX0k^7d$-=anH;H-Ls2;+q+^J zaM@*HRjycEB^Qg_AvDQtph@mv4OVavMy^`tCb@NPo36Ol_FXO;S1=JRT4R6ZMD(l5 z?&z15-O(>9x}%?0kkRE88;jGLn8mi!BDj#|oVDv8kZnhI-Z zT2o#yRc;MUmFMZ_$_!AR-lr)^>LyE)^kmTrf}YSU;op#7Kvt=9$N@7dwQ5SG4v;8y zN}?3`dyGj`0Zz%9(f`9RPUUn6m0K}{P~W5ma{~qPfEttsq=G&vSbzs*P459pFCJ8S zk)R?VLG?S-fZC}B@@q_Vss-&*Kr^{kD;`+Yj0g7VkifoXB=Fppf~hU4U&pEb=@pdf zpQa@L^DBVle_=%(?tjtnQXO7UgZp1Lyi$YsU#TvbsYZ0Om5A=uN<{Zs1>%3b0`b35 zp^|TwtK?gTxiXcUFH_04%T)56GL?K6QpxuW@0X~nJ}6Sjg(8()EK_iR6+jlAmkFMDoiqk^E{@B=--CWYLI77N-+zpTXqzpBLo z)wNi_Rf`2qb76tsxWvG3U1H$(E-_G3B?fA%6y51gC2)q}Oa~l1%K-<^)?vYO99Xc< zfd$w6;n->9n;Ub{_x+u_pTNLPjEDH2L7X`X?QJ~uvW%{B;nf~{p zO#f$5rvJMLh5ok)h1%z#P>12-c@Vl}9)vEP2cgU61>NQILg0XwZo@JTYwk$K(EXz#qG89fNL*Z+e zq40IZSor#4EPO+;7{0Ms4BuqvD^|k&#Y*_*VkNx2SP9=!470bIVD>f>%-(Lo*g+U$ z?|?=2PFQ5`f<^XjSY+>k72UnC!VbX-n}*@YeJ~t(z>Y;8v}2JS4ly$95F;ZFF|yMx zMjp0{kw@%eM(uDka8txpBkORT%e76~;Yl*jt5hd#gk)t8s~3&Lwhkt;i|03a7XgPBrA+3OAvH`AMu` z9|rT!VK6_1Vf?g)#`xzAFVGnO0x$9}8eZZ>{-q|7f7t+~N#2qs`HgAYs>26us}38q z@rU)>_(OFQ+@Y!OXG%?QCUJr*5xaGVh~3;FUESPe8-D5gzkkJf_|aKO21frz)RIu`lU)M{j%YeN^3zyp3=;G%WQf68(uBXQ?Hh- zNK&st1+PKLf|4ZldP$OcLsLXhZ)%os>a8{A7I5AC0#3a>r$MN9G&2S7&LFz?rV!ox zQ;6<^DTMk!MyQ1qV`@;dIHm?a994rKjjF+qHN$G~(_uCE*{~X18d8JHLu&AI&43#G zVn7Oh*(U|R>XU+B_e#P2y;86!B?XJbg5oYox2{9d9n^*wwBW&mHBESMyUA7>I_XWPMukdQ)d-R)Y*n}iY2Pf;9eG~`elXkEGkrk z!8@-|KFzE`p|c7FW?>qig=u2CfSiVD|1?YorZGCGU^Jy*G_7ECNWo}E!Dx0|q$A@Z z9UT{GE+f*hj7T?T6nb+;q0h}I^!XzSy=6q9n?~T!1!*|+hcq1eV;T(rG(m3N~j~Hgf7;I zFms6rGna}mb6FS6T;7E-S9D=ar=|mAx;jMWO2bthB6D?z!fZ9fI}|3-rZ7Sq92VQ) zu+#>JlWkbIyA2EXv|-_GZDRPEHZk1WCWcdOO8D9~C460*6286-W^ZhR*_%3Gwyy(b z`#Ui9X2bRlk-eouWN+;d+1ol4_Vx~i9q3TlJ38RVogHxGt}ZxocNZ49rwfY=bzzZo zml(OPON`v#B}N|T5+e_GD3KjqO5~v~B{I?lM|X;F^kET;J}P3-$3!gpcuI_pro?DQ zEZ8L~x+g>>`h*B`Pl_mDCr&AdBw1{!f7@ieHZf{EDvi%~L z8&o)XP~nt8g;NdrL73M}48r`RVP6{NpG(91R2t)_4bP`V{)M#2zc?cDFBx7QQTSIh z8HJz8DEw?j;a?rsz_HiH;n?d69D757V{huP*jow~n^UmZyn@BvRcT8zDC zcz;@qy+5nOJ}@lIDzU|RC3YlS8Y_cKV@JTHu}!*3ev_%7)HJEH6;JA{#ghfg-Te1K z7Q1=a04%ZmT5pvZ*Y4SVP4U*itL7T3)-}VhfDH~Umnuu!l_ZECDbnCwA?2dlbNk+eH zKj4dYTl9<8f-hTbhKb0RE1D-FU+B6cpKs}oEE|?MGV+<>Q;v*$%Gq?EaJB-<7Wssl zU_YfMSgoIc3HD`!$_;x~MC;s<O zej2BLFpbkEPUG}R3QkujIPFw$`V9HMKOV>FpN`{n65`9`)qJN#1=-;Fz`nPF`{{5gt*BEO1CHi#387Y-M({NTwrO!^O^f{tR z*NH0a7FD`lRB4Zhgc`b#khcp7`MQu0+J%Hb2NJ?MkPzO1hlmb5L>l~Ucqq_@hk|W* zh-#BUbc+-UwMZex5N?t}Y?BmjGp%JEu zMwkm|g!vZR5TzL3$7aqRCg@-#`c(}_Yg|DnCxT;DDUtJ}I zw^pg)xKj-$oN8Ebs$tQIu#yvDlMaOKb|7qz18286aP}HI&i2|RHf5LCYwZ$yon2zD zx2x<8c9p%+uCh02U?kEHBaxe7B(fdGBe%eKXc|VM_rZAdei)BF0OQdeFdlsfmZHP36di%3=uTLTJ`AhTM`46}3`V%e zVT2on5iSEG+%6c`Jptp~lZM?e&h0kg+*2l;+hdZrF<9cp4Nt=o_YACZ&l>i^Dwj3n zV3m_$gx4rA!mBXC=XE$g0pt9n9q0FHV4Qyr#`!5&;-?MI!xI0zN#b9CCH_TN;uDsLyavu)Yyj(q*3#c18Mx&i8OxVL>fPJ;*Fm<@x~=5-nd+aH-27)H-1qiHGb)o z8ozQ%jbA&Z#{EvIvFH?y+E{d|+E~2Cx>J$OnuAU&_(9ub?D)3HSovBllQGS4Ej_wp zTY6&0G#zksQ%~$@el36OXx<+?N<;f&N7DY7o%YAdXn*Vo+8^75mBvcH#pW)JS>2^E zq;`_mz^($wHOWI&D|&dy_5Cca9^O*b!<(Hw{6?pr-{>ef+~Hq!n8Uy7P=}vC)KOYs zFXc@dxS#|s*vW;2hWlR zOxw7FG)lob#ilD(Y->zJi!|eFWV)kk?H}%r?jI(v{X@3s*F(1GR|6A~ zF9#+fUugPPbVt5eVmNbGb@|j?Zd@9%?pBO&wv_(GdoM69KdpE23 z=>PC>JIQ|Bdca4mr0&C3vY?q{KWw(?7MpF~u(JQC*{1urc_OUaG7W zxbE;0*BxHwy2GDy-Qh0`Uvk~yFDWwo)%W8tZCp z;dQkW%t31$?3&Q6cTMOvxF(oGG*#WJN~*dGoZXDcaHz9ecbK!gz(F#r>?Cuzon$r| z%yyEoXke0oV3L6ih>6r$O(bJ8kxXfE!KPx8*|bbBM`#uarfiX5?DHBcbL6a*Ida;{ z95roaj#jM9F^ZKrRb9i3#{bdssZ3Ow#4)8I}r-r53RZIVGu@CC)m@E?kk;Xf`*;Xf@);Xf}+;lC`a;g)4J z{MSV_{P#sQ{EtO7{LguWZJS5fi{=sbU$Y4NpIL}86?UaqL@6^hDsj;n0fxXNBRuCiBUkjT}Bts_VzK7vFNBX~p@!6RZCk0jH0 zq&qD|deTy4TUv@-GblxR2h~VwP>o#MUvPcD8o42bL~l$X(VJ38v_FMMZx-?Bb`g)> z+J#4N>yo0kcS+HKE-5!VPsGT)GY6?rTH1``Zxi z!4`zu(SmcsEjYKc1?L`a!MR6TaPF}toO`@U;znB}E@Rl$B5_Z&sN9oH1-qM6?kU5b zCY2j&LU_%16T&~;gz(QaA^fvVIKS7BZNm9n6VA&`IIlEGyuwSo%1eCSFu_awBroy% znpFO|CY7IRQu*m7m4ChoiM`N-#9rhJUgDA1%Z68YJT}AQu~{CEy~^XU*LXbkIxofE z;HB7`hPQYrHpfe`c?~Va-lo;qJG2^mmsVr%@oMaS9%)=?LK+vFkj4+2@Wzjt@Wzju z@WxM?@WxM@@W#)Y@W!Pkym7fn(tX|}HGa_~HGbJ7HGbWsHtugy8;dSb8;dSPHWwS# zU4ZBgx&YaH&;_{e;0y81>kS(&k~SY=D7i@5Tyl}R*`&Ep-F&FwunScKa_-@pi;#0S z>hN~sQ_``2GWxhw}obAz7%=&dF&-xorp8l?r6u<67 zrL^$}N@?Q>N@?Tq8rr-@S-PiSuqSrJpg*>$-yhqQ^2bWou%-MlTdGuNO_l19ROvUsVyO=5n&dT> zjswgclWX+w8&|aT@S4M03{8Ii|IJ~%e~nW9FuIgKRD+fBrZq~iQo|&7$Xf16ZdL6h zw?Ws#ZE*d6sOsS~>#O|SdZ(W|c!k5yeV>CIe(oT9>36KNm+Fe)(p5!pDOUtfMvF}U zm!9bUlAh@PqVFmy?lJhIMVe(Yx__zQ>m_mxTlDLN@3()!rYl;s873k{ixZJz&HOj5 zo1ZXrN7l`DM-H0pjvQ=QKimBs8)mx;rn@5rWaN-tMIeHrTBz?eErY>hCT{b+emN zBzr`PWXnX7wTmQsq~WM8l0CYMWRK}0*<&>wBzs&3$(C!{NY>Ftvd6cP>IJ;y<^bqs*2sB^HFCaUjWms0BNvQYBY(&c zkw0aK$e%Mrqmy)N$w6ulDpHME%DDxtGZ{WRetZZ%4Zdo&nZYu zR*;xtP{)y2ejJHSj3cqhaXhxq@Z2~an;Ms5)8kU?`Ee=s!nhQBaa@YMl#yaDXQbFG z87VfCQDZYBYHW5yjlDXe#$L;)u{SbEPQ@v9IwI$G%3VV_##%3j4mslkNK& zPqJ^*ooL_I_yha4#uMNJj)%8>F9#gZmBWF?a#Nu3I8&hUSktD)W4`5R)23BNnKrFD z(zI!n-Lx-OR$OpI@jl(A;%%`_%RRADP4Twxur2o({4v|IKW1J0mU(|{1v2k9l*SOv zY-tQOK+~nGEYqciN#4AcGRd#lI6i6U;SbkjzG-8o=Nk?m>CqiF;^z-b`}sq^ZP3qu zzf%6t!BXC&=`ZC=42SfW@`t1j*pMnUOmZ965+}L!{|D_)*EPv$*6Vt>^(#7hxc@I3 zI(ojTt%o~gjgqz=uB6ScGqw2(TKwFhhQnI?+~MD2V~c;4xyirE(&RsY_j4;C-mimc zKZnqzoYi2%N>`O)rQ9ZW!4d9KU75R-v)2|JSzF2-WjNYZsyoJ2${kZR8PyzHH5on5 zQ0|=6{Xd+}cU&t~{y%<$6|8||W`Z?bTd)Reu-$NN;aYCUWG2Bvrk-;KTd)S#60E@* zm`noJU=8ZJ+;w%q3RbWJlbLYURnRT4yYA+0T4Q zPFKFe>CAUDIP)E=ocWG}o%xPK9Qlqz9r=#K9QlsJtto@cn(An*PIVkno$5H!Qg)Oj z)p7K)+;L1vQSLalNOl~%NOrgv$&RM^vg78+j^j-yOp_faPLmxcO_Lp-NwTAPlI%ET zlI%Eboa{J#oa|UVPIh=l%UVXsjx{4>$C)E!$5|s}$Jrxf$2mE&5ka;HgKQBN*&-ZciwKM@A~LoJ2-_ksY>P-?Tcp!( zi(KxvMXvDMB3JoskuIMta|jropL1Mlq0=PIdYFvj@;)|BlkPh$O8^F@}NVF zBpqs`&#FfHt!hNJs*zN+8d0j%NV?j_WU6h{0p`hKfO&c`z&x`UV4j^1FuC~v^W0p3d48^+d11Prd2za*`N?EIvwpIl`RQao z^U`=f^YZvC^UCNf^YhVJW^81Zd39u#c`Y}~ypfw_-pbaoCF28i?8HDF`*yO9eJ4@& zZal!g7Z0%S#{%pJrpZ`Gs{kgXW5zX zEIS*XWmSJ!-e1RQ{yI+g)o}%19XIEz<2LvL+~>Xk_k}OOed!BuzwidQue<^7Yi~a{ z@9pOny#3rao__9IPe1o7&n)+A&n)*F&n&m-ndO$;v)pgpv)u38v)u39b^Ld(I{pu? zI{uHYI=<+t<2SnM_&>P<{GVL`{;#e8|2J2F|GO)|FFX7BP0oJ)AI^UMpN@Y1UygqM z-;RF%KaPHWhx%FGVydd2<*VxJgdI&g)z%qyuB{VxuBj7tG3{CvFzi+p5UOiR`h}X> zeqs08eqoQ=Sz*uGSz#~J-Zis^eQIV6)|xueT2&|3R@I4hCR;i}f}A;=VPr;(n(6Yi7j*40Yf@(?KKRCRmAFPQ|LQ9kqyeq7ZQo?G48O}hM;dF!1e;gALXYENBXJlI>Jx!jV6~5;}7>? z{9z?tj6c+Lh!5M!!9J{Fl@Bv%T!T;JoIZ^^$g6P&8WipTPucz+WecyuZML6RS%KpA zE%B7qd#LSlc(5`z#+48z+>KRWZp@^ym|J7*E4eh*wnCjt`QMxhTT*MFSZj%+Y##@; zmCgC)x@C^Bdpj_8uM#W9?)g9LVZ}@uv->vouxeXWYs~Kd#U9nl_E{9huz7Cwds>u= zy(|i|w`m`XQem|yhFXil)R}A+YP;+fiouqH75H*+i(-)3j3@>f$6}DFUkoz)E(V$X zO#9CV%jSa20dqm-K+{2ULB?4!ZD$&$?aV6E!IO68kV!jpXvw&pIm~qUsNLWiwKI*Q zcIJqYvLi?A%#k@eb5zdG9G$Z>$7Joyu~|Fg&f1x#fqdk+l4L$|d@>(7F_Dj)l*mU; zPUIt=cs|lx63a(UiRB}wM)Q%=P}%8BK5_<=kE{--D!l%bp~aUntnsBHXL?hSv%IOu z*(IKQ=gLRUcjY4&xbl$;o%zT*XFlS0CVHX&ZCZq>YJA+L)`yN#>eylDTe_ zWNsKGneI`Nxp9PKZWo;drbExWahqv%G@7UnFr!3^I%+Mk};L(kEx6tQ<+puWzsPln~B=kfvAmrC~9LL zMmF{lWMdyiHuf>b#%38CI~2CDPlQSK$uP-2?I+o1{3M(6lkBjcWS{qu>ID~Uw5nQ8*Y_-%QWs%*$J1*zU{Jc@02)g z+`CR2_nyK={W%K=|iCK={`{K=}7SK=@BG zAnefBFIY@fef`3YCB3u4PQA0j&Zb>@W(~V`&kDPC*NMAz*NN5Lbz)6-ow$2ImbCM(--sAc=bI(AmHNwcC|ssor*2XLtl5K>i-O5D9+AcoIQ+j zwr$jfvF)l2V+Ly&TR~%MSFrlEA5`nt40V2OYd(#w^C@iYHcHuMHlM=UO_)z%@f8T4 z!a7X#K84-)2khrl*!{c;yT4aq4=^3*Rld(du?Kl5*6E?xRUV2x*h8_0tmLNHL){d6 znCWmg#kx$5Zi+p^Rd%F{VvllB?9ncYJ*LD-vBw%P)?MPj*d_++!sug2TvtsP&)fjt5HO8(sc`X>*V$hg1CCho{%#vcBIcw20 zpJ&c4naeZhluYNDb4|X})4vXD?&y?B!uQdqvpJUgfv5QNNwN+81Q6@derIyg~MQ zZ;*|7f^4@Z$lmA@BV!d#fwR#+^a7#~EaAbEMeY9Vzw>Yl^+onqu#=rr5iy zQ*5Hdl45%;DfZrFnZ0jWW$!Pl>;pxWeXyvqeMOb+UsPFnQDsw$Dyz(^Y zV9v%pG-u-;p0;t1PTRQ0r)^wz+QvOGNpeq4lHAjiB=^iX$>qjLZg`aBo*N~(=SN8H z$0H>7VvgiSax%9*Cvz`lW$tHLnR_KGbE5+?_v(Pmy*?mwZw{#3TS=80PpaHRQsv%G zsN6fIcjGGeUfjmNAGh%z#L6aPHhwB<<3Eg&{6|re{}_?{Cy3-fEn!IhGe+j88JV96 z%lvFu=GCyw=lwFT`Bh%`seHkw@^fC5-{4jG&%G-Dg;(Xj^xA}9cx}R0UYqc>$0p2s zY{G)aCVb;2g>T)Y@GCbd{Mtndzj2YmqDvN*oU-s+r!4%=DGT2@W#JDFRrsSr6*f9l z;ZF`#__IS5{_0SLzd3B;-yJq_lfx$d!)g=%WwnX_wvyt1tfaU@4JleoRW+ozV@Z`P z?o=gLe zP4J9s!pY-G*`y|voV1M-r!~U~)0%Mnv?d%ktq4t%ir}79gk#4Q;h1sCaP%l89JSIo zC2V%&I8`=D2}i8ZI8K=`!L^OU$FZ_eOei_bbm%B%IAm1gH#>M#t5`Lv85%}4zF}11 z8%7k~`TxT~BZ}d`9A!8lM^)^fqYNvv&FAtA*K9fkQHE0y#hr#I?sSIY&R{5RwE^S2rj{^fSQEy$ zGfijtF~iw@%y5nmH5RVqB|ftq0@QdNlUD5_j48ZjHUbRd%6EGpuuItlz1z zZKi-zV@Zd`1|1qpIW(4bXl&S_vF#3wyU2=h7h5sz5-Y}CYQ?yYYK&v5F^;XqIIbGw zcnijf7K{THjDr@8lPnl_*|MFxeA&)jQM7Yc742MfG01hz2f3@~gWNT9LGIeQAb0(A zkh@_z$aPN!xf{oW+)d*_?v~LYck5`7i;o1ko{=DTTQ0@jmQ8WDXH(oA11av#ffRRF zGR57UNO6foitCN1xO?I$?%r6QyFZra9*E|-2cvl|iSk?@%5(ipo|Bn8r-budI-KVQ z{CRHBZ|5KK+xbU)cK%VHoqx<{=O6dl`K-szKjE?SPkQY9)9xVutUJgLyMz4m?jZky zE6Bg-3i2baAiv(3;$L#6_?I0i{uOJA|G72Ak5#AmS1l?2bxVqW(~{!fT9*0oWtE>O zs{GqUm4BzG^6xIH{CkTk|Nf%Ne=u(oCg*L!)VxjjaLy)tG-ne&p0f#`OxuJ{r%Bw*<0af^V zz$VToZQ?@GCVrE!iQgt{;x7|6@mF!1`0F?+{w7X}OL0>CZJZQ;7bC^r$7J!ls4V^= zDvQOaEN(=y_-7=Ge?hYNS4I{8#;D@o!>YI`tcw2#tKz@HHt_GT4eZcXW@)p5sy5QF zV;c!}Y9qnUtt8l`RR+73w8&t$78z8x$e^aASq8f|%V3XY)v#x?3ifJN!QM?JHn>ld z4O&gLjW$@;TML5Hcno`n0>lW@O!67FA5!UO6_c%bQ^dJ-N~ zOG2lqp_YUVH6&bBL&Ae=WWymfGCZ_KhKJS2@bDTLHrB}Sh#DClS);lZ#vGR8=5S-&}2yq zZcAD?)^v;|U2*iXvVE4cur*pZYMC+|xl9?3C{l*TA|*5yvH!|d#0-ZQG2yTxCLC(e z_(K-AICxRpqNwpDt5#?zYJ9`u)>duPH!LbYXw{FjZeKYO(7 zoKcEDw`7FkeIpd#YFax&@oRGwe_oE_&(Bf(1*QwL6n|kB}necp;4Oq95adALEf9<0T))U*^O3%Y77og_q*5@=|=%OYv8GDgIgy#b58C_!~SF z-|eRO8{HItlbhmic2WE-E{ea^Me*?xr^5F*75+A-!r$&t_&Xd5f2Tv?@3JcV-ByK9 zSQWmvTH)`hR``3X75+Yp!ryPv_y;T+|KM_-?rUszM(SJssHb#-2xug;4Lmc00lB`NN$C}*DDr{=9q2rot==dfZ zI-$viPHeKFlbUSkGOHjLxf94d>UZ6&KX1h70Re!@7F4 z!e6hJ)vBniRz=ac4oa>xT@ly874bB%us=FpPr>!n#;;zQ61|pDwQ5MypR3Tm4(}`SmTr zy66k1%lv8a-0e8WpRPFDpEjK3Pm5>y%Fgtq#WQ`hxMqbGAN~K#>%$GJeYm*V`@_!g z;$^;4)rHf&x^SB5RIe_a;?;#_uP%5zX~W5$beT6Tl$^A}iQaU@3EuSo=1B`B$D7JM zEu7$?g%eGs^Jbf~Qa#B-3nzPM!Q-KYW)Cf#Vmj4B8&31khSNQ?;S5h&SZ(rp(k5E) zy0>U?(}p!}S~$~?7S1Yhm7VQM3un9NGAAvZ3oTq^p@oYrv~bBXWw>;i z5;~SCAyO=3ikQGGma&VNz|La=x7i#f@S9Czf?*O94C9y}jAMd0jtOA2431&~8o>l< z1QR+(FyXQhOt?IU30LMY;i?=abmcJNnj9uvm&JtZvzQReV#1ACOt@))5^f%#gj)wF zA)cg!o{|J5+?Jq(+Y^*+#6Md`;a2sj}+m7 z5=IdoWE3IEC_-OY5&FZ5kP0h;;#Y*UUlTHZO&IiP!b3hyc-X56k9alVQLiRE=Fx<# zM-!g#Xu^|jO?cX^3D3GUA?L!x=UkZhf(sL0bYkL&6BE}vG4Uk_Ccf;z#GgAbam;~< zuURqi4J#(TWu*+`)s#3;`x*B|8d*l4vltb zX|Thp20PrbJ_vWL4Z@vjgK+1XvR!I|aM!A`-8PZ1dJ_q2Hj!}mjb(c*$#Bml8Sb?p z!@U<|xX%U|S~tkBcBZUuMuxT-8QQ00h)u~5FPV@bF(E_8gbMeaP~m=KD%^ieg$InO z@WAydJZQZNo$FP&YFLE_53BHyVHF-)GNi)8hE#a?kP2OcDr_87;Sqf{bY!0m9o1(; zNB7#$F}*f)Y_AQud&-)6Z0NWi8#=z*hEC|Vp%c4p=;Ur2@^sr!bGHqh(oLdMyGe9f zH;GQ~BGDP9)m7qqJAf)*8BXj<2z8vHFPYBL2|Y!Yb-w%80*i_Ji{*rbpt++r(hCZ%@M zMa`t);ug|yNi(^XOPfjQ&S@N$+%b*A+gG@45;ycr;)eJnUUBOrUN(-yTgGvCbIB+U zZyLqnjiWg19>rnIpo1GqMs#rfhz_nB(ZRJNI=E&;2UoAqHL6!cM|HzhBRaTpLUkV_l*T-w0p(grq{223suB3atdF+hV$ zSGZ(=He5VFmt|?N*+p4;iyRGBYR}Q2J-bCXOB+I2+CXP<12upff&;jL9Ka2M0emZM z1Nio3aqxY**p}5r|3KNg0ew5t;yTlX1L>_?FpxH!KadvBOP0{$+U;mf(p&K*>Hlqj z7E8`8N&XOA^d)ie+-;Py&03SVVQmsO_ABjJa{hK)kfaS4CTYXEB)vs~7EAo5wgfE( z60}GrXfaq4r$x#{$7zv{m4#xo7&f)XXz?P`#WC7&NsJaRHFd;jF%qRkCQ6HJloq)t zE%H%X6c8Za@)-2NdzSq$a+Q)WjbrHSs42OIDs(mHiLn87!16}VBq~Q20jR5U^0w>DL)22 z@?+p*KL$SWW8hOC20rsqVA@B487~E9y%bQr6v%rhpm`{udnhpHroaX_1wMCE;7b<; ze&JHUS1tw2I~B0tRKPb51$^sJz%Q)|_?1-wzqV>%v04L5)f)J1wFZ7~(ZF{W4gAr9 z!J-9&e_FP~zbxC~UyFA5_o5vxFWTWh=I!vG^LF^}IXnE%ToCRs6NHwjvZ{$7+;JiZ zcNz=Aoz@58&LzV^xXVxq?mCo$yA7sb^aIGC3Qe#Jl*4WWuHFk7(l^waN?5MHIj*i%5Lq~2R(a{@8 zbj(H)9lMc4O-m#?Ziz(4FOlek1rnXKK%$cuNaR@{QS$~8ol-JGqElx`blMb&&X^+6 z>WMP%7-?u3BT>tG60KP;8_rxWqqBy~&K{Nx=M2l}T$68DM!q2#wGOFaeJE)@b zOy>`(==?qvU0}MfPem8@s%V|b->V{jkBZuQR21m3NhM^DO$v6GQQbC)?zTxGQ@G1! zXz#K~7nv@WNW&!(X}DA(r4Ca>A|Y{tqGG$B@&BvU6V zZ{;#pHauhv!9i;X4p>7lV<2GKq*w_<%1RhyD`DubCJcSmgdtf?7#^%9-~*=ns|k3& zg@E^&?zIqxdn^R(T_Is1D(SM*qj?TTB7id!uN zywy?wCAU}#;ATq!+*GoxgC8yH;KpSgbQjBFMcr^iQ8!#))WP-3I=F6G2iI=nnq|G> z>Sf)~wXB1#<+LHXoHkswoHkrpOdGB!rVW=D)8H~wXEAM%is=eeOaoM;zi&AWwx9u8 zrU5j8B5e?h^mgDtSZNstC45N{2V4;ctcfY&AX3!Dl8zz{HoLTl8!jp0CSAOE8y6Mz z|Ej&Hi|vd5+eM4|RxV!D#Y+}-@zN4wuhMSi9V3gnfmzfm*hO9BO#Gs55Ek{ad0i|K z=XDXx>mr=jMKrIA(!4Hq>T1bGmrB>54gBykc4xubkG!tEP1^I<1RcrmLrQ@fy>$ z)4F)wv@Tvht&2BI>tbwD7rQ5Q@y1DA{L#2B-ZZX@H;?P$E#ta)>$on)N4Mx1)eX0e z>f&u9x_GSCf~Ko@&AOX}i1B?(hp7w=Ev;Qj;-9xy!^#|_Ci z4*Ftc{ZSmqQ5>YAIC#*fizP{)F7|nKvEQqUvR4;V9$i#Cx|s3k;-E(tA9m~Fqi$V% z+>L{*8wXFgaPXuH2Twb3@Qf1&IVTQ=9XNR2frA&UIC#-YgP&B>V0|?WUb4{OWeW{n zS*F0~G6lw#Dezj60h@>KE*2-wk%O-;5pYKVwG+Oxe+a6Lxgam>o5& zx1&|Vc69J?5FIiUM28Lr(P1ThL3DUu5V?ATsIe!Aj_3)ZBfEp>sO}&-x+{o|=?WsZ z6huvI5FN(`(edp;bV7R&oz#{>C%2`Lr!9q=TT|$i))YFmHHA)VNue`ZQfPH^nYSs0 zTAEU5O=H=ajVW|iL)qC4DRfSKNgkbBpGUru+B|BlDO+2WH=MUgMdxo)(FGgJE?iO# z>y}jHUnpx^P*K1{ZctIsL~XE1v?;W~CWU5fQrOf!WiwnfWs@#0nXpNhm@XZ&NgZRP zA+nw{FzZPJJ4{O4Fe&jSVThE(AyNWEvH=ds5*jR%24$&pP?jz;T|OvFSCsV0(v^L( zbXA`$MNM73vUGK?EM3!Ac5R<3UDu~d*PCwWQ>7bvRVilb?p385O+V^Y4L9|w6*u>) z(#<`p^b>aozUU6YAG<^F1=I8Hkl{IZ$S~{7V!5f@>2*hRpHOoJ}MFyJB#85dzly9k(e5>PRvoJ57}Br5uy#P{?$ zi82=flPf&vA`A~W3B&zP!f>CHFx=}bfX(i47Akt3g^Gl;V7S{^sJP2nsJPQv*vcKw z!d7l~7PfMmGgHyy%xop@%xvXWXXgLx7H7tAvoiy3GK9cQ+xU?)^gTB^Lxyf=2*jKr zaDy`hu6KsOb*5{bA#jc9YG(*^nWD~+i2zrvaHW%|xWY+n;UGZC<^M;Uzc1A*O;2ylxd1a39O ztsz5?H3V*3;dX1taECQyxYHV{xXT(c+-(hkyQ@PWVd||8fqP8%R)-AtSwi4`(*u@} z;XzBtkhFv<`j%ObbJ+sPOPHPNt;s0vnhp|H>S`jODS~fQVN~6 zkV2<#NTD+}q|oY_GVfFhc_&h+Wg>;vjFp|aK84O2E<1ZDkIos&qjLw#e0_P;TGE?G zYkTwPyq>c2yYuLR?mW7%t8AT=M}8@f+Dh0w3b1)ZvUVxhUPiUsCAzIF)M}T)B`tQT zz1c2Z)NGe7Zn8_4G})y~8_PNx>{6t`E-?*uiLEc=>g^I=Z zHl`YGA5#r?jH%KcW46wcJ6E`Cy=^OZueVhs*4wtyyWZB>J8bKm@P}Z@xalo_Xe)2} zLxwl}A^5uKHGc@c>JPzDe+d5EAA+y=L-1vP2>#3;f-jkV>JP#7z7QPo5%4EI0={Va zv5$Z+n4b3$@Hx}4kAOKJ0iX2|@EOz7KBD3&A5rn7m)Ob^KB8jCM{FhQBMguG2>6)k zQ6B*xF+J=f3=jE;GA{uKR~YaThK!dmq`d@GyaY_GAbSZY`v}-?D1d%n0rZu43n2Le z9`qIr4|od|_j?OlxzAew_jxmhd%cvZ511ZwXADVq2K1Tw-5G=I&KOee zj6rc_3~5&eWK09D3>a``z@Re&9x^@b%orYV77UL%3*b>l*<+3Zc-&C{Sw{g3ISSwj zM*%$PD1fIN1@N@B0G_cHz_X^DwE%{z3*fox0(ic<0A4Wt*iry5S_dIGi59;miOIX9sAgCTXZ8 zX{aY?SV+)tL!5@6$7%RQjD}yvX!uo>hF?c%IFD$!fN1y)L&I+w8vZg&!(aJn_!~bB z7kxBb^3m|OUK;-1OT+KHH2i~yhJSR^u;@<1jjlBOvnvh%>P*AGIn!|2nTDGjY4}e^ z8vfgwhC9@zp`|trt7_7)swxe4s!GG1tI}|nO$yv~lLB|!sKDxt3anXD;O(w_Aw1&V;aQQYmgW&a|~gqeh5SR4q|BkK@1(x zhoJ-eFmzBahMc_^YUst#s$L8o+(V&5dnj~R4~1Oa6l(0I(2?B~I=YKO$8=HXScyVz zi9$^hg^p(_bONiO6WbMZQoDjqZdZ_}O+n3V3Oc1#L8rAU==2r^tu}d^71UDFq@Xnh z4V~Gjp|ct_basP=&S}ulx%C?InObW#!`fO6t*z0}c{Lh3-*iEhhAuR%+muKCjdrPR zqg@It*`>gOT_P9kQgDM^qDp4$5KC+yNiC1ZB!;xW5)$$GnV>9Aeu z7!FDuLqRDr6qJ~upu`TAaf3mL?+Z#oUr-Wz%Ro<1g55z0bq6J>D=2k#1*OZRpmezu zl&)Zd(v@sbx~e@WMcac?S9?&px-BSO(-xGjZA(elm9(a$>swRO4Xr6D)|!&KTT{}F zEoDDyNl7;~m)+c)l5S}#$xFAEG?v91@)bSx`Lf!)blYY%dFl3&s=Rc^W}9rCcbe|n zWb3?ZqpkC9Q(~j7v$tf))_ITV-X)viz9n1d{R?FeEZ7VWE|3+;1#*iGWM|(B{Ts*% zc>}qX)C_6(I2wWC( z2*XbhVR#V{@W+UNFCYRwZ+Z?9hG9fhPL5Mg*45%4KQz$Xy_pFjj0GG!5A zcpMRi#}EM@Lj~}t=@C>YV+vrUhna%mA*QgEL8eeKfC`2TDpaIV2BcBJure>5%XtPU zE2K~cq?j#al=-jvQO3}RGKOR{10F341(N}ZA8zkK*^~-rfD+DtbT|Vt z;S3ls4Tdw|A=AU*jNuV~20Utd%%1^|`wNDwzhD^h7r>CO0G{v_z>}t@df@@Y5mDxGzDcPVG9}xm}05wCQlyHXZKPro-x19oDq!aQ7A+?$M&dJ)3p7SF;ZH zY0{y!Nr$zKI;?Bdp{+rOSc4AndL0tAI4W_};HbU^NBdUcXunMu+J6&<4%mpH12edWr zcWLOHE)AV4mH8wMwXzyoThgwf^V&6Zew&6aXw%Szt(df~6_fm}nAFySNr4tjBAd&C z&6q?rmC;R@L^onms1cLGjhNKlPQNte`P(xvs3)KN=Gky=V(N@^&Ht)V2Y zhLZRiN)oClNvxtIP(?{_Q&2*if|9f`C`n5xsdFhMUAB;tE?-DVS8Pa0SDLPxNlDR} zl+-nolCGXgN!LuJq-!Tq(sg4g>H4vhbi?|T6dO)S-NPyA#-Wt-qoI^^(_l)vc`zm2 z+E*6uOG!O_d8wy2FWpwsQ+9h#-f%~E-f(Ak-f&k}zT$4l-f3X%or%rb?VY_PZDseg z**ouPExWhH-g$3x*?moR!~IS6&ifnfoez{Wls(vB?@TrX4Sn^&&VG|zAM8xkmMOKt z&a^308|)k?sR?!t8d9APt?+P7s;ny2S@OsVk5;8B9;-@~ZIU}5H+`K9!LO1b_={u+ ze!0RI$&lgmWXP}~88XZzLxw^!1odPHY6BsdH>m?5!)!8Sm`R2V)5#G0Y=uvgA;Txh zkm2KG2!2$O2*D3cQ;E=4CKI9W`5+O3A0&vayq_e#=e;CR@othZyptphZzqY0i6rqo z<4L08tt4T1GfBWVk_3D`Nx;`kuOV46^|t{hDQ^b?Rq3pSRn%*sVIO)OX6F5EMBO1 zJYFzl;|0S|ya1jsWWba0g5jxn0X%JbCSCx~R%F1lrd&K@crKm+&&M+0g;)XnI932J z#tL90Rsic`1@O~Y0lZ}TS*&1qIaUC#n0_8DfKk&}v|xBOS}?p8Er8b%0pCCbeADz6 zBH&vL0moOEUWZ))C2L98Mf&X4k!yPuI;SL+q(6TWNtCrGm$Az+;Hl*RsGbK9QWlD#;PUvvA zk}(}tuh(JCdL8aQtiwG@hIF{+kPi16)ZyNPI^3sEht^&l*7oYKu1ANq9v#|ybcl89 z5bxF@(WS%sE*LZ zQqZYO3Oap3L1!!|X!QmKc}r##)H0)>H8To2b4o*Jna-Zj&^Z$t@=a){bxcEROV(@X zy!9G7f4J;|VGUh4q@i^~n6z#Xll+62)YgYdfj&$kd&`17m_+qp65WkSp>9kHcVSX{ z7baaKVbaACCSAf}(xogWb+DKeX~!g{9h2CSHcaB$Fo|z16IwAzY@rOGg_2+kC81_Y zlA0;0vx$-}Yoesfn<(juMoPM}k&>=zq@-vAC3Q7W($x)$bWOb?U0bh6*VQZ14fTo? zt1auUQKTDd6zNAbigZ(rBHdi2NVk}7tx^o}O({dq#+2cvNYz>PTq7IOsrqv;Ph!th;=F#JA8z~7mE znPHme^X3fF=4iv>ai`=LmzEBMh@S!Z4E~zGpf|RD6~r44>u*!zVdn zg#!3^g^zNDiVt&ztz`?KWXg~MQ`rod+)4pV=E^?E6~G6%%yzw>%a{t_eM1Jkx5B%* z%>Oo004u#SQmA-)qyXL?$$$ydcrIgjE0?KwGnWBxg~GH~~X z4BVrk0QYPtz`g1VaG&}DwAL43ZEXS8nQS!$Xs;F|&-9Ui(~hlj1#p=%gNjl(!P zVhBe^4dLkMK^z@Bh$D9&j*jca(FwgcIl}xf@5Pbm8c?T9Za=Ytrbv zsx&&kDvd7Kq@fEpX=vTXGXF*mwJm8Vu%sb!NkhQ}4N(gk3N2_Tyg@_lB{LejXhuU9 zPig3qDNMR#0+TMCz@&~bOp1(Q60;tY*!7si4Pz2Nj7h=}CW%9s1O_n)4q_7O!z8H> zlRA4b>9Sr-x}pb@uI$02tGY2M+KowFU6^!r7iG9cqNHm}SW3E%rKIai+9~OVc1nu1 zQ&M*uCEeIYNk3|%q?=nQ>6TVXy0xT*lH#VGW<|QqbbFIxxT8^#?lj%?|1o3dacz`& zz`&)ttAP+mNdE)vK^OKAcmGr=o$J*c`$J-JCB5b8=x z9_gNR&p;aoFk8=HY^N81!BY$7A)Ni> zf_WI_Uoem09Fq%X$0W0D6nA)%*>?Civ+eQY%(f>`$1qPGW41kcl-c$aYMj~jH0lWE znZwMsXAY~{#%!v#u`bM!L#nnT2QkkcPyx@GRlxHGRojnnFBnv9FEpsyUTjdcIZ;Yg z+qhEI_L5T7_A;tQ)%Hq_s_j+WYc=+^*URl~F5J;_JK>FTd)pfVd)u2aek`yPev)S= z{4~#w$+fqgf0PYxI?9HVaOWLm6aMRB!~em3?P9}Ux!CZRxHT6WUUjkIFHmka{JEPA ze};0g;eX@){^4Q+e|NFrPjG*8VRwy>U2NdAiw!Kh*tjLr zN4O7NOTb@UOY8c;wPgChXuqD#A>1(%jE@6rM%Tw1{I(kABCn$E`O)&g^G zEimiW0yA!{X&UEsYfWAkX3C`nCSBS%9+x)CpIq8_POT{sk5ik_q*I&Flv7LaI<i7~BdeoSjx9MhTtV_MS^E;yz&og^D| zn8N-%>WHv9OmE@dwmN{nbUJ`{Ivu8WI+slEb}pGholB-u9hmnzmQ3&CKIm8?{Iz`v z_^^G+^ilhgX}NvLbh>@X^l|%=>2H=L(Y{|C~-|K(}n^YXOtc>*oGDNhTZ zpQnYtm#2j<%+tb@JO`YT=YUi5955}<0jK9VV0xYdX5>2Hj9drI%yq!5TnEg~b--D< z4mdm40biW!fG^E)z?bDX;LCFy@D+fb)+9;DTcT z7&;n&1xEvL(RctZ84tjvM*?u!kpL__9DvIY2jB`@0Iuu`z`MEvaMhszTy-!2?>?A` zR3FGhL@0A6QiC#NBH{*&M5#ffH5ggB29XOewRsvuk*h(Jxf-M{M}yR5k0AAo5k$op zK{UxDh&Fiy(QO(*8gP5ohLOE%!${-WFtYE=FtY#5Frq&*j2KQ2Bh9B5k(N`7Nb9LZ z#CQ^8@-HH=e-S}YlZ%LXauI1ezKGm(d=a_j*dlW4u|?#zql<`Td=WV?zKHzb$Rcvb zkwxUr!;8pWwngM_+ahwXYZ1ApYZ1Bk5X*euA(r`vhgjzO53lX`7mhO9P%n<-jxgJthjBJ$+jtk|r9({M<%7(&mk%)8UctR;X12YCd)>fn zbK#CQFo8E3m~C&Ol+3mtE17LSLDewZep35MftTrg~?O3{U%S)0+M@ z#x{LA#x|W<$BL63<)2PA@DJyb5%qWHlJOJV-<(Up$Ic~;Ysnbvv}*}ib}a!Pxt8L5 z=vpHD)wKkC;981sI*h3Iaql@D37v8}fRNL%p?94Q!aGif@h`ZyoesiVP6q&bE{8F( zC8Gb9%K`k^kywefqgwuf;a~M(n7~%f0%H!s(x@Yb))>T{9Mu}%8r2%#9@QG(8Fd)n9d#H(qYmS#QHSxp zQHSyUQHSw^QHSxbR@72LA9gMgKI&Y;bSxQ{JC=;60k-Mm4z}rUsCKsLlXkZ0@9k{U zKib)*f8ti!*`_mL7PjeA+`lbs(`Od8>2nL)^o50OT1B*`HAHLr649EzLbRr@5v}Pz zdadcdxbqsc7^TC6N~#H4GHoiy36@NRyd~55xC?TZfbZolnZBR9WV#Sw!<1Y$oSe&s zskv-8Etd_`bJ=i4E*oa$vSD^E8_vpQ!x!hW;Y)JZ@MSq{`0^Y!%*kQHIXP_jsvI`F zC5H`Pouh@X&DO%)Y%QFdt%a{+XyNM_TKEQr7QQhVvvrde*tVvDd1o{*@3aQaJEeiQ zqfTnz9exeG)31T^CpB=vqz2|6*TB$m4P1Ck0~a0Bz$HgDaM@7}EF8y_AJM=SM>KHd zVGX?N@CaOG8-aJ*M&RnM5m?kU0@oZGfyD<$V9CJ|SbAUtmYPRknRx`3qYNW(tswv_ z8Zb&_09Mun;5t-!0InAVV3i;fQRihM>fB63lbeZXb21TKb|%um$VB!qGLgN>nMmWN zOl04tOr&Xzh3sErA^J5IVmPBln$M__mNROk^|Tr>omM08X*GhJQX}S5YNYLy8oBAD z8oBwT8o9-fxph*F+=e=?Ml8qG$bsW(;;4tzK>Hy9>j657>7)BlmYZyiz#XY7R zMjlfxBAv=bq^kzgU9*Vvlw*3!7m+@}BGNBdLE`nPonVdwdfMcw!UF{KOj5{KOfi`N=a(^HZl$D)ZB)ROV-JV<%O> zk&`O(vwqBTeiiV%UuAxNQf2-T?uAK}`9;8Pb{@x!AF~559kZKXI%+q+j2gF_UqKzQ zn_oF>H@}Lq+0CzY;SSl&uOGy?4%p2{QD(dO4YS?+Cdyzp{}}g^20QRmr5*U0(r$L6 zY8K4La6d0!F#iJg%kl;DuW-LEUoih#uwed8j0wR)MBaj#?0DV+CU?P%x}d?)dVYhJ zu&F@{BsFLW=QU^v|J6BK|D$uXevSJ|=K#LcIe;~t16b8LaN5={aGxu*t)J_(t)J<% zt^daTOXmPSRXAEdRcKq!D739BB>z-sfqy8pz~2>G!Y2xC>)&u6E3_o+){nzuufAhThUGwY;Ur{8_iuauOHREydF>wUC|EFA>Q7CH)c*&@Tat`XyjNztpmz zTWXodozN`-e%%tmr&~&BPPeo%#ZpTmKE)D_-5Sa99{yS6&qwp{_d20iBFrn62n&j( z2+>l@g2>UbC~~v}M2?mvk)!3LXsPATqNSF%L`yAiiM2aKJEjE4g3|-wtmRNe8khXF7vdlr*R+iw5@-`eZteWe!|84 zovUsA2UpwrPp-Cgg{y5n!_~Ha%GI|1i>qz@H%Ht08OPE3Iqr)rN9!tXjqU)xq$~kn zQI=Z2N?L0DI&3x2`t=ItKg)sE|AYdq{|yCN&pQ=pJ?~_oHR)ugag#sOc)mZ=`2DpJ z<3(#DM#|cVF=cJUNLw2*rmu|{H?NHtnQJ3P)>^>GUJDqr&IF7Xp9vT*ITJ8mb|zrF z{7k^eIUO+OoDLYTJRLA@ITbKoeJWtQ=48Nl?a6?V>kk-nQIi4Vb;kq7>yHJD*B=cS zZx|04Z#a@^y76$PX{!yhtt->C?NFwPcPP`8cQDhm{a~hP$AL`K&I6gId~>FWZ_YG9 z=1fzeA=6Z3$TXESWSYtvG$tWRsWFu+HKvLhjj6ImW7<`&F;$goOuGddQ?)>266I-3 zqFjxsCU?Xn&KWUDaMJ7mAY%jod2%LJ$rBpH#yd zKSn#LhINx_c+YV)y!W^oZak)j_u-n3s^R@d)v)2H8g4$ShFiwfaO=1lHjb-d(-Acc zA5p^y>aZF%qikxp&8CKLLUpO(o4bbLTe^nf+YSxGmP5nvfrG>F4-O8)cN`do?=%m? zcbSLbyA8weLBlY7Ps1>LuW}f^PdN<#P&o`gP=o2H8HPK`ae`qObqJM*c`$DnelTwl zelT|tehBw)?jrn14(8FEMflO|MfkDoMYuD25$-}U7U6EjBHWXV=}lgQdp9k@eYpNL zCNh9J!$hp8(@ey6nu!daiWoY{1nhn$VxMFp!>Hp-WcU~p89^OoB93vC3K>0uIebKg z96qc<9>+alQvpxfRLE1fr@K_ZGhHgeSeFVpf;wbJp2a-4^c^#E)M_jn0*>>O! zh8=h_*^a!Kyny^Tc>(ze?x)EMz|WEw0C(~Na4dNN`1z)Vcx&^>FJk<|9WeYI_lY}T z_#5tHcK|r;4gkyU0PvAJVE7RCS9bt2k=gu#8}q(9U2yeRrgtuG)!k=9M!bw*E2)Y6>Mhw9)_lO~E$vuLZ7%>EJixVTj!o&zLKQXeQ z6B8o@|HKH!Gh&G4n;0R?O^hToJ28UO7-rqL35{W9Vg!fgnCS@(5U$Y}?uDawLIX@q zXrfF`Xb8m2qcKc*M&e9*MhG5{#^9O2{Aof1{Bc4<_``(8@CP^M_ijy;-?=sC#-%ZA zY{c+8*NEZw1dZYM>%qUnA6%M*{^-&e{^*SNC#MGRI5mdJF^yqrOk?nlX$;e28p8~3 zc1&ZK!}-QWqK%Fi$o$rkC?`5c2=kpIhWU;W!vb!xW5lr7K4J*82MkNNV0$3SNlO6u zvn617%MviWZ3!6ufTtBXEx#5VqW$O`j%eEuxmb}BmE!z(dx9qSDx8&P~TMD{{TlihWEl}5R zi=b<GN_F04R+(f z2D|YdrQLWh?!Fqk@rN~bD!%c5Ghns%l9B%rlbGYee&c!CTbFt}|bFt~?&c&u*I2W6KITr6%W32sz zQP%!nll*3sg|V{shfP>ngyWqo;J2MD!tXj+aem*y0{+m!0{+;+0{+y&0zB<3V6vUH zf3jV@f6}7fKZQa_^y>Xyl#WE9-XAtCQUfz0H83kw19QUR{XXIF{(zpPU(&PmC-p4- zTY8rMFM5_fgs}AQAuRm|dY1k}Jxl+Qo~1vnXX!uIv-F?nS^9tIS^9tKSo#$mOaG~k zrT>?XrT@2%rT<*V(tn{~=~opj{hC6p|5BvZe#tkzSL)%sM_CbgcnNv%)Y zG^|hGG_0qu+4YPwcKzlvc74WayPkQvUn7|PWlQ3ps0?$~OQJ%Ii*Y%Wz8Rba}GtLthW|YS*%mfx14u4CdmW6~I zmW6ZEzR(bBqLi9N1cz$g|P9#=5;JV7R6?g@KR#3Vc=WD=ehG6~NJnHY$hLf#-Ql;7430@B&x0=LJs0i&-iRU9|`0L{UhRRC~t5R_ph?v|7LC z<<Zn@1J-Jdp*2`y_39!y;CUe!d@?TVed4Gv#@uDv#@s-m9?;U4n<$s>qAj6 z{-g!q#Ogd@eq|n5Sef6uuspwaaXF(gfC^50gQ1MZlfjI}KL;}!-wI|lz8%bH z{EIK6@f}}A~ z07DlH?PKH(?c0pY$Q|0p#IbUR_OWt?_GRMOIYXH2`F&Zq?Cg2qV#fTwOK_Jm=J#EO zN}k_$dGh?eE0X8;agsBda!{Kxny%cG(R9_OjHWG{GMcVNt!-|)W^HrRwP!HgGn<=o zPowIZt~*`Vbp5HirWu%#jmKLc-?#<*37$io=@; zmA1{8uFd;VyHJNBst#@@>^`s=s6McnATnj)#ITtlHPr2wHq`Bxk;ohB z2(=A$1Vuw#G-cg>&ybR5H9^qyD|AU*MS*Ca7vg$R7bZ6Da z>B*|c(Cam1z4ZDhef0VWO1-8Z7}E5IB@Jm}4I~X|237|nRt7aFD{2{ITOQQdLW3GR zyx4-^n~^|))U$Z-0{v6n2r{bt>ta31|;okzD>H>umKn*!=|UIk`aQ3uS3>VR2M9WW=X1AM|dogW3&=}zG0 zp*r0>uTHmsTjbUO0q&q~iGvAp26ZR1Fn`V()V+nG59;2g59y_+G;w2WxwuY+}}ce-6tWx?(evNg#5aH z1~Dr^zwQj~Qy-(@U$}q!7!9A{KKC&izVI*_R&i?{M#Go5uO=7`U*rBW!D#sJ1f$`+ z;+z0B+DSYc ztn0)*#u<$AC}%LrBb>o?J;Bg|5UDx;39W0etag;AHtp%q5NGNbOSLX5fx*Aryap&lah zG3p))G3p*h1!MRabr@yc!(kp}T|yJex<^PJolw?wQR?cuk}%y#bwE#29nhOpSKqs; z1o~E$g#J}qeg6t(V8sSlS8VmxWsGgvh6&l~2T6v4HiA89tGD|w!#*3vW2;AvkT@o6 zgwY9G{ixeke;DxBKkoL|KY@GFl6h_j0FF^-70Q^(yYQ4yEdKoU2`_IttiSZ?xM~ zZ{mJzv8jH7`>DkS{LErgxh*!;F~p|&IqnyTU-e7euk?P^uW`T8`&GZuVJ38b;JD6@ zQTSEARWQ`3-;w-Y!BGER#8Cf%vz&zKcp6B}23%EtD9|&;$z!Jv~1UY`-B*zc@nd4Xg znZwY$g?pRB(7c_+(EJ7WP8NgkZWaRwWhn`#vXsDkSxVsjEG6&(T}k*WT?u?hw-G*~ z+kj=d4LD7=0UuLrz~3k~;1h~X^9jYT`8)0(6hH7!iXT{^_<=JNzvffizbJmqzbOnY z>NDKu6b9i73Pbxv5<|O6vX;ake3`_E^HmZ9cog#2KEjLkD9;}O`D@7@Nw6P#K3qS{ z^GA7z=U>-@JU@o(uf^DEA3R5gxHjOM?uXBHaBXoO;M#D?+6Tfo%38AfIm$Rcklb_fsjHm5V9%;f>wn!%x6{DNCrJt!jQ+R7@EM?C#=A*+o~9L`xGNMhua5?x_ydK zmrrq+7*;4#XZ+aS3cK4 zS3XZrD1U@|p&j6p&t?((2;eM|00l!fAl)n^VekJlL ze=YJUe?u}M@)3@U=yiaQUiVv)-wEl2-wWwc{vf1dAVpo+A0Y+dPmqG(ffR&END;wP z)J+krbzYKbo)wtkSqZZ|D`Adjt()Uwd|YdtkLv^cTp!^C*9XjVeZT_OM_A#i&-;m$1UhVIC+p0gihDb{s+ zmSSD#xrB4NLULd|Sqe!!y5v9>U1FifJ3z-~==}Cr=!_(M{x&-O8wsC_iWIu!whf^3 z@XoCiI&cexP6+qbi{xD*Pohh{sasdm6S{3R9awK3?%%eO9>=nh9_PSHdbH(qNt{r+ zB<%K3dKAzPrb`m?rAttEaIMliad&a8guA&`pq*=t;8>*x@JO&W z%A>y8D3AGSF`fY#sxwBHXF%39f$5$Y0D30o2)z??vR-#YpL;ICH75(}cg@NAUFmYv z0M6=4ms_3DY|eDKZ45IwmX52H502H!hejjpqqT(L(OO`{S}Py14ge18K$KDI0C2c- z0C>D}0C=KvF3OXgbMhxUBA)7)BRt(PhiRXaKLe!KKGU9FJBB;bo=$kSJso(iJso(y zJstQ_dpht!dphu$K=008R-M6e=}S`kcwC~DV5-iyuAbK#yzQ41IqwS;ibB&towD60MLgtekrCSh%y z*qv~lXqViBq1rfzuogEULQqgG0P|`Agjai3Ft;`e!mSmxA+**2nid{nFvG?{B6+R=%$IB!g(k;r9lOvq(#dN4os$bma}1EL>%N4N6^5<0*g5FOywiYz3z zacj@&R&FhZQ!Bb9PP*up7&mj$f!KbcI=l;FR=VgWTw7MUs4Z)*n#`Ov2OwEM+0`Ua|D5)*xZV5AR3PzI_KX{8LTtA#SKf!gYpbu=f{CS*ve-H<-1HqP13gy-1V z^lE)ldi8$PYT7rml2)Ba(@I*r<+N(DeamV86OEy?Zzh;ly`Fu+G+@0sxgXx$C^m)C zNaWQ`sAYL|lWTT&9Ovxr4UNt2j-?OEtH}%@d9@+bAEi0epHNGvKTd0~pJcYW73GU& z^vx1XzFCZCwmJ;<%tlPiR-=$u?%8THNt=7Ny3K`36QOP*bEb)I#@*sf18#MuiEbUk z+%}d*u#Bb=4veOW4vfly+ehW1+pU-%SmlH}ta9K^t6X#!?ry6b(kP~_o{e)gcf0RB&KcQdIPZ&`2V??tx zDC=3+M6*!_MYDt<(QFjEC{0W@EJ_1LL}`FSltvg8r2&UU@_0hI`0*G|2;~@&T>K>N zDUn?Kl&D|)bc|<2{Tmt+^+zcB#YYtV;%61Jz%48N)i*Dno12#VH`EsD$H}YPaORM_ z+8mTuBQfBh9Ej`t{wi&U9MdkZ(tHyZc~va6MIH~4S4B&!QvKhcPpdkc zdVN||z3$tPSJjiKbnL4ti%NN^^OIXF{g z_C;&+%|yA$N81f}XuEGFxy3^x-0G1LZu7_hi$@mafJa8S-O~sBz|$Ay4o@G+%sSB$$SW(e&QGrQX-Xw?UC_e{`$dnahXeI6R&haMVmzlTP6z(b26tL{kP zkVh8fL67XL9`eYlAM*4?dDznz=MhgI;ZaW?;W1wyq0=`LrOP){-R0R>w`YdXx7w$*airiR5RIR<#e;C`^m9SD1!@(yI1Cv%B_?G(fWi9dDMTf0yoD zar<{+$w@4}?*Qhj5ymGxot*~+jw`fN1HY^5>*1*M-*OX-h8 zo`XE8zmlvrsXvZ9sUIh=l&{JNvQ^o}R%Dgyk*>%v%d*Oi(JG}eBr$dD9Iervb%kh^ z>k)@&mEzz=WR;Q-MjVu#yO69hEPOsLqR+;OT{9JuD6~q+dYrUM>1bbt)QXZ-NIN5B z9WorPLe@^JkcL@k6|!~65gI{;&@lR$a+#i15e@BOWDz1+MMPgk18$F~@2vKU z`Us7pKEgiHOq3?kOqBhinS}JBnJ5O)431W5NT69ni_;>aMQIh$2u2YNFo|RYSR~sJ zB9alzB3S}`m1a?2WgAM-S9ufeW<_5@wrcojTe#a+i(<+^wVSYDeiY2lcdF2lcYEx<@Y~+^d)Ex)12v)wDtb_N~wo zYFwdhY?+4Mtt{*_v+!Kmu2+ff6RW>9N?5m8W3-$rpU|*%yC#%$~$0MsGQ+s3^ zpjE2KCTNvm^%JxR_e@0{PU)Wc2Kp+LuEZ3sz9_ZMKAfyVzMe5z1(|G2whmf_Y#q`u z8fKJMK_(fcMYGZ>#K26s7*}JR`Q|!j%2A>yedQvO>dwAs9ew4f-RGjcuRM{e_C69> zc@@g?|JE*xtb7*|trC%~D{faWD?fLA<(0Ty`o6QO6w!cPLR$GQp=@1M5Usq5HzNeN zGeUsVCj_$kgamq@5F-;-p(ycoQ)CfIGGRiiQeh(1t5QI;D&5$MREVls&$3h)B_tKD zM;wx3f>I%wBq&Wt8tjcC3--nf^$N-4q24I9pLn;cy=O5kRHA~3)di;s^}%U^ zDmX1vg~(FN)g+ow>V~wT)N<`I4$Vn)p;QuSxenJ5lE&E+l46#n<$FmQm!-hIWhrK* zx16xtTTa%r+>2T1EswQ-r8ka#rMFza+FNb_rpud?X3kkl(oB@rq#1%SX@+1*nkhFW z(JD}I60HJ3QD_zB^(4_M0DRs?p+!rgRfOF{p#e8jXuvHLS;Z}MS;ej2z-@F{6s@(d zLem*f-Pu>6?vy2@>XaqcA*-m5LaV6npjFh7wbLrjM%hlQP`1yMqZF2iTFXoXGE*K) zj?9$Hk-iPd^nL4)l}mNeBsy6Xu}+3j$jULaa?`FyxXj^ue%zB*kNWo5byRkn-^O_u?| z>9R84bXl3Fx2$ZUx2(+FTUO@kEh}?M%gV;2Wx`Qunb3+#EfaR8mI*sj%Y^MXOKO=A zNi8cwrc2B8)1|^N-E=8IFR9X?mkz%>C);LBHnbVh?iQ1syPQ@Ug|lM@KSNo zGHC)bp0rE`MaUuPIje=FF?!2taSEunOd*V>6!s=mC+sEEi+ZD|MAPR^FzEPBP}~`zbR81z3`w6*62|Ehl8HHe zQEE7S!kR3MC`*Y6T%cC#9C~SE(iZRc|qW#aql@_7?L)J(yrmG2e&t zNQwy)l42Bua-*ol0x}o1IF8d>6syqb1&W;BZ=~4i#f*825*qauMNo^2aV4YFD5ay+ zC}pG6IKokCv2g6$DIb$Wsc=f-R5~T+sHeCxfnCm?C{@m$;wqOnq1`TTgxgzuHq~xw zNg^UQHDZEV5=~N4vmTG6L>#53MC|D)k!-}*Q*t&^pBEGKmY`%|A#VvvPN0^`QOjpn zyG)IuSf*lDB&AA{x)n*ps-(0&p`OzE1XQa%QPfGj@hH8eYRYt}<}9?7=~68{Ud?i< zFifiAOjZ)#3mQ}bC za7xR{6G|;BM~%f3j;2PS|8H<**3_~x>vU;Z=UH@2mzH((Mr-da4J&Q$C6Shvwo6M( zEb)phsinn80{YZavLbzIX_0=qq!6XU2z1jidP^XjK-XI$P(*_iy(N$cB?b5*X@pQ( zQh>`BN(noK(vqFR)F}B-Dxm;M1wfCNTCy|74qhsTn_99Rm@eMVoi5JX0FOIe%;QAM z<4j|+dW*w&S-lu~Z}GN7D80p~tubzlsmb#jDbjB*Nm`uHs-!qxPw|bbJ;ht`h~{KB ztoEEU;@nD4ah&CzVjv_b27;2}8+|Bh@r@p8@zx1y@m9CDXsgRxwAI;Dv~{efXzQq? zXscCHw6&9p>7W*EZTA*#wcwDR!mWCouBQ-CND2ueN#V9A)Iy$c0}!>42YCgt@*wYb z$MXu-vz_N9p%!lEQ44nvyn-D(uV7~a`8+RBz@ruxK-5A$4$aS1_zW5$oIpqg3Wd}- zMM7!}Nnw%b?21JaphP4gl!_!6g`^Nw7N@7MEKJu^cs4>^4~e%>h%4853(NK26t$=V zSzjeW1u87m4OLpG(b}m+7)jBtuntL4LY8DFEy`>c- z<+|R|a-B3Wg|rkUB&3!KMVK;CYBXVLX_;`kq%;hgE-8u9TT+bTMHKOR6XW)l6mq2) zj69>UgO58*~%58(!158--WPto;03E>8x z1mlqu-H1bT)b*$d%ykozD7kJ4f$OH8)wOOaz;#g*@D^U{jJU?>jW*^jL|q+Y%a}I` zI*;vrr+U;|_^nvIg;)JAb$Sa49o|Bqy{8bh#nMx_1(9I%lEN)IYT*_IwQ!5bE7&6R z3bsIA!4_T*hAR46bNLJ0;F_6Dfr2CsLprJQ3IX zQsP|aOCekzOu>nv>w{wG29g_tV(7*YW@|_su`GtRk?>Z;z_t}Jv~88F8`_otZ?zlZ zCG`M#Nj-$^Nj(vi9%x4#FSLW=g|^e9?Vx+3?4)~ve7YCP&!P%Y1smZ|1!Q~!^k0I>|Yy&`SuFdP!j=(sNFBAw3vNPhnVo8zWp8oma!;I+<(}e_P?)5+BqS*=Mg=iNK?zV8loS{G zP*j4zM!`PIs}*yj)l0a++JourDI~kTv#0R-j)?0zdJ3=WkPvb^B$#$dAveag z?UKT4+o=&2YGESRSg06;T6i_!6J< z1@R<;tPN2GS&49|0#r7NgUj+l0No1#lpZKMsRznl6+_u8VkkQ#hO&JrP_`!p%63oj zvt3jC?6E0+_GmXhyR)00-O&hImoBp}dud?JM1w)ouv214X*Opn2HNByR-83x(xVyip1$UZ{ZXh4=tf zz>k$h6+r6{WKju)SyVwGhbk!INPuFFBu)ue5~Y;elNhf@P(~u;^$3JeB3^+ofpVcY zPKD4*LM^O7i7+KrNfBAGl^W4WEh>sp*h$57P>UkGg@vegZ=nDOwRG(sR9%?#@G-y#06>Gl!7!)Nint&Pm(3LuF6MO;F5z`YK-~plmqOhbVRu1T_&!D4 zrSLn|Wx}a~%Y-TX%S0*s%So;frSPv%U^t2tK1YYi(WOMwr|?l%>c#O8G5;!(Efz81 zYKs`tF6N`I0lN9ugmrZDQP+lbcJsNoTx&PsI%_v>ihuoRyc@=*qTJ}50=7D*Fs>9R zY?~`3nmYyJp(awGJluAVIH4ULafD9{h3)i-p`AfYeozeMhq{4+P&ZVt9F4!+jali2 zAhOkN2wI)OBzYkLNnw%~C`$4|MHDYo9EU0>4x>{As1lM=IyEATDnOMHB!aT6$UBz; zjwD)^M1aaCVDEKyW>Ez@=@I#KDzKA61xwz;6fo`#}*$p;5&7w4{jCBrz@}KNUw!N{LvV+=)ur$jao- zSjj7s1j_Oxu4^X+wSu{5r3ofrO(e1D}Yq3^A9owEy8x+0dl zb|w_++KH*zc|j28tJ!&hCwb=u6UjR-a8K^Iz%{w!0%zBb3&v`8TrgU*<9pU*9Gb5K z-Amy6qcu@39IM%J;aFEf7mao8xX2le;_Qm%>e>-)atCES?#Ug=-$9Cdaz~0gd1oS2 zcQR(8W+y5&0h*^~U1`1=lCGU;xO86^$>dHtDj2~CPDX?#cVd$BHz%^3oFAK;Bt7~z?Ho2f-8Ab1y@2-1y_-5fu?XN{4GMv z)xs3u8c_;xttbWHDpE+qe6B*w&n44|`PbpD*NcH0^kQ5$|3)OStw=Y<(#=P0L$%{N zy7`zXK98((ijT?*vrh51hmB70fw2^52bnVk+DVe{N&yO7DNuo%WI_xPJYopN5A%s3 z6qHC%457B^yZPJn;s~9XkJ=ih5c5$thKa;{f-r>-Kq-9G4Jcj;|9TWRg?}Aks^B`# zR6%Z7)>HwCOYg=|x(lwQhzqVw!d#OiF1Tj3CV}LFYrz)RUZl>BQvDOK=xYOzyncjq2K&9V5%# zMPR#X2$`;$ote&>oh)a~P9|!sW@pA&a>Quz&doT+Xfi+_o!kLfCwGvgTPHD{lRLuF zIwvDKx^~b=QaidxYIaaNYIdZwW0KozFqWDfC<>6ggA(H+OEPY9`$Y)mLS!<|_mN4A zescTw^<9MT>AT`wpzp%yYPO@!PhgX-X8R^x^7c)NbCaY<#)y))pBH5^?>yXpt0#f~ zR8In5S5M-)^1j|kSyvwFt8?&WSyz;`vaY-}eplY=IrxI#MfjZG1$@Tu!fflx`)pfH z-e>$+`1~yK^Rli4Ci6bWeNjDmPFAZYF}0IM0_GX{wd7t<9$LGvIaL(DR&-q^8>%N=*8R$m-73`jc zSkb)=~ajw>f;TQ#|8r>5yeJGJOqHI1#FUIaATK(3i?(Y=^l z)4f>RW_+=B&G=#pBxdLmBT?Wfc<>Kbki?3b}s?H z1e-AZrf$Xf68)y}CA+BZ8DH`%WOB)`TKszRWYcdpPcHe*mKnd@GP&fpTc(lUZJC}? znqKnz7KW|UOAK4Pcbx}b>)v&~V!^xJ$ijEWn|j_IpYh4~uD!_QuDzd3?%Masc{C_O|x|W!SrMIAIxBfo&R7#_V|NUVbkq_^y}8mZI^X_U|KXD=|8aS z&Q5!W0mshRA9r>Rs+R8T1Vg~LM^iIrl?;X)R`a*-zlKfxedn>sW0waH!EY@OWIqA+hA-_=~gOr`NAzUH_2Wxa3)YXf=w7m5efN_2ig}4{#E_U?41T````wyp z#pL4Ot(jc>+tuxUvw9r)^{R2?SF6Sq-HUfot?XW`@9@i&-HU&@a(dA(S4=PZh2rNc zrWgHu`ShZnDRy2q*`|BhB%)h3xk%>&w zpX9TK53Bneoj$Gm=2r7LK2g+aK1Z#l!>T&RwtQUGwfU&3Yx=OFn^Dy{w&kO$&+$=h z4t1Xce5`8t9Bqh6hpI-5J8Hz_oIW8Y9iLD$KBXp+{6`bh`)TtD6B3;lG{m-=bU zFzx8{m0^0D>W1mr=xK-QYkGPP-J@UA-J{>o-J{>O_>S&YjE{atkB|NZFyo`&xA=h> zZ_{ALksrBn#pLK;6@TLBR`%P#lK!Qy-4*d-}D?N7wytQzjPA$<w+wAPS9RCFMlH(uslH>27R&xAJ@z+`j`LUX4YE%=BAF2t*_Z93fWuN0a#kXaj z<69Z~M)oN{ zCFJ8&0{JMFz>*2>L&XQl1owfsZSRW-ESlinLwwx3s)&!Pws)Y^JP&Xr><5ZP^?%#SfpzBZ?c{NZPd8Lhxd!_StK^@m7q~j`` z!a5G~ah0%-do41DsE_OPdeq0gF1C9^^l@(_XS|v8DH7b9sTpsj5^dg2C${OGbb@;) zGg~#2n2}9zs&})A4khkgRj$Onr+7bCLO#fqxDWC(KFpW65A!+)_(-1dv8=<&I!CR; zCuJR0(K$Y?_>j-4KF8;(n$Ph?i!WM;7)awbXk#Kyi_@_qdT(LPVA%t_lYjY^eh_3^r*&x`w02R?k4ThZiHIejrqD4>5y^MdAfb$$j-~g zTTCwcnQHmuqMs{%v3zpTFP7tu1zoF^e#Nw+d$As@>|P9A4g3nholfm`zgaatqoW6^ zy%0JgbVjv5{vNty3qzuNiD7-adF#8E%-b-I%-=AMEZ8`{WWmNsY}4eDg)MqEO(VVc zOgEvPym@*_-{$UJn_wPM&|AivjHU6W)*f!!I=-uE>*TJ6W#fx~4}7!z&NsgJcfRh$ zzgyb9__r;7vvhh<(;uf7{dx|+a!fYu;+R~ti(`C|91@-Nxv_-7vbN8Z=;_nZ&;Th8bBTTbWrYgXs@F{^Vl zGCIc(X`SPH#a~h-PW4@?gnXMSao;9O+&7A^#S&5%6I?x-;JyNp1ovem!F>_NJ`X35 z&q4|0(~z&}lb{c&1%1fJ0U!5KK-cu4Ux$3)*Kr^4I_`bNd%O;F>9}`Yr4djC&eF&` zb9kFeAa8Mrk++z{$eT^RkvCMdZ{+nR-NQcvW8-2Ct~7((ua)cyIlze*Y4c z7=DRJ48Pdo1tNhp_~EUJa)Tc(*ZJY+5o-AP?Rc(EVKr)4^=yrr<(Vp_kcXb>@N`xF zk4#tP{|0J!8q{Wcx<(B@U2nw?KMfjlAbi8mYzvhb2G4fVCx*duNNM=FR)*5B>Ul$H zPG!2(LN`)YY^8N0TbbEjV00L#8v!r2@r}IL;w8>E@{$vK+37=GaVADyam{$ul~9yM zD*TMs_|nL0{u!_PO9~zLx?jh=5y0LI=(x9n*xNxJ_jU+-C!|yOxOYN6t_s3F?%fXW zMSRHnkpvb^a39R!!)Sv0P{ckG6HOnB3GU-$f~zG<+$SJa;yzWSOWbGa68AaCl(;Vx zUuJZUFS9zwSBiR0=lELjOGkI%8wCZA(Ruo2r~ zqfeo8?66@5u|ek`)?@z?b&h|ECGH>568Cq--y$XMuaOe>V;Cg3MmWL!5W>C>CAjZ{ z3GOe5kNXY;ux|rCb#Hpiq~;p0@sW$Tsq9D<34xlxX%Em<38a^BQ>Tp zQlm>FAJd7ZkLUzuNQ``F@F5=SuYdloSW$4#lK6SQIfy-6@6*AqSuY6UeoK4*9|)44TEn4=Il2WZ_&Py zw;12Z+el*M9S*BL^NILER;ad(78j0{JGHK%nz{2h>iKE^*(dOWY6X64%H8o#RK4#eE7o z6@Y#P{+`n{`2uAV_ikdQ11epx*$<&7{#bIL-U!`M?ULv@ zK1%K|KB@(}8MuE=j#9f|x?Lub?p>y_dDEjiw?KWjwGS)r(34SLhThy_rc+NY(mOER zyP0SZ_J z+URTAaf8pX<9eTC2awPqL_&wH(K-GVRYXeMKULup_YcM2!zJ$TA?$CV1oziqg8MO; z;2Ht!hd_e+!SCa~Z}Au2hkVETxbIv(?pv3S`^Kr`zIN)kI^cBNSDcRf5->XM3r5F% zPJ`0OXLM=gQ$qsz#E=;IM4uR`>3zt@df&*$lyBrC#fOA$hfya4% z;4#IcJU{R#PYpZ*T-d`dYGAV>=aTI?r)+gUG%oyO}GE~EF-qLhZAT0Z*Ki>()xa%Q*NXF z_eKA`U9ugc1|ID25KlGbcnaCf^8=gx*u#Fl%_DvudDPDjJR0B!9#cFX5SyL|hyzaq z#esZ_EkSW$O9;rwlOcJwusrY-LJd9@rUs`XSRq0oQk0*i80DMusVs_ZN=cY$<-uu{ zG6Tc&=_WiYt1~k^pH)1Uf%%#rdLCr)3=VTR*qVjeTpW5qf#-O6=p`WIIUi>IS7bc@ zzgnh{N`*&Wt3Y3v=?}P5;BJ9>2I?GY|G-b^B&eUDt^$2Uhr5f?W7J*)JxA?4AJIP4 zgVb(RV-h2uFr^XbO`j@0<4PmYr=V8>=vdIVQ2*j}sE>Wc<8B81tgdu5=xl0#`%dY1 z(Dl^b2OUuLV;CxBYv(v|6I+W4ha60a5!05QT;wxH*d`Xu^zBH6ZzA%(VJ~t#rKG!EkK2v;3 zB}P7_d?TL#!Z%V=eB7W$K59@SAA&kH@k2esEEVwRK(%8%lz;k-e!AXK(xoZfL~W8|ri0 zSdY&sU5mH5Uj1B+vzV7nSH0}@bE$aQZ7O@&8Cv#wdB$~lZJX=!+8H@5+bNyXZqvq` zcDruKX`61$Y1td|oxJRgiktFY_9hv-S@yCwm%Z#QO>y=XP>Hj*w#ZcCY^I8Bs>ZQe zoK@XcE3&uMi|p<7B6~*zyR%Vb?<8dQt~QkYE`qY(t;iCTJxfvcdnn3&FGbn!qbU3R zdcfNsXz`$4L>@ATO*w;zY&OXDhYhm*5n8rCO3U`g03+KU@9+de4S+m1V+%(OY~lEU zElz&mNySr6e&8t=Hs#_6rd;Ac0r290q$v93CfP3!$N_nv6rcuG(?JS(I>=)oe()K^ zvtfSl*|0eHoGKy?KHnq{mZR9#s64n;lm}lxsG%2=*h@(Yc{xQ5y`18QUP<#quPQ1T zULg*>mJx?u&th+6#i2KH^3a=#w{r5(TX}it?L0LM-jT7Y%n!d?=7--?RruleDb_>s>DAM!cj8~K6)iIFdXJ~8r@zJ$~brKYb9 zrID{`9rq2bHUu7tY6h@5Fv^`M8G5$NdO+ANN-z!TrsT{oSA7{t>|b8Ax#d z43@ZmDTtLNY*mRPR_Po&fYsQJt96bY*I+xX(K&WX0AEwrdY_|fgUF-@W?k_GK_Z@KRxNjk!ISjHH=W}VKPM1c$f?P(~oEZ7ikQn(w(adMchqIZ` zjer_xP$-)rpFeKM!ynh>;g9O_@Q0u#4}VY-hu^Pa?^VTN`2X--MYYT$@09WX-*3wl z@>ZT2hQAMQf}D*0uDqU;(chofvf@xBgT0y&5%@a?UIrF>Qx&_hT5NMeCEm2L5@*w8?0PxQUMG9!bgk@Vug!PTveziC&S{aW za$5GPY^Ne~m10At*p$i?JH*lFE7L{figa;Cs>sYO&Rh0#<6Ie zS+9V1%*$L7^)l-t9l~A)Bo*j$$jdYZy-YHwZ5Plo$w0Ax27J~sNk6vUul=_!@oTs1 zQonXim-)5-UO>xS7Vt8cx40tcZF6PNJ4-6)oh{^LusD+n#hDEt9A~Zydy%WdapvmC zjB6rsMUlBiac#7STo)}e*8{Q0q{Sk$F$uIRxS_+1DR0wFDKBz!+RNUO_OiET;%p`x zXE(LDEf;TddoIr2o-eX@ve|Nxy{CfRTPd>lR<-u~s#^Q~RjvJj zn%4ecO>2Ls4!rhU!)xE%@Y)|Hc>5!WXn$1k7$Mppr?4j|(f$M_+w*#Ci(bYIvK>5$ zPyuNVoed?7Q`e5zII8IfX$+e@5s=K2@NsZpgzmC7acJ z{-`Dne+a7L@CQ|X_dXssFwDggkHNf*xI{EV!yFB>wK`|R6V2W&^Ek}r>YV;KWHL<+z)TOb zJ!CP=`7rNqR%UHYAHoN-Q#0ibdv%D0X?Y$Xp(o?XpObxhxXL!g1!(aGbdWgyPKl zP@GAIAe(-gi-TU~;(!*pD4=C71paL)_Fo8i>;k^nA>MxhAMalWT=D)%MFO7Ae=ots ze=?DaZ&RF!E4=;j76Rk#pzV({+J1p<7o)ZPF+-=KO=zVr+G0&{TMSU%ImB%-VunD( zI}~lgHpGddB5sQ}d2R8A#};o0ZA2oDB#1boer|sjZK8@Q+7gtuA53n;I!e1u=+Ef2 z{gZkxvQF>qzrdhHE;MKr-u?>}7twJ=vHzl`c>l$UBvVAzGsXT(I4#raQclZU%6T!T zmjRcxxZLGsu5fvoEBQE+;^WK)KX#Qr&Ri9k?dm|0xjI;6t_c>IYePlmx=@k19)ycb z8bpfBMnucr0HRv<#;BIPNz}48i(2-Uq?f%_kx6;kO(5-MZ%fCK+tYFO_6&AMCeGfG zjk9-V z3G;)mgvBWJXNWlbc@_JjDq=Me%@(j1dACeq zGR|p~)p>acKvtu?hW!d;wUW;$qceOnqhCWAO$}92)X=L+M!%Az5S-OGqnkM$6;Vc` zoQ~j}##zk|mc!WdVSezr5cX_{8hkcL4L+lIIzTDpfob5E2TF)IAoJotQ6afR1ns+= z;=mN_!T^Uo$?*eEqMaEvumyH$iYJu4+oQ0DQ}%J2^`bqe7wr!zyF19}2PoctKgHYc zqj;Rt1aH3wc7QEA!Pb1fqpr2zUIRsx$<17beI(>^8M{S}vo}L7LmuaV7w2)-%c{~D zFP8SQ*Qd3}btx@!ZK}vzn=CTdsKg?3wc@I1k=YQ9GaDjtCKZV@SBB%v6|F*X=5obl zK`(M?(92vBz}EY{2ZpR2z;w?^8|tzzd?$yv^>N>*@IWm^R6Srx&0rm8Gh!Ri+3cW0Fazs0=6`a||V?8tHv7WUJXXiY~IXRDlw4MX9+jef2w4Rq!WJ&ZHzQa7$ zb93#^%L&$KtGr-c^IvqnEFf!Tp@U?dD62@@M47b3I#o!UpomvIws;j2tAawZiJ&Ig z5^c!-M2+m9tdsrg>SX@~4Nw1tfbjNTq_~*y_FqhS`!Ay6O&3$~{)?$%e^OuUUk?n$ z{!0{>(naJlTFW4embskKGFLEK=1LBDnUvGZY*1X~@*-FBUgl~(&RhfhapqdZb^bVW zT>uoB>w{Q2R75t0ip&jR?8b{Wm?`jFQBC2w;@vdg^j?NXGsUY(3c*<| z55AI=2VWL3$m*A(;vi%-%Ik!@_cpxtdm37Mwyw3`UDMj{s%hncyGUW4hK+Wf* zmIaW{YA#pWyyL@S+brjW9P`iPja>_SkKA})-&@S z>*~D68UeXZq&1>ABS*G5Jx5wk&yv>DvXbT0tYkSwadK9&tjf$dIU{Y8`nzyOLe$UO zdxq0e(@ANmgJ3za!wD(j-|$$DS0z1`PA4QiZH^Z`mg7aTT~sowj*Cj>16a9_#OVO`nyx39?NM_kLC2J$8v@u67^uB#{yQ1g5^xbS)wo_DOk=*N|v(~ z=OiV|IVs6kIl%W5c|h7? zdD12TnY6`KWzr@h9-9a%9$NwtY?D>NwyrAJE~rUO7uF=(g>|z3BG4fFFK&4HlY|#p zPsEW+sJNooe~G@>e57Cy4Jp>;l&8v{$z`%2p*$&`xGMD3wlh_i+0H%+KUDm zkqxq4re%AHrUt+?GvjFn&lS&bJo2oQN1k&kGX=~QE^(mD%L7{h%o7SUPXwsJmlQ9< zOcA68UkT!Q;?)q}^lX4q$ODkqh+iIfS~1Pb1Jg=gqs(@R0|0Wm=)^e<=Qss~LODIf z;G9NTP0MzGGFmww${S=%FWR5bi}uGAk3n8jfVV$F@%D!S!P_?zygf(o_J=^jYk#oe zwLee?TKoN=rnTQ!)7tN?7TIj2$lhHkvUioSJLMvKhg?MGW4Gmt?513ty)_$WZ^>Xc zXX5Cr?WVMsy)o@&Z%BFBjY%(?PHNfffv9D#6SeHMQ7wB-RLfo+DKg-yFt#CFMBuy- zKvu(fBb-5A-jdOmwq!KQYTnC0PNS@LwPdwZ%K((skkd@D|3W~=`!As5{p*0i+fMK8 zUx)UVu=|7^DC|UA_Nyq9JvITi`7WmM2)nq1=UuPbuFk!*7H?m$-1U2Akng5 zjmp@0dC#1nmqFhzJ(iO|l(d{UhZCaYoFLndi%8~UBa(TgA{3FZ zuw*{w|B|D_l0q;a6`I?TAz_=22npsRf}U9p4|-+B+W-Dj&_pfV}Pq2d=EN*7jlv2l`hhJtl~JHM2_dl zHYe~N^NGC2d=l`t63i#H3JB(KKrpXToE(tMrv$f!w453uEvJP@%jqG~az@x=S*ohu3o$#PzDMl>Z^)}%-)I6qBV*CHP4 zT9CmevVt|16|6!INY*&WOI9&Y+L~n2CdwXL0+c$_r-hVkT6#K6*Xc=%Ntz}Y*4UCq#it!>> zb6(~e&dXfu#IAFBnd@C%ChhVv8+k8t10QE@^kX;qi_A@dB6D+~$lMw%GMP}3xh-5| zZU+%9dxzrAsFuAes%7sMz3e?n?B0}@y$_`0?EUFD`vAzq*#|*3&OVflv$)kIF^%v2u}pyj*0TsA%mVUscq!_AQ9l{$$;2f3o4VKLrThK81+(DVQlJ z(JleKXfNtz1kDo$*j8e@cP!Tgh#d-+Ivw zxs9?L-3Q_Ak5N22w}Cq&&Ae`C?GH7y_6O_up2-8XB71)oyRTYg?}NK2a4!Y!r@%cG zxyarv$Jx8{arQ37ow+!B2gt_R+p}@@whX}MQkk?DOL^H_Q(pF#q?WxoiO;ic6!G~M zoN>Wf*T#sJO-HmWoQ1);*tNP zaE7-YFj^+r;$phk573#QA>KSAyZ~i0D_PFUNR~4d z@Q$P<%b97xvN|nTA|NGL&PWNC(^G=wG|-Z{r-~lSDIHE0Nz1AzX$eP3oW0E+i2L1K zJx~4a_^@O?E+m3l&{$Q8XLNFbyILIk%*MUx<9VeJ( zcuWU!9@BCa<1x*NCQX647)aAL=}A*N$rxxNP0MGIjLWGR0ZQ7Y*5CcR_X8;jIfx=n z2P+Pt$T`73@BH1NdeU^5o-_sZq-jNq!}VmFBMctXkp_?Hs7|!UgbAjjS{zLarehc^ z#0YIxGLk98NT!vXiZmbVB+bV=N%IMc6J4bFBo}E8D^K`*g3B|bWgZFh9%Pl@qY%ui z{DS#p5D?6#1O)S`0l|EFP%@tpl*|zjlFVno%n>3jkq~J)GfY~}3VST)L_C&rBOc3n z5y29Tsw7Jkh}arYvaCsx*7K93b#02YP9PrZMA~DGsWKib5J1*rjb{Z!%t`Igj3HSQ zdC58nWXZZtCT-w?vd4BoS+HFQDw6FY#l;oLmaGD@e|?SYzeI6qokT9Hd-^YLc>1pZ zgtz}nBHo`OipT~^%Ydu(TIL#qmbuoTWv-*K>uD`>J>zB4jF;KSd6^qHFLR?a&fMgR zGdC-4;p51ye4NSnu}y(Ea$7LY+>R8PJ3>X~P7p3KcZId=-4QGs)w1_Qy~w?y7r8I# zW$#aV*#}Zy_Q7GaErD&ZI+e=K3H8=T6rGKb%Qn^nVe*stYL|oU`tdnbgl>Ida&Aj8^tG{V|?qiVVrk9Lh?>2&Q?+(lKf^ix3ZxDiU8R0SdJ2l+K zrn=j>S6zeEG{!bnjj^esG0w$b)@+-sF{<{G3pA21(EcWk(f<=H%WK-~o!1!mmNmwG z6#L4WSb^_cOH zM$C99QZOE>IIK}H9!5xQf&^(=L6N4z6-Q8{=}4d_O-Cu<{YbsXbc6!l0n8&uD~>UE zOve}m(=oJQ3bk0t2&Q8h!E_uWnT}^9(+ONF(tILEnon|)=CG4AuX2*+lU*M3DK3xs zRF}tmnoBUB#&_@w<}>_~IpUYhs{@kx%z$J*D?nP#4r1p7Nz1uG(sEviv_w^5k7W%a zSk{CE%lVOZYoh`(5fv;GqGX97q&1c#twPd+#FHLtJms;9DZ!cmX~8-PGJ_MWhoy*Hv|?~Q8N z`=Va<{-~FIK*SzQdfA7PUN)D)HmBn3=5(BWI2~v2Oncco5G}rcq29-U`=3cKzNeww z+qfmFMQ)DFWHp?_+@Rz%%IcP!zAoTpu0zdJP4>~L~veoB~$Fb zf-d%7j>P*fGsOEZ1$sDl^7gM+p`DSoKdEX+wu?bsu)&TAsR_0VRcIdt`zZ`|Rg-1X zmH=pv1$!;LMm_fO0qITK4(G5H zoS^WSf`FNE7~??>Wjv-sX^-g;nnVt!N#r1!G#zBvwgU~M=|F>ITn?1pcz|9)_SZ|s z{VCxm*^d&CeJR1XFCiHBAw0<5glA5WeXURqHr&R&8XDx!4GmV;7{Q-@qCIPxHha`G zKTTC*RE<|PiUK{}s#2g;zDi+6xj@e%7ihq%@-eziE=D(HW3*S5iP7GSdq&z#H>KP( z@PK3o(M@;qif-B)ZKa{Ts)&Z(9zLR(Ev%up#~0RM5e+>aaU**~-2c{|5jXOusJrRU zQ8%(z)J^XtVt&!Bh|$Yb$r!ELI~l`LF?ye-0=;h<+b><1EmNTP&uENDR%1LMt1$*Z zPGelII54L%9++3TjR)r4#^uWMK-rBPB)g3VmEFdJ%WmT#pb|44s;b6}hbe-!m~lm| zU|dlz7!PmNC>W1uXiP^oG^V2n5;>Y6O~(+VDMWeNtfV}cUN9Z27fi?L1=I0*!E}N_ zFr8?SkdtW16s9H9Dq1p~%t)qF7|C=hBbiQPNb_kNX+E7J&1Y~PB;xd#S1ZnRddz3J zJm#|%=ePv(xjc}}=kby`>c`gjNeehXfUOOZ$VAX%nFwLAkjD}WV?tQ42oWqEkq|K| zAqkPRswR^pvM%Ydu1k5W7l5>2y)Z3UFUkPPdNIgK)+ESD*7b@@@)B~XOxnO@Wzu$e z*<-uBEZDB70LgY`6_EWP1#?Bs)4u`Kh5oDR%3RS9&|GmX5%0f_!mg*{{b_x?f1|$G zztNy&ZZK$>8)+?b6YXVgX0Tg0FLMhQXKv-kiWt~hg>;&wjHTnBe9crWJi zGS?`sc6yPkoL*!D+z|!Joep%rL(OPIM@B=JMi~v+T(l*Lxb0%l5NsELx?sCdrDXF3 zHGE#Q4&^gxn*>TW<1;3l%L2+}!5VAwSYz218PYnTN|V-!v}94OO-Wc%vYek3kTs&v z6peZ?wClnQ=xY-x^tB1c z`T(H{#rm3p?!KmgyARX!5&jOmrmx9W=$*w`=$(Zt^b%aG9TV&QA3?`@{|_DOb#-E5 zy-Sfo?{3?%J5y*g#uPBF(CbDteV!Ixr>2Fw&#T~_Zp`KG^SNTkxGRS7g}y!Jq@ni& ze(XK^+bf`H@&`4vKj@xiS;*bAcgRie6OPgQf(W)>B-XTlG)C_qEzk$3 z!~z{?v0NZc(<-;|5LL!)JT&7r9+q_*gGkJ{A{R3ro{Jfe z$j6LF$}!{7a?E&4xnMk|QZR-p1>;IkEf|lj7L3Q$3dZ9>U1K_-t}&em8XD6{fFMm_ zf;6onJf>BY$8<6xm`>3Prc?ET=`>&vOs5+p(;2j6iqMj2wc<=#GM&jtrn4B*jBup+ zY>qUa1Dqc7xvg9t^LdJ>OE5=y!MsN0m(1sbfMi}9P-hI%G7%&#u@LYeLfC`EBOXMI zdMt^kU`dFAWm1$Z>yo4u^E79Rbt%DmK?-II34z(7bG}%g#q-4_Imvoy9+0-nWRLAK zS+HF$OSUV@lI_Ye*?(n)>`zrZ$cBoie?wL1ze;g+Rp`IE2BiLLYEu6taQC84BFQ?5 zTwEvnFRqdO7pbabKf1$FmC(HoxZkl(x$6NLJt^b6lv_W@YWq(JRk0%z@3yN5G+v;$wc6HLd^g6UYrO4z9x0PNX3repNj z(RvSpc6AhK0%(7yJYk=AH~}Q%3PLglVgIM>17S}HJ44tb9tf&2qa zhO(^aqa=ia#j4VHDv7HEIAK<@=IG5XJ$82u+zI!3GZOvh%V zV)PyeJ&838_qmU9|2kSU)9XWLN75FzR>&A#CnNNu2}DOIb*$;yO&UL?%r7# zcQ3(cX3(16CPSg8Nnhxh5$hqS7DTM4sWH~mrasm)ORcMCmTFhee@UgQ=YQ8&4^jPh zCVGfgwTT|^e`*swuG&n38oo>o+> z*Gm}9^-NvKSZsRc-xAB;)+Zf8ZjVp6**?~jR~AckZA5evj;_*!W5o8R_Q&a zll2}vdl;0tgBDC@s2IT%VIa!DFLF-U zgE}+r&64@dkYHXN!nu4#5VBY>pAMZF?xFYv^C@sIg%`}LlzS`Ckxz1Y@EsTB9?WrE zOGk#gGK^$877@^S7My889n zHMBQa=mVZWt5}~W5bJXTf2?oJAM4xQ@9x{3Z?_xo?%R#mG%a;$nq00zugf{x>@L{R z1KU1BM$LhC_hK!XHP^dA)7#9k)=b;pJIcFQ5AjpA=HYhV-93bgaQFPTG_$s=hnP#f zt7jIJy;BQ`R@JG6Z7LHBo5~XlXN)Z*AB33)^I-7R-{KS};p$V!?kb zIkDh>$J7GiKarYRfORb-=8_&;xP21~iB6e`h1)i@kWgi(7Pjl^A#$p*9wIl^^M7(< zJuX##tY>L{qG`AM1SU`P>@H6=jmcA3xvSUR!Bg()^_0hYJ(aOuuY#{k^zzk-USD;h zcf2~)J6@aW-J>?uyJx+t?@#rvzCSm*`u1vc_4xsz>03s)k-aH*-#$R^?%P)%L-sSo zko^sXzWwP!-vNNp&;h_{=;gqvp$`NuH+>L~9qe}_hxpy}AptjiXdp%(8dRvW2AVfw zc-~NEj>94aELxz0iWOpkUXj!o4+kmih_u^yWX5egD&saDopl?J&bf`pfINs9Lo&9q z95WtUi5ZWp#?ZV0v&KnvjVavFn8JhyK|2jXFr5th3`#JaN=c^E^w{Zo$#jN6GDQrM zX|+KzokdHgvuVk64g*N@xroPn9w(Tih-6;l1f)fEzKgV+@A5RQb$KjndF<>EzMpYc zkVMW5l9ts0(h>?_8QeWEdXpGb_} zJK{!`h24lh?56!8MbJ&}h2VXiy1!F*dhp!SKeGpfouIlWz|(8qcSy?ZuF)7yq9^lVdOqG!A66Ft~moo}p% zXquz{b$-{@2Rrj=Y9X;rE!m~Mw`Evso^`&DEhIX%=G}kmy=x%>^8ZbpIotd^wSZ7% zrxt8eGlwS@5Fp*5nZIKT2#{hh)m6I3Qx^%6PlV&geKYrC+5!* zn3zul#Y#{-nttJ){KvYdFbb;j5!llWng}bG?dUjWgrMr6E$XJgjgLyM!J>KkC51*ar z@qye#&p0yGGoGL7*#qh7-9zr`-BatWKD`UNTRVSMKwTWJTZK`(}s4E&>ePC}u zxcl~LMY;R-reaO|P_e#!^w_?J0!C}-{S^B%8u|bZxak0JV#{4_bPDPO4~3VNi7=t7>l3s#**=xgNtBG1DnX!E_2CnNB4n)A6)qI)N4t zoY8{mSc70%2|H~)P|p#7LK*?hhi<-&%Qg<0 zsy2mohiHe`+$oOr5U_`A)73+i=O9llY?Gf_NaQDG%S|jKa%1hXV+*m4F4y`w)3vbO z96hh~ySX}F^Sh2LQa?8{X?xvJ$t(5Qnp^+n_pSwmO3l3go6pufo%KF7pV*ex-0ggC z=J3RPqSc&PJT{+DwPrBN+phV9itn1=6~=>%dIRYeSFCo0DN|-oK^q znzvn4*S!CK8koC#d1?k!N%v6&vJJsXMcJ+>f+*t1(Am3`DcTXAnlRVM; zr}9+qpUYFddsU`-{nf6%y=!BA`_#tz_N`AK`!%Ne_9qH`2M`)MKxydZl!iV~ub~e# zU zc*JcCR$^E=W(0@HZsVbOxABm?+jwv@r`^VbGAfPnpfq-13f~KXyCLYVNVGr)K%_t) z0Kze3|4@wHKjfzO3%coj18#bsfScai@235{hThAiq5tI6(0c+-L+`<9=y3+~F@-)K zjq!A>k2hdmL#)rMcQ<+T8jRBPVTE1~Rp@mSDtuPvZcOx!AuVTW^|4;CyQp2^HGwjV&Zp&D~(vLISky z54W+06ekwU5}jB;M911i#um(g-lhn5ExgaZzpXcg&+x@O3i{QOA zkN#WlEjgy<+5h&lH9zNkpPEPfJDs`P`5EQ##5|%?XCA|6W~^OnCL6luwQ0>?mFc6KkSbePlsjW32)wKqqy1Rj>v?%XxK;+#GP5Ipo*iHrl^`rly8FEUkDWJ(YU|qfb>{$#R&pv_VcCuonlu5e%IO>-Kx=_3xt43isgznt zcJ|h;wE?5$oQiYbx%csI@hB z8&i_weG-TH&0;BsyEAi|yE}85yEk*1%buNX(Rg-R*mH)FedKt%>G3lxJ==6(_Ds`f zXV{?TP|w*`$ImiXIeV6o*(9HxWlI0q*`_`3u!3^@oorEe_MK6(B+Qj&-^rDpy)#yR z_Re_a**g=Jo^$zX&pEH!bIz}gpPLNE&rJoh=Pu08p1U~z?A*nLXXh?0JUe%JvFBa# z%2Lm}SC)I;Ei8|}dv#^}-D|7k?_LjQxi>bSy?bMe?0Jv7J^o&cJG1X`p0|WPrZ&L8|YBTp2tv zK;IP+-yeDM-sSX@_b#O;-n-N{@!rM0Bkx@>gj4MKyFPpVuDAE>-TdyecPDmd-<{Z* zeRq6k_T91Vac*vV{N3Ev_`9Q9J;KeNce9(%&T+$M=NNbP93xkiat)TxyQ1e`^el`k z*J1U{OpW?8w}tU{BIn27Ve>u0pywUov$Kq>C0Kn%ccN!mb+&0`_AIN6H!Y8!751EE z%2LnSruu!K_PW!3BEN6!aPOHNKO^ip!;*A+&It80T*B+2XQz{mo%NF5$IpLW3B6Qv?h0_8L6+qYVBQG zKgAZM3p1y<^E0PdFea>xonp1_Q>-ejbf03C^?q)7y`NiJ?`NeMVR5FPTbSt=j`cIr z*UXOf3%mOn>Bb!D?r*w&l97Y^IIw>5K-23dlbt!q_O;XRd()qH_p_IBte+_d#`>Gi z^fPi$cfFsHL(1+`OzC!?5{{i>WL7zIiYfh>Q_NpK#R|&qG%ISBy3>*6u{5_bmX55B zrCD_*&1#y#OuFfMn$1fW*3*%T>$LYf&6cFg-KT|Pr`d{hb?h`-ojJ`y&CT`Gkz4Dh zBe&O23%k#-9qDfO8MZrihV6}=VQl;iW3#OqvuBv`OxXAAjIie{OG^jF&vFOH&$7YU zvutSgY?gGNogHZT4KE z!LxId!LxIhj3@62C*HeAvWfRDDEE5an^Nxfyhl#%K6{tD^Xy&jw)n0Gec!{|BFDw| zLHPGVdfuG~pPf^Vug-GER%XxTR%XwQE{~tfl1t;~*iz3qwy1pe4qH&pzQg7%ojuLS^gi~DpFU82=Xk)KDC;>b)X#Ed4Q#a((SIs`IZt?t2zqKgHK&TAP#B zXIiIejh>flG_BQb>$J8;x2(;v^;lnnTh`i{lWahm9y`hH8#~E0x=(Uh_et*F+6nIN z+KI@W=@XIL(}b!=1#Iub2E2RIDL{Sx28|Btu^8H z+DTzoKU3~>^+)dJ`di$a?vG?M{fw>mGeg;ZiuI9Wr&yYtImHH)>!;Wt*`4MNb*H&* zcUm}>W?88}mS%++VR0tSEv=`y<@GeTvYuv@?$fN=eVWy}PqTm=JI&_DPP2uv(`<3( zG+QFqPqXFq(`-e$+I@zF(#`HOY^(bW+a5c^cE;qsW9AGa`M%@X8AcjCXPb_nWn^F6 z*|SWUo;^#BEj>FowlphToIR(^EzX|HEshHp#?O(Xkv-=|=X=g&l|j!r`kn_!Td^x=%;$cAt*i=|0VN*3*&O>**G^*3(UA(rhzkIFoL1 zbtWy8ccLp}=|q>u(upSBjjGQ&-I3Dg(f#2*_oZ!jq-uSMjRBnt4>G}>x}%IN@vx$a$S6tQJr@W8r6E6G^+D)G|Kh3?VK#n#`^l~uAk&a>-5Y?)^VNQ zZ;h5~GhdhW^|pzFAB?HH?RR@aUR zr;o8p%<}XxR?Z1axnnIBbH|!?9b;sngMQbsR@aU)GJ6Q!wWBZX(Av>A>fqYZ*Rt*J zr|TGdX>-SzuA4j7?({LH%uXNcsK0hB(ZU-2J3QWIvFmu#+;K*hVwR_m3)habinQ8w zBC?h{!40NQaObB_u=zFN!rBS8&~=h6N|$mcxy#chxhrcYxvO3M+_0;kg}HvVNly2( zt?7QYy(Zl0I>mN#!oBHJY;WxpW9z4w(VdR$>rQjiV`=WdSegw=hi1}TcP7o;^)$;W zyH7Kp91|ACPPaRAniXS4&oQ3SxmVcotb?9=%r=dllZ>BbWb_<`UhB_U;AJYH93L)9zD@EGAf3 z?@!cU?-$PWGu`Y=f3oVnbgZAb`zh~HTkcQwyHx%4KKH4e?poXKS+z4_r`P-5t?GBL z@{AcD)tU3B8r50$bw+g#P8`?8*;t*C^)WgxPoH3FO;+dTeb3DCbMo487GJB?I=$~2 zE!SqgE^F&?d>xLjx$!mCojw{lG<}o}<&LsJ&4JueHqa$ZcO8xF>pIH%*7~@{T3;kv z>l04*F>>!ueT>yQnC)XPE$d_duCD$adoBMx{{CO(&pGM$bo%$W-{-4+EKzopMP`q( z$l6iHoj%Ig+EHeZUB|e6UB|fT+_A`k>0{i%wPW0&uH#&{>o{|B$61z~KF)k{?Kmrt zT_;$v>jW$1gyrcIth^?ybe)W>=1y{Jxs$9mEexhlvS95bn+CbB2+7-A(y3k99iV3i)%9nbVBil5WnNW}9QDSt#YtS-MZN z6;1v;WBact#+rmm2SFINwYG!eu|aInNzGNEsUMw z`rW4@v+Mm_cfFsvGyQBxIylzP<&o4eKC!hlP$8DldX=OWaM71-QCxgX0v$I;CTh?fK zURGyien!^L#GTgY`1-8YW?GlkdaTxBwf;tJj`uui9a3vs?e7>j`*$po{T+*3{aY4U z`&$;7{aY5v{+6}5`Zuh_+TXA?vwy=9Wq-r=b@i{=p{@Njdo8nn&Hf^M-G2`C`(NhI zPW`n9{rgbAp7ifi{d=dM2mR+n{ru3+l=>M{KX>Y9QT=SHpH=m99RK;&_atf$lCTs_9P>^LL$MvpU=JI>hjab~PZyG}5&FW1586HHlMPjmUR z3VL2a&ZJpcvow=trLizff8WBpt<*3VeCaIdSM?X8_;yUOX4Y)6?p$+o3iT_+6Px*Ot2Q2S?e~R(I`(*7*te=nR zHD80(nCoy}mS^UJ&ddC)Oy^|Ps(8ax+tf(SQ~gstRDGmgs1sWoQLS<8uUX{kUomd&uUKUEuUI7eE7s!b+pNXf+pNXx+pJCYHcNE%EtY8QEw-=O zx7eX&Z?RW$)nNZAebqk?{r7eH^H=}g^nb7VzkBtwp?+rcpC$EkrhfL+&!hVJ)PH8_ z=UDw*tDkfFxmR<5=7gFbYQCuXqvli6UWDc$%||si)!bEcIcd*9`w#uDL%psYWxMn| zVy!=NXSzRfJJ-+M%Js9Yu70*juAO8dIen6?PM>5eIpK2GN#Po;p~A)K6D=;}PDIY< zPO$l|ra{*U7OWlT*4B;-r;oF$Ztgg%XqLNj%EpF7rKHg}9= zyPCRP$6DRzd0q7EZTcvSJ1~8;v$>-zeSm$rqphm*R%|r7=&tGzYWJn|I=VA`+1Cf% zud1KLH$AGK_5Vntny0Tis`G|EsvwC|~k5#YrhO70hX0XVt!6KQ#ngZ~bj`s7aevb8@ZT0g` zqnZb5UeHK$h2{>;BQ>XJj?sLhc}H`Q<|EBbnx|?nowN^;bG(u}5n1j!5m}<=6l=%1 z#p&bR!t`-g$Q@@s*>#*{$+ct5RZbscL(;+Au@(n%$Jjtu({$G{mR>s=*|$c|^^UT> zX`wNFv}x`rV{!F675%l^|LEg>>(G8{$zhwVw^@I!`kXZC&5pm;8yaKvsPU~!ZeN9?Zlh)FtwNhUT z^|eo5@AP#|U%T`*D!%UM>qort@ixaBOz-vn>aX<{$6u=^Cyna-lr*X{)qbOD`az@W z{b5G6CcMn3&UkNXRQuYWb5!TjpJLR{y8FFWYi)eg_y6j(Ivdca)?ziPIj+`a8dU=T z06^zu)>XBpst?6*QC|n+>z=;W>1&$4ZpGInea(rl7x9+I+Z*pJy;ptJ zN4>TBYt`GNQ8jqKQSWoo>!{g!zmr}A000250zE%S_>N0_eeAR*>g%7r-o@9nwzUfY z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000fd7E>Fy>AVbBCsfBL}C4 zSzm(2^zduRriWk8+AxFoGvGf1^5=6v{@iA#hnYV;%!<>)tUNu;s?)y;e)5C0W zdYCOw53|+jVYaz8%(mBt+3wmfW9!4rSRZET^iRIN ztq-&L^jE}JD_z0_wkFa2Tgw2nSu!Zpvwy2Fu<0EW& ze1xscjOj)`@AMhEfI0cIc3G}N>FHsI zHXob&;o30US{r6NYr|}Bt$pri*N0hQeVCQjhgqe=+z;1>*;e-m+vy%*d$IZdA8qdY za{g00;|-ucTe8!fKg{Q^(}maGE6`p8^YTCCp8@?`(a)d0_7|pyqq(oI{Y%rsY-M`5 zW$vrBzi)k*4Xh8dq4nX!xgV?#vxW6xwzNLXR@R4qmbp*sJ+1$p)_t}1zwWwEbHDI> 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