From 321ecdf8b7f984ba0ccf0582e44bc9fe575a0cb1 Mon Sep 17 00:00:00 2001 From: nastys <@> Date: Sat, 6 Jul 2019 22:51:56 +0200 Subject: [PATCH] First commit --- .gitattributes | 63 + .gitignore | 344 ++ .gitmodules | 3 + CODE_OF_CONDUCT.md | 76 + CONTRIBUTING.md | 3 + LICENSE | 25 + PD-Loader.sln | 49 + README.md | 106 + data/glut32.dll | Bin 0 -> 266752 bytes data/plugins/components.ini | 48 + data/plugins/config.ini | 55 + data/plugins/keyconfig.ini | 78 + data/plugins/playerdata.ini | 33 + .../PvList0_SBZV_7.10_26176_1558979190.dat | 1 + .../PvList1_SBZV_7.10_48303_1558979196.dat | 1 + .../PvList2_SBZV_7.10_25220_1558979199.dat | 1 + .../PvList3_SBZV_7.10_51748_1558979202.dat | 1 + .../PvList4_SBZV_7.10_48392_1558979205.dat | 1 + dependencies/detours/include/detours.h | 1108 +++++ dependencies/detours/include/detver.h | 27 + dependencies/detours/include/syelog.h | 89 + dependencies/detours/lib/detours.lib | Bin 0 -> 689904 bytes dependencies/detours/lib/syelog.lib | Bin 0 -> 48298 bytes dependencies/freeglut/include/GL/freeglut.h | 22 + .../freeglut/include/GL/freeglut_ext.h | 288 ++ .../freeglut/include/GL/freeglut_std.h | 654 +++ .../freeglut/include/GL/freeglut_ucall.h | 113 + dependencies/freeglut/include/GL/glut.h | 21 + dependencies/freeglut/lib/freeglut.exp | Bin 0 -> 27528 bytes dependencies/freeglut/lib/freeglut.lib | Bin 0 -> 45658 bytes dependencies/freeglut/lib/freeglutd.exp | Bin 0 -> 27533 bytes dependencies/freeglut/lib/freeglutd.lib | Bin 0 -> 46306 bytes source/PD-Loader/ModuleList.h | 186 + source/PD-Loader/PD-Loader.vcxproj | 186 + source/PD-Loader/PD-Loader.vcxproj.filters | 38 + source/PD-Loader/dllmain.cpp | 710 +++ source/PD-Loader/exception.hpp | 678 +++ source/PD-Loader/framework.h | 89 + source/PD-Loader/x64.def | 10 + source/plugins/Launcher/Launcher.filters | 30 + source/plugins/Launcher/Launcher.vcxproj | 182 + source/plugins/Launcher/TabPadding.cpp | 44 + source/plugins/Launcher/TabPadding.h | 19 + source/plugins/Launcher/background.png | Bin 0 -> 234375 bytes source/plugins/Launcher/dllmain.cpp | 45 + source/plugins/Launcher/framework.h | 60 + source/plugins/Launcher/ui.h | 1187 +++++ source/plugins/Launcher/ui.resx | 4415 +++++++++++++++++ source/plugins/Patches/Patches.vcxproj | 172 + .../plugins/Patches/Patches.vcxproj.filters | 22 + source/plugins/Patches/dllmain.cpp | 211 + source/plugins/Render/Render.vcxproj | 176 + source/plugins/Render/Render.vcxproj.filters | 27 + source/plugins/Render/dllmain.cpp | 80 + source/plugins/Render/framework.h | 36 + .../TLAC/Components/CameraController.cpp | 231 + .../TLAC/Components/CameraController.h | 80 + .../TLAC/Components/ComponentsManager.cpp | 155 + .../TLAC/Components/ComponentsManager.h | 55 + .../TLAC/Components/CustomPlayerData.h | 20 + .../TLAC/Components/DebugComponent.cpp | 263 + .../plugins/TLAC/Components/DebugComponent.h | 44 + .../TLAC/Components/EmulatorComponent.cpp | 33 + .../TLAC/Components/EmulatorComponent.h | 30 + source/plugins/TLAC/Components/FPSLimiter.cpp | 67 + source/plugins/TLAC/Components/FPSLimiter.h | 23 + source/plugins/TLAC/Components/FastLoader.cpp | 60 + source/plugins/TLAC/Components/FastLoader.h | 26 + .../TLAC/Components/FrameRateManager.cpp | 86 + .../TLAC/Components/FrameRateManager.h | 34 + source/plugins/TLAC/Components/GameState.h | 62 + .../TLAC/Components/GameTargets/HoldState.h | 13 + .../Components/GameTargets/TargetHitStates.h | 18 + .../GameTargets/TargetInspector.cpp | 77 + .../Components/GameTargets/TargetInspector.h | 43 + .../TLAC/Components/GameTargets/TargetState.h | 11 + .../TLAC/Components/GameTargets/TargetTypes.h | 26 + .../TLAC/Components/Input/InputBufferType.h | 14 + .../TLAC/Components/Input/InputEmulator.cpp | 305 ++ .../TLAC/Components/Input/InputEmulator.h | 102 + .../TLAC/Components/Input/InputState.cpp | 58 + .../TLAC/Components/Input/InputState.h | 47 + .../TLAC/Components/Input/JvsButtons.h | 24 + .../Components/Input/TouchPanelEmulator.cpp | 59 + .../Components/Input/TouchPanelEmulator.h | 26 + .../TLAC/Components/Input/TouchPanelState.h | 15 + .../Components/Input/TouchSliderEmulator.cpp | 138 + .../Components/Input/TouchSliderEmulator.h | 49 + .../Components/Input/TouchSliderState.cpp | 19 + .../TLAC/Components/Input/TouchSliderState.h | 43 + source/plugins/TLAC/Components/PlayerData.h | 973 ++++ .../TLAC/Components/PlayerDataManager.cpp | 150 + .../TLAC/Components/PlayerDataManager.h | 29 + .../TLAC/Components/ScaleComponent.cpp | 109 + .../plugins/TLAC/Components/ScaleComponent.h | 35 + .../plugins/TLAC/Components/StageManager.cpp | 41 + source/plugins/TLAC/Components/StageManager.h | 21 + source/plugins/TLAC/Components/SysTimer.cpp | 34 + source/plugins/TLAC/Components/SysTimer.h | 25 + source/plugins/TLAC/Constants.h | 102 + source/plugins/TLAC/FileSystem/ConfigFile.cpp | 72 + source/plugins/TLAC/FileSystem/ConfigFile.h | 28 + source/plugins/TLAC/FileSystem/TextFile.cpp | 41 + source/plugins/TLAC/FileSystem/TextFile.h | 22 + .../plugins/TLAC/Input/Bindings/Binding.cpp | 91 + source/plugins/TLAC/Input/Bindings/Binding.h | 26 + .../TLAC/Input/Bindings/Ds4Binding.cpp | 29 + .../plugins/TLAC/Input/Bindings/Ds4Binding.h | 19 + .../TLAC/Input/Bindings/IInputBinding.h | 12 + .../TLAC/Input/Bindings/KeyboardBinding.cpp | 27 + .../TLAC/Input/Bindings/KeyboardBinding.h | 19 + .../TLAC/Input/Bindings/MouseBinding.cpp | 70 + .../TLAC/Input/Bindings/MouseBinding.h | 28 + .../TLAC/Input/Bindings/XinputBinding.cpp | 33 + .../TLAC/Input/Bindings/XinputBinding.h | 21 + .../TLAC/Input/DirectInput/Controller.cpp | 13 + .../TLAC/Input/DirectInput/Controller.h | 12 + .../TLAC/Input/DirectInput/DirectInput.cpp | 26 + .../TLAC/Input/DirectInput/DirectInput.h | 12 + .../Input/DirectInput/DirectInputDevice.cpp | 66 + .../Input/DirectInput/DirectInputDevice.h | 22 + .../Input/DirectInput/DirectInputMouse.cpp | 35 + .../TLAC/Input/DirectInput/DirectInputMouse.h | 21 + .../TLAC/Input/DirectInput/Ds4/Ds4Button.h | 52 + .../TLAC/Input/DirectInput/Ds4/Ds4State.cpp | 14 + .../TLAC/Input/DirectInput/Ds4/Ds4State.h | 39 + .../TLAC/Input/DirectInput/Ds4/DualShock4.cpp | 169 + .../TLAC/Input/DirectInput/Ds4/DualShock4.h | 62 + source/plugins/TLAC/Input/IInputDevice.h | 10 + .../plugins/TLAC/Input/KeyConfig/Config.cpp | 271 + source/plugins/TLAC/Input/KeyConfig/Config.h | 23 + .../TLAC/Input/KeyConfig/KeyString.cpp | 13 + .../plugins/TLAC/Input/KeyConfig/KeyString.h | 14 + .../TLAC/Input/KeyConfig/KeyStringHash.cpp | 13 + .../TLAC/Input/KeyConfig/KeyStringHash.h | 10 + .../plugins/TLAC/Input/Keyboard/Keyboard.cpp | 100 + source/plugins/TLAC/Input/Keyboard/Keyboard.h | 47 + .../TLAC/Input/Keyboard/KeyboardState.cpp | 9 + .../TLAC/Input/Keyboard/KeyboardState.h | 15 + source/plugins/TLAC/Input/Mouse/Mouse.cpp | 135 + source/plugins/TLAC/Input/Mouse/Mouse.h | 49 + source/plugins/TLAC/Input/Mouse/MouseState.h | 15 + source/plugins/TLAC/Input/Xinput/Xinput.cpp | 677 +++ source/plugins/TLAC/Input/Xinput/Xinput.h | 49 + .../plugins/TLAC/Input/Xinput/XinputState.cpp | 9 + .../plugins/TLAC/Input/Xinput/XinputState.h | 12 + source/plugins/TLAC/TLAC.vcxproj | 285 ++ source/plugins/TLAC/TLAC.vcxproj.filters | 336 ++ .../TLAC/Utilities/EnumBitwiseOperations.h | 12 + source/plugins/TLAC/Utilities/Math.cpp | 37 + source/plugins/TLAC/Utilities/Math.h | 15 + source/plugins/TLAC/Utilities/Operations.cpp | 60 + source/plugins/TLAC/Utilities/Operations.h | 16 + source/plugins/TLAC/Utilities/Stopwatch.cpp | 36 + source/plugins/TLAC/Utilities/Stopwatch.h | 30 + source/plugins/TLAC/Utilities/Vec2.cpp | 34 + source/plugins/TLAC/Utilities/Vec2.h | 18 + source/plugins/TLAC/Utilities/Vec3.cpp | 58 + source/plugins/TLAC/Utilities/Vec3.h | 27 + source/plugins/TLAC/dllmain.cpp | 337 ++ source/plugins/TLAC/framework.cpp | 40 + source/plugins/TLAC/framework.h | 25 + 162 files changed, 19606 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 PD-Loader.sln create mode 100644 README.md create mode 100644 data/glut32.dll create mode 100644 data/plugins/components.ini create mode 100644 data/plugins/config.ini create mode 100644 data/plugins/keyconfig.ini create mode 100644 data/plugins/playerdata.ini create mode 100644 data/ram/databank/PvList0_SBZV_7.10_26176_1558979190.dat create mode 100644 data/ram/databank/PvList1_SBZV_7.10_48303_1558979196.dat create mode 100644 data/ram/databank/PvList2_SBZV_7.10_25220_1558979199.dat create mode 100644 data/ram/databank/PvList3_SBZV_7.10_51748_1558979202.dat create mode 100644 data/ram/databank/PvList4_SBZV_7.10_48392_1558979205.dat create mode 100644 dependencies/detours/include/detours.h create mode 100644 dependencies/detours/include/detver.h create mode 100644 dependencies/detours/include/syelog.h create mode 100644 dependencies/detours/lib/detours.lib create mode 100644 dependencies/detours/lib/syelog.lib create mode 100644 dependencies/freeglut/include/GL/freeglut.h create mode 100644 dependencies/freeglut/include/GL/freeglut_ext.h create mode 100644 dependencies/freeglut/include/GL/freeglut_std.h create mode 100644 dependencies/freeglut/include/GL/freeglut_ucall.h create mode 100644 dependencies/freeglut/include/GL/glut.h create mode 100644 dependencies/freeglut/lib/freeglut.exp create mode 100644 dependencies/freeglut/lib/freeglut.lib create mode 100644 dependencies/freeglut/lib/freeglutd.exp create mode 100644 dependencies/freeglut/lib/freeglutd.lib create mode 100644 source/PD-Loader/ModuleList.h create mode 100644 source/PD-Loader/PD-Loader.vcxproj create mode 100644 source/PD-Loader/PD-Loader.vcxproj.filters create mode 100644 source/PD-Loader/dllmain.cpp create mode 100644 source/PD-Loader/exception.hpp create mode 100644 source/PD-Loader/framework.h create mode 100644 source/PD-Loader/x64.def create mode 100644 source/plugins/Launcher/Launcher.filters create mode 100644 source/plugins/Launcher/Launcher.vcxproj create mode 100644 source/plugins/Launcher/TabPadding.cpp create mode 100644 source/plugins/Launcher/TabPadding.h create mode 100644 source/plugins/Launcher/background.png create mode 100644 source/plugins/Launcher/dllmain.cpp create mode 100644 source/plugins/Launcher/framework.h create mode 100644 source/plugins/Launcher/ui.h create mode 100644 source/plugins/Launcher/ui.resx create mode 100644 source/plugins/Patches/Patches.vcxproj create mode 100644 source/plugins/Patches/Patches.vcxproj.filters create mode 100644 source/plugins/Patches/dllmain.cpp create mode 100644 source/plugins/Render/Render.vcxproj create mode 100644 source/plugins/Render/Render.vcxproj.filters create mode 100644 source/plugins/Render/dllmain.cpp create mode 100644 source/plugins/Render/framework.h create mode 100644 source/plugins/TLAC/Components/CameraController.cpp create mode 100644 source/plugins/TLAC/Components/CameraController.h create mode 100644 source/plugins/TLAC/Components/ComponentsManager.cpp create mode 100644 source/plugins/TLAC/Components/ComponentsManager.h create mode 100644 source/plugins/TLAC/Components/CustomPlayerData.h create mode 100644 source/plugins/TLAC/Components/DebugComponent.cpp create mode 100644 source/plugins/TLAC/Components/DebugComponent.h create mode 100644 source/plugins/TLAC/Components/EmulatorComponent.cpp create mode 100644 source/plugins/TLAC/Components/EmulatorComponent.h create mode 100644 source/plugins/TLAC/Components/FPSLimiter.cpp create mode 100644 source/plugins/TLAC/Components/FPSLimiter.h create mode 100644 source/plugins/TLAC/Components/FastLoader.cpp create mode 100644 source/plugins/TLAC/Components/FastLoader.h create mode 100644 source/plugins/TLAC/Components/FrameRateManager.cpp create mode 100644 source/plugins/TLAC/Components/FrameRateManager.h create mode 100644 source/plugins/TLAC/Components/GameState.h create mode 100644 source/plugins/TLAC/Components/GameTargets/HoldState.h create mode 100644 source/plugins/TLAC/Components/GameTargets/TargetHitStates.h create mode 100644 source/plugins/TLAC/Components/GameTargets/TargetInspector.cpp create mode 100644 source/plugins/TLAC/Components/GameTargets/TargetInspector.h create mode 100644 source/plugins/TLAC/Components/GameTargets/TargetState.h create mode 100644 source/plugins/TLAC/Components/GameTargets/TargetTypes.h create mode 100644 source/plugins/TLAC/Components/Input/InputBufferType.h create mode 100644 source/plugins/TLAC/Components/Input/InputEmulator.cpp create mode 100644 source/plugins/TLAC/Components/Input/InputEmulator.h create mode 100644 source/plugins/TLAC/Components/Input/InputState.cpp create mode 100644 source/plugins/TLAC/Components/Input/InputState.h create mode 100644 source/plugins/TLAC/Components/Input/JvsButtons.h create mode 100644 source/plugins/TLAC/Components/Input/TouchPanelEmulator.cpp create mode 100644 source/plugins/TLAC/Components/Input/TouchPanelEmulator.h create mode 100644 source/plugins/TLAC/Components/Input/TouchPanelState.h create mode 100644 source/plugins/TLAC/Components/Input/TouchSliderEmulator.cpp create mode 100644 source/plugins/TLAC/Components/Input/TouchSliderEmulator.h create mode 100644 source/plugins/TLAC/Components/Input/TouchSliderState.cpp create mode 100644 source/plugins/TLAC/Components/Input/TouchSliderState.h create mode 100644 source/plugins/TLAC/Components/PlayerData.h create mode 100644 source/plugins/TLAC/Components/PlayerDataManager.cpp create mode 100644 source/plugins/TLAC/Components/PlayerDataManager.h create mode 100644 source/plugins/TLAC/Components/ScaleComponent.cpp create mode 100644 source/plugins/TLAC/Components/ScaleComponent.h create mode 100644 source/plugins/TLAC/Components/StageManager.cpp create mode 100644 source/plugins/TLAC/Components/StageManager.h create mode 100644 source/plugins/TLAC/Components/SysTimer.cpp create mode 100644 source/plugins/TLAC/Components/SysTimer.h create mode 100644 source/plugins/TLAC/Constants.h create mode 100644 source/plugins/TLAC/FileSystem/ConfigFile.cpp create mode 100644 source/plugins/TLAC/FileSystem/ConfigFile.h create mode 100644 source/plugins/TLAC/FileSystem/TextFile.cpp create mode 100644 source/plugins/TLAC/FileSystem/TextFile.h create mode 100644 source/plugins/TLAC/Input/Bindings/Binding.cpp create mode 100644 source/plugins/TLAC/Input/Bindings/Binding.h create mode 100644 source/plugins/TLAC/Input/Bindings/Ds4Binding.cpp create mode 100644 source/plugins/TLAC/Input/Bindings/Ds4Binding.h create mode 100644 source/plugins/TLAC/Input/Bindings/IInputBinding.h create mode 100644 source/plugins/TLAC/Input/Bindings/KeyboardBinding.cpp create mode 100644 source/plugins/TLAC/Input/Bindings/KeyboardBinding.h create mode 100644 source/plugins/TLAC/Input/Bindings/MouseBinding.cpp create mode 100644 source/plugins/TLAC/Input/Bindings/MouseBinding.h create mode 100644 source/plugins/TLAC/Input/Bindings/XinputBinding.cpp create mode 100644 source/plugins/TLAC/Input/Bindings/XinputBinding.h create mode 100644 source/plugins/TLAC/Input/DirectInput/Controller.cpp create mode 100644 source/plugins/TLAC/Input/DirectInput/Controller.h create mode 100644 source/plugins/TLAC/Input/DirectInput/DirectInput.cpp create mode 100644 source/plugins/TLAC/Input/DirectInput/DirectInput.h create mode 100644 source/plugins/TLAC/Input/DirectInput/DirectInputDevice.cpp create mode 100644 source/plugins/TLAC/Input/DirectInput/DirectInputDevice.h create mode 100644 source/plugins/TLAC/Input/DirectInput/DirectInputMouse.cpp create mode 100644 source/plugins/TLAC/Input/DirectInput/DirectInputMouse.h create mode 100644 source/plugins/TLAC/Input/DirectInput/Ds4/Ds4Button.h create mode 100644 source/plugins/TLAC/Input/DirectInput/Ds4/Ds4State.cpp create mode 100644 source/plugins/TLAC/Input/DirectInput/Ds4/Ds4State.h create mode 100644 source/plugins/TLAC/Input/DirectInput/Ds4/DualShock4.cpp create mode 100644 source/plugins/TLAC/Input/DirectInput/Ds4/DualShock4.h create mode 100644 source/plugins/TLAC/Input/IInputDevice.h create mode 100644 source/plugins/TLAC/Input/KeyConfig/Config.cpp create mode 100644 source/plugins/TLAC/Input/KeyConfig/Config.h create mode 100644 source/plugins/TLAC/Input/KeyConfig/KeyString.cpp create mode 100644 source/plugins/TLAC/Input/KeyConfig/KeyString.h create mode 100644 source/plugins/TLAC/Input/KeyConfig/KeyStringHash.cpp create mode 100644 source/plugins/TLAC/Input/KeyConfig/KeyStringHash.h create mode 100644 source/plugins/TLAC/Input/Keyboard/Keyboard.cpp create mode 100644 source/plugins/TLAC/Input/Keyboard/Keyboard.h create mode 100644 source/plugins/TLAC/Input/Keyboard/KeyboardState.cpp create mode 100644 source/plugins/TLAC/Input/Keyboard/KeyboardState.h create mode 100644 source/plugins/TLAC/Input/Mouse/Mouse.cpp create mode 100644 source/plugins/TLAC/Input/Mouse/Mouse.h create mode 100644 source/plugins/TLAC/Input/Mouse/MouseState.h create mode 100644 source/plugins/TLAC/Input/Xinput/Xinput.cpp create mode 100644 source/plugins/TLAC/Input/Xinput/Xinput.h create mode 100644 source/plugins/TLAC/Input/Xinput/XinputState.cpp create mode 100644 source/plugins/TLAC/Input/Xinput/XinputState.h create mode 100644 source/plugins/TLAC/TLAC.vcxproj create mode 100644 source/plugins/TLAC/TLAC.vcxproj.filters create mode 100644 source/plugins/TLAC/Utilities/EnumBitwiseOperations.h create mode 100644 source/plugins/TLAC/Utilities/Math.cpp create mode 100644 source/plugins/TLAC/Utilities/Math.h create mode 100644 source/plugins/TLAC/Utilities/Operations.cpp create mode 100644 source/plugins/TLAC/Utilities/Operations.h create mode 100644 source/plugins/TLAC/Utilities/Stopwatch.cpp create mode 100644 source/plugins/TLAC/Utilities/Stopwatch.h create mode 100644 source/plugins/TLAC/Utilities/Vec2.cpp create mode 100644 source/plugins/TLAC/Utilities/Vec2.h create mode 100644 source/plugins/TLAC/Utilities/Vec3.cpp create mode 100644 source/plugins/TLAC/Utilities/Vec3.h create mode 100644 source/plugins/TLAC/dllmain.cpp create mode 100644 source/plugins/TLAC/framework.cpp create mode 100644 source/plugins/TLAC/framework.h diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..59cd594 --- /dev/null +++ b/.gitignore @@ -0,0 +1,344 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- Backup*.rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Exclude data folder +!data/* +!data/debug/* \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..4fb8b5e --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "dependencies\\MemoryModule"] + path = dependencies\\MemoryModule + url = https://github.com/fancycode/MemoryModule.git diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..e0ca0e8 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at hatsune@miku.cl. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..7141856 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,3 @@ +Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. + +Please make sure to update tests as appropriate. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..e0eb4dd --- /dev/null +++ b/LICENSE @@ -0,0 +1,25 @@ +MIT License + +Copyright (c) Project DIVA Modding 2nd Community +Copyright (c) samyuu (nop) +Copyright (c) ThirteenAG +Copyright (c) Microsoft Corporation +Copyright (c) FreeGLUT team + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/PD-Loader.sln b/PD-Loader.sln new file mode 100644 index 0000000..9f87970 --- /dev/null +++ b/PD-Loader.sln @@ -0,0 +1,49 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.28922.388 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PD-Loader", "source\PD-Loader\PD-Loader.vcxproj", "{CA479467-D518-46A2-AC86-3098ADA99FE5}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TLAC", "source\plugins\TLAC\TLAC.vcxproj", "{2B5533BB-04A1-424F-9BCA-1CA963B46B7F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Patches", "source\plugins\Patches\Patches.vcxproj", "{3FD6ACA9-E613-4FD6-BDA2-55A91C2CF65C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Launcher", "source\plugins\Launcher\Launcher.vcxproj", "{60D5E9F4-335F-402B-9A07-D78674DFFC9B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Render", "source\plugins\Render\Render.vcxproj", "{89F87459-768F-4638-9267-0F90CD74452D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CA479467-D518-46A2-AC86-3098ADA99FE5}.Debug|x64.ActiveCfg = Debug|x64 + {CA479467-D518-46A2-AC86-3098ADA99FE5}.Debug|x64.Build.0 = Debug|x64 + {CA479467-D518-46A2-AC86-3098ADA99FE5}.Release|x64.ActiveCfg = Release|x64 + {CA479467-D518-46A2-AC86-3098ADA99FE5}.Release|x64.Build.0 = Release|x64 + {2B5533BB-04A1-424F-9BCA-1CA963B46B7F}.Debug|x64.ActiveCfg = Debug|x64 + {2B5533BB-04A1-424F-9BCA-1CA963B46B7F}.Debug|x64.Build.0 = Debug|x64 + {2B5533BB-04A1-424F-9BCA-1CA963B46B7F}.Release|x64.ActiveCfg = Release|x64 + {2B5533BB-04A1-424F-9BCA-1CA963B46B7F}.Release|x64.Build.0 = Release|x64 + {3FD6ACA9-E613-4FD6-BDA2-55A91C2CF65C}.Debug|x64.ActiveCfg = Debug|x64 + {3FD6ACA9-E613-4FD6-BDA2-55A91C2CF65C}.Debug|x64.Build.0 = Debug|x64 + {3FD6ACA9-E613-4FD6-BDA2-55A91C2CF65C}.Release|x64.ActiveCfg = Release|x64 + {3FD6ACA9-E613-4FD6-BDA2-55A91C2CF65C}.Release|x64.Build.0 = Release|x64 + {60D5E9F4-335F-402B-9A07-D78674DFFC9B}.Debug|x64.ActiveCfg = Debug|x64 + {60D5E9F4-335F-402B-9A07-D78674DFFC9B}.Debug|x64.Build.0 = Debug|x64 + {60D5E9F4-335F-402B-9A07-D78674DFFC9B}.Release|x64.ActiveCfg = Release|x64 + {60D5E9F4-335F-402B-9A07-D78674DFFC9B}.Release|x64.Build.0 = Release|x64 + {89F87459-768F-4638-9267-0F90CD74452D}.Debug|x64.ActiveCfg = Debug|x64 + {89F87459-768F-4638-9267-0F90CD74452D}.Debug|x64.Build.0 = Debug|x64 + {89F87459-768F-4638-9267-0F90CD74452D}.Release|x64.ActiveCfg = Release|x64 + {89F87459-768F-4638-9267-0F90CD74452D}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {F5AD7464-338F-4150-9DDC-85AD115BA616} + EndGlobalSection +EndGlobal diff --git a/README.md b/README.md new file mode 100644 index 0000000..20a4348 --- /dev/null +++ b/README.md @@ -0,0 +1,106 @@ +# PD Loader + +**PD Loader** lets you load plugins into **PDAFT** by placing them into a **"plugins"** folder, it includes useful ones such as input emulation and a graphical launcher. + +## License and Legal + +The code included in this repository is intended for the solely usage of investigative reasons for the **PDAFT** videogame.\ +Based on your current jurisdiction, it may be illegal to tamper with an arcade cabinet or its hardware and so it would be the usage of this software.\ +Protection circumvention is not provided by this software.\ +Additionally, a MIT License is provided. + +## Installation + +* Have a **full clean** game version **"7.10"** decompressed without any modifications. +* Download the latest release of **PD Loader**. +* Decompress everything into the **root folder** of the game. + +* Install the official **"mdata"**. +**M215** to **M270** are supported, custom ones are also supported. + +To install them you have to drop each **"mdata"** update decompressed into the **"mdata\"** folder in the root folder of the game (create it if it doesn't exists). + +**e.g.** For all the official **"mdata"** you should have the following folders inside: + * M215 + * M220 + * M230 + * M240 + * M250 + * M260 + * M270 + +Files required to make **"mdata"** available in the game are included (**"ram\databank\PvList*"** files). + +## Usage + +**IMPORTANT:** Do *not* edit any of the *.ini* configuration files with Notepad. Use [Notepad++](https://notepad-plus-plus.org/download) (or WordPad) with UTF-8 encoding instead, otherwise your game may crash. + +Use **"plugins\components.ini"** to enable or disable TLAC components.\ +Use **"plugins\config.ini"** to enable or disable plugins loading along other useful settings.\ +Use **"plugins\keyconfig.ini"** to change your game keybinds.\ +Use **"plugins\playerdata.ini"** to change your playername and other player customization. + +Place any **.dva** plugin you want to use inside the **"plugins"** folder.\ + +Launch **"diva.exe"**. +Use **"--launch"** argument to bypass the launcher and to be able to use other arguments. + +## Screenshots + +Your **root** game folder should look like this: + +![root game folder](https://i.imgur.com/c57lQPH.png) + +Your **"mdata"** folder should look like this: + +![mdata folder](https://i.imgur.com/2jUjosM.png) + +## Contributing + +Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. + +Please make sure to update tests as appropriate. + +## License + +MIT (see "LICENSE"). + +## Third party plugins + +[DiscordDiva](https://github.com/bela333/DiscordDiva) - Discord integration by **bela333**.\ +[DivaSound](https://github.com/somewhatlurker/DivaSound) - Replacement audio output by **somewhatlurker**, this plugin is a must if you have audio issues or no audio at all. + +## FAQ + +Only **NVIDIA** videocards are supported for now, AMD and Intel GPU support is possible but further research needs to be done. + +**Linux** can run the game with **Wine**, for audio you must use [DivaSound](https://github.com/somewhatlurker/DivaSound).\ +WMV movie videos are not supported and it is recommended to set **No_Movies** to **1** to prevent crashes when the game attempts to load a movie. + +**Windows 7** is supported except for WMV movie videos. + +Previous versions used **dinput8.dll** in the game root folder, if you still have it you must delete it. + +Always use the original game executable. + +Special thanks to **Brolijah**, **Skyth**, **korenkonder**, **Samyuu**, **somewhatlurker**, **Cainan**, **crash5band**, **vladkorotnev**, **lybxlpsv** and everyone else who helped at the [Project DIVA Modding 2nd Community Discord](https://discord.gg/cvBVGDZ), come join us if you want to help us to improve this project. + +## Developer FAQ + +To enable logs and dumps create a folder called "logs" in the root folder, each dump size is 200MB so watch your disk space. + +This is a stripdown of [**ThirteenAG's** Ultimate ASI Loader v4.47](https://github.com/ThirteenAG/Ultimate-ASI-Loader/) for **"dnsapi.dll"** usage only. + +Solution for **Visual Studio 2019**.\ +Requires platform toolset **v142**.\ +Requires **Windows 10 SDK (10.0.17763.0)**. + +Requires **Desktop development with C++**.\ +Requires **Windows Universal CRT SDK**. + +Requires **.NET desktop development** (Launcher plugin).\ +Requires **.NET Framework 4 targeting pack** (Launcher plugin).\ +Requires **C++/CLI support for v142 build tools (14.21)** (Launcher plugin) + +Requires [**Microsoft Research Detours Package**](https://github.com/microsoft/Detours) (included in the solution).\ +Requires [**FreeGLUT 3.0.0 PD**](https://github.com/Rayduxz/FreeGLUT) (included in the solution). diff --git a/data/glut32.dll b/data/glut32.dll new file mode 100644 index 0000000000000000000000000000000000000000..f0fdac125840a84c772f51996b567da8bc50e407 GIT binary patch literal 266752 zcmd?Sd3;nw)<4{xbVGoI8<1u|L4y;WW;p0&qNoYth)ggE zlk4RoI-;Pc=(wPwq9X{7OF}RqvIP_baRCLUV-Q&*$kOlkoT|HYz!{$R`Th6s`H)*x z=hQi;PMxY#dl%d~*OlmUxjgtEi@97Y@TGqN{`;T*B)MI#wimtM*7a_y_1#vuBkQ{j zm@x6)v?=%8_2+xWOimj+=FU6sDoXp)ZE5!u-$JYus&@r=+w_m!!w) z3qSeY4~L#G|6l&tm?wH5{_@PjPhP^`pPv-*rYEo9_(4wZJ^S#Jzvq01pLiDEcC(tE zbo2Mnlb7;0`7YPESuI>|99Kq|I0sx8r?p9F>vNT%pbsZ- za*>8`DhEpt5@CQ^aFYFX&27y}edz~}E5S9|$|Up3jP{4J6WP(D6J4`^<8tl0FVWSB z7>sW1%J$+LXzl89KECF^DXm>;K9?&aKhf32OgqcB5OAs|>)#?oOku4=J8*f?ZPSVn z{k~L+Ol2qIaQsVyRF~f~ZcNb_mn&%>;6!sj{#W3?<6i($UoOyGOJ4=kxv;cxK$uDv zXa5VhT$Ptk5r|wyl$8thq~03&(akqwCbzuDEze|1_jmWp2)_Q)8D5e$4HPgRWbr>Y;SMY7+@J z%TMqO2Rv|#TDmW-Bv1Jmb)#=DK2J4#g$vy-)kqnGPqfR&E|;pOZ22Y8rIyzf<*Ql| z@@v!6v&(lBC6}H^ENb~NSzTj7W=z%J_9Lv8Hx-?y>I>4)ETcYhy0H))BLQ;PE6r=PY zl&L^bb?+4{Wo6M#kp3U1V=*oO1EsH!E_O^v zNBSx~#rj%o>Wcyp@+(5o<}Y&Uiz2KqJN2CO_4)_#`pOUzO(col{eam`mJ*S^SQOHi z6s5mIlsJ8{Jfts{#|Fje>k2Tp^_B7j>uWz6P&5aup|7@t;Lz7*7#8%hmQXqh={Ejs z>uc;u)>pvP7X_fNC4{2Q&vxpIBCIbv^_=wez`x@46%Z2TkVIwwVs?2_BGMO&Li&=T zbaRMeD+Tt&@{qn*9vc*=uh{!eeXSR)KYA3bTY)w7^$j67^!1oPd74o6zR%J<2gg9x zPxkfO6RfXAroJcueN876ZT@_xz9_=_vQy7VU;Q8vXj<*jB_wJ^5)BX%rAUcLUn~mg zONw&vs4a@E6zGfPA$_qtHYiSC8&@K?)qiaf_BCfNSZ`m+`g)TPpsxwC|N5gqnM5ed zfdXaRMG}-(DrK)xr(>kVj|GA&4DWS6Lq}TIB$Pwd zyvHd6+pEk`C~{1s9Pc7WW+kw85SHd$XCaeR_CKe64Fe8zZnt+quQSmbM-pgV4I;xO z)bj3^Bu9ynhoEVdS7A(Z{4o%HEDEz>Hb`{_DU^5rGLUlEM|*+tI-xWz#+>@!@h|P?;(RRkMg_SU;wYJ!BFdA_xbG@N5u{zV|BYGH@W#rB^Hl znew_Bt>2o zcfZ5zp4l%XBKu=e$o`}#GYKX|v5gGX!Say(u{<`2?9bBIC@^>E3tE6OE+p0y!5aFy zmJpo!5-2AsfYMh;7yD62NB#L{hge@xsEPGO0qE;1Leb{$bn1&DtS>wDob>hj+s*VP zB$`MPz56z^n=B+>T*fIdzCc(Xux zfKY0H0{=Mb0O_!667hn6qzq2~m?mc^pe>(U6enRD+O+ z+8c|KhV~{!*+noZifvA4Z!8bBH$*2sU(XVPLthUG zlwpMOGEkt5QBpddKka9IxlDag04Uc8A&*ha?9VB}`m$5cNndRskyBp>P<61EIxIy- zI|zx^M{RwvD5Nhb%G(6f<}*`UDbN?oL;7k4iqqF4OPu;zCRpD{tQRa{ecee24t@Pa zp!6V=sX&1;u8`7^z7FqWeI=Rtq5x2mg^(_%eNlwcC%MYwC)zlXSP=F&P zGM?LQ>+9YI*4GeIUlf48rW1-bztE{Kim<-y)N|5TKS%_cR)0_XMzHKwB+&pNQHqp^ z^u?l(zN9DzzqduPl>&XSJfts{#|FjeYvU`(ZT0tGqgMj!IWxd|`zx%kHwnR^ucrjc zBtlsZ6e!~^lE9olMp<8@O?^=SC=ns#5U0KKn{68*V4?)u^UxpytFcoBbfo$|+F)WVm zu*+9rmX87`-#UV6^GnVsAEj{lnt^_$e9t}SC|?Xd4W>Mr1bO{AS-##o|EKlWPtdf= zS0Tu@BC-QOHu|j?#wIz+H`gp51yH_yUvl{>&L|(HaQT{n&RRZn7au0)09=}2GIU$MScNL^G=0Q&lh zP_+3=sXdtXMG@AQoqA6Cdj08meN~DYoJbPA`!utgEF~iQVo^w6Qk4DWd<*FFW;|^!30~@%kDfB+4O)%AR6&c~TsUPHht});bgL!8P#5lD;^wz#!UqT(U&$TwB*XkSKa_fcv zv$lHT_Pg##$97XudM7$bl@=T%&J*dxDy$z5>IXvlK~?{O**yh5VAqG(%>g@A@A?W5 zsjAwMb2n1vA{xDS1rA|dv@!$DJm#yp6M6J)=sS6X{VvLTGv(DLf#m~f+P$gKixI!k z@MJ`^K7LjA34`TTmd@G#q0LLkqxh4 zN0^j{e^!6?@qEf+t`|Qj>}|$f5TtIt=>G|!e1}r@5JZ+^y=w*9U_yHVXfUW@pA#C+ zMBvm3>0#|QwmU!BogaRH0-2kEcoiXHKWsbT+Wa)r02^A95#?|Kcft%o{|G$f<6+Ui zfh;BXK-kz8C@`8PB-s8LOHh=DEkxqxDr(P1A1DmI?*rVJ3>XnMk3~>8v(BXdH&dAE zxbfE0PqKag0yS|>2L$h-#QVi3nfM40&&Rqyk1cD-7Z#u_TzJ~Alp_3rL}-PvCb2DQ ziLoa0-%K{r5jyz|>CCe8hGV3%y68cc-#U2Kto~w8pww3Vd4e9$QegqJ#}{`CS#`-(A2wzm%sp&ll8o+zx7&61CF2Z#F`x;x46m8uO%6r$^wdA=?||vt7WVqpgmn zmEvx8A{V=SD^Im@Sw~J(Z9sZzL<^;NifEDav|9$zu?HLo_(e5}(nrI9qMycMF+NdH zl%5vRYpILZlVZMmCxUV5>Won%<;huDp3;5(lDz(ZCqYTRaY8;Hm16YYSqq&}3i1S` zvU~w%zaJFfUp6GVO4Z>35cgMG^RL)rc703`nW`W`G#Q!nwNW1(IDn;kWKQ!q?>dxb zNJ(B5)@mlCPQX!N!&f7)2ICWb4OlVX9k-#lx^Dyt_m>Qp zQnp5P|96~d<%$k=xm~4sQ;3ODhK)?u$`7bL;OJRlRL4X|_YDP1-v+zEH?~Uih4IDl z|!3kckd|ziyPvP{n(W(KIT$}>4x(Bxr zgk>Y&sVOAN+UWB({Dl$+{HTP_wBe6A;Xg|F7#qIoAxHi_5+1bSo1O5lCA^yre~5Zq zF=RG;>m}T6!*9Od0sm0Kcim!@?_w&snSYstS2^JI4)_}q{=5x;Y?A|CKwTU3Gt-8z zq654p{c;H(W5W+Q;g?8w(1y3C1Jh>ye96C?4e$M#gMXHUyKVRjUpU~GNcgUst@7Wq z%>nN!;Z-*LyR8nmPr{$K;a6>Oz*8iArVVfJ%XRpF9blX~PdW z;gco(F*f{97#~~tZ(4aIFFyr{Fh1iOdI}=&q2SdgpaY|4;^v9QzSfS!>>B(fS=+C$J%H&8{WIg z0sm3L-8TH8pB(T#629vutNaOAR;iyvl~Jq5-v;f5bRx|2F)duO0B0#tZmN8~z=wFPiy}O86KXeu&mrP53hs9<<^2 z(1M%^|53ub+3@dZP27b0q0{sh{fGT~VgUS-2C-t2&PmHK_& zhTlU6)Xe<(V`TYlc>B*Ba6`h!*ziMiK*`Mipo9l)_&YSwG~wlc67;*-@I!P!z=ZFC zJ16^f+wk_ZA#TD?N%*daRsPLRxKEa^%7!0u+Q%trAJ5zH&1)U>Q>6Z8+VJ)p9Pq9Z zKE{Tx`q2S5^&hn1_s{_wQ+{K#EWZukOp{I%epKqmZNua2E5)?`epdNkpaYp!eo4Q| zh99B{k_o>|*3a`c`~|1}PhmXF{@;cl;?XEwM8o*$M+qNe!>@YO(Z0Wy@SqKEKi7m~ zHNfzF1`OpQOpHBk)L7LYL#<;N|CSz4D*h2;wI<9IELq={w2t0jmGz0gJK)bt_!b*p z^N0h!K*E>V@TpE;@Ti2(v*AxT;WH(?*oIGaj+O40@PRgbkki*sl<+JYzT62PBjG+9 zKIlt_{QV{TXxJ)$96T)HTO4rbSRg3j%WU|i&aqUEgwOjG_>~e~Y{OgJ;gGMJgb%dg zFHdm5+evtq4WBj90e4Hd&jG*90Y5lV*y2&uDt|{O|6LNk#fC3;^4}!k%N%eg|2heu z=YTu;(>#vaLa_~>^|3>~wU$ri358 z-YWlIC;$5;e2We5NcR;@{&!3GG8;bCsh=?tKF* zNqDghkJFzCA85mC&XzyRhL3mhH}m^!cnfFwP59A#tNc$?I?C6|EWZukYB=C-v-~!E zxf6bTg0Sy-Hv9=Eyg|Z?ZTM6te7l4XwBa?nga0N8&$8iHJK=Q_?z7=9&vxXmlJKJ; ztNeQ_9PpJAzQu;O_?rXXf0!uWG8^9U6NfJxD&g~N_@z!?*mP@MSi<>1_Gu+3=}O`2CW8 zu?=r>(!X262iowCPWVI#&$8jOoaGxM;XWJQ!U-QL;YYFWAlLG)zTZ*){t~{$hSxa9 z2Vn_cX2WMW;Xw(XXTzsD;W-jsY{LiL>EM5*gb%dgQ=RY}*?(l&@Z~j*{v#~mJ{#Wg zBL}=;ys*!s*IDK7==2XJe2Wc_^B*RBnGJ7p`X>`U&xSAeILa5s8XS**Y&f6aGRGGy zu|`Gkfi`@Wvwx*EPJ(CI@V#pshZzbzznGJ8@oa;_B%WuQ4{@fwoOtbtpd@mjD zH1*qA@*il!mpkj{N(s-h;Zte%-^?GDaGwo-!Z{Z<>*we-R{6Jn;LI=O+hW5ze(Zqv zm+)mayoL_@nEb8s+wiGQ{RXA}if#C%>mB*qVU3dQ--Zuz&b7_G2lt@5{U+Q%+wA6snrUZ?#Yl<;LX{0XQ0t<3tj;c?>|v;7v^@V)g; z`Tr!#Z^Oqs$LA|0Jj;g1&Hs*@_HV=cI@@PEDc{jQTIGLvrO6+A{alY?cW>Rgh`tKj zV1ux1)X?ob>@6Y^rbs$PXg^c;!y%jhEyIbB%An9bD?hW@>h3o$lQP6ofO7?swOQ($ie{7o9{yd(GPuOrvkD zK*GZ_Neb@;NYDeRD5JR*#|1R?7b`{yXIM7#x$B0yT;JgTe*FIh|64$a_V`cfqNc=OKF>5z)%RgzHc*o1r((e@YV$i0 zvD*AJ@$rif?xV(N-OBKt{4{b zEN;6>k9m}`PoR0iKn_MGB*r#;YYFjEMod)7779cn-5l{9LOca{>9NG3`xr_{U}^YX zAlNR3B@_(=MDgB|VIYTkQ`U@!S;n)gl)_%-ij4jj% z{_iE-r#w&hY+?TwMjxSRU9ERE66jy_rx}Q28@^%I_aZ>&h0cCn;7fU4;CS>ev`>k% zWPY4I3)fas4XUQ~t9W#Q4iEGVqXRhe@BmCCFqluDsbnXkgLaq90m7B&X=d zA~>KH$oz%2#nXEHlCLb^6m0r3q96YVHRuW|%Nz19*bywPPB5-_=a*NiW4DErP>ovk zeZu&la_0$XUKtjnAZ@4T{SK{H8HV7>wDtEJCt!2#D5#g}bBCO+ahPomzbwwA( ze8;Xws@^u{`w0Okv0^-GMZbs6$SJkNAAuI?*jOz>CD*CBr)LbOE&U8t|7N^$Q5hk) z#w&N$Fw3E}*uhu)HPMH&h-yph{~uCrU4xXvO1tFw(aD_LLMF#Vsv4_SbHAPbK5gY^ zfNP-a#|X~71yme^n?RfVY4nuC6f%*~MV)IsD~Tn9s`a3!Dft*GSA!!*RqJlevl1oY zubC*?XGH%htPM+}6M$2~MxSj#{a{$@vm&T(Lu@C4OYx23yEwY5D{OjtdLhm{+>g@= zB_E_OB6g~_B)x>cAEaX$!4=WoO~=wSur7d(^lIg;8g=X%HL)({dkZTvM$ZdWdR=2Z zr#yp{h<*Ss@kp(!c&W|zSEPpZ4Kd$T1fckDsX4U2+eN)@zP<@hYXpP(Cgq|KxV*PE zX!Lf6l=mt_%3D=Iy>5IkR$0Dd#&1vsfCmjvQmksc<{7NUR^_gp{!=ivDwMl*dM!}0 zjJ|H)`9sE3cTle} zdXC_;A8&nPs;L4Pq$5~ihfJt#3dN0-?PPw*Q&ZWQ_>k5r zwrac#PwvHptr0KMUy*96HfAKpz<) z>MHoyX><{;gK&L6f|VM8W4>7&SR3;_h(JUahNSAkuvA?dn!Yd{`w7&cOc^PUu?SfjUwA2dEDzRQ#uvnwYCNIeIa)UgK>EOt*4*mJ7;NwT0;= zApDoMbZWKhL7dZRAeXW-4S!<3gIG^d#i3TNmhBWbQr;hjYAL1(s*&;~sHsLN#zOe` zmV$tqyZyeTd>q8gU3Kqms{Sc1>%2U}hq(ypE2UmK)(&{gi)R22;P)UurcB)1o zprG3rx>0EtSVVwIrJcGINer(P07|P5mo~VIR|nq@fYeG@J?;dhTn#qi9-o3u5)I<2 z8WOjLfB7A!#Ax3zR{K)Fpm2@p`;^<{jRB~ z2f{)^z3~_M?~~0KFW&OkWs_A)5E| zIDWVX!ApLmpk5{VD`ojDu>xb5=dhC6=U9Ppb20+`puSX$iiW`~lW#uUM`>5)&p4Wh zW8r1SqBV)GK3bVS^@xbSDB~RvR}Ih2z$sshH2BI}P7-1#0EonFe=m@r(BuAW87lK% zgAg%slJ3%sblO=+pCZ!f7U_URI%JXNXXBcY_BSKl^DLxK6X^_#bi^WEXptU(P;;q! zH6xwfj5JZbhHwl|4!Zc>2N1ZD0*4UjPJttRWJ(hPjB^ZuZbErOz%p1`I zmYM+ zPEpE!i`Eb{?sMxk%3IZ@ujztCqIj3w8YySG}pda+l|H~yRu)K>=`gP0$%tm5>}n<c!$*eV(og~wLs8~HIJk2ZC^a#6r# z%a3tDYY+{>-(yterV$2>ilVIiAhNOA^Y!)Nv1`%ilDCJ;A17V@c&)=t7$srAa8m*e zik?OH&DuAxRuj>ocpe7)6*2CUr*blnaD^$W7!$B*V=Ta?K67;mEF5iWggBPW^XI~n zybK*90A=}hIQs4E=r2NoyA0Po9!9h@@4i3N2m$B+=~gj>!~_IwQ=igHpO&qZeF-}# zJsm4f$~~==tw$tt2h40V{!hUFDfmAPU|c{o2BeQR`nhAiP<<yW#Drl^538KN3 zyAg)N&o&ZW@7IGZ2A6Nfd~U!>W3i%K$~}QiH|Fz*{1asUJsTbQ*E|xJzY4G%8u0g~ zA=B%KIT$ZN6it%cmOr?n1so$nY5Ins(LXWfyA#mN&63AVL1#iyKeGR^f{rP`xU3cDC80{)bBAI{M01Zq}pFmNt z-YKGhrm{k%N*XLIPBt~QStL)9*i$6-zeMshnLJGU8Vbv>(U^6k_ zm_N8(D~mZe2timYMoqI}ChwElPyi^bD*&j$zH<^uZ~De!#uv8&xYuEFLAdJym1bL~M3hDV!WHNlnF5RCeL8o(GSKR%3QqzPoY zToQSofF{k(`&{<;WZrNdpZt3yk54KP!}z3-W0yU^FyFOcOXHKt4D>esU5rmgAqqpH z@yS36%JB&gOCrW)tAS>XOlWKoBmb+HRTS2V@yMbk;^kckJfsdlDss(145j!RK0&Q4 z=|#rzAlu9#K%k_>BHL|*p)5ZSL(O(&NmGtvpn}lsq#_x5JZTz2%~&oGdArB4yg;z* zAXzSL#uAddiSN52?~jk6Sj=;}#k0iXS#~DR6(Zj<C>SMHQM3usSMBIAM4uK>4As1ZfqO3ABoe#y z_%+Jx%TN8cFWbH26aUm$o%-`Gb<+=6 z?GW<`J#aFp1&;-FR7UV*P!D*5nj3@GRGyR#U4_aR5;#d!5~Q(gYH|Wr%08vkBuWe? z30%xaBrfuuHE@>D?6 z{eH5Byo27ql%25dJr5D1L!j!r1mT4r01CWlVNsA=&~5Sg$0KTbQR9|G zl1VsI!tD;AFKzoc()_#_R91^Q~sA8{PNd62epS_%0liX#(7!e%De*Kj1_ z_Fr*ozFuqe^JH$0`R+zi<1nfF(qrx!z0|QwxU%TB@liFg3F`w`)D5mkgx}M*tR&AK z^Ib)h62DPPe{vV^YP>*yoU>SXyqpp9B?C*AryT`_pKXC)0Yq&hMQyr*272C~aTV99 zXCB_6Vu!4BwIP1*00(C89XTL@zQfbUDgOGy%5V&}6#p6oBI(2N7c-@p?@i!JuB8Y@ z^pq|$$&FQ-nt)5c0RYrk8vtaDO|Wy_h9D|tZwXb*G1R2sh`(TmzsxI@dG%)02)cmG zbY=AfJp;!*A5*C)(zxtNMvmBl*}D^{sfHuL;6b?E23JD z(NselF+>}2KpSyH8*xm_pORl*r_A{t;6BDR;i`Wpls-5uR&=du3>?C?U-t=&ec%vj z`mZAv(enes@bxc*wHrvaY_Zze7ba-=`d#BIqS<#uY`7dMoC8O^^~uFCmgMVn|URyWrEcq#Lh-%9mGNd{-={p4I=bmT_K42AEYrwwo`l5V$-#{F3g0aYM~FLb5oI8R{@XD@f2qqPxH?ZFA!h<(@< zROXZb4V`CzI?oSDFR`L4$s)P`)GD3*=Oo0?e>Us(3Xod*;UdnNiJYUQEmOLVm}tUR zh`fdIU1mGNd2j-CkwIjQ%B<}g6{~jUc~9ZOccFUNVXZv{l?Azr0DA^8m7i^arQuCuk*# z?EMSwYTo%B4E}Vubicd!hsL2g^eQ^2*N__-XXJ$R+onbI(*=oGlS1Ay(7|#H`eiYm z*~)$JI8X^E#+VGOpOtGVd=v|^yJ)bj+6a>Laxy@)h^xZ-Q8b3cCVPF%YF$CALAb%f zY+ySr+KC`k`XKtzWU~gge@H1<1wqOpFo^kTIR!Y*?sKz=Mv0~!e#nVYfoWRUVouyA z5=~3_I}*`-s`f}Ft^-x|)tK;LJ(?t-owuF%(g39Ulr_rW%}V!aD-{31kkUP{Sn(gj zSDjD87o~e)MLw>thZH|HQoG|(4}`Xb$6~W*%?k8=*lWR#_Rx(%<)$ip5&k{Ka6>?{ z@^DBQx%seiYZV2)jNaW5_n2@uelVqBH|o|e4k;sX$9-h|c;(iE<3q}=pVGQ_6$YcF zr`^hIT7RL9yGk%I`eIdaA&*Cuw?2tzFQ%_SDs4!UjYl-m=f^6w#60?~!x{ABFO#mv zy6x6m$i_aQ`9xaqXRNzN()}>i=*Vv|-Ay!-F;A-#^R#_bnOe*E#4jijjHBS9YKf}j z7{Ns`-`fmr6Z0*mfRPd;j-i`Ly~bJzYDon6G$0) z!#-dkA>v*`7$nA^1FuQ3%S>kfP&lskt^h`mt8)PivrlL_XAR8Aa zD!)jl;v66X;nJvEDc_9!ok;GU>8%^5tK~n=xUWF}0qVcONTxGBE>uB3qr=M){gZ+o ztD*hWzL57)W3-P)7PvI*D=86r*@a1VaKc zl~@gRmQ&$_!(%sx^u2O@GOQm~OUXRy*gU>ajRKg*R@x56CUC^?%)@>twytjUsD>x3 z8XX=|ja~+o086?dveA~buLZFoFqQ(KIbJLXxnK;uNgQUOd&3-DFbAB5Xn8mv1#+#E z*pQf33pfKC7G+4pezM2_`$?n>5s|^ung}pH%!CW>eGWOBe5HGz#o@6B6#wyj@>BjQoCLw4ta@b_9L&gHXn0t*rX?2g zOOL~we1s6rLnQ@`Ai8lOXIPt*ib;7`d!SQ+Hfd*p_Q1B%$^@qmc_oM*{jmb_AvI_C zkn?eNJKkL^?ndrHZfG_4B{~Ba@<6+pFTs(t+ZYO8GMoZN%7euDSU>h95o`*>mDG_- z@xy=O7*IY?zQU0whzsh68+i`%!2%o=GCcm? zM$drMG2ED^y-@M5xDmH-BN6FFB5vVEB9z|DjRa#gJlYPyfv97*(4;Yq#@hw@F13_w z;sv&eqY+~eY~tr|)ejh6tg`*bC^C$jjXTO|cyTlN5ezNnQ4!+zkEQI?pfwd95gx@G!B6c4U;xRXAfrHX!Lr9Y{;HpK{iqt*-xtIUv7r|1bBR!uv+R; zWevh|zM}JKM1l3KNeGZ<8%=I*0=dscFbp~qN@EN1)pPL`V~R?I;0WR1=!jn-4Jc^% zfSo2@qaW!wHH!J}EraMd9~KIS@FdrN0K)~W6-LG$D&MS>P4>`4GeMa>4gpo0kc40Q zN+tG-!6c%M#yfh`wi$h~Tm4oI4GUV@Q_Hz{xH0-bK4dw|upn_0HX+}}0h$5n*c`;L z0q2FI`*9CQZ|R(GPVWpquO-GO{+SX@4QMUVF0Ethm~RFds>FQR6fjbTk{F-&Atklp z`6i~eKZdmK5q&RI9W*9G?Gs4rsLd%!Ts?mNONlMT9P>K*-R?9rWVbSB4Y>#$Imy=7 zM{vF^Bhur`aBLk7GH@f~1`pOm!rb7S(BLC_eL>tP!ffdU#-GJdLU;^pLnP0C8j=qkmyRBw8UqUSXY25xv#X(mBZ_|&7lu|D z+C>u3W~gM??nG%27@i>8;y40{hIsN!HeD{3T+-9eU_wnJj)&AAWTI!<71aw6oQsNm3 z>m7rjfVDgKa{OtZmOoj)t1EOPIWGCU=CdJUGedzUJ^e)uV z>ot)cHRcFL3W>R|6cqi<@b+*HiED&04c4)j3w$W zeng0cqjTqaKUW@!|BAvVZzG z=KI`7O%Z4OW4<~W%!v6ulEG~1v9NdWqTFnVKgiAxG@?fuLI*-e4#SC{S)5PoE1;1w zLP+!5IMwK{LRz2`&3R_-qn;0a)(T~C6BgzcD}!U`x-iYb#ggOre}Ma~SJ7_;IrJR& zU_;WVv)qZS=*^<&&32*}+ZNF#)T1X`qu1~Tq+@~X)+}@%%L3e^Qg5YlZx%@pL<6|B zD`z~}&Q&u%(&J}5%R7h;ixw)*SUp?7z=i4XpVZYkSI;iMyQ2)njOTU=7%3N!I4!Ot z+ky;6@>DurtI{4h&J*Nk?hfl)#gz*z;YIZQn%J-j_h_JH*x*?i)!_rl<_o2z%MH@`UTzvy2^NEb1ZjlZqYD1 zn7M;@Xf8So9!rWQ;pCl4ygjm43eD|6JeZ2fIYOD4wVMP2aqep7rkb2R31Ce5h6bpC zg~x7;XI_E%J2O{B`*U*d!X;0Y4Kp-1jo1?&cjL*VxJX4ON(^|2gH`S>qR^>Sey~py zA`T5u0U-g7ui|*TQw0_1tc4V3>cB6g5CANE^kgXzbxM)WQkaPt)dJBEy{9JO*b91D z8Ugnd1FM5P%!Sp-Ei&o`{Nxxj3UZGs#!{Fw`nz5ceLF_t7?8gQ&xkeH0LEIj6=Agl zMzlGIwUxM%ScW9Tb!wCC$b(*+dO2xErogPrWLm>Xjju;fAKlXlMS#+&2 z)H0{gs13U@FQ%7JE63QSg1<{-$GDJJ>c!}7Cm^->Pb)!1bjX9Qi_Bb2on6p5bmKi= zaXyPiZ-LAms&QEaha9Wi`MuEueo2Rf)m zR%?Xp`2`Lg_Q(B;0NX)tT)+sEb)??FZmB)r$H0w=P{vn$_Rup26H)(HdT0(#RfYUJ zv4(oH9-5UzR8CO}P50VGGIr8uKnBM`8Bs^xsF`=4Gw*52dqCvfC-QPElySt7_lTMI zn3WgVXe=Dr?bzT*F2+} zB=Sy^c^h6Z^J388$XkbW9Hp8f&OQGVF$cqU5j}Hr(LDD&6;SNF3E4D3XBrNNV5M@B zpkp$>apaleVm~0hyq6>0EUzT}TO^6|&K6e;Y*LU~ zi}@EFXBLN=5##Gw;0>3}$Np4(eRQ^X>BE#4?}5|#OS^q1-%jm&;4p6A7d3C+Z}l?U zcLX8hfh4r=A2R>XwC}uIHdI`O~>8W86fhT*JZNe@=uJ*-wrVQzRroK;~1Yr^w;hBBS0;?-h>F~$oo3~6m(1h z-aR`VY1dPobTmXz*=49C6p>&4Xa99N<{Rmu`u3Eb$cVeIa~*Ox?(1ZTX!H9zITjY% zw|QUZVv*duHM9}Q@QHD);mA|4=d<6}c{|ZE>X#8Dqc&2m86S6FXEFe|uQMK_K+Abe zM4IEi4kp3EU!%Nt0%Vp~+V@x_3Hy$h0!~Z?h>TnX1zaNt!WEfTj{7=?U^PMh{UgVH zoo8_AH@ZT+Zit&l|MkAk*M4$rU9Z1_@9WefM)!#?r`ToH4D)S(b# z^9rK0=85|{&rtAxdY?GZ(j)E@uNU`sTwW1>QN}%p(=e0o6C;i8{P2C^BmiivIolrs z2?{;#S7oToA3=zQtbCtXl1gqyI`u51`95(6i*%tydVocG$XQ5tYDT)tSxEDJ;xvo& zaEtV4i}bj&kWOz#+TVMf_j_?gw(*+srs5VMTrq9D3QM~jOl3C=p{j*q%$8OG4yvRbY zvCt)d9KWJD9L_-{(3}ys{_zUSLJs4X!r~qPnISM@zG4dCcN>3;MW1$;(R$5B9x5vS zt++yh8>9<~AHBP=F~2NUgsY}l45DU$ZvYEb5qz_$&7wEw#!91gq@_ha`z#h~>`HhU z`T7R49aE>mU=O`WM}zglZWcD?`+)0}K> z)at(@`g-1AHT&~E^Z>Zx|MZZO+A@qQy2`DUXnp~#tR~OF0t4<#w7cOL;7Ewf@c`@k zB*HO4Skt1c*JIrma3`oW?Eq?_^XMiKK75l%^Wcf`Rk#LpJaPK0Fa`=(U_gv^B*$UG z*?`#)o*Pl-px?w+Nf8zRa3Xq&c#i|8Gzw{R2c$Ow-!ZOuR-x60!=*Pq0B zLp;QSBZDBe20y5S34hB&$`C~vT8}QTw7^K7t#2SzanFw5+reIqa_i>t%8+_Y>(jFp z{}<8oumT?YB#ad)EG|x;&#M-^ej%4XPbe;K_NkEq#i0VL57NsE62fKPwpl?|nA zC|AOZe109*+HtFVwc{Ot4mb~q#{ppT$57O_*3yATda~yve#weo1E{12dSb;F@;RSx zkjkxN3k8gnj%jG0cX#JCV&?-r0l10xR*C!T)i|78DetdeVAThDOM0J&-r5ll^z4@p z^wi|*bc6mzJOqF(s+eitxO<*F7{?;rz@`^)nr3tbi#2%j2M-4*Z>3;S1_4^kqBXvT+o4!Ip@Vhv+QdqAta$2ZH87m71T3LA?(bd*MX7#P6u%O% z31tK)yy4RUZ}O~a%!#%lxUVSvv<=qIq0x`77yY0+u)x-04b z&p7vpRE$$OfJa*fA|UT9GY zUN}zxe|IoAt^ibKt@Wx9mb=+~|IrOJ) zhkx8S9saQ@l)GViEgls^&Z}U=2sF*;CiD$=i<{r?Z8TkBZ!NhW#({Y8ZVx-wFQ#t_ zVaKNg8Wm6F@Hz^OsjXqM=zB3dLxJI%@PcCzULnF*dl9{oOHXBe3mf3#ZAE~(-_Z>i z2jKdJJI)7I0_uD)Z861-l!=|7gHSi2gP1aB7P8`jGz?s*?cyx3aaYV5AB1w(2l+5> zz7ndYA~(&*be<34@r9$rb#VT-kka7XZb=X?(rul-eSAJ12*A+c7IJX6(Bn1y8cu9& zD0k!Zr)d~ZyhHlz^b&jxPch9GxZtpL@=Pedr5Dl(4G^N=ek>KT0p`k%=@SmXReit# zVL@n56Gq7y0cA`g1I3!x1!)*>1oiDSAP(Rsp6TRr25#5jVhz86nvK;M=&KHDi*`uE zEMqXeIh#g56B*LiVuODJe(M>Z+UV79k|4NL$0r78>`5n`3UQ|noU%*u-o6N&h)o(! zKQrwQ1ntR0d&NaWyE1b#XyGUg)q3gb?1s0O#$xvG1w-CRMCCuoTaR%*{g zF6ck5As7vrQJD~MaXuDhe)|zbz&$9e$vFQ(UwA)t=7lEzh~S@3{O4W>L#;z5e?$5A z&<*_)`28*X4}=bUgg@HG&%%#onfNGQHw!;q(BE?e_!+=Q*&!X3Z!>=Xs>XXbB+Dlk zoz@MGE8l|y&$8&`zXj#%^WoXcXWCyzN#4_4!3n=t%!Z-U;sC3BlPJQ?B+@fo$uu^j zlYwn)#mG$j+HAnIl8jLe594>rxM-q$4*I!7AJ3Qx`oEZ_7o>@_k#Y#XUl+||`jvt{ zMy}P=-3(86(*NO59DS~zU0uxjnJyLxULs-#x>)t&Ycln1$^-j-opSvL`;FptOb9lV zXuSwpzuw-SIR2~l>)@CBU-+qlU&A5r>t*wEpV__#z4oj8xP5QB040lS-|GZzgJ^HN zfZO*w?)dh-X$f@X?2mM!@*niG4Rb{3Cx>X3F->mYXOZ{PxBr8@XkXok6B}Dd$hqer zXl8&WPDE1s%6iwVKd$eC=bQL13jAe+@3QfaejA5hW#M-a_~nFOf4)WkrTF&ysD)o7 z@COq9A{&38)qc(TMf({>xz21qcMB5q`;gHQAc6K1e4BKC_V#nbJ}LSc?dL>iu8-#J z=in)>hIbBt{;AGfwSxZH+s|w9?UVKSJW*!-r;9qhjfgD;F{%G8W}|c3$0Q-oullR` zLa@$6Ya9#qYxXe+>3Mm8oAWZ|KL%Hy5|XjF?c#p{0$gEH6R$|%-9~uZ7BS!BGi|;jOuUG|D<-_90&k@Q zkJ4Gbbb&XI@G1n}^A5acOuUoWi$gg+B)riA?`{X)CnnzKz^nC+>;!K^&Jt}QYAPf?<#_QLr?Z`h7!Q#{9xUqj~;vDUc_G)nSve*-I1%5X&q1oOHB4PF?xShZ=# zioDUA|3Nn3YlGxW{1O0;TF)cSdV6^B7A37*N-6}8V8oKDrYh~+I2)FR=ZI1f&A?kl zNXF~9?ZO#|7a|@&d^F;PN@_(3=pbn{lBVE0MM*88(VfyxV@PVnB96_Ji42?erY6e^Clq@z4}T5bbYcTX<|pw<@S0DtvzFX8i45CS%ie)aV6!{yG|6? z#a|&jS>{X^_#+8FXyVTm_+b-2`ZMNdpz240miHzl*Lwen4_A$r_b!5gioCCV3|Nj2 zj6a5y_Ykc0zKy?lu>+ykWvIrx7$JA9_XT`XskpV?=MdyUu9nvm^lH6N5DH+m-nj@7 zMPMDbgTKgNw0kd>?kU8hT`8=mG$CxCD$RR@qFNr&!DoT^5I$m0i%&K_THfUp!HerD zF`rI9(WT`rK}z(!zhT|CBJX4eKyg&8o+O^Rnv4o>Ow;(x0G10jw7)gk+21(Uird8< zxWH#yFRk~8(<2$QX*^n`ry{OImrX~2CqTu9g15A=;O{TcaSRrVO$B-b*7+Jh1Qw4) zS1iHeC)TmOcNZ|D`_Y2<`R|JJ=m7xb#wyKwJ4tDz+yZ#a_XctXKO!}THBUNTAE2Yq zbCw{1HfDwd_5G^es}baS0-femQ@$WV#aSxWj&pySj*DC=-H20q2V~JbjYLMR4K*GE zNmQE$rh+MS%hL_C2I!#U7j&*@PUkBKD(K|Xk6CD-q-vfL${m|cw-w!R#n|dC(3zDrX$wq}oUx7p@WN!Ny)pZ4Yp)`J3Luko9jZQ4$1TonO z&2U3Gf0*%yuwFxp52e>syNVTF-%w+f94%^6bL)$63^Tb})sjEMbvi6L0~pHv!}N_X z$P667GWUN|Y5tdi+R%T=_Wp)M!8J`xPXhF(u!!`087VBSJrs-XCaW~pRg^(nWIg2J z=--y)xQcKcv~3g^n)g1U0V|@Mzonde+rb6D?Z@OCJtz$L3o_&YI;ZG9^XO*u9UK6l z9f?9TK&9*r=$31TWc{7%VxK2+GwJ-i=5hC$ExXP* zihpb>oZt#p^ty=8zE0dr3XY;;lrl_-(a(&-T>#?}Er9EB)EnSI%&rhaEG)_M z7$C9$L{z%+lnnxzJHq-YEHIhvQ`LWig*FCv0~noD8+v%ZHmUT)CHH)XKlhDO$5vz4 zsLbzSZ<|IR{w6mns=fur)dHeLUxf#OnETr#p!LRl4?!2QnB~_(SG*oX zjR(yL1!h&exf{E#S$+l8h5=b{6z_S>-S@G}brAoX@c#tHkGxAqj40A?qA?fxdx)TU zXW&y!-Jy57NSI6slmj?pILY@XPBQcFzLE2f5a>4&jPplCLLMWF{8w_4?3j$~WKNswD50ga^4++lM#qS%TRey#g{Mr)99BoCe^Pca3BE%gG&p_hllDM}MG0j^F zVkGYMLfkSGf>(2V?}G!2TXjz?w$xqWy&setTY|+D1TgSaNsJ<;3{8bs63GOIQSI^9 zEQqO3G)(c7uIvL|T||ynKSV=^@*i>V49dl7;DY%WJVkHpN3gz0=nM2h4}R%p3(q}p zT^oAD92o8d?_1yq0=bX?F&x$K6t+oirl>yvQ(n5BN{4>`19--$&F zMJz|edL!2GCX^RlJQJZ85u!o3hA(#Ti|#7@1>5*@5Yto6Lyk6Uw3IgZD(~-7?oFOq zg@YV1E#-J$Yz29L!rxeB1xy4EOr1zSFpC}{WhwmW0%iH;#8tHAo>p}%3E&8M8Jyn3 z@!#l0P=(etNcH8f+L@$zUjw09Z%-sZyROFbN-OJYyeG<>3o5SnyU z{sVh$=t!8u>xjY}u=I;1%r~c?3J|dSchO!7+Q1}~@_&G;s86G7>AjeZVT_oKKA#4H z`f1_cb28Z>4{wQ{?-2|)-zQO4o`ifc-^On#eFll-K?G7yx*3X^RQ0wF-7H|;JdgC)Cu(U;Qt7FL=}$)R&+8#kh^%9lZuaHNKWfHI#JCZuVU7IjQHu}Nr1*G<(?wG$9C1~eU8M^A#Ib4A=&QtaE zc+QI6kgUv|MRhtIzw{&!$8sERs9i+o!WOeEm}bHJSGY?46*`PN<03ixS>jNfLJCYH zz1&K@7(D@&g!G(eiL5f`BnUtim$mZ1{qd>+HakYE#;mUZrdmlmjkVn#8~8VX)E@hh zl-CVOa}g+Wr{g9U0)>@$txUP19?uqhI`szp#VM%N(Tf!SYGrUO9*g-@xuR;SSMhIY zoCLs-65OQ)K)GTK5(jT?9K?5PhkuW=RCr`&3o@)etcxptpPt&#Wh(n|9Bd7xA*E~sOVvuY3g zh^Ud$Y6nz1z(ZkQ*U9iQI*vYe_$4y-A?^rgu388i4Oi{N!511@@E{?pRt^%J^cxe2 z{#c9tVpIg^zxpNUA0d$8`|u8;@A(C0RW^S(=-M=e%uaewGd){gzmRt*(R)$Qo6Pi@ z$@{^X@|M?}Mc&+I^p^^Gk8cP4kf5J(Hu}_No9W{clfL=;nBOL_F1E9xZ=wY>ythw; z8>!Gn%Da|=Rx*_8_L8dd2 z!Ou%keOxBUi29gLX;vMJ`Y_9*IOTbd*20XGdaQUwFA(zVzFm|@SgMvJ z&R?hXDu;fyH89PIME_lC=Xg)+Z1m4!kMqu;5B>Bb`e)Hkq2S{tJ`v{Q^D!T4r_hgS z7iZNE);puGltQ>3-c-;>#mkj>F^Ax%#re_P2!_;nj07v@@YgE*^#Vf2*yud`X6`%+ zV-P+hRu2j))~GNV;s<-hP|lzu9vJrG?SjX)kdkQ0v+^Wk~r+Dl7ZaCg9E9335(QIX(6SWH+{78g)l z!Z_+}0|P2TP^ACgQ+2zOp!4Rv_j`XnbZ#xDPMxYcb*k#rsj8rWwyU3Pg=vRbLHKXf zPZH5q{TvbXl4=vTI#-IyzCCuCdi9HCka?yGl{IgC^((qM78`E4T^8k<$Jl3l%bL32BCjIA zrwNz_0atm$*ZV{%hNbRHqWc%cJeOz`Zpq`3HF@YjaW4d{M<|#Z3p4>A8Si>xY_Y=F zq0y7v!Bwra2&93>pN1C7d`tm?N>O56ASeaxu-+f^M{cg%!~T@-TGOXm0INd5}{yXIHQ zv(%Ixfnp>>6eH|5!cKkh2lnY03~CE>I|6!xNY2$KYi$fW3# zqsuenoly8KQ!S{~Azqhp{Ul!ZrG8~1c?Y`e;=fEzoA9odu%GF^Rmgoo zX%pbP_AO9JMVMRiC4Q5|cB=YGey+bODtapLE|TL<7Onhd^ND%N=MHo_FmjUH-zzx3 zoST+If0(pNVt-`LDSFk2bCfC!t*n@Lj?yu^Jd>ke_R;-E?LS@q6ZxyD$D&=(5J?}f z6?&?E;zeuw=fnx;Q4>gNY99Nm!2++iRwX*)6P0Km%xxBs2>H79OysLl;9qf&9zK9j zvy$m}ll@N8!f)&s@;6j?n|K44O1+{*p$&${A~$zU?029Zxdl|BwseY}oI9^x`hkCx z*XTlEU~iMX&?3;>2iB0HEy<5m2A7nY-O9c|m_x9PtijHa{^Y262~bh?mTeZEHtc^p zq-EzodH-GIx6SW#=dDzEbvMt-qkx8ep+FhwwR~b*S{5rUkh@k?9PF3&=%tD{HP&mEZ3Sg?(qB^Gf{lTl$($%>g9G?ojx~W_xqCc=L<0y^ayv^9ye$a9(F` z!AD-lNZNg)SqgBpzhLU1`H|59`6v1|8T`yKv%wiET%$;yqC3HPl8@2v1;WI5Kd10f zana$<@#fFYzImA5y{#kA3<=e0^Y^88r#k1VF@W^ zG|=7ZaKXa21yr%w)0)k~?@=Eg9Ay0{Y zqrZD_R?Ow^#BqU?7K|>sXR=9`d9KTU3M$(Eq%eytjN3$mLuLudG6gjbeyzrdi<^Wl z$7)~phgTnn*TKC^#;NI=cPYdctWL14(j8NP`4^vmFP0RBUQSefrqWy_X&xaBBl-9t zGW0YAP6-wM0%WqEc653*oXlfPzlIwGT+L3$k_Jz0utDl4K2O)VDgG1trv!bwKUH~s z^$s|4!NL2`j5xAo^nxU(wP2Kf7oQpvlh|ULt#EMAX1lr4Ki+Pm1BF^U-F&IBC^Sx* zDrHk_7gSyH0}p{*jN>YCl;Nln2d}d@=Zk}5%+A}zF$70M9H-%UQXFLEG{n)T@Jh1b zVcdvwt@u0RcpL{cxrvYYl%lkiMJklm%#glDYq(U+POsZco$uhci{H2We&BbQpB*ZL zg#&(!w~fh!7>vs$DLx&0z)Lsu3edJeQmPwj35)zGi_Rh3TmNW|EcT5Q@!i7oeR+&Xmd*D_1*Ds}6B zcSTyFes%22qLx>w4=Dw`y_c2K<1Aqt62ON2WJ;z0*P<6u33l9VvyFxHGx<6BE#h~X z(BT&bZCyF`Y}jda7dPmj%tIy!NLc==c9z> zJ+cIeq)$S4nSWuLv*2g3p>Zr^4GJ{s2hMmIq1KBX3rk2s9j`fAYO^|d9SU~pdYS0i zrLGNo>!mDGRYe;1eeK+4J9l%!O(Pr}q#A)fFY?@|ZI&ElH)tt-!;_(rF_ONg0ExI= z02gq_KOa?RA7n^M``_Z2u9TGSad9%Pr<@5ab#W|i!4g{S(kSi%#e$#3KFG1~a$+3S zqxl;Nb*KG8t;aYP`UE`U+;Eay8g<(V&G=H*#F~SJ=Y0nqE06*)M~VIScyw0u_4X0Y zb`hEFBU0N%#P+pAwHHsk1TF2{&n6NW_9xo8A8zNqr=5FL!o4ClAVn7C$ zCzWmWx*}A&llTSr-O2AS{J!KTdCG4u?w|N|!`+A9%eYtZ+r)1>zih(J??Mjss}!!#o8xt(*p-!w94$N39$(uGaH}8EP#fX5`Fld4jo+NYp`(Z zzrduB9A+X;H(nx0n*Rl(+8c>uqcG5e;5+vqZ=>M006qFwLDR&O8<>7R2@^G4zk|4>y`Z=B@tY8T=hJlL-s=yPK44b;Kme{-mh;Wg0O`04m0{ ziw*Z%xTgd7f|%~~ykSSD|Ct((EbOK_eJ{ttU+_}u5BjN6pZld%>TtjFJ0c19D?BqMox zu45_{HmPG6`_UZ()b8$}7TWbiPGq#J$GW_Kpf}}r3BRlP&Ea=46%_wP@IQW3SUm1! z!khR-`TfE#K4$6hiWPc2OK2w3b0~(=4OOt_PjCF4E@Kxjhl9DrzonZ`?(z@Y|4f8W z?(^rG1^Y6AGVG7Zr(kWVqj)ue_Xva$QX=2DCodVUs$1Aatm2Bpqb6zY z_2#Ppe`oK}F^c3kz5Py++?bh7^Rfgo-|i%pudXGAs3J&|M=(aENdt9aUtH+V@3;5V z6k9-E@PNKAaTD}U3F@Yk*tbiVSkzwIAn5w75J`P{?kssqTW~JbQSul$5d)` z4N<*kU#lv#FQ`g}vXg^oVU6btuLu(EiHzpy&e$pm<1z|uO1I@A7IqIaX%f}P`^?hh zducadBKG~i$D1G8LRzNDVdZG);>&+sbW(nvTu=_felA4t;E;V7-*8a|;WB3PLBx}n z{euBgBsQ?UJnR!LQZ350W#N7=6H#0%`Uh-JAw=A6IKdY#z|cVsNVAUZw?v?D=Sp<8 zxLi#|jKa+bO74E1D(xhNa4XMc!Tq4I9N;gJw> z9rm&}=lR0(tDtdTl>QeUS%KHZFPor2f=-hS86y?h^C7#iyF?(ZNry^-J0Io6_8|25 z!o!LFF^lMMVGn@{tt*%7GCC~Z-eG;lu^Uc@JLcP81ekC73jMV=SpM~ve+yqY=VLw{ z_Y>Oqp-uAyM~K=cL}2wQ$n#XorpW$wT)I!V8fL`af;3ve+pwVv>c)hb3P=2nL#4Hj?IVu8as_qPRV z8Eu12D?x4wY9t;nlv_=im&iMYxdJD>2cT?%gF4t{E*&5>r>3|mMcx+3Lr=H>MQ`9H@(+jEfGf?gGX6uTRITCQ73{f$&uC$>JgCkwu{3+Q1OJEd3;gYPi=x*YJ8Q;YCkRs5D z@!`*~(0{Czew$sIG8rG%;%0nUCqeP?;WY`9@!>*I7#aPRieHTnhCQU*4SrPW>&=^# zNrC-39TwpBa{Ji!@o3+qh{F@{YR)gkaBE$e-VWg=7SRe@3>+P$82EejN$=}}fv^3i zh>L})tHV9Viv7=eQ|5wgp_2P+dKeybgmbP(Z!V~z`Nxxmpmv)J=9emDu?PZefThaa zdcy&BEfK34tA$7Koj?n3lW~?NP4?#33q4i~tKLA6$dy33Zs7&uX(>7i$ghV_oa!LQ}VPgosEkKmB~HYG=T>1ODwo8jIIXohc4UBeDRK?%z_l@^l93=X$R z*HT+1EqW%GU|nkjIZ9rYq6JnPCQ>A zeQo2b!9)($?&%FPsEv^2FDw?mD2**;ST9Vt_F6JP;+d*?(ku+6B%>-3HzU$~q-dc% zJh(h*rD3l126L(}Y+LIKC+P%8TTsy68J2yc(S;Ki^uPl;-e)9>YzNB-g~7*H0$~2+ z(lAWgGaybS=`Ko>))y)h>Z%X?&%c@>d8HpXd-&ybTDWyL>-7I20 zs(`Au1+pz3{YOhGzT>^daJhPE2^GQ2%1tlf(1Y4L(V4deTKav6Q)_IY`D%{Zipi~e z2v;mXs-hmkZ;02YjOl6lqcep5@E39Vr+F3qpS=P74}9_8p#PZvNdLW>e(TUiNBR>d zIcQo(^(%~9!Z-`oi(C#bXpnI%yg(+~5~zJUv`?%932fHB9olDVU$ge@(>_!CTD5PV z_SvjJ{YkR|sReLmSb^G?seKvR=hD7R?aS6am-gjqU$*v%^&H4@wa=}6BIF75YM)#C z%C(Q0m$(Y;E7!hC?W@qf8QNE=eO1~wL;GfFUzPR+wQrX8)oNc*`|7l>R{I{%zB=t& zrhN}+-_zQ+O#5EczNfWsh4#IOk8abZ-;vh-$y;#O4kGAx;RWKrUf7zy5zrtA;`2BB z>$QK2Bw*xPAP#o+fwNXqC)(h1gl_J2eVX3lZrfInkv%ZwfB z5nvZj0`IKhikBghCUPO?BrugvqM^aqs84{)!(6nYB+`?*l7FwtwW6 z)e05zvwkdyr=hs+Z=zcskl@A@c|XVt%*4tx0kn{j)5Hq(LPsv4SmsucT9VD^%^zMJ zD|S?HPg;Y-VyFu!FIss>rC@)7fQbrbqlA|#M0wnim@4VEOIXiR^`gcCxt;FqH(-OFXPuGHfltWea7hJo+c!(QWEzI{s# z47It_ahSShQaQ1xC*WN5*RB2*tG{0UGGOv|T-HGTvihNsGo}qc46APt=fL5PY-UN(Sm?NVSUdou|5@#RzGaoi2lPrrt@m1{e zII^FhlWiId`*od~ynI<%_~7`8 z^t&toLfx4J@;Fq5)X8-u2U)oz`zt~#xk&RfzVNprql(0Gk7&h!agvxm_A#(>P@nf> zLG|!5cEfHH(`rB2R#mE{o4Zic_&mr6EE{Y>uZ8 zY&&#n3L}|T?2r`Y-Q_u2PCifq-4!WdHr_c|KK{;x9`#%;d5oh)`S>_60d}bpEbKEV zCZQD#avdmd&xl*lIvF25jHJrnB=@gs3^`V2D+J7E;CY3qvKN}6E{ibTxklWa9su`TnTKIKp1x7 zKE<~aO_Cw?luYX14rybn2^;@noDG8UimNvN$v-v!n3!b}s<$1DiTSj=Nt|xgx zJf&BqBdJR3jcxEA+~wW+EoaIFfkz`)RT9q7ICzx#8^(t!@!JnB#>XuyU?tlZ@R0IMVeyC8M?r=-$r zyeSprSiaF`{5cO-HE#|t$;R<|8a3fHYTUSuh*Xoz6iSVK3<{YnoX>M$Miah~@nO&p z9J^Knf~a9-Jctxl667-;6^hCnC9S|e4?GJN^b||HI@I*6=qh=H=LWfndWSE3Wo@xh zBkjZWQcSUYG8p*SWMo(@^^Ebo_lL2NA)|9$i>ud$7wvkOfuh8E6>%SF8Ez5-Ayc3P)%3+sbq5!8{JdKU10QNZFR_^r*7Qkex02}1f${7}FeaKv#Sw}3lF4>|yC6#x-OAIM$r z-IHP>E_!Cjv?lZu4+UQW+i=yOOkRo$-ghiwqa>!fUy!QeGIB0!8%GP;N+RP^i}U|h zMX2M>Ff$3MubN7{Toap2offv{bCS-8sd`L1NA9R_+k$Ua0KvtUp3pCyJPzL)W&jl{ zn84dw(!i`DgKw5AnB#y+33Mun%stYQ!JZFZd$FUqwIu~liNTC!r_X5C6VQ15mrm`( z>Cwa9)zRdVi1&!RekM8CydCNRf&|7EWY5?CFaSkJ$*GQiyEFkKR-nmR2Dg9TsK47pvT0;$e(=#K@?koiE>1(DRpF}0xEv+>B} z${Q(Lrml((4p3SZumZcIPRvBf>O#62Tp_FD%>}@40|nCJQn?$YkL~zVy3XPjD^)HJ2iMf}ASAIhUB} z2=}4e5bZ-{IWXyc{2PZhI4(tEPTn}Z4sQc@m0v3JuAbc&5vasx@uF0@Zo6RZoX=xx zxQu&)9zBunjyo44+{z-=SvE2%j+Am0IxFUcyfPX}jdx0oZE^iXBp3vq=l{HsuyXa} zd}&5$ouj9>j-~Z7M^E=M{4e5v5q|^z2K-y_Z^7S;zZw5N{QG3m82DT1f(FT2R;qzI zO&61%J10?CM!aIPeML(8Cuc%N^(*%!EssDl$v@pg3idyu28AHq_`=$D8lg)OZ?8 zY)R3NL9YGCbs>-~G6>|V)Soq(9N+Fwz=jU>M*&iHwxfspbEh)_h;+{&_mmA>CojK^ z)44}?WGTm(-=FiDx`21noVU3feVTsXx^(LMx`?8%9P_yS4ebWL@sN z52wlv^#z;e>{W%Lnm_V{)=pEUdZS&bS~_WuHOGW{8x_G!Dx1FM zGN0fog_dliMvdae`Z8l3vPn9ihL_nNvoh=t%nhvAy+&E397le4KA~LQMJz8JTzc7B zCX`PD87w?;1H?E^(=+$@)u12!4e&_%_N8dMPTrsnW!n!777dtvLwTyLN$)-HXY-b) ze;(VJEVn|>Iv#w?6~}z0yj6<%CTt*PMi46$=47%As^sR}iX{G&LnRde#<^e=w;T7F zw|7!*j_BJ@`_``9h!%UlyiPWjGh9S3TK_jJ*29$ntX=Tv#W`4iQ zO-Old%xzV9QFkQD%kGOV?*cH!%NuZLx0Ls)(d-ZaBjvs91?`ryZndXK+1cuq_Wu%@ z`WuBzl<&f(-zeYdx_q6bd}Eq)d!Cc4+Vjg>(&FvuqM0b)E;b*eJu`IqwtcC~Cteno zs(j26+qb8!LwjCh>b8;gteKdWXwO>?bxxG;n$yxcwCAHA=s4A$_nx8Kvla8--zch5 z=qAcLx$!s3+v!==o_!vryjSpQ0h2}hSzv{tt{0|CF(_vgML2dm5&N=Fl5Js@x)kv5 za)+_vWWI`prM%g+Z9DF*mCL%U#+>s_TVXSs<4lSgAl{N+PShonmYndK=5AHW=TFzA z?Ddce}zh_SU7B!mR|bjZM#Gp#OJmCk>b=-=Eg~M){^cqslko zVaoS7SBgse-7!d&Z`jRgx_sv#XRKDEd;@p2F|Fp(Dq&b%J~xc5+mEKJXy1H44(OtI zQg}7GIL?#pO8CJint`Q+>u=I-)qHyg>gF3Oroxuuqn*%^{RZr}W@foAp5U9hEp#Z= zQS$`^l^JV9V=HqQ3gsNYJ#DOl$M~l1D2-f|hO^fyIu{eInM=5H%r}*H+b>FG+65<* zIOlzD%2sdAq0)mpy-kfw)nce?)p%#5_9^8A5AU~x(dnd&Fj61l{rK*@UmNDJjBC1+ zS@DqljtQa)D?u-s;S=9RRyaLl|F1Rb%*C_0H^LNtJyYh4D*;+ zDJE?PclqSP|0a|%WjUJ|!}anpF(2cp=-R`cu=_CYE!TR&@*Y}7ac!!oX&e()%cRfU zs-{&Rm8E>*P5GrX<#RQMc*weQP)FWAtA#89H-Pu!m7W2}{S`~qjPHJ)x1Wyn^N z-8@nzL$764K6nO}I10WzVGd?|j18AJZuf=Tjj9UGotSz3cPzdxyNa4YgY@A{CR_Fi ztCMY8%}_H#OuwNJ6E4aP99y3XBgLGXu+z4jD{y+7iiW{9v8JMPhekAU6+(;7T?yk~0M%a&##-f-0$mVDJ^S|6geiHFEw%6no^iM`qZ9a}! zMtLLYJMTmGoC@v6yXF}f4)}~M7$-QY|3V(Y!sjKSzfaB1TT)Ugl%AAe*7OroyuOxk zHL+W|q|9QkbY5!C&%ksx+}@m~lpUfE1TK==AB*SGCJuhDebCr3^pl)VY7X4e)su3A zkE`ZVbL3e#-pm-`%V|tmk2^KxyMrGy#CoC2xg|SUhFdo^y;(%D=fxz7CbK_6vyRChk$G8+ViVVfD_6>yL!a~vBh!cj+Htf&oK$p4qLrqUR9@G5A{U5-@?fv&L zJt6zcCHv>zBFQH6)z4ubY(jb){dz&ESaDskjSJ8ErHZeO9oy}9bN_?F8Moix_B+L+ z-305!VCDE^56;!v0w;tD>w!#`6J^flG}LD@qUHisKb?j$&)*b_6*L91>;E9WJn^j! z9A7_8e80zs9a8s*_e%3b<@S5)WALw;p?!Aq8&$XVWt@x+c_(#8d%FbZ&<$ZP&0-JZ z4tufFw$B&WtQoih;;NYW>s@SpzT)~fg>a$w69!OSvjETu*@u)i;AmJ^Gox8e!I7u@5gCC_!CNXYIa7aA zL#2~kRD6faFX*q<`42hMrReMZq-x70h#a%|4MA&vuvO?&XE!|w`gT8|;I5RBeuaj+ z9yqG2V=lqMfZztr7@|4$2~#+OD{xZ?&cp|$ID)+eDFW|zls0kt1}Es-uk-zpBW|W! z=X*#r>zcmDfYbH&j)r^tA>cAK+*W}zf-5A$L`7KTf1N;8{!|8RczKE7Z{~#zDSsP& zPXhm^Gz@T83jP%u?t0)TKi3f1r{ipL`zfQ8yh0)>IVhjVRf*!bJm&n(MTz_;X}nI! zzf$8pt}Xx7!0GZ0({Nus2wa|q`;J4gR{me(B!3ag%Kgu8fzzx5m4KgPUeE z$H%4oB#*a$BLCeqyp&(^U!mcy2QE0P!sbtH#|0MuC-6_w>CP1VL7gtY4gW6Stnz6% zyWp?Ta6P3M-bsi@dncSt?kZKjj+NTZUZn8ndPH{ zT&41r{<%m)MHth~=6d9bk_-n}i@>;c^W7t=N^U11q@+U1Y@Fd)mAI}KR|RrGOnMP< zN@iQ-7fKX=&D8kM6e@z?CtW`2toq#roGyQ{hO-MD6&kLm&Qz5jC*_x!z)?)qq5Q(? ziSloxDy96W!^}>Ck@CygQ<0}vseGmUPim;h{Zf7mZ>{pPR?+3xhQPOzkn*QV`EhC) zc)hremVxo{;yTsstntdBGszWFW|IkMhLPB+giit0mGBLvhh&=&GgiZO7r4+0B?JTM ziMg6{3XtuFl|%=N=fC$gsS7<^&d_LI;&M*&@M|jjSLG0`lrX;{!|xU=@j2Y-v3I*f zwhCRDq6kgzaS~waq6f(<`h}utv)OqnxrYm@1W6)ROR{+W*Gc~I@w$&5uXBZf*_wc1 zngAIDJ_S^lf3F?{Y%--8tKqr}T=)S?h{b1hiQ-!GzhGf(dAs};Qh`w45CKm&jc1)4 zXw^b-;+%K1_ig`pGeEoHOPyRRct@(X{S zjLcAHZ@k6{JegLtP}Di~`_KZ!oHuIEcgized%jnmiQ4mn^7yo8zw!*nqtABzsQhQ( zcP#JbW;=vVjb|q2Fx%+k@uR{S;2T1V$ zEA9C44|!>ujo1{63GffVwx`%@(LAV&ZoXGgH-+6aI@E+SjHq6-m3rh>jN%z z9lA5G-;tN4N-<#6%Y&CSgS~MFd3IKLzH4qqn)!?d$@WyQx}f{B6UjDBXRG8m>*G9q zSb)s28piVXpN{37xoP7wwSMy;M!#yRUaFPfFR*(q-t*g6|z= z@1Z%DB!O)OKRC)hH`ca1(Sd$;T3EKqL5Zqh;rWm)bc=CdB?3d;xapX1fDLcep)S<} z^Rr9GO1`e={lpsw1ZIp~+_jvTZHzbdPv`gLL0@N-!~zC-u0fzRScZSO~)k&7_q zC!O0haF%g?caLMjzJohtiHD)j7i`7Ln|`v*Bbz*;dKOM&brf?h6Xe+kTSmc@lTYB! z#hJ#%+?>CjE2J3}PoUNn?fj?OIG3$KQ-;Rme9%$pM;(=Zs`$ADd2NQL016jftz<70qD#u?#J#g<9b?XZKq+0A+;;{K zD2p%E;Z@_@-dBrfeF#LPQ~Th;un$ygPve4)v~4>nP@)zg0A=;l+S(zJ4srK zNwo)5*m<8?m#uIFP#EDMVT2lTK>Ge#;>q}G_MuL(9kchz6!XM^0v2D_CHRq{=;!AZ zP3nC*80e6Q5?4D>vVuhh89qaYHupa-WX6O)>?<5R>JqWn^J(er4aJfIml1mR&Lj!F zhmTm3Po%SPS{7 zR<0PLQU=)26{yCRUUIxBl0JeuHY3!Qlv_p;>3fI-Xr_E_i|gHEJ<{8_g14WP&Zh+> zrTduNRIeMuYzcJl(|gSmDV2UU0`cM%{_lh7RC5pEf9HpMcury?pO*f*8=Ox!0N{mB zq#HP&TCs!YVFm|}D8)lrSz+NsiOz&y*#g}p%J`%~S|H8FMb0kMNmrAPQg7%SxmU>3Qqr z`o0@Vjd^Lh!_B+M>R%DS>0f8lzt~4@x4$ii%fRl-RQ-#Sk2yd}|GG4dmsRLra&MjV zk0#YW=Dg6ZThLa_GLiw10xRnQN?nsr4^quy^%Y&@_&H_iMYH6+3*qJGVNkRFZ!*eK z|LQ#p)v7dTg-5^V(w?73I{!UCyMl!|&*?tqovP*Q3f2!~B6VaA<1xOte6yu1`Sx9R z&A)WC!L;TlY@))(oA}hkW}RM;H<$CkOfGvfzu)GUCTMqou+-l zB+dv)svIvWB=@Xv?Hel0kT5gc2@Amn|E*r*b@6L{HU=c4rBctJc#Z4W(;oEG*W%|e zfzMba`FKNfUA6!U#?9t8Q8}!>nI+1H0GaC*@(FoHSw?IE0PmQM0Qka#UK127U@G0O zCbhjl(vn$HeE?;fp~#_pg53=9$NgH8yLwOH@|OOg!f*cyZT@4;pV@|GBEqHiMy&$8 z1i;XdHxHw0-Ypq1%(aWcpa@; z-H0nEe;Gk5q!(Apz=bmJwIIY$R}TVaK5`LmW8|!%d%WSNrTRIDs^cx+NS8PKf(oI~ z$1xt2yM&)QbB;KJNwszA*>u-l$KK<0Rk8Fn&p@G}Pd4|hbJt$Y>9?z0asqFY`BrC1 zp^oKzjY4m!0<|wwA4TP$REUx;R!JrSc_`U`0i+)JCpg1r?v)RjbBH;%jfK)5Bq1Qb zQI@5XMvE&tT&QYIqdAHA8#vX;mw5s}LIw9w(Wonyij*)w4y-BIe4o2U~jP!ag zhKM=+;@p)k&a1>(u0kh^vsgLDiZh83koSFX#++l+-(eE`2Qn}(VD_%Gz|8XY{owfe zfSE^#Bip_e(l}2;FlN{v$;{G4^agr$%=y(VB)2K7|G*h@9#(%p=dYZ=y^k&!bFL5| zo%Ne4dZ`5HRL`k^JNawY_m*OBGOy=;FD>n4G_%IAC>pf(=ewmoGllWgB+gBvU9pLZ z)EvypZP>5M;AIXf%dk(?t}MZI z&sT^HfU{+~ZaRCTUBP3Fstgy+z%|eqJ0n~)Gm_e~fTZ*6Ia|YHXBeYq78^y=#D<5^ zta&{=IqO9R*c{&V;ZcabqFKnq?3|5pp{V==b4JaKOGM|Qr=&XU5&6V>fQN0a!@CFw z7w(Y{J)nnP;7BL9LV-5;`@;2;ajTeOW1)x~<9^AWJDrVDv&_{TJ~zhBG)B!Zm$!&> z8l^Fx-OX;>S@_M9xRyvrq;1i_DAD{cQcI`0U7cH(?Pt2oag!uaZQ)3FYMZ<0`T9)j zeGoMNBcXO^%-E}h7#dMZAi6_iqDy92SF4FMmttlb2fapVg_*(Lyf-x4WiwjCMFai) zz+jj1Mx3V~!$&~&u&bR^G|-qmkVvyR*;a7Gap4gabpuhzmQVx3T>862rI<2cF4eaW z$oLj1Nez3ZML4+59uNR(yJIFI6v-PO^ce5-gMitJOnKC2r@vBe?v!dD9h{wQ^OuUi zG}O43bHR+1(K9$d$e5Q=OfO_fHc7F%l7-7e zY7`qU2?h^iiDMC`!)?aM%8-c#;yy>@T=705D0u3`u?UL;Vy6*XU^*gb62Lqf8PAH^ zyjr#5%`Tp}iIg09@ZcfE55^9;Mj$g%o>Z_=hOV=C;JoHQ;QJOt>;Wa;rm97g)2}}1 z*K|X^HShvwbSOaOf5nH`|!IWymo`R(T8d$vOIwv(RX{ zRRD51wb7kTo8Mg3IFfE_oKGFHQz=(c$N$N80w^>2nmgbe4HZsg%CR#bpgfIpw$`E~{(3$uxUn(jj0oKLX%c>$ zcFN8M4_=YvdIDn3ANWho_Ssz+Z6)U|oPUZr$F*gh$@!I>z;dO$(bmi9FX7(b1$cus%TA#H`b zSD`;v&>M4UCsu+lg1Ig@KbyJagE);Ty~)|9a$XL!m9x-=HD`tSJr`jqe3(r;UU)yW zhAKNR9{C}Wl6^F}U98KBjjc6b{jGRgJoWv*f%;3>H0HcgfeaUVYc3K-ilpDVM(UOj`ZDW8e;RHyvCZMW&qC4}FmGe$43xN2zf!QxK}D z1w5spc?eGyJY^LtnSa{M`xu0cK&1ra>@%NE;Fu*iVv#9Sr2&%2*wn~{M|gksI*X`z zKuWbXq&`U1=B(M;8tI)9b2i1}ClgN!Xi3=~bG}G$%sB)^ZKd?BmfHH7m@?z6663H` zR?R_l)z%7lnyeU zID>h!@G|#zYjL#0Ul=MpRnn^G$iC{z_}2W0H0gWPC!pck8M3Ai7tu`VcalghJ~aoi z^=xJz6gV|=iC<)t*v9`AebXQ5K;Luo6nz7PzAEx-qwnu`J4Oktfpn;TtosMRUPL+&A`Pq6Rx|leCS9(*Epk#3#MM!s!pGqU>lZ%GNomC?`u% zu3`2^QxAet#43tOu6wSN6vE=Us=+TvqeLaZF*eRqJL9tP;h#W59Q-g@?`OrQ&?D*! zw(Ih(`8VYor$hneOR>tw{a{=Hs5r(Pye%| z-aoQti2JXR4Xc_6A@LCL3NfJJEAdI7}@9DJSNw$$TQtkt1? zu;85o3L5fNwJXgeyup8RsPIn$tQz|=$)-YOV_9XkyhuiE{U+XD9g23Vzpm05Y`K;U z`l`gv58jvB-{wCX?%Iso<{uO)JWJ&x-Q-6*`Ru!2%HVv4Xz8Ziy-n4sn+mVTvlRV% zu<)__!Ju046;}MDzf!V#QKh$Eud?D!C0!Nzmh-qk)afrzr1xq0JV4S{>GXpoz3lsl zR$t$r7A!nNQdsRGdI<9T?i$jZt7-man=an$P@%#t-7Z&Mx!zYwcC3clE>JS;L@sD2 z1P}qNOyVM--8dt%U;yoFZbyOAPA0gR(K9oRIs4!+e=n<2CH-lYc(W%sEZ#oX-6!;G zaauP^(LY$|pL3sXf0aY}S*jQfUPsA#Z#X?$d~HpwaK`cV7ku&kmV;UtHVZj9AY}b2 zcJtmam%bjAUX4fAe%;O`3P;@FuvBAtNU(gh1hO`pCkk2ct8p!1wE!7b()sbE=f^`^)~-yk zBCm)?o+gnJ+Va%O+pWlwcw~2pl+c#&O4(r$in8O8duI?Sq0y@#VP%pPpB9hbEb$T= zEtU8hE8ZknmFNYDm(b{G5?^h_uaCzsmUsz`c9Hm0EB@(t{B;s9q0uNay_L6F@wM^z z(GoAA(G3zGvf^jN8uA@y(N=Z(&CwJDE0t(Ralm@(Och zH>2xasMgsA;~@+#$6#s8X41uITu~p(F;h3|EqpLqd@EAnIcomLv{c$81iRXjkIyZ`o$(ikN2WH8O#Ag-xT4p%ARBgl`wC0T zs{5BmnVvJ~-ohk<&K7fW*o&K$u|k5udUUE>nzN1V_u{zof*bzA)1$G3|gP@~g7))s$5zjpEctoQ|O z@xA)Szxe2dQH#?SZGN%A4M)?i$MU%Sue7+0T3HfoYhwvlWzk4VR#h3k5J{H|S zPvi9kY^kMVOlo68+9rvxp&O#fMCkQbT;IN6w~Ih3X79_1iecY^kWZvy;Lt+~Ir&`% z4)>4)G3UKxV-(HIug-c7e1X|UQ5EhN#eJPoGz0h3;+~407`G@a0~6fUvA`&hWP(H? zwn+90E{!N`e}6HjFEpmGeWUgWs<8cS?GapI`x|&(Oo|?lGyr2`Ynp9^6ii?5C1+4w z_-y3JcvQ?ViqMHUw@+mr-C&ms?-yb|Bn)4?3hsV@cQ@YPSuAxAzk4~Gd8i4L-Hwrd zHK^MY`!F~X#Gcxo*naJa&1_Gs15eAfw9~v_cmyX0$E)Hv8OI0WI1Wb+uL!qr0fGGz zadgIU3l8-05P3hYVm1xrm@H~}KH0{oDn86$^er^zBvl;CGkS3>MyoXn52=QPhm2xT zkv@_oO^po?`otTvmHE!}x-%*IKz`-?M)Et4-$pm`map_3`6nCy+&UhA8dC1{3hic@ z`H458R{e*}Pk5h&GflEU$+jMZO0=yjePMh4 z-ZWb@YqmBivG{w>0gkM(0_z!b{{0FXtjWHe5c#Ln)gon)a@P^1$xQr}^k$z~D5mXC zM<{Zm{TcZr#ByT(Q-v6mk!ci`oI}|{vTyrQvJ_b?Q@j0=YuJ9J(7|~j;##;;uyDNi zBmJgxikXoX9#aw|<{WUj7N@UBa~SEj3oh|Gh$VHk*oO=%^$;IUA zIHqixuutofKb6YtHs*YxQZfft`1uq;iA?Ub(r%5jb@AxLtmR*XsElOSB?5n_tn^{e zm{Z`VgF&vIttM+ISfW1ZPsw{khY;ja6B7YbwHvnI1pP6mmw>SSTIJ5dtxDX=JVm?J zZD;5wV$L(*!j+=_rs~3Wk4n&&Fqso_+Q&Xrg+vi=)J-ou(zJ6q>Q3(z?Q85(iBYSc zOIJ!Wt69v)gszmso(k)i`-P;pB`h@__Pz>xNx~AjuT^1>DvS`bLV54Q+tQu6;F~{F z;Os@{;AA>MyHzsTZSBIJ6as1R-FL9fU|-GOB(r%ALB=ClK|o=kDw*8FUwKd;m>~^c zPW!lRB8no;7BJ(LYldJ~v}U$o%=!5xYB(&A%P7j#Evkwad^8bK-#&VGn#_tw{Whs3 z$`y02A&r8MIsYQgjz`d>=JLlvg$w@mMlQm7u1m~$zA7&BhOxYhI#_#XKV1ni=XFx^ zYAAn4ZXb^g5P02Xtn&DW5TVHOXzfT`l3G)dbP_P>?jGVnfh5OritV?rkn!>;@{kwG zlvCdZNzb|WZ`RPl@nkp@v=t{%L$vz=rP6>22+Ni#rY2VM5g6{#hN0P^o+OnrGv<6$ zRZ1)Uz)}4yarJrpk+;Af;2U$^M<<5UgonaaSTUEMz!$Yk6+>N>i(fXsTyHoJ`yatX zJpmqb9;-au{1>MS78&zX5*YtEQNV~%a9>+Kx6tgCoJgRWny>6qkz%F57~NvdsB$3q zGBm^)LK5~jjU{>hv#{eXpwF$P^$m5$%Bg(Wi?$vS*+>yMg~=o zo=ZV!nOw;Wj299jjpovsOP*#g$pBvB$_2S=0pt)QE0IWbmYZZ+oT^M?&befyfJHo4 zO0GK{HTO!TSSD^$+ofL z1_Tqs^ABFf?;DJfljOVJ7+H=5wR&NLSSxBAL5sJ5%7O;UD^R;tP#nr9Q15hr8YWO? z2dF%OTHgU`pg>_#BtyBCW3E80>j0G{P|Y2nvIVMvAc^|4T@?N#qcLAq)4cQ8mQ4RA z8}ecx8MjX+%;SnRVCt9@zJ6Jgr-3>g&OJS!&XHz# zC2N-W7p#-MYiYhZu6Nz)^7}*H$X(KDON|{ySo&(rxuilmg1?W|4@G5EE}CY2^n+st z2T&g_dYH&Iijvs+P-|z$!s!GsaL(bKKsArwUk3B4_wyFML6qaQhQb(9 zg9k0>h((#vw`p;;GmKT~_q6anYlCm%nG1fDJ>o`l@cB~nG46uky3$7T1o0{p+zC4g z+u^umyW^6zj&aV30zb|^hR<}z8EbCJ6ZScS3*ILGd{bw~gu*VjCP_og&b-MX8^O!x zD{s*WEpG8{za{P+3>P`h*nCr039bXGMJ!eA%PoLR5Pl&D`>oI+m!6>Z+>C`UO8G1n zA)}(+#=_^03d%4RK7CYBcVi)TxE&Hw#mkNgN;MWf(lIFI=*FqrN>#tb?^%8i@T=i> z1HUi%-OVF^aoH~4j{M-NUq&;;oOg~xwC`k2I;&UxV=810A;!;y++trv{Cn6UlLFPWUOxQMH(_5KEIY~S=`Vj{z7@r%kizs?NI^f{#`uw8^Gb}^qMV`Wt6 zc_~Tk3PoqK;WiQ636P)0YLI~%gw_0};+*2FtQ^42ejzR7mF?k{v%no%=Z>%aX&B|q?RVv zO5R127~#f+n)ixj__)ye?qNchvgWMzuKw0VZFt4!U2VE@)`YPO96JqzKq;UMu~N!q zXXyI%pD0#=D%coX8T$Gc;fG@Q!OcAMBB9lnRV-ZPmWucHK@|}C`UvJpjJD7|lRL(6 z`H0N$cMX00bNnTzeyPXKU))X_!_*1WAYz z0tLj?*j;}q=FEwnCfsf9CsqavhtH+{)eh5`Y0?7eDfBG!!nrI}cd97|9K;@viwTOX zAjgw0yfv?mU@N+PI5);KOTpd*Fw2>Pvkiv|6hz$>qQDCJUFD@~jr4NpV7b@BoO-2R zB^xyTJG{$AIJfI58yZLPny@{G0G&t|#QH09`(i`ZIIbA7D6!;yWi*r|X7O!Fv^=^U zDo`&Jq!0Q6d1Tm6=W}CMFT2!X`^gfty4mIJwwgVn?&51Fu!;?jf9N)DvGGsyaOs`@ zEDz5d2P*R9k#T9WeCI!2OST0ZA_Y8=^3E&r4U7ESlPV3;`s{9L@NuZb2GEm3o z3rYu&xU}FqNk@`DkwlllJsuSij{=A-7ORkt+qAEDEVTq^N#|f;%U|cn*Ibc1amT4A+gV2{*Z`8Q4j?BdJ2yCk7Y4a#%093#r00i86@}U z2P_$V9JiAWzd%NQ&WvUu?i|%eD3=^PdrE~xfMecJ{Ol3+`tBoFpln-oTO}Vgd+-|P zVMw7=C3o!+LY$AQPx|bCFhhOsRz;65{0GFyNi?BiKOV57ziiICU+UOV{RsIO{bt|F zkzM=s{OyI`EIw5#*?HM=_7M6_AyhVFISJ7V8$t#kr%$5A)mOPDfN(U6*O7F# zg1SBpOfly(!a8AlFHq?u<|s*=o+JT0mZQ*opu*at`J59aaNAd_Ko1o{M)Z$meDVjsz&jUmdfo;y_L zX7wPPPXDG~Q`zSG>5@z=y8Uwgd!Xr?r09EH(>LI$SA@Qp$hZW3kH4nq^Ke0BO!&^cO9jLU6zip8#Sk18 zVzRv19Nb1>R8Y z^F7s?hIC0$02LS|ONqEYTynor@&6rd_H`-%WrF*r<6BAME|z?NE7|B zsEwGG(9}t*qInQQtT3=@+HbvTh(3{k*Hpksv~|L>j#w#!u;~%eKG2K}bz*b#Zh$)y z9Mw?*MN2&v+M}O}ry;t7k1F^I9FEr-y{rF~5w_QVp2qU8F>HSYNAxA4%;`b7zr#`e zBp#p9SgHmNb6-zT-9^xXn0mT+;g7VXqxviUMi$y=WVK;52>^zHWBzC=gvjmf(4diTFpSgJ&x*1B{`PvP@m1_Ar4Vn z=R4S!(MLRBna#0}n(RN`h&dp=f&C&&$&+W5JoyX7EzT)Cd~Ftj-_JKF5N_S z4ZxZ;80CcR-6*Z+K+`b+?0a6$lOB*NkK;cAq^7eEFrvy71qh~rnJ(KhT4*a^>W%d=6wBp)qSRx)a(h2)nJAyy2tp? zu{^L)YF`t}%dCwubvG-ywMUeh&;P`Y`sW-76om@+e~<=iS!1%RL}c2Ty9jHkyu9y%a0v{Hx{1 zh;kK9WRk4H=wJOoBdvZBmTcyySOkUbS6nX#FJBe_nHCJ9HPA&W-pB!pf=P22AF*na zN)LUXV*$WVyqX>QpMI>*4w!`CC zUFciC5zkSBmGnj?34=my40q4Y_mBYRJ^P-bVJJ(KuA9FqyU6C{?sH)dO5JV z1~!|g0gJL&YJg{^Q|Q`K2h4(G{S#xVq0&pLoOY>xz~Iqie56yT#8yHp8F#u-hMbbc zVf!K+@#=7JPbIf3+TXdZtxB(LrAk51bwlr&Ig7>95a`-ue{vhl#6L9#D3RWy$eJj8 zHbR0AM2C{pW3T}+_kOPMp6^|~D>ddcVF#b#9DI*7y2)s}bj9Ac{`R@AU`t>$Gylt& zX=8`smiAkZM!f+a@D}=od@mRKvA6$|7?!toz4T^si~Th_ZPOUbk=cPj+L? zYO{aJ78M#EznIYdZK2`u_b{F<<~%3W;4wOM#ViHOx$d=V5aBL!c z7+oUY>PG)yuvEmcR1*l6atq7$=QI|s?KUWc;UHnll&4euQ`)ljpVlthr>q1Wvn`f! zkEHF2c6_^{T~8uiw4vLql9h&jb=Kb=Y1X$(SIhDL%colcYxjifC`Wpa9`e8L5Hz1~DfSoqgzonKKTb-r9ptxU za+2+P;!VzapHi7*`yFArj7go7)c@qp@qa0)ao2zT+W#}i|0_hN0heLp$8Q3^v-yp- z+^6%sfM1*TL+guO>N)|(^6!PY^VsIgyQthhIDYkG?M3AQc=N7h!qY4;IR=VClLPgg zy~h0y5Qtnjk8#yr!c=&as7f(cc|k4g;8!= zr_z5Y<-0nhy^8FZKJ#}KNo-M0OWV{P&(TN4WtT7{xNQ|m7F#qduFm3`FD@AvqDTas5KsSIra`<}GMC4sL>+*JXwfIN91)NIzF5D{K8-8toqwo7Cb8 z7H$zR{|OdEOM!w2bZ@l3CK0P{03jFXiaT(6{S)|N&PEO7@44zm{EhZH!4;jWa;+9f zNA(}@SkMn>Xh+RhAyB87EKt!=Dn+@t<8&@l8C+>)0G&ewx6pZ-fI+8*C~BiKLn2mH zkuX@;S=`Y1m_l=6g3jylH`=2ch0YHZS~3wtMy>P}Q8mvZ=#8_%PXmX7YI{!SdmpG@Lp4zvBw zGXC8zGb&jj-6!)Y%t1bkZcuQ~x5`J-iOz|1`$*T)C|FPN8gDhLSh9Lp$L_GOE&%IG z^IL8L#MB`EIV5hjqOZ`=SVQg!Xk|b9VEIsBZJ@hIg9j}?!==o!Zy{2Yx1G=wsWUhU zv>ZxEpzQ`)R(Cwr*|9t^CO29Pcp{4rGt@TOTd&k}I`q~zbzT8kTz@4`yDh_6CL1po z^8P0F6S-vUCEP8Pqk8e4z?WTKyy{HfxJ{&K~Ude7$_f@SDzW62B^bxALpz zcPGCG__fSPvTeCC$@U4qfAaemzgB+9#C7L)EI${&-}4*B?>v4(#0n!R`M3`MQc~?$ ze|PCBf!(@yi2C1n(tGgIVy|O*JCE&?DdSM$Jc8)irZVQ3h!vZEV$At%p47^yOvkD% zYQZ;-afOYcT$WnHV$Mmb&Lm8!I|m3bny!<)1x1-0X+|yZy=?6fgo<^&et$S5=b5~0 zN-BpQ1-)VCX^m-2g|s1q+dwiM_ayako8)5kSG@^W%%zB@C}*?Kwo zsO_G2P!Q$YhcD!;^b&Ppy6k^2C=Ot=pvk`TPnh8ev8*?`h3#ALs=W?Q2cf7-w~=h6 ziVxcl-_C|#WCZH$Z`m~k-XZ(`_OA#I+wYGjl=%e)SIUTWMyPNe;kt<51+FI77w|XP zujFq$*YvRc5}kMkTUA!RwIGe>Tb;=F2A%J*D&K2VzWv*hh6;P)LCy~5uP>s_!e!o` zN%@#WtYnPE!UdbOMlY>l?!wtZF1%DtK5|g$*yAS_AXdBjdSmDEH{u?q~>5aO5fV4?`T-S zJm?yx8~UCG6rwJCHdeT4KwEF+Fvz;$kN0*%aRevPIPASQCP7Mh=z{tAr@K-8o`@@#gfEeI2UK40hWT5d+KwqJud3^L;loneXOGA5k534vl;7an5tHCN| zs#zgcPO1)>W?~Yf+a0bK{zF7a|1ee$s(=Ll2-)Bp6lzWNXUYp%>2>e3J{Wa*EXK}> z>ekt7>vL3@m9_LO!x-UF(W^ehrrlNe)hM9)lomhAUIY7rIa!(GW&iFO_V1QS62rbR zWX)4cMssJ&$KkoL1&5?X91Ax>jH9|14vu&p3AG;QSa=_9R_w@ot2n#Yp$SZiJq%6BY3O|UTFmnhzE~T!B1GhJ>tRRRq!G!_@K0@;I2@?0V}vU z9z0P6Pqu`dGIGy@kUXn}2oZ+aE*|KAK+1V+pqa)&oCn&@XB$f)vQHaxbJqY6P z+=Gl{DBXmAWwSOi{vdW4LsZtQ1j49Qg=Dy6WQqes00^~A^Y>J@V}3|tqvYr4HuXIi z-KdbI2PL^6U!yogrR~hUp|oMBWxBt&O8cNnb4*T2x9B~}>BuSR92JScmgRYI3_*>7 z{m&E%8&&3)hQ0s)$KKlj##LSCqFd5P8jNfWV3PqH``E}q{Fsg{2gXL&NAk#wi3Gww zK=XS>(#W17YX)hA3>2Hh351t->y$K^ zB-}*AyhPAEVtW11`_}$BXP+}Ol1y{oy=}G6%-Lt{z4qE`ul=|7&)J82JNdLLpZ~TR zoS;jpUgu!l8_oO`DEFN&(uC1Z5fCl@Rl)<~#j%c`i@lhDrtOJP#`^V?7 zCf9#7n!lP;?|9ebH;@rXS1{beIC~j({3=JJ%RL}zlHu2dQ{VY&@NWr zf^jAvHe>4wZN%#SJ-)>A5Ohl901lBDeIGV`k2K_PZrKgw^qbf&yYP3uNk!%F$bn}4 zuHncp-~cRwt{`Y^$)|urI@5OUq!K5dMB6yI)K_yMGXToEZ!{0;O2 zv6d;)ssIsjwuj+lb$a4)O;tJTDL=*Kv~7?}jU8uDNE6!>*vQRV3FZ zjiK7)EzjVaIbep@>a&=(r9}#GaJ}FK)o4BHJ{EzFBSEB`V_o5QsmhOzPDqzJaAAA^ zJ=+0tr{`xheSUP|i=QTzs7AgGqTm5~DEm5nrE(Z;6PH zWBB4Dz9G=*Rab!&cu@Oqc4BiN`tP^Uf0Htc3bSBDR+zTw(YC$qqd!cH4(&p5|2<4T zp#1hBvqswvw2ZzECZ9tiilv|gzK3I><@-4NQIAYW2PK7GBl^&3)RD0zz1&*(5zHD* z{>42QRLB4HLH+%*FC{Q|d%a32OP8qwMlcr($#My^Cd51QoNGzamY zs8vPd4X5PMoxe;TZTks2#GjDE?xvSO?(vI|oTF_&2R}$McCPiHAnvZ3N>sgmHc1p} z67esdqsSK$^l;1H+OW>9mMje|AFclW-576txp4776!!(ddZFei#>|@f)^lg8DbN;- zoGct|h}n*z>e1KnjZ*t#SvFLSErn-4iYWWgUjL-(xuZir0V8Os{{e0}Y{_k@dMe@3{_5J(j9~g2tEz*S`su(VagTefs*ge;DmJThaFY(G%CVyIEFnr=2qt8OnF|3}^ql$&2axqWJzh-)osXdWcFQ>I;R$fVXLynzC!)hW-kTZX*)g^b#IG z{Sjy~W}I&d8M?@f|1B>dv~Q6%fl@FiWYkkpFbaVW$6*`h4unF|-n$P67SiHS@|F`r zIG1sud5RkF|MVX6rNyCkFgm^DMuLx4*8-c`mWzox4T*5Hp^Ey~%=oSUyrU8yzmhx* zE#j>?px**wzFLgv_~`uwq~uG~Tu(3gHs_;bni@LuV#M;`vs9m2KHTyle2|p3pva0} zs{Ui3ki6wP`SsLXLAkmMIv%w$1)_-wN2B_@(@nkTs!+h%JM?@d-$7fS_}bBq zZ@0YZROByzuI)_4b8Y{~o@@Iq{@=sDfcIGun*$%#5Qbm)NLvBkc>G?t<-}xVi(NpF zms#RS+Yg^>`zHkXKK?(z9-ALQ)U5Yp+fSn5$*&*d>$peSFo*uakq`a!xwf+ytPQ=^ zGIneer&mz=m7oR959U-80`HoVIIJYc+8P<;_naM&4MfI3}Qf9MMkO#9K#H&8P~ z`vPemryT>_3E1e@kb0~=PA@sVio~$+RtUR&?A9$O(X1WqID)DSN9QZpNOI5fa5#>N zX;an8B~P~5h>uvpx0nyKP2kq?MElW?Ie0G;#RhqC6v5C=eg7+XIS3W(-WIeYFVygg ziH#@Zl*H#dVVP71<8;Fy9JP^d#`Kb{qHwp5p2NH<=d0~SdXe%J-;4E?m86|vdhiVr z!|026#z*LZllrwY@y(+2ZTD4drl}gOP5Hj72JIxx#N6! zgjFAn3&R5=kHYAZKe?+CZ#!fco(B#_AKy9J)&LJQe>cFIJleKy^l9-WKh)^mJUby5 zWNoC%pj}jpui;j7F|4BzY^>#&&Az2i} z02&sbhAu;g%kvvVzX^`PMd&Xp&Q`8{8NT$=%^4u)FXD4WUxk1DlbDwpqiRoW)T1@9 zAAFXY1^QevAJ2zr5e$QR`H>BSAEbp7(q5&m_8Oc@iI)HQ{4%-O{-acOu=$j4ji=Yg zGH^J%Vszmj-$`d8jGn3g@((T^xCHkFUqQj9UeaXst>3|yyAz`h71VEtw=8g6RGf59 zlUlKlXy*^$)1uH$4!vfgvg8M4!-bB3b^=5D_!iYZOp1fg*IP! z=RUG8{WUmYmSt7jXbqaG>w#8*>}(mmJB02v(a-?s2I}?PYbVnZ%!D9w%%>t7mhS&w7V53l1wk|bM-k-oeF zp(e1RIK8BnM|fuxyk1UhV3>P;1*L}02?mI-3=nhEOKNx;!8u$(0{Y)8z$0Gy$-1=s zM!Z@=l?TIt*;lcCiu_jR;nB;W{ACbg=4R@C=;210)xQPeM{C`8Af}h>Cx;rDeePLy z=*izTTKzaC9=OtU87WOX*P%4MfUG}(T@FVh!BC<@gg*S>Yc|PmwED>XuE6jfB~pmC z!l25$l};qN5^*ku8xnqcZ|NZb#xM{ zaogxWwv7Hu+vpoDc!`!~I6j5?gwKy0Mw5z}UDkYS`&dgwdwtsp^my<%)qH(E(Y!iu zHV@~UF?Zh_8^J61v>&*6{ejEtzv_%N{~f;dI(A@kta-Tp$;#%~$9~*?%hUCT*K@iH z+DD&m;jb$3xk&r1;e56I*1bb%P&X^^*?5pd^+F^InpY3iw|t4__k_uenMl@F- zn%l_F> zh&I9aqlEL&T@>$z6Q$z4YFwpn>F-neJ}^19^j?|1(Pwz1^~p28e3{4ELDUa@J#sc# zJ|S0@r^jhr1R5S;q#<$f_dNdp8aZA6WNSq`hLsQ*G5_m`>mo3}=&M1QtyK9V1h@DY z7u+@oZgHn8xTk-4=Akzsw-;M}`H!4|BZvZtFwWjagpnJ?guTotMH5u=TUth4!bk(? zRUUqRDAw}kGZpzz%h9C`c&f~Y5=VDp`{Fa9d{xWQO?U{?fw*{gC~ZcZ{~65&qiN(Qi#+YRW&~Yi@5F#rWYLTMqr`T>I$rEpM_= z`{=jwm$i(V;g0Uk&@a!l<1B!R zszZgT_Nr6uO^D|C54?H>;*r|0vb6nhw=8^cPbGU}2-{mvM0$UDVtV?Gp~^R&NuGE< z^6KxR!XgOGaieEif9R(b`9`{3POqIW@aC!~`_aptt)AQj3mPX{?#5@3-(C86bil-rRBrV@H2TQ{|2PS zNzUlf!hEgIeB`as>Q^5RgW>(#r%xTN{wF+7-iwrRVZ;yJx}EqON=)`4F_Z72B)<&~ z53RZd?ikO*73^1maMMfXBQH$8TW~8^nPo|hAxE%YD44ieFp(U^&X;?Q_M>L>XeV@( zWLPN&=(@No+GSus_%H`i$H+!m6bczj-se!|`3(wrGE_k^d+wtPuggHYINBaElq24RTDVX-BH*uM zgg;5UfRHZ!Rc}+AW@JKj!*{l5Ff{s?=Rg%ZanZCwL9zJO#7~J~5{B`IdK%(j0n<(N z%BR&%19qs9$UJh)5zyF#@gf@K=_OqVHhmKBBaQqyA~eNuN4(A%JCmcYL6!!@k>3rj zzq0mo-(US1nq5bT<)vxaY3n(ecTl4=Rbsf39mI$ zp^D(l(938(WC$~%w;&>~B|Z(gUi&A=km*&|!2@l|*upCSzxoo5LlA!QEB`xQ&_5Io zO&&YVA1Xl`uUB)w-vkm$(F&~ZgjU5Ui_y8@lLNP$$}etmrjqr4zVH<^YC}I0r_Dd} zM8(-(%Km}3{Zs-c{{oHC*()Zm0WCC>j|h^Xwa(ev$wL6dG50(zXzXuAD$v;fj_5NK zE#d>`%2J?9dEWw{b}|juv#)94C%408@(z!vYC}DJQdUT)kyBJBU!6RTmJv1ma{Aoa zCA^_X()j2k-m8sLdUrJ3i!QxW)>Qw9=_!Qea@x*`;G+s-3tyq?Lmk^+!fkSyO^Y6= z^&%oqsIhS10fw>N}3${ofGyq36-~pi@gcbENvW08b8}*_+%4G%10_yp0EN z5$L4ge)gx2cw1BiE&J9T2ukOf?!soGy}vQ}=g0))MkCJmrCGX-MEGKa1#`sp7J~n~ zz_}4pZo*VT^$(szD|qPCGzNIp3xR;LcR4Hq$p*L_7B;J)d8pvofC>FCfhhW1+_;{A z?(oD@9q-5N(faE9?|*xGXgJxu@bh>;XPY9c>T3_K?`%WS{m4@nqs8c5-x3|#(SH5Y z^?%)hLDyZ;WYvp!tik4VyM3(gYssUF8@Ar^Ei9}PoUkLCG4X)x)% zmoGYEFMw%>LB^>Sh8vo=lx;H;n9W{Au9|DNn|v4>*+u^ z*6oGAMu{A|^%N}nDqj@|08O3&F7N@xaPpS#5AdD6Qjzh6{X-G<(LmT&7MBkjai?S= zP3ZRab>T%f64CP~t221!)%0^%a%jS4#jm$KIMts|_q9Cu`fcg{p~UD*qf<@KkKI<$ zcJZnD&$T@GMy5Z#^=PP}?c%SY`w1nmK?5B&<~{0$I+KSMHh|vrs;N!W^|v}T6)fL) zt5t)!@D;b_$hxxniMP%}r84$5B+<^(1+MG=@WkL^%nX0wkHQ%8oT^A1t^Peco~?!3 zr||F;G&pw4)X009p0EELq8|P46tjx9{>wkQXz*f$t3s={#Be zaXg_l5Lb+%l%Z~t9C6&!AG|?ZmfCWoJE6jK;CnM~;XGc1jG-=oA`j8@{DX1G z&#C|PiO~~qhbYUN&wZTofU!?Y`&nr}A#D}1S;E88zCqfCv=>XeN7~z@T_bHp=W~yU z_@0#Zi_(5Y+H6$#FO&9KX>XBsm$aWfDDeJD+Mkp5F=^Y<&PlsV+ILI)c4^-v?M7)Y zmiCB@=a{q~llIfn{+_gdA#Ihu2OboB^-6n(w40^fDDB14u95bewg~sIg#W9APf7dB z(tbkP6Vm>qv=2%5?f!rzwmseu2m4F7x5 zZkP5qrM*$wYo+~Z8U9HLe^}azznt{{u(bb3+KU2sQ_}s%(*CZrACdN>(ryfdV=ptC zv<2(8E4Z!VeW&)WzM=fqp1$;!q5kfj-KoC503oAo+qOHmZ7>W%$Y-+sM)Rt{jRs++ zdyKuA{O;^f-ssH?4Cc9Grhk`l4JX>4$zO9L)9Djwf_G&0qz3{KZb{`+eMWjne##r zeT6UFMF?`=o=bOUQhgpWyaMhztdlKvmyA&Oj_lB2umJhoWjq}3p55uR#)6CIx_kU~ zWP{QZ{Ce&J?o161W*$g;&RRhx`bGYdpSJ$|KrlxM-*uOGoBOgQ)91QNyn8xa7ncK~ zr@3=E-uXa!pf9yAkr~Xv@?}REf0536GW|W-y;P$0lIzJU=ubWrf9p^_pY3nW4r@^r zxeGEJKY>D`RSoV#_^!L8yCc=rmqzXv=aPsw=ud=*j&K)TX)L+%1pQUGj-kGM#?2fd zVxs4F=VW+1+`V)(rTpFadAQQa^1^xk{&2Fel}Z<&~iV6eC!{^Sih1^ROIIZ2K#x*yP-8GQfbE9G0v9rD1=n+Mfx9nZ1?)!}XY~IMF z2liz0c{KkBa9jJ%9Y)iQvFnZOfYCdUP7?#h+8bjxuEG3jQM^1o+tP!(Q#pT&LBTY4 zc6Vkl)0OGV_v=#Ci=trNy`=egfJI%Rc(&XaB<%ys8@wOd(y6;k@;trUbE)oh7gFJs8DINQ!rvcmTUPaArNept{%|GAKJo9y=lP3p z>HOxQfx+wmn0Mt&iR4{yu-`{nFuI2Z2Gad`=mFF+89nJrHBDIm_z-c+u2sJAygFvwI9+F-2eL3v8;Ne@ynTXo~wUSlxbo$c=#G;S5( zmd@=9T)Lv|^QdPpJ+y&n>-j+SCJM_wAXF z3NjqOBbDiI&t`K(n8LRW`{Um{kcM(1DDuc9o^anj)TMb*c&TG(u7d7u>AdSkc-zat zJ2Lq`jX&URg+w)1K~JU5B`W!n^;372^3S<$6o2Q?;BMtWFh!E--KU&*QaPWyvwM{z z!O2XID-D9T4E6PG??#)_FXcCwM~{;k+$}p$B1CxGpe{a;)*Pk#&cSqhY99)pgsJ>V zEU%!DCk)Xcf5A^N7Wr=nzbY1jiC-NS`9|8JpeOT-I}kqdNqEZmAb%g+($hmQ@8LL8 z5)bYu3<8ztY~G#f-<95x)sb~~7g>fE@*(W4`Scz^nebck`Be9Ak8UFEhr!?GY#(n9 zxO~9B58j;3?c)x6QoM{4WtmQHC(;jOy3+_H-P?xq>Ha||#M_5*x$FRX5EmcyFVmZ$ z20$93!!u6==k!`LdBlX&52U)OO(8>g!u_61PkuLtQE9XHrHk=|dk~Mqy)s&jUVFNK z7YIs2@rdvt>qu=K>()E`P%6~_8V2Fg``b!7p zzjY=7RxHHA`n8IyKQ*CXdvAM5)Zr#gnueg7BYenR z^@nW_KxdE%CHMAp3Zplzvy}K=`@bW*YnSM`Tzt<{kCz&=El{O-d}zP!%#rRQ=|M=; z&)=Qu8%nE$NPb1LpTH!9#uxBQy32N(V^esdi+EjFv`5KwX4h_&Ou-Ltmx|p5zN>0@ z>EZar?uf5*Alr>@VIVyy6GD6_{S*Fo4DD$drbHII3#Cs_zY2FpHh)ic;6As!D0k3H zq*Fbuss0`xJ;A$PVmDsd>8+;di8mIf=DIg8V%_#T`x*^C`U){~DiO zAkf45ID4EO9yy}$VNXT4 zL3r^n1vfGZ#*RX6czW=(Jb*v#!V-~N(}Ex2G)<;-&7zzFMi>n zs3`u0YlO%DHd_>PVv9gs@bfk+L~Ei27fz6Qn}ZzRF!o2n`$O1CAn?E2Wf(@zSc#o- zZhA=eWK{YDB;bgYDP@S~-_X#Y;D(0%xCrF_k>SOQEDiMf}r&ohnWhfls36kL% zL(EbD#2-&BP)z9`Mve8Q$GrXSZFjiwF|e~=m&bVkBlw?};hS4cGOj$xpN#U~56@xz zRr(28hmp2B;N*sJHf#Lz;)2`TlAfZk_=_|) zHll{Q{3ISfcI+6KRQw%0m}rbNdj6cA1|xkudzCz!QJu*s{wsL_Fl}4LKaAQ#W>~_o zU=RoHC=bM@Yp8q(6N;+(i2T`DNyK5u|ASqk0GkqSM*ef*Ntnv&mJOAam7f28-Jf_J zF;x50+}do$6A2tiMuzBH6axmDakLp1!3kMFLfP8+e1P=%E4P z+3&%W|2*^I#M9ppMH8g_QMyQ=E{v*7xlfr7L->o(KE}{KQjb8eDu1fI%AxVBLlc^l z{;*(@JE#T4K4db~)gRRU1amX*&&4n=pZW6fAF_T>d!ieyec=r<_m9MPbaw9GY8Amn z`ekc#LqoG@z(n|w$cWaTQG3N3ErcciXhVob0|qHzoW5j$#zY*BCyqV-xyO$s&_N0R z5!Re&4ypc%UD}WwPc~di!MHz~aM@hC^kj3d=so@ykL&bAgcQb&e}?f1VGor5a^BW~h?npW}VHQ;+B`n-?=wd9xjc=GqjhZ7< z;voXUB)I0vOBehYeY9f=cv+;b@{M*6CjZ`J5o6pE{^$>(U?58nmcnyw44DyzgAU8| zxc(}?6n;BKs5(B45HvWd@IN~~KK1DM_&Ck$V7wD<2Cp!@OC@~hJ5U$*yYVYn#jjvR z&xK`tLVv`d(h%{xFo+X<1*`B1Zfq3(!->|`AGWq8hB<#|2p@jr*yo-;$d32O@T9vP z)aWZ%(U-7GU&6ugDn5pxhf)AQ!ffu^wr$((w{K~#6!A%Y(v^pTl{^%z;&Wjs52|la zKvj8Uko5=(7&PoX?;{ZYlQU@yJGU&XKdReU@@Q8#`057?09S^2B_s$i8LTz<`=MjCQbd7;`% z`k_jn@b~Duu*`o2d;Ea_8lYf!#V^`IMpGb&isGaE7n!f}L+X<%Jxae+@=&mfPr)KR zo<1q?xw^~sZ4sa6PyC#5Ds9@I#&F{^4&zk;u_|6m!gY@K`yRE@Vyf}=J2QL z>>3yEBCxuM{~3z|i!Q1N(ztkn8V)#t$FRgR6_%@4dk*wehi{o(io0f9dJHll>CkmR z+NJR7r5_c<1Z!tISPyL1xb$?nL|7xPL`ggq@|;Uo@F3kmPr&MaP6hDWMR@hLA3;Jc zf6BMsR+MLsce*T|qEyPBwxw%Pyb9aJ5DrCn0e=|%)Nl)bv8h+%D1aw$2sdC{yp_zmsHOyri-%?y7uBEx zyj>`VcO$!t(VPNrYH`0rG;a!BqbHo|{Pnghp7IFTEE|H z@!}M4b{$fC9c(S7CGdzwi8hxoK~Kb2CjSMs677A7GAikbAakW>G6R=NcO?_=wW(-{ zKVg=leza)UN~ByfE}lv!r8$X`0JUC2^XMHwpC;lBAx@&au_WF`_=s2D79m%NJ73D( zc!~2$__c!1OHm4I0BOd>^XR46hk3tRnjYcNrLYXPOe5!|Lr71QJmRh#e@cENH-yG)xox-UA=P#JdtY$r0iC*#bwIhezZH{QcwFe_B{Tm98k>a zDpyVw6-9Lg+Dy&3={>+DOj2%^Pd+)ic!VLYnekLPy-jjhjz1w6x+~eVXzc0frQFc3 z(&euiHBHnxb@ypxZaP|kmq1I<37t5Jr&e&F85fV*gWy#PPo!fj+T5MEx_LgA$J@-> zfO!{cF@@8N8?Ta|piB4C>GgQq&uO)k$lof|8tMn{k{E(!X?o-*BvYOq@hkYNKzl}` zh4TFAIVPS0;@DV@)Na@D2u+N6g@p1GvSHy z;Dv%1gd$ahvl|c&A=$W)MOt5xb*bED&?A+#GBTf zNo=06nk2+Kj$S z^w=6fjUG`GZO}~osrqg@v5>pdwRVRD8}Vcohs<5 z*i^e$DK-02dMDnUXIt347;a9?%;_yc)Z+Cd zQ#wCH?)%G2DS9H${pFw(o^YcYM%M~x_;(bcdG&~LnMyLXeWm#mffu2Ks4}ykKlzBd z>Ah8!6;Wb*I0U$OqWz=RkK|KiTs*J+n;B2F0isPSMNjmo8&FOJZ*(s*ZoH&ND6P}i z(u*JxuU3|+5cKeqk{S7JLlyxFBhsp^X1^*cR6s|d(~c+v0Xf`?WQL(%I1KJN8`_J z7?mY4$3|Lhz_@r9HjhbtH1(O(Yx|5#Pw+?D&c+$W0bVKu{{q%1N_tVuN>blOvy%<5 z4Sp}i(_Gv~;?p%Qe?q_e4EqB61N=XOK3LQ4HT^(@9D&sg8RFPMT^sk|U4;3l2KXm& zzckoEYVk5AG|K%hQ`&LgcLBkv{PS_QyB?{0sQcoDK@Aj4ytTp7Q_ItTQQU zw6+yPX(%s0fl0H#H0GHNPtg^+k%EL=NR$1LoHGzwuj{WK-1JuCj4E;6ia7+jHYpsk zT|DJja(0d5QR(!p$*CZ^T|_U3vP_qSzh;W?s079_uaeML5qk|33ln-iIPs&erYEezAWh(;E8fY@)IL8 zaSx1=TzYEWQOqXNh@rInO5v4~Uol>3`IW*e)$aPoztp;w=C2f9DgKJ_O7m9=uM~eH za<+H{`+&P&=)kZ!po+$UCG>AMamtKWKwvbEd^ak!_DpFTFQ_AG#XYZv5#D`Qyl0+G~2=+~GbnXN2g6&_RPb*b3;FXhKkX|{t=ag_Y2(0FG6W>#UwDu!%)CDr z!@PXv%g4XT`VrjdM=%;3Zm493c=4uNXD8ihQLeM|T;m9BP8P6{d#o`x@mS6vSoT}* zVb`+Dd0)DleHuGnT|@25+V=Ksu}1znqqot}Gz>xtF~h{0ka)${lrTJK1H56F!k_Li z6Xpb2e38&F&WX?r^bnFfq>)QA?$|=4Px%r)V-y*pGsu_)dcyYbDQ>(HsQVuQj!u8~aS6Np zn?y}ZugO6n54*^v$ksjheq=(W=w6yeAY}|6Y&!4vYD}Ta|;|3^YjtEc;8gKVJi70ZAq<+9c} zy(t?7U`qH`F$0mAKoa>?#qcBzVes}7esHo0rt$iP8Uho(`jQs^1o_MUllF*rV8);W_EK_JCL|sTY{DqeBk|MNInmij0E}q= zLZb5o?Ba7@AN`%|*RdKFps(>$pdd0lC6GWK-#PTaN`aO51#?39OV}~Y0-^K%nm?eO zCmZd(J>}~!a9BxWIWk{{O}g^J`2KW><52VlbwPnZE%^#7z!zad_4=K6rEuOhvqAMp2ANnZ`qWReck zB)0}H77K(felUE4$bV>mu6}{={QYM6db3WiH4tAby|Aps*UJ3ywbFbi$rGx(&{u&^ zu+Xke6OUXUf-*CXzolTQUmB+LS1`3G)P6{~)9}L+oqm`=4d3AS#4p}&-hb(9;sEId zWVli-9{F9$RdW%KJRfZE1ZsK|JYGx)aufH0ad$q88HvcD5%=WoP#`fu8xk{!B8;LF z3Pp?E!{PHsl8ue}NkksLnrZdZN%Y(+XDBsyVjbtuxq}~gDLOc9MjSXJ(3N{A)QpsA z>GI@bN=#wF9m1h!exnC&IDJ-!^HSXwS96E>0~sLjEu5!n2?FxY-7$&)`#ydo)#c1! z9rkwfF5@m^tMQ(RnCW}l(jDhen@5+}g-h@6se&Nm;ou0SfBD~I!7b;@*a{?3T`Tl= zE!X?pd^$3y?D4gocV}jzvu4KeK)(BQx)&CmXBY>T=H#JF>YZL z4>w*ssyxsUk0Gt`;e55=ceyQ@pJjxnDFFRQTjdkQ673Eyzur4)@mna43D6RK>l;O7+6)-#mv@bkFF?} zvZBB3xhs5-g7Mtl^wLnu|Nf|lgeO;i^k&~B>^l28yTK+|CQKimOOJM$iM@!V;AA`Awl>Jc{N zs!7xH;O&n99ozKWc|PEvrRI>{TFLh9-X1h!Xb^+=@dQ{ZfxoUD`0eZT@-OR!IpS-5 zeDz4KXb7Hau}Tz@bUZF4KcF7uN3^R#LQLaR&fjwn-JQ#g&fUeqyL!5GI=Z`?|6-+# z?tAclLy_U>l>F(QGX3PE^#+t4uqNf}$4B!~BK^F4@YGmZ?=8orIJ7S&=M5Dto*s(_ zDCp_o{BZhWolN0#cQOBvP;O+q=`XYHrf|7j4I}%x&GFoMdH}i$Hqy)OP5&3wTj%*hMp4^3 zKfV$rcD|g-nk%gN`T;ro|4=`8f8&$90K9fs?^Q+rY{YvoQr;2gI-Cs4+u?f~B9UQ( zpNp$ViuU>Na56a@=r4dl!_g77lS9SJsPP9NE#ZuLS?oHBC662#x8zPD7hht)n(!W7 z{SYG``wr;Vo%rA3-`hjj?sz%JIwLtRyx@CrV<*-KbR*MT>7Cdsd=;H39U0F)K1k1R z$G-$0zI@P#D7u)0S5xvl2F@QH!WkIQD>_rA;lo$%j$s-FjmJvu86#8|;(AM-^gMrm zUW?rrWN5){x2ESSz0;#0NI|cKs_T+<9~3|6%`L-q_2oydvnW518;zYBw)XyV3%kZ% z!Y+f}M(?sc&FhYa>5gx1vsYrgu-JYdqqVy7c(h_iD|*lK6}y#qYsY6ue@)PQfm*ne zzOEi6#+PawEf$7oFZSHc#D zW_FF!z{hR%j!TOkz#p9-5yE`H3Z`ZUOgu01p$Wp?xF0Ke!te++cO{^JJ67CE;=7eN zp#Ph;#1Fa~rQIjYGVapZlbf2~cpW8?PHNJ|+Jvj+7rpQ0AJ=R7<(Au0<9e~Y$)lbH zuTt?hBi;g<4isiayt(qHod_w~Q~uo$6$Q6tJT~6-Siw5&q@BRkYNK4(%+xS>zG8ks z7=E-g_YJzM1O(ju<-()WprUZ|qty7H-hq;a)5Yu)_`s}=a+TxOd(l|ZUmF4PbgOZ< zTbd=la;JlirSaioJzW{UyIY*aJfx!2sIdL?`9apw%dM}s&}<3YgjvSjbr$kM z(@irWjnQ?k2j`!hF%QDDK3}GbJmRc4z0$oXy~4dXz0y69f1DrC59S}b3p&0^H=LiR z5h2@pQW6jI^k$Nrkn6nsyh1Zy zUgpb7Py+MyW4?YU3C#CL#eMO7{ZOTYVW{jk|6a?BJCEg0uGnwMVljFvD<%!01n|el z&zw0!?(Vo0A6ezsv^{N$uMZq>4mk7$0e2{;;nU2+a<<7Ha(bMQQ;RqJnpqz2X{PN> zcy>p3n3AMG!qhd_?XT&r>8;vd)m&lUYVUV?onC9d)eL4`qv@;5;+t}Vg_M&jbX$9^ zjhNYJ!nMgi!=Xh*G)zo?S@clD!qHgFa!o8IcC*wl)55cBfMXIq*Z1jxn?yV==K(eO z(1}uX9k37B>RAPFZOGZ>!F9xgJ5KZ*iH-*aoqq`c))14ZjA$3SJwrV}&m@s<<_L;@iR*qj9_mu?T|0fCF(I@aKz$PyBQPqr$GT z>k*=g^A^ZQ4Zi}I6*iT=l)c8j0@p&j7GW!F#f(3_^mQRYzryYYAN!ew>i{mzX!MDn z`@s)g2UtJHUW0P$n>o|)V>l0uPHT3RMOzCl{e2_T>E=v#R6 z0d$dqTG+#gr-ae)Ns?rQOhp;$X5GlIjl}`wlvmXht3O9?-e4-I=_$7BJnQXcy-obL z#_qntZu*kF<~w$@iY=;TwQsYEa{*HB`WIskHiuEWaG9vv!S_4uw6<*aM8b_gZ0 zVCAeBuH1pb0qiNF&=#Jw`pdtSB|_Ia%ctV;STqMoh%3ip(Rh6MRIO8zKFYdP07Z&H zT|xR<{!q5V^bbHGG9jc3FI#|1-f!F^y0-Mf^xf2V)9|w4Ww}MUMOKaF6%?Hxln-mlno2#<9qW$u;_8bHr&RV(Ec}7|&on#8Wa_G^I)}BE*9FCpIeRq!ZIXT==!pqXv z(!1Q=RLJF!wiwG*6zc7b=o741F1HEKDvf9|T@&nM6pT7maFI0n^`MW63h5PJF1}W7 zt5~gFYu7n+MJ>8SF{4KpUz)4{D?8?j8RX5SE30g)ITXQvA^COn}fo+|T zKbHi5(DY$%OJGjt}I&pB$Wurp*_^e{;B7PO8K0Y5Z((~8Q#TuAn;^|@KqdMGt$oX)RlDD&QcKtU_5nMK z8Z9oD8?7B6y>*SPFsSF(&ZkfTH2TY&P0kug-NMr*XPE=}i%a2a^wEwHKj7d1@67`} zzX(yoEhYQ&=VP&E^ln^FT*Ucfh((V#CgK&Ly}K5#&>YnLemiULl2Widd?A0!HH=x@ z7yH2qt|K0lyOuBAb~oF_dRZUZ+F{&#S@-PpL5kDY%71rMzXp$IhkL#DQE@s;x)hpg zYxyPfSLRsx{8c5ORQYk~st2Mk^W2{=vOFj}WsCf!)WhWZ`jopS&t~*m-K+}ZDAHKF zQQCbPs0bnGMB}2QP&pB@(&V$={+LbruYRfMTwBAZvCA^NUrVDYHBNBx)Pt5^)SfOa zES^~RL{qFOCh|_9xwb|>We?g-h(W~D#C2g8PdxxXj!TWBX5~kd8)^2cJ*3t!py`Vk zYFHh{e`L@oa68JI)DS~{1Pq0!VG=DCl>se>+_iKONTwG#b%o6zi*Nr?<{wnb=hI7) zD4vtkUFPTKRB8E-Ge4(NJYPTN>qk%m^X-AE9rNwMzt{B%mBaJxU$FM;nt^yO)gFj( zyON@3<9r)w=&fKm7=X9bQ)#yyjep*2_h2=KuJ`isEq%$vXEeR``)t~_Y%#~ZAM*?r zqme{lG@{`PI+#0$mQNRra(%Q3(D0RxPpc*eY_WTA zRxEn_T#kEc?zwZvV=?6(nD@b8+TsIQKJ%~%Jn|LExFGBeQe6c3!zhA-DvwiYf z&z9S6I4@qyavkwd&8E&ob3P~Tt?|$68K(BQyDqm8lA9EquRJ7WNf4zX$pZ#%S~;XO z$hz}2XKIF<;%lO7j?h{}&dMQLEsTyo5*?|F)kJIRn%dWlta)lye3$-U{H^F`IQ`?+ zIm}0E^dV2N{?sj3^t{}rry`>{f!!I_Q7{0<3Xe`=Hhey>IcNH`W`oR{GyY}la=Xr+ zJ3g%nA@y^lUym69;t10!eq*6+owj2R!*7$rmOCsuO}{#ael`48HErYP4~P0*&lcLW zrsl2_xHYB3dXm=8%)CA%^W_5YdA`gUU*^jN;Bz^PdMCR!X)(;*ly;BSm2^Kn94qa9 zTAedbLUz|Su&!_(mqnKqSV!^A?-#G@(8^AZ*QAT=i_IF--@nN9zmn@ZSOuqYtJP~a zf6L%A2N^$S{2Hsusj%mcA9AWEs*Jhg*Elr}^Y!nJld{EpANB1i+adp;(fB{1I%j;jellnLItP0XE`UDGmLe5e zf34Pf$Sz**k*hgcJ7e*B?v_$nGKH%vAFbc%XIVz;C3N-UQqLP{y<8a$zx4VFwbok4 zFe^Uoh7gsFM=>kDC?Sd+U0Ev4&wJQv{mVA9(!YuMzDhF-{!(DmT9#|H^0{GZ@A>Xe z@b#zjwRPQfd(Um0a`Dsy`psrgr~!>RttSCrnbPY+0r}4XpGvZ8X2lQ4e^&gfpwVhZ z=uwty7}{p?E^?Q8U6K3vlvNU6>gQU2QEL6>J&^NNdim7&_q0WN66;=!1np?~nOX6v^lS2;6<_v?g8CfjOMPX|_<{V=jfH7}lCuZU{4#{V~gxyBxL`kY>; z+rj#ov&hmg#iK^Q^!igkp0nZy_2!xB z2lzRoy~pz|@M%7wzsECS@;8khX9saTPRVflFM!br z{Rm9giLSd=EaXgR4`)MqxZ++2c6_4!r$HTzB2wk9~eW`E&Sz zvE%vvPOkNNU76{SKj<4KPSmpH{v5#ch_eSwoBZARrLy1AVW!}eu-$pBVF9UgtP~_+ ziVbm)E2ob$8el9J&LMtzyaD&ep$tYu^DjgqmJag|>BJ&#c*rACFmo{$H*yuxV%hY(jNveLgRt{FdSd|j*d{3&*30sVYt6-8bX>fKPi8Wi2`A8 z{dFU#9bacpC#}ar8rL?r$2@7)+Cdhe?DI|{46r?Sw4@*;dA_) zG0p3g};Ct$(*&f;>@C*eAMzIn>*2s$M;Hm`;HwwJU+qC>BEN)pXOzV(<^{qFTHiq zoae9NSN>eyR3Dsi&L0oY%hO{#{X9OJ)|2VuFde|vC(`TkE6(%U$)3kobpFZl^ZPUY zK0fDH(BlV#aag4Ph-pNQ@c2+(9Apj|PK1{ys$HgS6H)R9K!*Es{>cL$(jlwbElC8) z`Xe448@9-w3CnPVqf9@_yP(hgEyQkV{y6v?U*3t4i}ZIUq`#mCZoK+Z7`M!c2`)`p z-p^2d67+d`1otM<18ftB)Nq*db9}roA-|*J(wFJw@_X6)jt2;#p~Hq{7c`iTP%D_+fyYPk7#IE=HmuI^GXm!PHTLZ|_OgI$$U1{_ z?xjEQ(VAHk<4*~H9)4=vG^PX$ehkEB<8P2lCE-g$F#Ne6;SkKrvvw@oynaJcfuTPA zp#1+E>fh({k1`KtKL7rQlwY(bK7;lbO^FE&LpW1=g!U5JVT3z~_UROwKcNqDm>tP= zcIJ){0*7<>%*>fi4s-fwuNeKMe_`C{9G@_GlPkiL59_3xJ0Dl(OFC%p$Q1A$9fux7 z_|Az59$K}3vwla1VV;P-b64~w9Z8=^7wD#7rQh-PTl@4pDyoUjOA!H)cpj)JL~ zCV%j2+ml{@0eb3KFRp)ac>#xT$4BHzr>pf6yyT*ruER9AD{=IN!t%i{rJJ^2d25K7aY07tdeD zFY)QSIBtIb94Ckkvm0?{3D#wa6JctZ6)`mZRLEcIqmYarj`(4yKt6wz5iYL+m2k7b zOgjJ@ei$P4;ZMl&1^xJyL_62dczTuoi7%V*{&!gFm*CF_%kR!G>V3j{EtintE6a4Y`F!o92ARicBo(i4N&%rE= zkO$WnAw55A_+d!T=g+IC7JdTW8a+{fdHiQ4a*a|y;^p5$<6#lD#JBL7LyL0H4;y~i zi(lYRz}w4DM+;Bo0kGls_reSR33v;6(0DL6kuw!6^i7^VE-&)8ptmW10dxAAKc}z5 z)P(6UK#?EXcX7CXf#T;mFYtx_>BT2tFFpbD4CLV@O!NWUj?h1ih=8SjY}*0<34)_f zd*Ah51i14leg4rl35U#O!V27X?lj?I;+orC-~+kHTv_CzIjCSFA{Eu#Z53W48GM|N zKPV9mR`Q#dzsaR?p>k02(?lA4oG*VtiD8I>{DTtFU?o2#&kMCx zc#UN6abEsGiD8I>{DTtFU?o2#&kMCxc#UN6abEsGiD8I>{DTtFU?o2#&kMCxc#UN6abEsGiD8I>{DTtFU?o2# z&kMCxc#UN6@qd>5`TR_f84VV*5|}55!jaxwP)6do>!Vtj5|0VIJuj|+r@I~^+{IVO z=uW4cgl)PuO>LSAnd%CJ*Y?lS*>s!Oe{-I74qJzKU~U{}1&>SvN=@cjV6 z!ZPd${X3SMvMq~Q1!ld-){L{OjVM!*z8v($v)f-7uxUCSU2|vnny+xz^fHsAU@p zYpq(Q$ht^0r{pu~`Ba?Y7ms;v`cn~o&y(nTP?;x{XR$K$dHjxp zDK*O=$&sW&Bq>QRARl@kgukCtP~uiLx$-wf{EP&`Z*tV>NX7OtOdb}=HxM50fD~ee z*rQ#^Xpeb?%^c>KxK=ou>>_am!Z+jeos`XZ80J(sbaEf+A%96Ptt?@gajcE)8Qw_%@V$zt#@+3Bx4j} z&Q*|~Did?b|6xd&=bFQuMb7#{tiVap4b*ONwC(C5)v6r2<=1@>{zdgC;2&sz5h%tA zRVXKMWI>#`u~|XifGxKpD2m?~tIJ6+mGKUBfaH(8cvuIh>8-ef&ES)|?7e&=u%Az&=SH+^mKj8(OI68erPuYP2f8ab) zf=?IoGbD|uvAlrvp}oTu#uY7U@dM>^KVhmX5{*DUxX%z?@lm?}rsFA>vZad{auGjE z{Fd7mgZ$(#R>|;NTEiACV`arxW_@LUy;DM9I64aN5*7=xiUD6SEN!J9>{oi5wE1RG z-~{SVGqkjB=Jm?Kry}|)y3+Z-zuu14vgjgS1mX-wV@3+(W0K4bf#$SMA6ZF;*Z z&RCA2-#~o-O8x@v)BgJCqUcia6vOF>g)1D%-%@Jpz-Mv$7U*B@WWx^59*mjt^vYWF zsLkNjGH_XI3iXCckhBBw*A|q96SP|nwj4}7eBkXscm*o?C|KAeA1Edv7R9e}_8;n# zpMVRMu76Os#IMR>RVJ&lSPjMz_{CUVggP1=j!nNh7Q=^RYZ&??m!kiH-c2bs6^9uA z*;OC6tG3|h)NCT1-*mO`_Shhuf;gAGuiejGTTtBa%m zSqjyFpMlLtr$x_PFfB7@#f$nMYJWG%_nLKUqZDSXv}(eRr<{Pj2^C2pd=yBD-Vr);g_ z8lXR~<+I!#E3a^ekHb@%WVw{%g`1rw&@3b08c9v#kMh7BWx(Glc)Zh- z&p(jA`=(-rHHhzKb`#p=b!;uek-Tl)u>}i4@H`^H_VDWkyw6(l7k}Nk`2~CM z<34E>19Ot!pj{kLx&+cs<42S)%~1K8p?vW0!!mbb>}DR`mxlTEk*?3@0R6&g!LcUxhD0S~<mZVd7-unUxKu9nwP(lLDX@Fhqqr+N7+NtCda{4P}P3SWgUL0UP@%U?;NgstSK za+;UFl0*qx$?rntuJBd(5~P*We^mLa`4J_DppE%CeenR^`0SZxG{9g6 zX5wgmd^Zzkh%I7X?F-Q1r7Po0n$qMH(%w;aZd{~rSf}Kuk!cs<{=0_zcEquf> zU`p>ltUAXQVeuS`yFak6e#-8ubG9%up?-LV%hkv2*y}cMfC>D73C6#lJ#hN;NZsjS ziB}~5N~6ZAbMRqJ)`T^LI;X~}Gy*hrFd%>F>u@h|ycdEX%*g8l6ng!mpLIHtsh8`3ZTc zGK_Cr&9+A}P~6TZj94UG_lb6_z;hGu&mH+hT{sr@{Db9#2Qs3IRK4Kk!@#_$h1S7f zH|93IgZcH4UFxc{m)gy^M)*ZfOYNflC5jJ`8h2SqfVhWQb8pQu@r`HKQF{oaA76JS z)9J1t1k=AC^vEExNLgrPsHy<{z$PbqDOwN>;O$Rb9#|7O;wN%1Q7u|H&y-)50- zvdF)lekuO%|0Fx|F#E*Qtj=O#gO&or5%!5FYp-MRBL4aM#B!|hSy)*}+4Oa3v9>_7 z_yU{uW6o+yufM#*{dERo*e_wTDlgh!CH)GJb@&b$uSfe;(ucTfEQT!~*!!VOdHS{Q zWdC8Pz^cX-ZL-VLe@FWpu|Wkt&HT#fS2zqE8h&`t%o6R{dwgq}*25zfoiB)eYGItm zUa;#dJA@i**)^73X)*jNEQ5Xpt7^L71?Eo?hKxXNSQQ22hJC^ND+5cvzWr}Tnf;G8 zbOEKfyo2zxa>feG;{3mZ@ZpF&i=GI)gYZzgoH~ccF3&T;bMgMg5dVyaYQKy9MJJ~G zH|bh1o;NYGX&D-KiE!j#Zpew8<__ z{~hknGm6{CUnzZ?QR#yU69wnO{3_{(!mKLBDhiYeWqy_PLGypC{L!Yw=m!(f9~mLUoQ|}9l(wDq}`Q?Fq!GKX&qxhn6zy$Q?LHj22CNZin#4xkaWZwkck9Miaooa#L!TpWp z_YXpiMvEbs)`$f5_mmG$M`e|GKWWb4SD=ZdZyyKDoWnDmmG$EmZ}v zr2paMu&O8}{n_c$iVH?djnf#k`_%iu7=kR6Z&+GqO_FtB1 zf4KZ-+uu9e{`a}W&(KOY6=&hSPkZMBQukyz=p?7*H>-|E$CnpUq_8(V$zd+E1%bv(8@GnkFX-@AVG8bxB}@b6u{W}O#)eW~!N zo@`fo_3m`v1L=IGJ5_>-*y=SgMI^WSy*K%oSUr3AwOS%_t8cpbLc_;buR+R%5OS;6 z$4iCJXZEBAXXkyLFD%JW@?R$W+I6efx&q809Yq9o^$q23OYKQ_WP8%v^8=awT_R^z zWrkN}Hmu5+t1{d{!NQj@4ogq|3=f44o2hU^{i&|Lw2{vmxzxa5+SrA-j6I0V804`T z)~dm45SI98>(8eL6f-iS-c+V9-9zEKcc=PyAz1f7I^Ay!rt^6)JE-{CvaPM{w)UMn z6ioEm)2Rp20eX6RZ%gOd&i?!QvwQnFU!1L7>HG#`Rga>x#f?AJ*O%>1<-vV=Pj+CR zk?A*jckSMs8R+gy@1R7gAl!!6ZR!5>00L~!?M@G*Hy{mJV^6AopE1~%=}r$C*#XEP z)qUTfF_6B0C_R`@_uK%gJ=}9|rmxS~JCMprs|C`cOLs(qDy21OF-s%$W}vna&G6Yy9lU4h#+ctC#`3x$?s!n*;vlp)M}J+30T1qz7`D{=xe) z+jCje2TB{6S;O%{I6I!o$Jyv@4#;^nd?g3QY`pqr%h&7*n_jNpYVriY5w`o^)rS(@ zI@H^n9^iGnch}bbO#Zg^wHv6`d45J_(70n~d%L88b|jJROXt%ns6U*~&lhx8Un>f! z2t~B~;XFTIAmAY!XEKq>r%Hr#{ffigogT=ihg`58EX5A;w^y_AhfHmjkmBm zX3M}pY9BEJ<4;E!T#Y8=ml>qitPDXvy>hr7!Bk&vHwh-y-Oc3#n|1XK@p9Y6rNh}| z-P!(L(i-~njP;~*`Q32t$qw;mbr-exfT5TO*7zubQX4MPp&UL$Oike{H>_Hnf|7=xt?CZ1!Ds4b=&{p2Qq_0 zsXjK0rW*RiE+yGvdK&Cbsb*jLcW3*ul#OgSH<%vk$$D^pU?}ZE@bAeCq`UL3i%UN( zat`#g^I+w|BO;{5o6R zlNrqQxy8qYsryFP4JjIXh6eLSSK8>!qDS0|&be!!AwwDcz#)=s^{#Xl=mV-8y6`N7 zApf51UPFa0>gT~9$&I<}3>v9DU71}&nf$&R4C!m6`g@Gkpu};F?o@w&mb2WI&F?k_ zbLs9(Zw3X3_*7T~z^u-oBxbt7e_v0!Ylv$@s|WY>cMETZZaKXx)n||%K`m0_wdlPw zc*vysG9N_|$@Uwmd_KJ=hk^{VIXl$XV^H+2{xFzJb(8c4jQsAjksHXODDAmskjw5y z3S(eX!L7|3_piY7JuTbr*m}op#%cp~jWR~*P5JD7P=kmt_B(= zc8RiONXq1+2{hY(*NZwzGBJSLxN7j)4S1k;vy8TF+wR;3#>le+)Y`Mz9C8F=>@oIc zkRAP5*p%sm22?xfOFblnO#cHAXpfObWrr3;%>p;d9lpE~QE)a#x)!7_@wjGXWFJTm z^zxc6;33jOxI-4KW_zVBhcJ1mre=-4)Bw6wMYoqqy=bTmJq|S8`Jn+)Y*h#m@sQLf zZ)-Qw0|TNhARh%ox8ymrRi=-`vOS%DUwYrRbPlQKy0NB!iuRTY*B}&06r3)I&gkV@ zDaluczcWW^Z-m(QWCp3t=Zh`i`{}=Y{Es-ySd!B5G`SPcUyVJ{O7^au54CJK z_DT!kkxl8kkaRv3;OkTXJ`;c^B}{S%K@P@?LQa3O=X%a3*^uvv-}vla4wFsrm-c+I zmHtOl$6F`&eYKU`Np6HsHt|mGz-=KsvI+O)eP3-MIgDl82B2VQa~Ke;h;o7cLc`0om@^fEthcf8T4}Yv#=q_TPP7e*62b%bknGug`kdde*a^b$n0r zs^0#3eM)lv`tvh>96CQWN`B{UDeD*ZTk2&$_H|=_W?k9Nw1c+OE|PXIp7yejdml26 z?KjQ#`~H}3U*|WrbF>SMXIiFGGw1LJ9%E625q^O^5+ z`)xb2PSoRdx^^h^N9v;AnU{2Zr$6Rcx$-a@XUtH*k0HdRpY?t%%x~0PqV(DP@gLMN zeNOV0%A4$X+)}x#?p@QLN164u9v}bJ5?jBEpPwne&a~~pc-NQf$-T@6pMp2>_~Z6H zXy^~`^Y*y%5|XKp^H}D!8e1OcHP)5wPk&Mm+fn*#Jj-J`mdAW7k9vaTrHabSq`22|?eaV16 zrb$Vrt?ZMupZbF96m|RKVp{dwt8{z)b0tFo{kHujznOjE=O(saM6zG^#sl*`^~H1? zwsPLw>-zCXzW*hP^d%*8T={v7KH~Uvb9TS4oAn>#shi`6{&4y1IJSP_xM#f2%kt@W zlD=U)1Jkh_*l5f3<@@Jq`iktV{E_nm`#tk>d{C#KuN?LLANZkG>De#nm&Uy8<_)$B z$3NSNb}@LF^fBALN*N1tS&ezk|mGRW?*G2jeW*OH$h37T~ z@^(7A!=tX=ET84Mx{ug-&g&!n_~CKZiF(neESZ<_9CyBboZk;zZ(aM^dDynIe_ksp zJG?&!B^UdjYcBu#H7}Mp(ToK0Gj235|84sr){ph~exRLfGs>(#`(-?owQY0lJ-6Hb#QB@`W4|Ujud<)P-?r`izEb;68}Hh4rX6oC zAND(#pXqYW+Z=~1hw1$OlVl%eJjWc<(T~hWe^C#~@)^(ana-EHQ0-}cTvUI_u0Pv- zmbJt6^ATHD)~iJMN0r{oV*!1P8<)(nM4hYy+n6#{@ZY{a`1y+I{J3SmV1M8kV13x% zSs(Tbjt}+=KQGZAZoKqs&hvY{H{X{Qj}z9DdKgc={5Q*??^rI!J?&sWrd=$b|0Y>B z|IK>%`NY@HKLQeaexkptf8ytbX1fQZUzmq}qJP-VEQjq(JJ`-VuJs$fv-<|y&WvX} zGacKR`AFxhA6WgqKl=XZ`q_xpOS^r4_T`e)%Xs?6_ebA9xqqOY*WUAcyXRy1wB7fw zgzATQJAYUHtE;bH_j)u>dbvD5{&fDQ^lsl-Y5Oq817()W{@~@{`b{73__$qv?|1bQ=){XAJ+)UM_QS5I#fearqsnSGivNnQMlD7}}Xl6`qG$-cb$BEKee z+>aZQeUfFcPq81fOtvM*o9~~^TEE$EnT~mUV83BJ`#aOoe)^qbfuzov&V19S^1c6B zi~MDN>iofVhHbGX952jA`td{`G9CLr^Ra(Z52^96()W|7>N!__NlNzZSe|u$aQ&C- zpd062_VXgkWPNBO>H9^k@_V_yNN$wO^4M2eB|FgOnBM1Od9EM)_vUq9FYlK@ z)f<;w?O#T+Kc9-d=-R>isZTP`lW7C{59{dHb@n&<#m#pU*L9|2e_=kJZ_^(n`>X3u zkD-okUQ|Dd`FYdn<@|X&+a|_x**3I;W7t1mn+ez(LX8qX^Ye>qFJFI0*RHge>lNFN zw)wX6|E8Ucqn&I=KXI^`{+<#(0_a^zm$e z?wd%T&K)n57x}rXuW#RIksK?MnCQu&7T~_k{ zYyFA#_<5A{vY)Ra`zQK&Sh8=|5y`%v`F_WK#P)P_^9b9MGU@#|UZlVL7Zb~?l+5zz z$LhRXxDJEp{L|>I`QvVX(Ifd=TIW8DI`FZ=mqsK^fU%QqgM-cR%!^K*@1nci>SPZ8z!aTQzWij7{#23N7buVYZa}i%FR`uIkLXY8X1VM`^b6-vlH-Z-OvAu9 z=0jZmda2uY8RPn$yS~D7)X6;b8}*QWer7qrHJ5hy{hPPXzvq?>)Pw6p@7NpnLzd5W zWEmvKDD|@6vn=2Ly?=dqw1w%IhBne}Z<{|KVt-~j>SR8y=gu#u=I4Py+2zMiRS6Hx$lK}L8Fl!-dVk8_e~SLP&`umj8Od(mE6jJ^-_AdU>moU&_x>=i6!bAJ zEZOHLS@+_3gYApt_B@w-qj`h*eEGgTVuA8#f1hN|HUHK8?d=^>dM~E~`WTmy47+30 zM;j1rynl*iwl|M6ErXZ6e)Dh6KVA+O$&n&CD%r0OG0EPa&L94|Y~j4e>+dVlHxSUr zG((czI_BD&->kNfibipm=(l81`qv}E5N8Og!+K;PTz^+*1_Fdo=H zqmp?(M7v1Z>+SUR{jK)LrO%g_D3X&!a!RtdzfUszGwQ`qVu_^j{AM9->-W8aUJ*luRpNgWSWGIb3XU$2BPhKXZBmJ8=U7k-|{%; z6_V=)<2hcLj`I)W+&tv&;j!+F<5>6ek(;;iEFbhTp5-!~x3^FB`0GOhlIdTj3IB)l z2g~7n;OO?Nv;%E#?V^uqCv;l|ufH-K%cX6ue0TqmcKGvG=A$3n`r@7!aP@HeGjDH9 z_IP{alD)lY$t>r8(x2X*T)-ZVm&B{if3%1GbNs*8-YMDR?d_B7{byb)w6||BPxdLl z|M;Kkr}_IovWs@oufvl4b4KiY41U}WYoF@-&1fJ$;^?RZ5zSlAEdblmH!ETngH`9JB)@0Wfrr;ExTE65Z4#P)Xe`2ptAew^pk*m=vhyRT2>@0_2!TwNsB zN@g9n7S!kEH@-g7n?LUQcfVx%)cJ(}a)0cHoIB|Y&c{5?F-r27^PRi?@7smsF{a^h zj${6t>mwQTIn&W@mgeg>EPH&v87Y#@?+g8q^{p+));{R7{g9-7?sI4duhX;q|G)9( z?dXwSZ%1#T9NT}>lG$$5%YBIRN8x@OeZ}jEZY_P|>%H#&@PB<@mwI^Lg1+UxhvhJz z^Q$Z0&tJKKogw(AXWaSAw;##=tLs;F?9bH8aYnuD@2)=XIZCGI@&D=dw_kSq`6nZp z{e^85`-7_&*E!ltvR)+Z{hwMle1A#G9&c|-vbQ%U*{>rcs*&&akw3cn_<3ZosJ>Ah z=lsC>`Sqf>AMn0wupd(9UWem={Yd+0o1guX`Z)iP9P8A}{gCgM{=P)<{aoMQ60(c+ zWPclz?B{Kg`e`%u(l*xHU2np3&F}-;&j(-s@;^C$c>hKvdw<3Xa(>*i9B(J<%W`;M zj%2-Aez3kQlQNI{ah@zHcd$^7?RUeH{djWcw}tC7UiNm673mu<(pUaxS5Nw$_Hdlh z9_o1`+564Ur(PZ{aqsJ%2k;kIN94#t8%CZm zBAuOgz5Z;GzFZ-{TmS#!>dk!2@7sy@U4pV(7yI{ee&ssM^c?4$S4m%9RQmky9K;Ix zZFxz_#rFF0i{pL$y#4{@_wrDYoDP)7btxm6{f_6atRLrciI^ zFs9?0>Blwc_9pdqT@C7i?N%T6GmPgo1E%L3$a2{?NWWfi402p>K43cbH6CYQCfNrW z&v8P1s0RM*^CWv6`}Z=Q?ck2(k6V45Pn6$3Pl`Ul{QdU+CYWZuQI6Gza`XCFKHJk@ zuL}Rw^^g2KBiSF%Nv03z@7RC({&bf0H|rYgAF2FtH&69Rra#y|w3F?_`mudj5AIb+ zwh!a!SEgh8upaEEB-@9_x!(xtp>2$3`!JsE!}Qd{a@js4+lTSAnSNmVP-gq^INOJ0 z`!JsVq&|9|`Z2FtKO)}xHP}8nZuPN!lwa-QpZj(5J==%%W&61LJeJqT@`LR&B>(yL z!Ou;kLa@iTPoHGpK3U1I)$WH#u1BmB>&-gSkE}CEA26Q2VLJNC`NOXBsE@lZLf<;S z(;M!2V6T_))T_Q=^-(Y5sh9ewmwsWJIR6x$jbS?Kr#=4p`bfyt)5|HztY-_036;c;sm{zskcH;ktZ-ah!=UsJKyd>K#QFdf^Q`KSYNmekL9XScgwMElvtSVzXQ z-b}}Gn2+W9@=Ih;xz-KejuFYeK7*1sbnNQb*n#&pmG8~Kd_0y@zEz7iqpywBk*o{J zw!iMzQ+eJKbH|Oj>WB~KWghqTg-e~k{k|X~`R2duvuWxj|L7B`7|S79&)@H^h8-i8 zl)b(lrT22LF$ z_`tvK;!s5!V56ob63J=m%GxG1SL+mc#z;+a;y?c)3rq zzaKLo`G;-&ZvLO7ae2hBtJ=^-^=G%y?5NuYx#WD{dUfnCOaOUaho0M<0V&G ze|-CQ7t#+a9V=HdAMO0+?RQze_OZ`cKQTZ3L2@pjUXCBH&-*2%di(c*`n(^g6o28# z-Yf`u*=;AiJ?viX5#?$|s&vG6`nT7Ij#_Ph2xCo{$Q_40Wih;iJI!FeX9T<+4>K6tntkB=PurAMD>up5(FZtZb*1n|VZ~k^L#`)lapS0WZ{_UQ}ZFxW3F~$0GQuiX;jwH)tJj-J` zmdAW7k9vaT^+|u#VW-;ivXXO0{?0x_L$d#F9Dc#hlfQ_cYx@bwd6V&M_Y(Sse^Z@* zyc{l)Ba(02yVLgLsATpN_6L$`*q_*c*k4JnFIl87CAsG6$8DNE$tSM44fXDiec|1W zw%`7)dU{@_U;J?~&2*^eUZu;w50sX^hpx`J_OEdD`(5=b*1r1aqZ90l==k)jzis^) zmF(BOa?N+ozVNKo7uWH5pZOK%&Aso)+>ZJe?l&iO{NpFwXZ58d-&-@;raLlnr|k#N zzHpG;`@H4+kJ)x2={Lr6o?<%s!{x)zuWdNm`uU-YTkJTQ^d#r|{*{YQztz@=az-x!cxM;>;kwX=Gf^V9Glr&zldr6026`R;3H+Wd}%_krq_{-9ac z+5D}NFFCWx&ga92%(v?mW!kkU{o%aK@fv>VFgxx@+WT}>hkfQ|?foCM{waIzB|Gn@ z4_axO9ob;#oBNWVj6 z-(~HNOn3FZqN&xESNHwvY+Z7t@clD3!?nvlZE@{1 zBKbeIooVej{`gXB7iIRZ#_zm8FSCEe_Frb_r|_ujH?5yvZtFMou5!!QU%5x~|1#VE z&cF2$I}S-V|1Y!iDAUnSmk-yyA3Vs`*c;&|Gq|ermO#~yKlGsbVTx;ZuaL9tSe7gKVJ9i&&4SF_!2r7e`8AT ziA{We{=S6eEaf@p3rCW!k&DY=P(-8G+`Zu#>3 z2d%x0-+7z0_xR(Vwfhy4^A_W2AJfr3=3{$O4@td@XE{vg%O&Xt#?!A%N58pz^yh1~ zf86|+l>GTN+n;^^N~(UxEV;wY|Fd0v{kqqydD6?38h?%7`GGtCQ~DLZpUZl#Ecvyu zdQ;% z_{QPMcHEF$@4_!_wCmlkZn@RA`~6>k-j25q&N|7qd+x}DZTAyvy6k#a6S>B&cO?4_ zPhOF}AmtZ)|e+ zD-K?Fy{&)U_w994o0sY8mEZT1#v-{@^5K6Pu>0s9$s31Hu%=x!Ij^A$M^^-$v zdyv%c)1?o3x3#Y(a-;1Z>mRty_K)VH@3#Geq~91%zcC%#h55K|`RDK5@(r}dnT}k?x@f^oY$8qiK^mZ5Sw+*Y_{(YdVWPd&t zpYPh?r?CgEp9UmfaLnDdU#xlXHaic#^@R7?`ag28^T+G2xOwxaPyVyk^{ec>x+r~u z9e2Zr{LtP5BiUaW&-45Co~!J<$b7Wh=`qIXHHPIdp5?M%(GKSG?*nCJ-%)=YwDU`H zfwTWD=bvWV)sg2%PCn=8x7qglMSPdF|FbnW+4?;7=ET8#k zkJIDz7W~_%^8Ncj1CqaU+e5CeE_C+!{^a|em)VZ&f4==cIBTu#H$I&^UMMdreI@Lq z_=^?E@gg}P`JVUOZLgmtCHwMyIbMD?xe{}t6PWSEB z|3BZ6a^vaC=i2&z;Cgr7bHPtCwm*IBQ`g%5bkz~3*#30guV1wNiDWx5p6$eRwx1v$ z+sWxMX1&#G49j6W%Vj#+!F(k3FdgY-KVL;FUAy^uk4V1$#?RY!9hL0;=KaX=$@X+~ z&IHjw?2N1?dOh#e$k`j+qXYt&zpNC?_5x3?YVs3 z&#Yh1+qBKjSI_U^eHA``$op-4=lgB+1AKUx_18(ajiVgS#}A7!>)$Jy#^`^77Qd5%~wtZdAt`)@?K1^oj>`i3NLy8i>Vtr*Vd_(FNPqVmi^6Z=89NRCK;>Y~Tp^>4`+pR&T%&k@fVNG|`VyT0l;Qs-sw zzf_U_z9M-*a`{I;XZ<-OIeY3fTffkT@7R8HeeD%?e2z?s+VMH>Gf&y^Npd_fp8bRA zIPRE_w}WO#kGdF7_fciH}U;ZN?f_WAcuajr@}1WIH~%GK{eS02K56|=(*KO7|Cx?{Wj^}f z>A~-{e0me~;XSD*_gMeG_8VSDz;*cDAF=*F{7?5<|C97Tb!kF z9f(n%)dM^7?*k=O4`1)fLtMQ!FCVh?td?9nZpTa9`6Wqx-~Qcp+PC+8FK>dq`}ank zImYg*4nOZD?h_wxIqIXR@BY1B&tI3h^@Zb}_FnYX+iiPY^EtPFBe{QLyzOU5$Nd}g zvE8VL{MZb4-K-&eNfn z^YLG8KYT2Di*08VW!ssg{~wF4x7Pu9oc3PPG-}Tqp5OBx+rOxf`^CEN-)!5D<-i}v zLt_2IarOgO9`Dn#JY%Sj@hpew{Qakx>|OKV$L%=EO3pp$)@w)nzGuZk`pXRJRDKkuDZU$H!YJ+EIIbIZ$*+v8rQF8+m=O!QZzNRAfCG0AVA z`fa;D#3j4)sS(UYY!5#3>e|JhXZi95iu4UhPJgw})-Nsjsf*lt?a!0^`S*y-{LSBv+xtNz=Y@}b zs@~o&CMo;lle(AM`&2$1WghqC4HT6(R3xX1;ao_(2{l0kVgI0f1#~*mt`|LVQvR{#$$B$X@ZadFEU3I)Y{=S!Av-9cRuRLhy z)5&w*Zs+@3A9v@iBb6#XR&XdeXz0^ZeFXLGb(|LObWRJf-G$i@6HSSrB$TH_2 z-dAJ)a5RRby}bX%dH(miU$A!Gw58hG{nDjp*m`X3>$de;_w+S(z9(rf<7o%e(Jtnr zozz46`+F=WXm4EhczY9)L;rS*^>0S<_aC^-mb>`_?mF=AcQ3bg{ovl0t(|i_@3D42 zboEkOj~{(v$nHx>+Q)d7%XGAl`J8>cZ(t1dGM?oyowvsv;rw;|=#93&Bqe`tiF=>h z(HN5cd;3)PY}IJ)C~M#C{Xe(%{cy)WS^JLNwZPi<;$?SO`$*cyc$Uj_w1fF*7xj?T z%XpR(^k1Ls@%9c#zUzADzwnXH{!=QxY|Fd5>vG#}B=?0oceL95$KmIlZQJ*Wx?`=~ z7oPlzwfo^|1J>?;{o;|dzNxh6`c}$nT|0BB|o#y;HBKh)p z%TMEe_G2^3tsQ>cj%c4+LZ$c{Q~H0qXOZnEs9o`hoGRAJehE z%tyV{LsBo}Sq{_r=b~G+U-RvksCMmj+V9`*`oCn>i{sU?uwI$Bxb$9MwbJjcaOaa@ z9e?Glh|T}d)$Mkl_l0-gotOD+S@1aP%XGBc`#&Z<-v6zV!!P~P&OJSnpRT&u>OE$~ z=WIE*yz57KndJnJvmB;_KlU;ne%u?o?@xAJdGWG+_By67e^C0poRR$cD`D6El8gPs z_GUSZhyQVY@(U2>D{6ONpX#HWAH7^#B-cy6YW`(*-EWla{pMI`mwp}JIDDtQJ~Ako zc6fW}U&(>79xo%#%zShl4OviGceZj30ADrcWkMW$N-TnA4t#<3mu@|^? zhU+=?lC+=ktT)qfo?$-Ln|es zd&{14cHRGVXXi01+;apSp^w;lZvA+btylevciMI$X)ohx2h-6m=A)g|LsBo}Sx(U2 zl zL9WAn@vmFG|FLbMt>5uTMV zQ*1qa{VR`k{__5bNq(a4VC#>#XGB{YEmKALpr} za)%{%Y;^0^h~(|te`)Rh`1q@~oZcrdviiL2?H(`ER~~is+S1l(>rpA0=Y6!NaGm)u ztFKsYxNVoUm-hvk-pgYrIK3&<#l8>p!-@W@S2^CU#v-}3NbZr$`-XfUXh1U7KU?oV zzopUILDCM!BU!#b=Zf^1ocVM-hb&L zIg{6asa=<{lB=%$gFW9qZ_}swn_+c-I_U=cT;_>u>g@O+`ECQ_d4Hbiczx^9i=MUP zndEgi9_M-%)WdxX<9R)g@w^_%^wh(0c|DKhdckh9$M3%O2Www2Cl5ri`uCpZ9qsTMAwd>T{`){;|efaewlGtGK?`UGc~rmY;g;K^yUH~pA6il` z+Elz+J3`$ zwmaL>rR6NBJnTElY&~PJHPJdbaOajW1z#cI-LFeiO<# z;CoayGO`_CowDE9n(zgw-TYRjOP~MV)H;4pZx_DQWk16dIeA&vsrbH8L4iJ$l`n6D zE1&oqN|Uv;cMZN!<*e+2{gn76Dtz4w|M^cT<-f|by|ZJdO!c3(Vp67aE${Sg+P$@) z(jNF*^mgsu>b&pxt1_3|CoMlTenNU2_H9W=s?G~sJlZSM777!?wj1_VAUP? z@ilxXwhf)N_^HYHcJ;>&j1&{iG~2H3 zNVI2Jw6>>U+49JSri<|TS$_0uPsi>f0e*Zf+2lUA)x__z;gf7O^YRL7ztg|Te&_b@ zs$BkY`p;==?r!~is}I<}zGc^rzkdM*|JS#)?P$d}cmIygmw(`Sv`C zvByW&6(%`ttd6&T&)Rb>6d!Zd$YDO`U+y&j-Ro_;JG=NL$~{SZBO2ccY``Zew{`5q zcK`!l`s~E&+k~&xHs`-uiBDE0TidpExleiHBa)YPbY8?dujE$*-KQJziEe&k(Jcv= zHg(y#5<1#;Az>h0{!^ZjiHRZ&t@yYvKHiBO+uC>gPZT=k)M{7Q4t)J{munGU80}y^ z{6|TfJKOLbNPRTXesnYc3DC%diXbENO^D;CY}wRZyOYTd`heQG9=h*_yWIuad_tzv zPVg-Uf=`mt5KD$9X*>`I`NM<9IN`Cc*4=Uj;=lWIEiM}ZkVyF z+kbTwpUQNfecyx+mA33WUx!y=Jau-o@Y}UM-LhtF5S8F>D-TVL?~r!4p};sg9ef>#@v6^9S;iOsu1zOJ3g6B~ z^E4Me!pe{7M(mEU(>5+Yrn~aN8Qte*k2vi=-QW8>*IdGBtKNR^livp}^c&YxV8=FA zMf2l?T{z?MdC!K9-P>B%@e`oy&=U}cHtsxr1&<(dZQ@8t|b=xH?H`Xy9=e@t>)1gea+J1EQzfSGSThoJCx(l1wF03(_!&Ml{JLjG2 zw?NwBD!4@(Q)9GUJ$1$M?*gxOVDKP z_^AC3bbfp+7tTTY=b0^x@+rM*ndpADB z&5u>vbkx(@fi?)b8ZO?xgEez)%!Cu>1-7G|9M*DgZS}m9eQIY1Cey9>Z1D~Z^h>Zt zH%IKwIe!8X{7$^ON|WEQ^XtA#jGu07mnal(%i#Y)5d<(S;-B^}y`sWiuSp#5=;PIo z^I-g^|1j$Uat1=I1iwAFw$wB(cTX~uQ~Cdazv0*1dHVsX9|&2y%f$nZ{~xmFfO6g_ z0x$W;uL+su?6ymH?qZVo?IFW=0DRoiXw+;)+*SEFd`W!(M&m;0^0sDty?*K2n9n>A zGW^Ye<LrfmNu?h$t0B%C>4K`i<#5kKS&N$R#c_-`O`Uv}qlb2q0*=5aJQ4P~yU+U`7*}ZM)IzH2i>Q9I} z*XkP##x=NfLlfd$x?#i(;$^kvJ+9nDqSV|%xy8w^Tv}?%LXe$r?JSz>DK(WSS8>PF zhVnh=&xJOqv2pK196G(yoxnKLhd2!3Yi#AHJ6)34O7e_#4lR0AiIQVx~G^)&67o&3NcynxGua7g|te7Hpi8 zoSg_qLo>?E4CtNFIXNB*mzr>Ei7DHPa;qkrD*U^mrrcC)M17W&ngL0@GRh$20Donw^rFlqf?TmsFOU%GWE*yeHSx&EY-pOKZ8A5t?TvC!seE zz01qZ^4I5>BlgcVhdfbb%4;f3_zGj5L};Ym@)A?NZ;_Qh{9g1=mBr&hIhZH3Y^qt- zTWS{el)+lM5`0LZnq5Ec-gSzLT{pXspnmHzo{xkO)WA;%u{q@95 zEAL0#D=Lr2gK{uWXffIxZ8#roI6E}gRAkE&OCr-v1ns$a-z-!41o|0#7H*h>@~X_x ztvJ&|SiRo)EhyXm{4>~kV!1i7CT!+I?+oaj)Q!H0Iy{fiXY-YzgJ6O}nu+lx2gKRA z;kJ^f8~5cH_ft&<9k#3ub@IB7I+eFvny*j&r|zF^_C;z6#2rX_L&f zpH0b4%9JKK4wuZIZ02JOhnwe{a_H>4ANC`Bjd|IRo>*Yz-yrULULXD)l!JLf)62~C znz?5BGicAs$)c6Pj9TrasPAK%H5yn%O4vFn*ii(`W;)bN_TJABDKI zbnz*w5Bq&!MUSj6GI-_9oQ5EJWjKw1` zjuye@Sr`jt-T3vAr!Y++#LsfR3d&Ur(J!8Ht1IgsW8K+byXTw8h%r|q+@X9E`%0ZxYH%e;?05Bitt)K{*tk zV&X`<7HLmLTILUNysaopmL^K#OJ<`zv7S%bKh-3k;di33)=`garu;>Oap|5Ym!Luw z6Z4^sf_m&+0iW1@#7u z+uvbdh4SXrOg8gYgp;8#`Z)H&VeEy&E2d}NoG`^C_F*4^Fcz?f^1}$@vZq)M=5cf4 z6xK6gb;9Ra*j0-Bu?AP4pd6~7Z0fP^uBfqjG!K-S}dU{k8>J?fH{SxPL~y=-^% zmnZEnHJNE4Gd4YB)}QTs5|l%;Ct=@ogsDhQO_XyTFT?)7;V2XS9iH<>xR!ak7Mrf| za&ytxRI_cg!kjlU&1@Q;ZcZPZVb=D~G^h5?GAHze&GOdSX4&gY%^~}jnQ8luF=bC2 zZFQUuJ$I;V>I}-kazckzm_r*X&7n05&7rSW<`!hjv&dWEu`UT~xrI>?5?=aZgBqv47;+)eGA=L9N73M9i zi_MbPPcjSkuY$dG&=oV`KVu(&&`e#&mYZXT7n&pbtIUGlMW(#xAbac&IDQ3>Pc1Q1 z2P+Nb9e=^Ov&x?+W4uBKb>{P7oE6K#a@`o3i7_+-V`#dWcbm?U(7y*3hRlx;+&Lq3 z9}ovS0%_dZHx1{i6=qf^&Q;QX-^gG-RUZx;_(>s}5mbn}K$oZpQ=XgIf5}))DP* z*G#o*6!xBha0~S?4r74w`3U{eT`ULlR4tui<}|M}b870%oX~1BE$P}Vj3%f$2aU=F~u%szY%;+NA zER${A0OHHecXef&pd8FswFF}~bd)L2*}jLJmTcsFZ+*AIL|ZU_A;hIGC|BXy#X_{n zv>dLzr0v;N)aw}X{@+)HYY8FqeuO^hm?*;`MQQB0L}y8q?T98YRZB51H7qdmYv!Bz zug=VJz4mQveY6oinpSG2Jw7ElIpJ*&o1ylQ*}fC)eu4TU_JNciLa1gO_aghJ*>g+A z&Da$(C;PNdOt#_?S0^#&8(cY!H?;(WvSk6wZC%ww>#Sf;LgUK|hV zuUb4A*G*@c8J*}WXr+AH9*HtguS(1>m7VkK*ya3ERf)aAtIj7$%C@gXOyGKEzORkr zcxcfyvk2p25!RqZ4U@3%EHjI8mDvSp94o=v90ieX_I$2!Q_XzLP4ltt%wI7(J9Zn6 z=8?P24y?ViA0xAu8|iFA{CLuL=|kMQq!{QJ~^JarN5 zLj4zYVwaYjn_xbs+>JCB+=zBSK2rTT9-105Q@6rqo(FZ>^B`S&o@!>Sm>i#4hB1B^ z&IP3Bnh&7=-WoFBg&xw@8Eqb#k86E3kDB?RVKbSsUF$HXW8XV#4rf^B7m|Oxc}CuZ z`HuGevqEp8)O>9l*0JrSCVmn2gbe75u{!K|R)kFCc%+_idO z6rF>2_YvYXIEFn!VlL*(c}S0QOLIcVq!ALcLM9o;@wbOe4oraq&*M5G(#7WE`Vc~9 z0YW482)I`gu0&oO=k=Bx^u%U|>@|kS9Oy&ndpFXZi*kR0JflbheNpT!l3D0Nh(k|g zE^UF0(31vZ^Nb%!?=oWn|7n9M0W&j?Q!F#39ggD9S?^LWoDOH${jqLHP(Nw6{4N z#}J}Rp$j3g40(<~c?hv1p%)=p4Sfg$cxp0o6!IcO=3^dvEAk(WwD>pc8ao*>*at=y zzz6UPWuDKanC=(^#3z4@bnieK?34TO@5qUWLl{Cxy$Bh;k0QhnxR;Jp(tl1D^@XdD z{fzt_V4VSQK?aNF4{e zR=^(!EQkAN6G2%BedH48IvhF?ct0n4Jai%?YM}3Jumd57z`Q;T%s|=`5dU@@uSHoW z!Y3&JG`*CX^J zJc#f`gl{4|hww{;KOxMxsMH*UupD6(!g_>l2v;K9f$#~0VT2Kc=MjF6kVE)0!u0l1 za|pt*2z3Z?gsljj2v;H8jxd1m2*S4zzK^gUVH{!h&Qep2a2moUgf@iB5pF|x0O1=5 z&mp{o@JEF3F03&KZ%23+!d8S1gliB!gzzB37ZARM@MDD65GHlt-Y7y8;WUIz2u%px z2sa>n4B_(#-$VE*!tW8LB}>gxgcA`qAzX-XJ;L1xUq*Nm;W>m?5dIUP^5Rl+6v8@$ zCWIuyH3%O@l#u27=qMZ?rKsW(mEkXmrE`(l$`w>2m@Fc=0!oMT@ zC&J9GQnMK0D1?&{HX`gmxE!G$;Sq$#5uQQ#8N%xbQ@dd!LKI;GLJPvx2zMfU8R02} zpCJ4OVbX5&1%zV}VhCp;Y(wZqxEA3<2=^mAim(siC4|yT(3S{G5spJR72ynoCWLN; zTM+I>_#DDsgy#@)2!BDSxD@3fL=jdaoP*GXa0|j+2oE8A1>rjgFCcJbDlxbRZYG(@ zW(w}TV-IYm8SKo=Of$=bvEa-xbIm+6-z+c-abLX3EW(7l*c@yQF^8InSz->ugt^o# zGe?*sO|^N8Im)~hQ{XXXxj7bl%i}P89B*pO+sp~(?KrPF(VT>d?qqX{In|tIVrHeO zGpo#Mv&O77@5J70oq3lz-K;ko%o*lP6E|m>jb@W+FlU?1<{Vu2ez!T-oM+BA7vL7l z7LzbdW~w%=P95(`#-tH{r(RE$02^1LjuKXFh0dGq;;N%!kZ}%|Br; z`4Mxcxy#&bK5FhUA2S2ytTy%GL)3(-pKKBHC{t0iJ#KpO%jsp?yG3P*pdvYug zVIQ=1^6u{Lj$L&fJ$ZBLf-wbi+!MVG9TO|(V}muc&(G!6<)whCj^v(I9qoLEE@_Q$ z52NL)S`Y(yY|Eh-J%Ckc%|L|Sr^zdlJR!vdr{*8Svu5x?&91!Rd8uH8o}>;W=}NXY z?V(&qgqCmV(-8@&gOj4!H5Hsot-=&p^GXc zUEj0^!%W?DeM{3NXk7n}l(o#p`Tksp+0fLsYkddat)idbP_WMzyTk0p?sdGpJ+^BX z;tB@w0B80>C-X783zN#ks6gfpI=N6tUJNF|L&|{^l8O?X)7pZ^lYMvG(1BF>s6bLa za_c7gLfVOOMTzsXmU9f#=A(*|Zpa&7NLz?2N*w1)Wo$bwh8w6k5LrmB!CpKE9~fQ8 zB0Yt|tw9IG1~POc19OP)`+4Jn5y4Duh)m4cEyFhA;e5MFxUxICx(|$TIo~vcJ6x1) zcUNnmz>O_CJ1(*B+pNR80=6g@C8dhtYaMpBa5EU*8E9=v7MvfD3)NF(pfJ39P?-5C z*cWST5s*0ZHneqXfLn%?s4^19UYy` z$NO}_BWG}D(f&q98d`d6wiW*1#9BEiXpW1SP@Ub$%~)zW;Fh+_Fqt|{tsR#JJ-rEX zP<2OpTQimgH)U?J((bK6X%8N;Z*J*y%6NP=R?KZptu4)+ntN?7__phS$TPQf9}u^( zl`jizdt)t|u3FSrPtq|uc& zCa@K75rwUNKvs@Ro04_Aw{Q2mt_Hr~(OuLM#gT=2yCX$yP#hUZ-iEis^PX(*QX#?F zT`hJIx3#f;isRdwtXjcot}g~;zv6Fh>uTHD*51}_ci+ktj4G6K&W8Lsh)oxe1BseC zlktu=?%iD?yZb3RQ*%SQ5E;nc*4dID;O9{A_Z&iOemxB z%7VVp8*y#!e%!|n#Em0v0CAZ>T;)x;hKRVvK-@`)izBW!5O+S}qKGRG#9e_ngSa>Q zyO*}&?+)<^aY*#}PL|vw9xX=1d1AA;QJgG#J@?Wc{C!Exi2Frzvpar>xI$bjZWW(E z`|$4z;=ST+VoFSkTgA=dyTlX3YH^-;h03{2926fHUl3mxtugrDCFo!L+b%YUCyUkM zJaMx4yOhg!z2xU4kBE?d_Mb1V7f%+e#d+dn@%3w*ePiN2aYRgu4~ut;H;MZ-US1cC;=^KGemG2WjaV;k z7CS}jEd1{<%$N30{GH~JSHz!*6+WFZ{zU!fW%1AAqvH2OB{zR8%3p^0mw#!+HxwOz zTJk<|r095$^4}@07oQeS6<3INDF2rvzen`;C3XBg;sfH$qI5aM|5E&kc$0XySY4EF zb7)8V=C+ngdD4Ziuwh%VwjF0}xU!EITzUDkW;?Fd?`X#vEjMDT+S^)oVONJM2>8t= z#&ab12#yM3(}d*jZQHaubsxg+VS;LhvJDC6L$36bVxTHe{Ts|&vo(6Svr z<&(F11*D^qM?Sp-PwqpKS8-QiNBjDYrsj3c@Ef*^yal?WeM1vortY!V)^OioNBfzb z-K`zw8T<>@$c}wZa!JjPD8VWn#0_^R>#+GLMje&J)H_SLJ*nejDeymP(ok>Ku4H@4}v_2T%of{td~&0!2$PVxeC zVaFcUqoZq05AJF?3764VH6^=N;&}|49tpVLH|MN7W5Wh}`{nWy#KGOW+gsfG^ho7VB*A4r9a~C`_PPgL zf!}y9$R=jXFC1GBYdN$VI^0iC;0r6I?q3ZZ?uaqVY<~X2#d@5P$Gbb>pEF9>Z(SiP zac9uoYti*D6mNeWVoeWH{?+~#SJ4r~|E$EnyKa9x12IQh+gJ`?m|to3Qg%Q1umNZ8 z_?Z*@?gHb`H%dx3qWd&;;YT#gY8&T%l}Z;j%tmV;FZZl8gQXao_=y@`Z*AKItPk8u(ZY>R5jxkr#)5^h?TVArRi*;z*hFKT?KDVP|XG^m&Ei4(A zu3V?OP?Eift$uc2X+y`#u5E2?W{GXRrersMF$;Htz27hLemiBQ){{PNo+J}PY7h{T0!jN#YN*3EJE@26>%%f1oH z%t0mV+z-+~pN%kA7ix=XzZ*SZ1@pLWXOp~4+4;lD_2_392`*+We#6Z!3V0)?cYho zf3v96tZcq;cUQnEnCi?;wimh4Xv|-NBTn_{GG}jEv(e9`ca?4mTy9yRQdh59X)X)7 zX&J)`->yaN-Can|pyo;(>)O`Ywl($=bZK)FCH|NOgq5bB(pkG(I``OHbaqC$Igo-8D_3t`8TZQYTce`pJLk5hKXoP zvulAZxCx4Un^$c-`;3Nl8`d0G6Sd0+>WeG7?Hw4SSjDz9ZR_mb($=wc%XZ#2D0SM} zI`9)HJ9l>M+H%SEBz`HSdpn*!fI+*q?M&jy2mIa@G+%G+MFgJ8ur>s8b#>tfn6Q_q zw7=Ad^CE+*t$4z_3wxObp{|R$i@V9@?@I2%Ga9HuXEUyj-od!;j*F;s2bNnb#(2tu z&lk|%83&dl>uz<{!Hp*vc%iKudxxEPz9awdEiHJuV@p>{>z3_p?KrrF4>D95{?g0# zwjG#jw(M%ct-njRGZehh2NgaZpup7UK(vhA3iUB_J7w(A)9|Cm->3qGd(xMPkxMr~Ad91Yyo5lnEv zasHf5Fo7vb(YYHtww*1(Btek;zo+&hk8E!1?B3nfe)cX@AFIRHCY`;@b?4?aJ=DObMtjFQTe{eg@iIGHu_xoNWi{>E zhAkd^g~AUxQ2V-Ob66m@p%qV3U^k3s2N~)W<=Hg)b< zg&y5y+Dm!M*>$o_>oHvGp$_ZJx~|nNTX*lk-qTy@&$IrQ|5zUAd({1Y(1183rp1hy z6?3Bbs>>G^BVtsHiE%L@CdHK4Ck}{1Vp`0ISurP?uc>@7B1XlS7#9;_QcQ_`;($0L zrp1hy6?3Bby2=+LVpNQYaWNq##gy154v0fyTFi)9F(;bGRK6Gyqhd^qiwQ9)ro=vR zKpYa&Vn)o0InjJW<%ixDv@#>BXo5R+m` z>=OsXAu%mx#H^STaWa+)VX6p=5iu&p#JHFclVVEj69>d0F)e1qte6wc<0@Z_h*2>n z#>Iq~6n(${N9Vw|oF9k8w3rdIVoo$q$?sxBjEXTaE+)jJm=gQM0dYu7iy1L1=0r21 z^2LZ46=PytOo&M_CH9E};*gjYGh$ZEiRRlXUyO)RF($^vgqRdlVxKr54vA?oBWA^% zXuhNJ#fTUcV`5xPh)FRe_K5@HkeC)TVphzF=DR9ijEGS&CdS2tm=sfDpEw{6iD@w- zX2qOnzNhlVh!_=PVq8p!Niik%iN(8}wBpCa@ISlqYQ==uD-MaHqIue-uNLECk2oNX zh&i$H`z~KhY!&;&VKFO~XI%QI*eIsNK`|qai;*9=eDz{d>=)DGm>7P>rLPqeVy`$P zj*8}4m%dtzi#_6iI3ni6%6%?hOl%eV#9=WjmjBSDkBW_AN*ok3;=6gV5iuuLzToo3#8$CS z92T=;`A=Q?sMsi`#6dA5j*F43%U3TZMc?oL;rR>apD{7~ODETg39(lk5=TYzE0?}n zjEg7!z!m=XuYj5sbvUUvEF#iZCTro}Na{A-uK zR!oS!;*dBhnpa%>-?;Qqu~AHkgJMP;7bE}f z^3{t;v0qG!V`4bx($|U!u~!@tM@91=E`7Ba7kk73aYW3Cm9M&dF|k$b6NkmDSpJ$z z9~B$LlsG76#Bnk5y31EDCdGcSct4OCcj^DpnUx=MqWOdKOIVDEF)=PC#H5%K`@{ip zNKA_vF)QXo^GB5{M#QKX6XRk+Oo}P7PaF`3#I%?Zv!eNv$`vDGRE&vnF(D?!l-MT@ zh(lsp%!)bD{8{CS5iu&p#JHFclVYDZAP$LXF(YQhoM`@{a>a-k6=PytOo&M_CH9E} z;*gjYGh$ZEiRP~=UyO)RF($^vgqRdlVxKr54vA?oBWA^%kN@9sZ?Eq}N=q!GVoZ#S z2{9?A#6EFA91=5PR?LZ}%#{-sqhd^qiwQ9)ro=vRKpYa&Vn)o0InhjV!~tPIRE&vnF(D?!l-MT@h(lsp%!pYrCz`1$UyO)RF($^v zgqReI_X7hnoxXo`4$BW2aZEI`oPR3CnAj?&#C~x|91*kPxEKyQebr)2Y!s7XuQ(tM ziy3iDG_z%&7!~WqgxDkYiGyNV923KHWS=)DGm>8b#^4E%Su~kfo{o;@~B4)*LF}y(bh%vEIOp3kYfH*8>#4$0v zQ2NA}*eE8&UU5Ji7Bk|Q7_O8)F(x*ONwHTP@ciF#Z}$P&gPs4z#qc5Wrx+6(#iZCP z4v52IRvZ_@hf1Fq6I;cU*e?!=BVtw@7sC=g&ZVKF0)iQ#1~ zf3+AB8^xs9D-MXmVn!Sn!$(M;7!w=Cq}VGCh{Iw=923ov@{br5>&1lFBld}dVp<#( zb7Fb5(;E?M#p3-y{R)@vADs#Lp-1c!(_&7H9Pj)U7hA=Y*e?!=S#eyfu5tNeVx!nA z4vS-A<=fOgVvjf|j*8_cxOBB*Tx=El#Sw8_jK1CF>k$XVQL(&Mdc{_;UmOv~#qfzP zeN0S>17b!rC%JS{F(LMeX)z~8-r>^6#gsTAj*HbNyL63WQtTB6#EfW8ap^0?da*|w z6i3DKQ(gLq7#CAwzc?gj#c{FvG}$Niio@cVh!2yw^H#B5>=6gWQL%ibOJ6ItiYc*Q z91{Q0$Gfk8^?K*GnAj-xio@cVSh+#%A|}KhaZpT)IWcmE+DB{^Q)0h3B4)*LF?^=% z6q91FI3Ny-8PUXLub2?~#I%?bBWJnvaWN$hiCM9Fqf6H)_KL&em{_?<<%{)VLhKO- z#Zj@m!R4zJTg85HL>w2Z&z3!6uQ)7@iItmOx_Yrk927^z@^e(a*edpmBjUJN-Kg@# zUU68=h-0F8w@Y6s){8yjpg1a)pDTOBRq^JI_MD-MfeV)1^UI^pvDqqA0i zs23Z>Rv{z#Bs5F ztI8Lv#d@((Y!!RNUa?;s6oStoDST8n;tzwVZEB1?n;;=X>j)~)9 zd9&&%R*SV_z1S$Wialbl*e?!>!{UfIDvpWcVtI?o7puiuv0iKxTg4u+SL_!D#bI$o z92LjJaj|^6$``A}S}&_VR{w*u^+M;T9=paPL2+0d5l6)_aa=5KS38TaiQ{7VE|o7s;)pmZj)~)9d56ju ztHoNeUThRw#U8O&>=y^cVR1wp701MJu{^2r#cHuutQQ-_RCw!mGeuZI3Sv<6)*OP{o=4VF4kV7^kTm_ERKqm*D9UZFOG_p*Xg*}FOG_p*Xy|0 zBle43Tb@nXN26>D#H$5UcfjNRhm`^BtS`+n&Y zheh)N7oQN*V&qn(7l*}hv9iw{uN51`esNSB7i&K#ed4e6LusAN({*&^H{ht3j?(OxL#zFZ{>=#GH z%1_FFV!t>nj*F3pq(|%*N5#rdx#J0OSR55AA67YHkJv8`i{oPLrly+=WHZElue88wxMnw&Z z>*RUz90fFDn@m^K0IiOS8l}4qiWr53Q67xS%J2O-=iDSzc3(lq=oclfJ zo^$TG=iZy9a~+!;haA0rw_nGcW7&Yqcg#742W@`JvEUf{yv@%zPB=!tVDlRsha4vy zqj%fw)s790O^!Lo@I7w7js?fqy>7pb-WOecju}VqOEy2@m~#vd+585_A;$^F=$GAg z$05fF$LM`-yW^1Kgk$t8ZoA`<wbpd7iw#-O}dSSie1~5nGqpChymyx+T>ynP+4Dyh*ya>2;X0%6Hpr+O^NG&-G)n zT%`tqn8|i19slI4%Gmu^m~GCR^7xTy`SR1#D&xn=`{hlXt9Rtjsas{3SInYWvx9Ty z&MTQQf5BnF*@u_R3ms89BXH!x`Lkyo5js40*uo>{9KqBo4b7Xo;Ba2(Gjq}=etpH+rft*w$g~*wVal5R$y0XNl^v#RrTV3O z=S{qep^T1&{p7yBwlcS`Sn;7J`YYsLeBvzXT2Lv!@1aE|Zd(4xwD@6SO&P_@?|bMD zwaNJ0zN9HTEq`QMy!1NWzATa{I9Paadi%}KY0`HV$=pxm-6Llr>SRJzS=)R zzlL4Ed_U~ghmulHYe66ooH1i|Ny)6z(z!Ed&IttO1ZMTk)6KuKU`35(*)(y6xiE>-zV=^1|C3|(6Je*67=rA@qFMlpwYQ$~5(roH&v zvD4EkXVTO1mG<+nQ{(ka>Ae*anbdpl@F8ArxKh4ij3>>BP4!8^2?j z|E{I?uw~M*;28g&&CfV`-?!RI# zW6Ck|E1O?%O#a%Y!_QcbItHJ0agO2VY`W1g_`FRwIA$H|e&fnHHcr@d;Ma93%5>dekwvz^2E1 z9%j?!hg(*KETczQ);W4d+H}}4>6mtmEOg}-S!NycN7;1h6|VfzmV=JrGMk=otUJc0 zn;gThwCS{C!7+KP%`Z4+7u$5=RhCu9Sw@bxEIP)*Ha+Ob*D;!ToOUcYhL^Z}$MA_Z z9d|4^MwYsK$FyVY)i%HAm^#U(Bd@U>b1W-&agLGK+H{j++3Re&(Q(MJ;bd3Nv1yr2 zCr_~qFSkrM22XX{9mgG`5u0CdjGSiE8OPA+Hl12wIp`QZ!={60T8=sDywd%a?i+Ov zr+YB{5JeA1vr!Onlgm2~J>Gig@x8zL);qrC6dnFD=@5BGpd-;jvFStyy)1MN%M+Y-kiv*deQMHj7~sH(1~a%dNn!;@tRrQr|9u*eID;rwBEg5mbWYN z?VpHOwZ25WvXwV3npd{+oqD_{^^o*R(r2JE5wBl0@0sVdtGtuZyndE%NA!3zqrL~x z{-7xar)v%AwdnO|9eM*g51o&yklL)as}JhS1?WO_5n7Mlh%QE#pg4LHdNaBdU4|}4 zZ$WQG)i0C2g1jry+t3Dd6?!|m8YR$1bPc)|Z9+Au7F~zx&}Q@w#1|g&j!2KUM0&g@ z(&HP5dDkp@C*o`Hcw?l;J0t%%y^}n?u8=oL@@jg-*GTd{NxnA^?Ls%Be?hmP6k4(3 z?n>Z&`p#ow@@L;uH6jlyNgJ>2zF)DT$HX%ui0`TVr{T&Gc}RSZ@iyM~LzD4*e{AJV zi!L@Xko=*^_$i+=@oIzTbet&Jg2{-wEJmWJNFYm|Od>cRIb$l;~DR`|kC*r3YirLle#MGQi8;^2$TQ|HewM}`pBk>MofWh5 zCS{JD_4XL~b6t7XD@N<;rKaqZH|-~Xg{%KK=T-l4)W6ZiAMd>4<ISM&7UA?stWWk>|X8iTC&@U(_dnW}p&Oie{o&Xg2z5-;eyc_a8LrCG9=* z{$~39$;renL(}g~4!!?4H2vq^kG$Od$r|?gKi!l3Z|^~--*c3G!d`E`eChI-{GDI9 zctjpnk~W^^c)s`JyPiLPGG5+~m-pl4Pd)m8Ip=(T^W8Ng^01O^#w*_Ue!SWsuXuSs zUfz%QW0Wpk{JiQj@$!DWydUq!C_Q-Wjg#^6e!RRNFaP?qxz2l+FI-w7|LzCFBl1w& zj90wx{ql;DfBxHZObo0fJsIzNe>@c{ukn}n$5USQYyABfrPUWdUfz%Q`>S|)Kdtu2 zU-+F5m^MIdn{1Eo`;S~2Q~iU-K3^ff;HzI^zt2~|O42!bZTI~ZN53(qwDRTicmK@9 z!%EVV@xHffm5rAV_P$`^A#3u+$#~!U@w1L>tMKFH{djrpU-9yOdwj3<$ouW_pkqwy5|`Qv-dA9;WN$m^r|BkDX5|M08hH2-yc zhNpWs=S_?}$|-*7_tzS)c=@O9i00%sRln7E#mM{d?LT^=QeH9g8V~u8RR6$u#mj3R z$@d@GX1rpi`?D^2-(-xuV*irs!2-(7N4ka_h7Ly|q-)3#$bUYahhKz_LV8A3nU{M` z)pbFiSE1w3@krOEFggJ(LAo{_gLDm09jZ(FJP|ELdgj$Lv7Y@-LaIyq)H9*36JezC zdY+Z!^<4X>TsQpd1mQ0kFI{WSL}#HWIt`tT{O8#-@YAmuhmM!Z=pe+<8l;={>DLmS zEN?*Pq4Uw9{Z*MNq-%`&vJPE{E<($Z%B)9kM5iN-(Xq%M?~Cz&>a*|_#2z|cZzAtX z^ft5sU5>6oZ%0=nl}VtD=o)nBc&W^_XcMYIDpQNDLv=`HHluf->(Qa(r7~O44M=@a znXO3A({Dy9lSJ=CZ$XES*LL#!XYG3YPIM#s@1Cy@9WRxUZgy&b|AKBoDYOgSir$Uh zgAN@pzubG-CZ*8(&~51bNM#z)2ha!6q2uM3`w-jI7nRwKK8(~CmH7y|9lZ-3I$q~p zy>FOo@2MwJdq4f^6O6xbY4b3?LizH<7_S(`A9$>%!jG5t<9)AqKjyrv*9@^Q-;b^S*I%Y8p4@zXaRgB*r#mL*3jf}6|FYOuj+e15t z{dQ`66sxhvoBEwM{q^%zr}g_*U$x@3mGp`DeS3YcIyAQSIIh{tHF!jI&p51k&osZv z_iS4|&F`(BeZ?KFU}9%sJ+z^@{iR ztG?)%CU@EWs*LI%oqvZp?(+4sKRVe*#(A~hcX{hue@T^2JK77RQnn$ zzSkUg)vq-`$JE~!?KE|&FTQtuH1$mP>X(kA>iolDpD@SQ@5?7oYQK-UWZH&5$M@z~ zy8MrKtsQ>uy;Cv1SB&p9ZoXGv&fE2-+`Kj4G~*!u?G3Zd`1oFZ_GA40s=lMY^v=n8 zY63fqS3Yf+^xBuoE-fE6$4-8%`0Ogb&M)2b%GG|qR95w?ZO-54d%s`G*KtujcOUrh zWSiyvzNpT^mwz)kRJX){IhuR_h|kFCFTaZ=Li=AmmTSOd14~)5u~yO zxPhBtB3+Za7s>1ok5355gCn_isjr$k$D24>Em+%eaA8d;~s%OuyiU<7|Ec&OhGf zhu}3x@k!X?@(1DCu#JhsPawr);6*36e7GMeKM!wOV)Ik*1*CjEWb`1@Hn?o5&5yuG zkZBv-@M@c%fb)0=QGN*SMye+b&wY)}kHI}i`8jxfxy?_)Cz0}t@H0HDsGba5%ni8m z!|)-b{5)LG+*5uW{vIh`KMdQ2l%Il)+w>w!-ZfK7y2AfE!lY`~;kLhRqMb-AMJM z;nPU-qzE54)AJ7E^YCdNzEn>UelY6d;kjqq{21JWR8J0Ge~!&h!Y7ewCl6llK&mGR zzl)S#glBLU*uZ%ggSVr__%wVFDLxM`TFo;k`Qk3L3@`o?#qi>Ds2VT+4%OlH51nPz zww^d_aXt^F*g(u-)%+c{s*;)_cR?@sXSj2HKzb@)7d1f|!P81BBt^P2Et$+a9Kym&0i zAW@sl^RZ@l>3TRbm=7jJ$y?|{dPUqScdb8z8%Jnvz=_!xQ;FK%t**`B_L z-~J%S9WVX{t;BmD;&~n|B3}I1?Hm`pIEbq7ViBz)UcCJd+KCsxfKvDz{9F^`!1!d~ zEq7U;g7+Yet=RUj{M>>VG4eT%7hc?ow&0WSp=LX_d3ae1^PYUMqLpKZ7q39Q_ypYC z#++w7#Vzf$2QR)KWi-w(kMV|dOc9><1<$(+ABP>z55h-~$`;@yciZ~oaK!l>d=aS) zyoA%+hSY{6{0vgr41CD>Jp8@$yu{f%87U?LZ$oNB8b0oP5gz+R8xw}NBhyFtGi26A zchc4!qcmvUqU}?ZJ!R zc!2W`FCIjX;S2D*2bm}AS6uoK^8qiOh4T0q{ER%;#0-4G`69e%zs--s9_I()lgM1V z;j#nPN8n9J^`zilm!E^je$(cMVFN0#-xPer@w zXgyxM5+(2n_(?QQyx5B-@Zy7LJ~86AP#7J)=N;QCFBcpXaO#k!^qqKmMdgWt<~$?ti*92j1y?2F`uT=7*o= z{u7m}J@6w%jwL?+Yx0r$n}?S^V|@bt)cGPj^I7`xmJ-89o}(VTc=+?&L*PU3MD$+j z6fZ(|;KkE_&w7OyFF-}SIOhf0ud*Ps3Ne z!qpFNL#jUwUv;$0haW|1e+K@*c`;BH@Rrej@hB9-i^rnN@L_l>QrR>N9AkY5-iplm z^-6ebz}uvFxE(1z1AowJzr%rLk z@c}P|7Z;*C@ZxCed>+1jrL8j#UvY+=V_{f_b~FCs z6|QeMswx zSo%ih1o`52v>Pujx|p>aABOiKjZY4aA@#8UYcFB^H!wbM?VC9_@o~8D(tuY~S-1vi zJ&(f=Ae9YW7Vtid(!`4!t7$V{yanBl7uRj#SgTHW6`G(56fEHavJ}lW{=T98=BQpnJ?G1Qh#BNlM z7Z+@$zj$#7#qr|$ZJa-N@d~sHFTNe^#*4M+F1&aH>cuDF14#SL!}ax?7s`j9MPqnz z?oN&cUc48*fERy_ShHKM3!9ALDa1ZGc~vXRP+Xqi+j%QSu}3O(=%H47MS~i1)ppc}D&oSlP(6 z03U-pK0q7r_3-mZ^Zy<=jx-M9mp@1wR2H7{p@8=+J^~LSFTr{RUqss1;@w=Yk$e=s z)A@Rsbza=-d=8E~FaDSF-iKKyk*@n<8mUgP&3W-Zk=j{=H+{tVU2xIu0dGES6Qf8m z;zsA|;c%MkA2B)j0@C$DjDFO5@$Qc?Zp0)$9`LR~)p+q;D8)F4pKxA$2t7u=_*1lu z_?^4ox1#fZ7ilz2U@NzyWn&~+T)dSd=KFYI;E ziqjY&{W*nygo~IzVdlz4ez&cLy2Jb*x8?kO34RCvhpe70YPBD0OPxkKY>r6{`>mto zR?-)ml4~h(JvrNH!&?5=Vt~4AyL9x_KmT|r_455(?)g3SyaY9K2S6R$$lb~DtDiPP zJgc+ie{<~4F~{zu^&ff!|GVS2jy?vM@f&G_->a!v$>SFDnV(>=bt8S>LEksh`l)#_ zCpcKTYU7R_H8)(dM3pw{P3At+xJ@Yq#BS z&c+=#EWh!zCE*)3Zrxm4v!nhkHQRS=-nMo1lGBz)mQ*a58xF6k-@bE4{RLZVxBZE= zt+3@NxufRVo!d9pzsuAU=Cf*h%{zCpmzquS?VE4hyrt&4njMoHr*D2k14Zj;$oiTa zYqo^9=y6v4ui3sNymRxKYp<=@LEmaOZrM?@q+->nlXbte@MQhdBK~Oa zt4@7MTUVVr*=dTeI@KS~iujuNnsw_gxcL0)YG?jd(_V)A4Q7(p5$y1C)@OPLd%dFd zxwd?pezQa|sjf7qx%KgEBFno0OnzB!d9RnWzA2NZtB$=xFQ+cSbrBoypF!Y&|z3J)xd(Poy{28}5tr#rooXiN3ME@xF<^V1HSEReyDVU4KJ=V}EdZlTG!gp+SuCEnr$67EiGe=3T?%< zNPDb3-kxYrwWn!i87-_cZ5-+t?HKDQ?~Ha^4P*y~21WDy56DE$lemGzaIzBNrA zovMNAfx3YP(-&RSo9M%MW+D@8E^96{7n{A7!IoT0p5qa3O|&LkGp&QPKH65*R&8cZ z6*H!;y`f!gP19PnFqkdNHe?&KXoY3;4+ZtQOAj`YNOl0B&&9fMqN zzPH%x^@aNKeTBY!f1y7#5FUtVY(qSAfLJD;i8RNW_ax+qsa<3}x)7R&xe6G&eRkxjA8b;J1I=&HVD#s@7`e{ZQ*DXX$urSzCEq)QovU zTVq?3J6Ffr$2m{cFZC+gneQxgdf8AmoE z=epxP2{ZO%oCOm->E2AQo%un|*m8HydIKRhKk@^GfufE@gr7qIow+gQcN6Q-5bMtv z{VOwby^+3UCy!3GJB!tqiMF7b=XQqYI`SQb4ll+t81)6)L##SEjueSBKZns}HxtZ+ zIG@6tQ4!9m7%N$vwJgDEmgMY8vHvtJ$k2vCT9Kn2d0JASEk)+A*BopPF^|KvE5cbA zV+D+}1|~QLNsdB_+r|A!b;ZITmS&w!~VhTH?&M z1oJJ)j7u@+(#*O{OO~@_i1TEWGi9u$&@$dqfs3XVv zn`Z?sbc}ZtJ0?23&R}PVGcL^Rj4(fAtjlp$<^*eVlCv{+fyLtK$Yvw7xyftg=q z-SN7DU7@bBt}y37gtH*V`X6W2Ot5YyyBatv8aXeTIMcITgRD%su2HUKV_k)=@vb5( ztJfXmj49)sDd(CI<*HHD9cP_Quqq^37gDSYX;!dIcb2nhi1TTb>)=>-ft8}j6~^lc za!oAbs#x9=>4~z=RrSPKpA)Rm$({z*yvCk%Pg75(C)+c~ijreZ$+M~yI2((ck6v%E zH`H6kDqhYy9_7kf)f?}v?oIU8^(I-@Q>^T1*7ginuEE|RR?kt^&#~SDSFs}3F|RMk zN?O(zX2p;6MY$$daaFG7x?IdW+H`v$qz<+$4AxhfR6Y8SccdHuou z5Gz5LwII?TWqqq+g{$sQa3xQ2El+VZPxm+VXZo}KgZ)GOx&G1qeE%4$_IQ7hYos?2 zWbG(p1utg}j}FARUdCBV5?pPPTyIhXjohm=akrA?er0GN$8|K%m9)U>S=9QO;knYS z0pWj~|9_X~zn2YiH7ona`TzHL{tr%_{~>n|5c|jV|L^Mh@1Or+cMlN%$Myg3=lY-H z--`6Z?w5H6Nc`je|L@}d|IqV4=AHq(Jipr!U~2rIJ@@7R)}Pw`51+dJyHQX46`#B~ J&;LLF{68}!r&|C3 literal 0 HcmV?d00001 diff --git a/data/plugins/components.ini b/data/plugins/components.ini new file mode 100644 index 0000000..beaf33b --- /dev/null +++ b/data/plugins/components.ini @@ -0,0 +1,48 @@ +# components.ini +# defines which components will be enabled + +# emulates game input through mouse and keyboard. +# controls can be set inside the keyconfig.ini file. +input_emulator = true +touch_slider_emulator = true +touch_panel_emulator = true + +# freezes the PV select timer at 39 seconds. +sys_timer = true + +# loads user defined const values from the playerdata.ini config +# and writes them to the game's PlayerData struct. +# required for modules selection +player_data_manager = true + +# adjusts 2D and 3D animations to retain their original speed at different frame rates. +# only use this component if you are running this game at higher than 60 FPS. +frame_rate_manager = false + +# sets an unlimited per session play count for the normal game mode. +# this means the player won't be sent back to the title screen after 2 plays. +stage_manager = true + +# skip unnecessary DATA_INITIALIZE loading time, speed up SYSTEM_STARTUP and skip the startup WARNING message. +# further improvements can be achieved by shortening the duration of the pv_999 script file as it's test loaded during the SYSTEM_STARTUP. +fast_loader = true + +# allows for a user controllable camera which can be toggled using F3, +# can be controlled using W/A/S/D to move, SPACE/CTRL to ascend/descend, Q/E to rotate, R/F to zoom in/out +# and holding SHIFT/ALT to speed up or slow down these controls. +camera_controller = false + +# scales the framebuffer so that it will fit the current screen or window +# required to set resolutions in config.ini +scale_component = true + +# lets the user change the current game state using the F4 - F8 keys, enable the dw_gui / DATA_TESTs +# and speed up 2D animations / menu navigation by holding SHIFT + TAB. +# enabling this component is not recommended for most users. +debug_component = false + +# enables the ability to set a cap on the framerate by setting FPS.Limit in config.ini +fps_limiter = false + +# allows the usage of hold transfer +target_inspector = true \ No newline at end of file diff --git a/data/plugins/config.ini b/data/plugins/config.ini new file mode 100644 index 0000000..963b7a7 --- /dev/null +++ b/data/plugins/config.ini @@ -0,0 +1,55 @@ +[Global] +# Load plugins including below options +Enable=1 + +[Launcher] +# Forces the launcher to be skipped, you can use the --launch parameter instead of this. +Skip=0 + +[Patches] +#Enable or disable mouse cursor +Cursor=1 +#Hide Freeplay text +Hide_Freeplay=0 +#Set the card reader and network status icons -- 0=default, 1=hidden, 2=error, 3=OK, 4=partial OK +Status_Icons=3 +#Hide the watermark that's usually shown in PV viewing mode +Hide_PV_Watermark=0 +#Permanently the photo controls during PV playback +No_PV_UI=0 +#Disables showing lyrics +No_Lyrics=0 +#Disables movies (enable this if the game hangs when loading certain PVs) +No_Movies=0 +#Hide the volume and SE control buttons +Hide_Volume=0 +#Disables the error banner +No_Error=1 + +[Graphics] +#FPS Limiter requires "fps_limiter" component to be enabled in "components.ini" +FPS.Limit=60 +# Temporal Anti-Aliasing +TAA=1 +# Morphological Anti-Aliasing +MLAA=1 + +[Resolution] +# 0 = Windowed, 1 = Borderless (Forced to desktop resolution), 2 = Fullscreen +Display=1 +Width=1280 +Height=720 +# Fullscreen only options +BitDepth=32 +RefreshRate=60 + +# Set a custom internal render resolution +# HD : 1280x720 +# FHD : 1920x1080 +# WQHD : 2560x1440 +# 4K UHD: 3840x2160 +# 5K UHD: 5120x2880 +# 8K UHD: 7680x4320 +r.Enable=0 +r.Width=3840 +r.Height=2160 diff --git a/data/plugins/keyconfig.ini b/data/plugins/keyconfig.ini new file mode 100644 index 0000000..f001c72 --- /dev/null +++ b/data/plugins/keyconfig.ini @@ -0,0 +1,78 @@ +# keyconfig.ini +# defines the input_emulator key bindings +# multiple keys are to be specified comma separated + +# Options: + +# allows the user to mouse wheel scroll through the PV selection list +mouse_scroll_pv_selection = true +# the interval it takes for the emulated slider touch points to move from one contact point to another. +# in most cases this does not need editing. +touch_slider_emulation_speed = 750.0 + +# JVS Buttons: +JVS_TEST = F1 +JVS_SERVICE = F2 + +JVS_START = Enter, Ds4_Options, XINPUT_START, MouseMiddle +JVS_TRIANGLE = W, I, Ds4_Triangle, Ds4_DPad_Up, Ds4_L_Trigger, Ds4_R_Trigger, XINPUT_Y, XINPUT_UP, XINPUT_LT, XINPUT_RT +JVS_SQUARE = A, J, Ds4_Square, Ds4_DPad_Left, Ds4_L_Trigger, Ds4_R_Trigger, XINPUT_X, XINPUT_LEFT, XINPUT_LT, XINPUT_RT, MouseX2 +JVS_CROSS = S, K, Ds4_Cross, Ds4_DPad_Down, Ds4_L_Trigger, Ds4_R_Trigger, XINPUT_A, XINPUT_DOWN, XINPUT_LT, XINPUT_RT, MouseX1 +JVS_CIRCLE = D, L, Ds4_Circle, Ds4_DPad_Right, Ds4_L_Trigger, Ds4_R_Trigger, XINPUT_B, XINPUT_RIGHT, XINPUT_LT, XINPUT_RT + +JVS_LEFT = Left, Up, Ds4_L1, Ds4_L_Stick_Up, Ds4_R_Stick_Up, XINPUT_LS +JVS_RIGHT = Right, Down, Ds4_R1, Ds4_L_Stick_Down, Ds4_R_Stick_Down, XINPUT_RS + +# Touch Slider: +LEFT_SIDE_SLIDE_LEFT = Q, Ds4_L_Stick_Left, XINPUT_LLEFT +LEFT_SIDE_SLIDE_RIGHT = E, Ds4_L_Stick_Right, XINPUT_LRIGHT + +RIGHT_SIDE_SLIDE_LEFT = U, Ds4_R_Stick_Left, XINPUT_RLEFT +RIGHT_SIDE_SLIDE_RIGHT = O, Ds4_R_Stick_Right, XINPUT_RRIGHT + +# --- KEYBOARD KEY NAMES: --- + +# - Standard Keys +# uppercase "A" to "Z", "0" to "9" + +# - NumPad Keys +# "NumPad0" to "NumPad9" +# "Plus", "Minus", "Divide", "Multiply" + +# - Function Keys +# "F1" to "F24" + +# - Shift Keys +# "LeftShift", "RightShift" + +# - Control Keys +# "LeftControl", "RightControl" + +# - Arrow Keys +# "Up", "Down", "Left", "Right" + +# - Special Keys +# "Enter", "Tab", "Backspace", "Insert", "Delete", "Home", "End", "PageUp", "PageDown", "Escape" + +# --- MOUSE BUTTON NAMES: --- +# "MouseLeft", "MouseMiddle", "MouseRight", "MouseX1", "MouseX2" + +# --- DUALSHOCK 4 BUTTON NAMES: --- + +# - Face Buttons +# "Ds4_Square", "Ds4_Cross", "Ds4_Circle", "Ds4_Triangle" + +# - Standard Buttons +# "Ds4_Share", "Ds4_Options", "Ds4_PS", "Ds4_Touch", "Ds4_L1", "Ds4_R1" + +# - D-Pad Directions +# "Ds4_DPad_Up", "Ds4_DPad_Right", "Ds4_DPad_Down", "Ds4_DPad_Left" + +# - Trigger Buttons +# "Ds4_L_Trigger", "Ds4_R_Trigger" + +# - Left Joystick +# "Ds4_L_Stick_Up", "Ds4_L_Stick_Right", "Ds4_L_Stick_Down", "Ds4_L_Stick_Left", "Ds4_L3" + +# - Right Joystick +# "Ds4_R_Stick_Up", "Ds4_R_Stick_Right", "Ds4_R_Stick_Down", "Ds4_R_Stick_Left", "Ds4_R3" \ No newline at end of file diff --git a/data/plugins/playerdata.ini b/data/plugins/playerdata.ini new file mode 100644 index 0000000..2115eeb --- /dev/null +++ b/data/plugins/playerdata.ini @@ -0,0 +1,33 @@ +# playerdata.ini +# defines constant values to be loaded into the PlayerData struct +# this file has to be encoded using utf-8 + +player_name = NO-NAME +level_name = 忘れないでね私の声を + +# IDs defined in rom/gm_plate_tbl.farc/gm_plate_id.bin +level_plate_id = 0 + +# IDs same as gam_skin%03d +skin_equip = 0 + +# IDs defined in rom/gm_btn_se_tbl.farc/gm_btn_se_id.bin +btn_se_equip = -1 + +# IDs defined in rom/gm_slide_se_tbl.farc/gm_slide_se_id.bin +slide_se_equip = -1 + +# IDs defined in rom/gm_chainslide_se_tbl.farc/gm_chainslide_se_id.bin +chainslide_se_equip = -1 + +# Show clear borders on Progress Bar for: +# Great +border_great = true +# Excellent +border_excellent = true + +# Allows module selection (WARNING: It may cause lag in the main menu and other places) +use_card = false + +# Allows use of game mode modifiers (hi-speed, hidden, and sudden) +gamemode_options = true \ No newline at end of file diff --git a/data/ram/databank/PvList0_SBZV_7.10_26176_1558979190.dat b/data/ram/databank/PvList0_SBZV_7.10_26176_1558979190.dat new file mode 100644 index 0000000..d07a62c --- /dev/null +++ b/data/ram/databank/PvList0_SBZV_7.10_26176_1558979190.dat @@ -0,0 +1 @@ +7%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C10%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C16%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C20%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C23%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C27%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C30%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C41%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-01-27%252C2029-01-01%2C42%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-02-23%252C2029-01-01%2C44%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-08-04%252C2029-01-01%2C46%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-03-27%252C2029-01-01%2C48%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-02-01%252C2029-01-01%2C49%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-02-01%252C2029-01-01%2C51%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-08-04%252C2029-01-01%2C52%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-03-27%252C2029-01-01%2C55%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-06-23%252C2029-01-01%2C57%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-02-23%252C2029-01-01%2C86%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-05-15%252C2029-01-01%2C96%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-07-19%252C2029-01-01%2C204%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2010-07-16%252C2029-01-01%2C213%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-12-15%252C2029-01-01%2C216%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-03-19%252C2029-01-01%2C219%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-08-06%252C2029-01-01%2C220%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-12-18%252C2029-01-01%2C221%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-04-26%252C2029-01-01%2C225%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-02-05%252C2029-01-01%2C232%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-03-19%252C2029-01-01%2C249%252C1%252C0%252C2016-02-26%252C2016-04-27%252C2016-02-26%252C2029-01-01%2C251%252C1%252C0%252C2015-10-08%252C2015-11-05%252C2015-10-08%252C2029-01-01%2C253%252C1%252C0%252C2016-08-31%252C2016-10-27%252C2016-08-31%252C2029-01-01%2C254%252C1%252C0%252C2016-12-21%252C2017-12-13%252C2016-12-21%252C2029-01-01%2C255%252C1%252C0%252C2016-06-30%252C2016-08-31%252C2016-06-30%252C2029-01-01%2C257%252C1%252C0%252C2016-04-27%252C2016-06-30%252C2016-04-27%252C2029-01-01%2C259%252C1%252C0%252C2016-04-27%252C2016-06-30%252C2016-04-27%252C2029-01-01%2C260%252C1%252C0%252C2016-04-27%252C2016-06-30%252C2016-04-27%252C2029-01-01%2C261%252C1%252C0%252C2016-06-30%252C2016-08-31%252C2016-06-30%252C2029-01-01%2C262%252C1%252C0%252C2016-10-27%252C2016-12-21%252C2016-10-27%252C2029-01-01%2C263%252C1%252C0%252C2016-12-21%252C2017-12-13%252C2016-12-21%252C2029-01-01%2C265%252C1%252C0%252C2016-10-27%252C2016-12-21%252C2016-10-27%252C2029-01-01%2C266%252C1%252C0%252C2017-12-13%252C2029-01-01%252C2017-12-13%252C2029-01-01%2C267%252C1%252C0%252C2017-12-13%252C2029-01-01%252C2017-12-13%252C2029-01-01%2C402%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-02%252C2029-01-01%2C405%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-02%252C2029-01-01%2C410%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2010-06-01%252C2029-01-01%2C427%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-01-12%252C2029-01-01%2C600%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-11-21%252C2029-01-01%2C602%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-11-21%252C2029-01-01%2C605%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2015-04-23%252C2029-01-01%2C615%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2014-01-28%252C2029-01-01%2C616%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-11-21%252C2029-01-01%2C637%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2015-03-26%252C2029-01-01%2C638%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-12-17%252C2029-01-01%2C725%252C1%252C0%252C2015-11-05%252C2015-12-22%252C2015-11-05%252C2029-01-01%2C726%252C1%252C0%252C2015-11-05%252C2015-12-22%252C2015-11-05%252C2029-01-01%2C727%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2015-06-26%252C2029-01-01%2C728%252C1%252C0%252C2016-01-28%252C2016-02-26%252C2016-01-28%252C2029-01-01%2C729%252C1%252C0%252C2015-10-08%252C2015-11-05%252C2015-10-08%252C2029-01-01%2C731%252C1%252C0%252C2015-12-22%252C2016-01-28%252C2015-12-22%252C2029-01-01%2C733%252C1%252C0%252C2016-01-28%252C2016-02-26%252C2016-01-28%252C2029-01-01%2C734%252C1%252C0%252C2015-11-05%252C2015-12-22%252C2015-11-05%252C2029-01-01%2C736%252C1%252C0%252C2015-10-08%252C2015-11-05%252C2015-10-08%252C2029-01-01%2C737%252C1%252C0%252C2015-12-22%252C2016-01-28%252C2015-12-22%252C2029-01-01%2C738%252C1%252C0%252C2016-01-28%252C2016-02-26%252C2016-01-28%252C2029-01-01%2C832%252C1%252C0%252C2016-08-31%252C2016-10-27%252C2016-08-31%252C2029-01-01 \ No newline at end of file diff --git a/data/ram/databank/PvList1_SBZV_7.10_48303_1558979196.dat b/data/ram/databank/PvList1_SBZV_7.10_48303_1558979196.dat new file mode 100644 index 0000000..bbf9ee5 --- /dev/null +++ b/data/ram/databank/PvList1_SBZV_7.10_48303_1558979196.dat @@ -0,0 +1 @@ +12%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C20%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C23%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C27%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C29%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C30%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C31%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C41%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-01-27%252C2029-01-01%2C42%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-02-23%252C2029-01-01%2C44%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-08-04%252C2029-01-01%2C46%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-03-27%252C2029-01-01%2C48%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-02-01%252C2029-01-01%2C49%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-02-01%252C2029-01-01%2C51%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-08-04%252C2029-01-01%2C52%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-03-27%252C2029-01-01%2C55%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-06-23%252C2029-01-01%2C57%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-02-23%252C2029-01-01%2C82%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-05-15%252C2029-01-01%2C84%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-10-10%252C2029-01-01%2C85%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-12-18%252C2029-01-01%2C86%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-05-15%252C2029-01-01%2C89%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-09-06%252C2029-01-01%2C91%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-11-13%252C2029-01-01%2C96%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-07-19%252C2029-01-01%2C202%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-02%252C2029-01-01%2C204%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2010-07-16%252C2029-01-01%2C210%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2010-11-17%252C2029-01-01%2C211%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2010-11-17%252C2029-01-01%2C212%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-06-23%252C2029-01-01%2C213%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-12-15%252C2029-01-01%2C215%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-05-15%252C2029-01-01%2C216%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-03-19%252C2029-01-01%2C218%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-02-05%252C2029-01-01%2C219%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-08-06%252C2029-01-01%2C220%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-12-18%252C2029-01-01%2C221%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-04-26%252C2029-01-01%2C222%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-04-26%252C2029-01-01%2C224%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-06-27%252C2029-01-01%2C225%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-02-05%252C2029-01-01%2C227%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-12-18%252C2029-01-01%2C232%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-03-19%252C2029-01-01%2C249%252C1%252C0%252C2016-02-26%252C2016-04-27%252C2016-02-26%252C2029-01-01%2C251%252C1%252C0%252C2015-10-08%252C2015-11-05%252C2015-10-08%252C2029-01-01%2C253%252C1%252C0%252C2016-08-31%252C2016-10-27%252C2016-08-31%252C2029-01-01%2C254%252C1%252C0%252C2016-12-21%252C2017-12-13%252C2016-12-21%252C2029-01-01%2C255%252C1%252C0%252C2016-06-30%252C2016-08-31%252C2016-06-30%252C2029-01-01%2C257%252C1%252C0%252C2016-04-27%252C2016-06-30%252C2016-04-27%252C2029-01-01%2C259%252C1%252C0%252C2016-04-27%252C2016-06-30%252C2016-04-27%252C2029-01-01%2C260%252C1%252C0%252C2016-04-27%252C2016-06-30%252C2016-04-27%252C2029-01-01%2C261%252C1%252C0%252C2016-06-30%252C2016-08-31%252C2016-06-30%252C2029-01-01%2C262%252C1%252C0%252C2016-10-27%252C2016-12-21%252C2016-10-27%252C2029-01-01%2C263%252C1%252C0%252C2016-12-21%252C2017-12-13%252C2016-12-21%252C2029-01-01%2C265%252C1%252C0%252C2016-10-27%252C2016-12-21%252C2016-10-27%252C2029-01-01%2C266%252C1%252C0%252C2017-12-13%252C2029-01-01%252C2017-12-13%252C2029-01-01%2C267%252C1%252C0%252C2017-12-13%252C2029-01-01%252C2017-12-13%252C2029-01-01%2C402%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-02%252C2029-01-01%2C405%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-02%252C2029-01-01%2C407%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2010-06-01%252C2029-01-01%2C410%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2010-06-01%252C2029-01-01%2C412%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2010-06-01%252C2029-01-01%2C413%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-05-24%252C2029-01-01%2C417%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-05-24%252C2029-01-01%2C423%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-01-12%252C2029-01-01%2C425%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-01-12%252C2029-01-01%2C427%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-01-12%252C2029-01-01%2C428%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-03-27%252C2029-01-01%2C431%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-06-14%252C2029-01-01%2C435%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2014-07-01%252C2029-01-01%2C441%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2015-01-27%252C2029-01-01%2C600%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-11-21%252C2029-01-01%2C602%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-11-21%252C2029-01-01%2C605%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2015-04-23%252C2029-01-01%2C615%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2014-01-28%252C2029-01-01%2C616%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-11-21%252C2029-01-01%2C617%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2014-07-29%252C2029-01-01%2C625%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2014-09-17%252C2029-01-01%2C637%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2015-03-26%252C2029-01-01%2C638%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-12-17%252C2029-01-01%2C639%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2014-07-01%252C2029-01-01%2C725%252C1%252C0%252C2015-11-05%252C2015-12-22%252C2015-11-05%252C2029-01-01%2C726%252C1%252C0%252C2015-11-05%252C2015-12-22%252C2015-11-05%252C2029-01-01%2C727%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2015-06-26%252C2029-01-01%2C728%252C1%252C0%252C2016-01-28%252C2016-02-26%252C2016-01-28%252C2029-01-01%2C729%252C1%252C0%252C2015-10-08%252C2015-11-05%252C2015-10-08%252C2029-01-01%2C731%252C1%252C0%252C2015-12-22%252C2016-01-28%252C2015-12-22%252C2029-01-01%2C733%252C1%252C0%252C2016-01-28%252C2016-02-26%252C2016-01-28%252C2029-01-01%2C734%252C1%252C0%252C2015-11-05%252C2015-12-22%252C2015-11-05%252C2029-01-01%2C736%252C1%252C0%252C2015-10-08%252C2015-11-05%252C2015-10-08%252C2029-01-01%2C737%252C1%252C0%252C2015-12-22%252C2016-01-28%252C2015-12-22%252C2029-01-01%2C738%252C1%252C0%252C2016-01-28%252C2016-02-26%252C2016-01-28%252C2029-01-01%2C832%252C1%252C0%252C2016-08-31%252C2016-10-27%252C2016-08-31%252C2029-01-01 \ No newline at end of file diff --git a/data/ram/databank/PvList2_SBZV_7.10_25220_1558979199.dat b/data/ram/databank/PvList2_SBZV_7.10_25220_1558979199.dat new file mode 100644 index 0000000..a0cf749 --- /dev/null +++ b/data/ram/databank/PvList2_SBZV_7.10_25220_1558979199.dat @@ -0,0 +1 @@ +7%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C10%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C12%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C16%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C20%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C23%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C27%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C29%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C30%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C31%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C41%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-01-27%252C2029-01-01%2C42%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-02-23%252C2029-01-01%2C44%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-08-04%252C2029-01-01%2C46%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-03-27%252C2029-01-01%2C48%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-02-01%252C2029-01-01%2C49%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-02-01%252C2029-01-01%2C51%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-08-04%252C2029-01-01%2C52%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-03-27%252C2029-01-01%2C55%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-06-23%252C2029-01-01%2C57%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-02-23%252C2029-01-01%2C82%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-05-15%252C2029-01-01%2C84%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-10-10%252C2029-01-01%2C85%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-12-18%252C2029-01-01%2C86%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-05-15%252C2029-01-01%2C89%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-09-06%252C2029-01-01%2C91%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-11-13%252C2029-01-01%2C96%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-07-19%252C2029-01-01%2C202%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-02%252C2029-01-01%2C204%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2010-07-16%252C2029-01-01%2C210%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2010-11-17%252C2029-01-01%2C211%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2010-11-17%252C2029-01-01%2C212%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-06-23%252C2029-01-01%2C213%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-12-15%252C2029-01-01%2C215%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-05-15%252C2029-01-01%2C216%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-03-19%252C2029-01-01%2C218%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-02-05%252C2029-01-01%2C219%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-08-06%252C2029-01-01%2C220%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-12-18%252C2029-01-01%2C221%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-04-26%252C2029-01-01%2C222%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-04-26%252C2029-01-01%2C224%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-06-27%252C2029-01-01%2C225%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-02-05%252C2029-01-01%2C227%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-12-18%252C2029-01-01%2C232%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-03-19%252C2029-01-01%2C249%252C1%252C0%252C2016-02-26%252C2016-04-27%252C2016-02-26%252C2029-01-01%2C251%252C1%252C0%252C2015-10-08%252C2015-11-05%252C2015-10-08%252C2029-01-01%2C253%252C1%252C0%252C2016-08-31%252C2016-10-27%252C2016-08-31%252C2029-01-01%2C254%252C1%252C0%252C2016-12-21%252C2017-12-13%252C2016-12-21%252C2029-01-01%2C255%252C1%252C0%252C2016-06-30%252C2016-08-31%252C2016-06-30%252C2029-01-01%2C257%252C1%252C0%252C2016-04-27%252C2016-06-30%252C2016-04-27%252C2029-01-01%2C259%252C1%252C0%252C2016-04-27%252C2016-06-30%252C2016-04-27%252C2029-01-01%2C260%252C1%252C0%252C2016-04-27%252C2016-06-30%252C2016-04-27%252C2029-01-01%2C261%252C1%252C0%252C2016-06-30%252C2016-08-31%252C2016-06-30%252C2029-01-01%2C262%252C1%252C0%252C2016-10-27%252C2016-12-21%252C2016-10-27%252C2029-01-01%2C263%252C1%252C0%252C2016-12-21%252C2017-12-13%252C2016-12-21%252C2029-01-01%2C265%252C1%252C0%252C2016-10-27%252C2016-12-21%252C2016-10-27%252C2029-01-01%2C266%252C1%252C0%252C2017-12-13%252C2029-01-01%252C2017-12-13%252C2029-01-01%2C267%252C1%252C0%252C2017-12-13%252C2029-01-01%252C2017-12-13%252C2029-01-01%2C402%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-02%252C2029-01-01%2C405%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-02%252C2029-01-01%2C407%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2010-06-01%252C2029-01-01%2C412%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2010-06-01%252C2029-01-01%2C412%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2010-06-01%252C2029-01-01%2C413%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-05-24%252C2029-01-01%2C417%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-05-24%252C2029-01-01%2C423%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-01-12%252C2029-01-01%2C425%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-01-12%252C2029-01-01%2C427%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-01-12%252C2029-01-01%2C428%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-03-27%252C2029-01-01%2C431%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-06-14%252C2029-01-01%2C435%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2014-07-01%252C2029-01-01%2C441%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2015-01-27%252C2029-01-01%2C600%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-11-21%252C2029-01-01%2C602%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-11-21%252C2029-01-01%2C605%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2015-04-23%252C2029-01-01%2C615%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2014-01-28%252C2029-01-01%2C616%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-11-21%252C2029-01-01%2C617%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2014-07-29%252C2029-01-01%2C625%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2014-09-17%252C2029-01-01%2C637%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2015-03-26%252C2029-01-01%2C638%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-12-17%252C2029-01-01%2C639%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2014-07-01%252C2029-01-01%2C725%252C1%252C0%252C2015-11-05%252C2015-12-22%252C2015-11-05%252C2029-01-01%2C726%252C1%252C0%252C2015-11-05%252C2015-12-22%252C2015-11-05%252C2029-01-01%2C727%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2015-06-26%252C2029-01-01%2C728%252C1%252C0%252C2016-01-28%252C2016-02-26%252C2016-01-28%252C2029-01-01%2C729%252C1%252C0%252C2015-10-08%252C2015-11-05%252C2015-10-08%252C2029-01-01%2C731%252C1%252C0%252C2015-12-22%252C2016-01-28%252C2015-12-22%252C2029-01-01%2C733%252C1%252C0%252C2016-01-28%252C2016-02-26%252C2016-01-28%252C2029-01-01%2C734%252C1%252C0%252C2015-11-05%252C2015-12-22%252C2015-11-05%252C2029-01-01%2C736%252C1%252C0%252C2015-10-08%252C2015-11-05%252C2015-10-08%252C2029-01-01%2C737%252C1%252C0%252C2015-12-22%252C2016-01-28%252C2015-12-22%252C2029-01-01%2C738%252C1%252C0%252C2016-01-28%252C2016-02-26%252C2016-01-28%252C2029-01-01%2C832%252C1%252C0%252C2016-08-31%252C2016-10-27%252C2016-08-31%252C2029-01-01 \ No newline at end of file diff --git a/data/ram/databank/PvList3_SBZV_7.10_51748_1558979202.dat b/data/ram/databank/PvList3_SBZV_7.10_51748_1558979202.dat new file mode 100644 index 0000000..e644dec --- /dev/null +++ b/data/ram/databank/PvList3_SBZV_7.10_51748_1558979202.dat @@ -0,0 +1 @@ +7%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C7%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-01-14%252C2029-01-01%2C10%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C10%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-02-10%252C2029-01-01%2C12%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C12%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2018-04-25%252C2029-01-01%2C16%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C16%252C1%252C1%252C2019-05-22%252C2029-01-01%252C2019-05-22%252C2029-01-01%2C20%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C20%252C1%252C1%252C2019-04-24%252C2019-05-22%252C2019-04-24%252C2029-01-01%2C23%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C23%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-09-15%252C2029-01-01%2C27%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C27%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-04-07%252C2029-01-01%2C29%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C29%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-12-08%252C2029-01-01%2C30%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C30%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2015-11-26%252C2029-01-01%2C31%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-01%252C2029-01-01%2C31%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-05-12%252C2029-01-01%2C41%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-01-27%252C2029-01-01%2C41%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2017-02-09%252C2029-01-01%2C42%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-02-23%252C2029-01-01%2C42%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2018-03-20%252C2029-01-01%2C44%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-08-04%252C2029-01-01%2C44%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2017-10-25%252C2029-01-01%2C46%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-03-27%252C2029-01-01%2C46%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-06-09%252C2029-01-01%2C48%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-02-01%252C2029-01-01%2C48%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2018-03-20%252C2029-01-01%2C49%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-02-01%252C2029-01-01%2C49%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-07-28%252C2029-01-01%2C51%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-08-04%252C2029-01-01%2C51%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-04-07%252C2029-01-01%2C52%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-03-27%252C2029-01-01%2C52%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-06-09%252C2029-01-01%2C55%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-06-23%252C2029-01-01%2C55%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-10-13%252C2029-01-01%2C57%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-02-23%252C2029-01-01%2C57%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-01-14%252C2029-01-01%2C82%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-05-15%252C2029-01-01%2C82%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-03-10%252C2029-01-01%2C84%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-10-10%252C2029-01-01%2C84%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-12-08%252C2029-01-01%2C85%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-12-18%252C2029-01-01%2C85%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-01-14%252C2029-01-01%2C86%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-05-15%252C2029-01-01%2C86%252C1%252C1%252C2019-05-22%252C2029-01-01%252C2019-05-22%252C2029-01-01%2C89%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-09-06%252C2029-01-01%2C89%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-11-10%252C2029-01-01%2C91%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-11-13%252C2029-01-01%2C91%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2017-11-22%252C2029-01-01%2C96%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-07-19%252C2029-01-01%2C96%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-04-07%252C2029-01-01%2C202%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-02%252C2029-01-01%2C202%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-03-10%252C2029-01-01%2C204%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2010-07-16%252C2029-01-01%2C204%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2018-02-21%252C2029-01-01%2C210%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2010-11-17%252C2029-01-01%2C210%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-10-13%252C2029-01-01%2C211%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2010-11-17%252C2029-01-01%2C211%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-09-15%252C2029-01-01%2C212%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-06-23%252C2029-01-01%2C212%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2015-11-26%252C2029-01-01%2C213%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-12-15%252C2029-01-01%2C213%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2018-09-26%252C2029-01-01%2C215%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-05-15%252C2029-01-01%2C215%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2018-01-24%252C2029-01-01%2C216%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-03-19%252C2029-01-01%2C218%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-02-05%252C2029-01-01%2C218%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2017-01-12%252C2029-01-01%2C219%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-08-06%252C2029-01-01%2C219%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2015-07-09%252C2029-01-01%2C220%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-12-18%252C2029-01-01%2C220%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2018-04-25%252C2029-01-01%2C221%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-04-26%252C2029-01-01%2C221%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-11-10%252C2029-01-01%2C222%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-04-26%252C2029-01-01%2C222%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2017-01-12%252C2029-01-01%2C224%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-06-27%252C2029-01-01%2C224%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-02-10%252C2029-01-01%2C225%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-02-05%252C2029-01-01%2C225%252C1%252C1%252C2019-03-20%252C2019-04-24%252C2019-03-20%252C2029-01-01%2C227%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-12-18%252C2029-01-01%2C227%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2018-02-21%252C2029-01-01%2C232%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-03-19%252C2029-01-01%2C232%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-07-28%252C2029-01-01%2C249%252C1%252C0%252C2016-02-26%252C2016-04-27%252C2016-02-26%252C2029-01-01%2C251%252C1%252C0%252C2015-10-08%252C2015-11-05%252C2015-10-08%252C2029-01-01%2C253%252C1%252C0%252C2016-08-31%252C2016-10-27%252C2016-08-31%252C2029-01-01%2C254%252C1%252C0%252C2016-12-21%252C2017-12-13%252C2016-12-21%252C2029-01-01%2C255%252C1%252C0%252C2016-06-30%252C2016-08-31%252C2016-06-30%252C2029-01-01%2C257%252C1%252C0%252C2016-04-27%252C2016-06-30%252C2016-04-27%252C2029-01-01%2C259%252C1%252C0%252C2016-04-27%252C2016-06-30%252C2016-04-27%252C2029-01-01%2C260%252C1%252C0%252C2016-04-27%252C2016-06-30%252C2016-04-27%252C2029-01-01%2C261%252C1%252C0%252C2016-06-30%252C2016-08-31%252C2016-06-30%252C2029-01-01%2C262%252C1%252C0%252C2016-10-27%252C2016-12-21%252C2016-10-27%252C2029-01-01%2C263%252C1%252C0%252C2016-12-21%252C2017-12-13%252C2016-12-21%252C2029-01-01%2C265%252C1%252C0%252C2016-10-27%252C2016-12-21%252C2016-10-27%252C2029-01-01%2C266%252C1%252C0%252C2017-12-13%252C2029-01-01%252C2017-12-13%252C2029-01-01%2C267%252C1%252C0%252C2017-12-13%252C2029-01-01%252C2017-12-13%252C2029-01-01%2C402%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-02%252C2029-01-01%2C402%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-03-10%252C2029-01-01%2C405%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2009-01-02%252C2029-01-01%2C405%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-02-10%252C2029-01-01%2C407%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2010-06-01%252C2029-01-01%2C407%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2015-11-26%252C2029-01-01%2C410%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2010-06-01%252C2029-01-01%2C410%252C1%252C1%252C2019-05-22%252C2029-01-01%252C2019-05-22%252C2029-01-01%2C412%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2010-06-01%252C2029-01-01%2C412%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2018-11-21%252C2029-01-01%2C413%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-05-24%252C2029-01-01%2C413%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-07-28%252C2029-01-01%2C417%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2011-05-24%252C2029-01-01%2C417%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2017-10-25%252C2029-01-01%2C423%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-01-12%252C2029-01-01%2C423%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-05-12%252C2029-01-01%2C425%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-01-12%252C2029-01-01%2C425%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2017-11-22%252C2029-01-01%2C427%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-01-12%252C2029-01-01%2C427%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2018-01-24%252C2029-01-01%2C428%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-03-27%252C2029-01-01%2C428%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2016-05-12%252C2029-01-01%2C431%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2012-06-14%252C2029-01-01%2C431%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2017-02-09%252C2029-01-01%2C435%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2014-07-01%252C2029-01-01%2C435%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2018-07-25%252C2029-01-01%2C441%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2015-01-27%252C2029-01-01%2C441%252C1%252C1%252C2019-05-22%252C2029-01-01%252C2019-05-22%252C2029-01-01%2C600%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-11-21%252C2029-01-01%2C600%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2018-06-20%252C2029-01-01%2C602%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-11-21%252C2029-01-01%2C602%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2018-12-26%252C2029-01-01%2C605%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2015-04-23%252C2029-01-01%2C605%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2018-08-22%252C2029-01-01%2C613%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-12-17%252C2029-01-01%2C613%252C1%252C1%252C2029-01-01%252C2019-03-20%252C2019-02-27%252C2029-01-01%2C615%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2014-01-28%252C2029-01-01%2C615%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2018-05-23%252C2029-01-01%2C616%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-11-21%252C2029-01-01%2C616%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2018-05-23%252C2029-01-01%2C617%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2014-07-29%252C2029-01-01%2C617%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2018-07-25%252C2029-01-01%2C625%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2014-09-17%252C2029-01-01%2C625%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2018-08-22%252C2029-01-01%2C637%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2015-03-26%252C2029-01-01%2C638%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2013-12-17%252C2029-01-01%2C638%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2018-10-24%252C2029-01-01%2C639%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2014-07-01%252C2029-01-01%2C639%252C1%252C1%252C2029-01-01%252C2000-01-01%252C2018-06-20%252C2029-01-01%2C725%252C1%252C0%252C2015-11-05%252C2015-12-22%252C2015-11-05%252C2029-01-01%2C726%252C1%252C0%252C2015-11-05%252C2015-12-22%252C2015-11-05%252C2029-01-01%2C727%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2015-06-26%252C2029-01-01%2C728%252C1%252C0%252C2016-01-28%252C2016-02-26%252C2016-01-28%252C2029-01-01%2C729%252C1%252C0%252C2015-10-08%252C2015-11-05%252C2015-10-08%252C2029-01-01%2C730%252C1%252C0%252C2029-01-01%252C2000-01-01%252C2015-01-27%252C2029-01-01%2C730%252C1%252C1%252C2029-01-01%252C2019-02-27%252C2019-01-23%252C2029-01-01%2C731%252C1%252C0%252C2015-12-22%252C2016-01-28%252C2015-12-22%252C2029-01-01%2C733%252C1%252C0%252C2016-01-28%252C2016-02-26%252C2016-01-28%252C2029-01-01%2C734%252C1%252C0%252C2015-11-05%252C2015-12-22%252C2015-11-05%252C2029-01-01%2C736%252C1%252C0%252C2015-10-08%252C2015-11-05%252C2015-10-08%252C2029-01-01%2C737%252C1%252C0%252C2015-12-22%252C2016-01-28%252C2015-12-22%252C2029-01-01%2C738%252C1%252C0%252C2016-01-28%252C2016-02-26%252C2016-01-28%252C2029-01-01%2C832%252C1%252C0%252C2016-08-31%252C2016-10-27%252C2016-08-31%252C2029-01-01 \ No newline at end of file diff --git a/data/ram/databank/PvList4_SBZV_7.10_48392_1558979205.dat b/data/ram/databank/PvList4_SBZV_7.10_48392_1558979205.dat new file mode 100644 index 0000000..5926586 --- /dev/null +++ b/data/ram/databank/PvList4_SBZV_7.10_48392_1558979205.dat @@ -0,0 +1 @@ +%2A%2A%$A \ No newline at end of file diff --git a/dependencies/detours/include/detours.h b/dependencies/detours/include/detours.h new file mode 100644 index 0000000..0aade5c --- /dev/null +++ b/dependencies/detours/include/detours.h @@ -0,0 +1,1108 @@ +///////////////////////////////////////////////////////////////////////////// +// +// Core Detours Functionality (detours.h of detours.lib) +// +// Microsoft Research Detours Package, Version 4.0.1 +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// + +#pragma once +#ifndef _DETOURS_H_ +#define _DETOURS_H_ + +#define DETOURS_VERSION 0x4c0c1 // 0xMAJORcMINORcPATCH + +////////////////////////////////////////////////////////////////////////////// +// + +#ifdef DETOURS_INTERNAL + +#define _CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS 1 +#define _ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE 1 + +#pragma warning(disable:4068) // unknown pragma (suppress) + +#if _MSC_VER >= 1900 +#pragma warning(push) +#pragma warning(disable:4091) // empty typedef +#endif + +#include +#if (_MSC_VER < 1310) +#else +#pragma warning(push) +#if _MSC_VER > 1400 +#pragma warning(disable:6102 6103) // /analyze warnings +#endif +#include +#pragma warning(pop) +#endif + +#endif // DETOURS_INTERNAL + +////////////////////////////////////////////////////////////////////////////// +// + +#undef DETOURS_X64 +#undef DETOURS_X86 +#undef DETOURS_IA64 +#undef DETOURS_ARM +#undef DETOURS_ARM64 +#undef DETOURS_BITS +#undef DETOURS_32BIT +#undef DETOURS_64BIT + +#if defined(_X86_) +#define DETOURS_X86 +#define DETOURS_OPTION_BITS 64 + +#elif defined(_AMD64_) +#define DETOURS_X64 +#define DETOURS_OPTION_BITS 32 + +#elif defined(_IA64_) +#define DETOURS_IA64 +#define DETOURS_OPTION_BITS 32 + +#elif defined(_ARM_) +#define DETOURS_ARM + +#elif defined(_ARM64_) +#define DETOURS_ARM64 + +#else +#error Unknown architecture (x86, amd64, ia64, arm, arm64) +#endif + +#ifdef _WIN64 +#undef DETOURS_32BIT +#define DETOURS_64BIT 1 +#define DETOURS_BITS 64 +// If all 64bit kernels can run one and only one 32bit architecture. +//#define DETOURS_OPTION_BITS 32 +#else +#define DETOURS_32BIT 1 +#undef DETOURS_64BIT +#define DETOURS_BITS 32 +// If all 64bit kernels can run one and only one 32bit architecture. +//#define DETOURS_OPTION_BITS 32 +#endif + +#define VER_DETOURS_BITS DETOUR_STRINGIFY(DETOURS_BITS) + +////////////////////////////////////////////////////////////////////////////// +// + +#if (_MSC_VER < 1299) +typedef LONG LONG_PTR; +typedef ULONG ULONG_PTR; +#endif + +///////////////////////////////////////////////// SAL 2.0 Annotations w/o SAL. +// +// These definitions are include so that Detours will build even if the +// compiler doesn't have full SAL 2.0 support. +// +#ifndef DETOURS_DONT_REMOVE_SAL_20 + +#ifdef DETOURS_TEST_REMOVE_SAL_20 +#undef _Analysis_assume_ +#undef _Benign_race_begin_ +#undef _Benign_race_end_ +#undef _Field_range_ +#undef _Field_size_ +#undef _In_ +#undef _In_bytecount_ +#undef _In_count_ +#undef _In_opt_ +#undef _In_opt_bytecount_ +#undef _In_opt_count_ +#undef _In_opt_z_ +#undef _In_range_ +#undef _In_reads_ +#undef _In_reads_bytes_ +#undef _In_reads_opt_ +#undef _In_reads_opt_bytes_ +#undef _In_reads_or_z_ +#undef _In_z_ +#undef _Inout_ +#undef _Inout_opt_ +#undef _Inout_z_count_ +#undef _Out_ +#undef _Out_opt_ +#undef _Out_writes_ +#undef _Outptr_result_maybenull_ +#undef _Readable_bytes_ +#undef _Success_ +#undef _Writable_bytes_ +#undef _Pre_notnull_ +#endif + +#if defined(_Deref_out_opt_z_) && !defined(_Outptr_result_maybenull_) +#define _Outptr_result_maybenull_ _Deref_out_opt_z_ +#endif + +#if defined(_In_count_) && !defined(_In_reads_) +#define _In_reads_(x) _In_count_(x) +#endif + +#if defined(_In_opt_count_) && !defined(_In_reads_opt_) +#define _In_reads_opt_(x) _In_opt_count_(x) +#endif + +#if defined(_In_opt_bytecount_) && !defined(_In_reads_opt_bytes_) +#define _In_reads_opt_bytes_(x) _In_opt_bytecount_(x) +#endif + +#if defined(_In_bytecount_) && !defined(_In_reads_bytes_) +#define _In_reads_bytes_(x) _In_bytecount_(x) +#endif + +#ifndef _In_ +#define _In_ +#endif + +#ifndef _In_bytecount_ +#define _In_bytecount_(x) +#endif + +#ifndef _In_count_ +#define _In_count_(x) +#endif + +#ifndef _In_opt_ +#define _In_opt_ +#endif + +#ifndef _In_opt_bytecount_ +#define _In_opt_bytecount_(x) +#endif + +#ifndef _In_opt_count_ +#define _In_opt_count_(x) +#endif + +#ifndef _In_opt_z_ +#define _In_opt_z_ +#endif + +#ifndef _In_range_ +#define _In_range_(x,y) +#endif + +#ifndef _In_reads_ +#define _In_reads_(x) +#endif + +#ifndef _In_reads_bytes_ +#define _In_reads_bytes_(x) +#endif + +#ifndef _In_reads_opt_ +#define _In_reads_opt_(x) +#endif + +#ifndef _In_reads_opt_bytes_ +#define _In_reads_opt_bytes_(x) +#endif + +#ifndef _In_reads_or_z_ +#define _In_reads_or_z_ +#endif + +#ifndef _In_z_ +#define _In_z_ +#endif + +#ifndef _Inout_ +#define _Inout_ +#endif + +#ifndef _Inout_opt_ +#define _Inout_opt_ +#endif + +#ifndef _Inout_z_count_ +#define _Inout_z_count_(x) +#endif + +#ifndef _Out_ +#define _Out_ +#endif + +#ifndef _Out_opt_ +#define _Out_opt_ +#endif + +#ifndef _Out_writes_ +#define _Out_writes_(x) +#endif + +#ifndef _Outptr_result_maybenull_ +#define _Outptr_result_maybenull_ +#endif + +#ifndef _Writable_bytes_ +#define _Writable_bytes_(x) +#endif + +#ifndef _Readable_bytes_ +#define _Readable_bytes_(x) +#endif + +#ifndef _Success_ +#define _Success_(x) +#endif + +#ifndef _Pre_notnull_ +#define _Pre_notnull_ +#endif + +#ifdef DETOURS_INTERNAL + +#pragma warning(disable:4615) // unknown warning type (suppress with older compilers) + +#ifndef _Benign_race_begin_ +#define _Benign_race_begin_ +#endif + +#ifndef _Benign_race_end_ +#define _Benign_race_end_ +#endif + +#ifndef _Field_size_ +#define _Field_size_(x) +#endif + +#ifndef _Field_range_ +#define _Field_range_(x,y) +#endif + +#ifndef _Analysis_assume_ +#define _Analysis_assume_(x) +#endif + +#endif // DETOURS_INTERNAL +#endif // DETOURS_DONT_REMOVE_SAL_20 + +////////////////////////////////////////////////////////////////////////////// +// +#ifndef GUID_DEFINED +#define GUID_DEFINED +typedef struct _GUID +{ + DWORD Data1; + WORD Data2; + WORD Data3; + BYTE Data4[ 8 ]; +} GUID; + +#ifdef INITGUID +#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ + const GUID name \ + = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } +#else +#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ + const GUID name +#endif // INITGUID +#endif // !GUID_DEFINED + +#if defined(__cplusplus) +#ifndef _REFGUID_DEFINED +#define _REFGUID_DEFINED +#define REFGUID const GUID & +#endif // !_REFGUID_DEFINED +#else // !__cplusplus +#ifndef _REFGUID_DEFINED +#define _REFGUID_DEFINED +#define REFGUID const GUID * const +#endif // !_REFGUID_DEFINED +#endif // !__cplusplus + +#ifndef ARRAYSIZE +#define ARRAYSIZE(x) (sizeof(x)/sizeof(x[0])) +#endif + +// +////////////////////////////////////////////////////////////////////////////// + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +/////////////////////////////////////////////////// Instruction Target Macros. +// +#define DETOUR_INSTRUCTION_TARGET_NONE ((PVOID)0) +#define DETOUR_INSTRUCTION_TARGET_DYNAMIC ((PVOID)(LONG_PTR)-1) +#define DETOUR_SECTION_HEADER_SIGNATURE 0x00727444 // "Dtr\0" + +extern const GUID DETOUR_EXE_RESTORE_GUID; +extern const GUID DETOUR_EXE_HELPER_GUID; + +#define DETOUR_TRAMPOLINE_SIGNATURE 0x21727444 // Dtr! +typedef struct _DETOUR_TRAMPOLINE DETOUR_TRAMPOLINE, *PDETOUR_TRAMPOLINE; + +/////////////////////////////////////////////////////////// Binary Structures. +// +#pragma pack(push, 8) +typedef struct _DETOUR_SECTION_HEADER +{ + DWORD cbHeaderSize; + DWORD nSignature; + DWORD nDataOffset; + DWORD cbDataSize; + + DWORD nOriginalImportVirtualAddress; + DWORD nOriginalImportSize; + DWORD nOriginalBoundImportVirtualAddress; + DWORD nOriginalBoundImportSize; + + DWORD nOriginalIatVirtualAddress; + DWORD nOriginalIatSize; + DWORD nOriginalSizeOfImage; + DWORD cbPrePE; + + DWORD nOriginalClrFlags; + DWORD reserved1; + DWORD reserved2; + DWORD reserved3; + + // Followed by cbPrePE bytes of data. +} DETOUR_SECTION_HEADER, *PDETOUR_SECTION_HEADER; + +typedef struct _DETOUR_SECTION_RECORD +{ + DWORD cbBytes; + DWORD nReserved; + GUID guid; +} DETOUR_SECTION_RECORD, *PDETOUR_SECTION_RECORD; + +typedef struct _DETOUR_CLR_HEADER +{ + // Header versioning + ULONG cb; + USHORT MajorRuntimeVersion; + USHORT MinorRuntimeVersion; + + // Symbol table and startup information + IMAGE_DATA_DIRECTORY MetaData; + ULONG Flags; + + // Followed by the rest of the IMAGE_COR20_HEADER +} DETOUR_CLR_HEADER, *PDETOUR_CLR_HEADER; + +typedef struct _DETOUR_EXE_RESTORE +{ + DWORD cb; + DWORD cbidh; + DWORD cbinh; + DWORD cbclr; + + PBYTE pidh; + PBYTE pinh; + PBYTE pclr; + + IMAGE_DOS_HEADER idh; + union { + IMAGE_NT_HEADERS inh; // all environments have this +#ifdef IMAGE_NT_OPTIONAL_HDR32_MAGIC // some environments do not have this + IMAGE_NT_HEADERS32 inh32; +#endif +#ifdef IMAGE_NT_OPTIONAL_HDR64_MAGIC // some environments do not have this + IMAGE_NT_HEADERS64 inh64; +#endif +#ifdef IMAGE_NT_OPTIONAL_HDR64_MAGIC // some environments do not have this + BYTE raw[sizeof(IMAGE_NT_HEADERS64) + + sizeof(IMAGE_SECTION_HEADER) * 32]; +#else + BYTE raw[0x108 + sizeof(IMAGE_SECTION_HEADER) * 32]; +#endif + }; + DETOUR_CLR_HEADER clr; + +} DETOUR_EXE_RESTORE, *PDETOUR_EXE_RESTORE; + +#ifdef IMAGE_NT_OPTIONAL_HDR64_MAGIC +C_ASSERT(sizeof(IMAGE_NT_HEADERS64) == 0x108); +#endif + +// The size can change, but assert for clarity due to the muddying #ifdefs. +#ifdef _WIN64 +C_ASSERT(sizeof(DETOUR_EXE_RESTORE) == 0x688); +#else +C_ASSERT(sizeof(DETOUR_EXE_RESTORE) == 0x678); +#endif + +typedef struct _DETOUR_EXE_HELPER +{ + DWORD cb; + DWORD pid; + DWORD nDlls; + CHAR rDlls[4]; +} DETOUR_EXE_HELPER, *PDETOUR_EXE_HELPER; + +#pragma pack(pop) + +#define DETOUR_SECTION_HEADER_DECLARE(cbSectionSize) \ +{ \ + sizeof(DETOUR_SECTION_HEADER),\ + DETOUR_SECTION_HEADER_SIGNATURE,\ + sizeof(DETOUR_SECTION_HEADER),\ + (cbSectionSize),\ + \ + 0,\ + 0,\ + 0,\ + 0,\ + \ + 0,\ + 0,\ + 0,\ + 0,\ +} + +/////////////////////////////////////////////////////////////// Helper Macros. +// +#define DETOURS_STRINGIFY(x) DETOURS_STRINGIFY_(x) +#define DETOURS_STRINGIFY_(x) #x + +///////////////////////////////////////////////////////////// Binary Typedefs. +// +typedef BOOL (CALLBACK *PF_DETOUR_BINARY_BYWAY_CALLBACK)( + _In_opt_ PVOID pContext, + _In_opt_ LPCSTR pszFile, + _Outptr_result_maybenull_ LPCSTR *ppszOutFile); + +typedef BOOL (CALLBACK *PF_DETOUR_BINARY_FILE_CALLBACK)( + _In_opt_ PVOID pContext, + _In_ LPCSTR pszOrigFile, + _In_ LPCSTR pszFile, + _Outptr_result_maybenull_ LPCSTR *ppszOutFile); + +typedef BOOL (CALLBACK *PF_DETOUR_BINARY_SYMBOL_CALLBACK)( + _In_opt_ PVOID pContext, + _In_ ULONG nOrigOrdinal, + _In_ ULONG nOrdinal, + _Out_ ULONG *pnOutOrdinal, + _In_opt_ LPCSTR pszOrigSymbol, + _In_opt_ LPCSTR pszSymbol, + _Outptr_result_maybenull_ LPCSTR *ppszOutSymbol); + +typedef BOOL (CALLBACK *PF_DETOUR_BINARY_COMMIT_CALLBACK)( + _In_opt_ PVOID pContext); + +typedef BOOL (CALLBACK *PF_DETOUR_ENUMERATE_EXPORT_CALLBACK)(_In_opt_ PVOID pContext, + _In_ ULONG nOrdinal, + _In_opt_ LPCSTR pszName, + _In_opt_ PVOID pCode); + +typedef BOOL (CALLBACK *PF_DETOUR_IMPORT_FILE_CALLBACK)(_In_opt_ PVOID pContext, + _In_opt_ HMODULE hModule, + _In_opt_ LPCSTR pszFile); + +typedef BOOL (CALLBACK *PF_DETOUR_IMPORT_FUNC_CALLBACK)(_In_opt_ PVOID pContext, + _In_ DWORD nOrdinal, + _In_opt_ LPCSTR pszFunc, + _In_opt_ PVOID pvFunc); + +// Same as PF_DETOUR_IMPORT_FUNC_CALLBACK but extra indirection on last parameter. +typedef BOOL (CALLBACK *PF_DETOUR_IMPORT_FUNC_CALLBACK_EX)(_In_opt_ PVOID pContext, + _In_ DWORD nOrdinal, + _In_opt_ LPCSTR pszFunc, + _In_opt_ PVOID* ppvFunc); + +typedef VOID * PDETOUR_BINARY; +typedef VOID * PDETOUR_LOADED_BINARY; + +//////////////////////////////////////////////////////////// Transaction APIs. +// +LONG WINAPI DetourTransactionBegin(VOID); +LONG WINAPI DetourTransactionAbort(VOID); +LONG WINAPI DetourTransactionCommit(VOID); +LONG WINAPI DetourTransactionCommitEx(_Out_opt_ PVOID **pppFailedPointer); + +LONG WINAPI DetourUpdateThread(_In_ HANDLE hThread); + +LONG WINAPI DetourAttach(_Inout_ PVOID *ppPointer, + _In_ PVOID pDetour); + +LONG WINAPI DetourAttachEx(_Inout_ PVOID *ppPointer, + _In_ PVOID pDetour, + _Out_opt_ PDETOUR_TRAMPOLINE *ppRealTrampoline, + _Out_opt_ PVOID *ppRealTarget, + _Out_opt_ PVOID *ppRealDetour); + +LONG WINAPI DetourDetach(_Inout_ PVOID *ppPointer, + _In_ PVOID pDetour); + +BOOL WINAPI DetourSetIgnoreTooSmall(_In_ BOOL fIgnore); +BOOL WINAPI DetourSetRetainRegions(_In_ BOOL fRetain); +PVOID WINAPI DetourSetSystemRegionLowerBound(_In_ PVOID pSystemRegionLowerBound); +PVOID WINAPI DetourSetSystemRegionUpperBound(_In_ PVOID pSystemRegionUpperBound); + +////////////////////////////////////////////////////////////// Code Functions. +// +PVOID WINAPI DetourFindFunction(_In_ LPCSTR pszModule, + _In_ LPCSTR pszFunction); +PVOID WINAPI DetourCodeFromPointer(_In_ PVOID pPointer, + _Out_opt_ PVOID *ppGlobals); +PVOID WINAPI DetourCopyInstruction(_In_opt_ PVOID pDst, + _Inout_opt_ PVOID *ppDstPool, + _In_ PVOID pSrc, + _Out_opt_ PVOID *ppTarget, + _Out_opt_ LONG *plExtra); +BOOL WINAPI DetourSetCodeModule(_In_ HMODULE hModule, + _In_ BOOL fLimitReferencesToModule); +PVOID WINAPI DetourAllocateRegionWithinJumpBounds(_In_ LPCVOID pbTarget, + _Out_ PDWORD pcbAllocatedSize); + +///////////////////////////////////////////////////// Loaded Binary Functions. +// +HMODULE WINAPI DetourGetContainingModule(_In_ PVOID pvAddr); +HMODULE WINAPI DetourEnumerateModules(_In_opt_ HMODULE hModuleLast); +PVOID WINAPI DetourGetEntryPoint(_In_opt_ HMODULE hModule); +ULONG WINAPI DetourGetModuleSize(_In_opt_ HMODULE hModule); +BOOL WINAPI DetourEnumerateExports(_In_ HMODULE hModule, + _In_opt_ PVOID pContext, + _In_ PF_DETOUR_ENUMERATE_EXPORT_CALLBACK pfExport); +BOOL WINAPI DetourEnumerateImports(_In_opt_ HMODULE hModule, + _In_opt_ PVOID pContext, + _In_opt_ PF_DETOUR_IMPORT_FILE_CALLBACK pfImportFile, + _In_opt_ PF_DETOUR_IMPORT_FUNC_CALLBACK pfImportFunc); + +BOOL WINAPI DetourEnumerateImportsEx(_In_opt_ HMODULE hModule, + _In_opt_ PVOID pContext, + _In_opt_ PF_DETOUR_IMPORT_FILE_CALLBACK pfImportFile, + _In_opt_ PF_DETOUR_IMPORT_FUNC_CALLBACK_EX pfImportFuncEx); + +_Writable_bytes_(*pcbData) +_Readable_bytes_(*pcbData) +_Success_(return != NULL) +PVOID WINAPI DetourFindPayload(_In_opt_ HMODULE hModule, + _In_ REFGUID rguid, + _Out_ DWORD *pcbData); + +_Writable_bytes_(*pcbData) +_Readable_bytes_(*pcbData) +_Success_(return != NULL) +PVOID WINAPI DetourFindPayloadEx(_In_ REFGUID rguid, + _Out_ DWORD * pcbData); + +DWORD WINAPI DetourGetSizeOfPayloads(_In_opt_ HMODULE hModule); + +///////////////////////////////////////////////// Persistent Binary Functions. +// + +PDETOUR_BINARY WINAPI DetourBinaryOpen(_In_ HANDLE hFile); + +_Writable_bytes_(*pcbData) +_Readable_bytes_(*pcbData) +_Success_(return != NULL) +PVOID WINAPI DetourBinaryEnumeratePayloads(_In_ PDETOUR_BINARY pBinary, + _Out_opt_ GUID *pGuid, + _Out_ DWORD *pcbData, + _Inout_ DWORD *pnIterator); + +_Writable_bytes_(*pcbData) +_Readable_bytes_(*pcbData) +_Success_(return != NULL) +PVOID WINAPI DetourBinaryFindPayload(_In_ PDETOUR_BINARY pBinary, + _In_ REFGUID rguid, + _Out_ DWORD *pcbData); + +PVOID WINAPI DetourBinarySetPayload(_In_ PDETOUR_BINARY pBinary, + _In_ REFGUID rguid, + _In_reads_opt_(cbData) PVOID pData, + _In_ DWORD cbData); +BOOL WINAPI DetourBinaryDeletePayload(_In_ PDETOUR_BINARY pBinary, _In_ REFGUID rguid); +BOOL WINAPI DetourBinaryPurgePayloads(_In_ PDETOUR_BINARY pBinary); +BOOL WINAPI DetourBinaryResetImports(_In_ PDETOUR_BINARY pBinary); +BOOL WINAPI DetourBinaryEditImports(_In_ PDETOUR_BINARY pBinary, + _In_opt_ PVOID pContext, + _In_opt_ PF_DETOUR_BINARY_BYWAY_CALLBACK pfByway, + _In_opt_ PF_DETOUR_BINARY_FILE_CALLBACK pfFile, + _In_opt_ PF_DETOUR_BINARY_SYMBOL_CALLBACK pfSymbol, + _In_opt_ PF_DETOUR_BINARY_COMMIT_CALLBACK pfCommit); +BOOL WINAPI DetourBinaryWrite(_In_ PDETOUR_BINARY pBinary, _In_ HANDLE hFile); +BOOL WINAPI DetourBinaryClose(_In_ PDETOUR_BINARY pBinary); + +/////////////////////////////////////////////////// Create Process & Load Dll. +// +typedef BOOL (WINAPI *PDETOUR_CREATE_PROCESS_ROUTINEA)( + _In_opt_ LPCSTR lpApplicationName, + _Inout_opt_ LPSTR lpCommandLine, + _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, + _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, + _In_ BOOL bInheritHandles, + _In_ DWORD dwCreationFlags, + _In_opt_ LPVOID lpEnvironment, + _In_opt_ LPCSTR lpCurrentDirectory, + _In_ LPSTARTUPINFOA lpStartupInfo, + _Out_ LPPROCESS_INFORMATION lpProcessInformation); + +typedef BOOL (WINAPI *PDETOUR_CREATE_PROCESS_ROUTINEW)( + _In_opt_ LPCWSTR lpApplicationName, + _Inout_opt_ LPWSTR lpCommandLine, + _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, + _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, + _In_ BOOL bInheritHandles, + _In_ DWORD dwCreationFlags, + _In_opt_ LPVOID lpEnvironment, + _In_opt_ LPCWSTR lpCurrentDirectory, + _In_ LPSTARTUPINFOW lpStartupInfo, + _Out_ LPPROCESS_INFORMATION lpProcessInformation); + +BOOL WINAPI DetourCreateProcessWithDllA(_In_opt_ LPCSTR lpApplicationName, + _Inout_opt_ LPSTR lpCommandLine, + _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, + _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, + _In_ BOOL bInheritHandles, + _In_ DWORD dwCreationFlags, + _In_opt_ LPVOID lpEnvironment, + _In_opt_ LPCSTR lpCurrentDirectory, + _In_ LPSTARTUPINFOA lpStartupInfo, + _Out_ LPPROCESS_INFORMATION lpProcessInformation, + _In_ LPCSTR lpDllName, + _In_opt_ PDETOUR_CREATE_PROCESS_ROUTINEA pfCreateProcessA); + +BOOL WINAPI DetourCreateProcessWithDllW(_In_opt_ LPCWSTR lpApplicationName, + _Inout_opt_ LPWSTR lpCommandLine, + _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, + _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, + _In_ BOOL bInheritHandles, + _In_ DWORD dwCreationFlags, + _In_opt_ LPVOID lpEnvironment, + _In_opt_ LPCWSTR lpCurrentDirectory, + _In_ LPSTARTUPINFOW lpStartupInfo, + _Out_ LPPROCESS_INFORMATION lpProcessInformation, + _In_ LPCSTR lpDllName, + _In_opt_ PDETOUR_CREATE_PROCESS_ROUTINEW pfCreateProcessW); + +#ifdef UNICODE +#define DetourCreateProcessWithDll DetourCreateProcessWithDllW +#define PDETOUR_CREATE_PROCESS_ROUTINE PDETOUR_CREATE_PROCESS_ROUTINEW +#else +#define DetourCreateProcessWithDll DetourCreateProcessWithDllA +#define PDETOUR_CREATE_PROCESS_ROUTINE PDETOUR_CREATE_PROCESS_ROUTINEA +#endif // !UNICODE + +BOOL WINAPI DetourCreateProcessWithDllExA(_In_opt_ LPCSTR lpApplicationName, + _Inout_opt_ LPSTR lpCommandLine, + _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, + _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, + _In_ BOOL bInheritHandles, + _In_ DWORD dwCreationFlags, + _In_opt_ LPVOID lpEnvironment, + _In_opt_ LPCSTR lpCurrentDirectory, + _In_ LPSTARTUPINFOA lpStartupInfo, + _Out_ LPPROCESS_INFORMATION lpProcessInformation, + _In_ LPCSTR lpDllName, + _In_opt_ PDETOUR_CREATE_PROCESS_ROUTINEA pfCreateProcessA); + +BOOL WINAPI DetourCreateProcessWithDllExW(_In_opt_ LPCWSTR lpApplicationName, + _Inout_opt_ LPWSTR lpCommandLine, + _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, + _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, + _In_ BOOL bInheritHandles, + _In_ DWORD dwCreationFlags, + _In_opt_ LPVOID lpEnvironment, + _In_opt_ LPCWSTR lpCurrentDirectory, + _In_ LPSTARTUPINFOW lpStartupInfo, + _Out_ LPPROCESS_INFORMATION lpProcessInformation, + _In_ LPCSTR lpDllName, + _In_opt_ PDETOUR_CREATE_PROCESS_ROUTINEW pfCreateProcessW); + +#ifdef UNICODE +#define DetourCreateProcessWithDllEx DetourCreateProcessWithDllExW +#else +#define DetourCreateProcessWithDllEx DetourCreateProcessWithDllExA +#endif // !UNICODE + +BOOL WINAPI DetourCreateProcessWithDllsA(_In_opt_ LPCSTR lpApplicationName, + _Inout_opt_ LPSTR lpCommandLine, + _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, + _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, + _In_ BOOL bInheritHandles, + _In_ DWORD dwCreationFlags, + _In_opt_ LPVOID lpEnvironment, + _In_opt_ LPCSTR lpCurrentDirectory, + _In_ LPSTARTUPINFOA lpStartupInfo, + _Out_ LPPROCESS_INFORMATION lpProcessInformation, + _In_ DWORD nDlls, + _In_reads_(nDlls) LPCSTR *rlpDlls, + _In_opt_ PDETOUR_CREATE_PROCESS_ROUTINEA pfCreateProcessA); + +BOOL WINAPI DetourCreateProcessWithDllsW(_In_opt_ LPCWSTR lpApplicationName, + _Inout_opt_ LPWSTR lpCommandLine, + _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, + _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, + _In_ BOOL bInheritHandles, + _In_ DWORD dwCreationFlags, + _In_opt_ LPVOID lpEnvironment, + _In_opt_ LPCWSTR lpCurrentDirectory, + _In_ LPSTARTUPINFOW lpStartupInfo, + _Out_ LPPROCESS_INFORMATION lpProcessInformation, + _In_ DWORD nDlls, + _In_reads_(nDlls) LPCSTR *rlpDlls, + _In_opt_ PDETOUR_CREATE_PROCESS_ROUTINEW pfCreateProcessW); + +#ifdef UNICODE +#define DetourCreateProcessWithDlls DetourCreateProcessWithDllsW +#else +#define DetourCreateProcessWithDlls DetourCreateProcessWithDllsA +#endif // !UNICODE + +BOOL WINAPI DetourProcessViaHelperA(_In_ DWORD dwTargetPid, + _In_ LPCSTR lpDllName, + _In_ PDETOUR_CREATE_PROCESS_ROUTINEA pfCreateProcessA); + +BOOL WINAPI DetourProcessViaHelperW(_In_ DWORD dwTargetPid, + _In_ LPCSTR lpDllName, + _In_ PDETOUR_CREATE_PROCESS_ROUTINEW pfCreateProcessW); + +#ifdef UNICODE +#define DetourProcessViaHelper DetourProcessViaHelperW +#else +#define DetourProcessViaHelper DetourProcessViaHelperA +#endif // !UNICODE + +BOOL WINAPI DetourProcessViaHelperDllsA(_In_ DWORD dwTargetPid, + _In_ DWORD nDlls, + _In_reads_(nDlls) LPCSTR *rlpDlls, + _In_ PDETOUR_CREATE_PROCESS_ROUTINEA pfCreateProcessA); + +BOOL WINAPI DetourProcessViaHelperDllsW(_In_ DWORD dwTargetPid, + _In_ DWORD nDlls, + _In_reads_(nDlls) LPCSTR *rlpDlls, + _In_ PDETOUR_CREATE_PROCESS_ROUTINEW pfCreateProcessW); + +#ifdef UNICODE +#define DetourProcessViaHelperDlls DetourProcessViaHelperDllsW +#else +#define DetourProcessViaHelperDlls DetourProcessViaHelperDllsA +#endif // !UNICODE + +BOOL WINAPI DetourUpdateProcessWithDll(_In_ HANDLE hProcess, + _In_reads_(nDlls) LPCSTR *rlpDlls, + _In_ DWORD nDlls); + +BOOL WINAPI DetourUpdateProcessWithDllEx(_In_ HANDLE hProcess, + _In_ HMODULE hImage, + _In_ BOOL bIs32Bit, + _In_reads_(nDlls) LPCSTR *rlpDlls, + _In_ DWORD nDlls); + +BOOL WINAPI DetourCopyPayloadToProcess(_In_ HANDLE hProcess, + _In_ REFGUID rguid, + _In_reads_bytes_(cbData) PVOID pvData, + _In_ DWORD cbData); +BOOL WINAPI DetourRestoreAfterWith(VOID); +BOOL WINAPI DetourRestoreAfterWithEx(_In_reads_bytes_(cbData) PVOID pvData, + _In_ DWORD cbData); +BOOL WINAPI DetourIsHelperProcess(VOID); +VOID CALLBACK DetourFinishHelperProcess(_In_ HWND, + _In_ HINSTANCE, + _In_ LPSTR, + _In_ INT); + +// +////////////////////////////////////////////////////////////////////////////// +#ifdef __cplusplus +} +#endif // __cplusplus + +//////////////////////////////////////////////// Detours Internal Definitions. +// +#ifdef __cplusplus +#ifdef DETOURS_INTERNAL + +#define NOTHROW +// #define NOTHROW (nothrow) + +////////////////////////////////////////////////////////////////////////////// +// +#if (_MSC_VER < 1299) +#include +typedef IMAGEHLP_MODULE IMAGEHLP_MODULE64; +typedef PIMAGEHLP_MODULE PIMAGEHLP_MODULE64; +typedef IMAGEHLP_SYMBOL SYMBOL_INFO; +typedef PIMAGEHLP_SYMBOL PSYMBOL_INFO; + +static inline +LONG InterlockedCompareExchange(_Inout_ LONG *ptr, _In_ LONG nval, _In_ LONG oval) +{ + return (LONG)::InterlockedCompareExchange((PVOID*)ptr, (PVOID)nval, (PVOID)oval); +} +#else +#pragma warning(push) +#pragma warning(disable:4091) // empty typedef +#include +#pragma warning(pop) +#endif + +#ifdef IMAGEAPI // defined by DBGHELP.H +typedef LPAPI_VERSION (NTAPI *PF_ImagehlpApiVersionEx)(_In_ LPAPI_VERSION AppVersion); + +typedef BOOL (NTAPI *PF_SymInitialize)(_In_ HANDLE hProcess, + _In_opt_ LPCSTR UserSearchPath, + _In_ BOOL fInvadeProcess); +typedef DWORD (NTAPI *PF_SymSetOptions)(_In_ DWORD SymOptions); +typedef DWORD (NTAPI *PF_SymGetOptions)(VOID); +typedef DWORD64 (NTAPI *PF_SymLoadModule64)(_In_ HANDLE hProcess, + _In_opt_ HANDLE hFile, + _In_ LPSTR ImageName, + _In_opt_ LPSTR ModuleName, + _In_ DWORD64 BaseOfDll, + _In_opt_ DWORD SizeOfDll); +typedef BOOL (NTAPI *PF_SymGetModuleInfo64)(_In_ HANDLE hProcess, + _In_ DWORD64 qwAddr, + _Out_ PIMAGEHLP_MODULE64 ModuleInfo); +typedef BOOL (NTAPI *PF_SymFromName)(_In_ HANDLE hProcess, + _In_ LPSTR Name, + _Out_ PSYMBOL_INFO Symbol); + +typedef struct _DETOUR_SYM_INFO +{ + HANDLE hProcess; + HMODULE hDbgHelp; + PF_ImagehlpApiVersionEx pfImagehlpApiVersionEx; + PF_SymInitialize pfSymInitialize; + PF_SymSetOptions pfSymSetOptions; + PF_SymGetOptions pfSymGetOptions; + PF_SymLoadModule64 pfSymLoadModule64; + PF_SymGetModuleInfo64 pfSymGetModuleInfo64; + PF_SymFromName pfSymFromName; +} DETOUR_SYM_INFO, *PDETOUR_SYM_INFO; + +PDETOUR_SYM_INFO DetourLoadImageHlp(VOID); + +#endif // IMAGEAPI + +#if defined(_INC_STDIO) && !defined(_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS) +#error detours.h must be included before stdio.h (or at least define _CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS earlier) +#endif +#define _CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS 1 + +#ifndef DETOUR_TRACE +#if DETOUR_DEBUG +#define DETOUR_TRACE(x) printf x +#define DETOUR_BREAK() __debugbreak() +#include +#include +#else +#define DETOUR_TRACE(x) +#define DETOUR_BREAK() +#endif +#endif + +#if 1 || defined(DETOURS_IA64) + +// +// IA64 instructions are 41 bits, 3 per bundle, plus 5 bit bundle template => 128 bits per bundle. +// + +#define DETOUR_IA64_INSTRUCTIONS_PER_BUNDLE (3) + +#define DETOUR_IA64_TEMPLATE_OFFSET (0) +#define DETOUR_IA64_TEMPLATE_SIZE (5) + +#define DETOUR_IA64_INSTRUCTION_SIZE (41) +#define DETOUR_IA64_INSTRUCTION0_OFFSET (DETOUR_IA64_TEMPLATE_SIZE) +#define DETOUR_IA64_INSTRUCTION1_OFFSET (DETOUR_IA64_TEMPLATE_SIZE + DETOUR_IA64_INSTRUCTION_SIZE) +#define DETOUR_IA64_INSTRUCTION2_OFFSET (DETOUR_IA64_TEMPLATE_SIZE + DETOUR_IA64_INSTRUCTION_SIZE + DETOUR_IA64_INSTRUCTION_SIZE) + +C_ASSERT(DETOUR_IA64_TEMPLATE_SIZE + DETOUR_IA64_INSTRUCTIONS_PER_BUNDLE * DETOUR_IA64_INSTRUCTION_SIZE == 128); + +__declspec(align(16)) struct DETOUR_IA64_BUNDLE +{ + public: + union + { + BYTE data[16]; + UINT64 wide[2]; + }; + + enum { + A_UNIT = 1u, + I_UNIT = 2u, + M_UNIT = 3u, + B_UNIT = 4u, + F_UNIT = 5u, + L_UNIT = 6u, + X_UNIT = 7u, + }; + struct DETOUR_IA64_METADATA + { + ULONG nTemplate : 8; // Instruction template. + ULONG nUnit0 : 4; // Unit for slot 0 + ULONG nUnit1 : 4; // Unit for slot 1 + ULONG nUnit2 : 4; // Unit for slot 2 + }; + + protected: + static const DETOUR_IA64_METADATA s_rceCopyTable[33]; + + UINT RelocateBundle(_Inout_ DETOUR_IA64_BUNDLE* pDst, _Inout_opt_ DETOUR_IA64_BUNDLE* pBundleExtra) const; + + bool RelocateInstruction(_Inout_ DETOUR_IA64_BUNDLE* pDst, + _In_ BYTE slot, + _Inout_opt_ DETOUR_IA64_BUNDLE* pBundleExtra) const; + + // 120 112 104 96 88 80 72 64 56 48 40 32 24 16 8 0 + // f. e. d. c. b. a. 9. 8. 7. 6. 5. 4. 3. 2. 1. 0. + + // 00 + // f.e. d.c. b.a. 9.8. 7.6. 5.4. 3.2. 1.0. + // 0000 0000 0000 0000 0000 0000 0000 001f : Template [4..0] + // 0000 0000 0000 0000 0000 03ff ffff ffe0 : Zero [ 41.. 5] + // 0000 0000 0000 0000 0000 3c00 0000 0000 : Zero [ 45.. 42] + // 0000 0000 0007 ffff ffff c000 0000 0000 : One [ 82.. 46] + // 0000 0000 0078 0000 0000 0000 0000 0000 : One [ 86.. 83] + // 0fff ffff ff80 0000 0000 0000 0000 0000 : Two [123.. 87] + // f000 0000 0000 0000 0000 0000 0000 0000 : Two [127..124] + BYTE GetTemplate() const; + // Get 4 bit opcodes. + BYTE GetInst0() const; + BYTE GetInst1() const; + BYTE GetInst2() const; + BYTE GetUnit(BYTE slot) const; + BYTE GetUnit0() const; + BYTE GetUnit1() const; + BYTE GetUnit2() const; + // Get 37 bit data. + UINT64 GetData0() const; + UINT64 GetData1() const; + UINT64 GetData2() const; + + // Get/set the full 41 bit instructions. + UINT64 GetInstruction(BYTE slot) const; + UINT64 GetInstruction0() const; + UINT64 GetInstruction1() const; + UINT64 GetInstruction2() const; + void SetInstruction(BYTE slot, UINT64 instruction); + void SetInstruction0(UINT64 instruction); + void SetInstruction1(UINT64 instruction); + void SetInstruction2(UINT64 instruction); + + // Get/set bitfields. + static UINT64 GetBits(UINT64 Value, UINT64 Offset, UINT64 Count); + static UINT64 SetBits(UINT64 Value, UINT64 Offset, UINT64 Count, UINT64 Field); + + // Get specific read-only fields. + static UINT64 GetOpcode(UINT64 instruction); // 4bit opcode + static UINT64 GetX(UINT64 instruction); // 1bit opcode extension + static UINT64 GetX3(UINT64 instruction); // 3bit opcode extension + static UINT64 GetX6(UINT64 instruction); // 6bit opcode extension + + // Get/set specific fields. + static UINT64 GetImm7a(UINT64 instruction); + static UINT64 SetImm7a(UINT64 instruction, UINT64 imm7a); + static UINT64 GetImm13c(UINT64 instruction); + static UINT64 SetImm13c(UINT64 instruction, UINT64 imm13c); + static UINT64 GetSignBit(UINT64 instruction); + static UINT64 SetSignBit(UINT64 instruction, UINT64 signBit); + static UINT64 GetImm20a(UINT64 instruction); + static UINT64 SetImm20a(UINT64 instruction, UINT64 imm20a); + static UINT64 GetImm20b(UINT64 instruction); + static UINT64 SetImm20b(UINT64 instruction, UINT64 imm20b); + + static UINT64 SignExtend(UINT64 Value, UINT64 Offset); + + BOOL IsMovlGp() const; + + VOID SetInst(BYTE Slot, BYTE nInst); + VOID SetInst0(BYTE nInst); + VOID SetInst1(BYTE nInst); + VOID SetInst2(BYTE nInst); + VOID SetData(BYTE Slot, UINT64 nData); + VOID SetData0(UINT64 nData); + VOID SetData1(UINT64 nData); + VOID SetData2(UINT64 nData); + BOOL SetNop(BYTE Slot); + BOOL SetNop0(); + BOOL SetNop1(); + BOOL SetNop2(); + + public: + BOOL IsBrl() const; + VOID SetBrl(); + VOID SetBrl(UINT64 target); + UINT64 GetBrlTarget() const; + VOID SetBrlTarget(UINT64 target); + VOID SetBrlImm(UINT64 imm); + UINT64 GetBrlImm() const; + + UINT64 GetMovlGp() const; + VOID SetMovlGp(UINT64 gp); + + VOID SetStop(); + + UINT Copy(_Out_ DETOUR_IA64_BUNDLE *pDst, _Inout_opt_ DETOUR_IA64_BUNDLE* pBundleExtra = NULL) const; +}; +#endif // DETOURS_IA64 + +#ifdef DETOURS_ARM + +#define DETOURS_PFUNC_TO_PBYTE(p) ((PBYTE)(((ULONG_PTR)(p)) & ~(ULONG_PTR)1)) +#define DETOURS_PBYTE_TO_PFUNC(p) ((PBYTE)(((ULONG_PTR)(p)) | (ULONG_PTR)1)) + +#endif // DETOURS_ARM + +////////////////////////////////////////////////////////////////////////////// + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +#define DETOUR_OFFLINE_LIBRARY(x) \ +PVOID WINAPI DetourCopyInstruction##x(_In_opt_ PVOID pDst, \ + _Inout_opt_ PVOID *ppDstPool, \ + _In_ PVOID pSrc, \ + _Out_opt_ PVOID *ppTarget, \ + _Out_opt_ LONG *plExtra); \ + \ +BOOL WINAPI DetourSetCodeModule##x(_In_ HMODULE hModule, \ + _In_ BOOL fLimitReferencesToModule); \ + +DETOUR_OFFLINE_LIBRARY(X86) +DETOUR_OFFLINE_LIBRARY(X64) +DETOUR_OFFLINE_LIBRARY(ARM) +DETOUR_OFFLINE_LIBRARY(ARM64) +DETOUR_OFFLINE_LIBRARY(IA64) + +#undef DETOUR_OFFLINE_LIBRARY + +////////////////////////////////////////////////////////////////////////////// +// +// Helpers for manipulating page protection. +// + +_Success_(return != FALSE) +BOOL WINAPI DetourVirtualProtectSameExecuteEx(_In_ HANDLE hProcess, + _In_ PVOID pAddress, + _In_ SIZE_T nSize, + _In_ DWORD dwNewProtect, + _Out_ PDWORD pdwOldProtect); + +_Success_(return != FALSE) +BOOL WINAPI DetourVirtualProtectSameExecute(_In_ PVOID pAddress, + _In_ SIZE_T nSize, + _In_ DWORD dwNewProtect, + _Out_ PDWORD pdwOldProtect); +#ifdef __cplusplus +} +#endif // __cplusplus + +////////////////////////////////////////////////////////////////////////////// + +#define MM_ALLOCATION_GRANULARITY 0x10000 + +////////////////////////////////////////////////////////////////////////////// + +#endif // DETOURS_INTERNAL +#endif // __cplusplus + +#endif // _DETOURS_H_ +// +//////////////////////////////////////////////////////////////// End of File. diff --git a/dependencies/detours/include/detver.h b/dependencies/detours/include/detver.h new file mode 100644 index 0000000..f0aae9b --- /dev/null +++ b/dependencies/detours/include/detver.h @@ -0,0 +1,27 @@ +////////////////////////////////////////////////////////////////////////////// +// +// Common version parameters. +// +// Microsoft Research Detours Package, Version 4.0.1 +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// + +#define _USING_V110_SDK71_ 1 +#include "winver.h" +#if 0 +#include +#include +#else +#ifndef DETOURS_STRINGIFY +#define DETOURS_STRINGIFY(x) DETOURS_STRINGIFY_(x) +#define DETOURS_STRINGIFY_(x) #x +#endif + +#define VER_FILEFLAGSMASK 0x3fL +#define VER_FILEFLAGS 0x0L +#define VER_FILEOS 0x00040004L +#define VER_FILETYPE 0x00000002L +#define VER_FILESUBTYPE 0x00000000L +#endif +#define VER_DETOURS_BITS DETOUR_STRINGIFY(DETOURS_BITS) diff --git a/dependencies/detours/include/syelog.h b/dependencies/detours/include/syelog.h new file mode 100644 index 0000000..7cfa9f3 --- /dev/null +++ b/dependencies/detours/include/syelog.h @@ -0,0 +1,89 @@ +////////////////////////////////////////////////////////////////////////////// +// +// Detours Test Program (syelog.h of syelog.lib) +// +// Microsoft Research Detours Package +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +#pragma once +#ifndef _SYELOGD_H_ +#define _SYELOGD_H_ +#include + +#pragma pack(push, 1) +#pragma warning(push) +#pragma warning(disable: 4200) + +////////////////////////////////////////////////////////////////////////////// +// +// +#define SYELOG_PIPE_NAMEA "\\\\.\\pipe\\syelog" +#define SYELOG_PIPE_NAMEW L"\\\\.\\pipe\\syelog" +#ifdef UNICODE +#define SYELOG_PIPE_NAME SYELOG_PIPE_NAMEW +#else +#define SYELOG_PIPE_NAME SYELOG_PIPE_NAMEA +#endif + +////////////////////////////////////////////////////////////////////////////// +// +#define SYELOG_MAXIMUM_MESSAGE 4086 // 4096 - sizeof(header stuff) + +typedef struct _SYELOG_MESSAGE +{ + USHORT nBytes; + BYTE nFacility; + BYTE nSeverity; + DWORD nProcessId; + FILETIME ftOccurance; + BOOL fTerminate; + CHAR szMessage[SYELOG_MAXIMUM_MESSAGE]; +} SYELOG_MESSAGE, *PSYELOG_MESSAGE; + + +// Facility Codes. +// +#define SYELOG_FACILITY_KERNEL 0x10 // OS Kernel +#define SYELOG_FACILITY_SECURITY 0x20 // OS Security +#define SYELOG_FACILITY_LOGGING 0x30 // OS Logging-internal +#define SYELOG_FACILITY_SERVICE 0x40 // User-mode system daemon +#define SYELOG_FACILITY_APPLICATION 0x50 // User-mode application +#define SYELOG_FACILITY_USER 0x60 // User self-generated. +#define SYELOG_FACILITY_LOCAL0 0x70 // Locally defined. +#define SYELOG_FACILITY_LOCAL1 0x71 // Locally defined. +#define SYELOG_FACILITY_LOCAL2 0x72 // Locally defined. +#define SYELOG_FACILITY_LOCAL3 0x73 // Locally defined. +#define SYELOG_FACILITY_LOCAL4 0x74 // Locally defined. +#define SYELOG_FACILITY_LOCAL5 0x75 // Locally defined. +#define SYELOG_FACILITY_LOCAL6 0x76 // Locally defined. +#define SYELOG_FACILITY_LOCAL7 0x77 // Locally defined. +#define SYELOG_FACILITY_LOCAL8 0x78 // Locally defined. +#define SYELOG_FACILITY_LOCAL9 0x79 // Locally defined. + +// Severity Codes. +// +#define SYELOG_SEVERITY_FATAL 0x00 // System is dead. +#define SYELOG_SEVERITY_ALERT 0x10 // Take action immediately. +#define SYELOG_SEVERITY_CRITICAL 0x20 // Critical condition. +#define SYELOG_SEVERITY_ERROR 0x30 // Error +#define SYELOG_SEVERITY_WARNING 0x40 // Warning +#define SYELOG_SEVERITY_NOTICE 0x50 // Significant condition. +#define SYELOG_SEVERITY_INFORMATION 0x60 // Informational +#define SYELOG_SEVERITY_AUDIT_FAIL 0x66 // Audit Failed +#define SYELOG_SEVERITY_AUDIT_PASS 0x67 // Audit Succeeeded +#define SYELOG_SEVERITY_DEBUG 0x70 // Debugging + +// Logging Functions. +// +VOID SyelogOpen(PCSTR pszIdentifier, BYTE nFacility); +VOID Syelog(BYTE nSeverity, PCSTR pszMsgf, ...); +VOID SyelogV(BYTE nSeverity, PCSTR pszMsgf, va_list args); +VOID SyelogClose(BOOL fTerminate); + +#pragma warning(pop) +#pragma pack(pop) + +#endif // _SYELOGD_H_ +// +///////////////////////////////////////////////////////////////// End of File. diff --git a/dependencies/detours/lib/detours.lib b/dependencies/detours/lib/detours.lib new file mode 100644 index 0000000000000000000000000000000000000000..13ac97b3fb2035d6a543537a66e3bd7dc9298b13 GIT binary patch literal 689904 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


lROoC6Jy)(oVTiq{|J zcucB(4oZ`AV456L$MUq2Am3w8-aIE=j%F6o_>`o{8DMy{>LEFY|LB_5bU8X%l&__< zAYB8}T<>(`-a za$<%@s~|?Zv-d@?v4vX5!_(x%(&QXrc;4o}OwH_m2uYQ5Brf@Rn?vb3B27-I;qlkJ z@}}NT)Kldgl_sY&P0rDV$6uL@=jT11E@z|m^A7lM1C2y#x{ftGnpgYv;tOeV21VpFckOISm!s8%{JgN7L1}UZ z8yQD{n5GO3mv-&$%jHj=IPEyo!*VA!%}k8J_Ot z3{R6YEKSY`!_$4bjyF8vbd5-pbAk0~qlUX?zZl6yyJWI(ewVpC3q{$fx zH9t=?d9@C`57B0Is+>`VXFDZbwOVFmnw-&4^YgSOqZWV4wf}i7UCv2{M_>E$<1;!< zj(WiSJgrEo<^Ff!89z>!Bkkqq#gU_4Q|9C}Ij2I+&wCm<;@R2%YuBdBp-90~5sJ^L zX>#H@$SF5GijSYJc$%CshG&*bSHGXP|0_K{V-1g9nD^5)CQVL-;n7N`crL!?lBMZ# zDg!xwd@9o9jLSjJ>1lGtrO8Pc9<7t99PXaR$Vmi;7M&KZU$Mp%CPGa*e*mElp#0Gqe(pNH*Cmow4ue8hiWPF0$mNrp%3uIk1A zbNBPx)8$kfo~KEdUoR%5$*D0sT6-Q*jlua6LWK@VtSX7&e)jG&z%@=I3>v zE=?Em^TO$xoF=E%@c4ah&59H6O^?r1!_!He{c>2FCTE)A(ORxXZ*7N;`+B;Z>4v9< zbZOKjGc8R{9n}0h<+-%-vzpJ9r?<~%8J=zYrwKBqE=|ta(DUm}zm2i$yPx}0+i zPgp-^r^%UNcoy@YqTR6YYH9T7L_sh?WG&wU3PxtYuH$36^%uJIr%kXp` zp9aG-Bov=nMh;}tstZ-Nln(o{pRpLq!ls3DT9?^p%LAposUu8j?`T`V+xE`*a@6Ac z#!6OR`o>b0_>Z8atV*NYnnrmrjiS8wjg|Ad{|H*j2WgZdG~ye}qn&8qSc>*8d}Ap( zi|!jsIV+8_D2;MO8s(NW%0p?CAE!~aJ4&7B>-m#_$EO@#v7%yN{Yp-^oxS2;>qK>3cN3=SwibCe+grKk1mjR+`TaFk&I{>fapYyqyQv(X$c`_y*P?{a3BA{@#&6sfk?nH$l_qJh0J z1Nd(!nlc!3ApfJ35}y+IIy8+E^C_AR7^6A9k)wgVF&cG8DPz(o>dT@$@iaBnQJ#P@)K98LJ5io#K4qw{ zGWBDIC(wq*qBcIK5!R!5_Q;~)8R}Fn(V1(<4eZycx)2}tGjccGSAh2ejk2q!`n$;OPw#n6A7!)`0@+x0}Z3r z+R+7MZ>{rXcp_mn8DD-_)#azJOZvLg`7%6_u;xa>Qo8JjNMSwVd>NidSm#B;Qo549 zo^!qoPb92)k+765JBm|SZ#rLwClXe3BrK&X>Fa&x%kV_PIzJNDji-IR%&x#FtR8M~ zYzc^mUE%Wq2ZC zX)u>8hf0@SIZ;?YbiNEvB&?Q5SPzWbc4*SqADu756A7y|5|;AIuC6Go1A6JdJ?@+z z3F`u=$ufWP{VNYl`l@!m3{NDiHsi}L^GcUpIZ+s^oG-%@39CI4meQ5<^*!gy@I=DW z5ILzsrOU4ND6F@fFT)cFOC$Mcx{|&QQMJPuo=8|rpeDmw@b2B8*p*3fPjkKuPb91h zjW0Q?-MIDGTlP-+TIGBho=8|rjW1t^3d^ouLiRQ}Uxp_VmZlKNblpFyZ@;9kKRI89 zClc00k+9Tm*cC;E728+;`5qd-XxX?}l%PG_FyQculfI@pUxp_V)^g*^PnW{7tB#Pp z)y|jUiKOe2w6K!Cwm4sgClc1Bk+A+T`^^sq1T(UaoiD=^3F}Ldu>SPb#eYuvI%+>0 zF@`4+RwvYC*-%(^mqFYUoiD=^3F|WB%P$*ut$2M?($`|=%kV_Py4?8kb*QlHP6TA{ zHs{OmM8aAT3F|j2cmF%->sjZ^@I=B|83{}Ib!ec&_na@o6A9~zNLXubK6AgMuK|5< z#2B7PSXV+#>QG_Dg0L!_FT)cF>nh{R*I}=9r*2F7y1@A|JdvNidSgRvpefYhKtCGH+bG{5uB&@3=Vcl}wm-9~!!urtpGCYy6x*}mczG2zdlfFv& z;)pRkk+9Z4P3ll#+0{#NpX7WQo=8}0jW1t^eZF-B83F{W)OWDaJ!Fy%Qw>Q}pU>>}(e)`Xqhy0@bmsY%z z`8Do?b01Fns&c*zPb93{j4wZ|Cx?9P8M{gh*=upW3{NCow@1Rd@$I^@q_69pFT)cF z>yAiRZ!X{T6T1SeupV{33{NDiuSLQ-O{L+0ohyad>NidSYMBX_4;>yG9>Bi z8_t*EiG+1;BrMfsyThWeo_4+rPb92wM8f*~u=5^C`g+ItGCYy6?lZpp{93p8kY&9C z9qujFVhm3ttoxxR%Y6KXtz(kDbj7NS;faLxO{mE}<;3?+zih7{tOuPh!xIVXTgI24 zUm71KeeH9ALgKw`e$le=fGB1sLhkCn3WKobIA4Y*64tkkFF&jmC8G{b`nt*aGCYxV zJs1f~V}O1^ST8tVh9?r%cOqe(^!KG7Bz+xxAdVQr6A5brRCeF^uQGq{k`>3;-CG{K zX6MWBM8f(muF3rR=CZ?@lfLeCz6?(!tcQ#*zkZ$9uWHE&LArkHd>NidSPw_S+VH#g zb|-xeI|xUN;faLx2-IYLJ$G9>Zw&M_yq=GCYy6 z9*u-G=-K1%DGI{ctHcIscp_mv771(ExY@5HeVyif86I!&?Dlpmg_}epVOeSq=Xjy> zB_2!ruA_*7lX4+Bo1oZyms`|4=X@C+3h%Vj>ZiufDzB+5 zud6>Jezu;c@mwbYkM;G<3tQ_?Z|bOAw4}MMWzoW>MIF-`+L{|?FK8<7)^)mb9lM~V zy(!VKsF63B18KSqsCijWyqX(&B6NGvL*T`|X)PXi`GfV~=%-ET z;7W+|xE=hwj(O8t+U7U4mB%SX6KX2QRMekAS+Zp-oo%|$RzE$BZ(75GX4YeyDw^6m z!s5cRB0P&4Z4AQ9ChTlJBB5tvD)+@kxYOj0ZE0N=O?tVXbZKFz>XuD^lGB%19;6=D z`spFwX*K4qjcx=FNeYfIXOT_3E0R9O&Y7p!_zJTz9+Se*5NJP}drDX&Argd5Luw#r zClxY>i|KTwNV=Q|Q)&To5nUfX@2u0n^tm||0rO3%h`KU|R6kKBBJ8E+M|-ZD8QwMk)d8m?{eTOaE$ z^=mtpn(5cp5VpH3=ww8r1C^Z%dO0asTsfqEE zrqq^C8e3UkACHSrKYn8Q>6P`9YU$w0D=H^XiN{q8D;Lq$x6zJFY-wD)ps9Vl-+D`0 zCP7B}(C$R4pwTRt1|Pwbni|^1G_*H4ft4G|XwTcjPoI&^O6aYmHJgxoHm4P#66e_vn~#GpnUsY6g!LRVh12?W9K!^nXm4Rl1AUUtbUFN^>bQU<~KKarS4;N zrNf42wzGX%I@f&eu5|eENtWTTFJ5#Zg`zani_)i-n*GF7VmfOE#)w4Q%|-<#X(4%* z7#8PK98-=xwTpPJ+}VZuEjnF7vVYGmJu`b$e5A`)!EvJu(|<=rchB05Sij5nYhN&m z*;62U@R&WwNXqvRN(SESg7-9h=|*FIVj|&D(dy5z5sU_!9MNroUe5}mNT=w-o&rhINmWly?c3bKF#rTC+}SxuY|8H z(Y?IOalQqfL&jUaZ2Bw1;b?d!P3T_UkvK1b=Vr&3P2Ohs?uKX18QsfUjB}TGsw`g* zAX9#P1ie2zy(e0}Z26&E14qDf?xZANCV7M4y8@o?Rwwx~m6ukWe+AF@8q1e0ejnm| zE<9(R*}XiS5n2Y%{*x`AwoNm|Z$0!%cz*Br6mF*Yodo@#@QiRZI$Qj1f-eEj_7Gn- zc^|^_MYI2F_ntGwPv?)u!t6Ry3dAShhagN7wX3h`E`vH8b>$;aW5a;hYp6=vr!|^rv)}PhAJe>{M z2G5eSlYE)d8>c+q0ne|`v3z?0ne@lygWdp?c-*;`FI#@x246WmZ_Z4Hn@Qe#IQOjQ zT@`*Z+2nO1uW%M;^BWACd1EG%Je^(I;CL)&=KN55KW#Q=#^-b|PiHmmf~T(0@~L0U zq`z9^ErI9xCd-#ie{aLL*Ie$4kn5 ze79U+xw6SS0q3XS`N;8Qi{EzmdbFVzelpqQsT(S4=VoVqGTG#*|D6fX`5l%oo4h#A z*TM6OkVX*SGqUvy}#n`}5#rZ+UV>vU&?>^*> zznS|&G=RcnlQ$T*atRHYOy%VX+*{x~_BP9yExk2_I|ZJ*b#xk&t$sWL-_PM$tz*xa zY~}eF-2Md5f$PPUy}Z1DTWmd_#Na2BEq({%*8fh%Yy4!0M#lQF0s1I-b~?Un@_xG? z_k7&N2Xy5DGlX9z{S6|4KYNJ!Aw^X3KBGoJV5XDwH@_W74MKks_Zy`L_ zJ3hQ+EHAG@za5?np11O{<;OGx+ziiqKel`dH&gz;4Bu%~l0GkWFYiS7PK0OCPb{DG zl1bi8@O=}WF+a6@6z`1X`FGIog=h6EmM@z;>F*hM%9U_THvMUMb1gjiKR0Y%4?9A1RyPbv_YZ1Ud5?SR(|OYkpK{5B)+pYUyZ z-LhqqN7LuM<#>F7ndB`+Ug!T&N8adOp2nxKH+@MKGs)BV?_Btrf8D*jqYorM;CV~~ z1&o#(GReDXU()&y=KDPnj2Xc%Q~MW(e%9W3-p%}E^gollI1YEi^E)*(7?rC`@|4uW zxb6I7elpqSGf&_=peWD#MK8;jt^CbF#?dHewG@QW|4i}Q0sVS-F5cJjWy{|$!FM-2 zN9^+3a(Fg5zHIeF5q}Y$7yEWEuL*g7gXipG%a=`_+S5hw zJln5(d1oT;&+we4i8Ushyb(B0f#)hE9Fr}*r{ne=c>eDAvdNQk5tsNMdSLhR9z)(Z zcs_A_*~Tw1#C(yv@Sw)njZ-#g;d#rv3S>8-=UT?*gTImo*&M|m6Idm;yUujeT5xA6Tr2YJ2qA+C_g zRzLc~7jwMX@!3*RA*x4Zlpouj-l@J-4=-hv$Eb->q|gSyQ7X@T|!}-dEwd zYY*~Ne>XcGtj1)E-!}MO%|YH@a+LQk`1U&5>N=bL6u(l(Ue}mu~nS;D(Im(*} z-}yPnTa}}{b@1JmgS^Lcl=l>TFXbTb-5lk8D87Mv&W}SK&z|z*X!wTZAg?Azd3EqL z<{x_ehTNo`7##4)Wf~QQn{7`&SO~N;FvxnQZkp2HzmZ+g*K|kfXfG z@XgFY-trvft%Pq~4)Pw%QQo8QJ(YvJ?K#TZ0pEu?$m^#=P9c*mKL)^ewBzkAKPqyR zR|Q{P4)T`dDDP7EuFgT;eL2e80N)ci$a_6UdB274&pF8J{e|4}qd$Bx$JMXqkP!`CMxA!iMvj2J_^N_D(L&o5i6T zZ-4Iq?}PSy>+6@y zsc-1uijdj7-rvr5DN2jyH7#guY70}j>AAR}V*$G@rN!JnV$-*=mp+}ack$KeHqV<- zJ*K{T%!JCZwe^!KYwIVM*H+e#t)5gnxw@*pa#H!2s!DH|WA4!{^F%JY8B;!~V*2=s z+JtwU^Hb2RpNc7CYwByuPiGt6#%J$t*{79PjjyO5S5|tY@~SGY z+<7ewr)SSzt0&b@sUBBbKeoKa`y3*Q`e`M*rscw>Hhr;oV#Ctrg^L$@F|T*=fttw} zV@t*8(e3qZvnyKKbu*9mc|4ckxraBldUE|V?rj*4?1|+Q^fb&n3g=IXCA+qUz^bao zl#e~5zGm|H>dE74&#E6k$!MA=6c%3yTk0JU+>A5;r|kq#W8G>KQzxBKUr}CLj#~+C z3-RXMDypZr%Oku)a8bDRnS%8W!}aq0xmC%0UwHKBvEx;9?E5a`s01cHOVSuBbiMci z_l<8rs_Vph#iyZE0?`^A<0f-)`b^b(*7%%OvjAK*NQ_MKJg`K}?|r zNyn2b(RhW?!R|nHFZaFNRDE5_rCJ0#BH(?f;DN0O^;?Oan)-{Bp| z^KeS}l-kKt%EwjK*NmNX_Vlp{uME2CZ+ErV))Qrv@-Xcp4>GC`ZY05@(4SskQ#+Zj z8rk5d29(}VTG_0v8Jj4d%&tvg@g#z^FOKZb({J!!RZ~p~t17RlsjM)HyCfN2b&a%A zUgc6xpuO;QIDt-=nv@5-DMq#w`8sr(l8Sp$%w5zgD#uJcJ*2CFII9H+=^(9!nWo}U z7*&(%r%vI9u5$8eno4;MZ^2Y@)rm<}Kc!KrHd&w)FKMV>(A?f(N>)523&??k5PCr} z85GxRF=y3Qngah3Dsoj}{KT5-$+h)k&Z?hOP6M+qtWpKHTy&7xil7!7>+?zbUx?GV{z@*aTrU`hb$s4$)np$06TRVCDn5nguQ#`5e5lI^77vC}CCzVe= zi2w&2&C(h~F2b zv>|>CoN5b-3SGX+&9rK+@l#~f{@4VjHa|*Z2Wf0-Yg^Pp?UmmPc&2%FEoDrSOf%3A zx8Et^p@vdgHDS3TU~8aheo%mypmmyBRcqSQ*C9k(kd&g2XjAQ7W`&z8S0nuDWLkF9 z1}pB$AJdX$>g7#T)cGL7WVp&~#y;QFHO(9W zn7#1l_021o((BUG%76a#WA@wr%#1%A@Mk`6Z0N%dx%~RlvY&6*D<0dq>Tg?M)(Pak zd5=wf^Vazpt4NxpCYf zZ;gKM?8o~Yw5FLO|C}f3o40h|Rd3QDJSKsjF6PF(M(BEG;ZrVMk{IHI*SD)v6Pv5*(F8<<%4?sqt^tzltIL)!LO+0v0G95Z7&_guAH*d9Bh zxubo?&>=IL7tL9)xUmWA;30#DjvRi%u)#xSES}TWF@sOoF)tiE?^8)?X8_#PC|T_d zbDKV;FcU2 zsL7b4q3Wj;;k`ut#f-a!Zd5Pi#Z z+W%hOqs~^O>jF9`t!aoiOk#CaXLk6rG2X;9+a$$A}L- znp2!SJJ!w;dX12?S#eA{#}(Otw=Bv#B>JfSD&XFthY$F*^E=r)U4xmx+=opa&o}se zH|Y{xWAWEo81nWri3_|ZEn|wAM->+R^+V;XltCU$g3h>V->3_N=p)}YfJmuY+mthneu5!qN}QO zWMZ|+_aULY9s)hSI?>-Ut=L>r)wQ{+wlwZM74AShxmSgR)#b)_!aQ}2FLA;WE1oXf z!r;ogh?o_a!l7Ja*yD{$$+hLsRIo1O_w8)CW|p!1tg~xc%D*!Fq??$_zacoil+3^V z$)XvT}@G($1dUcSavK4s@Lmf>aSXydk znz~6|khdl)3bB{0PFVZaxK5ebnzqHSJ70%Vk&+9eq4nXXa(QRAT+s5Pp9y9uGPgRU z&uzFmB(jLe{R^&Yq&^9|;QK%hEY=!7lw>8pWg&M_3n;2K%R@YnOv5>tqu+xaD zR9Yq;OaV4+W{^8q;aroFI~PGyig|0-yER+xBv+69JW5h>Z0#;e=2XzywGyUp6c1^i zZ56N45zj@tirY+3QL6{l+BJY`?Ph~ao4iJF4A=xRZSl?n&j#m#YV~NtOsjW3sN9+p zIETRKGXB3P-#gRVi*OKt*jODAiv94g{|RRRNgFc9w&y zK&f_apjz3iYAtQObN#G34l*E~c=D}$bs#_eFT0N!#3kB&JOw3@QZ+7zrpDtEe*Raf zutqz5yVK$4jobIgtpm9>nJ*bTkb|Nfh?U)a4`Ld%aNa5nsd;-bU4ls$cogoJf`t9IVDB;M?%|&-=X{-%2qi>kG|AyZ<$8Ow0N+mm{6CUGUU>TYh;L9VMV_FZd(B4kYgP$t#{7xkYN8Wz?L&Haep4q0Qc#aV8J$h@_)1oLocY;#<-JleI z52(ifUhsJE8(kTo*bd$gc7Tt9i$QfI7lOP`?kxr10hfV)1uq77gS`0N$$OOEC7{y(B~XR55xZ?- zWwYI9LH#Mf(bG}OD(%pQ1>$}faJFIcdiOttwTw|&aB2rAKQArusC|~PB+=_?twUD10 z2$?SQthlWK4*=JK$AMo4M}zA?4acqpmCx6KO2-YL^5?uDe`K@yV`=N1Ympb345Q7F zE4KHzVsl4r)mqKuO(qPf>WY8#c+5Qc-K6ErgYz(D?2yF#_(!qCip|WnG#g&A6U)mx z0ttx~I|_FlW84fe>Ag>iU@J|t=7aIA*cN!hv7KOS=VCj_*xCZuHP}WPntH+y_+8I$ zMoRs?1)5T%7T}It@_E)0J~!3U7He!;(A1%0S&e)oq;0Wi1H0+K!*lMGEccWrYJF^- zku634nH4mWbR}Jq3Q|9#&bxq6Zmbmo2BH_r+Vbq^o1hl=QXunbu9x{g1E079AYh;lgK-{FLzn0V(;+|6IBo!;)Ct?dFPocNRnZ4T7v)S}QRDiC ziqe|I?rnOg(QqT?Es04b@!hrR^ciTFr$qj?MAwtzitl=of&0iUeq*4ewy`P2L8G=3 ze(WZCKThhyukv$R7Wq{@#)sqh=8<3Ll_BXyb-u5g{%Fg)IV(E~x;X zwKAdZ{%C$TCSCkSsa%^H-K{6-U60aQoT;*`B!y8$N-5MHsD?Zx2xM29^ zT>}GN!aerMimuHGIBg?gWbf*^k=T2tjVQyypcXBR!FH*!Eygy+*zUl_&=^<0EqNSD zYFqLkwEg(q&+n=9T(mR((W6anYWx4cn1_bC(SEKmvCYdob2N4Uv>2h<%wD7qe~NBa z=+%t0<0kX_pm3`cv>KZIr?{&WgqJb@&QgKW^AB(U_)l;I_%Co0$bMI+HZ(o~8^Qm8 zmx8;&%fY+?uk#+T0F+L8f+}H5E?nu6t;o{^#L}cyOM5w>y&BN6Y}`<`s!9_kM|W=~ zlUHo+p;AU6i>=t6hg(ebFj?^8ee>N^BYskO|0VrYOzP}9&+yGVzfN$5V#;8!eG_NO zQP}4(rlNE0oY^LsM?WT#7>>zv{esZIhciOrsVPv!N~GQ$3+ZZ9PQaD4iW>>i&NP&IVrxo5451rQokY4WhS$swQuN-vfUOZUTP~{uulN z_!hVW{2RCv+=qDV0;TVFK^1@IaIW~vR^)vg&^(?kEo0A}Eam@o`K}4d_ZmV|`LW%9 zvV2pVT?sZNF42{+dz#Ure5P}xD1Vm4_;Wuegi zrw-ap`(&E8Sl9UeqY{1FTU2a@sGWo2HpF8zbh|ejnrr5ul=uq=G1tr?hO&l7*7iWt zY^v}T_-&|ZR1HVWHlYQjyY@A~`9+?FvSf?jZ{J6}Q#X3=g(fZE$?t(|rODqfiL{Dp zPSTCvD#maM?UkrOD}!Wb0gFuUuc9;rT3YLuX|-ALR0#>MHeX9lDel*SM}gOa>Z88` zjsw36o(dIj$sgMRt5J~h z<6WJ7QMv8e@-NfT7d05bWfz>Exfd|35k~9@~*J7(QHkF1`jSX>T!RRG0wR~uN zqEYa7`8}Skd}v&!Plk6iRWI&nUEI-4ujz%>0@ssyp@RSkg0P+29J}YAwXM<4TMX{V zu>pV%#pXkHShVumfXD_kHXk*?9ER zShIWg?&Kr3K_=#dcHa6Q+4i~>YpJy^RamPFac8^e>AEe8h_LPTU&O|e zHg$72|E*2yLe`b6G~+(8rPwZOwNGklYHVsW^;0D~gK_n9 z7EYo1c>pzT9wfi5u5Fmj5pLd(DK;nc1G0UEus`IbA#Qs@OH`F#H-L2_L{(|_ss2ld zw!i4Wr8;k}qHPxhrm!5{+_H#1D>Cb|Aspc42Wrq%Y9zifCGg66iD_>*>7`Fpo4I4y zgXUjvid_>~*E3<~6d1`&%2gASk8F(O#=$Rz<(j>a9vr<){x~OS_V`W3kw=X3?ln-! zKE#UiCiJv}^fSO1^eRvldm^YhGYM2WYQQtVGr>l13aGhfEqEPB<&w4=d3CfiZdJ`J&bI89LQ zJIJObCLyM^ZQa^AM77y}q;;Y}t#X0cNd>K%+AZ2TS_!wQOmy+Tr%mO;uv|754{>r6 zC3c8lA5%7**;5So`bPQshU9HDr*}I>JCWuvui{vvXhpWCBjb8>{S(Gtyn#Yr{0KfebY{V+xZ z`(TfOCE($pMy5xA=YvOr%fO?-E5L!^(_k6+Q}9?&HFXg9E_fXHPjCp>lkkRu{lQ`2 z;o$M$5by->4DduyHFqSay|U4ubaoP`nzjhL9jVAx)IkcbK&lIy1+dM3^ z(2DqJA6(XF~TZJ*Dc&iLnqv7hjHof#>n>pz<&d)cBi}c!)-v~#nqYx^7XMqF2vq3G= z&Hxo>zG!LmsGi#DQMMv)J#LnEkF#an6EzbH4p#UY{d^TgHlf8ky3WkHEl1|r5#4Tt za%zfh)x?zWtK|1c_qx^Beoe9cpETQxj)QgK)1_H89B~44McK6xD&UDEb+1WC!aHVDeZ-aEB{S%R- zo+sIKYvm7BGiyI+MHDCB#IdAmIe``x=kcIc4JLqE z-l_tXj)|bO+!|z=FaPRP=ROqv%?&VEaO3| zHzoKnOH&G~EO~On%*~jH;7cP(dpZMa4Lg&^+O1E!8`*Inl1kl1IKF}j733P8Sb#4) z_DPcxvm5EpZ2YN9Vv7d!vrK6jh0Qi5Ix;K=)#!Q#N;ls$kkzAyF2v)GSMmhxmsCANA& zh|4){#M4~%v~;aamJyYSB&dLX+ArRdv5hjcj(~O@HoIT>U2M_Wx@N1Vq@48G0!^L3 z5Bc4kUgRqlw=QVbCW6~BS3_C{YX(DkSK*$8Q?SoI-ku{<<7#)A=FFML`Ea{TSO`@c z>1I}@^y#J`vpvs_1@$m_+DyfEKW}F7nJ{U1+sc2rx0&a(V!hsx1xlZawUTxNKbetv zw&O#0ouZ>9Q@q)EF>89Kff^&lK^1RSwmQdwtb%klfix~=S92V=lxNmOI+ueJz*|6O z_nmiwB0Zln-X{x?f z-bVo~ioQ*!00&TUn&biW)weO4Y$6Pj4@MCtpm z@wiUDx2`N*rAJKFT5H#?*P7BDPv;6*g9lRrxfaexK&ZB>~cN`WoLqI0lCFBA?dU7Bvc!U?La+}_<0IL^?#n> zW#@waCq24aW!t&GiSBazbj)zv@gWH|M&@;#o_t=tvUI)TO^oK*6sRh*2W$k($x&6y z^NA&L+Pv zy_HL{$@ux+Wfnj=#p-mw`Z6tu?#yQkW#=J1tmu#Aq0dV73Q}FG9;?~(n=y0P#L36F?I+Rno4i`&&tBb0qD@)fQQAQ1f?3o*g zdvV!$C;ueDc7w97dQRIv3Z9TB-gMUrM>jV0>YxtqpfDviai zo;xS0%^!H&aq)I|LrYcK zdsODwmDtv?EsHvumTLM{T>L&{UB^fVKX=Ts3mcY=ZCJ2icEg^+20LJ-(}S3x{g3sSdXp#5!J}P zqRO1cuNaN3SAp@qCZP6<()KDR<9eT1wQOR?K`vO6T+iQo3~yYjH!9(WQ2_J6>;asP zYh#jmeVAF%&lrL#-xP`%Mj^C<-G^{rl6hm8Ico@NYyV?CX^*xBPe<@e-J?Abwo=M9 zM!Avz)Awi<#ih6eQ8YWZDphKQo!IKO#^yy03nDo+1?MNMbjjEpmJx}$av_`p(odJ_ zk=2iKJP153i)Z5coMl!Pck-Aqi_^!hqfFs}-_!xQOCRB9UM4q2wLtD1Y%xX!U(fg3 za0CD4)N2`)e7R3{&;AteFLHD;WL10c8h9?h4_#PaXH!>g#JylC_zh44-}}Ka;J3hY zz;A=92M>ap$9)I99^3%l4n7R3=zkA<3VamQeC{#ur{Lq@ufgwwyTB(v&E0+g{tJ8( z)XCJRKvjn=ptj7O0mp#Pf|}Gk2iAf=22~SY0JR78BB-VQmq2YazYN|9{uI<^_s_u% z;4eV+yuSor0AB+&$oUn>oYi|BJPrIc$eh&s4XDbq9h?FF7Q7OC2V4j41UbOw{Sj2X z*#&L_-vxDd;GaNF@p|upoXYjy2j2t#4ywxh15};(2xR-u`xiJC{5N<8_%V13NORhG z54acj0Jt}((q0H|1B*a*oxEP)yI^ndpWuFAPs&Xnun)+!!kxt+H%OXY;r?JL&j*4U z_8kOH0!zSiz=OeA;9=nTAPWnf7lMa_%fV7mmFFn%M(}9x5pW>*L+}_-_2pRb9dHo% z0eBqvH*g5plX5u}JOCU99sv#q2ZASn$ABk-gTYbYC~!1b1)c=ffTw{RsPN)oJvbIr zzgGcjqNVL$JJFJ@$h!cV2Fkt63-huSnU>Y^&Ewhfspqydl`2bnCZIhR(Ebw8{vOZ< zlE2pPvCdZH)dsY>fW}6b<6~>fg~8oKj`m1EEK>IkLF*I`V(@{&yr%{V+MV`u_ zrD+msX_+Rk)21g@ygO1OJ9ol?0WFg<2ESS_wC8f?F?Cw;WJ%(rC)0?JPxzE~4 zrfXEWytK~i=vTgxj@%4E{g?AuZ&@nFd3N2hCXt_~;cU$LI6!W(L>Jx@Yg-F9$@^dL zaUqy@Hez_x3MtW>We<-s-!S9QSaJQnz z(Sx8rgOa+rt4Y5$_5Q@~UVm^#v5(wXZ`UieL8jLQ?T*4oJY+E4FIlGUlFdRw`YxHq zF#a}huuG;sIfjGo3ul-%xrtjaLz|d4;p7{oN&S@cyT%d!#Da;^`Dd^cd>^a;{|Z)t zAA(w|qxN;ygZ}_k$Nvc~20sQ@gZ}}q1$Tp*XXLT2_#nu*ymK>H0KN_G1xlxTgK9s{ zCQoepA)7sRZfWm2*R*$LnJIRyy9ZZF!^j;VWrI!S&tq9(a<~B72mG$)m%2-IG_-yB z9nSCj+46PtXpK*jui}-#oWZy}9fDJ6pstlV6@nx9F;Yujoo3dB#q1l!MfpKh_DUU* z_M}tsyB$;mmyj~6C)w;KvZYBAmX^LrWGZyr=!ofdtOQojgtberF2+z{se5J0 zoU)Ho)tM!i_E|v&X$B8flRaBu%T!Uzy39hZtd2Xjr034ph?N8;R(w>_-ecF@hEsl7 zZyA*+>~qCKFc@N=$Ku>4gF~Ok#uuFQWS=W;3c0ZTXI=J^%cZz%70;4oC9pe+4j{P&SytzbIGm& zJAe6!rtiyH@3C!t@OF{f)h(YR>b6z&>)b)8HFdkYjiN;BV#)4!-?ck_``@Ra@ zeb&C8ZFgiV@?H#RKXtYuPxB1R_n&|^2yW-s*^=A-W>66`hg$a8T2P9+w`*@KAQML3 z{|&vwvlLqD`itVFjg^7?Zs@)|jc>19*xIqotiP1No^JeOS23JIMN0e3n&*k^8-=U< zQiS_E;wqMoM6ZWv^(33!$+xt1&NZ3-k*ZK}uj5eDhT4&ks^DcKb@%LIDkl%S_T97> zKK(s1Q{7I0P>J~D>5|8wq;BAsLz8+==C>i6dPa{P-#(2SbnW4ik+5bk)Hc=D*@C^%nB0G8Bdz6ho!u zBT#|-6V$Z&-=J#S$KV&i-QZ}DzSNvy%X8i4e6(e=MYbYOdjXbqy|Wd04+k`9)AGF# z&|VH`{#K{y1v!*8lHE?z#_qaUImYs}S)}c29^8<5i0e5`k!K~F(hVys(FLXL@q`LH z<6yIpTBso|eW%WHnB`(lDi(MhdNhZY<=)l1)ISQqt8d@44ZOxae(Re@B2#P2tt3Dy z{3^e%XDbf2^$iyZX*Yv$4e$`0LbXL>o)SpRVl@bzUCAc9XnjMpF-_-1%1te9r|`q5 z+z5T|8r(*BPsQ;}ao9##C8V2n*1mqQ&am5m(t(OrAATz>$@@7YRq5pyplb6kK^3jn zK_&kGK*jG(P+|WXJR95&o(H}K&If-7YUSo_@FMUJpo-ZJ@LF&uDBb@NR7)`{D3Y=j zc^d=T6V7JOv0AsO5m(00Ew*GIY%xmOuDwOVlG>(f+&(mA zvwASJ-u#Z?_f?Y_Sd#M{UFoO|YGrb|Q5&iS${0>Z@YAIfdX^gP^K8!^+({b)D_rGF zcnn;Irc7Kw#per7bC(C2lg+lVmZrS6w8%-Fx=kZ-kP1!BWK3gTGAK3!qJTWaURpQA zu%WW>s}GA02)%c>Q!AP~ZyhZxwVh^fr$@WFe^A5p_-xf)B?UFXm6!0@anMHZb)_M3gfE&zRB49w&)kQrH%wO zMAs>xGr(ulOPRlOGO6i8yRhH=nTU+rCbJM9nvJRdng=OZc{a=5S|*P{P2arGSqP24 zbQWS67WG`y%yX#cGNpK%qY9KRmEr^WsTRw0vcjmeUIvZ_F9+3*tN>?#E5W(oRbU&q z3cM7&8dST{1>O#>0q+E_0ly8d19hC?TJRb0I`9?ndhplaSHQo6Uj;t_Zw7l3zgxgK zcq=#_yd6|N+ySax>cnolO4)eT2-;RdQ|x3b@}3I#o^`e&PhnfX%5m%W-GKIfK#O*t z!Tzg%w_LI_QzJZ!;F6=9B~Vf)@@g3N;in37Pqw0DyS4x3xM!$S%Y4*O;VP?p^7Dr@ zEO?u) z`ay}VaH#(|F{LG!`s7z-@uqaeoVmE6aZf87etWK%`t7;V#$O2{DKOFG&QirPⅅ|GC24jt%x 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

tA(0 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 + * Creation date: Thu Dec 2 1999 + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifdef __cplusplus + extern "C" { +#endif + +/* + * Additional GLUT Key definitions for the Special key function + */ +#define GLUT_KEY_NUM_LOCK 0x006D +#define GLUT_KEY_BEGIN 0x006E +#define GLUT_KEY_DELETE 0x006F +#define GLUT_KEY_SHIFT_L 0x0070 +#define GLUT_KEY_SHIFT_R 0x0071 +#define GLUT_KEY_CTRL_L 0x0072 +#define GLUT_KEY_CTRL_R 0x0073 +#define GLUT_KEY_ALT_L 0x0074 +#define GLUT_KEY_ALT_R 0x0075 + +/* + * GLUT API Extension macro definitions -- behaviour when the user clicks on an "x" to close a window + */ +#define GLUT_ACTION_EXIT 0 +#define GLUT_ACTION_GLUTMAINLOOP_RETURNS 1 +#define GLUT_ACTION_CONTINUE_EXECUTION 2 + +/* + * Create a new rendering context when the user opens a new window? + */ +#define GLUT_CREATE_NEW_CONTEXT 0 +#define GLUT_USE_CURRENT_CONTEXT 1 + +/* + * Direct/Indirect rendering context options (has meaning only in Unix/X11) + */ +#define GLUT_FORCE_INDIRECT_CONTEXT 0 +#define GLUT_ALLOW_DIRECT_CONTEXT 1 +#define GLUT_TRY_DIRECT_CONTEXT 2 +#define GLUT_FORCE_DIRECT_CONTEXT 3 + +/* + * GLUT API Extension macro definitions -- the glutGet parameters + */ +#define GLUT_INIT_STATE 0x007C + +#define GLUT_ACTION_ON_WINDOW_CLOSE 0x01F9 + +#define GLUT_WINDOW_BORDER_WIDTH 0x01FA +#define GLUT_WINDOW_BORDER_HEIGHT 0x01FB +#define GLUT_WINDOW_HEADER_HEIGHT 0x01FB /* Docs say it should always have been GLUT_WINDOW_BORDER_HEIGHT, keep this for backward compatibility */ + +#define GLUT_VERSION 0x01FC + +#define GLUT_RENDERING_CONTEXT 0x01FD +#define GLUT_DIRECT_RENDERING 0x01FE + +#define GLUT_FULL_SCREEN 0x01FF + +#define GLUT_SKIP_STALE_MOTION_EVENTS 0x0204 + +#define GLUT_GEOMETRY_VISUALIZE_NORMALS 0x0205 + +#define GLUT_STROKE_FONT_DRAW_JOIN_DOTS 0x0206 /* Draw dots between line segments of stroke fonts? */ + +#define GLUT_ALLOW_NEGATIVE_WINDOW_POSITION 0x0207 /* GLUT doesn't allow negative window positions by default */ + +#define GLUT_WINDOW_SRGB 0x007D + +/* + * New tokens for glutInitDisplayMode. + * Only one GLUT_AUXn bit may be used at a time. + * Value 0x0400 is defined in OpenGLUT. + */ +#define GLUT_AUX 0x1000 + +#define GLUT_AUX1 0x1000 +#define GLUT_AUX2 0x2000 +#define GLUT_AUX3 0x4000 +#define GLUT_AUX4 0x8000 + +/* + * Context-related flags, see fg_state.c + * Set the requested OpenGL version + */ +#define GLUT_INIT_MAJOR_VERSION 0x0200 +#define GLUT_INIT_MINOR_VERSION 0x0201 +#define GLUT_INIT_FLAGS 0x0202 +#define GLUT_INIT_PROFILE 0x0203 + +/* + * Flags for glutInitContextFlags, see fg_init.c + */ +#define GLUT_DEBUG 0x0001 +#define GLUT_FORWARD_COMPATIBLE 0x0002 + + +/* + * Flags for glutInitContextProfile, see fg_init.c + */ +#define GLUT_CORE_PROFILE 0x0001 +#define GLUT_COMPATIBILITY_PROFILE 0x0002 + +/* +* GLUT API Extension macro definitions -- Spaceball button definitions +*/ + +#define GLUT_SPACEBALL_BUTTON_A 0x0001 +#define GLUT_SPACEBALL_BUTTON_B 0x0002 +#define GLUT_SPACEBALL_BUTTON_C 0x0004 +#define GLUT_SPACEBALL_BUTTON_D 0x0008 +#define GLUT_SPACEBALL_BUTTON_E 0x0010 + +/* + * Process loop function, see fg_main.c + */ +FGAPI void FGAPIENTRY glutMainLoopEvent( void ); +FGAPI void FGAPIENTRY glutLeaveMainLoop( void ); +FGAPI void FGAPIENTRY glutExit ( void ); + +/* + * Window management functions, see fg_window.c + */ +FGAPI void FGAPIENTRY glutFullScreenToggle( void ); +FGAPI void FGAPIENTRY glutLeaveFullScreen( void ); + +/* + * Menu functions + */ +FGAPI void FGAPIENTRY glutSetMenuFont( int menuID, void* font ); + +/* + * Window-specific callback functions, see fg_callbacks.c + */ +FGAPI void FGAPIENTRY glutMouseWheelFunc( void (* callback)( int, int, int, int ) ); +FGAPI void FGAPIENTRY glutPositionFunc( void (* callback)( int, int ) ); +FGAPI void FGAPIENTRY glutCloseFunc( void (* callback)( void ) ); +FGAPI void FGAPIENTRY glutWMCloseFunc( void (* callback)( void ) ); +/* And also a destruction callback for menus */ +FGAPI void FGAPIENTRY glutMenuDestroyFunc( void (* callback)( void ) ); + +/* + * State setting and retrieval functions, see fg_state.c + */ +FGAPI void FGAPIENTRY glutSetOption ( GLenum option_flag, int value ); +FGAPI int * FGAPIENTRY glutGetModeValues(GLenum mode, int * size); +/* A.Donev: User-data manipulation */ +FGAPI void* FGAPIENTRY glutGetWindowData( void ); +FGAPI void FGAPIENTRY glutSetWindowData(void* data); +FGAPI void* FGAPIENTRY glutGetMenuData( void ); +FGAPI void FGAPIENTRY glutSetMenuData(void* data); + +/* + * Font stuff, see fg_font.c + */ +FGAPI int FGAPIENTRY glutBitmapHeight( void* font ); +FGAPI GLfloat FGAPIENTRY glutStrokeHeight( void* font ); +FGAPI void FGAPIENTRY glutBitmapString( void* font, const unsigned char *string ); +FGAPI void FGAPIENTRY glutStrokeString( void* font, const unsigned char *string ); + +/* + * Geometry functions, see fg_geometry.c + */ +FGAPI void FGAPIENTRY glutWireRhombicDodecahedron( void ); +FGAPI void FGAPIENTRY glutSolidRhombicDodecahedron( void ); +FGAPI void FGAPIENTRY glutWireSierpinskiSponge ( int num_levels, double offset[3], double scale ); +FGAPI void FGAPIENTRY glutSolidSierpinskiSponge ( int num_levels, double offset[3], double scale ); +FGAPI void FGAPIENTRY glutWireCylinder( double radius, double height, GLint slices, GLint stacks); +FGAPI void FGAPIENTRY glutSolidCylinder( double radius, double height, GLint slices, GLint stacks); + +/* + * Rest of functions for rendering Newell's teaset, found in fg_teapot.c + * NB: front facing polygons have clockwise winding, not counter clockwise + */ +FGAPI void FGAPIENTRY glutWireTeacup( double size ); +FGAPI void FGAPIENTRY glutSolidTeacup( double size ); +FGAPI void FGAPIENTRY glutWireTeaspoon( double size ); +FGAPI void FGAPIENTRY glutSolidTeaspoon( double size ); + +/* + * Extension functions, see fg_ext.c + */ +typedef void (*GLUTproc)(); +FGAPI GLUTproc FGAPIENTRY glutGetProcAddress( const char *procName ); + +/* + * Multi-touch/multi-pointer extensions + */ + +#define GLUT_HAS_MULTI 1 + +/* TODO: add device_id parameter, + cf. http://sourceforge.net/mailarchive/forum.php?thread_name=20120518071314.GA28061%40perso.beuc.net&forum_name=freeglut-developer */ +FGAPI void FGAPIENTRY glutMultiEntryFunc( void (* callback)( int, int ) ); +FGAPI void FGAPIENTRY glutMultiButtonFunc( void (* callback)( int, int, int, int, int ) ); +FGAPI void FGAPIENTRY glutMultiMotionFunc( void (* callback)( int, int, int ) ); +FGAPI void FGAPIENTRY glutMultiPassiveFunc( void (* callback)( int, int, int ) ); + +/* + * Joystick functions, see fg_joystick.c + */ +/* USE OF THESE FUNCTIONS IS DEPRECATED !!!!! */ +/* If you have a serious need for these functions in your application, please either + * contact the "freeglut" developer community at freeglut-developer@lists.sourceforge.net, + * switch to the OpenGLUT library, or else port your joystick functionality over to PLIB's + * "js" library. + */ +int glutJoystickGetNumAxes( int ident ); +int glutJoystickGetNumButtons( int ident ); +int glutJoystickNotWorking( int ident ); +float glutJoystickGetDeadBand( int ident, int axis ); +void glutJoystickSetDeadBand( int ident, int axis, float db ); +float glutJoystickGetSaturation( int ident, int axis ); +void glutJoystickSetSaturation( int ident, int axis, float st ); +void glutJoystickSetMinRange( int ident, float *axes ); +void glutJoystickSetMaxRange( int ident, float *axes ); +void glutJoystickSetCenter( int ident, float *axes ); +void glutJoystickGetMinRange( int ident, float *axes ); +void glutJoystickGetMaxRange( int ident, float *axes ); +void glutJoystickGetCenter( int ident, float *axes ); + +/* + * Initialization functions, see fg_init.c + */ +/* to get the typedef for va_list */ +#include +FGAPI void FGAPIENTRY glutInitContextVersion( int majorVersion, int minorVersion ); +FGAPI void FGAPIENTRY glutInitContextFlags( int flags ); +FGAPI void FGAPIENTRY glutInitContextProfile( int profile ); +FGAPI void FGAPIENTRY glutInitErrorFunc( void (* callback)( const char *fmt, va_list ap ) ); +FGAPI void FGAPIENTRY glutInitWarningFunc( void (* callback)( const char *fmt, va_list ap ) ); + +/* OpenGL >= 2.0 support */ +FGAPI void FGAPIENTRY glutSetVertexAttribCoord3( GLint attrib ); +FGAPI void FGAPIENTRY glutSetVertexAttribNormal( GLint attrib ); +FGAPI void FGAPIENTRY glutSetVertexAttribTexCoord2( GLint attrib ); + +/* Mobile platforms lifecycle */ +FGAPI void FGAPIENTRY glutInitContextFunc( void (* callback)( void ) ); +FGAPI void FGAPIENTRY glutAppStatusFunc( void (* callback)( int ) ); +/* state flags that can be passed to callback set by glutAppStatusFunc */ +#define GLUT_APPSTATUS_PAUSE 0x0001 +#define GLUT_APPSTATUS_RESUME 0x0002 + +/* + * GLUT API macro definitions -- the display mode definitions + */ +#define GLUT_CAPTIONLESS 0x0400 +#define GLUT_BORDERLESS 0x0800 +#define GLUT_SRGB 0x1000 + +/* User-argument callbacks and implementation */ +#include "freeglut_ucall.h" + +#ifdef __cplusplus + } +#endif + +/*** END OF FILE ***/ + +#endif /* __FREEGLUT_EXT_H__ */ diff --git a/dependencies/freeglut/include/GL/freeglut_std.h b/dependencies/freeglut/include/GL/freeglut_std.h new file mode 100644 index 0000000..aa4795a --- /dev/null +++ b/dependencies/freeglut/include/GL/freeglut_std.h @@ -0,0 +1,654 @@ +#ifndef __FREEGLUT_STD_H__ +#define __FREEGLUT_STD_H__ + +/* + * freeglut_std.h + * + * The GLUT-compatible part of the freeglut library include file + * + * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved. + * Written by Pawel W. Olszta, + * Creation date: Thu Dec 2 1999 + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifdef __cplusplus + extern "C" { +#endif + +/* + * Under windows, we have to differentiate between static and dynamic libraries + */ +#ifdef _WIN32 +/* #pragma may not be supported by some compilers. + * Discussion by FreeGLUT developers suggests that + * Visual C++ specific code involving pragmas may + * need to move to a separate header. 24th Dec 2003 + */ + +/* Define FREEGLUT_LIB_PRAGMAS to 1 to include library + * pragmas or to 0 to exclude library pragmas. + * The default behavior depends on the compiler/platform. + */ +# ifndef FREEGLUT_LIB_PRAGMAS +# if ( defined(_MSC_VER) || defined(__WATCOMC__) ) && !defined(_WIN32_WCE) +# define FREEGLUT_LIB_PRAGMAS 1 +# else +# define FREEGLUT_LIB_PRAGMAS 0 +# endif +# endif + +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN 1 +# endif +# ifndef NOMINMAX +# define NOMINMAX +# endif +# include + +/* Windows static library */ +# ifdef FREEGLUT_STATIC + +# define FGAPI +# define FGAPIENTRY + + /* Link with Win32 static freeglut lib */ +# if FREEGLUT_LIB_PRAGMAS +# ifdef NDEBUG +# pragma comment (lib, "freeglut_static.lib") +# else +# pragma comment (lib, "freeglut_staticd.lib") +# endif +# endif + +/* Windows shared library (DLL) */ +# else + +# define FGAPIENTRY __stdcall +# if defined(FREEGLUT_EXPORTS) +# define FGAPI __declspec(dllexport) +# else +# define FGAPI __declspec(dllimport) + + /* Link with Win32 shared freeglut lib */ +# if FREEGLUT_LIB_PRAGMAS +# ifdef NDEBUG +# pragma comment (lib, "freeglut.lib") +# else +# pragma comment (lib, "freeglutd.lib") +# endif +# endif + +# endif + +# endif + +/* Drag in other Windows libraries as required by FreeGLUT */ +# if FREEGLUT_LIB_PRAGMAS +# pragma comment (lib, "glu32.lib") /* link OpenGL Utility lib */ +# pragma comment (lib, "opengl32.lib") /* link Microsoft OpenGL lib */ +# pragma comment (lib, "gdi32.lib") /* link Windows GDI lib */ +# pragma comment (lib, "winmm.lib") /* link Windows MultiMedia lib */ +# pragma comment (lib, "user32.lib") /* link Windows user lib */ +# endif + +#else + +/* Non-Windows definition of FGAPI and FGAPIENTRY */ +# define FGAPI +# define FGAPIENTRY + +#endif + +/* + * The freeglut and GLUT API versions + */ +#define FREEGLUT 1 +#define GLUT_API_VERSION 4 +#define GLUT_XLIB_IMPLEMENTATION 13 +/* Deprecated: + cf. http://sourceforge.net/mailarchive/forum.php?thread_name=CABcAi1hw7cr4xtigckaGXB5X8wddLfMcbA_rZ3NAuwMrX_zmsw%40mail.gmail.com&forum_name=freeglut-developer */ +#define FREEGLUT_VERSION_2_0 1 + +/* + * Always include OpenGL and GLU headers + */ +/* Note: FREEGLUT_GLES is only used to cleanly bootstrap headers + inclusion here; use GLES constants directly + (e.g. GL_ES_VERSION_2_0) for all other needs */ +#ifdef FREEGLUT_GLES +# include +# include +# include +#elif __APPLE__ +# include +# include +#else +# include +# include +#endif + +/* + * GLUT API macro definitions -- the special key codes: + */ +#define GLUT_KEY_F1 0x0001 +#define GLUT_KEY_F2 0x0002 +#define GLUT_KEY_F3 0x0003 +#define GLUT_KEY_F4 0x0004 +#define GLUT_KEY_F5 0x0005 +#define GLUT_KEY_F6 0x0006 +#define GLUT_KEY_F7 0x0007 +#define GLUT_KEY_F8 0x0008 +#define GLUT_KEY_F9 0x0009 +#define GLUT_KEY_F10 0x000A +#define GLUT_KEY_F11 0x000B +#define GLUT_KEY_F12 0x000C +#define GLUT_KEY_LEFT 0x0064 +#define GLUT_KEY_UP 0x0065 +#define GLUT_KEY_RIGHT 0x0066 +#define GLUT_KEY_DOWN 0x0067 +#define GLUT_KEY_PAGE_UP 0x0068 +#define GLUT_KEY_PAGE_DOWN 0x0069 +#define GLUT_KEY_HOME 0x006A +#define GLUT_KEY_END 0x006B +#define GLUT_KEY_INSERT 0x006C + +/* + * GLUT API macro definitions -- mouse state definitions + */ +#define GLUT_LEFT_BUTTON 0x0000 +#define GLUT_MIDDLE_BUTTON 0x0001 +#define GLUT_RIGHT_BUTTON 0x0002 +#define GLUT_DOWN 0x0000 +#define GLUT_UP 0x0001 +#define GLUT_LEFT 0x0000 +#define GLUT_ENTERED 0x0001 + +/* + * GLUT API macro definitions -- the display mode definitions + */ +#define GLUT_RGB 0x0000 +#define GLUT_RGBA 0x0000 +#define GLUT_INDEX 0x0001 +#define GLUT_SINGLE 0x0000 +#define GLUT_DOUBLE 0x0002 +#define GLUT_ACCUM 0x0004 +#define GLUT_ALPHA 0x0008 +#define GLUT_DEPTH 0x0010 +#define GLUT_STENCIL 0x0020 +#define GLUT_MULTISAMPLE 0x0080 +#define GLUT_STEREO 0x0100 +#define GLUT_LUMINANCE 0x0200 + +/* + * GLUT API macro definitions -- windows and menu related definitions + */ +#define GLUT_MENU_NOT_IN_USE 0x0000 +#define GLUT_MENU_IN_USE 0x0001 +#define GLUT_NOT_VISIBLE 0x0000 +#define GLUT_VISIBLE 0x0001 +#define GLUT_HIDDEN 0x0000 +#define GLUT_FULLY_RETAINED 0x0001 +#define GLUT_PARTIALLY_RETAINED 0x0002 +#define GLUT_FULLY_COVERED 0x0003 + +/* + * GLUT API macro definitions -- fonts definitions + * + * Steve Baker suggested to make it binary compatible with GLUT: + */ +#if defined(_MSC_VER) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__WATCOMC__) +# define GLUT_STROKE_ROMAN ((void *)0x0000) +# define GLUT_STROKE_MONO_ROMAN ((void *)0x0001) +# define GLUT_BITMAP_9_BY_15 ((void *)0x0002) +# define GLUT_BITMAP_8_BY_13 ((void *)0x0003) +# define GLUT_BITMAP_TIMES_ROMAN_10 ((void *)0x0004) +# define GLUT_BITMAP_TIMES_ROMAN_24 ((void *)0x0005) +# define GLUT_BITMAP_HELVETICA_10 ((void *)0x0006) +# define GLUT_BITMAP_HELVETICA_12 ((void *)0x0007) +# define GLUT_BITMAP_HELVETICA_18 ((void *)0x0008) +#else + /* + * I don't really know if it's a good idea... But here it goes: + */ + extern void* glutStrokeRoman; + extern void* glutStrokeMonoRoman; + extern void* glutBitmap9By15; + extern void* glutBitmap8By13; + extern void* glutBitmapTimesRoman10; + extern void* glutBitmapTimesRoman24; + extern void* glutBitmapHelvetica10; + extern void* glutBitmapHelvetica12; + extern void* glutBitmapHelvetica18; + + /* + * Those pointers will be used by following definitions: + */ +# define GLUT_STROKE_ROMAN ((void *) &glutStrokeRoman) +# define GLUT_STROKE_MONO_ROMAN ((void *) &glutStrokeMonoRoman) +# define GLUT_BITMAP_9_BY_15 ((void *) &glutBitmap9By15) +# define GLUT_BITMAP_8_BY_13 ((void *) &glutBitmap8By13) +# define GLUT_BITMAP_TIMES_ROMAN_10 ((void *) &glutBitmapTimesRoman10) +# define GLUT_BITMAP_TIMES_ROMAN_24 ((void *) &glutBitmapTimesRoman24) +# define GLUT_BITMAP_HELVETICA_10 ((void *) &glutBitmapHelvetica10) +# define GLUT_BITMAP_HELVETICA_12 ((void *) &glutBitmapHelvetica12) +# define GLUT_BITMAP_HELVETICA_18 ((void *) &glutBitmapHelvetica18) +#endif + +/* + * GLUT API macro definitions -- the glutGet parameters + */ +#define GLUT_WINDOW_X 0x0064 +#define GLUT_WINDOW_Y 0x0065 +#define GLUT_WINDOW_WIDTH 0x0066 +#define GLUT_WINDOW_HEIGHT 0x0067 +#define GLUT_WINDOW_BUFFER_SIZE 0x0068 +#define GLUT_WINDOW_STENCIL_SIZE 0x0069 +#define GLUT_WINDOW_DEPTH_SIZE 0x006A +#define GLUT_WINDOW_RED_SIZE 0x006B +#define GLUT_WINDOW_GREEN_SIZE 0x006C +#define GLUT_WINDOW_BLUE_SIZE 0x006D +#define GLUT_WINDOW_ALPHA_SIZE 0x006E +#define GLUT_WINDOW_ACCUM_RED_SIZE 0x006F +#define GLUT_WINDOW_ACCUM_GREEN_SIZE 0x0070 +#define GLUT_WINDOW_ACCUM_BLUE_SIZE 0x0071 +#define GLUT_WINDOW_ACCUM_ALPHA_SIZE 0x0072 +#define GLUT_WINDOW_DOUBLEBUFFER 0x0073 +#define GLUT_WINDOW_RGBA 0x0074 +#define GLUT_WINDOW_PARENT 0x0075 +#define GLUT_WINDOW_NUM_CHILDREN 0x0076 +#define GLUT_WINDOW_COLORMAP_SIZE 0x0077 +#define GLUT_WINDOW_NUM_SAMPLES 0x0078 +#define GLUT_WINDOW_STEREO 0x0079 +#define GLUT_WINDOW_CURSOR 0x007A + +#define GLUT_SCREEN_WIDTH 0x00C8 +#define GLUT_SCREEN_HEIGHT 0x00C9 +#define GLUT_SCREEN_WIDTH_MM 0x00CA +#define GLUT_SCREEN_HEIGHT_MM 0x00CB +#define GLUT_MENU_NUM_ITEMS 0x012C +#define GLUT_DISPLAY_MODE_POSSIBLE 0x0190 +#define GLUT_INIT_WINDOW_X 0x01F4 +#define GLUT_INIT_WINDOW_Y 0x01F5 +#define GLUT_INIT_WINDOW_WIDTH 0x01F6 +#define GLUT_INIT_WINDOW_HEIGHT 0x01F7 +#define GLUT_INIT_DISPLAY_MODE 0x01F8 +#define GLUT_ELAPSED_TIME 0x02BC +#define GLUT_WINDOW_FORMAT_ID 0x007B + +/* + * GLUT API macro definitions -- the glutDeviceGet parameters + */ +#define GLUT_HAS_KEYBOARD 0x0258 +#define GLUT_HAS_MOUSE 0x0259 +#define GLUT_HAS_SPACEBALL 0x025A +#define GLUT_HAS_DIAL_AND_BUTTON_BOX 0x025B +#define GLUT_HAS_TABLET 0x025C +#define GLUT_NUM_MOUSE_BUTTONS 0x025D +#define GLUT_NUM_SPACEBALL_BUTTONS 0x025E +#define GLUT_NUM_BUTTON_BOX_BUTTONS 0x025F +#define GLUT_NUM_DIALS 0x0260 +#define GLUT_NUM_TABLET_BUTTONS 0x0261 +#define GLUT_DEVICE_IGNORE_KEY_REPEAT 0x0262 +#define GLUT_DEVICE_KEY_REPEAT 0x0263 +#define GLUT_HAS_JOYSTICK 0x0264 +#define GLUT_OWNS_JOYSTICK 0x0265 +#define GLUT_JOYSTICK_BUTTONS 0x0266 +#define GLUT_JOYSTICK_AXES 0x0267 +#define GLUT_JOYSTICK_POLL_RATE 0x0268 + +/* + * GLUT API macro definitions -- the glutLayerGet parameters + */ +#define GLUT_OVERLAY_POSSIBLE 0x0320 +#define GLUT_LAYER_IN_USE 0x0321 +#define GLUT_HAS_OVERLAY 0x0322 +#define GLUT_TRANSPARENT_INDEX 0x0323 +#define GLUT_NORMAL_DAMAGED 0x0324 +#define GLUT_OVERLAY_DAMAGED 0x0325 + +/* + * GLUT API macro definitions -- the glutVideoResizeGet parameters + */ +#define GLUT_VIDEO_RESIZE_POSSIBLE 0x0384 +#define GLUT_VIDEO_RESIZE_IN_USE 0x0385 +#define GLUT_VIDEO_RESIZE_X_DELTA 0x0386 +#define GLUT_VIDEO_RESIZE_Y_DELTA 0x0387 +#define GLUT_VIDEO_RESIZE_WIDTH_DELTA 0x0388 +#define GLUT_VIDEO_RESIZE_HEIGHT_DELTA 0x0389 +#define GLUT_VIDEO_RESIZE_X 0x038A +#define GLUT_VIDEO_RESIZE_Y 0x038B +#define GLUT_VIDEO_RESIZE_WIDTH 0x038C +#define GLUT_VIDEO_RESIZE_HEIGHT 0x038D + +/* + * GLUT API macro definitions -- the glutUseLayer parameters + */ +#define GLUT_NORMAL 0x0000 +#define GLUT_OVERLAY 0x0001 + +/* + * GLUT API macro definitions -- the glutGetModifiers parameters + */ +#define GLUT_ACTIVE_SHIFT 0x0001 +#define GLUT_ACTIVE_CTRL 0x0002 +#define GLUT_ACTIVE_ALT 0x0004 + +/* + * GLUT API macro definitions -- the glutSetCursor parameters + */ +#define GLUT_CURSOR_RIGHT_ARROW 0x0000 +#define GLUT_CURSOR_LEFT_ARROW 0x0001 +#define GLUT_CURSOR_INFO 0x0002 +#define GLUT_CURSOR_DESTROY 0x0003 +#define GLUT_CURSOR_HELP 0x0004 +#define GLUT_CURSOR_CYCLE 0x0005 +#define GLUT_CURSOR_SPRAY 0x0006 +#define GLUT_CURSOR_WAIT 0x0007 +#define GLUT_CURSOR_TEXT 0x0008 +#define GLUT_CURSOR_CROSSHAIR 0x0009 +#define GLUT_CURSOR_UP_DOWN 0x000A +#define GLUT_CURSOR_LEFT_RIGHT 0x000B +#define GLUT_CURSOR_TOP_SIDE 0x000C +#define GLUT_CURSOR_BOTTOM_SIDE 0x000D +#define GLUT_CURSOR_LEFT_SIDE 0x000E +#define GLUT_CURSOR_RIGHT_SIDE 0x000F +#define GLUT_CURSOR_TOP_LEFT_CORNER 0x0010 +#define GLUT_CURSOR_TOP_RIGHT_CORNER 0x0011 +#define GLUT_CURSOR_BOTTOM_RIGHT_CORNER 0x0012 +#define GLUT_CURSOR_BOTTOM_LEFT_CORNER 0x0013 +#define GLUT_CURSOR_INHERIT 0x0064 +#define GLUT_CURSOR_NONE 0x0065 +#define GLUT_CURSOR_FULL_CROSSHAIR 0x0066 + +/* + * GLUT API macro definitions -- RGB color component specification definitions + */ +#define GLUT_RED 0x0000 +#define GLUT_GREEN 0x0001 +#define GLUT_BLUE 0x0002 + +/* + * GLUT API macro definitions -- additional keyboard and joystick definitions + */ +#define GLUT_KEY_REPEAT_OFF 0x0000 +#define GLUT_KEY_REPEAT_ON 0x0001 +#define GLUT_KEY_REPEAT_DEFAULT 0x0002 + +#define GLUT_JOYSTICK_BUTTON_A 0x0001 +#define GLUT_JOYSTICK_BUTTON_B 0x0002 +#define GLUT_JOYSTICK_BUTTON_C 0x0004 +#define GLUT_JOYSTICK_BUTTON_D 0x0008 + +/* + * GLUT API macro definitions -- game mode definitions + */ +#define GLUT_GAME_MODE_ACTIVE 0x0000 +#define GLUT_GAME_MODE_POSSIBLE 0x0001 +#define GLUT_GAME_MODE_WIDTH 0x0002 +#define GLUT_GAME_MODE_HEIGHT 0x0003 +#define GLUT_GAME_MODE_PIXEL_DEPTH 0x0004 +#define GLUT_GAME_MODE_REFRESH_RATE 0x0005 +#define GLUT_GAME_MODE_DISPLAY_CHANGED 0x0006 + +/* + * Initialization functions, see fglut_init.c + */ +FGAPI void FGAPIENTRY glutInit( int* pargc, char** argv ); +FGAPI void FGAPIENTRY glutInitWindowPosition( int x, int y ); +FGAPI void FGAPIENTRY glutInitWindowSize( int width, int height ); +FGAPI void FGAPIENTRY glutInitDisplayMode( unsigned int displayMode ); +FGAPI void FGAPIENTRY glutInitDisplayString( const char* displayMode ); + +/* + * Process loop function, see fg_main.c + */ +FGAPI void FGAPIENTRY glutMainLoop( void ); + +/* + * Window management functions, see fg_window.c + */ +FGAPI int FGAPIENTRY glutCreateWindow( const char* title ); +FGAPI int FGAPIENTRY glutCreateSubWindow( int window, int x, int y, int width, int height ); +FGAPI void FGAPIENTRY glutDestroyWindow( int window ); +FGAPI void FGAPIENTRY glutSetWindow( int window ); +FGAPI int FGAPIENTRY glutGetWindow( void ); +FGAPI void FGAPIENTRY glutSetWindowTitle( const char* title ); +FGAPI void FGAPIENTRY glutSetIconTitle( const char* title ); +FGAPI void FGAPIENTRY glutReshapeWindow( int width, int height ); +FGAPI void FGAPIENTRY glutFitWindowSizeToDesktop(int width, int height); +FGAPI void FGAPIENTRY glutPositionWindow( int x, int y ); +FGAPI void FGAPIENTRY glutShowWindow( void ); +FGAPI void FGAPIENTRY glutHideWindow( void ); +FGAPI void FGAPIENTRY glutIconifyWindow( void ); +FGAPI void FGAPIENTRY glutPushWindow( void ); +FGAPI void FGAPIENTRY glutPopWindow( void ); +FGAPI void FGAPIENTRY glutFullScreen( void ); + +/* + * Display-related functions, see fg_display.c + */ +FGAPI void FGAPIENTRY glutPostWindowRedisplay( int window ); +FGAPI void FGAPIENTRY glutPostRedisplay( void ); +FGAPI void FGAPIENTRY glutSwapBuffers( void ); + +/* + * Mouse cursor functions, see fg_cursor.c + */ +FGAPI void FGAPIENTRY glutWarpPointer( int x, int y ); +FGAPI void FGAPIENTRY glutSetCursor( int cursor ); + +/* + * Overlay stuff, see fg_overlay.c + */ +FGAPI void FGAPIENTRY glutEstablishOverlay( void ); +FGAPI void FGAPIENTRY glutRemoveOverlay( void ); +FGAPI void FGAPIENTRY glutUseLayer( GLenum layer ); +FGAPI void FGAPIENTRY glutPostOverlayRedisplay( void ); +FGAPI void FGAPIENTRY glutPostWindowOverlayRedisplay( int window ); +FGAPI void FGAPIENTRY glutShowOverlay( void ); +FGAPI void FGAPIENTRY glutHideOverlay( void ); + +/* + * Menu stuff, see fg_menu.c + */ +FGAPI int FGAPIENTRY glutCreateMenu( void (* callback)( int menu ) ); +FGAPI void FGAPIENTRY glutDestroyMenu( int menu ); +FGAPI int FGAPIENTRY glutGetMenu( void ); +FGAPI void FGAPIENTRY glutSetMenu( int menu ); +FGAPI void FGAPIENTRY glutAddMenuEntry( const char* label, int value ); +FGAPI void FGAPIENTRY glutAddSubMenu( const char* label, int subMenu ); +FGAPI void FGAPIENTRY glutChangeToMenuEntry( int item, const char* label, int value ); +FGAPI void FGAPIENTRY glutChangeToSubMenu( int item, const char* label, int value ); +FGAPI void FGAPIENTRY glutRemoveMenuItem( int item ); +FGAPI void FGAPIENTRY glutAttachMenu( int button ); +FGAPI void FGAPIENTRY glutDetachMenu( int button ); + +/* + * Global callback functions, see fg_callbacks.c + */ +FGAPI void FGAPIENTRY glutTimerFunc( unsigned int time, void (* callback)( int ), int value ); +FGAPI void FGAPIENTRY glutIdleFunc( void (* callback)( void ) ); + +/* + * Window-specific callback functions, see fg_callbacks.c + */ +FGAPI void FGAPIENTRY glutKeyboardFunc( void (* callback)( unsigned char, int, int ) ); +FGAPI void FGAPIENTRY glutSpecialFunc( void (* callback)( int, int, int ) ); +FGAPI void FGAPIENTRY glutReshapeFunc( void (* callback)( int, int ) ); +FGAPI void FGAPIENTRY glutVisibilityFunc( void (* callback)( int ) ); +FGAPI void FGAPIENTRY glutDisplayFunc( void (* callback)( void ) ); +FGAPI void FGAPIENTRY glutMouseFunc( void (* callback)( int, int, int, int ) ); +FGAPI void FGAPIENTRY glutMotionFunc( void (* callback)( int, int ) ); +FGAPI void FGAPIENTRY glutPassiveMotionFunc( void (* callback)( int, int ) ); +FGAPI void FGAPIENTRY glutEntryFunc( void (* callback)( int ) ); + +FGAPI void FGAPIENTRY glutKeyboardUpFunc( void (* callback)( unsigned char, int, int ) ); +FGAPI void FGAPIENTRY glutSpecialUpFunc( void (* callback)( int, int, int ) ); +FGAPI void FGAPIENTRY glutJoystickFunc( void (* callback)( unsigned int, int, int, int ), int pollInterval ); +FGAPI void FGAPIENTRY glutMenuStateFunc( void (* callback)( int ) ); +FGAPI void FGAPIENTRY glutMenuStatusFunc( void (* callback)( int, int, int ) ); +FGAPI void FGAPIENTRY glutOverlayDisplayFunc( void (* callback)( void ) ); +FGAPI void FGAPIENTRY glutWindowStatusFunc( void (* callback)( int ) ); + +FGAPI void FGAPIENTRY glutSpaceballMotionFunc( void (* callback)( int, int, int ) ); +FGAPI void FGAPIENTRY glutSpaceballRotateFunc( void (* callback)( int, int, int ) ); +FGAPI void FGAPIENTRY glutSpaceballButtonFunc( void (* callback)( int, int ) ); +FGAPI void FGAPIENTRY glutButtonBoxFunc( void (* callback)( int, int ) ); +FGAPI void FGAPIENTRY glutDialsFunc( void (* callback)( int, int ) ); +FGAPI void FGAPIENTRY glutTabletMotionFunc( void (* callback)( int, int ) ); +FGAPI void FGAPIENTRY glutTabletButtonFunc( void (* callback)( int, int, int, int ) ); + +/* + * State setting and retrieval functions, see fg_state.c + */ +FGAPI int FGAPIENTRY glutGet( GLenum query ); +FGAPI int FGAPIENTRY glutDeviceGet( GLenum query ); +FGAPI int FGAPIENTRY glutGetModifiers( void ); +FGAPI int FGAPIENTRY glutLayerGet( GLenum query ); + +/* + * Font stuff, see fg_font.c + */ +FGAPI void FGAPIENTRY glutBitmapCharacter( void* font, int character ); +FGAPI int FGAPIENTRY glutBitmapWidth( void* font, int character ); +FGAPI void FGAPIENTRY glutStrokeCharacter( void* font, int character ); +FGAPI int FGAPIENTRY glutStrokeWidth( void* font, int character ); +FGAPI GLfloat FGAPIENTRY glutStrokeWidthf( void* font, int character ); /* GLUT 3.8 */ +FGAPI int FGAPIENTRY glutBitmapLength( void* font, const unsigned char* string ); +FGAPI int FGAPIENTRY glutStrokeLength( void* font, const unsigned char* string ); +FGAPI GLfloat FGAPIENTRY glutStrokeLengthf( void* font, const unsigned char *string ); /* GLUT 3.8 */ + +/* + * Geometry functions, see fg_geometry.c + */ + +FGAPI void FGAPIENTRY glutWireCube( double size ); +FGAPI void FGAPIENTRY glutSolidCube( double size ); +FGAPI void FGAPIENTRY glutWireSphere( double radius, GLint slices, GLint stacks ); +FGAPI void FGAPIENTRY glutSolidSphere( double radius, GLint slices, GLint stacks ); +FGAPI void FGAPIENTRY glutWireCone( double base, double height, GLint slices, GLint stacks ); +FGAPI void FGAPIENTRY glutSolidCone( double base, double height, GLint slices, GLint stacks ); +FGAPI void FGAPIENTRY glutWireTorus( double innerRadius, double outerRadius, GLint sides, GLint rings ); +FGAPI void FGAPIENTRY glutSolidTorus( double innerRadius, double outerRadius, GLint sides, GLint rings ); +FGAPI void FGAPIENTRY glutWireDodecahedron( void ); +FGAPI void FGAPIENTRY glutSolidDodecahedron( void ); +FGAPI void FGAPIENTRY glutWireOctahedron( void ); +FGAPI void FGAPIENTRY glutSolidOctahedron( void ); +FGAPI void FGAPIENTRY glutWireTetrahedron( void ); +FGAPI void FGAPIENTRY glutSolidTetrahedron( void ); +FGAPI void FGAPIENTRY glutWireIcosahedron( void ); +FGAPI void FGAPIENTRY glutSolidIcosahedron( void ); + +/* + * Teapot rendering functions, found in fg_teapot.c + * NB: front facing polygons have clockwise winding, not counter clockwise + */ +FGAPI void FGAPIENTRY glutWireTeapot( double size ); +FGAPI void FGAPIENTRY glutSolidTeapot( double size ); + +/* + * Game mode functions, see fg_gamemode.c + */ +FGAPI void FGAPIENTRY glutGameModeString( const char* string ); +FGAPI int FGAPIENTRY glutEnterGameMode( void ); +FGAPI void FGAPIENTRY glutLeaveGameMode( void ); +FGAPI int FGAPIENTRY glutGameModeGet( GLenum query ); + +/* + * Video resize functions, see fg_videoresize.c + */ +FGAPI int FGAPIENTRY glutVideoResizeGet( GLenum query ); +FGAPI void FGAPIENTRY glutSetupVideoResizing( void ); +FGAPI void FGAPIENTRY glutStopVideoResizing( void ); +FGAPI void FGAPIENTRY glutVideoResize( int x, int y, int width, int height ); +FGAPI void FGAPIENTRY glutVideoPan( int x, int y, int width, int height ); + +/* + * Colormap functions, see fg_misc.c + */ +FGAPI void FGAPIENTRY glutSetColor( int color, GLfloat red, GLfloat green, GLfloat blue ); +FGAPI GLfloat FGAPIENTRY glutGetColor( int color, int component ); +FGAPI void FGAPIENTRY glutCopyColormap( int window ); + +/* + * Misc keyboard and joystick functions, see fg_misc.c + */ +FGAPI void FGAPIENTRY glutIgnoreKeyRepeat( int ignore ); +FGAPI void FGAPIENTRY glutSetKeyRepeat( int repeatMode ); +FGAPI void FGAPIENTRY glutForceJoystickFunc( void ); + +/* + * Misc functions, see fg_misc.c + */ +FGAPI int FGAPIENTRY glutExtensionSupported( const char* extension ); +FGAPI void FGAPIENTRY glutReportErrors( void ); + +/* Comment from glut.h of classic GLUT: + + Win32 has an annoying issue where there are multiple C run-time + libraries (CRTs). If the executable is linked with a different CRT + from the GLUT DLL, the GLUT DLL will not share the same CRT static + data seen by the executable. In particular, atexit callbacks registered + in the executable will not be called if GLUT calls its (different) + exit routine). GLUT is typically built with the + "/MD" option (the CRT with multithreading DLL support), but the Visual + C++ linker default is "/ML" (the single threaded CRT). + + One workaround to this issue is requiring users to always link with + the same CRT as GLUT is compiled with. That requires users supply a + non-standard option. GLUT 3.7 has its own built-in workaround where + the executable's "exit" function pointer is covertly passed to GLUT. + GLUT then calls the executable's exit function pointer to ensure that + any "atexit" calls registered by the application are called if GLUT + needs to exit. + + Note that the __glut*WithExit routines should NEVER be called directly. + To avoid the atexit workaround, #define GLUT_DISABLE_ATEXIT_HACK. */ + +/* to get the prototype for exit() */ +#include + +#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK) && !defined(__WATCOMC__) +FGAPI void FGAPIENTRY __glutInitWithExit(int *argcp, char **argv, void (__cdecl *exitfunc)(int)); +FGAPI int FGAPIENTRY __glutCreateWindowWithExit(const char *title, void (__cdecl *exitfunc)(int)); +FGAPI int FGAPIENTRY __glutCreateMenuWithExit(void (* func)(int), void (__cdecl *exitfunc)(int)); +#ifndef FREEGLUT_BUILDING_LIB +#if defined(__GNUC__) +#define FGUNUSED __attribute__((unused)) +#else +#define FGUNUSED +#endif +static void FGAPIENTRY FGUNUSED glutInit_ATEXIT_HACK(int *argcp, char **argv) { __glutInitWithExit(argcp, argv, exit); } +#define glutInit glutInit_ATEXIT_HACK +static int FGAPIENTRY FGUNUSED glutCreateWindow_ATEXIT_HACK(const char *title) { return __glutCreateWindowWithExit(title, exit); } +#define glutCreateWindow glutCreateWindow_ATEXIT_HACK +static int FGAPIENTRY FGUNUSED glutCreateMenu_ATEXIT_HACK(void (* func)(int)) { return __glutCreateMenuWithExit(func, exit); } +#define glutCreateMenu glutCreateMenu_ATEXIT_HACK +#endif +#endif + +#ifdef __cplusplus + } +#endif + +/*** END OF FILE ***/ + +#endif /* __FREEGLUT_STD_H__ */ + diff --git a/dependencies/freeglut/include/GL/freeglut_ucall.h b/dependencies/freeglut/include/GL/freeglut_ucall.h new file mode 100644 index 0000000..1ef2ae7 --- /dev/null +++ b/dependencies/freeglut/include/GL/freeglut_ucall.h @@ -0,0 +1,113 @@ +#ifndef __FREEGLUT_UCALL_H__ +#define __FREEGLUT_UCALL_H__ + +/* + * freeglut_ucall.h + * + * Callbacks with user data arguments. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifdef __cplusplus + extern "C" { +#endif + +/* + * Menu stuff, see fg_menu.c + */ +FGAPI int FGAPIENTRY glutCreateMenuUcall( void (* callback)( int menu, void* user_data ), void* user_data ); + +/* + * Global callback functions, see fg_callbacks.c + */ +FGAPI void FGAPIENTRY glutTimerFuncUcall( unsigned int time, void (* callback)( int, void* ), int value, void* user_data ); +FGAPI void FGAPIENTRY glutIdleFuncUcall( void (* callback)( void* ), void* user_data ); + +/* + * Window-specific callback functions, see fg_callbacks.c + */ +FGAPI void FGAPIENTRY glutKeyboardFuncUcall( void (* callback)( unsigned char, int, int, void* ), void* user_data ); +FGAPI void FGAPIENTRY glutSpecialFuncUcall( void (* callback)( int, int, int, void* ), void* user_data ); +FGAPI void FGAPIENTRY glutReshapeFuncUcall( void (* callback)( int, int, void* ), void* user_data ); +FGAPI void FGAPIENTRY glutVisibilityFuncUcall( void (* callback)( int, void* ), void* user_data ); +FGAPI void FGAPIENTRY glutDisplayFuncUcall( void (* callback)( void* ), void* user_data ); +FGAPI void FGAPIENTRY glutMouseFuncUcall( void (* callback)( int, int, int, int, void* ), void* user_data ); +FGAPI void FGAPIENTRY glutMotionFuncUcall( void (* callback)( int, int, void* ), void* user_data ); +FGAPI void FGAPIENTRY glutPassiveMotionFuncUcall( void (* callback)( int, int, void* ), void* user_data ); +FGAPI void FGAPIENTRY glutEntryFuncUcall( void (* callback)( int, void* ), void* user_data ); + +FGAPI void FGAPIENTRY glutKeyboardUpFuncUcall( void (* callback)( unsigned char, int, int, void* ), void* user_data ); +FGAPI void FGAPIENTRY glutSpecialUpFuncUcall( void (* callback)( int, int, int, void* ), void* user_data ); +FGAPI void FGAPIENTRY glutJoystickFuncUcall( void (* callback)( unsigned int, int, int, int, void* ), int pollInterval, void* user_data ); +FGAPI void FGAPIENTRY glutMenuStatusFuncUcall( void (* callback)( int, int, int, void* ), void* user_data ); +FGAPI void FGAPIENTRY glutOverlayDisplayFuncUcall( void (* callback)( void* ), void* user_data ); +FGAPI void FGAPIENTRY glutWindowStatusFuncUcall( void (* callback)( int, void* ), void* user_data ); + +FGAPI void FGAPIENTRY glutSpaceballMotionFuncUcall( void (* callback)( int, int, int, void* ), void* user_data ); +FGAPI void FGAPIENTRY glutSpaceballRotateFuncUcall( void (* callback)( int, int, int, void* ), void* user_data ); +FGAPI void FGAPIENTRY glutSpaceballButtonFuncUcall( void (* callback)( int, int, void* ), void* user_data ); +FGAPI void FGAPIENTRY glutButtonBoxFuncUcall( void (* callback)( int, int, void* ), void* user_data ); +FGAPI void FGAPIENTRY glutDialsFuncUcall( void (* callback)( int, int, void* ), void* user_data ); +FGAPI void FGAPIENTRY glutTabletMotionFuncUcall( void (* callback)( int, int, void* ), void* user_data ); +FGAPI void FGAPIENTRY glutTabletButtonFuncUcall( void (* callback)( int, int, int, int, void* ), void* user_data ); + +FGAPI void FGAPIENTRY glutMouseWheelFuncUcall( void (* callback)( int, int, int, int, void* ), void* user_data ); +FGAPI void FGAPIENTRY glutPositionFuncUcall( void (* callback)( int, int, void* ), void* user_data ); +FGAPI void FGAPIENTRY glutCloseFuncUcall( void (* callback)( void* ), void* user_data ); +FGAPI void FGAPIENTRY glutWMCloseFuncUcall( void (* callback)( void* ), void* user_data ); +FGAPI void FGAPIENTRY glutMenuDestroyFuncUcall( void (* callback)( void* ), void* user_data ); + +/* + * Multi-touch/multi-pointer extensions + */ +FGAPI void FGAPIENTRY glutMultiEntryFuncUcall( void (* callback)( int, int, void* ), void* user_data ); +FGAPI void FGAPIENTRY glutMultiButtonFuncUcall( void (* callback)( int, int, int, int, int, void* ), void* user_data ); +FGAPI void FGAPIENTRY glutMultiMotionFuncUcall( void (* callback)( int, int, int, void* ), void* user_data ); +FGAPI void FGAPIENTRY glutMultiPassiveFuncUcall( void (* callback)( int, int, int, void* ), void* user_data ); + +/* + * Initialization functions, see fg_init.c + */ +#include +FGAPI void FGAPIENTRY glutInitErrorFuncUcall( void (* callback)( const char *fmt, va_list ap, void* user_data ), void* user_data ); +FGAPI void FGAPIENTRY glutInitWarningFuncUcall( void (* callback)( const char *fmt, va_list ap, void* user_data ), void* user_data ); + +/* Mobile platforms lifecycle */ +FGAPI void FGAPIENTRY glutInitContextFuncUcall( void (* callback)( void* ), void* user_data ); +FGAPI void FGAPIENTRY glutAppStatusFuncUcall( void (* callback)( int, void* ), void* user_data ); + +/* + * Continued "hack" from GLUT applied to Ucall functions. + * For more info, see bottom of freeglut_std.h + */ + +/* to get the prototype for exit() */ +#include + +#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK) && !defined(__WATCOMC__) +FGAPI int FGAPIENTRY __glutCreateMenuUcallWithExit(void(*func)(int, void*), void(__cdecl *exitfunc)(int), void* user_data); +#ifndef FREEGLUT_BUILDING_LIB +#if defined(__GNUC__) +#define FGUNUSED __attribute__((unused)) +#else +#define FGUNUSED +#endif +static int FGAPIENTRY FGUNUSED glutCreateMenuUcall_ATEXIT_HACK(void(*func)(int, void*), void* user_data) { return __glutCreateMenuUcallWithExit(func, exit, user_data); } +#define glutCreateMenuUcall glutCreateMenuUcall_ATEXIT_HACK +#endif +#endif + +#ifdef __cplusplus + } +#endif + +/*** END OF FILE ***/ + +#endif /* __FREEGLUT_UCALL_H__ */ + diff --git a/dependencies/freeglut/include/GL/glut.h b/dependencies/freeglut/include/GL/glut.h new file mode 100644 index 0000000..6191f77 --- /dev/null +++ b/dependencies/freeglut/include/GL/glut.h @@ -0,0 +1,21 @@ +#ifndef __GLUT_H__ +#define __GLUT_H__ + +/* + * glut.h + * + * The freeglut library include file + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "freeglut_std.h" + +/*** END OF FILE ***/ + +#endif /* __GLUT_H__ */ diff --git a/dependencies/freeglut/lib/freeglut.exp b/dependencies/freeglut/lib/freeglut.exp new file mode 100644 index 0000000000000000000000000000000000000000..e8c01a8770c7a0dbf80f687b3d5323169f426cb3 GIT binary patch literal 27528 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 literal 0 HcmV?d00001 diff --git a/dependencies/freeglut/lib/freeglut.lib b/dependencies/freeglut/lib/freeglut.lib new file mode 100644 index 0000000000000000000000000000000000000000..1756a009fb79d38191a0cb920688509395122233 GIT binary patch literal 45658 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 RUi?+?y5Jg#=bCF<|38XiLrDMt literal 0 HcmV?d00001 diff --git a/dependencies/freeglut/lib/freeglutd.exp b/dependencies/freeglut/lib/freeglutd.exp new file mode 100644 index 0000000000000000000000000000000000000000..670dec4e75883c84e29e88cfd15503b9c2e6bacd GIT binary patch literal 27533 zcmeI)eSB2anFsJkg9?gB6af_#6%_Rb;l+I9{O?-#zui61-2>e{(A@*wJ@C)( zfy3xxXy47!qL(pA(%SJO3g zEzP1BHB$@j$q8zu+0;f!x{l^hisn)~r71(#QHG8^ZKe0=2lN4LqwVxV`jB=|Yc`RXo$AQPN5)ery7pQwkIN=v`9y7^ zy<=)iER~v`%(sp2Oy;dGp<>OeUSpC*r~r_`u^MvLU$u`vu!NC!bdRIU${GNnDoh%H@+S zbG!vl=t!j+T5wjhtLeRJV|w=Nlv-7Hz1=Qx>)H|Ig%Ww$i83>w*XvHXil6&={ke{= zm=;TQByyT0Ta$^b2X)zW3(lQvBIl8|-!KnV^X6Kej3@N&;<`4$q?UAhvb9T>c*;L2 zCpi^=A55Cvp3WvNPjuBMGPp>{dh*Hb6~?8pV>|N`QnA@;4LRzfdoCNM&E9W}Ep1IY z{jIg1hR(oF_Lk=yT;5T{O&!zr2J852Hl6i$b3lSCFg=!S$Auu!R5PQo99(tjTr#h( zmg-SH=44H+qf7^XhUnMkbSxY97OjKbY-+}8sK{?x6YIih=A5}TiP${s+`#cI<{rPY zt|GOuWP458IZ+B$#?MQ%tKH6rv~vyd*2ge^g*d=hcK;xAMZ4AqNt-y$o$N2ftLjZU zw99I3+Nl{0rne;$DQ!Mz<&oC3Bb8683%%bqXhvi2swF*H%WXX}n$~(N@3-~MXj~V| z<&wPboSUJ{Swp|MbFypKT$#Pi{v^(P{DsRDmTD8EGujoyJ@&no(?Op|og%?0^UjLZ zC*ta^p_ZM_1Ab3p$@JS#mKKkE3F%! zlJTxSh~gTFYw(yno@biJrPJAXsoPGEOy(zxRG~;?qEjXdyTRaAshYkzN&=hHk(q{D zO&Z;jT;M)cHMFJY>pjhNeb(tzGLBn?x@0y;t)p45b)|5%b)M=ZUWGemOROys&pNjR zQS@!j!YM6z%j(eGRX zvNw_M`b3EqJOp|td_%^oTaC1Pl+(<-MK$1gtiZ8?N7Olq;DbDF=rHX;UV-)?uLJ&0 z!(){ajJ<Y# zTk{)C%_Za}E?Xo0R2Nf^KYpjFV^OQScl>F|T(UWtO6L8i@gVujnO^Jt4I+!u>RO{% zHdB{Q^0T{Yq#mt?9KcqjODuDIv7RP@uE!8$J)&6AtWIJcP&b!v00 z;F&D}|HS61c3wMG_q2AZ{#mUccv6eWIgR%mgm)i=Hz0#BK0-=^F+NgCLohx{O8hGS zr&4MvBD^KxDMn!YuTq)?>m{WUjDIGjIP7RCMKInir8d|xQi@{yb19`@ycR`xCqncK zDP>^CN@+C4zm!rQ)<;TJ81Io%C+s*WRb%`sDJ_Kcl~N7H|0boyuwp6IVf6*nh7Uck9dV35mC`C0e^63{ z_cBDklhSI~Kq;j#{!B`1U?)i_gYoaBv=(-2>{KZ&#`xc*v=Mfil$Kz;UrL)`r%P!W#($L3X4qgUEywsjq_hQghLl!d{3j`G zg`Fv-l^7q8(l*#xQd))a7gE{*8zQCE82_h~cEZk<(i)8aETvtrbELEuoERON_${KrL-R7zes5>Y?zcbVEk7peF{5IN*gi$N=o}+!=ixxL!6u27pguq>4!cY& zf;z7ct^%;j#iFR6B$k5Jh>b%1WU&maR%|rtr-fDD#v+h^0_JM{Eu3O0f*;=ZdX`%@oU{&i!9R>tI)jb)r5@ zY(1<=Y$59BiEV&gEw&i-;bI$M*N81ao%dZ4ZGv4ZwhZ<2#Wurci7iKcq}Uc%Ol$?} z7l>_zHH)o8o%eeYZG*LltwKE{wgVOyTa9{HY$q%swg&Z5v0boMv9+l4F;hglVY9{7 zpwC_)GNjI!%||KQNK{^0Bo+< z7St~iI|yqR+lu-qv9Dlhv2CbdEcOj7BenzeOT_rW;(D>2s9!491C|xrh5Bf*p0J$Q zZq&z!^@ioe_MkpitS_uXY%l8L#QMSJiG7NCmDoVoe6f9~j~5#R>lE9M`UJ7Tur9F! zs819d0$U(<5cO)Yp|BgozCwMH*a+A{v2RenOsoWUqZmG1qRYi1utj1$U^QY<*iB+R zVYOnTV2j0i!zPQ3hTSaI7dAz#3U-TFKUkeuHSAWgfv_vYYG6ym2EppZ>R?O72E!V} z8ezAI4S_X^&4Ar5HWW5htO>SEYy@nY*euu`VkNNYVsY4=ViDL3u{PLUVo}(YVky{i zu~D#@Vj0-oVxwVKiREGUh*iOw#5!U3idDm|7F!5gAyxysMr<+cKCwF3wPH(P_lq^c zW{E9>Js>s%786?zTPfBAYZhApdr)i^tVL`k>>;r@EH1VR_OMtREFrcUwn{7oYZY4q zdqgY)n=Q5$_NZ7M)+V+N_Lx{FEGf1gwpwf<>^iXxu*by~!{&%>ggqg)1eOxp1bb3! z8EmfDX4o3B<*;_KEwHD=R>0C?TVYR&t%PO7w!xkeTLrsbYzJ(u*lJi-Y$xnnVryVI zv0bod#n!^|V!L6_iLHZmi0y%`6I&0PC$<;%yx0cVe6deq-xk{l>lE7u`;OQqSeMv- z*m|+eumxfVU@wSmf!!c>5cZ<+OJu+3uM!0r?)fxRV$n-1M27JeE5E7liwuUHlA`(piIE5xc{?}-hB-6vK9+bT8) zcE4C1?0vDpum{8%VLuQX0$V9I1NMQ~P}qZFO|WfZBVZ4S&4O(gD}g;M7Ki;%ECO34 z)&~1fEDC!>ECt&kHVXErSO)fy*l5^eVtLrVh*iN>i*>?&BvuW3Tx=n1r&tZ_39-en zAB)w&o)lXG`-xa1Y>n75*vDcsU{8rHhwT#Uf$o=5njbv0e%RoeNs}+ffqii?wakyxxC@)`J}H}P z%Er3l9Zk7(2R;IA$|f@DTvI($=YpmQ`0R6H&D2J3fqo&~k#B15NT%XVo#m19t2h^t z5}gU2ZC(A8iS=U^g_~+8jjNy1uqf0NE(ujOjhj+iJ9RQ@)5bM5rqiihQ*8r^p-4Ei zC^Rx$QPI?#Y;UT@`+m%k=h}o1J3r5(uoBrlubbhN@5VYTuaoPh@D z=0F4Wippzp5}I(gtMmu{XwVA{KnRx_dD|68S~w8_>@zpuezZRje3Z+9B!*KF=~*bE z-jDJ8dbwdgso`Ys(GHu*4ZLp01Y*v+Q4aJD1e|xI95^-*aNdmeN1#t2px%)3<{am` zp7MYfAJO8zg(7Nm1|iIcF293y(;xT~4f!|>Z(O3q#~V?%2m2v*f*bRaBzPC~GgU2$ zH|j(;q$f>qm*ON+>)_?I$ifF$tmeflHZTzLlPP#PCk0~8hZo#=Cp!T>xq>_Il%P9P z@R|+sB3`luZ~CboyGa+Ur@87SUvP(fpXU&yD&Ye)CEWx7bPY;2s>|1lR@pJJcwLh8Hr`iFnA(rx~b{XL#|`-H4Gy!$;_h!ZEc$JliX^27Xcv_tH!w;w0B_ zFI`nIq-M%zcat0U6I6IbueMlC!WWinyqJ@2BNxhRO;r={>dn$aUgixxIEfa=3Wn6A zydKSNJeY_h2YE~3n7`b(-oVSuk>%onQyvrwCGGHXTlKj1@hn@k@m!LhpDm|ytD5# zBPzLxPsY3akeTGfJ9fDn){>q0sJdHoXBBwG?s3^meqy~hpqwPZyMIMM-E0Xy+wRjN zfwT!erta6Hdj14o*B;P=S|SB^?MgjXD5HY+(1Us-E46~V1^X() zIqQPA{}IDg`UP*{qrr%uhrvDnSRg0~8GIR7?Q(%+E8h6W4;@!$B+ujtvypaZ;F&ym z=(s`OAS8+OfeW&MSuqs>%5>@T%LwO$(Ff zs*R?q3HUbfT_@xvjWNFFpqD(x8~nPClBJoDnQyY){loWrUMP@M#;3s>1w(4Rcxi7s zaV@D#4$jTC`xCw82DPL!?$ozkH<@#iuClykI|2d!BFl&BM|w=Iv7=kkb2B58@$wWM#@|FQqS3AR%E-u) zlD<9p+vzO&_udb~93a{^+z%JYEtrh22_feIQ>ixD*%^LDll&xCRI8>Uzs>w9Sv>Bq zIMS6NlS?p!DC*5eNtmV?Qc7t9fm~c2}8=7*bA)45^^o42jYM zhTzx;N?8fLWJrkKH6%8d64= z8B$Ku4XL1{AyK-~kV<+eD3v9&&X5qjX-JqpHl&n(V@QPlVn`YFI4-d5mE|`ouBvevDX+uJEiy>ip)R0no(U1szU`QG5F{GUSVn_uY+gIPNP)U@A8B$4? z1_k%QnTCX@%@ACl4JoC24T;dxhLq8phLqDshE&jgL!#89IItC=N;)AZxDTFV2%a|# z!8vG1DP3tugxU=$qs4}l)7^$t&|`)~X}uwp^j1)CAKY$8h<UoTxtU{$_G~AGKsy3v8rWq2YHbW}uhM?d+c)uYbdfJdMy=+J+y<gBKVQqDu@3Q>`JT)MQA6<{DB)H+#Z=oA%(5Gw|QB z>RUVxkdlksD*jb6&61=g{K8Zk8Dk0OGrNOo!x^>ipoDWt-9ZUwIJ$!p&d+lPCF?EOV#zK`erL&- zmK>!PAd6GQ{+0}}By7oeOQu?Koh1t`xzm!z1EPK?1(_4hpn|Ui+Hh#QC7kW*4yyRI zCB5+W#T``eG)qPX#QEV9cOvJ=92026!O51)wB$NV7Fu$*C2K5s(UL8e?6l<9mV9B! z-!18@T_z5fkDodD(CrS@heHBwI96#%ttG9N+-S*4OZb~V?x2?bwk76VlRWDIKEzuDRS zo1OTQO;y7C8VUbZ^?&;}JFRbd@G2kT+Z__JzSSY>f14v%{a^o7=l_SF=nQ;0g8PgA z)O6APVL`)G){N2E{St)1?w222*1z;%n3JjHs{bViOM)w)f2qN3s+rL^_$3Cfy~-Nu z{$fTGfwUGzeK>@v?K2Kq( zHi4I%FAbevrS*QOultud9g z)%Q_vd&)(TL}|svjee77|2yYgJM4$rcz>MR=KQv8)!)M!0n}RzFyI7$LEQlcPX<_i zP*Y+T0MRugG~HVXKy=e0O^+-9AR2y)rYZjcP;@N*BF*ZjsbU8J(S$ylmf|nb`01J^ zKMO!~T}w?fhXD{h`i7>vX95u2GhWk@g#bju@-&sN0w7wBm_!dY*EDq_0MYD+HAOxJ zAX+g&(2+M=0rbyE@Td{nQ?)7M1BLJcm z4K-B&+K)7KsHQ2Cv3!tbt<@Ck2S7AowWg&nV)-DA->d05#3Y*euBOL201(}c^+a^f z7n<&FjA5i<^E3_5!+JqlK3&s;cVf99P3xrThGqanC4)7s_&4SkX)?wWO>e5{`j%Ke zNYf8!nz0MZ1*vwLrmGN>=+U8?ZXNar zP#$UVDouY#Vm#8FSY|{|4Ayj4L&QURVw0x3reGN9@p+o=xCqlnT7dG3Fs}=cZtboq zSpYyZZi%MxO|f2)Mq?Qgjlr@a8i6uIqZ68vC{I+23PbD!7r z(EHf_k>-F$Xu}+&+h%IIdJzE8C`^;6yt}6OHUOe)5rb&{r<&qb$VYk-?I2q8uBMe( zw?vC7G(EWhl^8c7d2hk8pk)JNJEdt<1f+jg84*>Zq+m& z%Z4b9?SN>06HTR?$Ntn-~L6#UAh)_?%$(dQQ!W> z<%wu?cx7#}42p~U4CvJ>ECQ1P87)!NeL$bfio0|y>WDhAQPstyUlbb^O?0cRDg`^l z5 zCC3HHIV_g#6051MjIf{?W~tus+8RdXkSURj#j66m-ti#FGW{YoHL=lABaTWn%w>(P zRmlYBjYBNq7w3TL0NY`)tXHOnsLf%?p7C)t$yn*gAWe(Ga=oKfwS~z@(kL5?6PB#4 z3DWeHJr>LM9UVnV`_-$${X2I-CreQ zFj-#ph(Q(6D0g6o#j^e4HL;*`s19HQ67P?!E>aYDo{xqJV)9a8iEF(#7!p4_o#{`JIAY%(Xq)u z+~u)!$LeaQtJoZt3}%1^)aJ0HKSWVhSvt&R4P!oFg%FeFjhTVv zLrj*pCkR%N_^f3NQLGYTvV1Ueu(ZQ6W&K`a3fnxE4$UI0lp>0CgXYdU4vS^|I?|H} zD@c6SvgR3964?~3~Snx79&c0 z)-q=_)(LZ2Bbc{X++ne-F{`n3h{^KK+{QX$grR3mbB3D0ceLCB6(&NRo}(wVd}m4& z^^7Ud$!92r5uMqP6~zeFvt~xt64`lqXiw7 zAsZQm8=SIeVKNb`8meA zooh>?N+bwyd||vYRu%|wh$Tp=u(~3e;557-%P2iV$PBZTf{#~mI=GCB8hO>|z5s{p z6pG@BT3t1io({2u(qa)K$TFnY1#7M}QV}gn;5icY;t-SNRU#pUFqbtbvA(5AH+_S} zvML=ThBD*wSX$W}O(xu=iwqu1t8~n$AaRq)@|1dy(s+%Vy2)c{mAV-fq;4`K2$ z5g%0&D-D%qsyNnGXsOgwMzTI36vm>7>R46H$XH=@ylObN#83q5siZ^kfvKSw)+EHv z<0^5#?hlS8gXI*0C1`UD$!Kz5G=W>6j!7JKN;=2miL!R8`Qn%=#H7^h6Hkna=uM8J z>BXefEQ*d*ux%w+j%0nBbd;?6!{+M|-(NojQVv_vDU6NRwMVIX3s7R&vfc)ThUp-2 zlP5|W13D${$$MPZ=sMQ3OZ~xo(((4ESR*xfRu(`zY*D9MWn{P>-i(AaQB7kM@sNMKg+*sOyYKuOgKblbHUEZ4OriAQU(nhI~bsZ(~DEZ;vmDn2@D3fml(98eSO z6&dG^vq6C4X&vdM!^=Y&#Kj0(PY*9CwNpfM8if_{F{TY>n5DYM$}CIGFiQoiJ!_TM zB|17*8ujBiWa;537%RsKP}dL&GlS(+A^Hgg0glH;)3=(AW>nR2h$VEw(Sec5+NcTT zb6Aq*$D(MYIG?cpitdlV7e5i)FDqYpXfd-&Y81Lnj%RR6<W9gvHbcrM*O4jDEWYBB^Nt?rxonlFx*E?545|L8>)Wqev(t~1U$qI$9 zC3TpkaB&(R8MV`Nd9F04sU_t!6}MbL8)D_gIG}UXD_S+&%A&_`Q4KkrUY&9#uoes> zcaO$~qc0H6ES7P1pN>KrtVV3erJ?PzL zn58`3K*|iW6gLFk__(}c<&{F4s6nx0g|WpHBUGuX`IyQ>)L;N3+SXIKF=EL#M#HhP zE5j-1!MqN2N8k`VP}}()s2kCD=!5|P-3OuHA^OlAMBkxZ3G_j`2K}b)Mc=QR(4X!R z^i>)T@E`O)Iu@zlEPx#q0DUGPEk(aX^iz6vGC<4g(D!jBz#EUEujJk6XLk?!SShKg=kj`hr>CLs)^zl{n}M>mhJdHDkK z(inf|VP5jkmg$(6J25Yv5VP40=zCiN@NZ1F(`10An1_~_p9A>23-dA!^V0Y##6!D= z+>HKoH=^&~9L(=Bw7(jl|0v8e=BFw8W9_H}IQ?<7>2`pg=u@`;E|kMOlwo)@`o^`u z@*u~^6?Xva#NP#X0yIGWD)a+RVmJ@OgP%YfQEwCePQl-KnBGMwKX?JAi`4yAfPy6Y zS&l z{@wgZEb~QZFWOy!zY8$j1?@T&+t0D6+x|Yx&%>yTG^Y&99ce@q(?fe!SEC;-`o^ut z@|}qJYKnQCi}kV>^%`M&9E| zV*VzgedJ`<1b>&KUN4j-pSo?oM-2R3To3)Yp+39?Z^B0SOYpk}UWPNFC%ghH;aT_- zJP%L8FW@3r3+v$5&wyVZDBgpz%*C}*TAFj z7!<+fa3f5H)$khJ0yjZFSc(m44m<=8!{KliOo1w>h33!$Mne*=h6Id(aWEFfW7ezT z7|4f)&=QV@b}$bfheDVL6X04n1-ihoa2ymsV`u|Eh2Ox*&;d?^Zg47eh120uI0L#v zQ#cQff^%U7{0ch4gD?yFz-;IZkHC7E0oTJ%;B0sRCP6Q_AEv@f@H%XOn_(nW!YH^G zo`Cz{PPhSV;|7+y`T8$ir>)%82MNNM?btdvU=2?nLxll+wb4#;(`m?uQ&4`N; z-=+44*O|N|vhJ9T&4tC+t0hB8TJq^NJ8y+pJjL!nvqRgE6l;IYcK1q_D~OSOi|=ON zUj|c6>(x2u)sG7=kpu4u118{wAk33wBlTdZXeJUcL#e13%!;>PcM}S+;%n`!UbMqOYS$+8o)tB~qOUR8~gOu!2zlKL#$Si@6~t@Awn2akX1 zy7DkiH`s7yhK@u`M*>#xxuIPx?tF~$$B@3uFf_gGXo#b>MK%{N=DdSqm+u`_TWr%e z!-@#CDa@AUIhgXHdK#x)4Ci}#8inAq+}7Y;&=`r}#?DND?+oj>>T?<)jrrbfAH{^g zIaxfh)@A9-W7W3&_F z+D*~qY^}eMFt9y-=<^3(K}Up=lfEo*9q9~|;L8<(7fu^Lb741rMXtjjwYqn~r7qZ#Iz>=npZnOgwR6_|}s)Xd!L9E5~E}SjiAvimw z)R(-LFpHtq6Y!ixMZnj0gBFf^oohrIUI8{Y46K|qC1*+U>@<{>obPew@GX}+Ck|^f z@cDD149`R-M)JjTMCx#kQ`hCPBPm|D(kt)!=($ zBPTx36&C!N1c!_|+&FN&_uNky&HmoY$hsZj=Ee9P!_YCfAqC?L0Y=wj9IX~Zt3o#_ zlpuN0+Jhl^?I~~LP|s)2q{J!2PvZNVUQ&17zI_dcCNSc7#agfGBgBw zOm_s-Y-s>gF@XcUbwWpn62_&k3fBGcq^=kx$R}|W)Q4m|7%+^Bl^PG3w1e zd!l&r)X5JU3bdAX{Hmn4Cb$mVb0tcXPJ>i2n8!k*FS-B7g((=EANfgnheQ6!k;C@S zjC{6vTIBGI+91H-Bq+#hz%lGYLF4Qv5H)y?uzeEbXF->7@Tq`#%%jpY8JwVhN~5+@ zl$6N`i+O7(Q_wu$A%1YOqXP7W7azx}jM%3+fmCp4LmV++xUJ(@XP(+96`RL-r#8Kgu2#D;e}1NG21a-IHB;;G-FbKh{dN8o|-XZAh-^ho@Sb3`6s)l4=N?& z+`$iQDpL47)IVPc;;r>`z%`fB0n=DT2Rvy39YluK&K$$vr24M+u4}*lWq}_b za@OZ1a*(X??Pz%CuUkTx&n-|o3s7nMO48^ODDe*8Mq<8+6zuLj;UF9mGUg~@hp+M% z+S_YxD!*c5A+LAa-cFviG{f}ZHI@QehnMz7*wZlf>XfFt6;~#^Otw3;Gv_p<3JBhQ z(aGBTa8eC+;1me<-a$a`ua&Z~3-?!__J-P%G9T{Zd>i{{C1->UA!A2PS5pWhV!cnj$xk8v3Oc7QgkJ-Gspjed6M zyN7tb9Pv9q-s<}J+Y~*^=-*M6QD?$&O^!hBMimE`!tqd0d2H`kX(C<|FHh#R=zmsT zuO59a^Wv?a#u%ck5TWCz`l|{4|KaK{3kN!s#z$3SehVt=)%*T?QwN2CGFTscvpb*% zC2=Zzjxtaqc{1%u21QsVpE<-omHyBBM`-~%kb8y=doRvitdk!5rmEv9Y0 z_Fc})qZU&ip1EQ3`sXlfI?Hm4K}S#PpV4C4`4QA&&>`6RM=gfZ{SjJ1I<>Qa$Ed>_e*j= zLiwgsw!g+K)X^+6E!~3l-t*4bDgmgwmQ9cTeD>P2m8A`^8flzOwhd^7(rK~hh3jwT=lAS61M!ZK@bsF?g2}wSN@e=b)Ay{SGX05< z%IEJ{qU8%C!trk%*n29X9qFOD$NM&<6-uX6g*Liy|B0Vc8*OAEdV3BFAoKFf7x4Cd z`pIX6_frec+tU09c;`$za|huyw(z|DQMP#gglY7Oz3o?i^DD$V%EHszFB{GZrBi$U zvc^C=W5e42<{{e8d^GFc#zM$^))4w&tM-%Lq&|4GgqM>(m|qa?`OiN4vn{71Y7-AN zeCd>>r9w~K@Xqip)Dw?!Fy#T&!cU_v+n*n{a!ubk|M(>$9_u6eS7dh0*`YMBq`7e2 z?EM>QE#{rI=bIU$556{uxyIyES?&u8Pm{Tm^kXd&{K0~UsDayp1Y4esgDcMa9x&n-mn zJky5Dc%_&xjHI(Re)%^VNq^ztnb){BoE1vPI$G3%%l#)h!R6h?r;inB+5(B~HGu8vIkecfX_6VDkVc z*|S4>g6yOP0veI<$Q7dtcEyw1tlxdLz#UwL=@-f+6$4Wl)c_LqEt;f~h@iw*AmLW9H8z@^$VV*B&b@|&gqPFrdedi*&)3M>K zP#WbajR4R8ZL`3`GhGkuqO?M3v`uNh z5WnoC*J&O&&p;E4GV_)q^n@4xbNrWih<3h*X8TQA_GH}iq|s~A9Sz^2(dz;q&-co- zp>kqd`QejaC)+M`u%soR1)oOENoNCZFTZR9?bLtk<2mofS{Rv^rm+5-Re1Y4TK`?- zBa*|a4U>6E3af=zT72{|trmV~;CSAw`rGPkF@-j?W3ErOJqc;*<@b2!i@gWjJY4v>bgT1*Y_2+%*%Xkm)7)`U*2U6p>_(%nW>(X;_R(6ta~M%v3TBKcjH)Xqm+j6& z%q|9I;FFzg%N1JC`6plYIn`xX2`@M8R;bJK`cD6n>av@GYPgeUYp2jdo2>leuhc^? zl@W7esZhQhULUlc%D20TYx~Dr&E^n#s4%+kSoy2{w1eppLRIef*&+(-)XAG;8|dV> zr-x`d^E=g<`N${q&G}8=dWHJtWdfd5nU=}vj0b{^TW&6Rm2B+gVVYke{1`TFE&g^t z+1Oja%ZZIb%USn9`9G=U^l>mfpH-_E5239JcUo;9ZS!e!MC>af=E6>CHF@cs%RZvj zWIqoz_$VY>3x(0H_0>mzN~7K7K9=*%i4AFm(rKx}EV6mlu)pUaVt*6SKQwWgYA)~! zTmRy1!YefKf=^^D1RFgK`=r|2ertRK)n1W@mjWvDkwz%X-Nz}-?v z0*xPh{{w0*1ARREvmv|u>`)q|DfxM|dGa*n=QT)1l)7L}N_Jq;HS4Kl2OGHj9aNSj zD~xUTHM!z78ry#F;CbIX+klx{D2#1$&%fkD8rz15h*H5?nMk8PrE`Fe?{55x&H=9Q zQG;*7?B;R^<9VQ}5hFayEPRR=G zX7eAvQsZ32N438qbPUZHQP=~#w_)&V+5?oxh?1c>snNerEc<|JwA926zJYWM%^Xpv z(aKhfU!fW;6A>jtGcI4DM&IB5n%dPxO;rBC$1yZxM4?8%IoL2gsEfIA@O4OX#E9@+r^r`;^?Yc&K$f1vZ9dk1+W9h!S&oKvg(|vViDon}P zj9Zm-`?7KK$J=Nw9pxhj-!WTu**2#$;tTud3wyl&F72PI0xbRcv-&jMhRfJC=`Q}3 zoo61Pnv4s0Qh{1oNXJHD_8z>W(FPjps~yZ7-NOiD;3s|V-cGaH)r=Vag4{Cg5LOLB z58bqV-)DJ6~SlVg=X#5FdiINW7wqjd6fUZn3{I{BI4;n5=! z>ObgdC7yZhNps@^=a&78=EiFcEd5}G4Q7SXsXJkA>>io^61B{UjK$AkSOA&ZCiR5a z@>c4bmr0DruWe+BC;0>IoY?0(@&}sCct4Uq(ATRz`z!Ui>ujVS$;0E77mBwK+7ug2 zJw##`qZLY{l}Ih}K;<^ITARvf-ZLjw>KU)rr2WRZ6-zeJeq$PAnNOv7|F!Gf;~toB z+d;y;UdHvFXvq>+nElGT{OrS4h&x@zq?y6kIT=AEAE=YJ zAHFURv1Ynhx#%H6xqh8kvzJyCvs^s=HcpnMDfuUSIq-qM(~fmEBf3xTWQ!`y_3wZD zw}Uhi+~A`cFZCXi2@@v?{#W#57-wu^}^VFVY>>*v<2|(;e0=CZ_QsjSXpq(&!Hb!YEVqN%V(t|e^SmtXfX{J1E;EV$_V=XYTLl5fMz*Z;?o29ScihjFfH;p*ATDbbX9xHvj z=Nuy1Szqn>me3ZOXx?)`xkr2Y$mi5I(ziKi^oUrNXu>Y$$YuAxoQJmE?x5+%jIzWN z`edVXKKqXP%3cR|g`#)$DSd6Ydb0R#7n>i*%d)RZ7B9J`-*&S2p46zhu~=B+&A;cu%`^ty8(;^o{AFpW z^rh9*R;3@(D6uq*mKzI&k?@2LebtKSJ{wbX|H`z-N^A9_N37aMYxVmjyxdqRti#rS zbIiN64tu~y4ZXK$*=E;m8e@~RCi?EJ#mWn8S%7K3=9nd-aHjN8^5qZdOzA-j@yC0& zr9;aj72a|SFGugT2yOM@sSVcTp?wbtc;$AT*`ai5P$<@vCMC%S@XJY!4i zyJX>(eKguUV&UcFofyHoId?bwfUH{)Mso`@C)T}k#_fM0>mK#-j5kKJ>+^O~ zzM--7F%QjstkiBGx!D)2f+p%D>+uwr((q-Ea zH@gnIk>pIcSE{V9wV{(wB=dXu~cH#C{}Dz%iS14Q$IVW(+kjwtLt+HAl2V_J(p zBO*!-G~<#L*2CXDddXWfhCl0}8V@8pMrMpAjB7_8b@t~pu00nR?! z!O#1c#%s@(O}4%1v{b>u^+z`UH(B_CkEZ{#sr=t%vLQ3JP#U>kT-kmDjodG$z?6#C z%0?QtisQ{U&+nn}=Fb7H_Yk&~cy7kF&%bzQ8)2iZec8ZFeWYwvXd10W8c~~#E?Y|@ z>RJOa<$-d>HWmoGi?Kg%xsf~&*BOXEe4w1Mt-{^T;VVYIPaa+C4dfp4fma zXixRsz$+%Mbex)r(wjn25q*^8W%^&8~a^ literal 0 HcmV?d00001 diff --git a/source/PD-Loader/ModuleList.h b/source/PD-Loader/ModuleList.h new file mode 100644 index 0000000..72c79e3 --- /dev/null +++ b/source/PD-Loader/ModuleList.h @@ -0,0 +1,186 @@ +#pragma once + +#include +#include +#include +#include +#include + +std::wstring GetModuleFileNameW(HMODULE hModule) +{ + static constexpr auto INITIAL_BUFFER_SIZE = MAX_PATH; + static constexpr auto MAX_ITERATIONS = 7; + std::wstring ret; + auto bufferSize = INITIAL_BUFFER_SIZE; + for (size_t iterations = 0; iterations < MAX_ITERATIONS; ++iterations) + { + ret.resize(bufferSize); + auto charsReturned = GetModuleFileNameW(hModule, &ret[0], bufferSize); + if (charsReturned < ret.length()) + { + ret.resize(charsReturned); + return ret; + } + else + { + bufferSize *= 2; + } + } + return L""; +} + +auto starts_with = [](const std::wstring& big_str, const std::wstring& small_str) -> auto +{ + return big_str.compare(0, small_str.length(), small_str) == 0; +}; + +// Stores a list of loaded modules with their names, WITHOUT extension +class ModuleList +{ +public: + enum class SearchLocation + { + All, + LocalOnly, + SystemOnly, + }; + + // Initializes module list + // Needs to be called before any calls to Get or GetAll + void Enumerate(SearchLocation location = SearchLocation::All) + { + constexpr size_t INITIAL_SIZE = sizeof(HMODULE) * 256; + HMODULE* modules = static_cast(malloc(INITIAL_SIZE)); + if (modules != nullptr) + { + typedef BOOL(WINAPI * Func)(HANDLE hProcess, HMODULE * lphModule, DWORD cb, LPDWORD lpcbNeeded); + + HMODULE hLib = LoadLibrary(TEXT("kernel32")); + assert(hLib != nullptr); // If this fails then everything is probably broken anyway + + Func pEnumProcessModules = reinterpret_cast(GetProcAddress(hLib, "K32EnumProcessModules")); + if (pEnumProcessModules == nullptr) + { + // Try psapi + FreeLibrary(hLib); + hLib = LoadLibrary(TEXT("psapi")); + if (hLib != nullptr) + { + pEnumProcessModules = reinterpret_cast(GetProcAddress(hLib, "EnumProcessModules")); + } + } + + if (pEnumProcessModules != nullptr) + { + const HANDLE currentProcess = GetCurrentProcess(); + DWORD cbNeeded = 0; + if (pEnumProcessModules(currentProcess, modules, INITIAL_SIZE, &cbNeeded) != 0) + { + if (cbNeeded > INITIAL_SIZE) + { + HMODULE* newModules = static_cast(realloc(modules, cbNeeded)); + if (newModules != nullptr) + { + modules = newModules; + + if (pEnumProcessModules(currentProcess, modules, cbNeeded, &cbNeeded) != 0) + { + EnumerateInternal(modules, location, cbNeeded / sizeof(HMODULE)); + } + } + } + else + { + EnumerateInternal(modules, location, cbNeeded / sizeof(HMODULE)); + } + } + } + + if (hLib != nullptr) + { + FreeLibrary(hLib); + } + + free(modules); + } + } + + // Recreates module list + void ReEnumerate(SearchLocation location = SearchLocation::All) + { + Clear(); + Enumerate(location); + } + + // Clears module list + void Clear() + { + m_moduleList.clear(); + } + + // Gets handle of a loaded module with given name, NULL otherwise + HMODULE Get(const wchar_t* moduleName) const + { + // If vector is empty then we're trying to call it without calling Enumerate first + assert(m_moduleList.size() != 0); + + auto it = std::find_if(m_moduleList.begin(), m_moduleList.end(), [&](const auto& e) { + return _wcsicmp(moduleName, std::get<1>(e).c_str()) == 0; + }); + return it != m_moduleList.end() ? std::get<0>(*it) : nullptr; + } + + // Gets handles to all loaded modules with given name + std::vector GetAll(const wchar_t* moduleName) const + { + // If vector is empty then we're trying to call it without calling Enumerate first + assert(m_moduleList.size() != 0); + + std::vector results; + for (auto& e : m_moduleList) + { + if (_wcsicmp(moduleName, std::get<1>(e).c_str()) == 0) + { + results.push_back(std::get<0>(e)); + } + } + + return results; + } + +private: + void EnumerateInternal(HMODULE* modules, SearchLocation location, size_t numModules) + { + const auto exeModulePath = GetModuleFileNameW(NULL).substr(0, GetModuleFileNameW(NULL).find_last_of(L"/\\")); + + m_moduleList.reserve(numModules); + for (size_t i = 0; i < numModules; i++) + { + // Obtain module name, with resizing if necessary + auto moduleName = GetModuleFileNameW(*modules); + + if (!moduleName.empty()) + { + const wchar_t* nameBegin = wcsrchr(moduleName.c_str(), '\\') + 1; + const wchar_t* dotPos = wcsrchr(nameBegin, '.'); + bool isLocal = starts_with(std::wstring(moduleName), exeModulePath); + + if ((isLocal && location != SearchLocation::SystemOnly) || (!isLocal && location != SearchLocation::LocalOnly)) + { + if (dotPos != nullptr) + { + m_moduleList.emplace_back(*modules, std::wstring(nameBegin, dotPos), isLocal); + } + else + { + m_moduleList.emplace_back(*modules, nameBegin, isLocal); + } + } + } + + modules++; + } + } + +public: std::vector< std::tuple > m_moduleList; +}; \ No newline at end of file diff --git a/source/PD-Loader/PD-Loader.vcxproj b/source/PD-Loader/PD-Loader.vcxproj new file mode 100644 index 0000000..3bf8727 --- /dev/null +++ b/source/PD-Loader/PD-Loader.vcxproj @@ -0,0 +1,186 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {CA479467-D518-46A2-AC86-3098ADA99FE5} + Win32Proj + PDLoader + 10.0 + + + + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + false + + + + + + + + + + + + + + + + + + + + + true + + + true + dnsapi + + + false + + + false + dnsapi + + + + NotUsing + Level3 + Disabled + true + X64;%(PreprocessorDefinitions) + true + pch.h + stdcpp17 + ..\MemoryModule;%(AdditionalIncludeDirectories) + + + Windows + true + false + x64.def + + + + + NotUsing + Level3 + Disabled + true + _CRT_SECURE_NO_WARNINGS;_DEBUG;PDLOADER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + ..\dependencies\MemoryModule;%(AdditionalIncludeDirectories) + stdcpp17 + + + Windows + true + false + x64.def + + + + + Use + Level3 + MaxSpeed + true + true + true + WIN32;NDEBUG;PDLOADER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + true + true + false + x64.def + + + + + NotUsing + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;NDEBUG;PDLOADER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + ..\dependencies\MemoryModule;%(AdditionalIncludeDirectories) + stdcpp17 + + + Windows + true + true + true + false + x64.def + + + + + + + + + + + + + + + + + diff --git a/source/PD-Loader/PD-Loader.vcxproj.filters b/source/PD-Loader/PD-Loader.vcxproj.filters new file mode 100644 index 0000000..046fb1b --- /dev/null +++ b/source/PD-Loader/PD-Loader.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + Source Files + + + + + Source Files + + + + + Source Files + + + \ No newline at end of file diff --git a/source/PD-Loader/dllmain.cpp b/source/PD-Loader/dllmain.cpp new file mode 100644 index 0000000..e26843a --- /dev/null +++ b/source/PD-Loader/dllmain.cpp @@ -0,0 +1,710 @@ +#include "framework.h" +#include "exception.hpp" + +HMODULE hm; +std::vector iniPaths; + +bool iequals(std::wstring_view s1, std::wstring_view s2) +{ + std::wstring str1(std::move(s1)); + std::wstring str2(std::move(s2)); + std::transform(str1.begin(), str1.end(), str1.begin(), [](wchar_t c) { return ::towlower(c); }); + std::transform(str2.begin(), str2.end(), str2.begin(), [](wchar_t c) { return ::towlower(c); }); + return (str1 == str2); +} + +std::wstring to_wstring(std::string_view cstr) +{ + std::string str(std::move(cstr)); + auto charsReturned = MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), NULL, 0); + std::wstring wstrTo(charsReturned, 0); + MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), &wstrTo[0], charsReturned); + return wstrTo; +} + +std::wstring SHGetKnownFolderPath(REFKNOWNFOLDERID rfid, DWORD dwFlags, HANDLE hToken) +{ + std::wstring r; + WCHAR* szSystemPath = nullptr; + if (SUCCEEDED(SHGetKnownFolderPath(rfid, dwFlags, hToken, &szSystemPath))) + { + r = szSystemPath; + } + CoTaskMemFree(szSystemPath); + return r; +}; + +HMODULE LoadLibraryW(const std::wstring& lpLibFileName) +{ + return LoadLibraryW(lpLibFileName.c_str()); +} + +std::wstring GetCurrentDirectoryW() +{ + static constexpr auto INITIAL_BUFFER_SIZE = MAX_PATH; + static constexpr auto MAX_ITERATIONS = 7; + std::wstring ret; + auto bufferSize = INITIAL_BUFFER_SIZE; + for (size_t iterations = 0; iterations < MAX_ITERATIONS; ++iterations) + { + ret.resize(bufferSize); + auto charsReturned = GetCurrentDirectoryW(bufferSize, &ret[0]); + if (charsReturned < ret.length()) + { + ret.resize(charsReturned); + return ret; + } + else + { + bufferSize *= 2; + } + } + return L""; +} + +UINT GetPrivateProfileIntW(LPCWSTR lpAppName, LPCWSTR lpKeyName, INT nDefault, const std::vector& fileNames) +{ + for (const auto& file : fileNames) + { + nDefault = GetPrivateProfileIntW(lpAppName, lpKeyName, nDefault, file.c_str()); + } + return nDefault; +} + +std::wstring GetSelfName() +{ + const std::wstring moduleFileName = GetModuleFileNameW(hm); + return moduleFileName.substr(moduleFileName.find_last_of(L"/\\") + 1); +} + +template +void GetSections(T&& h, Args... args) +{ + const std::set< std::string_view, std::less<> > s = { args... }; + size_t dwLoadOffset = (size_t)GetModuleHandle(NULL); + BYTE* pImageBase = reinterpret_cast(dwLoadOffset); + PIMAGE_DOS_HEADER pDosHeader = reinterpret_cast(dwLoadOffset); + PIMAGE_NT_HEADERS pNtHeader = reinterpret_cast(pImageBase + pDosHeader->e_lfanew); + PIMAGE_SECTION_HEADER pSection = IMAGE_FIRST_SECTION(pNtHeader); + for (int iSection = 0; iSection < pNtHeader->FileHeader.NumberOfSections; ++iSection, ++pSection) + { + auto pszSectionName = reinterpret_cast(pSection->Name); + if (s.find(pszSectionName) != s.end()) + { + DWORD dwPhysSize = (pSection->Misc.VirtualSize + 4095) & ~4095; + std::forward(h)(pSection, dwLoadOffset, dwPhysSize); + } + } +} + +enum Kernel32ExportsNames +{ + eGetStartupInfoA, + eGetStartupInfoW, + eGetModuleHandleA, + eGetModuleHandleW, + eGetProcAddress, + eGetShortPathNameA, + eFindNextFileA, + eFindNextFileW, + eLoadLibraryA, + eLoadLibraryW, + eFreeLibrary, + eCreateEventA, + eCreateEventW, + eGetSystemInfo, + eInterlockedCompareExchange, + eSleep, + + Kernel32ExportsNamesCount +}; + +enum Kernel32ExportsData +{ + IATPtr, + ProcAddress, + + Kernel32ExportsDataCount +}; + +size_t Kernel32Data[Kernel32ExportsNamesCount][Kernel32ExportsDataCount]; + +static LONG OriginalLibraryLoaded = 0; +void LoadOriginalLibrary() +{ + if (_InterlockedCompareExchange(&OriginalLibraryLoaded, 1, 0) != 0) return; + + auto szSelfName = GetSelfName(); + auto szSystemPath = SHGetKnownFolderPath(FOLDERID_System, 0, nullptr) + L'\\' + szSelfName; + auto szLocalPath = GetModuleFileNameW(hm); szLocalPath = szLocalPath.substr(0, szLocalPath.find_last_of(L"/\\") + 1); + + if (iequals(szSelfName, L"dnsapi.dll")) { + dnsapi.LoadOriginalLibrary(LoadLibraryW(szSystemPath)); + } +} + +void FindFiles(WIN32_FIND_DATAW* fd) +{ + auto dir = GetCurrentDirectoryW(); + + HANDLE dvaFile = FindFirstFileW(L"*.dva", fd); + if (dvaFile != INVALID_HANDLE_VALUE) + { + do { + if (!(fd->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) + { + auto pos = wcslen(fd->cFileName); + + if (fd->cFileName[pos - 4] == '.' && + (fd->cFileName[pos - 3] == 'd' || fd->cFileName[pos - 3] == 'D') && + (fd->cFileName[pos - 2] == 'v' || fd->cFileName[pos - 2] == 'V') && + (fd->cFileName[pos - 1] == 'a' || fd->cFileName[pos - 1] == 'A')) + { + auto path = dir + L'\\' + fd->cFileName; + + if (GetModuleHandle(path.c_str()) == NULL) + { + auto h = LoadLibraryW(path); + SetCurrentDirectoryW(dir.c_str()); //in case dva switched it + + if (h == NULL) + { + auto e = GetLastError(); + if (e != ERROR_DLL_INIT_FAILED) // in case dllmain returns false + { + std::wstring msg = L"Unable to load " + std::wstring(fd->cFileName) + L". Error: " + std::to_wstring(e); + MessageBoxW(0, msg.c_str(), L"PD Loader", MB_ICONERROR); + } + } + else + { + auto procedure = (void(*)())GetProcAddress(h, "InitializeDVA"); + + if (procedure != NULL) + { + procedure(); + } + } + } + } + } + } while (FindNextFileW(dvaFile, fd)); + FindClose(dvaFile); + } +} + +void LoadPlugins() +{ + auto oldDir = GetCurrentDirectoryW(); // store the current directory + + auto szSelfPath = GetModuleFileNameW(hm).substr(0, GetModuleFileNameW(hm).find_last_of(L"/\\") + 1); + SetCurrentDirectoryW(szSelfPath.c_str()); + + auto nWantsToLoadPlugins = GetPrivateProfileIntW(L"global", L"enable", TRUE, iniPaths); + + if (nWantsToLoadPlugins) + { + WIN32_FIND_DATAW fd; + + SetCurrentDirectoryW(szSelfPath.c_str()); + + if (SetCurrentDirectoryW(L"plugins\\")) + FindFiles(&fd); + } + + SetCurrentDirectoryW(oldDir.c_str()); // Reset the current directory +} + +static LONG LoadedPluginsYet = 0; +void LoadEverything() +{ + if (_InterlockedCompareExchange(&LoadedPluginsYet, 1, 0) != 0) return; + + LoadOriginalLibrary(); + LoadPlugins(); +} + +static LONG RestoredOnce = 0; +void LoadPluginsAndRestoreIAT(uintptr_t retaddr) +{ + bool calledFromBind = false; + + //steam drm check + GetSections([&](PIMAGE_SECTION_HEADER pSection, size_t dwLoadOffset, DWORD dwPhysSize) { + auto dwStart = static_cast(dwLoadOffset + pSection->VirtualAddress); + auto dwEnd = dwStart + dwPhysSize; + if (retaddr >= dwStart && retaddr <= dwEnd) + calledFromBind = true; + }, ".bind"); + + if (calledFromBind) return; + + if (_InterlockedCompareExchange(&RestoredOnce, 1, 0) != 0) return; + + LoadEverything(); + + for (size_t i = 0; i < Kernel32ExportsNamesCount; i++) + { + if (Kernel32Data[i][IATPtr] && Kernel32Data[i][ProcAddress]) + { + auto ptr = (size_t*)Kernel32Data[i][IATPtr]; + DWORD dwProtect[2]; + VirtualProtect(ptr, sizeof(size_t), PAGE_EXECUTE_READWRITE, &dwProtect[0]); + *ptr = Kernel32Data[i][ProcAddress]; + VirtualProtect(ptr, sizeof(size_t), dwProtect[0], &dwProtect[1]); + } + } +} + +void WINAPI CustomGetStartupInfoA(LPSTARTUPINFOA lpStartupInfo) +{ + LoadPluginsAndRestoreIAT((uintptr_t)_ReturnAddress()); + return GetStartupInfoA(lpStartupInfo); +} + +void WINAPI CustomGetStartupInfoW(LPSTARTUPINFOW lpStartupInfo) +{ + LoadPluginsAndRestoreIAT((uintptr_t)_ReturnAddress()); + return GetStartupInfoW(lpStartupInfo); +} + +HMODULE WINAPI CustomGetModuleHandleA(LPCSTR lpModuleName) +{ + LoadPluginsAndRestoreIAT((uintptr_t)_ReturnAddress()); + return GetModuleHandleA(lpModuleName); +} + +HMODULE WINAPI CustomGetModuleHandleW(LPCWSTR lpModuleName) +{ + LoadPluginsAndRestoreIAT((uintptr_t)_ReturnAddress()); + return GetModuleHandleW(lpModuleName); +} + +FARPROC WINAPI CustomGetProcAddress(HMODULE hModule, LPCSTR lpProcName) +{ + LoadPluginsAndRestoreIAT((uintptr_t)_ReturnAddress()); + return GetProcAddress(hModule, lpProcName); +} + +DWORD WINAPI CustomGetShortPathNameA(LPCSTR lpszLongPath, LPSTR lpszShortPath, DWORD cchBuffer) +{ + LoadPluginsAndRestoreIAT((uintptr_t)_ReturnAddress()); + return GetShortPathNameA(lpszLongPath, lpszShortPath, cchBuffer); +} + +BOOL WINAPI CustomFindNextFileA(HANDLE hFindFile, LPWIN32_FIND_DATAA lpFindFileData) +{ + LoadPluginsAndRestoreIAT((uintptr_t)_ReturnAddress()); + return FindNextFileA(hFindFile, lpFindFileData); +} + +BOOL WINAPI CustomFindNextFileW(HANDLE hFindFile, LPWIN32_FIND_DATAW lpFindFileData) +{ + LoadPluginsAndRestoreIAT((uintptr_t)_ReturnAddress()); + return FindNextFileW(hFindFile, lpFindFileData); +} + +HMODULE WINAPI CustomLoadLibraryA(LPCSTR lpLibFileName) +{ + LoadOriginalLibrary(); + + return LoadLibraryA(lpLibFileName); +} + +HMODULE WINAPI CustomLoadLibraryW(LPCWSTR lpLibFileName) +{ + LoadOriginalLibrary(); + + return LoadLibraryW(lpLibFileName); +} + +BOOL WINAPI CustomFreeLibrary(HMODULE hLibModule) +{ + if (hLibModule != hm) + return FreeLibrary(hLibModule); + else + return !NULL; +} + +HANDLE WINAPI CustomCreateEventA(LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, LPCSTR lpName) +{ + LoadPluginsAndRestoreIAT((uintptr_t)_ReturnAddress()); + return CreateEventA(lpEventAttributes, bManualReset, bInitialState, lpName); +} + +HANDLE WINAPI CustomCreateEventW(LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, LPCWSTR lpName) +{ + LoadPluginsAndRestoreIAT((uintptr_t)_ReturnAddress()); + return CreateEventW(lpEventAttributes, bManualReset, bInitialState, lpName); +} + +void WINAPI CustomGetSystemInfo(LPSYSTEM_INFO lpSystemInfo) +{ + LoadPluginsAndRestoreIAT((uintptr_t)_ReturnAddress()); + return GetSystemInfo(lpSystemInfo); +} + +LONG WINAPI CustomInterlockedCompareExchange(LONG volatile* Destination, LONG ExChange, LONG Comperand) +{ + LoadPluginsAndRestoreIAT((uintptr_t)_ReturnAddress()); + return _InterlockedCompareExchange(Destination, ExChange, Comperand); +} + +void WINAPI CustomSleep(DWORD dwMilliseconds) +{ + LoadPluginsAndRestoreIAT((uintptr_t)_ReturnAddress()); + return Sleep(dwMilliseconds); +} + +bool HookKernel32IAT(HMODULE mod, bool exe) +{ + auto hExecutableInstance = (size_t)mod; + IMAGE_NT_HEADERS* ntHeader = (IMAGE_NT_HEADERS*)(hExecutableInstance + ((IMAGE_DOS_HEADER*)hExecutableInstance)->e_lfanew); + IMAGE_IMPORT_DESCRIPTOR* pImports = (IMAGE_IMPORT_DESCRIPTOR*)(hExecutableInstance + ntHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress); + size_t nNumImports = ntHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].Size / sizeof(IMAGE_IMPORT_DESCRIPTOR) - 1; + + if (exe) + { + Kernel32Data[eGetStartupInfoA][ProcAddress] = (size_t)GetProcAddress(GetModuleHandle(TEXT("KERNEL32.DLL")), "GetStartupInfoA"); + Kernel32Data[eGetStartupInfoW][ProcAddress] = (size_t)GetProcAddress(GetModuleHandle(TEXT("KERNEL32.DLL")), "GetStartupInfoW"); + Kernel32Data[eGetModuleHandleA][ProcAddress] = (size_t)GetProcAddress(GetModuleHandle(TEXT("KERNEL32.DLL")), "GetModuleHandleA"); + Kernel32Data[eGetModuleHandleW][ProcAddress] = (size_t)GetProcAddress(GetModuleHandle(TEXT("KERNEL32.DLL")), "GetModuleHandleW"); + Kernel32Data[eGetProcAddress][ProcAddress] = (size_t)GetProcAddress(GetModuleHandle(TEXT("KERNEL32.DLL")), "GetProcAddress"); + Kernel32Data[eGetShortPathNameA][ProcAddress] = (size_t)GetProcAddress(GetModuleHandle(TEXT("KERNEL32.DLL")), "GetShortPathNameA"); + Kernel32Data[eFindNextFileA][ProcAddress] = (size_t)GetProcAddress(GetModuleHandle(TEXT("KERNEL32.DLL")), "FindNextFileA"); + Kernel32Data[eFindNextFileW][ProcAddress] = (size_t)GetProcAddress(GetModuleHandle(TEXT("KERNEL32.DLL")), "FindNextFileW"); + Kernel32Data[eLoadLibraryA][ProcAddress] = (size_t)GetProcAddress(GetModuleHandle(TEXT("KERNEL32.DLL")), "LoadLibraryA"); + Kernel32Data[eLoadLibraryW][ProcAddress] = (size_t)GetProcAddress(GetModuleHandle(TEXT("KERNEL32.DLL")), "LoadLibraryW"); + Kernel32Data[eFreeLibrary][ProcAddress] = (size_t)GetProcAddress(GetModuleHandle(TEXT("KERNEL32.DLL")), "FreeLibrary"); + Kernel32Data[eCreateEventA][ProcAddress] = (size_t)GetProcAddress(GetModuleHandle(TEXT("KERNEL32.DLL")), "CreateEventA"); + Kernel32Data[eCreateEventW][ProcAddress] = (size_t)GetProcAddress(GetModuleHandle(TEXT("KERNEL32.DLL")), "CreateEventW"); + Kernel32Data[eGetSystemInfo][ProcAddress] = (size_t)GetProcAddress(GetModuleHandle(TEXT("KERNEL32.DLL")), "GetSystemInfo"); + Kernel32Data[eInterlockedCompareExchange][ProcAddress] = (size_t)GetProcAddress(GetModuleHandle(TEXT("KERNEL32.DLL")), "InterlockedCompareExchange"); + Kernel32Data[eSleep][ProcAddress] = (size_t)GetProcAddress(GetModuleHandle(TEXT("KERNEL32.DLL")), "Sleep"); + } + + uint32_t matchedImports = 0; + + auto PatchIAT = [&](size_t start, size_t end, size_t exe_end) + { + for (size_t i = 0; i < nNumImports; i++) + { + if (hExecutableInstance + (pImports + i)->FirstThunk > start && !(end && hExecutableInstance + (pImports + i)->FirstThunk > end)) + end = hExecutableInstance + (pImports + i)->FirstThunk; + } + + if (!end) { end = start + 0x100; } + if (end > exe_end) //for very broken exes + { + start = hExecutableInstance; + end = exe_end; + } + + for (auto i = start; i < end; i += sizeof(size_t)) + { + DWORD dwProtect[2]; + VirtualProtect((size_t*)i, sizeof(size_t), PAGE_EXECUTE_READWRITE, &dwProtect[0]); + + auto ptr = *(size_t*)i; + if (!ptr) + continue; + + if (ptr == Kernel32Data[eGetStartupInfoA][ProcAddress]) + { + if (exe) Kernel32Data[eGetStartupInfoA][IATPtr] = i; + *(size_t*)i = (size_t)CustomGetStartupInfoA; + matchedImports++; + } + else if (ptr == Kernel32Data[eGetStartupInfoW][ProcAddress]) + { + if (exe) Kernel32Data[eGetStartupInfoW][IATPtr] = i; + *(size_t*)i = (size_t)CustomGetStartupInfoW; + matchedImports++; + } + else if (ptr == Kernel32Data[eGetModuleHandleA][ProcAddress]) + { + if (exe) Kernel32Data[eGetModuleHandleA][IATPtr] = i; + *(size_t*)i = (size_t)CustomGetModuleHandleA; + matchedImports++; + } + else if (ptr == Kernel32Data[eGetModuleHandleW][ProcAddress]) + { + if (exe) Kernel32Data[eGetModuleHandleW][IATPtr] = i; + *(size_t*)i = (size_t)CustomGetModuleHandleW; + matchedImports++; + } + else if (ptr == Kernel32Data[eGetProcAddress][ProcAddress]) + { + if (exe) Kernel32Data[eGetProcAddress][IATPtr] = i; + *(size_t*)i = (size_t)CustomGetProcAddress; + matchedImports++; + } + else if (ptr == Kernel32Data[eGetShortPathNameA][ProcAddress]) + { + if (exe) Kernel32Data[eGetShortPathNameA][IATPtr] = i; + *(size_t*)i = (size_t)CustomGetShortPathNameA; + matchedImports++; + } + else if (ptr == Kernel32Data[eFindNextFileA][ProcAddress]) + { + if (exe) Kernel32Data[eFindNextFileA][IATPtr] = i; + *(size_t*)i = (size_t)CustomFindNextFileA; + matchedImports++; + } + else if (ptr == Kernel32Data[eFindNextFileW][ProcAddress]) + { + if (exe) Kernel32Data[eFindNextFileW][IATPtr] = i; + *(size_t*)i = (size_t)CustomFindNextFileW; + matchedImports++; + } + else if (ptr == Kernel32Data[eLoadLibraryA][ProcAddress]) + { + if (exe) Kernel32Data[eLoadLibraryA][IATPtr] = i; + *(size_t*)i = (size_t)CustomLoadLibraryA; + matchedImports++; + } + else if (ptr == Kernel32Data[eLoadLibraryW][ProcAddress]) + { + if (exe) Kernel32Data[eLoadLibraryW][IATPtr] = i; + *(size_t*)i = (size_t)CustomLoadLibraryW; + matchedImports++; + } + else if (ptr == Kernel32Data[eFreeLibrary][ProcAddress]) + { + if (exe) Kernel32Data[eFreeLibrary][IATPtr] = i; + *(size_t*)i = (size_t)CustomFreeLibrary; + matchedImports++; + } + else if (ptr == Kernel32Data[eCreateEventA][ProcAddress]) + { + if (exe) Kernel32Data[eCreateEventA][IATPtr] = i; + *(size_t*)i = (size_t)CustomCreateEventA; + matchedImports++; + } + else if (ptr == Kernel32Data[eCreateEventW][ProcAddress]) + { + if (exe) Kernel32Data[eCreateEventW][IATPtr] = i; + *(size_t*)i = (size_t)CustomCreateEventW; + matchedImports++; + } + else if (ptr == Kernel32Data[eGetSystemInfo][ProcAddress]) + { + if (exe) Kernel32Data[eGetSystemInfo][IATPtr] = i; + *(size_t*)i = (size_t)CustomGetSystemInfo; + matchedImports++; + } + else if (ptr == Kernel32Data[eInterlockedCompareExchange][ProcAddress]) + { + if (exe) Kernel32Data[eInterlockedCompareExchange][IATPtr] = i; + *(size_t*)i = (size_t)CustomInterlockedCompareExchange; + matchedImports++; + } + else if (ptr == Kernel32Data[eSleep][ProcAddress]) + { + if (exe) Kernel32Data[eSleep][IATPtr] = i; + *(size_t*)i = (size_t)CustomSleep; + matchedImports++; + } + + VirtualProtect((size_t*)i, sizeof(size_t), dwProtect[0], &dwProtect[1]); + } + }; + + static auto getSection = [](const PIMAGE_NT_HEADERS nt_headers, unsigned section) -> PIMAGE_SECTION_HEADER + { + return reinterpret_cast( + (UCHAR*)nt_headers->OptionalHeader.DataDirectory + + nt_headers->OptionalHeader.NumberOfRvaAndSizes * sizeof(IMAGE_DATA_DIRECTORY) + + section * sizeof(IMAGE_SECTION_HEADER)); + }; + + static auto getSectionEnd = [](IMAGE_NT_HEADERS* ntHeader, size_t inst) -> auto + { + auto sec = getSection(ntHeader, ntHeader->FileHeader.NumberOfSections - 1); + auto secSize = max(sec->SizeOfRawData, sec->Misc.VirtualSize); + auto end = inst + max(sec->PointerToRawData, sec->VirtualAddress) + secSize; + return end; + }; + + auto hExecutableInstance_end = getSectionEnd(ntHeader, hExecutableInstance); + + // Find kernel32.dll + for (size_t i = 0; i < nNumImports; i++) + { + if ((size_t)(hExecutableInstance + (pImports + i)->Name) < hExecutableInstance_end) + { + if (!_stricmp((const char*)(hExecutableInstance + (pImports + i)->Name), "KERNEL32.DLL")) + PatchIAT(hExecutableInstance + (pImports + i)->FirstThunk, 0, hExecutableInstance_end); + } + } + + // Fixing ordinals + auto szSelfName = GetSelfName(); + + static auto PatchOrdinals = [&szSelfName](size_t hInstance) + { + IMAGE_NT_HEADERS* ntHeader = (IMAGE_NT_HEADERS*)(hInstance + ((IMAGE_DOS_HEADER*)hInstance)->e_lfanew); + IMAGE_IMPORT_DESCRIPTOR* pImports = (IMAGE_IMPORT_DESCRIPTOR*)(hInstance + ntHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress); + size_t nNumImports = ntHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].Size / sizeof(IMAGE_IMPORT_DESCRIPTOR) - 1; + + for (size_t i = 0; i < nNumImports; i++) + { + if ((size_t)(hInstance + (pImports + i)->Name) < getSectionEnd(ntHeader, (size_t)hInstance)) + { + if (iequals(szSelfName, (to_wstring((const char*)(hInstance + (pImports + i)->Name))))) + { + PIMAGE_THUNK_DATA thunk = (PIMAGE_THUNK_DATA)(hInstance + (pImports + i)->OriginalFirstThunk); + size_t j = 0; + while (thunk->u1.Function) + { + if (thunk->u1.Ordinal & IMAGE_ORDINAL_FLAG) + { + PIMAGE_IMPORT_BY_NAME import = (PIMAGE_IMPORT_BY_NAME)(hInstance + thunk->u1.AddressOfData); + void** p = (void**)(hInstance + (pImports + i)->FirstThunk); + } + ++thunk; + } + } + } + } + }; + + ModuleList dlls; + dlls.Enumerate(ModuleList::SearchLocation::LocalOnly); + for (auto& e : dlls.m_moduleList) + { + PatchOrdinals((size_t)std::get(e)); + } + return matchedImports > 0; +} + +LONG WINAPI CustomUnhandledExceptionFilter(LPEXCEPTION_POINTERS ExceptionInfo) +{ + // step 1: write minidump + wchar_t modulename[MAX_PATH]; + wchar_t filename[MAX_PATH]; + wchar_t timestamp[128]; + __time64_t time; + struct tm ltime; + HANDLE hFile; + HWND hWnd; + + wchar_t* modulenameptr = NULL; + if (GetModuleFileNameW(GetModuleHandle(NULL), modulename, _countof(modulename)) != 0) + { + modulenameptr = wcsrchr(modulename, '\\'); + *modulenameptr = L'\0'; + modulenameptr += 1; + } + else + { + *modulenameptr = L'err.err'; + } + + _time64(&time); + _localtime64_s(<ime, &time); + wcsftime(timestamp, _countof(timestamp), L"%Y%m%d%H%M%S", <ime); + swprintf_s(filename, L"%s\\%s\\%s.%s.dmp", modulename, L"logs", modulenameptr, timestamp); + + hFile = CreateFileW(filename, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + + if (hFile != INVALID_HANDLE_VALUE) + { + MINIDUMP_EXCEPTION_INFORMATION ex; + memset(&ex, 0, sizeof(ex)); + ex.ThreadId = GetCurrentThreadId(); + ex.ExceptionPointers = ExceptionInfo; + ex.ClientPointers = TRUE; + + if (FAILED(MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpWithDataSegs, &ex, NULL, NULL))) + { + } + + CloseHandle(hFile); + } + + // step 2: write log + // Logs exception into buffer and writes to file + swprintf_s(filename, L"%s\\%s\\%s.%s.log", modulename, L"logs", modulenameptr, timestamp); + hFile = CreateFileW(filename, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + + if (hFile != INVALID_HANDLE_VALUE) + { + auto Log = [ExceptionInfo, hFile](char* buffer, size_t size, bool reg, bool stack, bool trace) + { + if (LogException(buffer, size, (LPEXCEPTION_POINTERS)ExceptionInfo, reg, stack, trace)) + { + DWORD NumberOfBytesWritten = 0; + WriteFile(hFile, buffer, strlen(buffer), &NumberOfBytesWritten, NULL); + } + }; + + // Try to make a very descriptive exception, for that we need to malloc a huge buffer... + if (auto buffer = (char*)malloc(max_logsize_ever)) + { + Log(buffer, max_logsize_ever, true, true, true); + free(buffer); + } + else + { + // Use a static buffer, no need for any allocation + static const auto size = max_logsize_basic + max_logsize_regs + max_logsize_stackdump; + static char static_buf[size]; + static_assert(size <= max_static_buffer, "Static buffer is too big"); + + Log(buffer = static_buf, sizeof(static_buf), true, true, false); + } + + CloseHandle(hFile); + } + + // step 3: exit the application + ShowCursor(TRUE); + hWnd = FindWindowW(0, L""); + SetForegroundWindow(hWnd); + + return EXCEPTION_CONTINUE_SEARCH; +} + +void Init() +{ + std::wstring modulePath = GetModuleFileNameW(hm); + std::wstring moduleName = modulePath.substr(modulePath.find_last_of(L"/\\") + 1); + moduleName.resize(moduleName.find_last_of(L'.')); + modulePath.resize(modulePath.find_last_of(L"/\\") + 1); + iniPaths.emplace_back(modulePath + moduleName + L".ini"); + iniPaths.emplace_back(modulePath + L"plugins\\config.ini"); + + std::wstring m = GetModuleFileNameW(NULL); + m = m.substr(0, m.find_last_of(L"/\\") + 1) + L"logs"; + + auto FolderExists = [](LPCWSTR szPath) -> BOOL + { + DWORD dwAttrib = GetFileAttributes(szPath); + return (dwAttrib != INVALID_FILE_ATTRIBUTES && (dwAttrib & FILE_ATTRIBUTE_DIRECTORY)); + }; + + if (FolderExists(m.c_str())) + { + SetUnhandledExceptionFilter(CustomUnhandledExceptionFilter); + // Now stub out CustomUnhandledExceptionFilter so NO ONE ELSE can set it! + uint32_t ret = 0x909090C3; //ret + DWORD protect[2]; + VirtualProtect(&SetUnhandledExceptionFilter, sizeof(ret), PAGE_EXECUTE_READWRITE, &protect[0]); + memcpy(&SetUnhandledExceptionFilter, &ret, sizeof(ret)); + VirtualProtect(&SetUnhandledExceptionFilter, sizeof(ret), protect[0], &protect[1]); + } + + LoadEverything(); + +} + +BOOL APIENTRY DllMain(HMODULE hModule, DWORD reason, LPVOID /*lpReserved*/) +{ + if (reason == DLL_PROCESS_ATTACH) + { + hm = hModule; + Init(); + } + return TRUE; +} diff --git a/source/PD-Loader/exception.hpp b/source/PD-Loader/exception.hpp new file mode 100644 index 0000000..ff7958c --- /dev/null +++ b/source/PD-Loader/exception.hpp @@ -0,0 +1,678 @@ +#pragma once +/* + * Unhandled Exception Tracer + * by LINK/2012 + * + * This source code is offered for use in the public domain. You may + * use, modify or distribute it freely. + * + * This code is distributed in the hope that it will be useful but + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY + * DISCLAIMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + */ + +#include +#include +#include +#include +#include +#include +#pragma comment(lib, "Dbghelp.lib") + + /* + * Special Note: + * Try not to allocate any memory in this file! + * Allocation after a exception may not be a good idea... + */ + +#define LODWORD(_qw) ((DWORD)(_qw)) +#define HIDWORD(_qw) ((DWORD)(((_qw) >> 32) & 0xffffffff)) + + // General constants +static const int sizeof_word = sizeof(void*); // Size of a CPU word (4 bytes on x86) +static const int max_chars_per_print = MAX_PATH + 256; // Max characters per Print() call +static const int symbol_max = 256; // Max size of a symbol (func symbol, var symbol, etc) +static const int max_static_buffer = 4096; // Max static buffer for logging + +// Stackdump constants +static const int stackdump_max_words = 60; // max number of CPU words that the stackdump should dump +static const int stackdump_words_per_line = 6; // max CPU words in a single line +static const int stackdump_line_count = (stackdump_max_words / stackdump_words_per_line) + 1; + +// Backtrace constants +static const int max_backtrace_ever = 100; +static const int max_backtrace = 20; + +// Maximum log size constants +static const int max_logsize_basic = (MAX_PATH + 200); // module path + other text +static const int max_logsize_regs = 32 + (4 * 4 * 28); // info + (regsPerLine * numLines * charsPerReg) +static const int max_logsize_stackdump = 32 + 80 + (stackdump_line_count * 32) + (10 * stackdump_words_per_line * stackdump_line_count); +static const int max_logsize_backtrace = 32 + max_backtrace_ever * (MAX_PATH + symbol_max + 90); +static const int max_logsize_ever = 32 + max_logsize_basic + max_logsize_regs + max_logsize_stackdump + max_logsize_backtrace; + +// Internal +class ExceptionTracer; +class StackTrace; +static HMODULE GetModuleFromAddress(LPVOID address); +static const char* GetExceptionCodeString(unsigned int code); +static const char* FindModuleName(HMODULE module, char* output, DWORD size); +static int LogException(char* buffer, size_t max, LPEXCEPTION_POINTERS pException, bool bLogRegisters, bool bLogStack, bool bLogBacktrace); +static LPTOP_LEVEL_EXCEPTION_FILTER PrevFilter = nullptr; +static void(*ExceptionCallback)(const char* buffer) = nullptr; + +// Exportable +int InstallExceptionCatcher(void(*OnException)(const char* log)); + +/* + * ExceptionTrace + * This class is responssible for tracing all possible informations about an LPEXCEPTION_POINTER + */ +class ExceptionTracer +{ +public: + ExceptionTracer(char* buffer, size_t max, LPEXCEPTION_POINTERS pException); + void PrintUnhandledException(); + void PrintRegisters(); + void PrintStackdump(); + void PrintBacktrace(); + + void EnterScope(); + void LeaveScope(); + void Print(const char* fmt, ...); + void NewLine() { Print("\n%s", spc); } + +protected: + EXCEPTION_POINTERS& exception; + EXCEPTION_RECORD& record; + CONTEXT& context; + HMODULE module; + + char* buffer; // Logging buffer + size_t len; // Logged length + size_t max; // Maximum we can log in that buffer + + char spc[(10 * 4) + 1]; // Scope/spacing buffer, 4 spaces per scope, max 10 scopes + size_t nspc; // Number spaces used up there +}; + +/* + * StackTracer + * Responssible for backtracing an stack from a context + */ +class StackTracer +{ +public: + struct Trace + { + // The following values may be null (any) + HMODULE module; // The module the func related to this frame is located + void* pc; // Program counter at func related to this frame (EIP) + void* ret; // Return address for the frame + void* frame; // The frame address (EBP) + void* stack; // The stack pointer at the frame (ESP) + }; + + StackTracer(const CONTEXT& context); + Trace* Walk(); + +private: + Trace trace; + DWORD old_options; + CONTEXT context; + STACKFRAME64 frame; +}; + +/* + * TheUnhandledExceptionFilter + * Logs an unhandled exception + */ +static LONG CALLBACK TheUnhandledExceptionFilter(LPEXCEPTION_POINTERS pException) +{ + // Logs exception into buffer and calls the callback + auto Log = [pException](char* buffer, size_t size, bool reg, bool stack, bool trace) + { + if (LogException(buffer, size, (LPEXCEPTION_POINTERS)pException, reg, stack, trace)) + ExceptionCallback(buffer); + }; + + // Try to make a very descriptive exception, for that we need to malloc a huge buffer... + if (auto buffer = (char*)malloc(max_logsize_ever)) + { + Log(buffer, max_logsize_ever, true, true, true); + free(buffer); + } + else + { + // Use a static buffer, no need for any allocation + static const auto size = max_logsize_basic + max_logsize_regs + max_logsize_stackdump; + static char static_buf[size]; + static_assert(size <= max_static_buffer, "Static buffer is too big"); + + Log(buffer = static_buf, sizeof(static_buf), true, true, false); + } + + // Continue exception propagation + return (PrevFilter ? PrevFilter(pException) : EXCEPTION_CONTINUE_SEARCH); // I'm not really sure about this return +} + +/* + * InstallExceptionCatcher + * Installs a exception handler to call the specified callback when it happens with human readalbe information. + */ +int InstallExceptionCatcher(void(*cb)(const char* log)) +{ + PrevFilter = SetUnhandledExceptionFilter(TheUnhandledExceptionFilter); + ExceptionCallback = cb; + return 1; +} + +/* + * LogException + * Takes an LPEXCEPTION_POINTERS and transforms in a string that is put in the logging steam + */ +static int LogException(char* buffer, size_t max, LPEXCEPTION_POINTERS pException, bool bLogRegisters, bool bLogStack, bool bLogBacktrace) +{ + ExceptionTracer trace(buffer, max, pException); + trace.PrintUnhandledException(); + trace.EnterScope(); + if (bLogRegisters) trace.PrintRegisters(); + if (bLogStack) trace.PrintStackdump(); + if (bLogBacktrace) trace.PrintBacktrace(); + trace.LeaveScope(); + return 1; +} + +/* + * ExceptionTracer + * Contructs a exception trace object, responssible for tracing informations about an exception + */ +ExceptionTracer::ExceptionTracer(char* buffer, size_t max, LPEXCEPTION_POINTERS pException) : + buffer(buffer), exception(*pException), record(*pException->ExceptionRecord), context(*pException->ContextRecord) +{ + this->buffer = buffer; + this->buffer[this->len = 0] = 0; + this->spc[this->nspc = 0] = 0; + this->max = max; + + // Acquiere common information that we'll access + this->module = GetModuleFromAddress(record.ExceptionAddress); +} + +/* + * Print + * Prints some formated text into the logging buffer + */ +void ExceptionTracer::Print(const char* fmt, ...) +{ + va_list va; + va_start(va, fmt); + if ((this->max - this->len) > max_chars_per_print) + this->len += vsprintf(&this->buffer[len], fmt, va); + va_end(va); +} + +/* + * EnterScope + * Enters a new scope in the logging buffer (scope is related to indentation) + * This also prints a new line + */ +void ExceptionTracer::EnterScope() +{ + nspc += 4; + spc[nspc - 4] = ' '; + spc[nspc - 3] = ' '; + spc[nspc - 2] = ' '; + spc[nspc - 1] = ' '; + spc[nspc - 0] = 0; + NewLine(); +} + +/* + * LeaveScope + * Leaves the scope + */ +void ExceptionTracer::LeaveScope() +{ + assert(nspc > 0); + nspc -= 4; + spc[nspc] = 0; + NewLine(); +} + +/* + * PrintUnhandledException + * Prints the well known "Unhandled exception at ..." into the logging buffer + */ +void ExceptionTracer::PrintUnhandledException() +{ + char module_name[MAX_PATH]; + auto dwExceptionCode = record.ExceptionCode; + uintptr_t address = (uintptr_t)record.ExceptionAddress; + + // Find out our module name for logging + if (!this->module || !GetModuleFileNameA(this->module, module_name, sizeof(module_name))) + strcpy(module_name, "unknown"); + + // Log the exception in a similar format similar to debuggers format + Print("Unhandled exception at 0x%p in %s", address, FindModuleName(module, module_name, sizeof(module_name))); + if (module) Print(" (+0x%x)", address - (uintptr_t)(module)); + Print(": 0x%X: %s", dwExceptionCode, GetExceptionCodeString(dwExceptionCode)); + + // If exception is IN_PAGE_ERROR or ACCESS_VIOLATION, we have additional information such as an address + if (dwExceptionCode == EXCEPTION_IN_PAGE_ERROR || dwExceptionCode == EXCEPTION_ACCESS_VIOLATION) + { + auto rw = (DWORD)record.ExceptionInformation[0]; // read or write? + auto addr = (ULONG_PTR)record.ExceptionInformation[1]; // which address? + + Print(" %s 0x%p", + rw == 0 ? "reading location" : rw == 1 ? "writing location" : rw == 8 ? "DEP at" : "", + addr); + + // IN_PAGE_ERROR have another information... + if (dwExceptionCode == EXCEPTION_IN_PAGE_ERROR) + { + NewLine(); + Print("Underlying NTSTATUS code that resulted in the exception is 0x%p", + record.ExceptionInformation[2]); + } + } + + Print("."); +} + +/* + * PrintRegisters + * Prints the content of the assembly registers into the logging buffer + */ +void ExceptionTracer::PrintRegisters() +{ + int regs_in_line = 0; // Amount of registers currently printed on this line + + // Prints a register, followed by spaces + auto PrintRegister = [this, ®s_in_line](const char* reg_name, size_t reg_value, const char* spaces) + { + Print("%s: 0x%p%s", reg_name, reg_value, spaces); + if (++regs_in_line >= 4) { this->NewLine(); regs_in_line = 0; } + }; + + auto PrintFloatRegister = [this, ®s_in_line](const char* reg_name, int reg_num, uint32_t reg_value1, uint32_t reg_value2, uint32_t reg_value3, uint32_t reg_value4) + { + Print("%s%02d: 0x%08X 0x%08X 0x%08X 0x%08X [ %f %f %f %f ]", reg_name, reg_num, reg_value1, reg_value2, reg_value3, reg_value4, + *(float*)& reg_value1, *(float*)& reg_value2, *(float*)& reg_value3, *(float*)& reg_value4); + if (++regs_in_line >= 1) { this->NewLine(); regs_in_line = 0; } + }; + + // Prints a general purposes register + auto PrintIntRegister = [PrintRegister](const char* reg_name, size_t reg_value) + { + PrintRegister(reg_name, reg_value, " "); + }; + + // Prints a segment register + auto PrintSegRegister = [PrintRegister](const char* reg_name, size_t reg_value) + { + PrintRegister(reg_name, reg_value, " "); + }; + + Print("Register dump:"); + EnterScope(); + { + // Print main general purposes registers + if (context.ContextFlags & CONTEXT_INTEGER) + { +#if !_M_X64 + PrintIntRegister("EAX", context.Eax); + PrintIntRegister("EBX", context.Ebx); + PrintIntRegister("ECX", context.Ecx); + PrintIntRegister("EDX", context.Edx); + PrintIntRegister("EDI", context.Edi); + PrintIntRegister("ESI", context.Esi); +#else + PrintIntRegister("RAX", context.Rax); + PrintIntRegister("RCX", context.Rcx); + PrintIntRegister("RDX", context.Rdx); + PrintIntRegister("RBX", context.Rbx); + PrintIntRegister("RBP", context.Rbp); + PrintIntRegister("RSI", context.Rsi); + PrintIntRegister("RDI", context.Rdi); + PrintIntRegister("R08", context.R8); + PrintIntRegister("R09", context.R9); + PrintIntRegister("R10", context.R10); + PrintIntRegister("R11", context.R11); + PrintIntRegister("R12", context.R12); + PrintIntRegister("R13", context.R13); + PrintIntRegister("R14", context.R14); + PrintIntRegister("R15", context.R15); +#endif + } + + // Print control registers + if (context.ContextFlags & CONTEXT_CONTROL) + { +#if !_M_X64 + PrintIntRegister("EBP", context.Ebp); + PrintIntRegister("EIP", context.Eip); + PrintIntRegister("ESP", context.Esp); + PrintIntRegister("EFL", context.EFlags); + this->NewLine(); this->NewLine(); regs_in_line = 0; + PrintSegRegister("CS", context.SegCs); + PrintSegRegister("SS", context.SegSs); +#else + PrintIntRegister("RIP", context.Rip); + PrintIntRegister("RSP", context.Rsp); + PrintIntRegister("EFL", context.EFlags); + this->NewLine(); this->NewLine(); regs_in_line = 0; + PrintSegRegister("CS", context.SegCs); + PrintSegRegister("SS", context.SegSs); +#endif + } + + this->NewLine(); regs_in_line = 0; + + // Print segment registers + if (context.ContextFlags & CONTEXT_SEGMENTS) + { + PrintSegRegister("GS", context.SegGs); + PrintSegRegister("FS", context.SegFs); + this->NewLine(); regs_in_line = 0; + PrintSegRegister("ES", context.SegEs); + PrintSegRegister("DS", context.SegDs); + } + + this->NewLine(); this->NewLine(); regs_in_line = 0; + + // Print floating point registers + if (context.ContextFlags & CONTEXT_FLOATING_POINT) + { + for (int i = 0; i < 8; i++) + { +#if !_M_X64 + auto f = *(M128A*) & (context.FloatSave.RegisterArea[i * 10]); + PrintFloatRegister("ST", i, LODWORD(f.Low), HIDWORD(f.Low), LODWORD(f.High), HIDWORD(f.High)); +#else + PrintFloatRegister("ST", i, + LODWORD(context.FltSave.FloatRegisters[i].Low), HIDWORD(context.FltSave.FloatRegisters[i].Low), + LODWORD(context.FltSave.FloatRegisters[i].High), HIDWORD(context.FltSave.FloatRegisters[i].High)); +#endif + } + + this->NewLine(); + + for (int i = 0; i < 16; i++) + { +#if !_M_X64 + auto f = *(M128A*) & (context.ExtendedRegisters[(i + 10) * 16]); + PrintFloatRegister("XMM", i, LODWORD(f.Low), HIDWORD(f.Low), LODWORD(f.High), HIDWORD(f.High)); + + if (i >= 7) + break; +#else + PrintFloatRegister("XMM", i, + LODWORD(context.FltSave.XmmRegisters[i].Low), HIDWORD(context.FltSave.XmmRegisters[i].Low), + LODWORD(context.FltSave.XmmRegisters[i].High), HIDWORD(context.FltSave.XmmRegisters[i].High)); +#endif + } + } + } + LeaveScope(); +} + +/* + * PrintStackdump + * Prints the content of the stack into the logging buffer + */ +void ExceptionTracer::PrintStackdump() +{ + // We need the ESP of the exception context to execute a stack dump, make sure we have access to it + if ((context.ContextFlags & CONTEXT_CONTROL) == 0) + return; + + static const auto align = sizeof_word; // Stack aligment + static const auto max_words_in_line_magic = stackdump_words_per_line + 10; + + MEMORY_BASIC_INFORMATION mbi; +#if !_M_X64 + uintptr_t base, bottom, top = (uintptr_t)context.Esp; +#else + uintptr_t base, bottom, top = (uintptr_t)context.Rsp; +#endif + auto words_in_line = max_words_in_line_magic; + + // Finds the bottom of the stack from it's base pointer + // Note: mbi will get overriden on this function + auto GetStackBottom = [&mbi](uintptr_t base) + { + VirtualQuery((void*)base, &mbi, sizeof(mbi)); // Find uncommited region of the stack + VirtualQuery((char*)mbi.BaseAddress + mbi.RegionSize, &mbi, sizeof(mbi)); // Find guard page + VirtualQuery((char*)mbi.BaseAddress + mbi.RegionSize, &mbi, sizeof(mbi)); // Find commited region of the stack + auto last = (uintptr_t)mbi.BaseAddress; + return (base + (last - base) + mbi.RegionSize); // base + distanceToLastRegion + lastRegionSize + }; + + // Prints an CPU word at the specified stack address + auto PrintWord = [this, &words_in_line](uintptr_t addr) + { + if (words_in_line++ >= stackdump_words_per_line) + { + // Print new line only if it's not the first time we enter here (i.e. words_in_line has magical value) + if (words_in_line != max_words_in_line_magic + 1) NewLine(); + words_in_line = 1; + Print("0x%p: ", addr); + } + Print(" %p", *(size_t*)addr); + }; + + Print("Stack dump:"); + EnterScope(); + { + // Makes sure the pointer at top (ESP) is valid and readable memory + if (VirtualQuery((void*)(top), &mbi, sizeof(mbi)) + && (mbi.State & MEM_COMMIT) + && (mbi.Protect & (PAGE_EXECUTE_READ | PAGE_EXECUTE_READWRITE | PAGE_READWRITE | PAGE_READONLY)) != 0) + { + base = (uintptr_t)mbi.AllocationBase; // Base of the stack (uncommited) + bottom = GetStackBottom(base); // Bottom of the stack (commited) + + // Align the stack top (esp) in a 4 bytes boundary + auto remainder = top % align; + uintptr_t current = remainder ? top + (align - remainder) : top; + + // on x86 stack grows downward! (i.e. from bottom to base) + for (int n = 0; n < stackdump_max_words && current < bottom; ++n, current += align) + PrintWord(current); + + NewLine(); + Print("base: 0x%p top: 0x%p bottom: 0x%p", base, top, bottom); + NewLine(); + } + } + LeaveScope(); +} + +/* + * PrintBacktrace + * Prints a call backtrace into the logging buffer + */ +void ExceptionTracer::PrintBacktrace() +{ + StackTracer tracer(this->context); + + char module_name[MAX_PATH]; + char sym_buffer[sizeof(SYMBOL_INFO) + symbol_max]; + + int backtrace_count = 0; // Num of frames traced + bool has_symbol_api = false; // True if we have the symbol API available for use + DWORD old_options; // Saves old symbol API options + + SYMBOL_INFO& symbol = *(SYMBOL_INFO*)sym_buffer; + symbol.SizeOfStruct = sizeof(SYMBOL_INFO); + symbol.MaxNameLen = symbol_max; + + // Tries to get the symbol api + if (SymInitialize(GetCurrentProcess(), 0, TRUE)) + { + has_symbol_api = true; + old_options = SymSetOptions(SYMOPT_DEFERRED_LOADS | SYMOPT_LOAD_LINES | SYMOPT_NO_PROMPTS | SYMOPT_FAIL_CRITICAL_ERRORS); + } + + Print("Backtrace (may be wrong):"); + EnterScope(); + { + // Walks on the stack until there's no frame to trace or we traced 'max_backtrace' frames + while (auto trace = tracer.Walk()) + { + if (++backtrace_count >= max_backtrace) + break; + + bool has_sym = false; // This EIP has a symbol associated with it? + DWORD64 displacement; // EIP displacement relative to symbol + + // If we have access to the symbol api, try to get symbol name from pc (eip) + if (has_symbol_api) + has_sym = trace->pc ? !!SymFromAddr(GetCurrentProcess(), (DWORD64)trace->pc, &displacement, &symbol) : false; + + // Print everything up, this.... Ew, this looks awful! + Print(backtrace_count == 1 ? "=>" : " "); // First line should have '=>' to specify where it crashed + Print("0x%p ", trace->pc); // Print EIP at frame + if (has_sym) Print("%s+0x%x ", symbol.Name, (DWORD)displacement); // Print frame func symbol + Print("in %s (+0x%x) ", // Print module + trace->module ? FindModuleName(trace->module, module_name, sizeof(module_name)) : "unknown", + (uintptr_t)(trace->pc) - (uintptr_t)(trace->module) // Module displacement + ); + if (trace->frame) Print("(0x%p) ", trace->frame); // Print frame pointer + + NewLine(); + } + } + LeaveScope(); + + // Cleanup the symbol api + if (has_symbol_api) + { + SymSetOptions(old_options); + SymCleanup(GetCurrentProcess()); + } +} + +/* + * GetExceptionCodeString + * Returns an description by an exception code + */ +static const char* GetExceptionCodeString(unsigned int code) +{ + switch (code) + { + case EXCEPTION_ACCESS_VIOLATION: return "Access violation"; + case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: return "Array bounds exceeded"; + case EXCEPTION_BREAKPOINT: return "Breakpoint exception"; + case EXCEPTION_DATATYPE_MISALIGNMENT: return "Data type misalignment exception"; + case EXCEPTION_FLT_DENORMAL_OPERAND: return "Denormal float operand"; + case EXCEPTION_FLT_DIVIDE_BY_ZERO: return "Floating-point division by zero"; + case EXCEPTION_FLT_INEXACT_RESULT: return "Floating-point inexact result"; + case EXCEPTION_FLT_INVALID_OPERATION: return "Floating-point invalid operation"; + case EXCEPTION_FLT_OVERFLOW: return "Floating-point overflow"; + case EXCEPTION_FLT_STACK_CHECK: return "Floating-point stack check"; + case EXCEPTION_FLT_UNDERFLOW: return "Floating-point underflow"; + case EXCEPTION_ILLEGAL_INSTRUCTION: return "Illegal instruction."; + case EXCEPTION_IN_PAGE_ERROR: return "In page error"; + case EXCEPTION_INT_DIVIDE_BY_ZERO: return "Integer division by zero"; + case EXCEPTION_INT_OVERFLOW: return "Integer overflow"; + case EXCEPTION_INVALID_DISPOSITION: return "Invalid disposition"; + case EXCEPTION_NONCONTINUABLE_EXCEPTION: return "Non-continuable exception"; + case EXCEPTION_PRIV_INSTRUCTION: return "Privileged instruction"; + case EXCEPTION_SINGLE_STEP: return "Single step exception"; + case EXCEPTION_STACK_OVERFLOW: return "Stack overflow"; + default: return "NO_DESCRIPTION"; + } +} + +/* + * FindModuleName + * Finds module filename or "unknown" + */ +static const char* FindModuleName(HMODULE module, char* output, DWORD maxsize) +{ + if (GetModuleFileNameA(module, output, maxsize)) + { + // Finds the filename part in the output string + char* filename = strrchr(output, '\\'); + if (!filename) filename = strrchr(output, '/'); + + // If filename found (i.e. output isn't already a filename but full path), make output be filename + if (filename) + { + size_t size = strlen(++filename); + memmove(output, filename, size); + output[size] = 0; + } + } + else + { + // Unknown module + strcpy(output, "unknown"); + } + return output; +} + +/* + * GetModuleFromAddress + * Finds module handle from some address inside it + */ +static HMODULE GetModuleFromAddress(LPVOID address) +{ + HMODULE module; + if (GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, + (char*)address, &module)) + return module; + return nullptr; +} + +/* +* StackTracer +* Constructs the tracer, we basically need to initialize the symbol api +*/ +StackTracer::StackTracer(const CONTEXT& context) +{ + // Initialise basic values + memset(&this->frame, 0, sizeof(frame)); + memcpy(&this->context, &context, sizeof(context)); + + // Setup the initial frame context +#if !_M_X64 + frame.AddrPC.Mode = AddrModeFlat; + frame.AddrPC.Offset = context.Eip; + frame.AddrFrame.Mode = AddrModeFlat; + frame.AddrFrame.Offset = context.Ebp; + frame.AddrStack.Mode = AddrModeFlat; + frame.AddrStack.Offset = context.Esp; +#else + frame.AddrPC.Mode = AddrModeFlat; + frame.AddrPC.Offset = context.Rip; + frame.AddrFrame.Mode = AddrModeFlat; + frame.AddrFrame.Offset = context.Rbp; + frame.AddrStack.Mode = AddrModeFlat; + frame.AddrStack.Offset = context.Rsp; +#endif +} + +/* + * StackTracer::Walk + * Walks on the stack, each walk is one frame of backtrace + * Returns a frame or null if the walk on the park is not possible anymore + */ +StackTracer::Trace* StackTracer::Walk() +{ + if (StackWalk64(IMAGE_FILE_MACHINE_I386, GetCurrentProcess(), GetCurrentThread(), + &frame, &context, NULL, NULL, NULL, NULL)) + { + trace.module = GetModuleFromAddress((void*)frame.AddrPC.Offset); + trace.frame = (void*)frame.AddrFrame.Offset; + trace.stack = (void*)frame.AddrStack.Offset; + trace.pc = (void*)frame.AddrPC.Offset; + trace.ret = (void*)frame.AddrReturn.Offset; + return &trace; + } + return nullptr; +} \ No newline at end of file diff --git a/source/PD-Loader/framework.h b/source/PD-Loader/framework.h new file mode 100644 index 0000000..97f1cea --- /dev/null +++ b/source/PD-Loader/framework.h @@ -0,0 +1,89 @@ +#pragma once + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +// Windows Header Files +#include +#pragma once +#include +#include +#include +#include "ModuleList.h" +#include +#pragma intrinsic(_ReturnAddress) + +struct shared +{ + FARPROC DllCanUnloadNow; + FARPROC DllGetClassObject; + FARPROC DllRegisterServer; + FARPROC DllUnregisterServer; + FARPROC DebugSetMute; + + void LoadOriginalLibrary(HMODULE dll) + { + DllCanUnloadNow = GetProcAddress(dll, "DllCanUnloadNow"); + DllGetClassObject = GetProcAddress(dll, "DllGetClassObject"); + DllRegisterServer = GetProcAddress(dll, "DllRegisterServer"); + DllUnregisterServer = GetProcAddress(dll, "DllUnregisterServer"); + DebugSetMute = GetProcAddress(dll, "DebugSetMute"); + } +} shared; + +struct dnsapi_dll +{ + HMODULE dll; + + // only some functions are implemented. + // PDAFT doesn't use many, so this should hopefully be fine + FARPROC DnsFree; + FARPROC DnsQuery_A; + FARPROC DnsQueryEx; + FARPROC DnsCancelQuery; + + // DnsQueryEx and DnsCancelQuery take pointers to structs as parameters + // (three for DnsQueryEx and one for DnsCancelQuery) + // fortunately they should fit in registers so the stack doesn't matter + // hopefully this works fine... I have no clue what I'm doing + static LONG WINAPI DnsQueryExStub() + { + return 9004; // DNS_ERROR_RCODE_NOT_IMPLEMENTED + } + static LONG WINAPI DnsCancelQueryStub() + { + return 9004; // DNS_ERROR_RCODE_NOT_IMPLEMENTED + } + + void LoadOriginalLibrary(HMODULE module) + { + dll = module; + shared.LoadOriginalLibrary(dll); + DnsFree = GetProcAddress(dll, "DnsFree"); + DnsQuery_A = GetProcAddress(dll, "DnsQuery_A"); + DnsQueryEx = GetProcAddress(dll, "DnsQueryEx"); + DnsCancelQuery = GetProcAddress(dll, "DnsCancelQuery"); + + // if entry points aren't found, GetProcAddress should return null + // I hope this is correct + // Thanks to somewhatlurker + if (DnsQueryEx == NULL) { DnsQueryEx = (FARPROC)& DnsQueryExStub; }; + if (DnsCancelQuery == NULL) { DnsCancelQuery = (FARPROC)& DnsCancelQueryStub; }; + } +} dnsapi; + +void _DnsFree() { dnsapi.DnsFree(); } +void _DnsQuery_A() { dnsapi.DnsQuery_A(); } +void _DnsQueryEx() { dnsapi.DnsQueryEx(); } +void _DnsCancelQuery() { dnsapi.DnsCancelQuery(); } + +#pragma runtime_checks( "", off ) + +#ifdef _DEBUG +#pragma message ("You are compiling the code in Debug - be warned that wrappers for export functions may not have correct code generated") +#endif + +void _DllRegisterServer() { shared.DllRegisterServer(); } +void _DllUnregisterServer() { shared.DllUnregisterServer(); } +void _DllCanUnloadNow() { shared.DllCanUnloadNow(); } +void _DllGetClassObject() { shared.DllGetClassObject(); } + +#pragma runtime_checks( "", restore ) \ No newline at end of file diff --git a/source/PD-Loader/x64.def b/source/PD-Loader/x64.def new file mode 100644 index 0000000..9fa3e38 --- /dev/null +++ b/source/PD-Loader/x64.def @@ -0,0 +1,10 @@ +LIBRARY "dnsapi" +EXPORTS +DnsFree = _DnsFree +DnsQuery_A = _DnsQuery_A +DnsQueryEx = _DnsQueryEx +DnsCancelQuery = _DnsCancelQuery +DllCanUnloadNow = _DllCanUnloadNow PRIVATE +DllGetClassObject = _DllGetClassObject PRIVATE +DllRegisterServer = _DllRegisterServer PRIVATE +DllUnregisterServer = _DllUnregisterServer PRIVATE \ No newline at end of file diff --git a/source/plugins/Launcher/Launcher.filters b/source/plugins/Launcher/Launcher.filters new file mode 100644 index 0000000..64d26db --- /dev/null +++ b/source/plugins/Launcher/Launcher.filters @@ -0,0 +1,30 @@ + + + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/source/plugins/Launcher/Launcher.vcxproj b/source/plugins/Launcher/Launcher.vcxproj new file mode 100644 index 0000000..c698cb9 --- /dev/null +++ b/source/plugins/Launcher/Launcher.vcxproj @@ -0,0 +1,182 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {60d5e9f4-335f-402b-9a07-d78674dffc9b} + v4.5 + ManagedCProj + Launcher + 10.0 + Launcher + + + + Application + true + v142 + true + Unicode + + + Application + false + v142 + true + Unicode + + + DynamicLibrary + true + v142 + true + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + true + .dva + + + false + + + false + .dva + $(ProjectName) + + + + Use + pch.h + Level3 + Disabled + WIN32;_DEBUG;%(PreprocessorDefinitions) + + + + Windows + main + + + + + NotUsing + + + Level3 + Disabled + _DEBUG;%(PreprocessorDefinitions) + ..\..\..\dependencies\detours\include;..\..\..\dependencies\freeglut\include;%(AdditionalIncludeDirectories) + stdcpp17 + + + User32.lib + Windows + + + ..\..\..\dependencies\detours\lib;..\..\..\dependencies\freeglut\lib;%(AdditionalLibraryDirectories) + + + + + Use + pch.h + Level3 + WIN32;NDEBUG;%(PreprocessorDefinitions) + + + + Windows + main + + + + + NotUsing + + + Level3 + NDEBUG;%(PreprocessorDefinitions) + ..\..\..\dependencies\detours\include;..\..\..\dependencies\freeglut\include;%(AdditionalIncludeDirectories) + stdcpp17 + + + User32.lib + Windows + + + ..\..\..\dependencies\detours\lib;..\..\..\dependencies\freeglut\lib;%(AdditionalLibraryDirectories) + + + + + + + + + + + + + + + + + + CppForm + + + + + ui.h + + + + + + \ No newline at end of file diff --git a/source/plugins/Launcher/TabPadding.cpp b/source/plugins/Launcher/TabPadding.cpp new file mode 100644 index 0000000..ddf136b --- /dev/null +++ b/source/plugins/Launcher/TabPadding.cpp @@ -0,0 +1,44 @@ +#include "TabPadding.h" +//#include + +// ported from https://stackoverflow.com/a/7785745 +// original code by user LarsTech https://stackoverflow.com/users/719186/larstech + +TabPadding::TabPadding(TabControl^ tc) +{ + tabControl = tc; + tabControl->Selected += gcnew TabControlEventHandler(this, &TabPadding::tabControl_Selected); + AssignHandle(tc->Handle); +} + +void TabPadding::tabControl_Selected(Object^ sender, TabControlEventArgs^ e) +{ + tabControl->Invalidate(); +} + +void TabPadding::WndProc(Message %m) { + NativeWindow::WndProc(m); + + if (m.Msg == 15) { //WM_PAINT + Graphics^ g = Graphics::FromHwnd(m.HWnd); + + //Replace the outside white borders: + if (tabControl->Parent) { + g->SetClip(System::Drawing::Rectangle(0, 0, tabControl->Width - 2, tabControl->Height - 1), Drawing2D::CombineMode::Exclude); + g->FillRectangle(gcnew SolidBrush(tabControl->Parent->BackColor), + System::Drawing::Rectangle(0, tabControl->ItemSize.Height + 2, tabControl->Width, tabControl->Height - (tabControl->ItemSize.Height + 2))); + } + + + //Replace the inside white borders: + if (tabControl->SelectedTab) { + g->ResetClip(); + System::Drawing::Rectangle r = tabControl->SelectedTab->Bounds; + g->SetClip(r, Drawing2D::CombineMode::Exclude); + g->FillRectangle(gcnew SolidBrush(tabControl->SelectedTab->BackColor), + System::Drawing::Rectangle(r.Left - 3, r.Top - 1, r.Width + 4, r.Height + 3)); + } + + delete g; + } +} \ No newline at end of file diff --git a/source/plugins/Launcher/TabPadding.h b/source/plugins/Launcher/TabPadding.h new file mode 100644 index 0000000..3e02c1e --- /dev/null +++ b/source/plugins/Launcher/TabPadding.h @@ -0,0 +1,19 @@ +#pragma once +using namespace System::Windows::Forms; +using namespace System::Drawing; + +// ported from https://stackoverflow.com/a/7785745 +// original code by user LarsTech https://stackoverflow.com/users/719186/larstech + +ref class TabPadding : public NativeWindow +{ +public: + TabPadding(TabControl^ tc); + +private: + TabControl^ tabControl; + void tabControl_Selected(Object^ sender, TabControlEventArgs^ e); + +protected: + virtual void WndProc(Message %m) override; +}; \ No newline at end of file diff --git a/source/plugins/Launcher/background.png b/source/plugins/Launcher/background.png new file mode 100644 index 0000000000000000000000000000000000000000..eef80fb1ac2019251c98c8097dc5a0b7e4bc96d2 GIT binary patch literal 234375 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 +#pragma comment(lib, "detours.lib") + +using namespace System; +using namespace System::Windows::Forms; + +[STAThread] +int showUI() { + if (Environment::OSVersion->Version->Major >= 6) + SetProcessDPIAware(); + + Application::EnableVisualStyles(); + Application::SetCompatibleTextRenderingDefault(false); + Application::Run(gcnew Launcher::ui()); + return 0; +} + +int hookedMain(int argc, const char** argv, const char** envp) +{ + for (int i = 0; i < argc; ++i) + { + arg = argv[i]; + if (arg == "--launch" || nSkipLauncher) + return divaMain(argc, argv, envp); + } + return showUI(); +} + +BOOL APIENTRY DllMain(HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved +) +{ + if (ul_reason_for_call == DLL_PROCESS_ATTACH) + { + DisableThreadLibraryCalls(hModule); + DetourTransactionBegin(); + DetourUpdateThread(GetCurrentThread()); + DetourAttach(&(PVOID&)divaMain, hookedMain); + DetourTransactionCommit(); + } + return TRUE; +} \ No newline at end of file diff --git a/source/plugins/Launcher/framework.h b/source/plugins/Launcher/framework.h new file mode 100644 index 0000000..d4f639f --- /dev/null +++ b/source/plugins/Launcher/framework.h @@ -0,0 +1,60 @@ +#pragma once + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +// Windows Header Files +#include +#include + +int (__cdecl* divaMain)(int argc, const char** argv, const char** envp) = (int(__cdecl*)(int argc, const char** argv, const char** envp))0x140194D90; + +using namespace std; + +string arg; + +wstring ExePath() { + WCHAR buffer[MAX_PATH]; + GetModuleFileNameW(NULL, buffer, MAX_PATH); + return wstring(buffer); +} + +wstring DirPath() { + wstring exepath = ExePath(); + wstring::size_type pos = exepath.find_last_of(L"\\/"); + return exepath.substr(0, pos); +} + +wstring DIVA_EXECUTABLE_STRING = ExePath(); +LPCWSTR DIVA_EXECUTABLE = DIVA_EXECUTABLE_STRING.c_str(); + +wstring DIVA_EXECUTABLE_LAUNCH_STRING = DIVA_EXECUTABLE_STRING + L" --launch"; +LPWSTR DIVA_EXECUTABLE_LAUNCH = const_cast(DIVA_EXECUTABLE_LAUNCH_STRING.c_str()); + +wstring CONFIG_FILE_STRING = DirPath() + L"\\plugins\\config.ini"; +LPCWSTR CONFIG_FILE = CONFIG_FILE_STRING.c_str(); + +int nDisplay = GetPrivateProfileIntW(L"resolution", L"display", 0, CONFIG_FILE); +int nWidth = GetPrivateProfileIntW(L"resolution", L"width", 1280, CONFIG_FILE); +int nHeight = GetPrivateProfileIntW(L"resolution", L"height", 720, CONFIG_FILE); + +int nIntRes = GetPrivateProfileIntW(L"resolution", L"r.enable", FALSE, CONFIG_FILE); +int nIntResWidth = GetPrivateProfileIntW(L"resolution", L"r.width", 1280, CONFIG_FILE); +int nIntResHeight = GetPrivateProfileIntW(L"resolution", L"r.height", 720, CONFIG_FILE); + +int nBitDepth = GetPrivateProfileIntW(L"resolution", L"bitdepth", 32, CONFIG_FILE); +int nRefreshRate = GetPrivateProfileIntW(L"resolution", L"refreshrate", 60, CONFIG_FILE); + +int nCursor = GetPrivateProfileIntW(L"patches", L"cursor", TRUE, CONFIG_FILE); +int nHideFreeplay = GetPrivateProfileIntW(L"patches", L"hide_freeplay", FALSE, CONFIG_FILE); +int nStatusIcons = GetPrivateProfileIntW(L"patches", L"status_icons", 0, CONFIG_FILE); +int nHidePVWatermark = GetPrivateProfileIntW(L"patches", L"hide_pv_watermark", FALSE, CONFIG_FILE); +int nNoPVUi = GetPrivateProfileIntW(L"patches", L"no_pv_ui", FALSE, CONFIG_FILE); +int nHideVolCtrl = GetPrivateProfileIntW(L"patches", L"hide_volume", FALSE, CONFIG_FILE); +int nNoLyrics = GetPrivateProfileIntW(L"patches", L"no_lyrics", FALSE, CONFIG_FILE); +int nNoMovies = GetPrivateProfileIntW(L"patches", L"no_movies", FALSE, CONFIG_FILE); +int nNoError = GetPrivateProfileIntW(L"patches", L"no_error", TRUE, CONFIG_FILE); + +int nTAA = GetPrivateProfileIntW(L"graphics", L"TAA", TRUE, CONFIG_FILE); +int nMLAA = GetPrivateProfileIntW(L"graphics", L"MLAA", TRUE, CONFIG_FILE); +int nFPSLimit = GetPrivateProfileIntW(L"graphics", L"FPS.Limit", 0, CONFIG_FILE); + +int nSkipLauncher = GetPrivateProfileIntW(L"launcher", L"skip", FALSE, CONFIG_FILE); diff --git a/source/plugins/Launcher/ui.h b/source/plugins/Launcher/ui.h new file mode 100644 index 0000000..53bcadf --- /dev/null +++ b/source/plugins/Launcher/ui.h @@ -0,0 +1,1187 @@ +#pragma once +#include "framework.h" +#include +#include +#include "TabPadding.h" + +namespace Launcher { + + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + using namespace msclr::interop; + + ///

+ /// Summary for ui + /// + public ref class ui : public System::Windows::Forms::Form + { + public: + ui(void) + { + InitializeComponent(); + this->button_Discord->Cursor = Cursors::Hand; + this->ClientSize = Drawing::Size(444, 323); + TabPadding^ tabpad = gcnew TabPadding(tabControl); + + // Beta version, components not working yet and tab disabled + tabPage_Components->Enabled = false; + + comboBox_Display->SelectedIndex = nDisplay; + + DEVMODEW dm = { 0 }; + dm.dmSize = sizeof(dm); + for (int iModeNum = 0; EnumDisplaySettingsW(NULL, iModeNum, &dm) != 0; iModeNum++) + { + if (!comboBox_Resolution->Items->Contains(dm.dmPelsWidth + "x" + dm.dmPelsHeight)) + { + comboBox_Resolution->Items->Add(dm.dmPelsWidth + "x" + dm.dmPelsHeight); + } + if (!comboBox_BitDepth->Items->Contains(dm.dmBitsPerPel)) + { + comboBox_BitDepth->Items->Add(dm.dmBitsPerPel); + } + if (!comboBox_RefreshRate->Items->Contains(dm.dmDisplayFrequency)) + { + comboBox_RefreshRate->Items->Add(dm.dmDisplayFrequency); + } + } + + comboBox_intResolution->Items->Add("640x480"); + comboBox_intResolution->Items->Add("960x720"); + comboBox_intResolution->Items->Add("1280x720"); + comboBox_intResolution->Items->Add("1920x1080"); + comboBox_intResolution->Items->Add("2560x1440"); + comboBox_intResolution->Items->Add("3840x2160"); + comboBox_intResolution->Items->Add("5120x2880"); + comboBox_intResolution->Items->Add("7680x4320"); + + comboBox_Resolution->Text = nWidth.ToString() + "x" + nHeight.ToString(); + checkBox_InternalRes->Checked = nIntRes; + comboBox_intResolution->Text = nIntResWidth.ToString() + "x" + nIntResHeight.ToString(); + checkBox_Cursor->Checked = nCursor; + checkBox_HideFreeplay->Checked = nHideFreeplay; + checkBox_HidePVWatermark->Checked = nHidePVWatermark; + checkBox_NoPVUi->Checked = nNoPVUi; + checkBox_NoLyrics->Checked = nNoLyrics; + checkBox_NoMovies->Checked = nNoMovies; + checkBox_HideVolCtrl->Checked = nHideVolCtrl; + comboBox_StatusIcons->SelectedIndex = nStatusIcons; + checkBox_TAA->Checked = nTAA; + checkBox_MLAA->Checked = nMLAA; + checkBox_DisableErrorBanner->Checked = nNoError; + textBox_FPSLimit->Text = nFPSLimit.ToString(); + checkBox_SkipLauncher->Checked = nSkipLauncher; + comboBox_BitDepth->Text = nBitDepth.ToString(); + comboBox_RefreshRate->Text = nRefreshRate.ToString(); + + if (!nIntRes) + { + comboBox_intResolution->Enabled = false; + } + if (nDisplay == 0 || nDisplay == 2) + { + comboBox_Resolution->Enabled = true; + } + else + { + comboBox_Resolution->Enabled = false; + } + if (comboBox_Display->SelectedIndex == 2) + { + comboBox_BitDepth->Enabled = true; + comboBox_RefreshRate->Enabled = true; + } + else + { + comboBox_BitDepth->Enabled = false; + comboBox_RefreshRate->Enabled = false; + } + } + + protected: + /// + /// Clean up any resources being used. + /// + ~ui() + { + if (components) + { + delete components; + } + } + private: System::Windows::Forms::Button^ button_Launch; + private: System::Windows::Forms::Button^ button_Exit; + private: System::Windows::Forms::Label^ label_Resolution; + + protected: + + + + private: System::Windows::Forms::GroupBox^ groupBox_ScreenRes; + + + private: System::Windows::Forms::TabControl^ tabControl; + private: System::Windows::Forms::TabPage^ tabPage_Resolution; + private: System::Windows::Forms::GroupBox^ groupBox_InternalRes; + private: System::Windows::Forms::CheckBox^ checkBox_InternalRes; + private: System::Windows::Forms::TabPage^ tabPage_Components; + private: System::Windows::Forms::CheckBox^ checkBox_sys_timer; + private: System::Windows::Forms::CheckBox^ checkBox_touch_panel_emulator; + private: System::Windows::Forms::CheckBox^ checkBox_touch_slider_emulator; + private: System::Windows::Forms::CheckBox^ checkBox_input_emulator; + private: System::Windows::Forms::CheckBox^ checkBox_player_data_manager; + + private: System::Windows::Forms::CheckBox^ checkBox_frame_rate_manager; + private: System::Windows::Forms::CheckBox^ checkBox_stage_manager; + private: System::Windows::Forms::CheckBox^ checkBox_fast_loader; + private: System::Windows::Forms::CheckBox^ checkBox_camera_controller; + private: System::Windows::Forms::Panel^ panel_Components; + + private: System::Windows::Forms::CheckBox^ checkBox_scale_component; + private: System::Windows::Forms::CheckBox^ checkBox_fps_limiter; + private: System::Windows::Forms::TabPage^ tabPage_Patches; + private: System::Windows::Forms::Panel^ panel_Patches; + + + + private: System::Windows::Forms::Label^ label_FPSLimit; + + + + private: System::Windows::Forms::CheckBox^ checkBox_Cursor; + + private: System::Windows::Forms::Label^ label_intResolution; + + + + + + + private: System::Windows::Forms::TextBox^ textBox_FPSLimit; + private: System::Windows::Forms::CheckBox^ checkBox_HideFreeplay; + private: System::Windows::Forms::CheckBox^ checkBox_MLAA; + private: System::Windows::Forms::CheckBox^ checkBox_TAA; + + private: System::Windows::Forms::CheckBox^ checkBox_HidePVWatermark; + private: System::Windows::Forms::CheckBox^ checkBox_NoLyrics; + private: System::Windows::Forms::CheckBox^ checkBox_NoPVUi; + private: System::Windows::Forms::CheckBox^ checkBox_HideVolCtrl; + private: System::Windows::Forms::ComboBox^ comboBox_Display; + private: System::Windows::Forms::Label^ label_Display; +private: System::Windows::Forms::ComboBox^ comboBox_Resolution; +private: System::Windows::Forms::ComboBox^ comboBox_intResolution; + +private: System::Windows::Forms::ComboBox^ comboBox_StatusIcons; +private: System::Windows::Forms::Label^ label_StatusIcons; +private: System::Windows::Forms::Button^ button_Discord; + +private: System::Windows::Forms::Panel^ panel_innerPatches; + + +private: System::Windows::Forms::TableLayoutPanel^ tableLayoutPanel_FPSLimit; + +private: System::Windows::Forms::TableLayoutPanel^ tableLayoutPanel_Status; + + + + + + +private: System::Windows::Forms::CheckBox^ checkBox_NoMovies; +private: System::Windows::Forms::Label^ label_Soon; +private: System::Windows::Forms::Button^ button_github; +private: System::Windows::Forms::CheckBox^ checkBox_DisableErrorBanner; +private: System::Windows::Forms::CheckBox^ checkBox_SkipLauncher; +private: System::Windows::Forms::TableLayoutPanel^ tableLayoutPanel_ScreenRes; +private: System::Windows::Forms::TableLayoutPanel^ tableLayoutPanel_IntRes; +private: System::Windows::Forms::Label^ label_RefreshRate; +private: System::Windows::Forms::ComboBox^ comboBox_BitDepth; +private: System::Windows::Forms::ComboBox^ comboBox_RefreshRate; +private: System::Windows::Forms::Label^ label_BitDepth; + + + + + + private: + /// + /// Required designer variable. + /// + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + void InitializeComponent(void) + { + System::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(ui::typeid)); + this->button_Launch = (gcnew System::Windows::Forms::Button()); + this->button_Exit = (gcnew System::Windows::Forms::Button()); + this->label_Resolution = (gcnew System::Windows::Forms::Label()); + this->groupBox_ScreenRes = (gcnew System::Windows::Forms::GroupBox()); + this->tableLayoutPanel_ScreenRes = (gcnew System::Windows::Forms::TableLayoutPanel()); + this->label_RefreshRate = (gcnew System::Windows::Forms::Label()); + this->label_Display = (gcnew System::Windows::Forms::Label()); + this->comboBox_Resolution = (gcnew System::Windows::Forms::ComboBox()); + this->comboBox_Display = (gcnew System::Windows::Forms::ComboBox()); + this->comboBox_BitDepth = (gcnew System::Windows::Forms::ComboBox()); + this->comboBox_RefreshRate = (gcnew System::Windows::Forms::ComboBox()); + this->label_BitDepth = (gcnew System::Windows::Forms::Label()); + this->tabControl = (gcnew System::Windows::Forms::TabControl()); + this->tabPage_Resolution = (gcnew System::Windows::Forms::TabPage()); + this->groupBox_InternalRes = (gcnew System::Windows::Forms::GroupBox()); + this->tableLayoutPanel_IntRes = (gcnew System::Windows::Forms::TableLayoutPanel()); + this->comboBox_intResolution = (gcnew System::Windows::Forms::ComboBox()); + this->checkBox_InternalRes = (gcnew System::Windows::Forms::CheckBox()); + this->label_intResolution = (gcnew System::Windows::Forms::Label()); + this->tabPage_Patches = (gcnew System::Windows::Forms::TabPage()); + this->panel_Patches = (gcnew System::Windows::Forms::Panel()); + this->panel_innerPatches = (gcnew System::Windows::Forms::Panel()); + this->checkBox_SkipLauncher = (gcnew System::Windows::Forms::CheckBox()); + this->checkBox_DisableErrorBanner = (gcnew System::Windows::Forms::CheckBox()); + this->checkBox_NoMovies = (gcnew System::Windows::Forms::CheckBox()); + this->checkBox_Cursor = (gcnew System::Windows::Forms::CheckBox()); + this->tableLayoutPanel_FPSLimit = (gcnew System::Windows::Forms::TableLayoutPanel()); + this->textBox_FPSLimit = (gcnew System::Windows::Forms::TextBox()); + this->label_FPSLimit = (gcnew System::Windows::Forms::Label()); + this->checkBox_TAA = (gcnew System::Windows::Forms::CheckBox()); + this->tableLayoutPanel_Status = (gcnew System::Windows::Forms::TableLayoutPanel()); + this->label_StatusIcons = (gcnew System::Windows::Forms::Label()); + this->comboBox_StatusIcons = (gcnew System::Windows::Forms::ComboBox()); + this->checkBox_MLAA = (gcnew System::Windows::Forms::CheckBox()); + this->checkBox_HideFreeplay = (gcnew System::Windows::Forms::CheckBox()); + this->checkBox_HidePVWatermark = (gcnew System::Windows::Forms::CheckBox()); + this->checkBox_HideVolCtrl = (gcnew System::Windows::Forms::CheckBox()); + this->checkBox_NoLyrics = (gcnew System::Windows::Forms::CheckBox()); + this->checkBox_NoPVUi = (gcnew System::Windows::Forms::CheckBox()); + this->tabPage_Components = (gcnew System::Windows::Forms::TabPage()); + this->panel_Components = (gcnew System::Windows::Forms::Panel()); + this->label_Soon = (gcnew System::Windows::Forms::Label()); + this->checkBox_fps_limiter = (gcnew System::Windows::Forms::CheckBox()); + this->checkBox_scale_component = (gcnew System::Windows::Forms::CheckBox()); + this->checkBox_camera_controller = (gcnew System::Windows::Forms::CheckBox()); + this->checkBox_input_emulator = (gcnew System::Windows::Forms::CheckBox()); + this->checkBox_fast_loader = (gcnew System::Windows::Forms::CheckBox()); + this->checkBox_touch_slider_emulator = (gcnew System::Windows::Forms::CheckBox()); + this->checkBox_stage_manager = (gcnew System::Windows::Forms::CheckBox()); + this->checkBox_touch_panel_emulator = (gcnew System::Windows::Forms::CheckBox()); + this->checkBox_frame_rate_manager = (gcnew System::Windows::Forms::CheckBox()); + this->checkBox_sys_timer = (gcnew System::Windows::Forms::CheckBox()); + this->checkBox_player_data_manager = (gcnew System::Windows::Forms::CheckBox()); + this->button_Discord = (gcnew System::Windows::Forms::Button()); + this->button_github = (gcnew System::Windows::Forms::Button()); + this->groupBox_ScreenRes->SuspendLayout(); + this->tableLayoutPanel_ScreenRes->SuspendLayout(); + this->tabControl->SuspendLayout(); + this->tabPage_Resolution->SuspendLayout(); + this->groupBox_InternalRes->SuspendLayout(); + this->tableLayoutPanel_IntRes->SuspendLayout(); + this->tabPage_Patches->SuspendLayout(); + this->panel_Patches->SuspendLayout(); + this->panel_innerPatches->SuspendLayout(); + this->tableLayoutPanel_FPSLimit->SuspendLayout(); + this->tableLayoutPanel_Status->SuspendLayout(); + this->tabPage_Components->SuspendLayout(); + this->panel_Components->SuspendLayout(); + this->SuspendLayout(); + // + // button_Launch + // + this->button_Launch->FlatAppearance->BorderColor = System::Drawing::SystemColors::Control; + this->button_Launch->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->button_Launch->Location = System::Drawing::Point(18, 267); + this->button_Launch->Name = L"button_Launch"; + this->button_Launch->Size = System::Drawing::Size(75, 23); + this->button_Launch->TabIndex = 20; + this->button_Launch->Text = L"Launch"; + this->button_Launch->Click += gcnew System::EventHandler(this, &ui::Button_Launch_Click); + // + // button_Exit + // + this->button_Exit->DialogResult = System::Windows::Forms::DialogResult::Cancel; + this->button_Exit->FlatAppearance->BorderColor = System::Drawing::SystemColors::Control; + this->button_Exit->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->button_Exit->Location = System::Drawing::Point(139, 267); + this->button_Exit->Name = L"button_Exit"; + this->button_Exit->Size = System::Drawing::Size(75, 23); + this->button_Exit->TabIndex = 21; + this->button_Exit->Text = L"Exit"; + this->button_Exit->Click += gcnew System::EventHandler(this, &ui::Button_Exit_Click); + // + // label_Resolution + // + this->label_Resolution->Anchor = System::Windows::Forms::AnchorStyles::Left; + this->label_Resolution->AutoSize = true; + this->label_Resolution->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->label_Resolution->Location = System::Drawing::Point(3, 32); + this->label_Resolution->Name = L"label_Resolution"; + this->label_Resolution->Size = System::Drawing::Size(60, 13); + this->label_Resolution->TabIndex = 11; + this->label_Resolution->Text = L"Resolution:"; + // + // groupBox_ScreenRes + // + this->groupBox_ScreenRes->Controls->Add(this->tableLayoutPanel_ScreenRes); + this->groupBox_ScreenRes->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->groupBox_ScreenRes->ForeColor = System::Drawing::Color::White; + this->groupBox_ScreenRes->Location = System::Drawing::Point(8, 6); + this->groupBox_ScreenRes->Name = L"groupBox_ScreenRes"; + this->groupBox_ScreenRes->Size = System::Drawing::Size(208, 133); + this->groupBox_ScreenRes->TabIndex = 10; + this->groupBox_ScreenRes->TabStop = false; + this->groupBox_ScreenRes->Text = L"Screen Resolution"; + // + // tableLayoutPanel_ScreenRes + // + this->tableLayoutPanel_ScreenRes->ColumnCount = 2; + this->tableLayoutPanel_ScreenRes->ColumnStyles->Add((gcnew System::Windows::Forms::ColumnStyle(System::Windows::Forms::SizeType::Percent, + 50))); + this->tableLayoutPanel_ScreenRes->ColumnStyles->Add((gcnew System::Windows::Forms::ColumnStyle(System::Windows::Forms::SizeType::Percent, + 50))); + this->tableLayoutPanel_ScreenRes->Controls->Add(this->label_RefreshRate, 0, 3); + this->tableLayoutPanel_ScreenRes->Controls->Add(this->label_Display, 0, 0); + this->tableLayoutPanel_ScreenRes->Controls->Add(this->comboBox_Resolution, 1, 1); + this->tableLayoutPanel_ScreenRes->Controls->Add(this->label_Resolution, 0, 1); + this->tableLayoutPanel_ScreenRes->Controls->Add(this->comboBox_Display, 1, 0); + this->tableLayoutPanel_ScreenRes->Controls->Add(this->comboBox_BitDepth, 1, 2); + this->tableLayoutPanel_ScreenRes->Controls->Add(this->comboBox_RefreshRate, 1, 3); + this->tableLayoutPanel_ScreenRes->Controls->Add(this->label_BitDepth, 0, 2); + this->tableLayoutPanel_ScreenRes->Location = System::Drawing::Point(9, 19); + this->tableLayoutPanel_ScreenRes->Name = L"tableLayoutPanel_ScreenRes"; + this->tableLayoutPanel_ScreenRes->RowCount = 4; + this->tableLayoutPanel_ScreenRes->RowStyles->Add((gcnew System::Windows::Forms::RowStyle(System::Windows::Forms::SizeType::Percent, + 47.36842F))); + this->tableLayoutPanel_ScreenRes->RowStyles->Add((gcnew System::Windows::Forms::RowStyle(System::Windows::Forms::SizeType::Percent, + 52.63158F))); + this->tableLayoutPanel_ScreenRes->RowStyles->Add((gcnew System::Windows::Forms::RowStyle(System::Windows::Forms::SizeType::Absolute, + 26))); + this->tableLayoutPanel_ScreenRes->RowStyles->Add((gcnew System::Windows::Forms::RowStyle(System::Windows::Forms::SizeType::Absolute, + 28))); + this->tableLayoutPanel_ScreenRes->Size = System::Drawing::Size(193, 107); + this->tableLayoutPanel_ScreenRes->TabIndex = 15; + // + // label_RefreshRate + // + this->label_RefreshRate->Anchor = System::Windows::Forms::AnchorStyles::Left; + this->label_RefreshRate->AutoSize = true; + this->label_RefreshRate->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->label_RefreshRate->Location = System::Drawing::Point(3, 86); + this->label_RefreshRate->Name = L"label_RefreshRate"; + this->label_RefreshRate->Size = System::Drawing::Size(73, 13); + this->label_RefreshRate->TabIndex = 105; + this->label_RefreshRate->Text = L"Refresh Rate:"; + // + // label_Display + // + this->label_Display->Anchor = System::Windows::Forms::AnchorStyles::Left; + this->label_Display->AutoSize = true; + this->label_Display->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->label_Display->Location = System::Drawing::Point(3, 6); + this->label_Display->Name = L"label_Display"; + this->label_Display->Size = System::Drawing::Size(44, 13); + this->label_Display->TabIndex = 13; + this->label_Display->Text = L"Display:"; + // + // comboBox_Resolution + // + this->comboBox_Resolution->Anchor = System::Windows::Forms::AnchorStyles::Left; + this->comboBox_Resolution->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->comboBox_Resolution->FormattingEnabled = true; + this->comboBox_Resolution->Location = System::Drawing::Point(99, 28); + this->comboBox_Resolution->Name = L"comboBox_Resolution"; + this->comboBox_Resolution->Size = System::Drawing::Size(85, 21); + this->comboBox_Resolution->TabIndex = 12; + // + // comboBox_Display + // + this->comboBox_Display->Anchor = System::Windows::Forms::AnchorStyles::Left; + this->comboBox_Display->DropDownStyle = System::Windows::Forms::ComboBoxStyle::DropDownList; + this->comboBox_Display->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->comboBox_Display->FormattingEnabled = true; + this->comboBox_Display->Items->AddRange(gcnew cli::array< System::Object^ >(3) { L"Windowed", L"Borderless", L"Fullscreen" }); + this->comboBox_Display->Location = System::Drawing::Point(99, 3); + this->comboBox_Display->Name = L"comboBox_Display"; + this->comboBox_Display->Size = System::Drawing::Size(85, 21); + this->comboBox_Display->TabIndex = 14; + this->comboBox_Display->SelectedIndexChanged += gcnew System::EventHandler(this, &ui::ComboBox_Display_SelectedIndexChanged); + // + // comboBox_BitDepth + // + this->comboBox_BitDepth->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->comboBox_BitDepth->FormattingEnabled = true; + this->comboBox_BitDepth->Location = System::Drawing::Point(99, 55); + this->comboBox_BitDepth->Name = L"comboBox_BitDepth"; + this->comboBox_BitDepth->Size = System::Drawing::Size(57, 21); + this->comboBox_BitDepth->TabIndex = 102; + // + // comboBox_RefreshRate + // + this->comboBox_RefreshRate->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->comboBox_RefreshRate->FormattingEnabled = true; + this->comboBox_RefreshRate->Location = System::Drawing::Point(99, 81); + this->comboBox_RefreshRate->Name = L"comboBox_RefreshRate"; + this->comboBox_RefreshRate->Size = System::Drawing::Size(57, 21); + this->comboBox_RefreshRate->TabIndex = 103; + // + // label_BitDepth + // + this->label_BitDepth->Anchor = System::Windows::Forms::AnchorStyles::Left; + this->label_BitDepth->AutoSize = true; + this->label_BitDepth->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->label_BitDepth->Location = System::Drawing::Point(3, 58); + this->label_BitDepth->Name = L"label_BitDepth"; + this->label_BitDepth->Size = System::Drawing::Size(54, 13); + this->label_BitDepth->TabIndex = 104; + this->label_BitDepth->Text = L"Bit Depth:"; + // + // tabControl + // + this->tabControl->Appearance = System::Windows::Forms::TabAppearance::FlatButtons; + this->tabControl->Controls->Add(this->tabPage_Resolution); + this->tabControl->Controls->Add(this->tabPage_Patches); + this->tabControl->Controls->Add(this->tabPage_Components); + this->tabControl->Location = System::Drawing::Point(0, 0); + this->tabControl->Name = L"tabControl"; + this->tabControl->SelectedIndex = 0; + this->tabControl->Size = System::Drawing::Size(233, 261); + this->tabControl->TabIndex = 10; + // + // tabPage_Resolution + // + this->tabPage_Resolution->BackColor = System::Drawing::Color::FromArgb(static_cast(static_cast(64)), + static_cast(static_cast(64)), static_cast(static_cast(64))); + this->tabPage_Resolution->Controls->Add(this->groupBox_InternalRes); + this->tabPage_Resolution->Controls->Add(this->groupBox_ScreenRes); + this->tabPage_Resolution->Location = System::Drawing::Point(4, 25); + this->tabPage_Resolution->Name = L"tabPage_Resolution"; + this->tabPage_Resolution->Padding = System::Windows::Forms::Padding(3); + this->tabPage_Resolution->Size = System::Drawing::Size(225, 232); + this->tabPage_Resolution->TabIndex = 0; + this->tabPage_Resolution->Text = L"Resolution"; + // + // groupBox_InternalRes + // + this->groupBox_InternalRes->Controls->Add(this->tableLayoutPanel_IntRes); + this->groupBox_InternalRes->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->groupBox_InternalRes->ForeColor = System::Drawing::Color::White; + this->groupBox_InternalRes->Location = System::Drawing::Point(8, 145); + this->groupBox_InternalRes->Name = L"groupBox_InternalRes"; + this->groupBox_InternalRes->Size = System::Drawing::Size(208, 83); + this->groupBox_InternalRes->TabIndex = 20; + this->groupBox_InternalRes->TabStop = false; + this->groupBox_InternalRes->Text = L"Internal Resolution"; + // + // tableLayoutPanel_IntRes + // + this->tableLayoutPanel_IntRes->ColumnCount = 2; + this->tableLayoutPanel_IntRes->ColumnStyles->Add((gcnew System::Windows::Forms::ColumnStyle(System::Windows::Forms::SizeType::Percent, + 50))); + this->tableLayoutPanel_IntRes->ColumnStyles->Add((gcnew System::Windows::Forms::ColumnStyle(System::Windows::Forms::SizeType::Percent, + 50))); + this->tableLayoutPanel_IntRes->Controls->Add(this->comboBox_intResolution, 1, 1); + this->tableLayoutPanel_IntRes->Controls->Add(this->checkBox_InternalRes, 0, 0); + this->tableLayoutPanel_IntRes->Controls->Add(this->label_intResolution, 0, 1); + this->tableLayoutPanel_IntRes->Location = System::Drawing::Point(6, 19); + this->tableLayoutPanel_IntRes->Name = L"tableLayoutPanel_IntRes"; + this->tableLayoutPanel_IntRes->RowCount = 2; + this->tableLayoutPanel_IntRes->RowStyles->Add((gcnew System::Windows::Forms::RowStyle(System::Windows::Forms::SizeType::Percent, + 50))); + this->tableLayoutPanel_IntRes->RowStyles->Add((gcnew System::Windows::Forms::RowStyle(System::Windows::Forms::SizeType::Percent, + 50))); + this->tableLayoutPanel_IntRes->Size = System::Drawing::Size(196, 57); + this->tableLayoutPanel_IntRes->TabIndex = 24; + // + // comboBox_intResolution + // + this->comboBox_intResolution->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->comboBox_intResolution->FormattingEnabled = true; + this->comboBox_intResolution->Location = System::Drawing::Point(101, 31); + this->comboBox_intResolution->Name = L"comboBox_intResolution"; + this->comboBox_intResolution->Size = System::Drawing::Size(85, 21); + this->comboBox_intResolution->TabIndex = 23; + // + // checkBox_InternalRes + // + this->checkBox_InternalRes->Anchor = System::Windows::Forms::AnchorStyles::Left; + this->checkBox_InternalRes->AutoSize = true; + this->checkBox_InternalRes->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->checkBox_InternalRes->Location = System::Drawing::Point(3, 5); + this->checkBox_InternalRes->Name = L"checkBox_InternalRes"; + this->checkBox_InternalRes->Size = System::Drawing::Size(56, 17); + this->checkBox_InternalRes->TabIndex = 21; + this->checkBox_InternalRes->Text = L"Enable"; + this->checkBox_InternalRes->CheckedChanged += gcnew System::EventHandler(this, &ui::CheckBox_InternalRes_CheckedChanged); + // + // label_intResolution + // + this->label_intResolution->Anchor = System::Windows::Forms::AnchorStyles::Left; + this->label_intResolution->AutoSize = true; + this->label_intResolution->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->label_intResolution->Location = System::Drawing::Point(3, 36); + this->label_intResolution->Name = L"label_intResolution"; + this->label_intResolution->Size = System::Drawing::Size(60, 13); + this->label_intResolution->TabIndex = 22; + this->label_intResolution->Text = L"Resolution:"; + // + // tabPage_Patches + // + this->tabPage_Patches->BackColor = System::Drawing::Color::FromArgb(static_cast(static_cast(64)), static_cast(static_cast(64)), + static_cast(static_cast(64))); + this->tabPage_Patches->Controls->Add(this->panel_Patches); + this->tabPage_Patches->Location = System::Drawing::Point(4, 25); + this->tabPage_Patches->Name = L"tabPage_Patches"; + this->tabPage_Patches->Size = System::Drawing::Size(225, 232); + this->tabPage_Patches->TabIndex = 1; + this->tabPage_Patches->Text = L"Options"; + // + // panel_Patches + // + this->panel_Patches->AutoScroll = true; + this->panel_Patches->Controls->Add(this->panel_innerPatches); + this->panel_Patches->Location = System::Drawing::Point(0, 0); + this->panel_Patches->Name = L"panel_Patches"; + this->panel_Patches->Size = System::Drawing::Size(225, 232); + this->panel_Patches->TabIndex = 9; + // + // panel_innerPatches + // + this->panel_innerPatches->Controls->Add(this->checkBox_SkipLauncher); + this->panel_innerPatches->Controls->Add(this->checkBox_DisableErrorBanner); + this->panel_innerPatches->Controls->Add(this->checkBox_NoMovies); + this->panel_innerPatches->Controls->Add(this->checkBox_Cursor); + this->panel_innerPatches->Controls->Add(this->tableLayoutPanel_FPSLimit); + this->panel_innerPatches->Controls->Add(this->checkBox_TAA); + this->panel_innerPatches->Controls->Add(this->tableLayoutPanel_Status); + this->panel_innerPatches->Controls->Add(this->checkBox_MLAA); + this->panel_innerPatches->Controls->Add(this->checkBox_HideFreeplay); + this->panel_innerPatches->Controls->Add(this->checkBox_HidePVWatermark); + this->panel_innerPatches->Controls->Add(this->checkBox_HideVolCtrl); + this->panel_innerPatches->Controls->Add(this->checkBox_NoLyrics); + this->panel_innerPatches->Controls->Add(this->checkBox_NoPVUi); + this->panel_innerPatches->Location = System::Drawing::Point(2, 2); + this->panel_innerPatches->Margin = System::Windows::Forms::Padding(2); + this->panel_innerPatches->Name = L"panel_innerPatches"; + this->panel_innerPatches->Size = System::Drawing::Size(204, 311); + this->panel_innerPatches->TabIndex = 115; + // + // checkBox_SkipLauncher + // + this->checkBox_SkipLauncher->AutoSize = true; + this->checkBox_SkipLauncher->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->checkBox_SkipLauncher->Location = System::Drawing::Point(3, 227); + this->checkBox_SkipLauncher->Name = L"checkBox_SkipLauncher"; + this->checkBox_SkipLauncher->Size = System::Drawing::Size(92, 17); + this->checkBox_SkipLauncher->TabIndex = 116; + this->checkBox_SkipLauncher->Text = L"Skip Launcher"; + // + // checkBox_DisableErrorBanner + // + this->checkBox_DisableErrorBanner->AutoSize = true; + this->checkBox_DisableErrorBanner->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->checkBox_DisableErrorBanner->Location = System::Drawing::Point(3, 204); + this->checkBox_DisableErrorBanner->Name = L"checkBox_DisableErrorBanner"; + this->checkBox_DisableErrorBanner->Size = System::Drawing::Size(120, 17); + this->checkBox_DisableErrorBanner->TabIndex = 115; + this->checkBox_DisableErrorBanner->Text = L"Disable Error Banner"; + // + // checkBox_NoMovies + // + this->checkBox_NoMovies->AutoSize = true; + this->checkBox_NoMovies->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->checkBox_NoMovies->Location = System::Drawing::Point(3, 117); + this->checkBox_NoMovies->Margin = System::Windows::Forms::Padding(2); + this->checkBox_NoMovies->Name = L"checkBox_NoMovies"; + this->checkBox_NoMovies->Size = System::Drawing::Size(95, 17); + this->checkBox_NoMovies->TabIndex = 15; + this->checkBox_NoMovies->Text = L"Disable Movies"; + // + // checkBox_Cursor + // + this->checkBox_Cursor->AutoSize = true; + this->checkBox_Cursor->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->checkBox_Cursor->Location = System::Drawing::Point(3, 3); + this->checkBox_Cursor->Name = L"checkBox_Cursor"; + this->checkBox_Cursor->Size = System::Drawing::Size(53, 17); + this->checkBox_Cursor->TabIndex = 21; + this->checkBox_Cursor->Text = L"Cursor"; + // + // tableLayoutPanel_FPSLimit + // + this->tableLayoutPanel_FPSLimit->ColumnCount = 2; + this->tableLayoutPanel_FPSLimit->ColumnStyles->Add((gcnew System::Windows::Forms::ColumnStyle(System::Windows::Forms::SizeType::Percent, + 41.4966F))); + this->tableLayoutPanel_FPSLimit->ColumnStyles->Add((gcnew System::Windows::Forms::ColumnStyle(System::Windows::Forms::SizeType::Percent, + 58.5034F))); + this->tableLayoutPanel_FPSLimit->Controls->Add(this->textBox_FPSLimit, 1, 0); + this->tableLayoutPanel_FPSLimit->Controls->Add(this->label_FPSLimit, 0, 0); + this->tableLayoutPanel_FPSLimit->Location = System::Drawing::Point(2, 281); + this->tableLayoutPanel_FPSLimit->Margin = System::Windows::Forms::Padding(2); + this->tableLayoutPanel_FPSLimit->Name = L"tableLayoutPanel_FPSLimit"; + this->tableLayoutPanel_FPSLimit->RowCount = 1; + this->tableLayoutPanel_FPSLimit->RowStyles->Add((gcnew System::Windows::Forms::RowStyle(System::Windows::Forms::SizeType::Percent, + 50))); + this->tableLayoutPanel_FPSLimit->Size = System::Drawing::Size(147, 28); + this->tableLayoutPanel_FPSLimit->TabIndex = 114; + // + // textBox_FPSLimit + // + this->textBox_FPSLimit->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle; + this->textBox_FPSLimit->Location = System::Drawing::Point(64, 3); + this->textBox_FPSLimit->MaxLength = 3; + this->textBox_FPSLimit->Name = L"textBox_FPSLimit"; + this->textBox_FPSLimit->Size = System::Drawing::Size(79, 20); + this->textBox_FPSLimit->TabIndex = 111; + this->textBox_FPSLimit->TextChanged += gcnew System::EventHandler(this, &ui::TextBox_FPSLimit_TextChanged); + this->textBox_FPSLimit->KeyPress += gcnew System::Windows::Forms::KeyPressEventHandler(this, &ui::TextBox_FPSLimit_KeyPress); + // + // label_FPSLimit + // + this->label_FPSLimit->Anchor = System::Windows::Forms::AnchorStyles::Left; + this->label_FPSLimit->AutoSize = true; + this->label_FPSLimit->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->label_FPSLimit->Location = System::Drawing::Point(3, 7); + this->label_FPSLimit->Name = L"label_FPSLimit"; + this->label_FPSLimit->Size = System::Drawing::Size(54, 13); + this->label_FPSLimit->TabIndex = 110; + this->label_FPSLimit->Text = L"FPS Limit:"; + this->label_FPSLimit->TextAlign = System::Drawing::ContentAlignment::MiddleLeft; + // + // checkBox_TAA + // + this->checkBox_TAA->AutoSize = true; + this->checkBox_TAA->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->checkBox_TAA->Location = System::Drawing::Point(3, 26); + this->checkBox_TAA->Name = L"checkBox_TAA"; + this->checkBox_TAA->Size = System::Drawing::Size(44, 17); + this->checkBox_TAA->TabIndex = 31; + this->checkBox_TAA->Text = L"TAA"; + // + // tableLayoutPanel_Status + // + this->tableLayoutPanel_Status->ColumnCount = 2; + this->tableLayoutPanel_Status->ColumnStyles->Add((gcnew System::Windows::Forms::ColumnStyle(System::Windows::Forms::SizeType::Percent, + 42.85714F))); + this->tableLayoutPanel_Status->ColumnStyles->Add((gcnew System::Windows::Forms::ColumnStyle(System::Windows::Forms::SizeType::Percent, + 57.14286F))); + this->tableLayoutPanel_Status->Controls->Add(this->label_StatusIcons, 0, 0); + this->tableLayoutPanel_Status->Controls->Add(this->comboBox_StatusIcons, 1, 0); + this->tableLayoutPanel_Status->Location = System::Drawing::Point(2, 249); + this->tableLayoutPanel_Status->Margin = System::Windows::Forms::Padding(2); + this->tableLayoutPanel_Status->Name = L"tableLayoutPanel_Status"; + this->tableLayoutPanel_Status->RowCount = 1; + this->tableLayoutPanel_Status->RowStyles->Add((gcnew System::Windows::Forms::RowStyle(System::Windows::Forms::SizeType::Percent, + 50))); + this->tableLayoutPanel_Status->Size = System::Drawing::Size(147, 28); + this->tableLayoutPanel_Status->TabIndex = 113; + // + // label_StatusIcons + // + this->label_StatusIcons->Anchor = System::Windows::Forms::AnchorStyles::Left; + this->label_StatusIcons->AutoSize = true; + this->label_StatusIcons->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->label_StatusIcons->Location = System::Drawing::Point(3, 1); + this->label_StatusIcons->Name = L"label_StatusIcons"; + this->label_StatusIcons->Size = System::Drawing::Size(40, 26); + this->label_StatusIcons->TabIndex = 80; + this->label_StatusIcons->Text = L"Status Icons:"; + this->label_StatusIcons->TextAlign = System::Drawing::ContentAlignment::MiddleLeft; + // + // comboBox_StatusIcons + // + this->comboBox_StatusIcons->DropDownStyle = System::Windows::Forms::ComboBoxStyle::DropDownList; + this->comboBox_StatusIcons->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->comboBox_StatusIcons->FormattingEnabled = true; + this->comboBox_StatusIcons->Items->AddRange(gcnew cli::array< System::Object^ >(5) { + L"Default", L"Hidden", L"Error", L"OK", + L"Partial OK" + }); + this->comboBox_StatusIcons->Location = System::Drawing::Point(65, 3); + this->comboBox_StatusIcons->Name = L"comboBox_StatusIcons"; + this->comboBox_StatusIcons->Size = System::Drawing::Size(79, 21); + this->comboBox_StatusIcons->TabIndex = 101; + // + // checkBox_MLAA + // + this->checkBox_MLAA->AutoSize = true; + this->checkBox_MLAA->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->checkBox_MLAA->Location = System::Drawing::Point(3, 49); + this->checkBox_MLAA->Name = L"checkBox_MLAA"; + this->checkBox_MLAA->Size = System::Drawing::Size(52, 17); + this->checkBox_MLAA->TabIndex = 41; + this->checkBox_MLAA->Text = L"MLAA"; + // + // checkBox_HideFreeplay + // + this->checkBox_HideFreeplay->AutoSize = true; + this->checkBox_HideFreeplay->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->checkBox_HideFreeplay->Location = System::Drawing::Point(3, 72); + this->checkBox_HideFreeplay->Name = L"checkBox_HideFreeplay"; + this->checkBox_HideFreeplay->Size = System::Drawing::Size(101, 17); + this->checkBox_HideFreeplay->TabIndex = 51; + this->checkBox_HideFreeplay->Text = L"Hide Freeplay"; + // + // checkBox_HidePVWatermark + // + this->checkBox_HidePVWatermark->AutoSize = true; + this->checkBox_HidePVWatermark->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->checkBox_HidePVWatermark->Location = System::Drawing::Point(3, 181); + this->checkBox_HidePVWatermark->Name = L"checkBox_HidePVWatermark"; + this->checkBox_HidePVWatermark->Size = System::Drawing::Size(117, 17); + this->checkBox_HidePVWatermark->TabIndex = 91; + this->checkBox_HidePVWatermark->Text = L"Hide PV Watermark"; + // + // checkBox_HideVolCtrl + // + this->checkBox_HideVolCtrl->AutoSize = true; + this->checkBox_HideVolCtrl->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->checkBox_HideVolCtrl->Location = System::Drawing::Point(3, 95); + this->checkBox_HideVolCtrl->Name = L"checkBox_HideVolCtrl"; + this->checkBox_HideVolCtrl->Size = System::Drawing::Size(122, 17); + this->checkBox_HideVolCtrl->TabIndex = 61; + this->checkBox_HideVolCtrl->Text = L"Hide Volume Buttons"; + // + // checkBox_NoLyrics + // + this->checkBox_NoLyrics->AutoSize = true; + this->checkBox_NoLyrics->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->checkBox_NoLyrics->Location = System::Drawing::Point(3, 159); + this->checkBox_NoLyrics->Margin = System::Windows::Forms::Padding(2); + this->checkBox_NoLyrics->Name = L"checkBox_NoLyrics"; + this->checkBox_NoLyrics->Size = System::Drawing::Size(88, 17); + this->checkBox_NoLyrics->TabIndex = 81; + this->checkBox_NoLyrics->Text = L"Disable Lyrics"; + // + // checkBox_NoPVUi + // + this->checkBox_NoPVUi->AutoSize = true; + this->checkBox_NoPVUi->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->checkBox_NoPVUi->Location = System::Drawing::Point(3, 138); + this->checkBox_NoPVUi->Margin = System::Windows::Forms::Padding(2); + this->checkBox_NoPVUi->Name = L"checkBox_NoPVUi"; + this->checkBox_NoPVUi->Size = System::Drawing::Size(89, 17); + this->checkBox_NoPVUi->TabIndex = 71; + this->checkBox_NoPVUi->Text = L"Disable PV UI"; + // + // tabPage_Components + // + this->tabPage_Components->BackColor = System::Drawing::Color::FromArgb(static_cast(static_cast(64)), + static_cast(static_cast(64)), static_cast(static_cast(64))); + this->tabPage_Components->Controls->Add(this->panel_Components); + this->tabPage_Components->Location = System::Drawing::Point(4, 25); + this->tabPage_Components->Name = L"tabPage_Components"; + this->tabPage_Components->Padding = System::Windows::Forms::Padding(3); + this->tabPage_Components->Size = System::Drawing::Size(225, 232); + this->tabPage_Components->TabIndex = 2; + this->tabPage_Components->Text = L"Components"; + // + // panel_Components + // + this->panel_Components->AutoScroll = true; + this->panel_Components->Controls->Add(this->label_Soon); + this->panel_Components->Controls->Add(this->checkBox_fps_limiter); + this->panel_Components->Controls->Add(this->checkBox_scale_component); + this->panel_Components->Controls->Add(this->checkBox_camera_controller); + this->panel_Components->Controls->Add(this->checkBox_input_emulator); + this->panel_Components->Controls->Add(this->checkBox_fast_loader); + this->panel_Components->Controls->Add(this->checkBox_touch_slider_emulator); + this->panel_Components->Controls->Add(this->checkBox_stage_manager); + this->panel_Components->Controls->Add(this->checkBox_touch_panel_emulator); + this->panel_Components->Controls->Add(this->checkBox_frame_rate_manager); + this->panel_Components->Controls->Add(this->checkBox_sys_timer); + this->panel_Components->Controls->Add(this->checkBox_player_data_manager); + this->panel_Components->Location = System::Drawing::Point(0, 0); + this->panel_Components->Name = L"panel_Components"; + this->panel_Components->Size = System::Drawing::Size(225, 232); + this->panel_Components->TabIndex = 0; + // + // label_Soon + // + this->label_Soon->AutoSize = true; + this->label_Soon->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->label_Soon->Location = System::Drawing::Point(3, 3); + this->label_Soon->Name = L"label_Soon"; + this->label_Soon->Size = System::Drawing::Size(143, 52); + this->label_Soon->TabIndex = 12; + this->label_Soon->Text = L"Options not yet available\r\nthrough the launcher.\r\nPlease use \"components.ini\"\r\nin" + L"side the \"plugins\" folder."; + // + // checkBox_fps_limiter + // + this->checkBox_fps_limiter->AutoSize = true; + this->checkBox_fps_limiter->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->checkBox_fps_limiter->Location = System::Drawing::Point(6, 277); + this->checkBox_fps_limiter->Name = L"checkBox_fps_limiter"; + this->checkBox_fps_limiter->Size = System::Drawing::Size(76, 17); + this->checkBox_fps_limiter->TabIndex = 10; + this->checkBox_fps_limiter->Text = L"FPS Limiter"; + // + // checkBox_scale_component + // + this->checkBox_scale_component->AutoSize = true; + this->checkBox_scale_component->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->checkBox_scale_component->Location = System::Drawing::Point(6, 253); + this->checkBox_scale_component->Name = L"checkBox_scale_component"; + this->checkBox_scale_component->Size = System::Drawing::Size(107, 17); + this->checkBox_scale_component->TabIndex = 9; + this->checkBox_scale_component->Text = L"Scale Component"; + // + // checkBox_camera_controller + // + this->checkBox_camera_controller->AutoSize = true; + this->checkBox_camera_controller->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->checkBox_camera_controller->Location = System::Drawing::Point(6, 230); + this->checkBox_camera_controller->Name = L"checkBox_camera_controller"; + this->checkBox_camera_controller->Size = System::Drawing::Size(106, 17); + this->checkBox_camera_controller->TabIndex = 8; + this->checkBox_camera_controller->Text = L"Camera Controller"; + // + // checkBox_input_emulator + // + this->checkBox_input_emulator->AutoSize = true; + this->checkBox_input_emulator->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->checkBox_input_emulator->Location = System::Drawing::Point(6, 35); + this->checkBox_input_emulator->Name = L"checkBox_input_emulator"; + this->checkBox_input_emulator->Size = System::Drawing::Size(91, 17); + this->checkBox_input_emulator->TabIndex = 0; + this->checkBox_input_emulator->Text = L"Input Emulator"; + // + // checkBox_fast_loader + // + this->checkBox_fast_loader->AutoSize = true; + this->checkBox_fast_loader->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->checkBox_fast_loader->Location = System::Drawing::Point(6, 207); + this->checkBox_fast_loader->Name = L"checkBox_fast_loader"; + this->checkBox_fast_loader->Size = System::Drawing::Size(79, 17); + this->checkBox_fast_loader->TabIndex = 7; + this->checkBox_fast_loader->Text = L"Fast Loader"; + // + // checkBox_touch_slider_emulator + // + this->checkBox_touch_slider_emulator->AutoSize = true; + this->checkBox_touch_slider_emulator->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->checkBox_touch_slider_emulator->Location = System::Drawing::Point(6, 69); + this->checkBox_touch_slider_emulator->Name = L"checkBox_touch_slider_emulator"; + this->checkBox_touch_slider_emulator->Size = System::Drawing::Size(128, 17); + this->checkBox_touch_slider_emulator->TabIndex = 1; + this->checkBox_touch_slider_emulator->Text = L"Touch Panel Emulator"; + // + // checkBox_stage_manager + // + this->checkBox_stage_manager->AutoSize = true; + this->checkBox_stage_manager->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->checkBox_stage_manager->Location = System::Drawing::Point(6, 184); + this->checkBox_stage_manager->Name = L"checkBox_stage_manager"; + this->checkBox_stage_manager->Size = System::Drawing::Size(96, 17); + this->checkBox_stage_manager->TabIndex = 6; + this->checkBox_stage_manager->Text = L"Stage Manager"; + // + // checkBox_touch_panel_emulator + // + this->checkBox_touch_panel_emulator->AutoSize = true; + this->checkBox_touch_panel_emulator->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->checkBox_touch_panel_emulator->Location = System::Drawing::Point(6, 92); + this->checkBox_touch_panel_emulator->Name = L"checkBox_touch_panel_emulator"; + this->checkBox_touch_panel_emulator->Size = System::Drawing::Size(127, 17); + this->checkBox_touch_panel_emulator->TabIndex = 2; + this->checkBox_touch_panel_emulator->Text = L"Touch Slider Emulator"; + // + // checkBox_frame_rate_manager + // + this->checkBox_frame_rate_manager->AutoSize = true; + this->checkBox_frame_rate_manager->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->checkBox_frame_rate_manager->Location = System::Drawing::Point(6, 161); + this->checkBox_frame_rate_manager->Name = L"checkBox_frame_rate_manager"; + this->checkBox_frame_rate_manager->Size = System::Drawing::Size(123, 17); + this->checkBox_frame_rate_manager->TabIndex = 5; + this->checkBox_frame_rate_manager->Text = L"Frame Rate Manager"; + // + // checkBox_sys_timer + // + this->checkBox_sys_timer->AutoSize = true; + this->checkBox_sys_timer->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->checkBox_sys_timer->Location = System::Drawing::Point(6, 115); + this->checkBox_sys_timer->Name = L"checkBox_sys_timer"; + this->checkBox_sys_timer->Size = System::Drawing::Size(117, 17); + this->checkBox_sys_timer->TabIndex = 3; + this->checkBox_sys_timer->Text = L"Freeze Select Timer"; + // + // checkBox_player_data_manager + // + this->checkBox_player_data_manager->AutoSize = true; + this->checkBox_player_data_manager->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->checkBox_player_data_manager->Location = System::Drawing::Point(6, 138); + this->checkBox_player_data_manager->Name = L"checkBox_player_data_manager"; + this->checkBox_player_data_manager->Size = System::Drawing::Size(123, 17); + this->checkBox_player_data_manager->TabIndex = 4; + this->checkBox_player_data_manager->Text = L"Player Data Manager"; + // + // button_Discord + // + this->button_Discord->BackColor = System::Drawing::Color::Transparent; + this->button_Discord->FlatAppearance->BorderSize = 0; + this->button_Discord->FlatAppearance->MouseDownBackColor = System::Drawing::Color::Transparent; + this->button_Discord->FlatAppearance->MouseOverBackColor = System::Drawing::Color::Transparent; + this->button_Discord->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->button_Discord->Image = (cli::safe_cast(resources->GetObject(L"button_Discord.Image"))); + this->button_Discord->Location = System::Drawing::Point(239, 12); + this->button_Discord->Name = L"button_Discord"; + this->button_Discord->Size = System::Drawing::Size(42, 42); + this->button_Discord->TabIndex = 31; + this->button_Discord->UseVisualStyleBackColor = false; + this->button_Discord->Click += gcnew System::EventHandler(this, &ui::button_Discord_Click); + // + // button_github + // + this->button_github->BackColor = System::Drawing::Color::Transparent; + this->button_github->FlatAppearance->BorderSize = 0; + this->button_github->FlatAppearance->MouseDownBackColor = System::Drawing::Color::Transparent; + this->button_github->FlatAppearance->MouseOverBackColor = System::Drawing::Color::Transparent; + this->button_github->FlatStyle = System::Windows::Forms::FlatStyle::Flat; + this->button_github->Image = (cli::safe_cast(resources->GetObject(L"button_github.Image"))); + this->button_github->Location = System::Drawing::Point(239, 60); + this->button_github->Name = L"button_github"; + this->button_github->Size = System::Drawing::Size(42, 42); + this->button_github->TabIndex = 32; + this->button_github->UseVisualStyleBackColor = false; + this->button_github->Click += gcnew System::EventHandler(this, &ui::button_github_Click); + // + // ui + // + this->AcceptButton = this->button_Launch; + this->AutoScaleDimensions = System::Drawing::SizeF(96, 96); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Dpi; + this->AutoSize = true; + this->AutoSizeMode = System::Windows::Forms::AutoSizeMode::GrowAndShrink; + this->BackColor = System::Drawing::Color::FromArgb(static_cast(static_cast(64)), static_cast(static_cast(64)), + static_cast(static_cast(64))); + this->BackgroundImage = (cli::safe_cast(resources->GetObject(L"$this.BackgroundImage"))); + this->BackgroundImageLayout = System::Windows::Forms::ImageLayout::Stretch; + this->CancelButton = this->button_Exit; + this->ClientSize = System::Drawing::Size(288, 297); + this->Controls->Add(this->button_github); + this->Controls->Add(this->button_Discord); + this->Controls->Add(this->tabControl); + this->Controls->Add(this->button_Exit); + this->Controls->Add(this->button_Launch); + this->DoubleBuffered = true; + this->ForeColor = System::Drawing::Color::White; + this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedDialog; + this->MaximizeBox = false; + this->MinimizeBox = false; + this->Name = L"ui"; + this->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen; + this->Text = L"PD Launcher"; + this->FormClosing += gcnew System::Windows::Forms::FormClosingEventHandler(this, &ui::Ui_FormClosing); + this->FormClosed += gcnew System::Windows::Forms::FormClosedEventHandler(this, &ui::Ui_FormClosed); + this->Load += gcnew System::EventHandler(this, &ui::Ui_Load); + this->groupBox_ScreenRes->ResumeLayout(false); + this->tableLayoutPanel_ScreenRes->ResumeLayout(false); + this->tableLayoutPanel_ScreenRes->PerformLayout(); + this->tabControl->ResumeLayout(false); + this->tabPage_Resolution->ResumeLayout(false); + this->groupBox_InternalRes->ResumeLayout(false); + this->tableLayoutPanel_IntRes->ResumeLayout(false); + this->tableLayoutPanel_IntRes->PerformLayout(); + this->tabPage_Patches->ResumeLayout(false); + this->panel_Patches->ResumeLayout(false); + this->panel_innerPatches->ResumeLayout(false); + this->panel_innerPatches->PerformLayout(); + this->tableLayoutPanel_FPSLimit->ResumeLayout(false); + this->tableLayoutPanel_FPSLimit->PerformLayout(); + this->tableLayoutPanel_Status->ResumeLayout(false); + this->tableLayoutPanel_Status->PerformLayout(); + this->tabPage_Components->ResumeLayout(false); + this->panel_Components->ResumeLayout(false); + this->panel_Components->PerformLayout(); + this->ResumeLayout(false); + + } +#pragma endregion +private: System::Void SaveSettings() { + String^ userInput = Convert::ToInt32(comboBox_Display->SelectedIndex).ToString(); + wstring input = msclr::interop::marshal_as(userInput); + WritePrivateProfileStringW(L"resolution", L"display", input.c_str(), CONFIG_FILE); + + userInput = comboBox_Resolution->Text; + cli::array^ ResolutionArray = userInput->Split('x'); + userInput = ResolutionArray[0]; + input = msclr::interop::marshal_as(userInput); + WritePrivateProfileStringW(L"resolution", L"width", input.c_str(), CONFIG_FILE); + + userInput = comboBox_Resolution->Text; + ResolutionArray = userInput->Split('x'); + userInput = ResolutionArray[1]; + input = msclr::interop::marshal_as(userInput); + WritePrivateProfileStringW(L"resolution", L"height", input.c_str(), CONFIG_FILE); + + userInput = Convert::ToInt32(checkBox_InternalRes->Checked).ToString(); + input = msclr::interop::marshal_as(userInput); + WritePrivateProfileStringW(L"resolution", L"r.enable", input.c_str(), CONFIG_FILE); + + userInput = comboBox_intResolution->Text; + cli::array^ intResolutionArray = userInput->Split('x'); + userInput = intResolutionArray[0]; + input = msclr::interop::marshal_as(userInput); + WritePrivateProfileStringW(L"resolution", L"r.width", input.c_str(), CONFIG_FILE); + + userInput = comboBox_BitDepth->Text; + input = msclr::interop::marshal_as(userInput); + WritePrivateProfileStringW(L"resolution", L"bitdepth", input.c_str(), CONFIG_FILE); + + userInput = comboBox_RefreshRate->Text; + input = msclr::interop::marshal_as(userInput); + WritePrivateProfileStringW(L"resolution", L"refreshrate", input.c_str(), CONFIG_FILE); + + userInput = comboBox_intResolution->Text; + intResolutionArray = userInput->Split('x'); + userInput = intResolutionArray[1]; + input = msclr::interop::marshal_as(userInput); + WritePrivateProfileStringW(L"resolution", L"r.height", input.c_str(), CONFIG_FILE); + + userInput = Convert::ToInt32(checkBox_Cursor->Checked).ToString(); + input = msclr::interop::marshal_as(userInput); + WritePrivateProfileStringW(L"patches", L"cursor", input.c_str(), CONFIG_FILE); + + userInput = Convert::ToInt32(checkBox_HideFreeplay->Checked).ToString(); + input = msclr::interop::marshal_as(userInput); + WritePrivateProfileStringW(L"patches", L"hide_freeplay", input.c_str(), CONFIG_FILE); + + userInput = Convert::ToInt32(comboBox_StatusIcons->SelectedIndex).ToString(); + input = msclr::interop::marshal_as(userInput); + WritePrivateProfileStringW(L"patches", L"status_icons", input.c_str(), CONFIG_FILE); + + userInput = Convert::ToInt32(checkBox_HidePVWatermark->Checked).ToString(); + input = msclr::interop::marshal_as(userInput); + WritePrivateProfileStringW(L"patches", L"hide_pv_watermark", input.c_str(), CONFIG_FILE); + + userInput = Convert::ToInt32(checkBox_NoPVUi->Checked).ToString(); + input = msclr::interop::marshal_as(userInput); + WritePrivateProfileStringW(L"patches", L"no_pv_ui", input.c_str(), CONFIG_FILE); + + userInput = Convert::ToInt32(checkBox_NoLyrics->Checked).ToString(); + input = msclr::interop::marshal_as(userInput); + WritePrivateProfileStringW(L"patches", L"no_lyrics", input.c_str(), CONFIG_FILE); + + userInput = Convert::ToInt32(checkBox_NoMovies->Checked).ToString(); + input = msclr::interop::marshal_as(userInput); + WritePrivateProfileStringW(L"patches", L"no_movies", input.c_str(), CONFIG_FILE); + + userInput = Convert::ToInt32(checkBox_HideVolCtrl->Checked).ToString(); + input = msclr::interop::marshal_as(userInput); + WritePrivateProfileStringW(L"patches", L"hide_volume", input.c_str(), CONFIG_FILE); + + userInput = Convert::ToInt32(checkBox_DisableErrorBanner->Checked).ToString(); + input = msclr::interop::marshal_as(userInput); + WritePrivateProfileStringW(L"patches", L"no_error", input.c_str(), CONFIG_FILE); + + userInput = Convert::ToInt32(checkBox_TAA->Checked).ToString(); + input = msclr::interop::marshal_as(userInput); + WritePrivateProfileStringW(L"graphics", L"TAA", input.c_str(), CONFIG_FILE); + + userInput = Convert::ToInt32(checkBox_MLAA->Checked).ToString(); + input = msclr::interop::marshal_as(userInput); + WritePrivateProfileStringW(L"graphics", L"MLAA", input.c_str(), CONFIG_FILE); + + userInput = textBox_FPSLimit->Text; + input = msclr::interop::marshal_as(userInput); + WritePrivateProfileStringW(L"graphics", L"FPS.Limit", input.c_str(), CONFIG_FILE); + + userInput = Convert::ToInt32(checkBox_SkipLauncher->Checked).ToString(); + input = msclr::interop::marshal_as(userInput); + WritePrivateProfileStringW(L"launcher", L"skip", input.c_str(), CONFIG_FILE); +} +private: System::Void Ui_Load(System::Object^ sender, System::EventArgs^ e){ +} +private: System::Void Button_Exit_Click(System::Object^ sender, System::EventArgs^ e) { + this->Close(); +} +private: System::Void Button_Launch_Click(System::Object^ sender, System::EventArgs^ e) { + + SaveSettings(); + + STARTUPINFOW si; + PROCESS_INFORMATION pi; + + ZeroMemory(&si, sizeof(si)); + si.cb = sizeof(si); + ZeroMemory(&pi, sizeof(pi)); + CreateProcessW(DIVA_EXECUTABLE, DIVA_EXECUTABLE_LAUNCH, NULL, NULL, false, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi); + + // this->Close won't work in here since it will prompt the user to save the settings + TerminateProcess(GetCurrentProcess(), EXIT_SUCCESS); +} +private: System::Void CheckBox_InternalRes_CheckedChanged(System::Object^ sender, System::EventArgs^ e) { + if (checkBox_InternalRes->Checked) + { + comboBox_intResolution->Enabled = true; + } + else + { + comboBox_intResolution->Enabled = false; + } +} +private: System::Void ComboBox_Display_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e) { + if (comboBox_Display->SelectedIndex == 0 || comboBox_Display->SelectedIndex == 2) + { + comboBox_Resolution->Enabled = true; + } + else + { + comboBox_Resolution->Enabled = false; + } + if (comboBox_Display->SelectedIndex == 2) + { + comboBox_BitDepth->Enabled = true; + comboBox_RefreshRate->Enabled = true; + } + else + { + comboBox_BitDepth->Enabled = false; + comboBox_RefreshRate->Enabled = false; + } +} +private: System::Void Ui_FormClosing(System::Object^ sender, System::Windows::Forms::FormClosingEventArgs^ e) { + switch (MessageBox::Show("Do you want to save your settings?", "PD Launcher", MessageBoxButtons::YesNoCancel, MessageBoxIcon::Question)) + { + case System::Windows::Forms::DialogResult::Yes: + SaveSettings(); + break; + + case System::Windows::Forms::DialogResult::No: + break; + + case System::Windows::Forms::DialogResult::Cancel: + e->Cancel = true; + break; + } +} +private: System::Void Ui_FormClosed(System::Object^ sender, System::Windows::Forms::FormClosedEventArgs^ e) { + // Prevents abnormal termination messages, remember that the game is still technically running and must be killed! + TerminateProcess(GetCurrentProcess(), EXIT_SUCCESS); +} +private: System::Void button_Discord_Click(System::Object^ sender, System::EventArgs^ e) { + System::Diagnostics::Process::Start("https://discord.gg/cvBVGDZ"); +} +private: System::Void TextBox_FPSLimit_TextChanged(System::Object^ sender, System::EventArgs^ e) { + if (System::Text::RegularExpressions::Regex::IsMatch(textBox_FPSLimit->Text, " ^ [0-9]")) + { + textBox_FPSLimit->Text = ""; + } +} +private: System::Void TextBox_FPSLimit_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) { + if (!Char::IsControl(e->KeyChar) && !Char::IsDigit(e->KeyChar) && (e->KeyChar != '.')) + { + e->Handled = true; + } +} +private: System::Void button_github_Click(System::Object^ sender, System::EventArgs^ e) { + System::Diagnostics::Process::Start("https://notabug.org/nastys/PD-Loader"); +} +}; +} diff --git a/source/plugins/Launcher/ui.resx b/source/plugins/Launcher/ui.resx new file mode 100644 index 0000000..641132d --- /dev/null +++ b/source/plugins/Launcher/ui.resx @@ -0,0 +1,4415 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAACoAAAApCAYAAABDV7v1AAAABGdBTUEAALGPC/xhBQAAA7dJREFUWEft + mElME2EUxwdDgh6NVw8e9OzZGwcv3ryZePKmUQodREAN1Ah0BmQTVJZgQFABE1kEl7iAEQWjAiIEOtMW + aJGyFWgpbWG6PL+vnSmFDrL0KyHaf/LPtPNm3vtN37dMSkUVlYwuqMYOJmRz52g1n0UzfF4knKTmmERG + p1CotEfFsjsTTU8colmuKTmXh70wzfL6S6qxY2L57SsxZ0SBEng2JoyklSzXp1Bo40SE7Qm1xSaXLOJm + uZMiwtaKj++MlU2yB1aqtadEjK0VBd2G/2/QtAItFFSPQ2HNOKQX+s9dzeMh5Y7/c2o+D8W141BWb4Rb + 93Xr7t3MxEFLHxugd8gCtS2T0PJhBj73LsCwfhkMJicYp5y+Y9+wFd53m6Gh3QSD/BJ0fJ2HG0Va2XyS + iYLWtZpgbn4FBjkrCIIHtpLb7QXNKH4IB3oYm2xOyURBdQY7rKxuDbhRHo8XvF4vlKBuyOXFJgaaXa4X + y+5eliXBN5bl8hMDHUDtDleCywO5VWOy+YmAXkcTYWPLcSttdhcsLbt8rQ2W3ekCq83lA8PXScKf2z7O + huTHJgJaXGsAFyoqCRcc0FjRcBiFzFIdfPqxIEYA5i0C5FePwc1iLTS8nl53H1YXWiXkahABbe+cC/ll + 1BVrLax89luMANQ0TwbOq+7pYcEqiBG/8CogxYNNBPTtF7NYxi8MipcqKf7w+RpoT/9i4PztB6Ngd7jE + iF+rgjsQDzYR0K6g1mJhUDz+Wjtm4enLKVhddYsRf6y7f9Fb0zLpnTE713VCUlpBaA0ioD0DFrEEoEnl + BtOMM2QCbSbHitu34OPFX1JGSei2SgT0TdfaGPWg4y/eCnUvTGgDWN4UGK8SPT8XoR5to0vLQuB+86IA + 19C7wMYaREBTUas6vy2AxeYviD1jXoHiR+OQiSZMeeMENL6agqZ30/CkzQR364yQjl5c8Nh2OP3DwuX2 + gH7CDiV18rsTEVDJORWj0IpeREbQvv0dvZjgtyi56yQX1RhAb7T7JlhZg9G3ZMldh00UNJKOgpL2vwlK + UaoDNMs75RKFYzqX96K8NnyUi2PvEJSiaDVXKJcoXCsZTaWS5Zo3g90x6Pl0w2Ga5Yb+9vS7Mc1q6uNV + nbFKhm+Qy71jUKyLWboTKGFGMstXo6S1RMxyVTj3FfXIkSRGU4bOCWGDBimGooCgA4pRMhyLAAN/xoUL + GjGdUWjj0JhNQZNsfl+DSkpQc2fpXM6x70GxFAx3+jIzdFz8GlVUFEVRfwDiv42+8CmffAAAAABJRU5E + rkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACoAAAAqCAYAAADFw8lbAAAABGdBTUEAALGPC/xhBQAABKdJREFUWEft + mF1IZGUYx/3WcKXygxVFUboxMEQNRSI/UhGEAqEC77ILg6JoLu3ORL0Q68JYEbxRb1Zc0L00xMBQoUX8 + KkNGKcHByHT9WMk1d97+/9fjzpnjMzPnzM7UQv3hdzHjeZ7nP6/ved6PmP/1nCkJvALeAG+DD8DHoB28 + B94CxeAl8K/oFvgCrIE98AhcxsbGqmvw2Qv+BH8ANxgBr4OoKxaUgK/BI7MpuyDuAkyDd0AiiIo6wUPg + lUw4ATk40j+AQhAxvQq+Bc9s0Apy/gLeBQngmZQDfgURN3kNcnM6uEDYKgceKXmkQR1OBZp1PLLx4GcQ + tZG0glqPAaeBbaWC+1KyaIO6nLO2XzA26gspkZnExEQVHx8v/s1KXFycfj4hIUH8uxnUfgBCtq4U8KOU + wEx2drba3NxU09PTqq2tTZtISkpSeXl5qqioSJOTk6O/r6ioUENDQ2pra0sNDw+HNIv654B9NqhcUrCV + pqYmZdb29rY6PT01Pvl0fn6uLi8vjU9Kzc3NqZSUFDGnGfhgOwworsc/SYFW6urqjNLONDMzo5KTk8Wc + ZuDjLxBwua0Cp1KglfLycqO0M62tramMjAwxpxV4GdWuBH0KQraj3Nxctbu7a5R2rtHRUTGvFXjZAi/T + mFX3pAAr7e3tRsnwlZ+fL+Y2Az8H4DXtzCK3FGClp6fHKBe+GhoaxNxm4Idvf712ZlIcCNk7SW9vr1Eu + fDU3N4u5zcAP97Ps6X5Klx6WcLlcRrnwVVVVJea2Al8fXdnz6bb0oERNTY1RLjyxr2ZlZYm5rcDXJ1f2 + fLolPSjBPriwsGCUda6RkRExrwR8fXhlz18n0sMSbFErKytGaftiTGZmppjTCvw8AeJS+kAKsHJdiOt9 + V1eXOjo6MmwE1vHxserr69PrvzVfIOCHB0aebm/ojhRghrslbiympqaeGk5LS1P19fVqfn7esOXT7Oys + qq6uVqmpqTdyhQJ+fgM8it8QW8ETKcgMNxU0MDAw8PS7wsJCdXBwYNjzaX9/XxUUFPjF2wVe1gHvDW6I + h7h9KchKcXGxNra6uqq3ejs7O+ri4kLvjvjdxsaG3oB4vV5VWVkp5ggFvPDeQBSPH3NSkAS3euvr63p7 + x5Hb29vTo7y0tKThCnZ2dqanhRQfDPjg/OQlR0BVg8dScDBo2uPx+Bnt7u5WJycnjo2iPlekr2gmlO5K + CYLR2NiojQ4ODqrFxUW1vLysjR4eHqra2loxJhCofwR4IxNSPCY/lJJI8GjR2dmpe+TY2JianJzU87O/ + v1/P1Y6ODn1mkmKtoC5H80vA6yNb+hyE7ACE//bx8XFVUlKi3G63amlpUa2trfoF45o+MTGhl10p1gzq + 0STvpRzrG2DLLGFfLSsr0yPMfltaWqrS09PFZyVQawew8zjWC+A74HedGGmQnyPpAbw+Cls062hknYLc + vJHhexERcc7afsHsgHy8HLsP2L8jKv7qu8DWSSAYyMHl8X3A66Oo6U3wPfgd2JoSeI7z8ARsAN7a8Ubm + HxHPWHxDuZG5A3hfdGwxx38t7+7vgc8A7w1eBM+FuD7fBjyP88f81xQT8zfAJCInz8zAaAAAAABJRU5E + rkJggg== + + + + + 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 + + + \ No newline at end of file diff --git a/source/plugins/Patches/Patches.vcxproj b/source/plugins/Patches/Patches.vcxproj new file mode 100644 index 0000000..578fd8a --- /dev/null +++ b/source/plugins/Patches/Patches.vcxproj @@ -0,0 +1,172 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {3FD6ACA9-E613-4FD6-BDA2-55A91C2CF65C} + Win32Proj + Patches + 10.0 + + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + false + .dva + + + true + + + true + .dva + + + false + + + + NotUsing + Level3 + MaxSpeed + true + true + true + NDEBUG;PATCHES_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + stdcpp17 + ..\..\..\dependencies\freeglut\include;%(AdditionalIncludeDirectories) + + + Windows + true + true + true + false + ..\..\..\dependencies\freeglut\lib;%(AdditionalLibraryDirectories) + + + + + Use + Level3 + Disabled + true + WIN32;_DEBUG;PATCHES_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + false + + + + + NotUsing + Level3 + Disabled + true + _DEBUG;PATCHES_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + + + ..\..\..\dependencies\freeglut\include;%(AdditionalIncludeDirectories) + stdcpp17 + + + Windows + true + false + ..\..\..\dependencies\freeglut\lib;%(AdditionalLibraryDirectories) + + + + + Use + Level3 + MaxSpeed + true + true + true + WIN32;NDEBUG;PATCHES_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + true + true + false + + + + + + + + + \ No newline at end of file diff --git a/source/plugins/Patches/Patches.vcxproj.filters b/source/plugins/Patches/Patches.vcxproj.filters new file mode 100644 index 0000000..1f5bfee --- /dev/null +++ b/source/plugins/Patches/Patches.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + \ No newline at end of file diff --git a/source/plugins/Patches/dllmain.cpp b/source/plugins/Patches/dllmain.cpp new file mode 100644 index 0000000..fe8aaa8 --- /dev/null +++ b/source/plugins/Patches/dllmain.cpp @@ -0,0 +1,211 @@ +#include "windows.h" +#include "vector" +#include +#include + +void InjectCode(void* address, const std::vector data); +void ApplyPatches(); + +const LPCWSTR CONFIG_FILE = L".\\config.ini"; + +BOOL APIENTRY DllMain(HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved +) +{ + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + ApplyPatches(); + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + +void ApplyPatches() { + + const struct { void* Address; std::vector Data; } patches[] = + { + // Always return true for the SelCredit enter SelPv check + { (void*)0x0000000140393610, { 0xB0, 0x01, 0xC3, 0x90, 0x90, 0x90 } }, + // Just completely ignore all SYSTEM_STARTUP errors + { (void*)0x00000001403F5080, { 0xC3 } }, + // Always exit TASK_MODE_APP_ERROR on the first frame + { (void*)0x00000001403F73A7, { 0x90, 0x90 } }, + { (void*)0x00000001403F73C3, { 0x89, 0xD1, 0x90 } }, + // Ignore the EngineClear variable to clear the framebuffer at all resolutions + { (void*)0x0000000140501480, { 0x90, 0x90 } }, + { (void*)0x0000000140501515, { 0x90, 0x90 } }, + // Don't update the touch slider state so we can write our own + { (void*)0x000000014061579B, { 0x90, 0x90, 0x90, 0x8B, 0x42, 0xE0, 0x90, 0x90, 0x90 } }, + // Write ram files to the current directory instead of Y : / SBZV / ram + { (void*)0x000000014066CF09, { 0xE9, 0xD8, 0x00 } }, + // Change mdata path from "C:/Mount/Option" to "mdata/" + { (void*)0x0000000140A8CA18, { 0x6D, 0x64, 0x61, 0x74, 0x61, 0x2F, 0x00 } }, + { (void*)0x000000014066CEAE, { 0x06 } }, + // Skip parts of the network check state + { (void*)0x00000001406717B1, { 0xE9, 0x22, 0x03, 0x00 } }, + // Set the initial DHCP WAIT timer value to 0 + { (void*)0x00000001406724E7, { 0x00, 0x00 } }, + // Ignore SYSTEM_STARTUP Location Server checks + { (void*)0x00000001406732A2, { 0x90, 0x90 } }, + // Toon Shader Fix by lybxlpsv + { (void*)0x000000014050214F, { 0x90 } }, + { (void*)0x0000000140502150, { 0x90 } }, + // Toon Shader Outline Fix by lybxlpsv + { (void*)0x0000000140641102, { 0x01 } }, + // Disables call to glutFitWindowSizeToDesktop, prevents window automatic resize + { (void*)0x0000000140194E06, { 0x90, 0x90, 0x90, 0x90, 0x90 } }, + // Allow modifier mode selection (by Team Shimapan) + { (void*)0x00000001405CB1B3, { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 } }, + { (void*)0x00000001405CA0F5, { 0x90, 0x90 } }, + // allow modifier modes to work without use_card + { (void*)0x00000001405CB14A,{ 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 } }, + { (void*)0x0000000140136CFA,{ 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 } }, + // enable module selector without use_card (Modules are not getting saved upon selection, commented until a fix is found) + //{ (void*)0x00000001405C513B, { 0x01 } }, + // Show Freeplay instead + { (void*)0x00000001403BABEA, { 0x75 } }, + // Force Hide IDs + { (void*)0x00000001409A5918, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { (void*)0x00000001409A5928, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } + }; + printf("[Patches] Patches loaded\n"); + + for (size_t i = 0; i < _countof(patches); i++) + InjectCode(patches[i].Address, patches[i].Data); + + auto nCursor = GetPrivateProfileIntW(L"patches", L"cursor", TRUE, CONFIG_FILE); + auto nHideFreeplay = GetPrivateProfileIntW(L"patches", L"hide_freeplay", FALSE, CONFIG_FILE); + auto nStatusIcons = GetPrivateProfileIntW(L"patches", L"status_icons", 0, CONFIG_FILE); + auto nHidePVWatermark = GetPrivateProfileIntW(L"patches", L"hide_pv_watermark", FALSE, CONFIG_FILE); + auto nNoPVUi = GetPrivateProfileIntW(L"patches", L"no_pv_ui", FALSE, CONFIG_FILE); + auto nHideVolCtrl = GetPrivateProfileIntW(L"patches", L"hide_volume", FALSE, CONFIG_FILE); + auto nNoLyrics = GetPrivateProfileIntW(L"patches", L"no_lyrics", FALSE, CONFIG_FILE); + auto nNoMovies = GetPrivateProfileIntW(L"patches", L"no_movies", FALSE, CONFIG_FILE); + auto nNoError = GetPrivateProfileIntW(L"patches", L"no_error", FALSE, CONFIG_FILE); + // Hides the Freeplay text + if (nHideFreeplay) + { + InjectCode((void*)0x00000001403BABEF, { 0x06, 0xB6 }); + printf("[Patches] Hide Freeplay enabled\n"); + } + // Use GLUT_CURSOR_RIGHT_ARROW instead of GLUT_CURSOR_NONE + if (nCursor) + { + InjectCode((void*)0x000000014019341B, { 0x00 }); + printf("[Patches] Cursor enabled\n"); + } + // Override status icon states to be invalid (hides them) + if (nStatusIcons > 0) + { + std::vector cardIcon = { 0xFD, 0x0A }; + std::vector networkIcon = { 0x9E, 0x1E }; + + if (nStatusIcons == 2) // 2 for error icons + { + cardIcon = { 0xFA, 0x0A }; + networkIcon = { 0x9F, 0x1E }; + printf("[Patches] Status icons set to error state\n"); + } + else if (nStatusIcons == 3) // 3 for OK icons + { + cardIcon = { 0xFC, 0x0A }; + networkIcon = { 0xA0, 0x1E }; + printf("[Patches] Status icons set to OK state\n"); + } + else if (nStatusIcons == 4) // 4 for partial OK icons + { + cardIcon = { 0xFB, 0x0A }; + networkIcon = { 0xA1, 0x1E }; + printf("[Patches] Status icons set to partial OK state\n"); + } + else // 1 or invalid for hidden + { + cardIcon = { 0xFD, 0x0A }; + networkIcon = { 0x9E, 0x1E }; + printf("[Patches] Status icons hidden\n"); + } + + // card icon + InjectCode((void*)0x00000001403B9D6E, cardIcon); // error state + InjectCode((void*)0x00000001403B9D73, cardIcon); // OK state + + // network icon + InjectCode((void*)0x00000001403BA14B, networkIcon); // error state + InjectCode((void*)0x00000001403BA155, networkIcon); // OK state + InjectCode((void*)0x00000001403BA16B, networkIcon); // partial state + + InjectCode((void*)0x00000001403BA1A5, { 0x48, 0xE9 }); // never show the error code for partial connection + + // I was going to use this with a string, but the assignment wasn't behaving well and making separate prints was easier than figuring it out + // printf("[Patches] Status icons %s\n", iconType); + } + // Removes PV watermark + if (nHidePVWatermark) + { + InjectCode((void*)0x0000000140A13A88, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }); + printf("[Patches] PV watermark hidden\n"); + } + // Disable the PV screen photo UI + if (nNoPVUi) + { + InjectCode((void*)0x000000014048FA91, { 0xEB, 0x6F }); // skip button panel image (JMP 0x14048FB02) + + // patch minimum PV UI state to 1 instead of 0 + // hook check for lyrics enabled (UI state < 2) to change UI state 0 into 1 + // dump new code in the skipped button panel condition + InjectCode((void*)0x000000014048FA93, { 0xC7, 0x83, 0x58, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 }); // MOV dword ptr [0x158 + RBX],0x1 + InjectCode((void*)0x000000014048FA9D, { 0xC6, 0x80, 0x3A, 0xD1, 0x02, 0x00, 0x01 }); // MOV byte ptr [0x2d13a + RAX],0x1 + InjectCode((void*)0x000000014048FAA4, { 0xE9, 0x8B, 0xFB, 0xFF, 0xFF }); // JMP 0x14048F634 + + InjectCode((void*)0x000000014048F62D, { 0xE9, 0x61, 0x04, 0x00, 0x00 }); // JMP 0x14048FA93 + + printf("[Patches] PV UI disabled\n"); + } + // Don't show volume control + if (nHideVolCtrl) + { + // skip SE button + InjectCode((void*)0x00000001409A4D60, { 0xC0, 0xD3 }); + + // skip volume sliders button + InjectCode((void*)0x0000000140A85F10, { 0xE0, 0x50 }); + + printf("[Patches] Volume control hidden\n"); + } + // Skip loading (and therefore displaying) song lyrics + if (nNoLyrics) + { + InjectCode((void*)0x00000001404E7A25, { 0x00, 0x00 }); + InjectCode((void*)0x00000001404E7950, { 0x48, 0xE9 }); // ensure first iteration doesn't run + printf("[Patches] Lyrics disabled\n"); + } + // Skip loading (and therefore displaying) song movies + if (nNoMovies) + { + InjectCode((void*)0x00000001404EB584, { 0x48, 0xE9 }); + InjectCode((void*)0x00000001404EB471, { 0x48, 0xE9 }); + printf("[Patches] Movies disabled\n"); + } + // Disable error banner + if (nNoError) + { + // Disable Errors Banner + InjectCode((void*)0x00000001403B9E9B, { 0x90, 0x90 }); + printf("[Patches] Errors Banner disabled\n"); + } +} + +void InjectCode(void* address, const std::vector data) +{ + const size_t byteCount = data.size() * sizeof(uint8_t); + + DWORD oldProtect; + VirtualProtect(address, byteCount, PAGE_EXECUTE_READWRITE, &oldProtect); + memcpy(address, data.data(), byteCount); + VirtualProtect(address, byteCount, oldProtect, nullptr); +} diff --git a/source/plugins/Render/Render.vcxproj b/source/plugins/Render/Render.vcxproj new file mode 100644 index 0000000..32edb89 --- /dev/null +++ b/source/plugins/Render/Render.vcxproj @@ -0,0 +1,176 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {89F87459-768F-4638-9267-0F90CD74452D} + Win32Proj + Render + 10.0 + + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + false + .dva + + + true + + + true + .dva + + + false + + + + NotUsing + Level3 + MaxSpeed + true + true + true + NDEBUG;RENDER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + + + ..\..\..\dependencies\freeglut\include;..\..\..\dependencies\detours\include;%(AdditionalIncludeDirectories) + stdcpp17 + + + Windows + true + true + true + false + ..\..\..\dependencies\detours\lib;..\..\..\dependencies\freeglut\lib;%(AdditionalLibraryDirectories) + + + + + Use + Level3 + Disabled + true + WIN32;_DEBUG;RENDER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + false + + + + + NotUsing + Level3 + Disabled + true + _DEBUG;RENDER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + + + stdcpp17 + ..\..\..\dependencies\freeglut\include;..\..\..\dependencies\detours\include;%(AdditionalIncludeDirectories) + + + Windows + true + false + ..\..\..\dependencies\detours\lib;..\..\..\dependencies\freeglut\lib;%(AdditionalLibraryDirectories) + + + + + Use + Level3 + MaxSpeed + true + true + true + WIN32;NDEBUG;RENDER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + true + true + false + + + + + + + + + + + + \ No newline at end of file diff --git a/source/plugins/Render/Render.vcxproj.filters b/source/plugins/Render/Render.vcxproj.filters new file mode 100644 index 0000000..94f2bbe --- /dev/null +++ b/source/plugins/Render/Render.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + + + Source Files + + + \ No newline at end of file diff --git a/source/plugins/Render/dllmain.cpp b/source/plugins/Render/dllmain.cpp new file mode 100644 index 0000000..e135be3 --- /dev/null +++ b/source/plugins/Render/dllmain.cpp @@ -0,0 +1,80 @@ +#include "framework.h" +#include +#pragma comment(lib, "detours.lib") +#include +#include +#include +#include + +int hookedCreateWindow(const char* title, void(__cdecl* exit_function)(int)) +{ + if (nDisplay == 1) + { + *fullScreenFlag = 0; + glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH | GLUT_BORDERLESS); + glutInitWindowSize(glutGet(GLUT_SCREEN_WIDTH), glutGet(GLUT_SCREEN_HEIGHT)); + glutInitWindowPosition(0, 0); + glutCreateWindow(title); + printf("[Render Manager] Borderless mode.\n"); + } + else if (nDisplay == 2) + { + // Crashes, no idea why yet + if (glutGameModeGet(GLUT_GAME_MODE_POSSIBLE)) { + char GameModeString[24]; + sprintf_s(GameModeString, sizeof(GameModeString),"%dx%d:%d@%d", nWidth, nHeight, nBitDepth ,nRefreshRate); + printf("[Render Manager] Game Mode supported and enabled in replacement of Fullscreen.\n"); + printf(GameModeString); + printf("\n"); + glutGameModeString(GameModeString); + glutEnterGameMode(); + } + else { + *fullScreenFlag = 1; + glutCreateWindow(title); + printf("[Render Manager] Fullscreen enabled.\n"); + } + } + else + { + *fullScreenFlag = 0; + glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); + glutInitWindowSize(nWidth, nHeight); + glutInitWindowPosition((glutGet(GLUT_SCREEN_WIDTH) - nWidth) / 2, (glutGet(GLUT_SCREEN_HEIGHT) - nHeight) / 2); // Center to the middle of the screen when windowed + glutCreateWindow(title); + printf("[Render Manager] Windowed mode.\n"); + } + return true; +} + +__int64 hookedParseParameters(int a1, __int64* a2) +{ + // Force -wqhd if Custom Internal Resolution is enabled + if (nIntRes) + *resolutionType = 15; + // Return to the original function + return divaParseParameters(a1, a2); +} + + +BOOL APIENTRY DllMain(HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved +) +{ + if (ul_reason_for_call == DLL_PROCESS_ATTACH) + { + DisableThreadLibraryCalls(hModule); + DetourTransactionBegin(); + DetourUpdateThread(GetCurrentThread()); + DetourAttach(&(PVOID&)divaCreateWindow, hookedCreateWindow); + DetourTransactionCommit(); + + DetourTransactionBegin(); + DetourUpdateThread(GetCurrentThread()); + DetourAttach(&(PVOID&)divaParseParameters, hookedParseParameters); + DetourTransactionCommit(); + } + return TRUE; +} + diff --git a/source/plugins/Render/framework.h b/source/plugins/Render/framework.h new file mode 100644 index 0000000..42237fd --- /dev/null +++ b/source/plugins/Render/framework.h @@ -0,0 +1,36 @@ +#pragma once + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +// Windows Header Files +#include +#include + +static int(__cdecl* divaCreateWindow)(const char* title, void(__cdecl* exitfunc)(int)) = (int(__cdecl*)(const char* title, void(__cdecl * exitfunc)(int)))0x140194D00; +__int64 (__fastcall* divaParseParameters)(int a1, __int64* a2) = (__int64(__fastcall*)(int a1, __int64* a2))0x140193630; + +uint8_t* fullScreenFlag = (uint8_t*)0x140EDA5D1; +DWORD* resolutionType = (DWORD*)0x140EDA5D4; + +using namespace std; + +wstring DirPath() { + WCHAR buffer[MAX_PATH]; + GetModuleFileNameW(NULL, buffer, MAX_PATH); + wstring::size_type pos = wstring(buffer).find_last_of(L"\\/"); + return wstring(buffer).substr(0, pos); +} + +wstring CONFIG_FILE_STRING = DirPath() + L"\\plugins\\config.ini"; +LPCWSTR CONFIG_FILE = CONFIG_FILE_STRING.c_str(); + +int nDisplay = GetPrivateProfileIntW(L"resolution", L"display", 0, CONFIG_FILE); +int nWidth = GetPrivateProfileIntW(L"resolution", L"width", 1280, CONFIG_FILE); +int nHeight = GetPrivateProfileIntW(L"resolution", L"height", 720, CONFIG_FILE); + +int nIntRes = GetPrivateProfileIntW(L"resolution", L"r.enable", FALSE, CONFIG_FILE); +int nIntResWidth = GetPrivateProfileIntW(L"resolution", L"r.width", 1280, CONFIG_FILE); +int nIntResHeight = GetPrivateProfileIntW(L"resolution", L"r.height", 720, CONFIG_FILE); + +int nBitDepth = GetPrivateProfileIntW(L"resolution", L"bitdepth", 32, CONFIG_FILE); +int nRefreshRate = GetPrivateProfileIntW(L"resolution", L"refreshrate", 60, CONFIG_FILE); + diff --git a/source/plugins/TLAC/Components/CameraController.cpp b/source/plugins/TLAC/Components/CameraController.cpp new file mode 100644 index 0000000..3ef3b70 --- /dev/null +++ b/source/plugins/TLAC/Components/CameraController.cpp @@ -0,0 +1,231 @@ +#include "CameraController.h" +#include +#include "Input/InputState.h" +#include "ComponentsManager.h" +#include "../framework.h" +#include "../Input/Mouse/Mouse.h" +#include "../Input/Keyboard/Keyboard.h" +#include "../Input/Bindings/KeyboardBinding.h" + +#define GLUT_CURSOR_RIGHT_ARROW 0x0000 +#define GLUT_CURSOR_NONE 0x0065 + +using namespace TLAC::Input; +using namespace TLAC::Utilities; + +namespace TLAC::Components +{ + CameraController::CameraController() + { + } + + CameraController::~CameraController() + { + delete ToggleBinding; + + delete ForwardBinding; + delete BackwardBinding; + delete LeftBinding; + delete RightBinding; + + delete UpBinding; + delete DownBinding; + delete ClockwiseBinding; + delete CounterClockwiseBinding; + delete ZoomInBinding; + delete ZoomOutBinding; + + delete FastBinding; + delete SlowBinding; + } + + const char* CameraController::GetDisplayName() + { + return "camera_controller"; + } + + void CameraController::Initialize(ComponentsManager* manager) + { + componentsManager = manager; + + printf("[TLAC] CameraController::Initialize(): Initialized\n"); + + for (int i = 0; i < sizeof(cameraSetterAddresses) / sizeof(void*); i++) + { + DWORD oldProtect; + VirtualProtect((void*)cameraSetterAddresses[i], sizeof(uint8_t), PAGE_EXECUTE_READWRITE, &oldProtect); + + originalSetterBytes[i] = *(uint8_t*)cameraSetterAddresses[i]; + } + + ToggleBinding = new Binding(); + ToggleBinding->AddBinding(new KeyboardBinding(VK_F3)); + + ForwardBinding = new Binding(); + ForwardBinding->AddBinding(new KeyboardBinding('W')); + BackwardBinding = new Binding(); + BackwardBinding->AddBinding(new KeyboardBinding('S')); + LeftBinding = new Binding(); + LeftBinding->AddBinding(new KeyboardBinding('A')); + RightBinding = new Binding(); + RightBinding->AddBinding(new KeyboardBinding('D')); + + UpBinding = new Binding(); + UpBinding->AddBinding(new KeyboardBinding(VK_SPACE)); + DownBinding = new Binding(); + DownBinding->AddBinding(new KeyboardBinding(VK_CONTROL)); + + ClockwiseBinding = new Binding(); + ClockwiseBinding->AddBinding(new KeyboardBinding('E')); + CounterClockwiseBinding = new Binding(); + CounterClockwiseBinding->AddBinding(new KeyboardBinding('Q')); + + ZoomInBinding = new Binding(); + ZoomInBinding->AddBinding(new KeyboardBinding('R')); + ZoomOutBinding = new Binding(); + ZoomOutBinding->AddBinding(new KeyboardBinding('F')); + + FastBinding = new Binding(); + FastBinding->AddBinding(new KeyboardBinding(VK_SHIFT)); + SlowBinding = new Binding(); + SlowBinding->AddBinding(new KeyboardBinding(VK_MENU)); + + camera = (Camera*)CAMERA_ADDRESS; + } + + void CameraController::Update() + { + return; + } + + void CameraController::UpdateInput() + { + if (ToggleBinding->AnyTapped()) + { + SetControls(!GetIsEnabled()); + return; + } + + if (!GetIsEnabled()) + return; + + auto keyboard = Keyboard::GetInstance(); + auto mouse = Mouse::GetInstance(); + + bool forward = ForwardBinding->AnyDown(); + bool backward = BackwardBinding->AnyDown(); + bool left = LeftBinding->AnyDown(); + bool right = RightBinding->AnyDown(); + + bool up = UpBinding->AnyDown(); + bool down = DownBinding->AnyDown(); + + bool fast = FastBinding->AnyDown(); + bool slow = SlowBinding->AnyDown(); + + bool clockwise = ClockwiseBinding->AnyDown(); + bool counterclockwise = CounterClockwiseBinding->AnyDown(); + + bool zoomin = ZoomInBinding->AnyDown(); + bool zoomout = ZoomOutBinding->AnyDown(); + + float speed = GetElapsedTime() * (fast ? fastSpeed : slow ? slowSpeed : normalSpeed); + + if (forward ^ backward) + camera->Position += PointFromAngle(verticalRotation + (forward ? +0.0f : -180.0f), speed); + + if (left ^ right) + camera->Position += PointFromAngle(verticalRotation + (right ? +90.0f : -90.0f), speed); + + if (up ^ down) + camera->Position.Y += speed * (up ? +0.25f : -0.25f); + + if (clockwise ^ counterclockwise) + camera->Rotation += speed * (clockwise ? -1.0f : +1.0f); + + if (zoomin ^ zoomout) + { + camera->HorizontalFov += speed * (zoomin ? -1.0f : +1.0f); + camera->HorizontalFov = std::clamp(camera->HorizontalFov, +1.0f, +170.0f); + } + + if (mouse->HasMoved()) + { + SetMouseWindowCenter(); + + auto delta = mouse->GetDeltaPosition(); + + verticalRotation += delta.x * sensitivity; + horizontalRotation -= delta.y * (sensitivity / 5.0f); + + horizontalRotation = std::clamp(horizontalRotation, -75.0f, +75.0f); + } + + ((InputState*)*(uint64_t*)INPUT_STATE_PTR_ADDRESS)->HideCursor(); + + Vec2 focus = PointFromAngle(verticalRotation, 1.0f); + camera->Focus.X = camera->Position.X + focus.X; + camera->Focus.Z = camera->Position.Z + focus.Y; + + camera->Focus.Y = camera->Position.Y + PointFromAngle(horizontalRotation, 5.0f).X; + } + + void CameraController::SetControls(bool value) + { + if (GetIsEnabled() == value) + return; + + SetIsEnabled(value); + componentsManager->SetUpdateGameInput(!value); + + printf("[TLAC] CameraController::SetControls(): enabled = %s\n", GetIsEnabled() ? "true" : "false"); + + typedef void __stdcall _glutSetCursor(int); + auto glutSetCursor = (_glutSetCursor*)GLUT_SET_CURSOR_ADDRESS; + + // hide cursor + glutSetCursor(value ? GLUT_CURSOR_NONE : GLUT_CURSOR_RIGHT_ARROW); + + if (value) + { + // disable camera setters + for (int i = 0; i < sizeof(cameraSetterAddresses) / sizeof(void*); i++) + *(uint8_t*)cameraSetterAddresses[i] = RET_OPCODE; + + // set initial camera angle + Vec2 camXz = Vec2(camera->Position.X, camera->Position.Z); + Vec2 focusXz = Vec2(camera->Focus.X, camera->Focus.Z); + verticalRotation = AngleFromPoints(camXz, focusXz); + + horizontalRotation = 0; + camera->Rotation = defaultRotation; + camera->HorizontalFov = defaultFov; + } + else + { + // restore camera setters + for (int i = 0; i < sizeof(cameraSetterAddresses) / sizeof(void*); i++) + *(uint8_t*)cameraSetterAddresses[i] = originalSetterBytes[i]; + } + } + + void CameraController::SetMouseWindowCenter() + { + RECT windowRect = framework::GetWindowBounds(); + + int centerX = windowRect.left + (windowRect.right - windowRect.left) / 2; + int centerY = windowRect.top + (windowRect.bottom - windowRect.top) / 2; + + Mouse::GetInstance()->SetPosition(centerX, centerY); + } + + bool CameraController::GetIsEnabled() + { + return isEnabled; + } + + void CameraController::SetIsEnabled(bool value) + { + isEnabled = value; + } +} \ No newline at end of file diff --git a/source/plugins/TLAC/Components/CameraController.h b/source/plugins/TLAC/Components/CameraController.h new file mode 100644 index 0000000..0d5cfbc --- /dev/null +++ b/source/plugins/TLAC/Components/CameraController.h @@ -0,0 +1,80 @@ +#pragma once +#include "EmulatorComponent.h" +#include "../Constants.h" +#include "../Input/Bindings/Binding.h" +#include "../Utilities/Math.h" + +namespace TLAC::Components +{ + struct Camera + { + Utilities::Vec3 Position; + Utilities::Vec3 Focus; + float Rotation; + float HorizontalFov; + float VerticalFov; + }; + + class CameraController : public EmulatorComponent + { + public: + Input::Binding* ToggleBinding; + + Input::Binding* ForwardBinding; + Input::Binding* BackwardBinding; + Input::Binding* LeftBinding; + Input::Binding* RightBinding; + + Input::Binding* UpBinding; + Input::Binding* DownBinding; + Input::Binding* FastBinding; + Input::Binding* SlowBinding; + + Input::Binding* ClockwiseBinding; + Input::Binding* CounterClockwiseBinding; + + Input::Binding* ZoomInBinding; + Input::Binding* ZoomOutBinding; + + CameraController(); + ~CameraController(); + + virtual const char* GetDisplayName() override; + + virtual void Initialize(ComponentsManager*) override; + virtual void Update() override; + virtual void UpdateInput() override; + + void SetControls(bool value); + + bool GetIsEnabled(); + + private: + const float fastSpeed = 0.1f; + const float slowSpeed = 0.0005f; + const float normalSpeed = 0.005f; + + const float defaultRotation = 0.0f; + const float defaultFov = 70.0f; + const float sensitivity = 0.25f; + + ComponentsManager* componentsManager; + float verticalRotation; + float horizontalRotation; + + bool isEnabled; + Camera* camera; + + uint8_t originalSetterBytes[4]; + void* cameraSetterAddresses[4] = + { + (void*)CAMERA_POS_SETTER_ADDRESS, + (void*)CAMERA_INTR_SETTER_ADDRESS, + (void*)CAMERA_ROT_SETTER_ADDRESS, + (void*)CAMERA_PERS_SETTER_ADDRESS, + }; + + void SetMouseWindowCenter(); + void SetIsEnabled(bool value); + }; +} diff --git a/source/plugins/TLAC/Components/ComponentsManager.cpp b/source/plugins/TLAC/Components/ComponentsManager.cpp new file mode 100644 index 0000000..1ad90b3 --- /dev/null +++ b/source/plugins/TLAC/Components/ComponentsManager.cpp @@ -0,0 +1,155 @@ +#include "ComponentsManager.h" +#include "../FileSystem/ConfigFile.h" +#include "../framework.h" +#include "Input/InputEmulator.h" +#include "Input/TouchSliderEmulator.h" +#include "Input/TouchPanelEmulator.h" +#include "SysTimer.h" +#include "PlayerDataManager.h" +#include "FrameRateManager.h" +#include "FastLoader.h" +#include "StageManager.h" +#include "CameraController.h" +#include "DebugComponent.h" +#include "ScaleComponent.h" +#include "FPSLimiter.h" +#include "GameTargets/TargetInspector.h" + +using ConfigFile = TLAC::FileSystem::ConfigFile; + +namespace TLAC::Components +{ + typedef void EngineUpdateInput(void*); + + ComponentsManager::ComponentsManager() + { + } + + ComponentsManager::~ComponentsManager() + { + } + + void ComponentsManager::ParseAddComponents() + { + EmulatorComponent* allComponents[] + { + new TargetInspector(), + new InputEmulator(), + new TouchSliderEmulator(), + new TouchPanelEmulator(), + new SysTimer(), + new PlayerDataManager(), + new FrameRateManager(), + new FastLoader(), + new ScaleComponent(), + new FPSLimiter(), + new StageManager(), + new CameraController(), + new DebugComponent(), + }; + + ConfigFile componentsConfig(framework::GetModuleDirectory(), COMPONENTS_CONFIG_FILE_NAME); + bool success = componentsConfig.OpenRead(); + + if (!success) + { + printf("ComponentsManager::ParseAddComponents(): Unable to parse %s\n", COMPONENTS_CONFIG_FILE_NAME.c_str()); + return; + } + + size_t componentCount = sizeof(allComponents) / sizeof(EmulatorComponent*); + components.reserve(componentCount); + + std::string trueString = "true", falseString = "false"; + + for (int i = 0; i < componentCount; i++) + { + std::string* value; + + auto name = allComponents[i]->GetDisplayName(); + //printf("ComponentsManager::ParseAddComponents(): searching name: %s\n", name); + + if (componentsConfig.TryGetValue(name, &value)) + { + //printf("ComponentsManager::ParseAddComponents(): %s found\n", name); + + if (*value == trueString) + { + //printf("ComponentsManager::ParseAddComponents(): enabling %s...\n", name); + components.push_back(allComponents[i]); + } + else if (*value == falseString) + { + //printf("ComponentsManager::ParseAddComponents(): disabling %s...\n", name); + } + else + { + //printf("ComponentsManager::ParseAddComponents(): invalid value %s for component %s\n", value, name); + } + + delete value; + } + else + { + //printf("ParseAddComponents(): component %s not found\n", name); + delete allComponents[i]; + } + } + } + + + void ComponentsManager::Initialize() + { + dwGuiDisplay = (DwGuiDisplay*) * (uint64_t*)DW_GUI_DISPLAY_INSTANCE_PTR_ADDRESS; + + ParseAddComponents(); + updateStopwatch.Start(); + + for (auto& component : components) + component->Initialize(this); + } + + void ComponentsManager::Update() + { + elpasedTime = updateStopwatch.Restart(); + + for (auto& component : components) + { + component->SetElapsedTime(elpasedTime); + component->Update(); + } + } + + void ComponentsManager::UpdateInput() + { + if (!GetIsInputEmulatorUsed()) + { + uint64_t* inputStatePtr = (uint64_t*)INPUT_STATE_PTR_ADDRESS; + + // poll input using the original PollInput function we overwrote with the update hook instead + if (inputStatePtr != nullptr) + ((EngineUpdateInput*)ENGINE_UPDATE_INPUT_ADDRESS)((void*)* inputStatePtr); + } + + for (auto& component : components) + component->UpdateInput(); + } + + void ComponentsManager::OnFocusGain() + { + for (auto& component : components) + component->OnFocusGain(); + } + + void ComponentsManager::OnFocusLost() + { + for (auto& component : components) + component->OnFocusLost(); + } + + void ComponentsManager::Dispose() + { + for (auto& component : components) + delete component; + } +} \ No newline at end of file diff --git a/source/plugins/TLAC/Components/ComponentsManager.h b/source/plugins/TLAC/Components/ComponentsManager.h new file mode 100644 index 0000000..0c20c0e --- /dev/null +++ b/source/plugins/TLAC/Components/ComponentsManager.h @@ -0,0 +1,55 @@ +#pragma once +#include "EmulatorComponent.h" +#include "../Utilities/Stopwatch.h" +#include +#include + +namespace TLAC::Components +{ + const std::string COMPONENTS_CONFIG_FILE_NAME = "components.ini"; + + // Incomplete type + struct DwGuiDisplay + { + void* vftable; + void* active; + void* cap; + void* on; + void* move; + void* widget; + }; + + class ComponentsManager + { + public: + ComponentsManager(); + ~ComponentsManager(); + void Initialize(); + void Update(); + void UpdateInput(); + void OnFocusGain(); + void OnFocusLost(); + void Dispose(); + + inline bool GetIsInputEmulatorUsed() { return isInputEmulatorUsed; }; + inline void SetIsInputEmulatorUsed(bool value) { isInputEmulatorUsed = value; }; + + inline bool GetUpdateGameInput() { return updateGameInput; }; + inline void SetUpdateGameInput(bool value) { updateGameInput = value; } + + inline bool IsDwGuiActive() { return dwGuiDisplay->active != nullptr; }; + inline bool IsDwGuiHovered() { return dwGuiDisplay->on != nullptr; }; + + private: + DwGuiDisplay* dwGuiDisplay; + + bool isInputEmulatorUsed = false; + bool updateGameInput = true; + + float elpasedTime; + Utilities::Stopwatch updateStopwatch; + std::vector components; + + void ParseAddComponents(); + }; +} \ No newline at end of file diff --git a/source/plugins/TLAC/Components/CustomPlayerData.h b/source/plugins/TLAC/Components/CustomPlayerData.h new file mode 100644 index 0000000..c8a156e --- /dev/null +++ b/source/plugins/TLAC/Components/CustomPlayerData.h @@ -0,0 +1,20 @@ +#pragma once +#include + +namespace TLAC::Components +{ + struct CustomPlayerData + { + std::string *PlayerName; + std::string* LevelName; + int LevelPlateId; + int SkinEquip; + int BtnSeEquip; + int SlideSeEquip; + int ChainslideSeEquip; + bool ShowGreatClearBorder; + bool ShowExcellentClearBorder; + bool UseCard; + bool GameModifierOptions; + }; +} diff --git a/source/plugins/TLAC/Components/DebugComponent.cpp b/source/plugins/TLAC/Components/DebugComponent.cpp new file mode 100644 index 0000000..1719596 --- /dev/null +++ b/source/plugins/TLAC/Components/DebugComponent.cpp @@ -0,0 +1,263 @@ +#include "DebugComponent.h" +#include "../Constants.h" + +namespace TLAC::Components +{ + const char* GameStateNames[] = + { + "STARTUP", + "ADVERTISE", + "GAME", + "DATA_TEST", + "TEST_MODE", + "APP_ERROR", + "MAX", + }; + + const char* SubGameStateNames[] = + { + "DATA_INITIALIZE", + "SYSTEM_STARTUP", + "SYSTEM_STARTUP_ERROR", + "WARNING", + "LOGO", + "RATING", + "DEMO", + "TITLE", + "RANKING", + "SCORE_RANKING", + "CM", + "PHOTO_MODE_DEMO", + "SELECTOR", + "GAME_MAIN", + "GAME_SEL", + "STAGE_RESULT", + "SCREEN_SHOT_SEL", + "SCREEN_SHOT_RESULT", + "GAME_OVER", + "DATA_TEST_MAIN", + "DATA_TEST_MISC", + "DATA_TEST_OBJ", + "DATA_TEST_STG", + "DATA_TEST_MOT", + "DATA_TEST_COLLISION", + "DATA_TEST_SPR", + "DATA_TEST_AET", + "DATA_TEST_AUTH_3D", + "DATA_TEST_CHR", + "DATA_TEST_ITEM", + "DATA_TEST_PERF", + "DATA_TEST_PVSCRIPT", + "DATA_TEST_PRINT", + "DATA_TEST_CARD", + "DATA_TEST_OPD", + "DATA_TEST_SLIDER", + "DATA_TEST_GLITTER", + "DATA_TEST_GRAPHICS", + "DATA_TEST_COLLECTION_CARD", + "TEST_MODE_MAIN", + "APP_ERROR", + "MAX", + }; + + const char* DataTestNames[] = + { + "MAIN TEST", + "MISC TEST", + "OBJECT TEST", + "STAGE TEST", + "MOTION TEST", + "COLLISION TEST", + "SPRITE TEST", + "2DAUTH TEST", + "3DAUTH TEST", + "CHARA TEST", + "ITEM TEST", + "PERFORMANCE TEST", + "PVSCRIPT TEST", + "PRINT TEST", + "CARD TEST", + "OPD TEST", + "SLIDER TEST", + "GLITTER TEST", + "GRAPHICS TEST", + "COLLECTION CARD TEST", + }; + + typedef void ChangeGameState(GameState); + ChangeGameState* changeGameState = (ChangeGameState*)CHANGE_MODE_ADDRESS; + + typedef void ChangeSubState(GameState, SubGameState); + ChangeSubState* changeSubState = (ChangeSubState*)CHANGE_SUB_MODE_ADDRESS; + + DebugComponent::DebugComponent() + { + } + + DebugComponent::~DebugComponent() + { + } + + const char* DebugComponent::GetDisplayName() + { + return "debug_component"; + } + + void DebugComponent::Initialize(ComponentsManager*) + { + printf("[TLAC] DebugComponent::Initialize(): Initialized\n"); + + InjectPatches(); + + HWND consoleHandle = GetConsoleWindow(); + ShowWindow(consoleHandle, SW_SHOW); + + // In case the FrameRateManager isn't enabled + DWORD oldProtect; + VirtualProtect((void*)AET_FRAME_DURATION_ADDRESS, sizeof(float), PAGE_EXECUTE_READWRITE, &oldProtect); + } + + void DebugComponent::Update() + { + if (dataTestMain) + { + Input::Keyboard::GetInstance()->PollInput(); + UpdateDataTestMain(); + } + } + + void DebugComponent::UpdateInput() + { + auto keyboard = Input::Keyboard::GetInstance(); + + // fast forward menus + if (keyboard->IsDown(VK_SHIFT)) + { + float* frameDuration = (float*)AET_FRAME_DURATION_ADDRESS; + + if (keyboard->IsDown(VK_TAB)) + *frameDuration = 1.0f / (GetGameFrameRate() / aetSpeedUpFactor); + else if (keyboard->IsReleased(VK_TAB)) + *frameDuration = 1.0f / 60.0f; + } + + for (size_t i = 0; i < _countof(gameStateKeyMappings); i++) + { + if (keyboard->IsTapped(gameStateKeyMappings[i].KeyCode)) + InternalChangeGameState(gameStateKeyMappings[i].State); + } + } + + void DebugComponent::InjectPatches() + { + const struct { void* Address; std::initializer_list Data; } patches[] = + { + // Prevent the DATA_TEST game state from exiting on the first frame + { (void*)0x0000000140284B01, { 0x00 } }, + // Enable dw_gui sprite draw calls + { (void*)0x0000000140192601, { 0x00 } }, + // Update the dw_gui display + { (void*)0x0000000140302600, { 0xB0, 0x01 } }, + // Draw the dw_gui display + { (void*)0x0000000140302610, { 0xB0, 0x01 } }, + // Enable the dw_gui widgets + { (void*)0x0000000140192D00, { 0xB8, 0x01, 0x00, 0x00, 0x00, 0xC3 } }, + }; + + for (size_t i = 0; i < _countof(patches); i++) + InjectCode(patches[i].Address, patches[i].Data); + } + + void DebugComponent::SetConsoleForeground() + { + HWND consoleHandle = GetConsoleWindow(); + ShowWindow(consoleHandle, SW_SHOW); + + if (consoleHandle == NULL) + return; + + WINDOWPLACEMENT place = { sizeof(WINDOWPLACEMENT) }; + GetWindowPlacement(consoleHandle, &place); + + switch (place.showCmd) + { + case SW_SHOWMAXIMIZED: + ShowWindow(consoleHandle, SW_SHOWMAXIMIZED); + break; + case SW_SHOWMINIMIZED: + ShowWindow(consoleHandle, SW_RESTORE); + break; + default: + ShowWindow(consoleHandle, SW_NORMAL); + break; + } + + SetWindowPos(0, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE); + SetForegroundWindow(consoleHandle); + } + + void DebugComponent::PrintDataTestMain() + { + system("cls"); + printf(" DATA TEST MAIN:\n\n"); + + for (int i = SUB_DATA_TEST_MISC; i <= SUB_DATA_TEST_COLLECTION_CARD; i++) + printf("%s %s\n", i == selectionIndex ? "->" : " ", DataTestNames[i - SUB_DATA_TEST_MAIN]); + + printf("\n"); + SetConsoleForeground(); + } + + void DebugComponent::InternalChangeGameState(GameState state) + { + changeGameState(state); + printDataTestMain = dataTestMain = (state == GS_DATA_TEST); + } + + void DebugComponent::UpdateDataTestMain() + { + auto keyboard = Input::Keyboard::GetInstance(); + + if (keyboard->IsIntervalTapped(VK_UP)) + { + selectionIndex--; + printDataTestMain = true; + } + + if (keyboard->IsIntervalTapped(VK_DOWN)) + { + selectionIndex++; + printDataTestMain = true; + } + + if (selectionIndex > SUB_DATA_TEST_COLLECTION_CARD) + selectionIndex = SUB_DATA_TEST_MISC; + + if (selectionIndex < SUB_DATA_TEST_MISC) + selectionIndex = SUB_DATA_TEST_COLLECTION_CARD; + + if (keyboard->IsTapped(VK_RETURN)) + { + dataTestMain = false; + + printf("[%s] -> [%s]\n", SubGameStateNames[SUB_DATA_TEST_MAIN], SubGameStateNames[selectionIndex]); + changeSubState(GS_DATA_TEST, (SubGameState)selectionIndex); + } + + if (printDataTestMain) + { + PrintDataTestMain(); + printDataTestMain = false; + } + } + + void DebugComponent::InjectCode(void* address, const std::initializer_list &data) + { + const size_t byteCount = data.size() * sizeof(uint8_t); + + DWORD oldProtect; + VirtualProtect(address, byteCount, PAGE_EXECUTE_READWRITE, &oldProtect); + + memcpy(address, data.begin(), byteCount); + } +} diff --git a/source/plugins/TLAC/Components/DebugComponent.h b/source/plugins/TLAC/Components/DebugComponent.h new file mode 100644 index 0000000..480ee71 --- /dev/null +++ b/source/plugins/TLAC/Components/DebugComponent.h @@ -0,0 +1,44 @@ +#pragma once +#include "EmulatorComponent.h" +#include "GameState.h" +#include "../Input/Keyboard/Keyboard.h" + +namespace TLAC::Components +{ + class DebugComponent : public EmulatorComponent + { + public: + DebugComponent(); + ~DebugComponent(); + + virtual const char* GetDisplayName() override; + + virtual void Initialize(ComponentsManager*) override; + virtual void Update() override; + virtual void UpdateInput() override; + + private: + const float aetSpeedUpFactor = 4.0f; + + bool dataTestMain = false; + bool printDataTestMain = false; + int selectionIndex = SUB_DATA_TEST_MISC; + + const struct { BYTE KeyCode; GameState State; } gameStateKeyMappings[5] = + { + { VK_F4, GS_ADVERTISE }, + { VK_F5, GS_GAME }, + { VK_F6, GS_DATA_TEST }, + { VK_F7, GS_TEST_MODE }, + { VK_F8, GS_APP_ERROR }, + }; + + void InjectPatches(); + void SetConsoleForeground(); + void PrintDataTestMain(); + void InternalChangeGameState(GameState state); + void UpdateDataTestMain(); + void InjectCode(void* address, const std::initializer_list &data); + }; +} + diff --git a/source/plugins/TLAC/Components/EmulatorComponent.cpp b/source/plugins/TLAC/Components/EmulatorComponent.cpp new file mode 100644 index 0000000..8482ed9 --- /dev/null +++ b/source/plugins/TLAC/Components/EmulatorComponent.cpp @@ -0,0 +1,33 @@ +#include "EmulatorComponent.h" +#include "../Constants.h" + +namespace TLAC::Components +{ + EmulatorComponent::EmulatorComponent() + { + } + + EmulatorComponent::~EmulatorComponent() + { + } + + void EmulatorComponent::SetElapsedTime(float value) + { + elapsedTime = value; + } + + float EmulatorComponent::GetElapsedTime() + { + return elapsedTime == 0.0f ? (1000.0f / 60.0f) : elapsedTime; + } + + float EmulatorComponent::GetFrameRate() + { + return 1000.0f / GetElapsedTime(); + } + + float EmulatorComponent::GetGameFrameRate() + { + return *(float*)FRAME_RATE_ADDRESS; + } +} diff --git a/source/plugins/TLAC/Components/EmulatorComponent.h b/source/plugins/TLAC/Components/EmulatorComponent.h new file mode 100644 index 0000000..48b6175 --- /dev/null +++ b/source/plugins/TLAC/Components/EmulatorComponent.h @@ -0,0 +1,30 @@ +#pragma once + +namespace TLAC::Components +{ + class ComponentsManager; + + class EmulatorComponent + { + public: + EmulatorComponent(); + ~EmulatorComponent(); + + virtual const char* GetDisplayName() = 0; + + virtual void Initialize(ComponentsManager*) = 0; + virtual void Update() = 0; + + virtual void UpdateInput() {}; + virtual void OnFocusGain() {}; + virtual void OnFocusLost() {}; + + void SetElapsedTime(float value); + float GetElapsedTime(); + float GetFrameRate(); + float GetGameFrameRate(); + + private: + float elapsedTime; + }; +} diff --git a/source/plugins/TLAC/Components/FPSLimiter.cpp b/source/plugins/TLAC/Components/FPSLimiter.cpp new file mode 100644 index 0000000..54b4d1c --- /dev/null +++ b/source/plugins/TLAC/Components/FPSLimiter.cpp @@ -0,0 +1,67 @@ +#include "FPSLimiter.h" +#include +#include +#include +#include +#include +#include + +using dsec = std::chrono::duration; +using seconds = std::chrono::seconds; + +// this is pretty much just lybxlpsv's limiter, but removed from GLComponent + +namespace TLAC::Components +{ + using namespace std::chrono; + + static std::chrono::time_point mBeginFrame = system_clock::now(); + static std::chrono::time_point prevTimeInSeconds = time_point_cast(mBeginFrame); + + const LPCTSTR config_file_name = _T(".\\config.ini"); + int fpsLimit = GetPrivateProfileIntW(L"graphics", L"fps.limit", 0, config_file_name); + + FPSLimiter::FPSLimiter() + { + } + + FPSLimiter::~FPSLimiter() + { + } + + const char* FPSLimiter::GetDisplayName() + { + return "fps_limiter"; + } + + void FPSLimiter::Initialize(ComponentsManager* manager) + { + mBeginFrame = std::chrono::system_clock::now(); + prevTimeInSeconds = std::chrono::time_point_cast(mBeginFrame); + frameCountPerSecond = 0; + if(fpsLimit != 0) + printf("FPSLimiter fpsLimit: %d\n", fpsLimit); + } + + // I assume this gets called once per frame... if not this won't work + void FPSLimiter::Update() + { + auto invFpsLimit = round(dsec{ 1. / fpsLimit }); + auto mEndFrame = mBeginFrame + invFpsLimit; + auto timeInSeconds = std::chrono::time_point_cast(std::chrono::system_clock::now()); + + ++frameCountPerSecond; + if (timeInSeconds > prevTimeInSeconds) + { + //printf("FPSLimiter::Update(): FPS: %d\n", frameCountPerSecond); + frameCountPerSecond = 0; + prevTimeInSeconds = timeInSeconds; + } + + // This part keeps the frame rate. + if (fpsLimit > 19) // not sure why lyb used 19 here + std::this_thread::sleep_until(mEndFrame); + mBeginFrame = mEndFrame; + mEndFrame = mBeginFrame + invFpsLimit; + } +} \ No newline at end of file diff --git a/source/plugins/TLAC/Components/FPSLimiter.h b/source/plugins/TLAC/Components/FPSLimiter.h new file mode 100644 index 0000000..d975a53 --- /dev/null +++ b/source/plugins/TLAC/Components/FPSLimiter.h @@ -0,0 +1,23 @@ +#pragma once +#include "EmulatorComponent.h" +#include + +using seconds = std::chrono::seconds; + +namespace TLAC::Components +{ + class FPSLimiter : public EmulatorComponent + { + public: + FPSLimiter(); + ~FPSLimiter(); + + virtual const char* GetDisplayName() override; + + virtual void Initialize(ComponentsManager*) override; + virtual void Update() override; + + private: + int frameCountPerSecond; + }; +} \ No newline at end of file diff --git a/source/plugins/TLAC/Components/FastLoader.cpp b/source/plugins/TLAC/Components/FastLoader.cpp new file mode 100644 index 0000000..6832907 --- /dev/null +++ b/source/plugins/TLAC/Components/FastLoader.cpp @@ -0,0 +1,60 @@ +#include "FastLoader.h" +#include "../Constants.h" +#include + +namespace TLAC::Components +{ + FastLoader::FastLoader() + { + } + + FastLoader::~FastLoader() + { + } + + const char* FastLoader::GetDisplayName() + { + return "fast_loader"; + } + + void FastLoader::Initialize(ComponentsManager*) + { + } + + void FastLoader::Update() + { + if (dataInitialized) + return; + + previousGameState = currentGameState; + currentGameState = *(GameState*)CURRENT_GAME_STATE_ADDRESS; + + if (currentGameState == GS_STARTUP) + { + typedef void UpdateTask(); + UpdateTask* updateTask = (UpdateTask*)UPDATE_TASKS_ADDRESS; + + // speed up TaskSystemStartup + for (int i = 0; i < updatesPerFrame; i++) + updateTask(); + + constexpr int DATA_INITIALIZED = 3; + + // skip TaskDataInit + *(int*)(DATA_INIT_STATE_ADDRESS) = DATA_INITIALIZED; + + // skip TaskWarning + *(int*)(SYSTEM_WARNING_ELAPSED_ADDRESS) = 3939; + } + else if (previousGameState == GS_STARTUP) + { + dataInitialized = true; + printf("[TLAC] FastLoader::Update(): Data Initialized\n"); + } + } + + void FastLoader::UpdateInput() + { + return; + } +} diff --git a/source/plugins/TLAC/Components/FastLoader.h b/source/plugins/TLAC/Components/FastLoader.h new file mode 100644 index 0000000..1319cbc --- /dev/null +++ b/source/plugins/TLAC/Components/FastLoader.h @@ -0,0 +1,26 @@ +#pragma once +#include "EmulatorComponent.h" +#include "GameState.h" + +namespace TLAC::Components +{ + class FastLoader : public EmulatorComponent + { + public: + FastLoader(); + ~FastLoader(); + + virtual const char* GetDisplayName() override; + + virtual void Initialize(ComponentsManager*) override; + virtual void Update() override; + virtual void UpdateInput() override; + + private: + const int updatesPerFrame = 39; + + GameState currentGameState; + GameState previousGameState; + bool dataInitialized = false; + }; +} diff --git a/source/plugins/TLAC/Components/FrameRateManager.cpp b/source/plugins/TLAC/Components/FrameRateManager.cpp new file mode 100644 index 0000000..c902a2f --- /dev/null +++ b/source/plugins/TLAC/Components/FrameRateManager.cpp @@ -0,0 +1,86 @@ +#include "FrameRateManager.h" +#include "../Constants.h" +#include "GameState.h" +#include +#include +#include "../framework.h" + +namespace TLAC::Components +{ + FrameRateManager::FrameRateManager() + { + } + + FrameRateManager::~FrameRateManager() + { + } + + const char* FrameRateManager::GetDisplayName() + { + return "frame_rate_manager"; + } + + void FrameRateManager::Initialize(ComponentsManager*) + { + pvFrameRate = (float*)PV_FRAME_RATE_ADDRESS; + frameSpeed = (float*)FRAME_SPEED_ADDRESS; + aetFrameDuration = (float*)AET_FRAME_DURATION_ADDRESS; + + // The default is expected to be 1.0 / 60.0 + defaultAetFrameDuration = *aetFrameDuration; + + // This const variable is stored inside a data segment so we don't want to throw any access violations + DWORD oldProtect; + VirtualProtect((void*)AET_FRAME_DURATION_ADDRESS, sizeof(float), PAGE_EXECUTE_READWRITE, &oldProtect); + } + + void FrameRateManager::Update() + { + float frameRate = 0.0f; + frameRate = RoundFrameRate(GetGameFrameRate()); + + *aetFrameDuration = 1.0f / frameRate; + *pvFrameRate = frameRate; + + bool inGame = *(GameState*)CURRENT_GAME_STATE_ADDRESS == GS_GAME; + + if (inGame) + { + // During the GAME state the frame rate will be handled by the PvFrameRate instead + + constexpr float defaultFrameSpeed = 1.0f; + constexpr float defaultFrameRate = 60.0f; + + // This PV struct creates a copy of the PvFrameRate & PvFrameSpeed during the loading screen + // so we'll make sure to keep updating it as well. + // Each new motion also creates its own copy of these values but keeping track of the active motions is annoying + // and they usually change multiple times per PV anyway so this should suffice for now + float* pvStructPvFrameRate = (float*)(0x0000000140CDD978 + 0x2BF98); + float* pvStructPvFrameSpeed = (float*)(0x0000000140CDD978 + 0x2BF9C); + + *pvStructPvFrameRate = *pvFrameRate; + *pvStructPvFrameSpeed = (defaultFrameRate / *pvFrameRate); + + *frameSpeed = defaultFrameSpeed; + } + else + { + *frameSpeed = *aetFrameDuration / defaultAetFrameDuration; + } + } + + float FrameRateManager::RoundFrameRate(float frameRate) + { + constexpr float roundingThreshold = 4.0f; + + for (int i = 0; i < sizeof(commonRefreshRates) / sizeof(float); i++) + { + float refreshRate = commonRefreshRates[i]; + + if (frameRate > refreshRate - roundingThreshold && frameRate < refreshRate + roundingThreshold) + frameRate = refreshRate; + } + + return frameRate; + } +} diff --git a/source/plugins/TLAC/Components/FrameRateManager.h b/source/plugins/TLAC/Components/FrameRateManager.h new file mode 100644 index 0000000..f6a6600 --- /dev/null +++ b/source/plugins/TLAC/Components/FrameRateManager.h @@ -0,0 +1,34 @@ +#pragma once +#include "EmulatorComponent.h" + +namespace TLAC::Components +{ + class FrameRateManager : public EmulatorComponent + { + public: + FrameRateManager(); + ~FrameRateManager(); + + virtual const char* GetDisplayName() override; + + virtual void Initialize(ComponentsManager*) override; + virtual void Update() override; + + private: + float *pvFrameRate; + float *frameSpeed; + float *aetFrameDuration; + float defaultAetFrameDuration; + + float commonRefreshRates[5] + { + 60.0f, + 75.0f, + 120.0f, + 144.0f, + 240.0f, + }; + + float RoundFrameRate(float frameRate); + }; +} diff --git a/source/plugins/TLAC/Components/GameState.h b/source/plugins/TLAC/Components/GameState.h new file mode 100644 index 0000000..cb86647 --- /dev/null +++ b/source/plugins/TLAC/Components/GameState.h @@ -0,0 +1,62 @@ +#pragma once +#include + +namespace TLAC::Components +{ + enum GameState : uint32_t + { + GS_STARTUP, + GS_ADVERTISE, + GS_GAME, + GS_DATA_TEST, + GS_TEST_MODE, + GS_APP_ERROR, + GS_MAX, + }; + + enum SubGameState : uint32_t + { + SUB_DATA_INITIALIZE, + SUB_SYSTEM_STARTUP, + SUB_SYSTEM_STARTUP_ERROR, + SUB_WARNING, + SUB_LOGO, + SUB_RATING, + SUB_DEMO, + SUB_TITLE, + SUB_RANKING, + SUB_SCORE_RANKING, + SUB_CM, + SUB_PHOTO_MODE_DEMO, + SUB_SELECTOR, + SUB_GAME_MAIN, + SUB_GAME_SEL, + SUB_STAGE_RESULT, + SUB_SCREEN_SHOT_SEL, + SUB_SCREEN_SHOT_RESULT, + SUB_GAME_OVER, + SUB_DATA_TEST_MAIN, + SUB_DATA_TEST_MISC, + SUB_DATA_TEST_OBJ, + SUB_DATA_TEST_STG, + SUB_DATA_TEST_MOT, + SUB_DATA_TEST_COLLISION, + SUB_DATA_TEST_SPR, + SUB_DATA_TEST_AET, + SUB_DATA_TEST_AUTH_3D, + SUB_DATA_TEST_CHR, + SUB_DATA_TEST_ITEM, + SUB_DATA_TEST_PERF, + SUB_DATA_TEST_PVSCRIPT, + SUB_DATA_TEST_PRINT, + SUB_DATA_TEST_CARD, + SUB_DATA_TEST_OPD, + SUB_DATA_TEST_SLIDER, + SUB_DATA_TEST_GLITTER, + SUB_DATA_TEST_GRAPHICS, + SUB_DATA_TEST_COLLECTION_CARD, + SUB_TEST_MODE_MAIN, + SUB_APP_ERROR, + SUB_MAX, + }; +} \ No newline at end of file diff --git a/source/plugins/TLAC/Components/GameTargets/HoldState.h b/source/plugins/TLAC/Components/GameTargets/HoldState.h new file mode 100644 index 0000000..974fe1d --- /dev/null +++ b/source/plugins/TLAC/Components/GameTargets/HoldState.h @@ -0,0 +1,13 @@ +#pragma once + +namespace TLAC::Components +{ + enum HoldState + { + HOLD_NONE, + HOLD_SANKAKU = 64, + HOLD_MARU = 128, + HOLD_BATSU = 256, + HOLD_SHIKAKU = 512, + }; +} \ No newline at end of file diff --git a/source/plugins/TLAC/Components/GameTargets/TargetHitStates.h b/source/plugins/TLAC/Components/GameTargets/TargetHitStates.h new file mode 100644 index 0000000..2dbe423 --- /dev/null +++ b/source/plugins/TLAC/Components/GameTargets/TargetHitStates.h @@ -0,0 +1,18 @@ +#pragma once + +namespace TLAC::Components +{ + enum TargetHitStates + { + COOL, + FINE, + SAFE, + SAD, + COOL_WRONG, // unsure + FINE_WRONG, // unsure + SAFE_WRONG, // unsure + SAD_WRONG, // unsure + WORST, + NONE = 21, + }; +} \ No newline at end of file diff --git a/source/plugins/TLAC/Components/GameTargets/TargetInspector.cpp b/source/plugins/TLAC/Components/GameTargets/TargetInspector.cpp new file mode 100644 index 0000000..803670a --- /dev/null +++ b/source/plugins/TLAC/Components/GameTargets/TargetInspector.cpp @@ -0,0 +1,77 @@ +#include "TargetInspector.h" + +namespace TLAC::Components +{ + bool TargetInspector::repressTbl[maxTargetSlots]; + + TargetInspector::TargetInspector() + { + } + + TargetInspector::~TargetInspector() + { + } + + void TargetInspector::Initialize(ComponentsManager*) + { + tgtTypePtr = (int*)TGT_TYPE_BASE_ADDRESS; + tgtHitStatePtr = (int*)TGT_HIT_STATE_BASE_ADDRESS; + tgtRemainingTimePtr = (float*)TGT_REMAINING_DURATION_BASE_ADDRESS; + } + + void TargetInspector::Update() + { + GetTargetStates(); + UpdateRepressTbl(); + } + + const char* TargetInspector::GetDisplayName() + { + return "target_inspector"; + } + + void TargetInspector::GetTargetStates() + { + for (int i = 0; i < maxTargetSlots; ++i) + { + tgtStates[i].tgtType = *((int*)((char*)tgtTypePtr + (i * offset))); + tgtStates[i].tgtHitState = *((int*)((char*)tgtHitStatePtr + (i * offset))); + tgtStates[i].tgtRemainingTime = *((float*)((char*)tgtRemainingTimePtr + (i * offset))); + } + } + + void TargetInspector::UpdateRepressTbl() + { + for (int i = 0; i < maxTargetSlots; ++i) + { + repressTbl[i] = IsWithinRange(tgtStates[i].tgtRemainingTime) + && HasNotBeenHit(tgtStates[i].tgtHitState) + && !IsSlide(tgtStates[i].tgtType); + } + } + + bool TargetInspector::IsWithinRange(float time) + { + return time < timingThreshold && time > -timingThreshold && time != 0; + } + + bool TargetInspector::HasNotBeenHit(int hitState) + { + return hitState == NONE; + } + + bool TargetInspector::IsSlide(int type) + { + return (type >= SLIDE_L && type <= SLIDE_LONG_R) || type >= SLIDE_L_CH; + } + + bool TargetInspector::IsAnyRepress() + { + for (int i = 0; i < maxTargetSlots; ++i) + { + if (repressTbl[i]) + return true; + } + return false; + } +} diff --git a/source/plugins/TLAC/Components/GameTargets/TargetInspector.h b/source/plugins/TLAC/Components/GameTargets/TargetInspector.h new file mode 100644 index 0000000..87fb103 --- /dev/null +++ b/source/plugins/TLAC/Components/GameTargets/TargetInspector.h @@ -0,0 +1,43 @@ +#pragma once +#include "../EmulatorComponent.h" +#include "../Input/InputEmulator.h" +#include "../../Constants.h" +#include "TargetHitStates.h" +#include "TargetState.h" + +namespace TLAC::Components +{ + const int maxTargetSlots = 32; + + class TargetInspector : public EmulatorComponent + { + public: + TargetInspector(); + ~TargetInspector(); + + static bool repressTbl[maxTargetSlots]; + + virtual void Initialize(ComponentsManager*) override; + virtual void Update() override; + virtual const char* GetDisplayName() override; + + void GetTargetStates(); + static bool IsAnyRepress(); + + private: + const uint64_t offset = 0x4A8; + const float timingThreshold = 0.13f; // PS4 estimate + + TargetState tgtStates[maxTargetSlots]; + + int* tgtTypePtr; + int* tgtHitStatePtr; + float* tgtRemainingTimePtr; + + bool IsSlide(int); + bool IsWithinRange(float); + bool HasNotBeenHit(int); + void UpdateRepressTbl(); + + }; +} \ No newline at end of file diff --git a/source/plugins/TLAC/Components/GameTargets/TargetState.h b/source/plugins/TLAC/Components/GameTargets/TargetState.h new file mode 100644 index 0000000..7ea6cff --- /dev/null +++ b/source/plugins/TLAC/Components/GameTargets/TargetState.h @@ -0,0 +1,11 @@ +#pragma once + +namespace TLAC::Components +{ + struct TargetState + { + int tgtType; + int tgtHitState; + float tgtRemainingTime; + }; +} \ No newline at end of file diff --git a/source/plugins/TLAC/Components/GameTargets/TargetTypes.h b/source/plugins/TLAC/Components/GameTargets/TargetTypes.h new file mode 100644 index 0000000..f152417 --- /dev/null +++ b/source/plugins/TLAC/Components/GameTargets/TargetTypes.h @@ -0,0 +1,26 @@ +#pragma once + +namespace TLAC::Components +{ + enum TargetTypes + { + SANKAKU, + MARU, + BATSU, + SHIKAKU, + SANKAKU_H, + MARU_H, + BATSU_H, + SHIKAKU_H, + SLIDE_L = 12, + SLIDE_R, + SLIDE_LONG_L = 15, + SLIDE_LONG_R, + SANKAKU_CH = 18, + MARU_CH, + BATSU_CH, + SHIKAKU_CH, + SLIDE_L_CH = 23, + SLIDE_R_CH, + }; +} \ No newline at end of file diff --git a/source/plugins/TLAC/Components/Input/InputBufferType.h b/source/plugins/TLAC/Components/Input/InputBufferType.h new file mode 100644 index 0000000..06c4e3f --- /dev/null +++ b/source/plugins/TLAC/Components/Input/InputBufferType.h @@ -0,0 +1,14 @@ +#pragma once + +namespace TLAC::Components +{ + enum InputBufferType + { + InputBufferType_Tapped, + InputBufferType_Released, + InputBufferType_Down, + InputBufferType_DoubleTapped, + InputBufferType_IntervalTapped, + InputBufferType_Max, + }; +} \ No newline at end of file diff --git a/source/plugins/TLAC/Components/Input/InputEmulator.cpp b/source/plugins/TLAC/Components/Input/InputEmulator.cpp new file mode 100644 index 0000000..6c69a19 --- /dev/null +++ b/source/plugins/TLAC/Components/Input/InputEmulator.cpp @@ -0,0 +1,305 @@ +#include +#include "windows.h" +#include "InputEmulator.h" +#include "../ComponentsManager.h" +#include "../../Constants.h" +#include "../../framework.h" +#include "../../Input/Bindings/KeyboardBinding.h" +#include "../../Input/Bindings/XinputBinding.h" +#include "../../Input/Bindings/MouseBinding.h" +#include "../../Input/Bindings/Ds4Binding.h" +#include "../../Input/KeyConfig/Config.h" +#include "../../Utilities/Operations.h" +#include "../../Utilities/EnumBitwiseOperations.h" +#include "../../FileSystem/ConfigFile.h" + +const std::string KEY_CONFIG_FILE_NAME = "keyconfig.ini"; + +using namespace TLAC::Input; +using namespace TLAC::Input::KeyConfig; +using namespace TLAC::Utilities; + +namespace TLAC::Components +{ + + InputEmulator::InputEmulator() + { + + } + + InputEmulator::~InputEmulator() + { + delete TestBinding; + delete ServiceBinding; + + delete StartBinding; + delete SankakuBinding; + delete ShikakuBinding; + delete BatsuBinding; + delete MaruBinding; + + delete LeftBinding; + delete RightBinding; + } + + const char* InputEmulator::GetDisplayName() + { + return "input_emulator"; + } + + void InputEmulator::Initialize(ComponentsManager* manager) + { + componentsManager = manager; + componentsManager->SetIsInputEmulatorUsed(true); + + inputState = GetInputStatePtr((void*)INPUT_STATE_PTR_ADDRESS); + inputState->HideCursor(); + + TestBinding = new Binding(); + ServiceBinding = new Binding(); + StartBinding = new Binding(); + + SankakuBinding = new Binding(); + ShikakuBinding = new Binding(); + BatsuBinding = new Binding(); + MaruBinding = new Binding(); + + LeftBinding = new Binding(); + RightBinding = new Binding(); + + FileSystem::ConfigFile configFile(framework::GetModuleDirectory(), KEY_CONFIG_FILE_NAME); + configFile.OpenRead(); + + Config::BindConfigKeys(configFile.ConfigMap, "JVS_TEST", *TestBinding, { "F1" }); + Config::BindConfigKeys(configFile.ConfigMap, "JVS_SERVICE", *ServiceBinding, { "F2" }); + Config::BindConfigKeys(configFile.ConfigMap, "JVS_START", *StartBinding, { "Enter" }); + Config::BindConfigKeys(configFile.ConfigMap, "JVS_TRIANGLE", *SankakuBinding, { "W", "I" }); + Config::BindConfigKeys(configFile.ConfigMap, "JVS_SQUARE", *ShikakuBinding, { "A", "J" }); + Config::BindConfigKeys(configFile.ConfigMap, "JVS_CROSS", *BatsuBinding, { "S", "K" }); + Config::BindConfigKeys(configFile.ConfigMap, "JVS_CIRCLE", *MaruBinding, { "D", "L" }); + Config::BindConfigKeys(configFile.ConfigMap, "JVS_LEFT", *LeftBinding, { "Q", "U" }); + Config::BindConfigKeys(configFile.ConfigMap, "JVS_RIGHT", *RightBinding, { "E", "O" }); + + mouseScrollPvSelection = configFile.GetBooleanValue("mouse_scroll_pv_selection"); + } + + void InputEmulator::Update() + { + return; + } + + void InputEmulator::OnFocusLost() + { + // to prevent buttons from being "stuck" + inputState->ClearState(); + inputState->HideCursor(); + } + + void InputEmulator::UpdateInput() + { + if (!componentsManager->GetUpdateGameInput()) + return; + + if (!componentsManager->IsDwGuiActive()) + { + UpdateJvsInput(); + + if (mouseScrollPvSelection && !componentsManager->IsDwGuiHovered()) + UpdateMousePvScroll(); + } + + UpdateDwGuiInput(); + } + + void InputEmulator::UpdateJvsInput() + { + auto tappedFunc = [](void* binding) { return ((Binding*)binding)->AnyTapped(); }; + auto releasedFunc = [](void* binding) { return ((Binding*)binding)->AnyReleased(); }; + auto downFunc = [](void* binding) { return ((Binding*)binding)->AnyDown(); }; + + lastDownState = inputState->Down.Buttons; + + inputState->Tapped.Buttons = GetJvsButtonsState(tappedFunc); + inputState->Released.Buttons = GetJvsButtonsState(releasedFunc); + inputState->Down.Buttons = GetJvsButtonsState(downFunc); + inputState->DoubleTapped.Buttons = GetJvsButtonsState(tappedFunc); + inputState->IntervalTapped.Buttons = GetJvsButtonsState(tappedFunc); + + UpdateHoldState(); + heldButtons = GetButtonFromHold(); + + if ((lastDownState &= inputState->Tapped.Buttons) != 0) + { + inputState->Down.Buttons ^= inputState->Tapped.Buttons; + if (IsHold() && !TargetInspector::IsAnyRepress()) + inputState->Down.Buttons |= heldButtons; + } + + // repress held down buttons to not block input + //inputState->Down.Buttons ^= inputState->Tapped.Buttons; + } + + HoldState InputEmulator::GetHoldState() + { + return (HoldState) * ((int*)HOLD_STATE_ADDRESS); + } + + int InputEmulator::GetMaxHoldState() + { + return *(int*)MAX_HOLD_STATE_ADDRESS; + } + + bool InputEmulator::IsHold() + { + return ((holdState != HOLD_NONE) && (GetMaxHoldState() != 1)); + } + + void InputEmulator::UpdateHoldState() + { + holdState = GetHoldState(); + + for (int i = 0; i < 4; ++i) + { + int holdId = 1 << (i + 6); + + if ((holdId & holdState) != 0) + holdTbl[i] = 1; + else + holdTbl[i] = 0; + } + } + + void InputEmulator::UpdateDwGuiInput() + { + auto keyboard = Keyboard::GetInstance(); + auto mouse = Mouse::GetInstance(); + + auto pos = mouse->GetRelativePosition(); + inputState->MouseX = (int)pos.x; + inputState->MouseY = (int)pos.y; + + auto deltaPos = mouse->GetDeltaPosition(); + inputState->MouseDeltaX = (int)deltaPos.x; + inputState->MouseDeltaY = (int)deltaPos.y; + + inputState->Key = GetKeyState(); + + for (int i = 0; i < sizeof(keyBits) / sizeof(KeyBit); i++) + UpdateInputBit(keyBits[i].Bit, keyBits[i].KeyCode); + + for (int i = InputBufferType_Tapped; i < InputBufferType_Max; i++) + { + inputState->SetBit(scrollUpBit, mouse->GetIsScrolledUp(), (InputBufferType)i); + inputState->SetBit(scrollDownBit, mouse->GetIsScrolledDown(), (InputBufferType)i); + } + } + + void InputEmulator::UpdateMousePvScroll() + { + // I originally wanted to use a MouseBinding set to JVS_LEFT / JVS_RIGHT + // but that ended up being too slow because a PV slot can only be scrolled to once the scroll animation has finished playing + int* slotsToScroll = (int*)PV_SEL_SLOTS_TO_SCROLL; + int* modulesToScroll = (int*)MODULE_SEL_SLOTS_TO_SCROLL; + + auto mouse = Mouse::GetInstance(); + if (mouse->GetIsScrolledUp()) + { + if (*(int*)PV_SEL_SLOTS_CONST < 26) *slotsToScroll -= 1; + if (*(int*)MODULE_IS_RECOMMENDED == 0) *modulesToScroll -= 1; + } + if (mouse->GetIsScrolledDown()) + { + if (*(int*)PV_SEL_SLOTS_CONST < 26) *slotsToScroll += 1; + if (*(int*)MODULE_IS_RECOMMENDED == 0) *modulesToScroll += 1; + } + } + + InputState* InputEmulator::GetInputStatePtr(void* address) + { + return (InputState*)(*(uint64_t*)address); + } + + JvsButtons InputEmulator::GetJvsButtonsState(bool(*buttonTestFunc)(void*)) + { + JvsButtons buttons = JVS_NONE; + + if (buttonTestFunc(TestBinding)) + buttons |= JVS_TEST; + if (buttonTestFunc(ServiceBinding)) + buttons |= JVS_SERVICE; + + if (buttonTestFunc(StartBinding)) + buttons |= JVS_START; + + if (buttonTestFunc(SankakuBinding)) + buttons |= JVS_TRIANGLE; + if (buttonTestFunc(ShikakuBinding)) + buttons |= JVS_SQUARE; + if (buttonTestFunc(BatsuBinding)) + buttons |= JVS_CROSS; + if (buttonTestFunc(MaruBinding)) + buttons |= JVS_CIRCLE; + + if (buttonTestFunc(LeftBinding)) + buttons |= JVS_L; + if (buttonTestFunc(RightBinding)) + buttons |= JVS_R; + + return buttons; + } + + JvsButtons InputEmulator::GetButtonFromHold() + { + JvsButtons buttons = JVS_NONE; + + if (holdTbl[0]) + buttons |= JVS_TRIANGLE; + if (holdTbl[1]) + buttons |= JVS_CIRCLE; + if (holdTbl[2]) + buttons |= JVS_CROSS; + if (holdTbl[3]) + buttons |= JVS_SQUARE; + + return buttons; + } + + char InputEmulator::GetKeyState() + { + auto keyboard = Keyboard::GetInstance(); + + bool upper = keyboard->IsDown(VK_SHIFT); + constexpr char caseDifference = 'A' - 'a'; + + char inputKey = 0x00; + + for (char key = '0'; key < 'Z'; key++) + { + if (keyboard->IsIntervalTapped(key)) + inputKey = (upper || key < 'A') ? key : (key - caseDifference); + } + + if (keyboard->IsIntervalTapped(VK_BACK)) + inputKey = 0x08; + + if (keyboard->IsIntervalTapped(VK_TAB)) + inputKey = 0x09; + + if (keyboard->IsIntervalTapped(VK_SPACE)) + inputKey = 0x20; + + return inputKey; + } + + void InputEmulator::UpdateInputBit(uint32_t bit, uint8_t keycode) + { + auto keyboard = Keyboard::GetInstance(); + + inputState->SetBit(bit, keyboard->IsTapped(keycode), InputBufferType_Tapped); + inputState->SetBit(bit, keyboard->IsReleased(keycode), InputBufferType_Released); + inputState->SetBit(bit, keyboard->IsDown(keycode), InputBufferType_Down); + inputState->SetBit(bit, keyboard->IsDoubleTapped(keycode), InputBufferType_DoubleTapped); + inputState->SetBit(bit, keyboard->IsIntervalTapped(keycode), InputBufferType_IntervalTapped); + + } +} \ No newline at end of file diff --git a/source/plugins/TLAC/Components/Input/InputEmulator.h b/source/plugins/TLAC/Components/Input/InputEmulator.h new file mode 100644 index 0000000..dd99ed1 --- /dev/null +++ b/source/plugins/TLAC/Components/Input/InputEmulator.h @@ -0,0 +1,102 @@ +#pragma once +#include +#include +#include "InputState.h" +#include "../EmulatorComponent.h" +#include "../../Input/Bindings/Binding.h" +#include "../GameTargets/TargetTypes.h" +#include "../GameTargets/TargetHitStates.h" +#include "../GameTargets/HoldState.h" +#include "../GameTargets/TargetInspector.h" + +namespace TLAC::Components +{ + struct KeyBit + { + uint32_t Bit; + uint8_t KeyCode; + }; + + class InputEmulator : public EmulatorComponent + { + public: + Input::Binding* TestBinding; + Input::Binding* ServiceBinding; + + Input::Binding* StartBinding; + Input::Binding* SankakuBinding; + Input::Binding* ShikakuBinding; + Input::Binding* BatsuBinding; + Input::Binding* MaruBinding; + + Input::Binding* LeftBinding; + Input::Binding* RightBinding; + + InputEmulator(); + ~InputEmulator(); + + virtual const char* GetDisplayName() override; + + virtual void Initialize(ComponentsManager*) override; + virtual void Update() override; + virtual void UpdateInput() override; + + virtual void OnFocusLost() override; + + private: + ComponentsManager* componentsManager; + + bool mouseScrollPvSelection = false; + const uint32_t scrollUpBit = 99; + const uint32_t scrollDownBit = 100; + + KeyBit keyBits[20] = + { + { 5, VK_LEFT }, + { 6, VK_RIGHT }, + + { 29, VK_SPACE }, + { 39, 'A' }, + { 43, 'E' }, + { 42, 'D' }, + { 55, 'Q' }, + { 57, 'S' }, // unsure + { 61, 'W' }, + { 63, 'Y' }, + { 84, 'L' }, // unsure + + { 80, VK_RETURN }, + { 81, VK_SHIFT }, + { 82, VK_CONTROL }, + { 83, VK_MENU }, + + { 91, VK_UP }, + { 93, VK_DOWN }, + + { 96, MK_LBUTTON }, + { 97, VK_MBUTTON }, + { 98, MK_RBUTTON }, + }; + + InputState* inputState; + JvsButtons lastDownState; + JvsButtons heldButtons; + + int holdTbl[4]; + HoldState holdState; + + void UpdateJvsInput(); + void UpdateDwGuiInput(); + void UpdateMousePvScroll(); + void UpdateHoldState(); + InputState* GetInputStatePtr(void* address); + JvsButtons GetJvsButtonsState(bool(*buttonTestFunc)(void*)); + JvsButtons GetButtonFromHold(); + char GetKeyState(); + HoldState GetHoldState(); + int GetMaxHoldState(); + bool IsHold(); + + void UpdateInputBit(uint32_t bit, uint8_t keycode); + }; +} diff --git a/source/plugins/TLAC/Components/Input/InputState.cpp b/source/plugins/TLAC/Components/Input/InputState.cpp new file mode 100644 index 0000000..181c21e --- /dev/null +++ b/source/plugins/TLAC/Components/Input/InputState.cpp @@ -0,0 +1,58 @@ +#include "InputState.h" +#include +#include + +namespace TLAC::Components +{ + void InputState::ClearState() + { + memset(this, 0, sizeof(InputState)); + } + + void InputState::HideCursor() + { + MouseX = INT32_MIN; + MouseY = INT32_MIN; + MouseDeltaX = 0; + MouseDeltaY = 0; + } + + void InputState::SetBit(uint32_t bit, bool value, InputBufferType inputType) + { + uint8_t* data = GetInputBuffer(inputType); + + if (data == nullptr || bit < 0 || bit >= MAX_BUTTON_BIT) + return; + + int byteIndex = (bit / 8); + int bitIndex = (bit % 8); + + BYTE mask = (1 << bitIndex); + + data[byteIndex] = value ? (data[byteIndex] | mask) : (data[byteIndex] & ~mask); + } + + uint8_t* InputState::GetInputBuffer(InputBufferType inputType) + { + switch (inputType) + { + case InputBufferType_Tapped: + return (uint8_t*)&Tapped; + + case InputBufferType_Released: + return (uint8_t*)&Released; + + case InputBufferType_Down: + return (uint8_t*)&Down; + + case InputBufferType_DoubleTapped: + return (uint8_t*)&DoubleTapped; + + case InputBufferType_IntervalTapped: + return (uint8_t*)&IntervalTapped; + + default: + return nullptr; + } + } +} diff --git a/source/plugins/TLAC/Components/Input/InputState.h b/source/plugins/TLAC/Components/Input/InputState.h new file mode 100644 index 0000000..7a79920 --- /dev/null +++ b/source/plugins/TLAC/Components/Input/InputState.h @@ -0,0 +1,47 @@ +#pragma once +#include "JvsButtons.h" +#include "InputBufferType.h" + +namespace TLAC::Components +{ + const int MAX_BUTTON_BIT = 0x6F; + + // The button state is larger than the size of a register + // but only the first 32 bits are used during normal gameplay + // so this will provide the convenience of still being able to access them through a bit field + union ButtonState + { + JvsButtons Buttons; + uint32_t State[4]; + }; + + // total sizeof() == 0x20E0 + struct InputState + { + ButtonState Tapped; + ButtonState Released; + + ButtonState Down; + uint32_t Padding_20[4]; + + ButtonState DoubleTapped; + uint32_t Padding_30[4]; + + ButtonState IntervalTapped; + uint32_t Padding_38[12]; + + int32_t MouseX; + int32_t MouseY; + int32_t MouseDeltaX; + int32_t MouseDeltaY; + + uint32_t Padding_AC[8]; + uint8_t Padding_D0[3]; + char Key; + + void ClearState(); + void HideCursor(); + void SetBit(uint32_t bit, bool value, InputBufferType inputType); + uint8_t* GetInputBuffer(InputBufferType inputType); + }; +} diff --git a/source/plugins/TLAC/Components/Input/JvsButtons.h b/source/plugins/TLAC/Components/Input/JvsButtons.h new file mode 100644 index 0000000..7dcde08 --- /dev/null +++ b/source/plugins/TLAC/Components/Input/JvsButtons.h @@ -0,0 +1,24 @@ +#pragma once +#include + +namespace TLAC::Components +{ + enum JvsButtons : uint32_t + { + JVS_NONE = 0 << 0x00, // 0x0 + + JVS_TEST = 1 << 0x00, // 0x1 + JVS_SERVICE = 1 << 0x01, // 0x2 + + JVS_START = 1 << 0x02, // 0x4 + JVS_TRIANGLE = 1 << 0x07, // 0x80 + JVS_SQUARE = 1 << 0x08, // 0x100 + JVS_CROSS = 1 << 0x09, // 0x200 + JVS_CIRCLE = 1 << 0x0A, // 0x400 + JVS_L = 1 << 0x0B, // 0x800 + JVS_R = 1 << 0x0C, // 0x1000 + + JVS_SW1 = 1 << 0x12, // 0x40000 + JVS_SW2 = 1 << 0x13, // 0x80000 + }; +} \ No newline at end of file diff --git a/source/plugins/TLAC/Components/Input/TouchPanelEmulator.cpp b/source/plugins/TLAC/Components/Input/TouchPanelEmulator.cpp new file mode 100644 index 0000000..e13e403 --- /dev/null +++ b/source/plugins/TLAC/Components/Input/TouchPanelEmulator.cpp @@ -0,0 +1,59 @@ +#include "TouchPanelEmulator.h" +#include +#include "../ComponentsManager.h" +#include "../../Constants.h" +#include "../../Input/Mouse/Mouse.h" +#include "../../Input/Keyboard/Keyboard.h" + +using namespace TLAC::Input; + +namespace TLAC::Components +{ + TouchPanelEmulator::TouchPanelEmulator() + { + } + + TouchPanelEmulator::~TouchPanelEmulator() + { + } + + const char* TouchPanelEmulator::GetDisplayName() + { + return "touch_panel_emulator"; + } + + void TouchPanelEmulator::Initialize(ComponentsManager* manager) + { + componentsManager = manager; + state = GetTouchStatePtr((void*)TASK_TOUCH_ADDRESS); + } + + void TouchPanelEmulator::Update() + { + state->ConnectionState = 1; + } + + void TouchPanelEmulator::UpdateInput() + { + if (!componentsManager->GetUpdateGameInput() || componentsManager->IsDwGuiActive() || componentsManager->IsDwGuiHovered()) + return; + + // TODO: rescale TouchReaction aet position + auto keyboard = Keyboard::GetInstance(); + auto pos = Mouse::GetInstance()->GetRelativePosition(); + + state->XPosition = (float)pos.x; + state->YPosition = (float)pos.y; + + bool down = keyboard->IsDown(VK_LBUTTON); + bool released = keyboard->IsReleased(VK_LBUTTON); + + state->ContactType = (down ? 0x2 : released ? 0x1 : 0x0); + state->Pressure = (float)(state->ContactType != 0); + } + + TouchPanelState* TouchPanelEmulator::GetTouchStatePtr(void *address) + { + return (TouchPanelState*)address; + } +} diff --git a/source/plugins/TLAC/Components/Input/TouchPanelEmulator.h b/source/plugins/TLAC/Components/Input/TouchPanelEmulator.h new file mode 100644 index 0000000..67f854f --- /dev/null +++ b/source/plugins/TLAC/Components/Input/TouchPanelEmulator.h @@ -0,0 +1,26 @@ +#pragma once +#include "../EmulatorComponent.h" +#include "TouchPanelState.h" + +namespace TLAC::Components +{ + class TouchPanelEmulator : public EmulatorComponent + { + public: + TouchPanelEmulator(); + ~TouchPanelEmulator(); + + virtual const char* GetDisplayName() override; + + virtual void Initialize(ComponentsManager*) override; + virtual void Update() override; + virtual void UpdateInput() override; + + private: + ComponentsManager* componentsManager; + + TouchPanelState* state; + TouchPanelState* GetTouchStatePtr(void *address); + }; +} + diff --git a/source/plugins/TLAC/Components/Input/TouchPanelState.h b/source/plugins/TLAC/Components/Input/TouchPanelState.h new file mode 100644 index 0000000..df89c62 --- /dev/null +++ b/source/plugins/TLAC/Components/Input/TouchPanelState.h @@ -0,0 +1,15 @@ +#pragma once + +namespace TLAC::Components +{ + struct TouchPanelState + { + int Padding00[0x1E]; + int ConnectionState; + int Padding01[0x06]; + float XPosition; + float YPosition; + float Pressure; + int ContactType; + }; +} diff --git a/source/plugins/TLAC/Components/Input/TouchSliderEmulator.cpp b/source/plugins/TLAC/Components/Input/TouchSliderEmulator.cpp new file mode 100644 index 0000000..b69accc --- /dev/null +++ b/source/plugins/TLAC/Components/Input/TouchSliderEmulator.cpp @@ -0,0 +1,138 @@ +#include "TouchSliderEmulator.h" +#include "../ComponentsManager.h" +#include "../../Constants.h" +#include "../../framework.h" +#include "../../Input/Mouse/Mouse.h" +#include "../../Input/Keyboard/Keyboard.h" +#include "../../Input/Bindings/KeyboardBinding.h" +#include "../../Input/KeyConfig/Config.h" +#include "../../FileSystem/ConfigFile.h" +#include "../../Utilities/Math.h" +#include +#include + +using namespace TLAC::Input; +using namespace TLAC::Input::KeyConfig; +using namespace TLAC::Utilities; + +namespace TLAC::Components +{ + const std::string KEY_CONFIG_FILE_NAME = "keyconfig.ini"; + + TouchSliderEmulator::TouchSliderEmulator() + { + } + + TouchSliderEmulator::~TouchSliderEmulator() + { + delete LeftSideSlideLeft; + delete LeftSideSlideRight; + + delete RightSideSlideLeft; + delete RightSideSlideRight; + } + + const char* TouchSliderEmulator::GetDisplayName() + { + return "touch_slider_emulator"; + } + + void TouchSliderEmulator::Initialize(ComponentsManager* manager) + { + componentsManager = manager; + sliderState = (TouchSliderState*)SLIDER_CTRL_TASK_ADDRESS; + + LeftSideSlideLeft = new Binding(); + LeftSideSlideRight = new Binding(); + + RightSideSlideLeft = new Binding(); + RightSideSlideRight = new Binding(); + + FileSystem::ConfigFile configFile(framework::GetModuleDirectory(), KEY_CONFIG_FILE_NAME); + configFile.OpenRead(); + + Config::BindConfigKeys(configFile.ConfigMap, "LEFT_SIDE_SLIDE_LEFT", *LeftSideSlideLeft, { "Q" }); + Config::BindConfigKeys(configFile.ConfigMap, "LEFT_SIDE_SLIDE_RIGHT", *LeftSideSlideRight, { "E" }); + + Config::BindConfigKeys(configFile.ConfigMap, "RIGHT_SIDE_SLIDE_LEFT", *RightSideSlideLeft, { "U" }); + Config::BindConfigKeys(configFile.ConfigMap, "RIGHT_SIDE_SLIDE_RIGHT", *RightSideSlideRight, { "O" }); + + float touchSliderEmulationSpeed = configFile.GetFloatValue("touch_slider_emulation_speed"); + + if (touchSliderEmulationSpeed != 0.0f) + sliderSpeed = touchSliderEmulationSpeed; + } + + void TouchSliderEmulator::Update() + { + sliderState->State = SLIDER_OK; + } + + void TouchSliderEmulator::UpdateInput() + { + if (!componentsManager->GetUpdateGameInput() || componentsManager->IsDwGuiActive()) + return; + + sliderIncrement = GetElapsedTime() / sliderSpeed; + + constexpr float sensorStep = (1.0f / SLIDER_SENSORS); + + EmulateSliderInput(LeftSideSlideLeft, LeftSideSlideRight, ContactPoints[0], 0.0f, 0.5f); + EmulateSliderInput(RightSideSlideLeft, RightSideSlideRight, ContactPoints[1], 0.5f + sensorStep, 1.0f + sensorStep); + + sliderState->ResetSensors(); + + for (int i = 0; i < CONTACT_POINTS; i++) + ApplyContactPoint(ContactPoints[i], i); + } + + void TouchSliderEmulator::OnFocusLost() + { + sliderState->ResetSensors(); + } + + void TouchSliderEmulator::EmulateSliderInput(Binding *leftBinding, Binding *rightBinding, ContactPoint &contactPoint, float start, float end) + { + bool leftDown = leftBinding->AnyDown(); + bool rightDown = rightBinding->AnyDown(); + + if (leftDown) + contactPoint.Position -= sliderIncrement; + else if (rightDown) + contactPoint.Position += sliderIncrement; + + if (contactPoint.Position < start) + contactPoint.Position = end; + + if (contactPoint.Position > end) + contactPoint.Position = start; + + bool leftTapped = leftBinding->AnyTapped(); + bool rightTapped = rightBinding->AnyTapped(); + + if (leftTapped || rightTapped) + contactPoint.Position = (start + end) / 2.0f; + + contactPoint.InContact = leftDown || rightDown; + } + + void TouchSliderEmulator::ApplyContactPoint(ContactPoint &contactPoint, int section) + { + sliderState->SectionTouched[section] = contactPoint.InContact; + + int pressure = contactPoint.InContact ? FULL_PRESSURE : NO_PRESSURE; + float position = std::clamp(contactPoint.Position, 0.0f, 1.0f); + + if (contactPoint.InContact) + { + int sensor = (int)(position * (SLIDER_SENSORS - 1)); + + sliderState->SetSensor(sensor, pressure); + } + + constexpr float startRange = -1.0f; + constexpr float endRange = +1.0f; + + sliderState->SectionPositions[section] = contactPoint.InContact ? (ConvertRange(0.0f, 1.0f, startRange, endRange, position)) : 0.0f; + } +} \ No newline at end of file diff --git a/source/plugins/TLAC/Components/Input/TouchSliderEmulator.h b/source/plugins/TLAC/Components/Input/TouchSliderEmulator.h new file mode 100644 index 0000000..1cc9869 --- /dev/null +++ b/source/plugins/TLAC/Components/Input/TouchSliderEmulator.h @@ -0,0 +1,49 @@ +#pragma once +#include "../EmulatorComponent.h" +#include "TouchSliderState.h" +#include "../../Input/Bindings/Binding.h" + +namespace TLAC::Components +{ + constexpr int SLIDER_INPUTS = 4; + constexpr int CONTACT_POINTS = 2; + + struct ContactPoint + { + float Position; + bool InContact; + }; + + class TouchSliderEmulator : public EmulatorComponent + { + public: + Input::Binding* LeftSideSlideLeft; + Input::Binding* LeftSideSlideRight; + + Input::Binding* RightSideSlideLeft; + Input::Binding* RightSideSlideRight; + + TouchSliderEmulator(); + ~TouchSliderEmulator(); + + virtual const char* GetDisplayName() override; + + virtual void Initialize(ComponentsManager*) override; + virtual void Update() override; + virtual void UpdateInput() override; + + virtual void OnFocusLost() override; + + private: + ComponentsManager* componentsManager; + float sliderSpeed = 750.0f; + float sliderIncrement; + + TouchSliderState *sliderState; + ContactPoint ContactPoints[CONTACT_POINTS]; + + void EmulateSliderInput(Input::Binding *leftBinding, Input::Binding *rightBinding, ContactPoint &contactPoint, float start, float end); + void ApplyContactPoint(ContactPoint &contactPoint, int section); + }; +} + diff --git a/source/plugins/TLAC/Components/Input/TouchSliderState.cpp b/source/plugins/TLAC/Components/Input/TouchSliderState.cpp new file mode 100644 index 0000000..24039e2 --- /dev/null +++ b/source/plugins/TLAC/Components/Input/TouchSliderState.cpp @@ -0,0 +1,19 @@ +#include "TouchSliderState.h" + +namespace TLAC::Components +{ + void TouchSliderState::SetSensor(int index, int value) + { + if (index < 0 || index >= SLIDER_SENSORS) + return; + + SensorPressureLevels[index] = value; + SensorTouched[index].IsTouched = value > 0; + } + + void TouchSliderState::ResetSensors() + { + for (int i = 0; i < SLIDER_SENSORS; i++) + SetSensor(i, NO_PRESSURE); + } +} \ No newline at end of file diff --git a/source/plugins/TLAC/Components/Input/TouchSliderState.h b/source/plugins/TLAC/Components/Input/TouchSliderState.h new file mode 100644 index 0000000..3830f9c --- /dev/null +++ b/source/plugins/TLAC/Components/Input/TouchSliderState.h @@ -0,0 +1,43 @@ +#pragma once +#include + +#define SLIDER_OK 3 +#define SLIDER_SECTIONS 4 +#define SLIDER_SENSORS 32 + +#define NO_PRESSURE 0 +#define FULL_PRESSURE 180 + +namespace TLAC::Components +{ + struct TouchSliderState + { + uint8_t Padding0000[112]; + + int32_t State; + + uint8_t Padding0074[20 + 12]; + + int32_t SensorPressureLevels[SLIDER_SENSORS]; + + uint8_t Padding0108[52 - 12]; + + float SectionPositions[SLIDER_SECTIONS]; + int SectionConnections[SLIDER_SECTIONS]; + uint8_t Padding015C[4]; + bool SectionTouched[SLIDER_SECTIONS]; + + uint8_t Padding013C[3128 - 52 - 40]; + + struct + { + uint8_t Padding00[2]; + bool IsTouched; + uint8_t Padding[45]; + } SensorTouched[SLIDER_SENSORS]; + + void SetSensor(int index, int value); + void ResetSensors(); + }; +} + diff --git a/source/plugins/TLAC/Components/PlayerData.h b/source/plugins/TLAC/Components/PlayerData.h new file mode 100644 index 0000000..34d8051 --- /dev/null +++ b/source/plugins/TLAC/Components/PlayerData.h @@ -0,0 +1,973 @@ +#pragma once +#include + +struct PlayerData +{ + int8_t use_card; + int8_t freeplay; + int8_t field_2; + int8_t field_3; + int32_t card_type; + int32_t field_8; + int32_t field_C; + int32_t field_10; + int32_t field_14; + int32_t field_18; + int32_t field_1C; + int32_t field_20; + int32_t field_24; + int32_t field_28; + int32_t field_2C; + int32_t field_30; + int32_t field_34; + int32_t field_38; + int32_t field_3C; + int32_t field_40; + int32_t field_44; + int32_t field_48; + int32_t field_4C; + int32_t field_50; + int32_t field_54; + int32_t field_58; + int32_t field_5C; + int32_t field_60; + int32_t field_64; + int32_t field_68; + int32_t field_6C; + int32_t field_70; + int32_t field_74; + int32_t field_78; + int32_t field_7C; + int32_t field_80; + int32_t field_84; + int32_t field_88; + int32_t field_8C; + int32_t field_90; + int32_t field_94; + int32_t field_98; + int32_t field_9C; + int32_t field_A0; + int32_t field_A4; + int32_t field_A8; + int32_t field_AC; + int32_t field_B0; + int32_t field_B4; + int32_t field_B8; + int32_t field_BC; + int32_t field_C0; + int32_t field_C4; + int32_t field_C8; + int32_t field_CC; + int32_t play_data_id; + int32_t accept_index; + int32_t start_index; + int32_t field_DC; + char* player_name; + int32_t field_E8; + int32_t field_EC; + int32_t field_F0; + int32_t field_F4; + int32_t field_F8; + int32_t field_FC; + char* level_name; + int32_t field_108; + int32_t field_10C; + int32_t field_110; + int32_t field_114; + int32_t field_118; + int32_t field_11C; + int32_t field_120; + int32_t level_plate_id; + int32_t field_128; + int32_t vocaloid_point; + int32_t hp_vol; + int32_t act_toggle; + int32_t act_vol; + int32_t act_slide_vol; + int32_t field_140; + int32_t field_144; + int32_t field_148; + int32_t field_14C; + int32_t field_150; + int32_t field_154; + int32_t field_158; + int32_t field_15C; + int32_t field_160; + int32_t field_164; + int32_t field_168; + int32_t field_16C; + int32_t field_170; + int32_t field_174; + int32_t field_178; + int32_t field_17C; + int32_t field_180; + int32_t field_184; + int32_t field_188; + int32_t field_18C; + int32_t field_190; + int32_t field_194; + int32_t field_198; + int32_t field_19C; + int32_t field_1A0; + int32_t field_1A4; + int32_t field_1A8; + int32_t field_1AC; + int32_t field_1B0; + int32_t field_1B4; + int32_t field_1B8; + int32_t field_1BC; + int32_t field_1C0; + int32_t field_1C4; + int32_t field_1C8; + int32_t field_1CC; + int32_t field_1D0; + int32_t field_1D4; + int32_t field_1D8; + int32_t field_1DC; + int32_t field_1E0; + int32_t field_1E4; + int32_t field_1E8; + int32_t field_1EC; + int32_t field_1F0; + int32_t field_1F4; + int32_t field_1F8; + int32_t field_1FC; + int32_t field_200; + int32_t field_204; + int32_t field_208; + int32_t field_20C; + int32_t field_210; + int32_t field_214; + int32_t field_218; + int32_t field_21C; + int32_t field_220; + int32_t field_224; + int32_t field_228; + int32_t field_22C; + int32_t field_230; + int32_t field_234; + int32_t field_238; + int32_t field_23C; + int32_t field_240; + int32_t field_244; + int32_t field_248; + int32_t field_24C; + int32_t field_250; + int32_t field_254; + int32_t field_258; + int32_t field_25C; + int32_t field_260; + int32_t field_264; + int32_t field_268; + int32_t field_26C; + int32_t field_270; + int32_t field_274; + int32_t field_278; + int32_t field_27C; + int32_t field_280; + int32_t field_284; + int32_t field_288; + int32_t field_28C; + int32_t field_290; + int32_t field_294; + int32_t field_298; + int32_t field_29C; + int32_t field_2A0; + int32_t field_2A4; + int32_t field_2A8; + int32_t field_2AC; + int8_t use_pv_module_equip; + int8_t ch_pv_module_equip; + int8_t field_2B2; + int8_t field_2B3; + int32_t module_filter_kind; + int32_t field_2B8; + int32_t field_2BC; + int32_t field_2C0; + int32_t field_2C4; + int32_t field_2C8; + int32_t field_2CC; + int32_t field_2D0; + int32_t field_2D4; + int32_t field_2D8; + int32_t field_2DC; + int32_t field_2E0; + int32_t field_2E4; + int32_t field_2E8; + int32_t field_2EC; + int32_t field_2F0; + int32_t field_2F4; + int32_t field_2F8; + int32_t field_2FC; + int32_t field_300; + int32_t field_304; + int32_t field_308; + int32_t field_30C; + int32_t field_310; + int32_t field_314; + int32_t field_318; + int32_t field_31C; + int32_t field_320; + int32_t field_324; + int32_t field_328; + int32_t field_32C; + int32_t field_330; + int32_t field_334; + int32_t field_338; + int32_t field_33C; + int32_t field_340; + int32_t field_344; + int32_t field_348; + int32_t field_34C; + int32_t field_350; + int32_t field_354; + int32_t field_358; + int32_t field_35C; + int32_t field_360; + int32_t field_364; + int32_t field_368; + int32_t field_36C; + int32_t field_370; + int32_t field_374; + int32_t field_378; + int32_t field_37C; + int32_t field_380; + int32_t field_384; + int32_t field_388; + int32_t field_38C; + int32_t field_390; + int32_t field_394; + int32_t field_398; + int32_t field_39C; + int32_t field_3A0; + int32_t field_3A4; + int32_t field_3A8; + int32_t field_3AC; + int32_t field_3B0; + int32_t field_3B4; + int32_t field_3B8; + int32_t field_3BC; + int32_t field_3C0; + int32_t field_3C4; + int32_t field_3C8; + int32_t field_3CC; + int32_t field_3D0; + int32_t field_3D4; + int32_t field_3D8; + int32_t field_3DC; + int32_t field_3E0; + int32_t field_3E4; + int32_t field_3E8; + int32_t field_3EC; + int32_t field_3F0; + int32_t field_3F4; + int32_t field_3F8; + int32_t field_3FC; + int32_t field_400; + int32_t field_404; + int32_t field_408; + int32_t field_40C; + int32_t field_410; + int32_t field_414; + int32_t field_418; + int32_t field_41C; + int32_t field_420; + int32_t field_424; + int32_t field_428; + int32_t field_42C; + int32_t field_430; + int32_t field_434; + int32_t field_438; + int32_t field_43C; + int32_t field_440; + int32_t field_444; + int32_t field_448; + int32_t field_44C; + int32_t field_450; + int32_t field_454; + int32_t field_458; + int32_t field_45C; + int32_t field_460; + int32_t field_464; + int32_t field_468; + int32_t field_46C; + int32_t field_470; + int32_t field_474; + int32_t field_478; + int32_t field_47C; + int32_t field_480; + int32_t field_484; + int32_t field_488; + int32_t field_48C; + int32_t field_490; + int32_t field_494; + int32_t field_498; + int32_t field_49C; + int32_t field_4A0; + int32_t field_4A4; + int32_t field_4A8; + int32_t field_4AC; + int32_t field_4B0; + int32_t field_4B4; + int32_t field_4B8; + int32_t field_4BC; + int32_t field_4C0; + int32_t field_4C4; + int32_t field_4C8; + int32_t field_4CC; + int32_t field_4D0; + int32_t field_4D4; + int32_t field_4D8; + int32_t field_4DC; + int32_t field_4E0; + int32_t field_4E4; + int32_t field_4E8; + int32_t field_4EC; + int32_t field_4F0; + int32_t field_4F4; + int32_t field_4F8; + int32_t field_4FC; + int32_t field_500; + int32_t field_504; + int32_t field_508; + int32_t field_50C; + int32_t field_510; + int32_t field_514; + int32_t field_518; + int32_t field_51C; + int32_t field_520; + int32_t field_524; + int32_t field_528; + int32_t field_52C; + int32_t field_530; + int32_t field_534; + int32_t field_538; + int32_t field_53C; + int32_t field_540; + int32_t field_544; + int32_t skin_equip; + int32_t skin_equip_cmn; + int32_t use_pv_skin_equip; + int32_t btn_se_equip; + int32_t btn_se_equip_cmn; + int32_t use_pv_btn_se_equip; + int32_t slide_se_equip; + int32_t slide_se_equip_cmn; + int32_t use_pv_slide_se_equip; + int32_t chainslide_se_equip; + int32_t chainslide_se_equip_cmn; + int32_t use_pv_chainslide_se_equip; + int32_t slidertouch_se_equip; + int32_t slidertouch_se_equip_cmn; + int32_t use_pv_slidertouch_se_equip; + int32_t field_584; + int32_t field_588; + int32_t field_58C; + int32_t field_590; + int32_t field_594; + int32_t field_598; + int32_t field_59C; + int32_t field_5A0; + int32_t field_5A4; + int32_t field_5A8; + int32_t field_5AC; + int32_t field_5B0; + int32_t field_5B4; + int32_t field_5B8; + int32_t field_5BC; + int32_t field_5C0; + int32_t field_5C4; + int32_t field_5C8; + int32_t field_5CC; + int32_t field_5D0; + int32_t field_5D4; + int32_t field_5D8; + int32_t field_5DC; + int32_t field_5E0; + int32_t field_5E4; + int32_t field_5E8; + int32_t field_5EC; + int32_t field_5F0; + int32_t field_5F4; + int32_t field_5F8; + int32_t field_5FC; + int32_t field_600; + int32_t field_604; + int32_t field_608; + int32_t field_60C; + int32_t field_610; + int32_t field_614; + int32_t field_618; + int32_t field_61C; + int32_t field_620; + int32_t field_624; + int32_t field_628; + int32_t field_62C; + int32_t field_630; + int32_t field_634; + int32_t field_638; + int32_t field_63C; + int32_t field_640; + int32_t field_644; + int32_t field_648; + int32_t field_64C; + int32_t field_650; + int32_t field_654; + int32_t field_658; + int32_t field_65C; + int32_t field_660; + int32_t field_664; + int32_t field_668; + int32_t field_66C; + int32_t field_670; + int32_t field_674; + int32_t field_678; + int32_t field_67C; + int32_t field_680; + int32_t field_684; + int32_t field_688; + int32_t field_68C; + int32_t field_690; + int32_t field_694; + int32_t field_698; + int32_t field_69C; + int32_t field_6A0; + int32_t field_6A4; + int32_t field_6A8; + int32_t field_6AC; + int32_t field_6B0; + int32_t field_6B4; + int32_t field_6B8; + int32_t field_6BC; + int32_t field_6C0; + int32_t field_6C4; + int32_t field_6C8; + int32_t field_6CC; + int32_t field_6D0; + int32_t field_6D4; + int32_t field_6D8; + int32_t field_6DC; + int32_t field_6E0; + int32_t field_6E4; + int32_t field_6E8; + int32_t field_6EC; + int32_t field_6F0; + int32_t field_6F4; + int32_t field_6F8; + int32_t field_6FC; + int32_t field_700; + int32_t field_704; + int32_t field_708; + int32_t field_70C; + int32_t field_710; + int32_t field_714; + int32_t field_718; + int32_t field_71C; + int32_t field_720; + int32_t field_724; + int32_t field_728; + int32_t field_72C; + int32_t field_730; + int32_t field_734; + int32_t field_738; + int32_t field_73C; + int32_t field_740; + int32_t field_744; + int32_t field_748; + int32_t field_74C; + int32_t field_750; + int32_t field_754; + int32_t field_758; + int32_t field_75C; + int32_t field_760; + int32_t field_764; + int32_t field_768; + int32_t field_76C; + int32_t field_770; + int32_t field_774; + int32_t field_778; + int32_t field_77C; + int32_t field_780; + int32_t field_784; + int32_t field_788; + int32_t field_78C; + int32_t field_790; + int32_t field_794; + int32_t field_798; + int32_t field_79C; + int32_t field_7A0; + int32_t field_7A4; + int32_t field_7A8; + int32_t field_7AC; + int32_t field_7B0; + int32_t field_7B4; + int32_t field_7B8; + int32_t field_7BC; + int32_t field_7C0; + int32_t field_7C4; + int32_t field_7C8; + int32_t field_7CC; + int32_t field_7D0; + int32_t field_7D4; + int32_t field_7D8; + int32_t field_7DC; + int32_t field_7E0; + int32_t field_7E4; + int32_t field_7E8; + int32_t field_7EC; + int32_t field_7F0; + int32_t field_7F4; + int32_t field_7F8; + int32_t field_7FC; + int32_t field_800; + int32_t field_804; + int32_t field_808; + int32_t field_80C; + int32_t field_810; + int32_t field_814; + int32_t field_818; + int32_t field_81C; + int32_t field_820; + int32_t field_824; + int32_t field_828; + int32_t field_82C; + int32_t field_830; + int32_t field_834; + int32_t field_838; + int32_t field_83C; + int32_t field_840; + int32_t field_844; + int32_t field_848; + int32_t field_84C; + int32_t field_850; + int32_t field_854; + int32_t field_858; + int32_t field_85C; + int32_t field_860; + int32_t field_864; + int32_t field_868; + int32_t field_86C; + int32_t field_870; + int32_t field_874; + int32_t field_878; + int32_t field_87C; + int32_t field_880; + int32_t field_884; + int32_t field_888; + int32_t field_88C; + int32_t field_890; + int32_t field_894; + int32_t field_898; + int32_t field_89C; + int32_t field_8A0; + int32_t field_8A4; + int32_t field_8A8; + int32_t field_8AC; + int32_t field_8B0; + int32_t field_8B4; + int32_t field_8B8; + int32_t field_8BC; + int32_t field_8C0; + int32_t field_8C4; + int32_t field_8C8; + int32_t field_8CC; + int32_t field_8D0; + int32_t field_8D4; + int32_t field_8D8; + int32_t field_8DC; + int32_t field_8E0; + int32_t field_8E4; + int32_t field_8E8; + int32_t field_8EC; + int32_t field_8F0; + int32_t field_8F4; + int32_t field_8F8; + int32_t field_8FC; + int32_t field_900; + int32_t field_904; + int32_t field_908; + int32_t field_90C; + int32_t field_910; + int32_t field_914; + int32_t field_918; + int32_t field_91C; + int32_t field_920; + int32_t field_924; + int32_t field_928; + int32_t field_92C; + int32_t field_930; + int32_t field_934; + int32_t field_938; + int32_t field_93C; + int32_t field_940; + int32_t field_944; + int32_t field_948; + int32_t field_94C; + int32_t field_950; + int32_t field_954; + int32_t field_958; + int32_t field_95C; + int32_t field_960; + int32_t field_964; + int32_t field_968; + int32_t field_96C; + int32_t field_970; + int32_t field_974; + int32_t field_978; + int32_t field_97C; + int32_t field_980; + int32_t field_984; + int32_t field_988; + int32_t field_98C; + int32_t field_990; + int32_t field_994; + int32_t field_998; + int32_t field_99C; + int32_t field_9A0; + int32_t field_9A4; + int32_t field_9A8; + int32_t field_9AC; + int32_t field_9B0; + int32_t field_9B4; + int32_t field_9B8; + int32_t field_9BC; + int32_t field_9C0; + int32_t field_9C4; + int32_t field_9C8; + int32_t field_9CC; + int32_t field_9D0; + int32_t field_9D4; + int32_t field_9D8; + int32_t field_9DC; + int32_t field_9E0; + int32_t field_9E4; + int32_t field_9E8; + int32_t field_9EC; + int32_t field_9F0; + int32_t field_9F4; + int32_t field_9F8; + int32_t field_9FC; + int32_t field_A00; + int32_t field_A04; + int32_t field_A08; + int32_t field_A0C; + int32_t field_A10; + int32_t field_A14; + int32_t field_A18; + int32_t field_A1C; + int32_t field_A20; + int32_t field_A24; + int32_t field_A28; + int32_t field_A2C; + int32_t field_A30; + int32_t field_A34; + int32_t field_A38; + int32_t field_A3C; + int32_t field_A40; + int32_t field_A44; + int32_t field_A48; + int32_t field_A4C; + int32_t field_A50; + int32_t field_A54; + int32_t field_A58; + int32_t field_A5C; + int32_t field_A60; + int32_t field_A64; + int32_t field_A68; + int32_t field_A6C; + int32_t field_A70; + int32_t field_A74; + int32_t field_A78; + int32_t field_A7C; + int32_t field_A80; + int32_t field_A84; + int32_t field_A88; + int32_t field_A8C; + int32_t field_A90; + int32_t field_A94; + int32_t field_A98; + int32_t field_A9C; + int32_t field_AA0; + int32_t field_AA4; + int32_t field_AA8; + int32_t field_AAC; + int32_t field_AB0; + int32_t field_AB4; + int32_t field_AB8; + int32_t field_ABC; + int32_t field_AC0; + int32_t field_AC4; + int32_t field_AC8; + int32_t field_ACC; + int32_t field_AD0; + int32_t field_AD4; + int32_t field_AD8; + int32_t field_ADC; + int32_t field_AE0; + int32_t field_AE4; + int32_t field_AE8; + int32_t field_AEC; + int32_t field_AF0; + int32_t field_AF4; + int32_t field_AF8; + int32_t field_AFC; + int32_t field_B00; + int32_t field_B04; + int32_t field_B08; + int32_t field_B0C; + int32_t field_B10; + int32_t field_B14; + int32_t field_B18; + int32_t field_B1C; + int32_t field_B20; + int32_t field_B24; + int32_t field_B28; + int32_t field_B2C; + int32_t field_B30; + int32_t field_B34; + int32_t field_B38; + int32_t field_B3C; + int32_t field_B40; + int32_t field_B44; + int32_t field_B48; + int32_t field_B4C; + int32_t field_B50; + int32_t field_B54; + int32_t field_B58; + int32_t field_B5C; + int32_t field_B60; + int32_t field_B64; + int32_t field_B68; + int32_t field_B6C; + int32_t field_B70; + int32_t field_B74; + int32_t field_B78; + int32_t field_B7C; + int32_t field_B80; + int32_t field_B84; + int32_t field_B88; + int32_t field_B8C; + int32_t field_B90; + int32_t field_B94; + int32_t field_B98; + int32_t field_B9C; + int32_t field_BA0; + int32_t field_BA4; + int32_t field_BA8; + int32_t field_BAC; + int32_t field_BB0; + int32_t field_BB4; + int32_t field_BB8; + int32_t field_BBC; + int32_t field_BC0; + int32_t field_BC4; + int32_t field_BC8; + int32_t field_BCC; + int32_t field_BD0; + int32_t field_BD4; + int32_t field_BD8; + int32_t field_BDC; + int32_t field_BE0; + int32_t field_BE4; + int32_t field_BE8; + int32_t field_BEC; + int32_t field_BF0; + int32_t field_BF4; + int32_t field_BF8; + int32_t field_BFC; + int32_t field_C00; + int32_t field_C04; + int32_t field_C08; + int32_t field_C0C; + int32_t field_C10; + int32_t field_C14; + int32_t field_C18; + int32_t field_C1C; + int32_t field_C20; + int32_t field_C24; + int32_t field_C28; + int32_t field_C2C; + int32_t field_C30; + int32_t field_C34; + int32_t field_C38; + int32_t field_C3C; + int32_t field_C40; + int32_t field_C44; + int32_t field_C48; + int32_t field_C4C; + int32_t field_C50; + int32_t field_C54; + int32_t field_C58; + int32_t field_C5C; + int32_t field_C60; + int32_t field_C64; + int32_t field_C68; + int32_t field_C6C; + int32_t field_C70; + int32_t field_C74; + int32_t field_C78; + int32_t field_C7C; + int32_t field_C80; + int32_t field_C84; + int32_t field_C88; + int32_t field_C8C; + int32_t field_C90; + int32_t field_C94; + int32_t field_C98; + int32_t field_C9C; + int32_t field_CA0; + int32_t field_CA4; + int32_t field_CA8; + int32_t field_CAC; + int32_t field_CB0; + int32_t field_CB4; + int32_t field_CB8; + int32_t field_CBC; + int32_t field_CC0; + int32_t field_CC4; + int32_t field_CC8; + int32_t field_CCC; + int32_t field_CD0; + int32_t field_CD4; + int32_t field_CD8; + int32_t field_CDC; + int32_t field_CE0; + int32_t field_CE4; + int32_t field_CE8; + int32_t field_CEC; + int32_t field_CF0; + int32_t field_CF4; + int32_t field_CF8; + int32_t field_CFC; + int32_t field_D00; + int32_t field_D04; + int32_t field_D08; + int32_t field_D0C; + int32_t field_D10; + int32_t field_D14; + int32_t field_D18; + int32_t field_D1C; + int32_t field_D20; + int32_t field_D24; + int32_t field_D28; + int32_t field_D2C; + int32_t field_D30; + int32_t field_D34; + int32_t field_D38; + int32_t field_D3C; + int32_t field_D40; + int32_t field_D44; + int32_t field_D48; + int32_t field_D4C; + int32_t field_D50; + int32_t field_D54; + int32_t field_D58; + int32_t field_D5C; + int32_t field_D60; + int32_t field_D64; + int32_t field_D68; + int32_t field_D6C; + int32_t field_D70; + int32_t field_D74; + int32_t field_D78; + int32_t field_D7C; + int32_t field_D80; + int32_t field_D84; + int32_t field_D88; + int32_t field_D8C; + int32_t field_D90; + int32_t field_D94; + int32_t field_D98; + int32_t field_D9C; + int32_t field_DA0; + int32_t field_DA4; + int32_t field_DA8; + int32_t field_DAC; + int32_t field_DB0; + int32_t field_DB4; + int32_t field_DB8; + int32_t field_DBC; + int32_t field_DC0; + int32_t field_DC4; + int32_t field_DC8; + int32_t field_DCC; + int32_t field_DD0; + int32_t field_DD4; + int32_t field_DD8; + int32_t field_DDC; + int32_t field_DE0; + int32_t field_DE4; + int32_t field_DE8; + int32_t field_DEC; + int32_t field_DF0; + int32_t field_DF4; + int32_t field_DF8; + int32_t field_DFC; + int32_t field_E00; + int32_t field_E04; + int32_t field_E08; + int32_t field_E0C; + int32_t field_E10; + int32_t field_E14; + int32_t field_E18; + int32_t field_E1C; + int32_t field_E20; + int32_t field_E24; + int32_t field_E28; + int32_t field_E2C; + int32_t field_E30; + int8_t field_E34; + int8_t game_opts; + int8_t field_E36; + int8_t field_E37; + int32_t field_E38; + int32_t field_E3C; + int32_t field_E40; + int32_t field_E44; + int32_t field_E48; + int32_t field_E4C; + int32_t field_E50; + int32_t field_E54; + int32_t field_E58; + int32_t field_E5C; + int32_t field_E60; + int32_t field_E64; + int32_t field_E68; + int32_t field_E6C; + int32_t field_E70; + int32_t field_E74; + int32_t field_E78; + int32_t field_E7C; + int32_t field_E80; + int32_t field_E84; + int32_t field_E88; + int32_t field_E8C; + int32_t field_E90; + int32_t field_E94; + int32_t field_E98; + int32_t field_E9C; + int32_t field_EA0; + int32_t field_EA4; + int32_t field_EA8; + int32_t field_EAC; + int32_t field_EB0; + int32_t field_EB4; + int32_t field_EB8; + int32_t field_EBC; + int32_t field_EC0; + int32_t field_EC4; + int32_t field_EC8; + int32_t field_ECC; + int32_t field_ED0; + int32_t field_ED4; + int32_t field_ED8; + int32_t field_EDC; + int32_t field_EE0; + int32_t field_EE4; + int32_t field_EE8; + int32_t field_EEC; + int32_t field_EF0; + int32_t field_EF4; + int32_t field_EF8; + int32_t field_EFC; +}; \ No newline at end of file diff --git a/source/plugins/TLAC/Components/PlayerDataManager.cpp b/source/plugins/TLAC/Components/PlayerDataManager.cpp new file mode 100644 index 0000000..71f794d --- /dev/null +++ b/source/plugins/TLAC/Components/PlayerDataManager.cpp @@ -0,0 +1,150 @@ +#include "PlayerDataManager.h" +#include +#include "../framework.h" +#include "../Constants.h" +#include "../Input/Keyboard/Keyboard.h" +#include "../FileSystem/ConfigFile.h" +#include "../Constants.h" + +const std::string PLAYER_DATA_FILE_NAME = "playerdata.ini"; + +namespace TLAC::Components +{ + PlayerDataManager::PlayerDataManager() + { + } + + PlayerDataManager::~PlayerDataManager() + { + if (customPlayerData != nullptr) + delete customPlayerData; + } + + const char* PlayerDataManager::GetDisplayName() + { + return "player_data_manager"; + } + + void PlayerDataManager::Initialize(ComponentsManager*) + { + playerData = (PlayerData*)PLAYER_DATA_ADDRESS; + + ApplyPatch(); + LoadConfig(); + ApplyCustomData(); + } + + void PlayerDataManager::Update() + { + ApplyCustomData(); + + if (false && Input::Keyboard::GetInstance()->IsTapped(VK_F12)) + { + printf("[TLAC] PlayerDataManager::Update(): Loading config...\n"); + LoadConfig(); + } + } + + void PlayerDataManager::ApplyPatch() + { + DWORD oldProtect; + VirtualProtect((void*)SET_DEFAULT_PLAYER_DATA_ADDRESS, sizeof(uint8_t), PAGE_EXECUTE_READWRITE, &oldProtect); + { + // prevent the PlayerData from being reset + *(uint8_t*)(SET_DEFAULT_PLAYER_DATA_ADDRESS) = RET_OPCODE; + } + VirtualProtect((void*)SET_DEFAULT_PLAYER_DATA_ADDRESS, sizeof(uint8_t), oldProtect, &oldProtect); + + // allow player to select the module and extra item + VirtualProtect((void*)MODSELECTOR_CHECK_FUNCTION_ERRRET_ADDRESS, sizeof(byte) * 2, PAGE_EXECUTE_READWRITE, &oldProtect); + { + *(byte*)(MODSELECTOR_CHECK_FUNCTION_ERRRET_ADDRESS) = 0xB0; // xor al,al -> ld al,1 + *(byte*)(MODSELECTOR_CHECK_FUNCTION_ERRRET_ADDRESS + 0x1) = 0x01; + } + VirtualProtect((void*)MODSELECTOR_CHECK_FUNCTION_ERRRET_ADDRESS, sizeof(byte) * 2, oldProtect, &oldProtect); + + // fix annoying behavior of closing after changing module or item (don't yet know the reason, maybe NW/Card checks) + { + VirtualProtect((void*)MODSELECTOR_CLOSE_AFTER_MODULE, sizeof(uint8_t), PAGE_EXECUTE_READWRITE, &oldProtect); + { + *(uint8_t*)(MODSELECTOR_CLOSE_AFTER_MODULE) = JNE_OPCODE; + } + VirtualProtect((void*)MODSELECTOR_CLOSE_AFTER_MODULE, sizeof(uint8_t), oldProtect, &oldProtect); + VirtualProtect((void*)MODSELECTOR_CLOSE_AFTER_CUSTOMIZE, sizeof(uint8_t), PAGE_EXECUTE_READWRITE, &oldProtect); + { + *(uint8_t*)(MODSELECTOR_CLOSE_AFTER_CUSTOMIZE) = JNE_OPCODE; + } + VirtualProtect((void*)MODSELECTOR_CLOSE_AFTER_CUSTOMIZE, sizeof(uint8_t), oldProtect, &oldProtect); + } + } + + void PlayerDataManager::LoadConfig() + { + if (playerData == nullptr) + return; + + FileSystem::ConfigFile config(framework::GetModuleDirectory(), PLAYER_DATA_FILE_NAME); + + if (!config.OpenRead()) + return; + + if (customPlayerData != nullptr) + delete customPlayerData; + + customPlayerData = new CustomPlayerData(); + config.TryGetValue("player_name", &customPlayerData->PlayerName); + config.TryGetValue("level_name", &customPlayerData->LevelName); + + customPlayerData->LevelPlateId = config.GetIntegerValue("level_plate_id"); + customPlayerData->SkinEquip = config.GetIntegerValue("skin_equip"); + customPlayerData->BtnSeEquip = config.GetIntegerValue("btn_se_equip"); + customPlayerData->SlideSeEquip = config.GetIntegerValue("slide_se_equip"); + customPlayerData->ChainslideSeEquip = config.GetIntegerValue("chainslide_se_equip"); + customPlayerData->ShowExcellentClearBorder = config.GetBooleanValue("border_excellent"); + customPlayerData->ShowGreatClearBorder = config.GetBooleanValue("border_great"); + customPlayerData->UseCard = config.GetBooleanValue("use_card"); + customPlayerData->GameModifierOptions = config.GetBooleanValue("gamemode_options"); + } + + void PlayerDataManager::ApplyCustomData() + { + // don't want to overwrite the default values + auto setIfNotEqual = [](int *target, int value, int comparison) + { + if (value != comparison) + *target = value; + }; + + setIfNotEqual(&playerData->level_plate_id, customPlayerData->LevelPlateId, 0); + setIfNotEqual(&playerData->skin_equip, customPlayerData->SkinEquip, 0); + setIfNotEqual(&playerData->btn_se_equip, customPlayerData->BtnSeEquip, -1); + setIfNotEqual(&playerData->slide_se_equip, customPlayerData->SlideSeEquip, -1); + setIfNotEqual(&playerData->chainslide_se_equip, customPlayerData->ChainslideSeEquip, -1); + + // Display clear borders on the progress bar + *(byte*)(PLAYER_DATA_ADDRESS + 0xD94) = (customPlayerData->ShowExcellentClearBorder << 1) | (customPlayerData->ShowGreatClearBorder); + + if (customPlayerData->UseCard) + playerData->use_card = 1; // required to allow for module selection + + if (customPlayerData->GameModifierOptions) + playerData->game_opts = 1; // hi-speed, etc.. + + memset((void*)MODULE_TABLE_START, 0xFF, 128); + memset((void*)ITEM_TABLE_START, 0xFF, 128); + + if (customPlayerData->PlayerName != nullptr) + { + playerData->field_DC = 0x10; + playerData->player_name = (char*)customPlayerData->PlayerName->c_str(); + } + + + if (customPlayerData->LevelName != nullptr) + { + playerData->level_name = (char*)customPlayerData->LevelName->c_str(); + playerData->field_110 = 0xFF; + playerData->field_118 = 0x1F; + } + } +} diff --git a/source/plugins/TLAC/Components/PlayerDataManager.h b/source/plugins/TLAC/Components/PlayerDataManager.h new file mode 100644 index 0000000..c9122f8 --- /dev/null +++ b/source/plugins/TLAC/Components/PlayerDataManager.h @@ -0,0 +1,29 @@ +#pragma once +#include "EmulatorComponent.h" +#include "PlayerData.h" +#include "CustomPlayerData.h" +#include + +namespace TLAC::Components +{ + class PlayerDataManager : public EmulatorComponent + { + public: + PlayerDataManager(); + ~PlayerDataManager(); + + virtual const char* GetDisplayName() override; + + virtual void Initialize(ComponentsManager*) override; + virtual void Update() override; + + private: + PlayerData* playerData; + CustomPlayerData* customPlayerData; + + void ApplyPatch(); + void LoadConfig(); + void ApplyCustomData(); + }; +} + diff --git a/source/plugins/TLAC/Components/ScaleComponent.cpp b/source/plugins/TLAC/Components/ScaleComponent.cpp new file mode 100644 index 0000000..a7802e2 --- /dev/null +++ b/source/plugins/TLAC/Components/ScaleComponent.cpp @@ -0,0 +1,109 @@ +#include "ScaleComponent.h" +#include +#include +#include "../Constants.h" +#include +#include "../framework.h" +#include +#include +#include +#include + +namespace TLAC::Components +{ + + ScaleComponent::ScaleComponent() + { + } + + ScaleComponent::~ScaleComponent() + { + } + + const char* ScaleComponent::GetDisplayName() + { + return "scale_component"; + } + + void ScaleComponent::Initialize(ComponentsManager*) + { + { + DWORD oldProtect, bck; + VirtualProtect((BYTE*)0x00000001404ACD24, 7, PAGE_EXECUTE_READWRITE, &oldProtect); + *((byte*)0x00000001404ACD24 + 0) = 0x44; + *((byte*)0x00000001404ACD24 + 1) = 0x8B; + *((byte*)0x00000001404ACD24 + 2) = 0x0D; + *((byte*)0x00000001404ACD24 + 3) = 0xD1; + *((byte*)0x00000001404ACD24 + 4) = 0x08; + *((byte*)0x00000001404ACD24 + 5) = 0xD0; + *((byte*)0x00000001404ACD24 + 6) = 0x00; + VirtualProtect((BYTE*)0x00000001404ACD24, 7, oldProtect, &bck); + } + { + DWORD oldProtect, bck; + VirtualProtect((BYTE*)0x00000001404ACD2B, 7, PAGE_EXECUTE_READWRITE, &oldProtect); + *((byte*)0x00000001404ACD2B + 0) = 0x44; + *((byte*)0x00000001404ACD2B + 1) = 0x8B; + *((byte*)0x00000001404ACD2B + 2) = 0x05; + *((byte*)0x00000001404ACD2B + 3) = 0xC6; + *((byte*)0x00000001404ACD2B + 4) = 0x08; + *((byte*)0x00000001404ACD2B + 5) = 0xD0; + *((byte*)0x00000001404ACD2B + 6) = 0x00; + VirtualProtect((BYTE*)0x00000001404ACD2B, 7, oldProtect, &bck); + } + { + DWORD oldProtect, bck; + VirtualProtect((BYTE*)0x00000001405030A0, 6, PAGE_EXECUTE_READWRITE, &oldProtect); + *((byte*)0x00000001405030A0 + 0) = 0x90; + *((byte*)0x00000001405030A0 + 1) = 0x90; + *((byte*)0x00000001405030A0 + 2) = 0x90; + *((byte*)0x00000001405030A0 + 3) = 0x90; + *((byte*)0x00000001405030A0 + 4) = 0x90; + *((byte*)0x00000001405030A0 + 5) = 0x90; + VirtualProtect((BYTE*)0x00000001404ACD2B, 6, oldProtect, &bck); + } + } + + void ScaleComponent::Update() + { + uiAspectRatio = (float*)UI_ASPECT_RATIO; + uiWidth = (float*)UI_WIDTH_ADDRESS; + uiHeight = (float*)UI_HEIGHT_ADDRESS; + fb1Height = (int*)FB1_HEIGHT_ADDRESS; + fb1Width = (int*)FB1_WIDTH_ADDRESS; + //fb2Height = (int*)FB2_HEIGHT_ADDRESS; + //fb2Width = (int*)FB2_WIDTH_ADDRESS; + fbAspectRatio = (double*)FB_ASPECT_RATIO; + RECT hWindow; + GetClientRect(TLAC::framework::DivaWindowHandle, &hWindow); + *uiAspectRatio = (float)(hWindow.right - hWindow.left) / (float)(hWindow.bottom - hWindow.top); + *fbAspectRatio = (double)(hWindow.right - hWindow.left) / (double)(hWindow.bottom - hWindow.top); + *uiWidth = hWindow.right - hWindow.left; + *uiHeight = hWindow.bottom - hWindow.top; + *fb1Width = hWindow.right - hWindow.left; + *fb1Height = hWindow.bottom - hWindow.top; + //*fb2Width = hWindow.right - hWindow.left; + //*fb2Height = hWindow.bottom - hWindow.top; + + *((int*)0x00000001411AD608) = 0; + + *((int*)0x0000000140EDA8E4) = *(int*)0x0000000140EDA8BC; + *((int*)0x0000000140EDA8E8) = *(int*)0x0000000140EDA8C0; + + *(float*)0x00000001411A1900 = 0; + *(float*)0x00000001411A1904 = (float)*(int*)0x0000000140EDA8BC; + *(float*)0x00000001411A1908 = (float)*(int*)0x0000000140EDA8C0; + //*((int*)0x00000001411AD5F8) = hWindow.right - hWindow.left; + //*((int*)0x00000001411AD5FC) = hWindow.bottom - hWindow.top; + + //*((int*)0x00000001411ABB48) = hWindow.right - hWindow.left; + //*((int*)0x00000001411ABB4C) = hWindow.bottom - hWindow.top; + + //*((int*)0x00000001411ABB5C) = (int)(*((int*)0x00000001411ABB54) * ((float)8 / (float)9)); //wtf?? + } + + void ScaleComponent::UpdateInput() + { + return; + } +} \ No newline at end of file diff --git a/source/plugins/TLAC/Components/ScaleComponent.h b/source/plugins/TLAC/Components/ScaleComponent.h new file mode 100644 index 0000000..fb25f4f --- /dev/null +++ b/source/plugins/TLAC/Components/ScaleComponent.h @@ -0,0 +1,35 @@ +#pragma once +#include "EmulatorComponent.h" +#include "GameState.h" + +namespace TLAC::Components +{ + class ScaleComponent : public EmulatorComponent + { + public: + ScaleComponent(); + ~ScaleComponent(); + + virtual const char* GetDisplayName() override; + + virtual void Initialize(ComponentsManager*) override; + virtual void Update() override; + virtual void UpdateInput() override; + + const int updatesPerFrame = 39; + + float* uiAspectRatio; + float* uiWidth; + float* uiHeight; + + int* fb1Width; + int* fb1Height; + int* fb2Width; + int* fb2Height; + + double* fbAspectRatio; + + private: + + }; +} \ No newline at end of file diff --git a/source/plugins/TLAC/Components/StageManager.cpp b/source/plugins/TLAC/Components/StageManager.cpp new file mode 100644 index 0000000..91edff9 --- /dev/null +++ b/source/plugins/TLAC/Components/StageManager.cpp @@ -0,0 +1,41 @@ +#include "StageManager.h" +#include "../Constants.h" +#include + +namespace TLAC::Components +{ + StageManager::StageManager() + { + } + + StageManager::~StageManager() + { + } + + const char* StageManager::GetDisplayName() + { + return "stage_manager"; + } + + void StageManager::Initialize(ComponentsManager*) + { + // add the offset between moving 2 into ebx and the start of the function + int32_t* playCount = (int32_t*)(((uint8_t*)PLAYS_PER_SESSION_GETTER_ADDRESS) + 0x7); + + DWORD oldProtect; + VirtualProtect(playCount, sizeof(int32_t), PAGE_EXECUTE_READWRITE, &oldProtect); + + // set ’ʏ탂�[ƒh per session play count + *playCount = GetPlayCount(); + } + + void StageManager::Update() + { + return; + } + + int32_t StageManager::GetPlayCount() + { + return INT32_MAX; + } +} \ No newline at end of file diff --git a/source/plugins/TLAC/Components/StageManager.h b/source/plugins/TLAC/Components/StageManager.h new file mode 100644 index 0000000..c6ae946 --- /dev/null +++ b/source/plugins/TLAC/Components/StageManager.h @@ -0,0 +1,21 @@ +#pragma once +#include "EmulatorComponent.h" +#include + +namespace TLAC::Components +{ + class StageManager : public EmulatorComponent + { + public: + StageManager(); + ~StageManager(); + + virtual const char* GetDisplayName() override; + + virtual void Initialize(ComponentsManager*) override; + virtual void Update() override; + + private: + int32_t GetPlayCount(); + }; +} \ No newline at end of file diff --git a/source/plugins/TLAC/Components/SysTimer.cpp b/source/plugins/TLAC/Components/SysTimer.cpp new file mode 100644 index 0000000..def84db --- /dev/null +++ b/source/plugins/TLAC/Components/SysTimer.cpp @@ -0,0 +1,34 @@ +#include "SysTimer.h" +#include "../Constants.h" + +namespace TLAC::Components +{ + SysTimer::SysTimer() + { + } + + SysTimer::~SysTimer() + { + } + + const char* SysTimer::GetDisplayName() + { + return "sys_timer"; + } + + void SysTimer::Initialize(ComponentsManager*) + { + selPvTime = GetSysTimePtr((void*)SEL_PV_TIME_ADDRESS); + } + + void SysTimer::Update() + { + // account for the decrement that occures during this frame + *selPvTime = SEL_PV_FREEZE_TIME * SYS_TIME_FACTOR + 1; + } + + int* SysTimer::GetSysTimePtr(void *address) + { + return (int*)address; + } +} diff --git a/source/plugins/TLAC/Components/SysTimer.h b/source/plugins/TLAC/Components/SysTimer.h new file mode 100644 index 0000000..5f78dff --- /dev/null +++ b/source/plugins/TLAC/Components/SysTimer.h @@ -0,0 +1,25 @@ +#pragma once +#include "EmulatorComponent.h" + +namespace TLAC::Components +{ + class SysTimer : public EmulatorComponent + { + const int SYS_TIME_FACTOR = 60; + const int SEL_PV_FREEZE_TIME = 39; + + public: + SysTimer(); + ~SysTimer(); + + virtual const char* GetDisplayName() override; + + virtual void Initialize(ComponentsManager*) override; + virtual void Update() override; + + private: + int* selPvTime; + int* GetSysTimePtr(void *address); + }; +} + diff --git a/source/plugins/TLAC/Constants.h b/source/plugins/TLAC/Constants.h new file mode 100644 index 0000000..7796b7f --- /dev/null +++ b/source/plugins/TLAC/Constants.h @@ -0,0 +1,102 @@ +#pragma once +#include + +constexpr uint8_t NOP_OPCODE = 0x90; +constexpr uint8_t RET_OPCODE = 0xC3; +constexpr uint8_t JMP_OPCODE = 0xE9; +constexpr uint8_t JNE_OPCODE = 0x85; + +//constexpr uint64_t ENGINE_UPDATE_HOOK_TARGET_ADDRESS = 0x000000014018CC40; +constexpr uint64_t ENGINE_UPDATE_INPUT_ADDRESS = 0x000000014018CBB0; + +constexpr uint64_t CURRENT_GAME_STATE_ADDRESS = 0x0000000140EDA810; +constexpr uint64_t RESOLUTION_WIDTH_ADDRESS = 0x0000000140EDA8BC; +constexpr uint64_t RESOLUTION_HEIGHT_ADDRESS = 0x0000000140EDA8C0; + +constexpr uint64_t SYSTEM_WARNING_ELAPSED_ADDRESS = (0x00000001411A1430 + 0x68); +constexpr uint64_t DATA_INIT_STATE_ADDRESS = 0x0000000140EDA7A8; + +constexpr uint64_t AET_FRAME_DURATION_ADDRESS = 0x00000001409A0A58; +constexpr uint64_t PV_FRAME_RATE_ADDRESS = 0x0000000140EDA7CC; +constexpr uint64_t FRAME_SPEED_ADDRESS = 0x0000000140EDA798; +constexpr uint64_t FRAME_RATE_ADDRESS = 0x0000000140EDA6D0; + +constexpr uint64_t DW_GUI_DISPLAY_INSTANCE_PTR_ADDRESS = 0x0000000141190108; +constexpr uint64_t INPUT_STATE_PTR_ADDRESS = 0x0000000140EDA330; +constexpr uint64_t SLIDER_CTRL_TASK_ADDRESS = 0x000000014CC5DE40; +constexpr uint64_t TASK_TOUCH_ADDRESS = 0x000000014CC9EC30; +constexpr uint64_t SEL_PV_TIME_ADDRESS = 0x000000014CC12498; +constexpr uint64_t PLAYER_DATA_ADDRESS = 0x00000001411A8850; +constexpr uint64_t SET_DEFAULT_PLAYER_DATA_ADDRESS = 0x00000001404A7370; +constexpr uint64_t PLAYS_PER_SESSION_GETTER_ADDRESS = 0x000000014038AEE0; +constexpr uint64_t PV_SEL_SLOTS_TO_SCROLL = 0x000000014CC12470; +constexpr uint64_t PV_SEL_SLOTS_CONST = 0x000000014CC119C8; +constexpr uint64_t MODULE_SEL_SLOTS_TO_SCROLL = 0x00000001418047EC; +constexpr uint64_t MODULE_IS_RECOMMENDED = 0x00000001418047E0; + +constexpr uint64_t CAMERA_ADDRESS = 0x0000000140FBC2C0; +constexpr uint64_t CAMERA_POS_SETTER_ADDRESS = 0x00000001401F9460; +constexpr uint64_t CAMERA_INTR_SETTER_ADDRESS = 0x00000001401F93F0; +constexpr uint64_t CAMERA_ROT_SETTER_ADDRESS = 0x00000001401F9480; +constexpr uint64_t CAMERA_PERS_SETTER_ADDRESS = 0x00000001401F9430; + +constexpr uint64_t UPDATE_TASKS_ADDRESS = 0x000000014019B980; +constexpr uint64_t GLUT_SET_CURSOR_ADDRESS = 0x00000001408B68E6; +constexpr uint64_t CHANGE_MODE_ADDRESS = 0x00000001401953D0; +constexpr uint64_t CHANGE_SUB_MODE_ADDRESS = 0x0000000140195260; + +constexpr uint64_t TGT_TYPE_BASE_ADDRESS = 0x0000000140D0B69C; +constexpr uint64_t TGT_REMAINING_DURATION_BASE_ADDRESS = 0x0000000140D0B6A0; +constexpr uint64_t TGT_HIT_STATE_BASE_ADDRESS = 0x0000000140D0BAE4; +constexpr uint64_t TGT_ON_SCREEN_ADDRESS = 0x0000000140D0B678; + +constexpr uint64_t HOLD_STATE_ADDRESS = 0x0000000140D1E20C; +constexpr uint64_t MAX_HOLD_STATE_ADDRESS = 0x0000000140D1E234; + +constexpr uint64_t CHECK_SOMETHING_SET_MODULE_ADDRESS = 0x0000000140581C78; +constexpr uint64_t MODSELECTOR_CHECK_FUNCTION_ERRRET_ADDRESS = 0x00000001405869AD; +constexpr uint64_t MODSELECTOR_CLOSE_AFTER_MODULE = 0x0000000140583B45; +constexpr uint64_t MODSELECTOR_CLOSE_AFTER_CUSTOMIZE = 0x0000000140583C8C; +constexpr uint64_t MODULE_TABLE_START = PLAYER_DATA_ADDRESS + 0x140; +constexpr uint64_t MODULE_TABLE_END = MODULE_TABLE_START + 128; +constexpr uint64_t ITEM_TABLE_START = PLAYER_DATA_ADDRESS + 0x2B8; +constexpr uint64_t ITEM_TABLE_END = ITEM_TABLE_START + 128; + +constexpr uint64_t FB_WIDTH_ADDRESS = 0x00000001411ABCA8; +constexpr uint64_t FB_HEIGHT_ADDRESS = 0x00000001411ABCAC; +constexpr uint64_t FB1_WIDTH_ADDRESS = 0x00000001411AD5F8; +constexpr uint64_t FB1_HEIGHT_ADDRESS = 0x00000001411AD5FC; +constexpr uint64_t FB2_WIDTH_ADDRESS = 0x0000000140EDA8E4; +constexpr uint64_t FB2_HEIGHT_ADDRESS = 0x0000000140EDA8E8; + +constexpr uint64_t FB_RESOLUTION_WIDTH_ADDRESS = 0x00000001411ABB50; +constexpr uint64_t FB_RESOLUTION_HEIGHT_ADDRESS = 0x00000001411ABB54; + +constexpr uint64_t UI_WIDTH_ADDRESS = 0x000000014CC621E4; +constexpr uint64_t UI_HEIGHT_ADDRESS = 0x000000014CC621E8; + +constexpr uint64_t FB_ASPECT_RATIO = 0x0000000140FBC2E8; +constexpr uint64_t UI_ASPECT_RATIO = 0x000000014CC621D0; + +#define XINPUT_A 0x00 +#define XINPUT_B 0x01 +#define XINPUT_X 0x02 +#define XINPUT_Y 0x03 +#define XINPUT_UP 0x10 +#define XINPUT_DOWN 0x11 +#define XINPUT_LEFT 0x12 +#define XINPUT_RIGHT 0x13 +#define XINPUT_LS 0x20 +#define XINPUT_RS 0x21 +#define XINPUT_LT 0x22 +#define XINPUT_RT 0x23 +#define XINPUT_START 0x30 +#define XINPUT_BACK 0x31 +#define XINPUT_LUP 0x40 +#define XINPUT_LDOWN 0x41 +#define XINPUT_LLEFT 0x42 +#define XINPUT_LRIGHT 0x43 +#define XINPUT_RUP 0x50 +#define XINPUT_RDOWN 0x51 +#define XINPUT_RLEFT 0x52 +#define XINPUT_RRIGHT 0x53 \ No newline at end of file diff --git a/source/plugins/TLAC/FileSystem/ConfigFile.cpp b/source/plugins/TLAC/FileSystem/ConfigFile.cpp new file mode 100644 index 0000000..63bf0f3 --- /dev/null +++ b/source/plugins/TLAC/FileSystem/ConfigFile.cpp @@ -0,0 +1,72 @@ +#include +#include "ConfigFile.h" +#include "../Utilities/Operations.h" + +namespace TLAC::FileSystem +{ + ConfigFile::ConfigFile(const std::string &path) : TextFile(path) + { + return; + } + + ConfigFile::ConfigFile(const std::string &directory, const std::string &file) : TextFile(directory, file) + { + return; + } + + bool ConfigFile::TryGetValue(const std::string &key, std::string **value) + { + auto pair = ConfigMap.find(key); + bool found = pair != ConfigMap.end(); + + *value = found ? new std::string(pair->second) : nullptr; + return found; + } + + int ConfigFile::GetIntegerValue(const std::string& key) + { + auto pair = ConfigMap.find(key); + bool found = pair != ConfigMap.end(); + + return found ? atoi(pair->second.c_str()) : 0; + } + + bool ConfigFile::GetBooleanValue(const std::string& key) + { + auto pair = ConfigMap.find(key); + bool found = pair != ConfigMap.end(); + + return found ? pair->second == "true" : false; + } + + float ConfigFile::GetFloatValue(const std::string & key) + { + auto pair = ConfigMap.find(key); + bool found = pair != ConfigMap.end(); + + return found ? (float)atof(pair->second.c_str()) : 0.0f; + } + + void ConfigFile::Parse(std::ifstream &fileStream) + { + std::string line; + + while (std::getline(fileStream, line)) + { + if (IsComment(line)) + continue; + + auto splitline = Utilities::Split(line, "="); + + for (auto &line : splitline) + Utilities::Trim(line); + + ConfigMap.insert(std::make_pair(splitline[0], splitline[1])); + } + } + + bool ConfigFile::IsComment(const std::string &line) + { + return line.size() <= 0 || line[0] == '#' || line._Starts_with("//"); + } +} diff --git a/source/plugins/TLAC/FileSystem/ConfigFile.h b/source/plugins/TLAC/FileSystem/ConfigFile.h new file mode 100644 index 0000000..8f453ea --- /dev/null +++ b/source/plugins/TLAC/FileSystem/ConfigFile.h @@ -0,0 +1,28 @@ +#pragma once + +#include "TextFile.h" +#include + +namespace TLAC::FileSystem +{ + class ConfigFile : public TextFile + { + public: + ConfigFile(const std::string &path); + ConfigFile(const std::string &directory, const std::string &file); + + std::unordered_map ConfigMap; + + bool TryGetValue(const std::string &key, std::string **value); + int GetIntegerValue(const std::string& key); + bool GetBooleanValue(const std::string& key); + float GetFloatValue(const std::string& key); + + protected: + virtual void Parse(std::ifstream &fileStream) override; + + private: + bool IsComment(const std::string &line); + }; +} + diff --git a/source/plugins/TLAC/FileSystem/TextFile.cpp b/source/plugins/TLAC/FileSystem/TextFile.cpp new file mode 100644 index 0000000..b58104c --- /dev/null +++ b/source/plugins/TLAC/FileSystem/TextFile.cpp @@ -0,0 +1,41 @@ +#include "TextFile.h" +#include + +namespace fs = std::filesystem; + +namespace TLAC::FileSystem +{ + TextFile::TextFile(const std::string &path) + { + FileName = path; + } + + TextFile::TextFile(const std::string &directory, const std::string &file) + { + auto fullPath = directory + "/" + file; + FileName = fullPath; + } + + TextFile::~TextFile() + { + } + + bool TextFile::OpenRead() + { + fs::path configPath = fs::u8path(FileName); + + if (!fs::exists(configPath)) + return false; + + std::ifstream fileStream(configPath.wstring().c_str()); + + if (!fileStream.is_open()) + return false; + + Parse(fileStream); + + fileStream.close(); + + return true; + } +} diff --git a/source/plugins/TLAC/FileSystem/TextFile.h b/source/plugins/TLAC/FileSystem/TextFile.h new file mode 100644 index 0000000..a2a24fd --- /dev/null +++ b/source/plugins/TLAC/FileSystem/TextFile.h @@ -0,0 +1,22 @@ +#pragma once + +#include +#include + +namespace TLAC::FileSystem +{ + class TextFile + { + public: + std::string FileName; + + TextFile(const std::string &path); + TextFile(const std::string &directory, const std::string &file); + ~TextFile(); + + bool OpenRead(); + + protected: + virtual void Parse(std::ifstream &fileStream) = 0; + }; +} diff --git a/source/plugins/TLAC/Input/Bindings/Binding.cpp b/source/plugins/TLAC/Input/Bindings/Binding.cpp new file mode 100644 index 0000000..9d24e90 --- /dev/null +++ b/source/plugins/TLAC/Input/Bindings/Binding.cpp @@ -0,0 +1,91 @@ +#include "Binding.h" + +namespace TLAC::Input +{ + Binding::Binding() + { + } + + Binding::~Binding() + { + for (auto& binding : InputBindings) + delete binding; + } + + void Binding::AddBinding(IInputBinding* inputBinding) + { + InputBindings.push_back(inputBinding); + } + + bool Binding::AnyDown() + { + for (const auto& binding : InputBindings) + { + if (binding->IsDown()) + return true; + } + + return false; + } + + bool Binding::AnyTapped() + { + for (const auto& binding : InputBindings) + { + if (binding->IsTapped()) + return true; + } + + return false; + } + + bool Binding::AnyReleased() + { + for (const auto& binding : InputBindings) + { + if (binding->IsReleased()) + return true; + } + + return false; + } + + int Binding::GetDownCount() + { + int count = 0; + + for (const auto& binding : InputBindings) + { + if (binding->IsDown()) + count++; + } + + return count; + } + + int Binding::GetTappedCount() + { + int count = 0; + + for (const auto& binding : InputBindings) + { + if (binding->IsTapped()) + count++; + } + + return count; + } + + int Binding::GetReleasedCount() + { + int count = 0; + + for (const auto& binding : InputBindings) + { + if (binding->IsReleased()) + count++; + } + + return count; + } +} diff --git a/source/plugins/TLAC/Input/Bindings/Binding.h b/source/plugins/TLAC/Input/Bindings/Binding.h new file mode 100644 index 0000000..359c993 --- /dev/null +++ b/source/plugins/TLAC/Input/Bindings/Binding.h @@ -0,0 +1,26 @@ +#pragma once +#include +#include "IInputBinding.h" + +namespace TLAC::Input +{ + class Binding + { + public: + std::vector InputBindings; + + Binding(); + ~Binding(); + + void AddBinding(IInputBinding* inputBinding); + + bool AnyDown(); + bool AnyTapped(); + bool AnyReleased(); + + int GetDownCount(); + int GetTappedCount(); + int GetReleasedCount(); + }; +} + diff --git a/source/plugins/TLAC/Input/Bindings/Ds4Binding.cpp b/source/plugins/TLAC/Input/Bindings/Ds4Binding.cpp new file mode 100644 index 0000000..63f1300 --- /dev/null +++ b/source/plugins/TLAC/Input/Bindings/Ds4Binding.cpp @@ -0,0 +1,29 @@ +#include "Ds4Binding.h" + +namespace TLAC::Input +{ + #define Ds4InstanceCheckDefault(checkFunc) (DualShock4::InstanceInitialized() ? DualShock4::GetInstance()->checkFunc : false) + + Ds4Binding::Ds4Binding(Ds4Button button) : Button(button) + { + } + + Ds4Binding::~Ds4Binding() + { + } + + bool Ds4Binding::IsDown() + { + return Ds4InstanceCheckDefault(IsDown(Button)); + } + + bool Ds4Binding::IsTapped() + { + return Ds4InstanceCheckDefault(IsTapped(Button)); + } + + bool Ds4Binding::IsReleased() + { + return Ds4InstanceCheckDefault(IsReleased(Button)); + } +} \ No newline at end of file diff --git a/source/plugins/TLAC/Input/Bindings/Ds4Binding.h b/source/plugins/TLAC/Input/Bindings/Ds4Binding.h new file mode 100644 index 0000000..3cdd7cf --- /dev/null +++ b/source/plugins/TLAC/Input/Bindings/Ds4Binding.h @@ -0,0 +1,19 @@ +#pragma once +#include "IInputBinding.h" +#include "../DirectInput/Ds4/DualShock4.h" + +namespace TLAC::Input +{ + class Ds4Binding : public IInputBinding + { + public: + Ds4Button Button; + + Ds4Binding(Ds4Button button); + ~Ds4Binding(); + + bool IsDown() override; + bool IsTapped() override; + bool IsReleased() override; + }; +} \ No newline at end of file diff --git a/source/plugins/TLAC/Input/Bindings/IInputBinding.h b/source/plugins/TLAC/Input/Bindings/IInputBinding.h new file mode 100644 index 0000000..54a3bf7 --- /dev/null +++ b/source/plugins/TLAC/Input/Bindings/IInputBinding.h @@ -0,0 +1,12 @@ +#pragma once + +namespace TLAC::Input +{ + class IInputBinding + { + public: + virtual bool IsDown() = 0; + virtual bool IsTapped() = 0; + virtual bool IsReleased() = 0; + }; +} diff --git a/source/plugins/TLAC/Input/Bindings/KeyboardBinding.cpp b/source/plugins/TLAC/Input/Bindings/KeyboardBinding.cpp new file mode 100644 index 0000000..5ac7cc4 --- /dev/null +++ b/source/plugins/TLAC/Input/Bindings/KeyboardBinding.cpp @@ -0,0 +1,27 @@ +#include "KeyboardBinding.h" + +namespace TLAC::Input +{ + KeyboardBinding::KeyboardBinding(BYTE keycode) : Keycode(keycode) + { + } + + KeyboardBinding::~KeyboardBinding() + { + } + + bool KeyboardBinding::IsDown() + { + return Keyboard::GetInstance()->IsDown(Keycode); + } + + bool KeyboardBinding::IsTapped() + { + return Keyboard::GetInstance()->IsTapped(Keycode); + } + + bool KeyboardBinding::IsReleased() + { + return Keyboard::GetInstance()->IsReleased(Keycode); + } +} diff --git a/source/plugins/TLAC/Input/Bindings/KeyboardBinding.h b/source/plugins/TLAC/Input/Bindings/KeyboardBinding.h new file mode 100644 index 0000000..0083b9e --- /dev/null +++ b/source/plugins/TLAC/Input/Bindings/KeyboardBinding.h @@ -0,0 +1,19 @@ +#pragma once +#include "IInputBinding.h" +#include "../Keyboard/Keyboard.h" + +namespace TLAC::Input +{ + class KeyboardBinding : public IInputBinding + { + public: + BYTE Keycode; + + KeyboardBinding(BYTE keycode); + ~KeyboardBinding(); + + bool IsDown() override; + bool IsTapped() override; + bool IsReleased() override; + }; +} diff --git a/source/plugins/TLAC/Input/Bindings/MouseBinding.cpp b/source/plugins/TLAC/Input/Bindings/MouseBinding.cpp new file mode 100644 index 0000000..0331db2 --- /dev/null +++ b/source/plugins/TLAC/Input/Bindings/MouseBinding.cpp @@ -0,0 +1,70 @@ +#include "MouseBinding.h" +#include "../Keyboard/Keyboard.h" + +namespace TLAC::Input +{ + MouseBinding::MouseBinding(MouseAction action) : Action(action) + { + } + + MouseBinding::~MouseBinding() + { + } + + bool MouseBinding::IsDown() + { + switch (Action) + { + case MouseAction_LeftButton: + return Keyboard::GetInstance()->IsDown(MK_LBUTTON); + case MouseAction_RightButton: + return Keyboard::GetInstance()->IsDown(MK_RBUTTON); + case MouseAction_MiddleButton: + return Keyboard::GetInstance()->IsDown(MK_MBUTTON); + case MouseAction_ScrollUp: + return Mouse::GetInstance()->GetIsScrolledUp(); + case MouseAction_ScrollDown: + return Mouse::GetInstance()->GetIsScrolledDown(); + default: + return false; + } + } + + bool MouseBinding::IsTapped() + { + switch (Action) + { + case MouseAction_LeftButton: + return Keyboard::GetInstance()->IsTapped(MK_LBUTTON); + case MouseAction_RightButton: + return Keyboard::GetInstance()->IsTapped(MK_RBUTTON); + case MouseAction_MiddleButton: + return Keyboard::GetInstance()->IsTapped(MK_MBUTTON); + case MouseAction_ScrollUp: + return Mouse::GetInstance()->GetIsScrolledUp(); + case MouseAction_ScrollDown: + return Mouse::GetInstance()->GetIsScrolledDown(); + default: + return false; + } + } + + bool MouseBinding::IsReleased() + { + switch (Action) + { + case MouseAction_LeftButton: + return Keyboard::GetInstance()->IsReleased(MK_LBUTTON); + case MouseAction_RightButton: + return Keyboard::GetInstance()->IsReleased(MK_RBUTTON); + case MouseAction_MiddleButton: + return Keyboard::GetInstance()->IsReleased(MK_MBUTTON); + case MouseAction_ScrollUp: + return Mouse::GetInstance()->GetWasScrolledUp(); + case MouseAction_ScrollDown: + return Mouse::GetInstance()->GetWasScrolledDown(); + default: + return false; + } + } +} diff --git a/source/plugins/TLAC/Input/Bindings/MouseBinding.h b/source/plugins/TLAC/Input/Bindings/MouseBinding.h new file mode 100644 index 0000000..f236c9d --- /dev/null +++ b/source/plugins/TLAC/Input/Bindings/MouseBinding.h @@ -0,0 +1,28 @@ +#pragma once +#include "IInputBinding.h" +#include "../Mouse/Mouse.h" + +namespace TLAC::Input +{ + enum MouseAction + { + MouseAction_LeftButton, + MouseAction_RightButton, + MouseAction_MiddleButton, + MouseAction_ScrollUp, + MouseAction_ScrollDown, + }; + + class MouseBinding : public IInputBinding + { + public: + MouseAction Action; + + MouseBinding(MouseAction action); + ~MouseBinding(); + + bool IsDown() override; + bool IsTapped() override; + bool IsReleased() override; + }; +} \ No newline at end of file diff --git a/source/plugins/TLAC/Input/Bindings/XinputBinding.cpp b/source/plugins/TLAC/Input/Bindings/XinputBinding.cpp new file mode 100644 index 0000000..d00eaee --- /dev/null +++ b/source/plugins/TLAC/Input/Bindings/XinputBinding.cpp @@ -0,0 +1,33 @@ +#include "XinputBinding.h" +#include "..\Xinput\Xinput.h" + +namespace TLAC::Input +{ + XinputBinding::XinputBinding(BYTE keycode) : Keycode(keycode) + { + } + + XinputBinding::~XinputBinding() + { + } + + bool XinputBinding::IsDown() + { + return Xinput::GetInstance()->IsDown(Keycode); + } + + bool XinputBinding::IsTapped() + { + return Xinput::GetInstance()->IsTapped(Keycode); + } + + bool XinputBinding::IsReleased() + { + return Xinput::GetInstance()->IsReleased(Keycode); + } + + bool XinputBinding::IsDoubleTapped() + { + return Xinput::GetInstance()->IsDoubleTapped(Keycode); + } +} \ No newline at end of file diff --git a/source/plugins/TLAC/Input/Bindings/XinputBinding.h b/source/plugins/TLAC/Input/Bindings/XinputBinding.h new file mode 100644 index 0000000..efe5ee6 --- /dev/null +++ b/source/plugins/TLAC/Input/Bindings/XinputBinding.h @@ -0,0 +1,21 @@ +#pragma once +#include "IInputBinding.h" +#include +#include + +namespace TLAC::Input +{ + class XinputBinding : public IInputBinding + { + public: + BYTE Keycode; + + XinputBinding(BYTE keycode); + ~XinputBinding(); + + bool IsDown() override; + bool IsTapped() override; + bool IsReleased() override; + bool IsDoubleTapped(); + }; +} \ No newline at end of file diff --git a/source/plugins/TLAC/Input/DirectInput/Controller.cpp b/source/plugins/TLAC/Input/DirectInput/Controller.cpp new file mode 100644 index 0000000..b91bb6c --- /dev/null +++ b/source/plugins/TLAC/Input/DirectInput/Controller.cpp @@ -0,0 +1,13 @@ +#include "Controller.h" + +namespace TLAC::Input +{ + Controller::Controller() + { + } + + Controller::~Controller() + { + + } +} \ No newline at end of file diff --git a/source/plugins/TLAC/Input/DirectInput/Controller.h b/source/plugins/TLAC/Input/DirectInput/Controller.h new file mode 100644 index 0000000..7ea3d2f --- /dev/null +++ b/source/plugins/TLAC/Input/DirectInput/Controller.h @@ -0,0 +1,12 @@ +#pragma once +#include "DirectInputDevice.h" + +namespace TLAC::Input +{ + class Controller : public DirectInputDevice + { + protected: + Controller(); + ~Controller(); + }; +} \ No newline at end of file diff --git a/source/plugins/TLAC/Input/DirectInput/DirectInput.cpp b/source/plugins/TLAC/Input/DirectInput/DirectInput.cpp new file mode 100644 index 0000000..cda427c --- /dev/null +++ b/source/plugins/TLAC/Input/DirectInput/DirectInput.cpp @@ -0,0 +1,26 @@ +#include "DirectInput.h" + +namespace TLAC::Input +{ + IDirectInput8 *IDirectInputInstance = nullptr; + + HRESULT InitializeDirectInput(HMODULE module) + { + HRESULT result = DirectInput8Create(module, DIRECTINPUT_VERSION, IID_IDirectInput8, (VOID**)&IDirectInputInstance, nullptr); + return result; + } + + bool DirectInputInitialized() + { + return IDirectInputInstance != nullptr; + } + + void DisposeDirectInput() + { + if (IDirectInputInstance == nullptr) + return; + + IDirectInputInstance->Release(); + IDirectInputInstance = nullptr; + } +} \ No newline at end of file diff --git a/source/plugins/TLAC/Input/DirectInput/DirectInput.h b/source/plugins/TLAC/Input/DirectInput/DirectInput.h new file mode 100644 index 0000000..26942b2 --- /dev/null +++ b/source/plugins/TLAC/Input/DirectInput/DirectInput.h @@ -0,0 +1,12 @@ +#pragma once +#define DIRECTINPUT_VERSION 0x0800 +#include + +namespace TLAC::Input +{ + extern IDirectInput8 *IDirectInputInstance; + + HRESULT InitializeDirectInput(HMODULE module); + bool DirectInputInitialized(); + void DisposeDirectInput(); +} \ No newline at end of file diff --git a/source/plugins/TLAC/Input/DirectInput/DirectInputDevice.cpp b/source/plugins/TLAC/Input/DirectInput/DirectInputDevice.cpp new file mode 100644 index 0000000..85dbd12 --- /dev/null +++ b/source/plugins/TLAC/Input/DirectInput/DirectInputDevice.cpp @@ -0,0 +1,66 @@ +#include "DirectInputDevice.h" + +namespace TLAC::Input +{ + HRESULT DirectInputDevice::DI_CreateDevice(const GUID &guid) + { + if (!DirectInputInitialized()) + return DIERR_NOTINITIALIZED; + + HRESULT result = IDirectInputInstance->CreateDevice(guid, &directInputdevice, NULL); + return result; + } + + HRESULT DirectInputDevice::DI_SetDataFormat(LPCDIDATAFORMAT dataFormat) + { + HRESULT result = directInputdevice->SetDataFormat(dataFormat); + return result; + } + + HRESULT DirectInputDevice::DI_SetCooperativeLevel(HWND windowHandle, DWORD flags) + { + HRESULT result = directInputdevice->SetCooperativeLevel(windowHandle, flags); + return result; + } + + HRESULT DirectInputDevice::DI_Acquire() + { + HRESULT result = directInputdevice->Acquire(); + return result; + } + + HRESULT DirectInputDevice::DI_Unacquire() + { + HRESULT result = directInputdevice->Unacquire(); + return result; + } + + HRESULT DirectInputDevice::DI_Release() + { + HRESULT result = directInputdevice->Release(); + return result; + } + + HRESULT DirectInputDevice::DI_Poll() + { + HRESULT result = directInputdevice->Poll(); + return result; + } + + HRESULT DirectInputDevice::DI_GetDeviceState(DWORD size, LPVOID data) + { + HRESULT result = directInputdevice->GetDeviceState(size, data); + return result; + } + + void DirectInputDevice::DI_Dispose() + { + if (directInputdevice == nullptr) + return; + + HRESULT result = NULL; + + result = DI_Unacquire(); + result = DI_Release(); + } +} \ No newline at end of file diff --git a/source/plugins/TLAC/Input/DirectInput/DirectInputDevice.h b/source/plugins/TLAC/Input/DirectInput/DirectInputDevice.h new file mode 100644 index 0000000..1579413 --- /dev/null +++ b/source/plugins/TLAC/Input/DirectInput/DirectInputDevice.h @@ -0,0 +1,22 @@ +#pragma once +#include "DirectInput.h" + +namespace TLAC::Input +{ + class DirectInputDevice + { + protected: + IDirectInputDevice8 *directInputdevice; + + HRESULT DI_CreateDevice(const GUID& guid); + HRESULT DI_SetDataFormat(LPCDIDATAFORMAT dataFormat); + HRESULT DI_SetCooperativeLevel(HWND windowHandle, DWORD flags); + HRESULT DI_Acquire(); + HRESULT DI_Unacquire(); + HRESULT DI_Release(); + HRESULT DI_Poll(); + HRESULT DI_GetDeviceState(DWORD size, LPVOID data); + + void DI_Dispose(); + }; +} \ No newline at end of file diff --git a/source/plugins/TLAC/Input/DirectInput/DirectInputMouse.cpp b/source/plugins/TLAC/Input/DirectInput/DirectInputMouse.cpp new file mode 100644 index 0000000..b3dd6b3 --- /dev/null +++ b/source/plugins/TLAC/Input/DirectInput/DirectInputMouse.cpp @@ -0,0 +1,35 @@ +#include "DirectInputMouse.h" + +namespace TLAC::Input +{ + DirectInputMouse::DirectInputMouse() + { + HRESULT result = NULL; + + result = DI_CreateDevice(GUID_SysMouse); + + if (FAILED(result)) + return; + + result = DI_SetDataFormat(&c_dfDIMouse); + result = DI_Acquire(); + } + + DirectInputMouse::~DirectInputMouse() + { + DI_Dispose(); + } + + bool DirectInputMouse::Poll() + { + if (!DirectInputInitialized()) + return FALSE; + + HRESULT result = NULL; + + result = DI_Poll(); + result = DI_GetDeviceState(sizeof(mouseState), &mouseState); + + return !FAILED(result); + } +} \ No newline at end of file diff --git a/source/plugins/TLAC/Input/DirectInput/DirectInputMouse.h b/source/plugins/TLAC/Input/DirectInput/DirectInputMouse.h new file mode 100644 index 0000000..24a64b6 --- /dev/null +++ b/source/plugins/TLAC/Input/DirectInput/DirectInputMouse.h @@ -0,0 +1,21 @@ +#pragma once +#include "DirectInputDevice.h" + +namespace TLAC::Input +{ + class DirectInputMouse : public DirectInputDevice + { + public: + DirectInputMouse(); + ~DirectInputMouse(); + + bool Poll(); + + inline long GetXPosition() { return mouseState.lX; }; + inline long GetYPosition() { return mouseState.lY; }; + inline long GetMouseWheel() { return mouseState.lZ; }; + + private: + DIMOUSESTATE mouseState; + }; +} \ No newline at end of file diff --git a/source/plugins/TLAC/Input/DirectInput/Ds4/Ds4Button.h b/source/plugins/TLAC/Input/DirectInput/Ds4/Ds4Button.h new file mode 100644 index 0000000..b9e16a0 --- /dev/null +++ b/source/plugins/TLAC/Input/DirectInput/Ds4/Ds4Button.h @@ -0,0 +1,52 @@ +#pragma once + +namespace TLAC::Input +{ + enum Direction + { + DIR_UP, + DIR_RIGHT, + DIR_DOWN, + DIR_LEFT + }; + + enum Ds4Button : int + { + DS4_SQUARE = 0, + DS4_CROSS = 1, + DS4_CIRCLE = 2, + DS4_TRIANGLE = 3, + + DS4_L1 = 4, + DS4_R1 = 5, + + DS4_L_TRIGGER = 6, + DS4_R_TRIGGER = 7, + + DS4_SHARE = 8, + DS4_OPTIONS = 9, + + DS4_L3 = 10, + DS4_R3 = 11, + + DS4_PS = 12, + DS4_TOUCH = 13, + + DS4_DPAD_UP, + DS4_DPAD_RIGHT, + DS4_DPAD_DOWN, + DS4_DPAD_LEFT, + + DS4_L_STICK_UP, + DS4_L_STICK_RIGHT, + DS4_L_STICK_DOWN, + DS4_L_STICK_LEFT, + + DS4_R_STICK_UP, + DS4_R_STICK_RIGHT, + DS4_R_STICK_DOWN, + DS4_R_STICK_LEFT, + + DS4_BUTTON_MAX, + }; +} \ No newline at end of file diff --git a/source/plugins/TLAC/Input/DirectInput/Ds4/Ds4State.cpp b/source/plugins/TLAC/Input/DirectInput/Ds4/Ds4State.cpp new file mode 100644 index 0000000..aaa4ef0 --- /dev/null +++ b/source/plugins/TLAC/Input/DirectInput/Ds4/Ds4State.cpp @@ -0,0 +1,14 @@ +#include "Ds4State.h" + +namespace TLAC::Input +{ + Joystick::Joystick() : XAxis(0.0f), YAxis(0.0f) + { + return; + }; + + Joystick::Joystick(float xAxis, float yAxis) : XAxis(xAxis), YAxis(yAxis) + { + return; + }; +} \ No newline at end of file diff --git a/source/plugins/TLAC/Input/DirectInput/Ds4/Ds4State.h b/source/plugins/TLAC/Input/DirectInput/Ds4/Ds4State.h new file mode 100644 index 0000000..d671936 --- /dev/null +++ b/source/plugins/TLAC/Input/DirectInput/Ds4/Ds4State.h @@ -0,0 +1,39 @@ +#pragma once +#include "../DirectInput.h" +#include "Ds4Button.h" + +namespace TLAC::Input +{ + struct Joystick + { + FLOAT XAxis, YAxis; + + Joystick(); + Joystick(float xAxis, float yAxis); + }; + + struct Dpad + { + BOOL IsDown; + FLOAT Angle; + Joystick Stick; + }; + + struct Trigger + { + FLOAT Axis; + }; + + struct Ds4State + { + DIJOYSTATE2 DI_JoyState; + + BYTE Buttons[DS4_BUTTON_MAX]; + + Dpad Dpad; + Joystick LeftStick; + Joystick RightStick; + Trigger LeftTrigger; + Trigger RightTrigger; + }; +} \ No newline at end of file diff --git a/source/plugins/TLAC/Input/DirectInput/Ds4/DualShock4.cpp b/source/plugins/TLAC/Input/DirectInput/Ds4/DualShock4.cpp new file mode 100644 index 0000000..899f56c --- /dev/null +++ b/source/plugins/TLAC/Input/DirectInput/Ds4/DualShock4.cpp @@ -0,0 +1,169 @@ +#include "DualShock4.h" +#include "../../../Utilities/Math.h" +#include "../../../framework.h" +#include + +namespace TLAC::Input +{ + DualShock4* DualShock4::instance; + + DualShock4::DualShock4() + { + } + + DualShock4::~DualShock4() + { + DI_Dispose(); + } + + bool DualShock4::TryInitializeInstance() + { + if (InstanceInitialized()) + return true; + + if (!DirectInputInitialized()) + return false; + + DualShock4 *dualShock4 = new DualShock4(); + + bool success = dualShock4->Initialize(); + instance = success ? dualShock4 : nullptr; + + if (!success) + delete dualShock4; + + return success; + } + + bool DualShock4::Initialize() + { + HRESULT result = NULL; + + const size_t guidCount = sizeof(GUID_Ds4) / sizeof(GUID); + for (size_t i = 0; i < guidCount; i++) + { + result = DI_CreateDevice(GUID_Ds4[i]); + + if (!FAILED(result)) + break; + else if (i == guidCount - 1) + return false; + } + + if (FAILED(result = DI_SetDataFormat(&c_dfDIJoystick2))) + return false; + + result = DI_Acquire(); + + return true; + } + + bool DualShock4::PollInput() + { + lastState = currentState; + + HRESULT result = NULL; + result = DI_Poll(); + result = DI_GetDeviceState(sizeof(DIJOYSTATE2), ¤tState.DI_JoyState); + + if (result != DI_OK) + return false; + + UpdateInternalDs4State(currentState); + + for (int button = 0; button < DS4_BUTTON_MAX; button++) + currentState.Buttons[button] = GetButtonState(currentState, (Ds4Button)button); + + return true; + } + + void DualShock4::UpdateInternalDs4State(Ds4State &state) + { + if (state.Dpad.IsDown = state.DI_JoyState.rgdwPOV[0] != -1) + { + state.Dpad.Angle = (state.DI_JoyState.rgdwPOV[0] / 100.0f); + + auto direction = Utilities::GetDirection(state.Dpad.Angle); + state.Dpad.Stick = { direction.Y, -direction.X }; + } + else + { + state.Dpad.Angle = 0; + state.Dpad.Stick = Joystick(); + } + + state.LeftStick = NormalizeStick(state.DI_JoyState.lX, state.DI_JoyState.lY); + state.RightStick = NormalizeStick(state.DI_JoyState.lZ, state.DI_JoyState.lRz); + + state.LeftTrigger = { NormalizeTrigger(state.DI_JoyState.lRx) }; + state.RightTrigger = { NormalizeTrigger(state.DI_JoyState.lRy) }; + } + + bool DualShock4::IsDown(Ds4Button button) + { + return currentState.Buttons[button]; + } + + bool DualShock4::IsUp(Ds4Button button) + { + return !IsDown(button); + } + + bool DualShock4::IsTapped(Ds4Button button) + { + return IsDown(button) && WasUp(button); + } + + bool DualShock4::IsReleased(Ds4Button button) + { + return IsUp(button) && WasDown(button); + } + + bool DualShock4::WasDown(Ds4Button button) + { + return lastState.Buttons[button]; + } + + bool DualShock4::WasUp(Ds4Button button) + { + return !WasDown(button); + } + + bool DualShock4::MatchesDirection(Joystick joystick, Direction directionEnum, float threshold) + { + switch (directionEnum) + { + case TLAC::Input::DIR_UP: + return joystick.YAxis <= -threshold; + + case TLAC::Input::DIR_RIGHT: + return joystick.XAxis >= +threshold; + + case TLAC::Input::DIR_DOWN: + return joystick.YAxis >= +threshold; + + case TLAC::Input::DIR_LEFT: + return joystick.XAxis <= -threshold; + + default: + return false; + } + } + + bool DualShock4::GetButtonState(Ds4State &state, Ds4Button button) + { + if (button >= DS4_SQUARE && button <= DS4_TOUCH) + return state.DI_JoyState.rgbButtons[button]; + + if (button >= DS4_DPAD_UP && button <= DS4_DPAD_LEFT) + return state.Dpad.IsDown ? MatchesDirection(state.Dpad.Stick, (Direction)(button - DS4_DPAD_UP), dpadThreshold) : false; + + if (button >= DS4_L_STICK_UP && button <= DS4_L_STICK_LEFT) + return MatchesDirection(state.LeftStick, (Direction)(button - DS4_L_STICK_UP), joystickThreshold); + + if (button >= DS4_R_STICK_UP && button <= DS4_R_STICK_LEFT) + return MatchesDirection(state.RightStick, (Direction)(button - DS4_R_STICK_UP), joystickThreshold); + + return false; + } +} diff --git a/source/plugins/TLAC/Input/DirectInput/Ds4/DualShock4.h b/source/plugins/TLAC/Input/DirectInput/Ds4/DualShock4.h new file mode 100644 index 0000000..56fdf50 --- /dev/null +++ b/source/plugins/TLAC/Input/DirectInput/Ds4/DualShock4.h @@ -0,0 +1,62 @@ +#pragma once +#include "../Controller.h" +#include "../../IInputDevice.h" +#include "Ds4State.h" + +namespace TLAC::Input +{ + // DualShock 4 Wireless Controller Product GUIDs: + const GUID GUID_Ds4[2] = + { + // First Generation: {05C4054C-0000-0000-0000-504944564944} + { 0x05C4054C, 0x0000, 0x0000, { 0x00, 0x00, 0x50, 0x49, 0x44, 0x56, 0x49, 0x44 } }, + // Second Generation: {09CC054C-0000-0000-0000-504944564944} + { 0x09CC054C, 0x0000, 0x0000, { 0x00, 0x00, 0x50, 0x49, 0x44, 0x56, 0x49, 0x44 } }, + }; + + class DualShock4 : public Controller, public IInputDevice + { + public: + DualShock4(); + ~DualShock4(); + + static bool TryInitializeInstance(); + + bool Initialize(); + bool PollInput() override; + + bool IsDown(Ds4Button button); + bool IsUp(Ds4Button button); + bool IsTapped(Ds4Button button); + bool IsReleased(Ds4Button button); + bool WasDown(Ds4Button button); + bool WasUp(Ds4Button button); + + inline Joystick GetLeftStick() { return currentState.LeftStick; }; + inline Joystick GetRightStick() { return currentState.RightStick; }; + inline Joystick GetDpad() { return currentState.Dpad.Stick; }; + + static inline bool InstanceInitialized() { return instance != nullptr; }; + static inline DualShock4* GetInstance() { return instance; }; + static inline void DeleteInstance() { delete instance; instance = nullptr; }; + + private: + static DualShock4* instance; + + Ds4State lastState; + Ds4State currentState; + + const float triggerThreshold = 0.5f; + const float joystickThreshold = 0.5f; + const float dpadThreshold = 0.5f; + + inline float NormalizeTrigger(long value) { return (float)value / USHRT_MAX; }; + inline float NormalizeStick(long value) { return (float)value / USHRT_MAX * 2.0f - 1.0f; }; + inline Joystick NormalizeStick(long x, long y) { return Joystick(NormalizeStick(x), NormalizeStick(y)); }; + + void UpdateInternalDs4State(Ds4State &state); + + bool MatchesDirection(Joystick joystick, Direction directionEnum, float threshold); + bool GetButtonState(Ds4State &state, Ds4Button button); + }; +} \ No newline at end of file diff --git a/source/plugins/TLAC/Input/IInputDevice.h b/source/plugins/TLAC/Input/IInputDevice.h new file mode 100644 index 0000000..c29a053 --- /dev/null +++ b/source/plugins/TLAC/Input/IInputDevice.h @@ -0,0 +1,10 @@ +#pragma once + +namespace TLAC::Input +{ + class IInputDevice + { + public: + virtual bool PollInput() = 0; + }; +} diff --git a/source/plugins/TLAC/Input/KeyConfig/Config.cpp b/source/plugins/TLAC/Input/KeyConfig/Config.cpp new file mode 100644 index 0000000..ac80fe0 --- /dev/null +++ b/source/plugins/TLAC/Input/KeyConfig/Config.cpp @@ -0,0 +1,271 @@ +#include "Config.h" +#include "windows.h" +#include "../Bindings/KeyboardBinding.h" +#include "../Bindings/Ds4Binding.h" +#include "../../Utilities/Operations.h" +#include "../Bindings/XinputBinding.h" +#include "../../Constants.h" + +namespace TLAC::Input::KeyConfig +{ + KeycodeMap Config::Keymap = + { + // NumPad Keys + { "NumPad0", VK_NUMPAD0 }, + { "NumPad1", VK_NUMPAD1 }, + { "NumPad2", VK_NUMPAD2 }, + { "NumPad3", VK_NUMPAD3 }, + { "NumPad4", VK_NUMPAD4 }, + { "NumPad5", VK_NUMPAD5 }, + { "NumPad6", VK_NUMPAD6 }, + { "NumPad7", VK_NUMPAD7 }, + { "NumPad8", VK_NUMPAD8 }, + { "NumPad9", VK_NUMPAD9 }, + { "Plus", VK_ADD }, + { "Minus", VK_SUBTRACT }, + { "Divide", VK_DIVIDE }, + { "Multiply", VK_MULTIPLY }, + { "Comma", VK_OEM_COMMA }, + { "Period", VK_OEM_PERIOD }, + { "Slash", VK_OEM_2 }, + // F-Keys + { "F1", VK_F1 }, + { "F2", VK_F2 }, + { "F3", VK_F3 }, + { "F4", VK_F4 }, + { "F5", VK_F5 }, + { "F6", VK_F6 }, + { "F7", VK_F7 }, + { "F8", VK_F8 }, + { "F9", VK_F9 }, + { "F10", VK_F10 }, + { "F11", VK_F11 }, + { "F12", VK_F12 }, + { "F13", VK_F13 }, + { "F14", VK_F14 }, + { "F15", VK_F15 }, + { "F16", VK_F16 }, + { "F17", VK_F17 }, + { "F18", VK_F18 }, + { "F19", VK_F19 }, + { "F20", VK_F20 }, + { "F21", VK_F21 }, + { "F22", VK_F22 }, + { "F23", VK_F23 }, + { "F24", VK_F24 }, + // Shift Keys + { "LeftShift", VK_LSHIFT }, + { "LShift", VK_LSHIFT }, + { "RightShift", VK_RSHIFT }, + { "RShift", VK_RSHIFT }, + // Control Keys + { "LeftControl", VK_LCONTROL }, + { "LControl", VK_LCONTROL }, + { "LCtrl", VK_LCONTROL }, + { "RightControl", VK_RCONTROL }, + { "RControl", VK_RCONTROL }, + { "RCtrl", VK_RCONTROL }, + // Arrow Keys + { "Up", VK_UP }, + { "Down", VK_DOWN }, + { "Left", VK_LEFT }, + { "Right", VK_RIGHT }, + // Special Keys + { "Enter", VK_RETURN }, + { "Return", VK_RETURN }, + { "Tab", VK_TAB }, + { "Back", VK_BACK }, + { "Backspace", VK_BACK }, + { "Insert", VK_INSERT }, + { "Ins", VK_INSERT }, + { "Delete", VK_DELETE }, + { "Del", VK_DELETE }, + { "Home", VK_HOME }, + { "End", VK_END }, + { "PageUp", VK_PRIOR }, + { "PageDown", VK_NEXT }, + { "ESC", VK_ESCAPE }, + { "Escape", VK_ESCAPE }, + { "Comma", VK_OEM_COMMA }, + { "Period", VK_OEM_PERIOD }, + { "Slash", VK_OEM_2 }, + // Mouse buttons + { "MouseLeft", VK_LBUTTON }, + { "MouseMiddle", VK_MBUTTON }, + { "MouseRight", VK_RBUTTON }, + { "MouseX1", VK_XBUTTON1 }, + { "MouseX2", VK_XBUTTON2 }, + }; + + KeycodeMap Config::XinputMap = + { + //XINPUT + { "XINPUT_A", XINPUT_A}, + { "XINPUT_B", XINPUT_B}, + { "XINPUT_X", XINPUT_X}, + { "XINPUT_Y", XINPUT_Y}, + { "XINPUT_UP", XINPUT_UP}, + { "XINPUT_DOWN", XINPUT_DOWN}, + { "XINPUT_LEFT", XINPUT_LEFT}, + { "XINPUT_RIGHT", XINPUT_RIGHT}, + { "XINPUT_START", XINPUT_START}, + { "XINPUT_BACK", XINPUT_BACK}, + { "XINPUT_LS", XINPUT_LS}, + { "XINPUT_RS", XINPUT_RS}, + { "XINPUT_LT", XINPUT_LT}, + { "XINPUT_RT", XINPUT_RT}, + { "XINPUT_LLEFT", XINPUT_LLEFT}, + { "XINPUT_LRIGHT", XINPUT_LRIGHT}, + { "XINPUT_RLEFT", XINPUT_RLEFT}, + { "XINPUT_RRIGHT", XINPUT_RRIGHT}, + }; + + Ds4ButtonMap Config::Ds4Map = + { + // Face Buttons + { "DS4_SQUARE", DS4_SQUARE }, + { "Ds4_Square", DS4_SQUARE }, + + { "DS4_CROSS", DS4_CROSS }, + { "Ds4_Cross", DS4_CROSS }, + + { "DS4_CIRCLE", DS4_CIRCLE }, + { "Ds4_Circle", DS4_CIRCLE }, + + { "DS4_TRIANGLE", DS4_TRIANGLE }, + { "Ds4_Triangle", DS4_TRIANGLE }, + + // Standard Buttons + { "DS4_SHARE", DS4_SHARE }, + { "Ds4_Share", DS4_SHARE }, + + { "DS4_OPTIONS", DS4_OPTIONS }, + { "Ds4_Options", DS4_OPTIONS }, + + { "DS4_PS", DS4_PS }, + { "Ds4_PS", DS4_PS }, + + { "DS4_TOUCH", DS4_TOUCH }, + { "Ds4_Touch", DS4_TOUCH }, + + { "DS4_L1", DS4_L1 }, + { "Ds4_L1", DS4_L1 }, + + { "DS4_R1", DS4_R1 }, + { "Ds4_R1", DS4_R1 }, + + // D-Pad Directions + { "DS4_DPAD_UP", DS4_DPAD_UP }, + { "Ds4_DPad_Up", DS4_DPAD_UP }, + + { "DS4_DPAD_RIGHT", DS4_DPAD_RIGHT }, + { "Ds4_DPad_Right", DS4_DPAD_RIGHT }, + + { "DS4_DPAD_DOWN", DS4_DPAD_DOWN }, + { "Ds4_DPad_Down", DS4_DPAD_DOWN }, + + { "DS4_DPAD_LEFT", DS4_DPAD_LEFT }, + { "Ds4_DPad_Left", DS4_DPAD_LEFT }, + + // Trigger Buttons + { "DS4_L_TRIGGER", DS4_L_TRIGGER }, + { "Ds4_L_Trigger", DS4_L_TRIGGER }, + + { "DS4_R_TRIGGER", DS4_R_TRIGGER }, + { "Ds4_R_Trigger", DS4_R_TRIGGER }, + + // Joystick Buttons + { "DS4_L3", DS4_L3 }, + { "Ds4_L3", DS4_L3 }, + + { "DS4_R3", DS4_R3 }, + { "Ds4_R3", DS4_R3 }, + + // Left Joystick + { "DS4_L_STICK_UP", DS4_L_STICK_UP }, + { "Ds4_L_Stick_Up", DS4_L_STICK_UP }, + + { "DS4_L_STICK_RIGHT", DS4_L_STICK_RIGHT }, + { "Ds4_L_Stick_Right", DS4_L_STICK_RIGHT }, + + { "DS4_L_STICK_DOWN", DS4_L_STICK_DOWN }, + { "Ds4_L_Stick_Down", DS4_L_STICK_DOWN }, + + { "DS4_L_STICK_LEFT", DS4_L_STICK_LEFT }, + { "Ds4_L_Stick_Left", DS4_L_STICK_LEFT }, + + // Right Joystick + { "DS4_R_STICK_UP", DS4_R_STICK_UP }, + { "Ds4_R_Stick_Up", DS4_R_STICK_UP }, + + { "DS4_R_STICK_RIGHT", DS4_R_STICK_RIGHT }, + { "Ds4_R_Stick_Right", DS4_R_STICK_RIGHT }, + + { "DS4_R_STICK_DOWN", DS4_R_STICK_DOWN }, + { "Ds4_R_Stick_Down", DS4_R_STICK_DOWN }, + + { "DS4_R_STICK_LEFT", DS4_R_STICK_LEFT }, + { "Ds4_R_Stick_Left", DS4_R_STICK_LEFT }, + }; + + void Config::BindConfigKeys(std::unordered_map &configMap, const char *configKeyName, Binding &bindObj, std::vector defaultKeys) + { + std::vector keys; + + auto configPair = configMap.find(configKeyName); + + // config variable was found in the ini + if (configPair != configMap.end()) + { + keys = Utilities::Split(configPair->second, ","); + } + else + { + keys = defaultKeys; + } + + for (std::string key : keys) + { + Utilities::Trim(key); + + // Applies only for Single-Character keys + if (key.length() == 1) + { + bindObj.AddBinding(new KeyboardBinding(key[0])); + } + else // for special key names + { + auto keycode = Config::Keymap.find(key.c_str()); + + // name is known in the special keys map + if (keycode != Config::Keymap.end()) + { + bindObj.AddBinding(new KeyboardBinding(keycode->second)); + } + else + { + auto xinputBtn = Config::XinputMap.find(key.c_str()); + + if (xinputBtn != Config::XinputMap.end()) + { + bindObj.AddBinding(new XinputBinding(xinputBtn->second)); + } + else + { + // just gonna be lazy for now and put this inside an else statement + auto ds4Button = Config::Ds4Map.find(key.c_str()); + + if (ds4Button != Config::Ds4Map.end()) + { + bindObj.AddBinding(new Ds4Binding(ds4Button->second)); + } + else + { + printf("[TLAC] Config::BindConfigKeys(): Unable to parse key: '%s'\n", key.c_str()); + } + } + } + } + } + } +} \ No newline at end of file diff --git a/source/plugins/TLAC/Input/KeyConfig/Config.h b/source/plugins/TLAC/Input/KeyConfig/Config.h new file mode 100644 index 0000000..194cd13 --- /dev/null +++ b/source/plugins/TLAC/Input/KeyConfig/Config.h @@ -0,0 +1,23 @@ +#pragma once + +#include +#include "KeyString.h" +#include "KeyStringHash.h" +#include "../Bindings/Binding.h" +#include "../DirectInput/Ds4/Ds4Button.h" + +namespace TLAC::Input::KeyConfig +{ + typedef std::unordered_map KeycodeMap; + typedef std::unordered_map Ds4ButtonMap; + + class Config + { + public: + static KeycodeMap Keymap; + static Ds4ButtonMap Ds4Map; + static KeycodeMap XinputMap; + + static void BindConfigKeys(std::unordered_map &configMap, const char *configKeyName, Binding &bindObj, std::vector defaultKeys); + }; +} diff --git a/source/plugins/TLAC/Input/KeyConfig/KeyString.cpp b/source/plugins/TLAC/Input/KeyConfig/KeyString.cpp new file mode 100644 index 0000000..522f519 --- /dev/null +++ b/source/plugins/TLAC/Input/KeyConfig/KeyString.cpp @@ -0,0 +1,13 @@ +#include "KeyString.h" + +namespace TLAC::Input::KeyConfig +{ + KeyString::KeyString(const char* str) : value(str) + { + } + + bool KeyString::operator==(const KeyString& rsv) const + { + return !_strcmpi(value.c_str(), rsv.value.c_str()); + } +} diff --git a/source/plugins/TLAC/Input/KeyConfig/KeyString.h b/source/plugins/TLAC/Input/KeyConfig/KeyString.h new file mode 100644 index 0000000..71b7416 --- /dev/null +++ b/source/plugins/TLAC/Input/KeyConfig/KeyString.h @@ -0,0 +1,14 @@ +#pragma once +#include + +namespace TLAC::Input::KeyConfig +{ + struct KeyString + { + std::string value; + + KeyString(const char* str); + bool operator==(const KeyString& rsv) const; + }; +} + diff --git a/source/plugins/TLAC/Input/KeyConfig/KeyStringHash.cpp b/source/plugins/TLAC/Input/KeyConfig/KeyStringHash.cpp new file mode 100644 index 0000000..2ef4f4a --- /dev/null +++ b/source/plugins/TLAC/Input/KeyConfig/KeyStringHash.cpp @@ -0,0 +1,13 @@ +#include "KeyStringHash.h" +#include + +namespace TLAC::Input::KeyConfig +{ + size_t KeyStringHash::operator()(const KeyString& key) const + { + std::string ret = key.value; + std::transform(ret.begin(), ret.end(), ret.begin(), + [](unsigned char c) { return std::tolower(c, std::locale()); }); + return std::hash()(ret); + } +} \ No newline at end of file diff --git a/source/plugins/TLAC/Input/KeyConfig/KeyStringHash.h b/source/plugins/TLAC/Input/KeyConfig/KeyStringHash.h new file mode 100644 index 0000000..21ae364 --- /dev/null +++ b/source/plugins/TLAC/Input/KeyConfig/KeyStringHash.h @@ -0,0 +1,10 @@ +#pragma once +#include "KeyString.h" + +namespace TLAC::Input::KeyConfig +{ + struct KeyStringHash + { + size_t operator()(const KeyString& key) const; + }; +} diff --git a/source/plugins/TLAC/Input/Keyboard/Keyboard.cpp b/source/plugins/TLAC/Input/Keyboard/Keyboard.cpp new file mode 100644 index 0000000..7ab85ae --- /dev/null +++ b/source/plugins/TLAC/Input/Keyboard/Keyboard.cpp @@ -0,0 +1,100 @@ +#include "Keyboard.h" + +namespace TLAC::Input +{ + Keyboard* Keyboard::instance; + + Keyboard::Keyboard() + { + } + + Keyboard* Keyboard::GetInstance() + { + if (instance == nullptr) + instance = new Keyboard(); + + return instance; + } + + bool Keyboard::PollInput() + { + lastState = currentState; + + float elapsed = keyIntervalWatch.Restart(); + + for (BYTE i = 0; i < KEYBOARD_KEYS; i++) + { + // DOWN + bool isDown = GetAsyncKeyState(i) < 0; + currentState.KeyStates[i] = isDown; + + // DOUBLE TAPPED + bool isTapped = IsTapped(i); + keyDoubleTapStates[i] = isTapped ? keyDoubleTapWatches[i].Restart() <= DOUBLE_TAP_THRESHOLD : false; + + // INTERVAL TAPPED + keyIntervalTapStates[i] = isTapped; + + if (isTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = true; + } + else if (isDown) + { + float threshold = keyIntervalInitials[i] ? INTERVAL_TAP_DELAY_THRESHOLD : INTERVAL_TAP_THRESHOLD; + + bool intervalTapped = (keyIntervalTapTimes[i] += elapsed) > threshold; + keyIntervalTapStates[i] = intervalTapped; + + if (intervalTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = false; + } + } + } + + return true; + } + + bool Keyboard::IsDown(BYTE keycode) + { + return currentState.IsDown(keycode); + } + + bool Keyboard::IsUp(BYTE keycode) + { + return !IsDown(keycode); + } + + bool Keyboard::IsTapped(BYTE keycode) + { + return IsDown(keycode) && WasUp(keycode); + } + + bool Keyboard::IsDoubleTapped(BYTE keycode) + { + return keyDoubleTapStates[keycode]; + } + + bool Keyboard::IsReleased(BYTE keycode) + { + return IsUp(keycode) && WasDown(keycode); + } + + inline bool Keyboard::WasDown(BYTE keycode) + { + return lastState.IsDown(keycode); + } + + inline bool Keyboard::WasUp(BYTE keycode) + { + return !WasDown(keycode); + } + + bool Keyboard::IsIntervalTapped(BYTE keycode) + { + return keyIntervalTapStates[keycode]; + } +} diff --git a/source/plugins/TLAC/Input/Keyboard/Keyboard.h b/source/plugins/TLAC/Input/Keyboard/Keyboard.h new file mode 100644 index 0000000..9521ccb --- /dev/null +++ b/source/plugins/TLAC/Input/Keyboard/Keyboard.h @@ -0,0 +1,47 @@ +#pragma once +#include "../IInputDevice.h" +#include "KeyboardState.h" +#include "../../Utilities/Stopwatch.h" + +using Stopwatch = TLAC::Utilities::Stopwatch; + +namespace TLAC::Input +{ + constexpr float DOUBLE_TAP_THRESHOLD = 200.0f; + constexpr float INTERVAL_TAP_DELAY_THRESHOLD = 500.0f; + constexpr float INTERVAL_TAP_THRESHOLD = 75.0f; + + class Keyboard : public IInputDevice + { + public: + static Keyboard* GetInstance(); + + bool PollInput() override; + bool IsDown(BYTE keycode); + bool IsUp(BYTE keycode); + bool IsTapped(BYTE keycode); + bool IsDoubleTapped(BYTE keycode); + bool IsReleased(BYTE keycode); + bool IsIntervalTapped(BYTE keycode); + + bool WasDown(BYTE keycode); + bool WasUp(BYTE keycode); + + private: + Keyboard(); + KeyboardState lastState; + KeyboardState currentState; + + Stopwatch keyIntervalWatch; + + BYTE keyDoubleTapStates[KEYBOARD_KEYS]; + Stopwatch keyDoubleTapWatches[KEYBOARD_KEYS]; + + BOOL keyIntervalInitials[KEYBOARD_KEYS]; + BYTE keyIntervalTapStates[KEYBOARD_KEYS]; + FLOAT keyIntervalTapTimes[KEYBOARD_KEYS]; + + static Keyboard* instance; + }; +} + diff --git a/source/plugins/TLAC/Input/Keyboard/KeyboardState.cpp b/source/plugins/TLAC/Input/Keyboard/KeyboardState.cpp new file mode 100644 index 0000000..6bedc6f --- /dev/null +++ b/source/plugins/TLAC/Input/Keyboard/KeyboardState.cpp @@ -0,0 +1,9 @@ +#include "KeyboardState.h" + +namespace TLAC::Input +{ + bool KeyboardState::IsDown(BYTE keycode) + { + return KeyStates[keycode]; + } +} diff --git a/source/plugins/TLAC/Input/Keyboard/KeyboardState.h b/source/plugins/TLAC/Input/Keyboard/KeyboardState.h new file mode 100644 index 0000000..dbddc15 --- /dev/null +++ b/source/plugins/TLAC/Input/Keyboard/KeyboardState.h @@ -0,0 +1,15 @@ +#pragma once +#include + +namespace TLAC::Input +{ + const int KEYBOARD_KEYS = 0xFF; + + struct KeyboardState + { + BYTE KeyStates[KEYBOARD_KEYS]; + + bool IsDown(BYTE keycode); + }; +} + diff --git a/source/plugins/TLAC/Input/Mouse/Mouse.cpp b/source/plugins/TLAC/Input/Mouse/Mouse.cpp new file mode 100644 index 0000000..9612e96 --- /dev/null +++ b/source/plugins/TLAC/Input/Mouse/Mouse.cpp @@ -0,0 +1,135 @@ +#include "Mouse.h" +#include "../../framework.h" +#include "../../Constants.h" + +namespace TLAC::Input +{ + Mouse* Mouse::instance; + + Mouse::Mouse() + { + directInputMouse = new DirectInputMouse(); + } + + Mouse::~Mouse() + { + if (directInputMouse != nullptr) + delete directInputMouse; + } + + Mouse* Mouse::GetInstance() + { + if (instance == nullptr) + instance = new Mouse(); + + return instance; + } + + POINT Mouse::GetPosition() + { + return currentState.Position; + } + + POINT Mouse::GetRelativePosition() + { + return currentState.RelativePosition; + } + + POINT Mouse::GetDeltaPosition() + { + return + { + currentState.Position.x - lastState.Position.x, + currentState.Position.y - lastState.Position.y + }; + } + + long Mouse::GetMouseWheel() + { + return currentState.MouseWheel; + } + + long Mouse::GetDeltaMouseWheel() + { + return currentState.MouseWheel - lastState.MouseWheel; + } + + bool Mouse::HasMoved() + { + POINT delta = GetDeltaPosition(); + return delta.x != 0 || delta.y != 0; + } + + bool Mouse::GetIsScrolledUp() + { + return currentState.ScrolledUp; + } + + bool Mouse::GetIsScrolledDown() + { + return currentState.ScrolledDown; + } + + bool Mouse::GetWasScrolledUp() + { + return lastState.ScrolledUp; + } + + bool Mouse::GetWasScrolledDown() + { + return lastState.ScrolledDown; + } + + void Mouse::SetPosition(int x, int y) + { + lastState.Position.x = x; + lastState.Position.y = y; + SetCursorPos(x, y); + } + + bool Mouse::PollInput() + { + lastState = currentState; + + GetCursorPos(¤tState.Position); + currentState.RelativePosition = currentState.Position; + + if (framework::DivaWindowHandle != NULL) + ScreenToClient(framework::DivaWindowHandle, ¤tState.RelativePosition); + + RECT hWindow; + GetClientRect(TLAC::framework::DivaWindowHandle, &hWindow); + + gameHeight = (int*)RESOLUTION_HEIGHT_ADDRESS; + gameWidth = (int*)RESOLUTION_WIDTH_ADDRESS; + fbWidth = (int*)FB_WIDTH_ADDRESS; + fbHeight = (int*)FB_HEIGHT_ADDRESS; + + if (directInputMouse != nullptr) + { + if (directInputMouse->Poll()) + currentState.MouseWheel += directInputMouse->GetMouseWheel(); + + currentState.ScrolledUp = (GetDeltaMouseWheel() > 0); + currentState.ScrolledDown = (GetDeltaMouseWheel() < 0); + } + + if ((fbWidth != gameWidth) && (fbHeight != gameHeight)) { + xoffset = ((float)16 / (float)9) * (hWindow.bottom - hWindow.top); + if (xoffset != (hWindow.right - hWindow.left)) + { + scale = xoffset / (hWindow.right - hWindow.left); + xoffset = ((hWindow.right - hWindow.left) / 2) - (xoffset / 2); + } + else { + xoffset = 0; + scale = 1; + } + + currentState.RelativePosition.x = ((currentState.RelativePosition.x - round(xoffset)) * *gameWidth / (hWindow.right - hWindow.left)) / scale; + currentState.RelativePosition.y = currentState.RelativePosition.y * *gameHeight / (hWindow.bottom - hWindow.top); + } + + return true; + } +} diff --git a/source/plugins/TLAC/Input/Mouse/Mouse.h b/source/plugins/TLAC/Input/Mouse/Mouse.h new file mode 100644 index 0000000..6e22858 --- /dev/null +++ b/source/plugins/TLAC/Input/Mouse/Mouse.h @@ -0,0 +1,49 @@ +#pragma once +#include "../IInputDevice.h" +#include "../DirectInput/DirectInputMouse.h" +#include "MouseState.h" + +namespace TLAC::Input +{ + class Mouse : public IInputDevice + { + public: + ~Mouse(); + + static Mouse* GetInstance(); + + bool PollInput() override; + + POINT GetPosition(); + POINT GetRelativePosition(); + POINT GetDeltaPosition(); + + long GetMouseWheel(); + long GetDeltaMouseWheel(); + + bool HasMoved(); + bool GetIsScrolledUp(); + bool GetIsScrolledDown(); + bool GetWasScrolledUp(); + bool GetWasScrolledDown(); + + void SetPosition(int x, int y); + + private: + Mouse(); + MouseState lastState; + MouseState currentState; + DirectInputMouse* directInputMouse = nullptr; + + int* gameWidth; + int* gameHeight; + int* fbWidth; + int* fbHeight; + + float xoffset; + float scale; + + static Mouse* instance; + }; +} + diff --git a/source/plugins/TLAC/Input/Mouse/MouseState.h b/source/plugins/TLAC/Input/Mouse/MouseState.h new file mode 100644 index 0000000..8c88edb --- /dev/null +++ b/source/plugins/TLAC/Input/Mouse/MouseState.h @@ -0,0 +1,15 @@ +#pragma once +#include + +namespace TLAC::Input +{ + struct MouseState + { + POINT Position; + POINT RelativePosition; + long MouseWheel; + bool ScrolledUp; + bool ScrolledDown; + }; +} + diff --git a/source/plugins/TLAC/Input/Xinput/Xinput.cpp b/source/plugins/TLAC/Input/Xinput/Xinput.cpp new file mode 100644 index 0000000..c2bb9b4 --- /dev/null +++ b/source/plugins/TLAC/Input/Xinput/Xinput.cpp @@ -0,0 +1,677 @@ +#include +#include "Xinput.h" +#include "../../Constants.h" + +namespace TLAC::Input +{ + Xinput* Xinput::instance; + + Xinput::Xinput() + { + + } + + Xinput* Xinput::GetInstance() + { + if (instance == nullptr) + { + instance = new Xinput(); + } + return instance; + } + + bool Xinput::PollInput() + { + lastState = currentState; + ZeroMemory(&state, sizeof(XINPUT_STATE)); + float elapsed = keyIntervalWatch.Restart(); + + if (XInputGetState(0, &state) == ERROR_SUCCESS) + { + BYTE i = XINPUT_A; + { + currentState.KeyStates[i] = false; + if (state.Gamepad.wButtons & XINPUT_GAMEPAD_A) + currentState.KeyStates[i] = true; + KeyDoubleTapStates[i] = IsTapped(i) ? KeyDoubleTapWatches[i].Restart() <= DOUBLE_TAP_THRESHOLD : false; + { + bool isDown = currentState.KeyStates[i]; + bool isTapped = IsTapped(i); + + keyIntervalTapStates[i] = isTapped; + + if (isTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = true; + } + else if (isDown) + { + float threshold = keyIntervalInitials[i] ? INTERVAL_TAP_DELAY_THRESHOLD : INTERVAL_TAP_THRESHOLD; + + bool intervalTapped = (keyIntervalTapTimes[i] += elapsed) > threshold; + keyIntervalTapStates[i] = intervalTapped; + + if (intervalTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = false; + } + } + } + } + + i = XINPUT_DOWN; + { + currentState.KeyStates[i] = false; + if (state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_DOWN) + currentState.KeyStates[i] = true; + KeyDoubleTapStates[i] = IsTapped(i) ? KeyDoubleTapWatches[i].Restart() <= DOUBLE_TAP_THRESHOLD : false; + { + bool isDown = currentState.KeyStates[i]; + bool isTapped = IsTapped(i); + + keyIntervalTapStates[i] = isTapped; + + if (isTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = true; + } + else if (isDown) + { + float threshold = keyIntervalInitials[i] ? INTERVAL_TAP_DELAY_THRESHOLD : INTERVAL_TAP_THRESHOLD; + + bool intervalTapped = (keyIntervalTapTimes[i] += elapsed) > threshold; + keyIntervalTapStates[i] = intervalTapped; + + if (intervalTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = false; + } + } + } + } + + i = XINPUT_B; + { + currentState.KeyStates[i] = false; + if (state.Gamepad.wButtons & XINPUT_GAMEPAD_B) + currentState.KeyStates[i] = true; + KeyDoubleTapStates[i] = IsTapped(i) ? KeyDoubleTapWatches[i].Restart() <= DOUBLE_TAP_THRESHOLD : false; + { + bool isDown = currentState.KeyStates[i]; + bool isTapped = IsTapped(i); + + keyIntervalTapStates[i] = isTapped; + + if (isTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = true; + } + else if (isDown) + { + float threshold = keyIntervalInitials[i] ? INTERVAL_TAP_DELAY_THRESHOLD : INTERVAL_TAP_THRESHOLD; + + bool intervalTapped = (keyIntervalTapTimes[i] += elapsed) > threshold; + keyIntervalTapStates[i] = intervalTapped; + + if (intervalTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = false; + } + } + } + } + + i = XINPUT_RIGHT; + { + currentState.KeyStates[i] = false; + if (state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_RIGHT) + currentState.KeyStates[i] = true; + KeyDoubleTapStates[i] = IsTapped(i) ? KeyDoubleTapWatches[i].Restart() <= DOUBLE_TAP_THRESHOLD : false; + { + bool isDown = currentState.KeyStates[i]; + bool isTapped = IsTapped(i); + + keyIntervalTapStates[i] = isTapped; + + if (isTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = true; + } + else if (isDown) + { + float threshold = keyIntervalInitials[i] ? INTERVAL_TAP_DELAY_THRESHOLD : INTERVAL_TAP_THRESHOLD; + + bool intervalTapped = (keyIntervalTapTimes[i] += elapsed) > threshold; + keyIntervalTapStates[i] = intervalTapped; + + if (intervalTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = false; + } + } + } + } + + i = XINPUT_X; + { + currentState.KeyStates[i] = false; + if (state.Gamepad.wButtons & XINPUT_GAMEPAD_X) + currentState.KeyStates[i] = true; + KeyDoubleTapStates[i] = IsTapped(i) ? KeyDoubleTapWatches[i].Restart() <= DOUBLE_TAP_THRESHOLD : false; + { + bool isDown = currentState.KeyStates[i]; + bool isTapped = IsTapped(i); + + keyIntervalTapStates[i] = isTapped; + + if (isTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = true; + } + else if (isDown) + { + float threshold = keyIntervalInitials[i] ? INTERVAL_TAP_DELAY_THRESHOLD : INTERVAL_TAP_THRESHOLD; + + bool intervalTapped = (keyIntervalTapTimes[i] += elapsed) > threshold; + keyIntervalTapStates[i] = intervalTapped; + + if (intervalTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = false; + } + } + } + } + + i = XINPUT_LEFT; + { + currentState.KeyStates[i] = false; + if (state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_LEFT) + currentState.KeyStates[i] = true; + KeyDoubleTapStates[i] = IsTapped(i) ? KeyDoubleTapWatches[i].Restart() <= DOUBLE_TAP_THRESHOLD : false; + { + bool isDown = currentState.KeyStates[i]; + bool isTapped = IsTapped(i); + + keyIntervalTapStates[i] = isTapped; + + if (isTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = true; + } + else if (isDown) + { + float threshold = keyIntervalInitials[i] ? INTERVAL_TAP_DELAY_THRESHOLD : INTERVAL_TAP_THRESHOLD; + + bool intervalTapped = (keyIntervalTapTimes[i] += elapsed) > threshold; + keyIntervalTapStates[i] = intervalTapped; + + if (intervalTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = false; + } + } + } + } + + i = XINPUT_Y; + { + currentState.KeyStates[i] = false; + if (state.Gamepad.wButtons & XINPUT_GAMEPAD_Y) + currentState.KeyStates[i] = true; + KeyDoubleTapStates[i] = IsTapped(i) ? KeyDoubleTapWatches[i].Restart() <= DOUBLE_TAP_THRESHOLD : false; + { + bool isDown = currentState.KeyStates[i]; + bool isTapped = IsTapped(i); + + keyIntervalTapStates[i] = isTapped; + + if (isTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = true; + } + else if (isDown) + { + float threshold = keyIntervalInitials[i] ? INTERVAL_TAP_DELAY_THRESHOLD : INTERVAL_TAP_THRESHOLD; + + bool intervalTapped = (keyIntervalTapTimes[i] += elapsed) > threshold; + keyIntervalTapStates[i] = intervalTapped; + + if (intervalTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = false; + } + } + } + } + + i = XINPUT_UP; + { + currentState.KeyStates[i] = false; + if (state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_UP) + currentState.KeyStates[i] = true; + KeyDoubleTapStates[i] = IsTapped(i) ? KeyDoubleTapWatches[i].Restart() <= DOUBLE_TAP_THRESHOLD : false; + { + bool isDown = currentState.KeyStates[i]; + bool isTapped = IsTapped(i); + + keyIntervalTapStates[i] = isTapped; + + if (isTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = true; + } + else if (isDown) + { + float threshold = keyIntervalInitials[i] ? INTERVAL_TAP_DELAY_THRESHOLD : INTERVAL_TAP_THRESHOLD; + + bool intervalTapped = (keyIntervalTapTimes[i] += elapsed) > threshold; + keyIntervalTapStates[i] = intervalTapped; + + if (intervalTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = false; + } + } + } + } + + i = XINPUT_LS; + { + currentState.KeyStates[i] = false; + if (state.Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_SHOULDER) + currentState.KeyStates[i] = true; + KeyDoubleTapStates[i] = IsTapped(i) ? KeyDoubleTapWatches[i].Restart() <= DOUBLE_TAP_THRESHOLD : false; + { + bool isDown = currentState.KeyStates[i]; + bool isTapped = IsTapped(i); + + keyIntervalTapStates[i] = isTapped; + + if (isTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = true; + } + else if (isDown) + { + float threshold = keyIntervalInitials[i] ? INTERVAL_TAP_DELAY_THRESHOLD : INTERVAL_TAP_THRESHOLD; + + bool intervalTapped = (keyIntervalTapTimes[i] += elapsed) > threshold; + keyIntervalTapStates[i] = intervalTapped; + + if (intervalTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = false; + } + } + } + } + + i = XINPUT_RS; + { + currentState.KeyStates[i] = false; + if (state.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_SHOULDER) + currentState.KeyStates[i] = true; + KeyDoubleTapStates[i] = IsTapped(i) ? KeyDoubleTapWatches[i].Restart() <= DOUBLE_TAP_THRESHOLD : false; + { + bool isDown = currentState.KeyStates[i]; + bool isTapped = IsTapped(i); + + keyIntervalTapStates[i] = isTapped; + + if (isTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = true; + } + else if (isDown) + { + float threshold = keyIntervalInitials[i] ? INTERVAL_TAP_DELAY_THRESHOLD : INTERVAL_TAP_THRESHOLD; + + bool intervalTapped = (keyIntervalTapTimes[i] += elapsed) > threshold; + keyIntervalTapStates[i] = intervalTapped; + + if (intervalTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = false; + } + } + } + } + + i = XINPUT_START; + { + currentState.KeyStates[i] = false; + if (state.Gamepad.wButtons & XINPUT_GAMEPAD_START) + currentState.KeyStates[i] = true; + KeyDoubleTapStates[i] = IsTapped(i) ? KeyDoubleTapWatches[i].Restart() <= DOUBLE_TAP_THRESHOLD : false; + { + bool isDown = currentState.KeyStates[i]; + bool isTapped = IsTapped(i); + + keyIntervalTapStates[i] = isTapped; + + if (isTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = true; + } + else if (isDown) + { + float threshold = keyIntervalInitials[i] ? INTERVAL_TAP_DELAY_THRESHOLD : INTERVAL_TAP_THRESHOLD; + + bool intervalTapped = (keyIntervalTapTimes[i] += elapsed) > threshold; + keyIntervalTapStates[i] = intervalTapped; + + if (intervalTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = false; + } + } + } + } + + i = XINPUT_BACK; + { + currentState.KeyStates[i] = false; + if (state.Gamepad.wButtons & XINPUT_GAMEPAD_BACK) + currentState.KeyStates[i] = true; + KeyDoubleTapStates[i] = IsTapped(i) ? KeyDoubleTapWatches[i].Restart() <= DOUBLE_TAP_THRESHOLD : false; + + { + bool isDown = currentState.KeyStates[i]; + bool isTapped = IsTapped(i); + + keyIntervalTapStates[i] = isTapped; + + if (isTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = true; + } + else if (isDown) + { + float threshold = keyIntervalInitials[i] ? INTERVAL_TAP_DELAY_THRESHOLD : INTERVAL_TAP_THRESHOLD; + + bool intervalTapped = (keyIntervalTapTimes[i] += elapsed) > threshold; + keyIntervalTapStates[i] = intervalTapped; + + if (intervalTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = false; + } + } + } + } + + i = XINPUT_LT; + { + currentState.KeyStates[i] = false; + if (state.Gamepad.bLeftTrigger > 230) + currentState.KeyStates[i] = true; + KeyDoubleTapStates[i] = IsTapped(i) ? KeyDoubleTapWatches[i].Restart() <= DOUBLE_TAP_THRESHOLD : false; + + { + bool isDown = currentState.KeyStates[i]; + bool isTapped = IsTapped(i); + + keyIntervalTapStates[i] = isTapped; + + if (isTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = true; + } + else if (isDown) + { + float threshold = keyIntervalInitials[i] ? INTERVAL_TAP_DELAY_THRESHOLD : INTERVAL_TAP_THRESHOLD; + + bool intervalTapped = (keyIntervalTapTimes[i] += elapsed) > threshold; + keyIntervalTapStates[i] = intervalTapped; + + if (intervalTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = false; + } + } + } + } + + i = XINPUT_RT; + { + currentState.KeyStates[i] = false; + if (state.Gamepad.bRightTrigger > 230) + currentState.KeyStates[i] = true; + KeyDoubleTapStates[i] = IsTapped(i) ? KeyDoubleTapWatches[i].Restart() <= DOUBLE_TAP_THRESHOLD : false; + + { + bool isDown = currentState.KeyStates[i]; + bool isTapped = IsTapped(i); + + keyIntervalTapStates[i] = isTapped; + + if (isTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = true; + } + else if (isDown) + { + float threshold = keyIntervalInitials[i] ? INTERVAL_TAP_DELAY_THRESHOLD : INTERVAL_TAP_THRESHOLD; + + bool intervalTapped = (keyIntervalTapTimes[i] += elapsed) > threshold; + keyIntervalTapStates[i] = intervalTapped; + + if (intervalTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = false; + } + } + } + } + + + { + //float normLX = fmaxf(-1, (float)state.Gamepad.sThumbLX / 32767); + i = XINPUT_LRIGHT; + currentState.KeyStates[i] = false; + if (state.Gamepad.sThumbLX > 10000) + currentState.KeyStates[i] = true; + + + KeyDoubleTapStates[i] = IsTapped(i) ? KeyDoubleTapWatches[i].Restart() <= DOUBLE_TAP_THRESHOLD : false; + + { + bool isDown = currentState.KeyStates[i]; + bool isTapped = IsTapped(i); + + keyIntervalTapStates[i] = isTapped; + + if (isTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = true; + } + else if (isDown) + { + float threshold = keyIntervalInitials[i] ? INTERVAL_TAP_DELAY_THRESHOLD : INTERVAL_TAP_THRESHOLD; + + bool intervalTapped = (keyIntervalTapTimes[i] += elapsed) > threshold; + keyIntervalTapStates[i] = intervalTapped; + + if (intervalTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = false; + } + } + } + i = XINPUT_LLEFT; + currentState.KeyStates[i] = false; + if (state.Gamepad.sThumbLX < -10000) + currentState.KeyStates[i] = true; + KeyDoubleTapStates[i] = IsTapped(i) ? KeyDoubleTapWatches[i].Restart() <= DOUBLE_TAP_THRESHOLD : false; + + { + bool isDown = currentState.KeyStates[i]; + bool isTapped = IsTapped(i); + + keyIntervalTapStates[i] = isTapped; + + if (isTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = true; + } + else if (isDown) + { + float threshold = keyIntervalInitials[i] ? INTERVAL_TAP_DELAY_THRESHOLD : INTERVAL_TAP_THRESHOLD; + + bool intervalTapped = (keyIntervalTapTimes[i] += elapsed) > threshold; + keyIntervalTapStates[i] = intervalTapped; + + if (intervalTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = false; + } + } + } + } + + { + //float normLX = fmaxf(-1, (float)state.Gamepad.sThumbRX / 32767); + i = XINPUT_RRIGHT; + currentState.KeyStates[i] = false; + if (state.Gamepad.sThumbRX > 10000) + currentState.KeyStates[i] = true; + KeyDoubleTapStates[i] = IsTapped(i) ? KeyDoubleTapWatches[i].Restart() <= DOUBLE_TAP_THRESHOLD : false; + + { + bool isDown = currentState.KeyStates[i]; + bool isTapped = IsTapped(i); + + keyIntervalTapStates[i] = isTapped; + + if (isTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = true; + } + else if (isDown) + { + float threshold = keyIntervalInitials[i] ? INTERVAL_TAP_DELAY_THRESHOLD : INTERVAL_TAP_THRESHOLD; + + bool intervalTapped = (keyIntervalTapTimes[i] += elapsed) > threshold; + keyIntervalTapStates[i] = intervalTapped; + + if (intervalTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = false; + } + } + } + i = XINPUT_RLEFT; + currentState.KeyStates[i] = false; + if (state.Gamepad.sThumbRX < -10000) + currentState.KeyStates[i] = true; + KeyDoubleTapStates[i] = IsTapped(i) ? KeyDoubleTapWatches[i].Restart() <= DOUBLE_TAP_THRESHOLD : false; + { + bool isDown = currentState.KeyStates[i]; + bool isTapped = IsTapped(i); + + keyIntervalTapStates[i] = isTapped; + + if (isTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = true; + } + else if (isDown) + { + float threshold = keyIntervalInitials[i] ? INTERVAL_TAP_DELAY_THRESHOLD : INTERVAL_TAP_THRESHOLD; + + bool intervalTapped = (keyIntervalTapTimes[i] += elapsed) > threshold; + keyIntervalTapStates[i] = intervalTapped; + + if (intervalTapped) + { + keyIntervalTapTimes[i] = 0; + keyIntervalInitials[i] = false; + } + } + } + } + } + else { + ZeroMemory(&state, sizeof(XINPUT_STATE)); + ZeroMemory(¤tState, sizeof(currentState)); + } + return TRUE; + } + + + bool Xinput::IsDown(BYTE keycode) + { + return currentState.IsDown(keycode); + } + + bool Xinput::IsUp(BYTE keycode) + { + return !IsDown(keycode); + } + + bool Xinput::IsTapped(BYTE keycode) + { + return IsDown(keycode) && WasUp(keycode); + } + + bool Xinput::IsDoubleTapped(BYTE keycode) + { + return KeyDoubleTapStates[keycode]; + } + + bool Xinput::IsReleased(BYTE keycode) + { + return IsUp(keycode) && WasDown(keycode); + } + + inline bool Xinput::WasDown(BYTE keycode) + { + return lastState.IsDown(keycode); + } + + inline bool Xinput::WasUp(BYTE keycode) + { + return !WasDown(keycode); + } + + bool Xinput::IsIntervalTapped(BYTE keycode) + { + return keyIntervalTapStates[keycode]; + } +} \ No newline at end of file diff --git a/source/plugins/TLAC/Input/Xinput/Xinput.h b/source/plugins/TLAC/Input/Xinput/Xinput.h new file mode 100644 index 0000000..255fe95 --- /dev/null +++ b/source/plugins/TLAC/Input/Xinput/Xinput.h @@ -0,0 +1,49 @@ +#pragma once +#include "../IInputDevice.h" +#include +#include "../../Utilities/Stopwatch.h" +#include "XinputState.h" + +using Stopwatch = TLAC::Utilities::Stopwatch; + +namespace TLAC::Input +{ + class Xinput : public IInputDevice + { + const float DOUBLE_TAP_THRESHOLD = 200.0f; + const float INTERVAL_TAP_DELAY_THRESHOLD = 500.0f; + const float INTERVAL_TAP_THRESHOLD = 75.0f; + + public: + static Xinput* GetInstance(); + + bool PollInput() override; + bool IsDown(BYTE keycode); + bool IsUp(BYTE keycode); + bool IsTapped(BYTE keycode); + bool IsReleased(BYTE keycode); + bool IsDoubleTapped(BYTE keycode); + bool IsIntervalTapped(BYTE keycode); + + bool WasDown(BYTE keycode); + bool WasUp(BYTE keycode); + + private: + Xinput(); + XinputState lastState; + XinputState currentState; + + XINPUT_STATE state; + + BYTE KeyDoubleTapStates[0xFF]; + Utilities::Stopwatch KeyDoubleTapWatches[0xFF]; + + Stopwatch keyIntervalWatch; + + BOOL keyIntervalInitials[0xFF]; + BYTE keyIntervalTapStates[0xFF]; + FLOAT keyIntervalTapTimes[0xFF]; + + static Xinput* instance; + }; +} diff --git a/source/plugins/TLAC/Input/Xinput/XinputState.cpp b/source/plugins/TLAC/Input/Xinput/XinputState.cpp new file mode 100644 index 0000000..53d985d --- /dev/null +++ b/source/plugins/TLAC/Input/Xinput/XinputState.cpp @@ -0,0 +1,9 @@ +#include "XinputState.h" + +namespace TLAC::Input +{ + bool XinputState::IsDown(BYTE keycode) + { + return KeyStates[keycode]; + } +} \ No newline at end of file diff --git a/source/plugins/TLAC/Input/Xinput/XinputState.h b/source/plugins/TLAC/Input/Xinput/XinputState.h new file mode 100644 index 0000000..6bba790 --- /dev/null +++ b/source/plugins/TLAC/Input/Xinput/XinputState.h @@ -0,0 +1,12 @@ +#pragma once +#include + +namespace TLAC::Input +{ + struct XinputState + { + bool KeyStates[0x8F]; + + bool IsDown(BYTE keycode); + }; +} diff --git a/source/plugins/TLAC/TLAC.vcxproj b/source/plugins/TLAC/TLAC.vcxproj new file mode 100644 index 0000000..df1945c --- /dev/null +++ b/source/plugins/TLAC/TLAC.vcxproj @@ -0,0 +1,285 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {2B5533BB-04A1-424F-9BCA-1CA963B46B7F} + Win32Proj + TLAC + 10.0 + + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + false + $(ProjectName) + .dva + + + true + + + true + $(ProjectName) + .dva + + + false + + + + NotUsing + Level3 + MaxSpeed + true + true + true + NDEBUG;TLAC_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + + + stdcpp17 + ..\..\..\dependencies\detours\include;..\..\..\dependencies\freeglut\include;%(AdditionalIncludeDirectories) + + + Windows + true + true + true + false + XINPUT9_1_0.LIB;dinput8.lib;dxguid.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + Xinput.h + ..\..\..\dependencies\detours\lib;..\..\..\dependencies\freeglut\lib;%(AdditionalLibraryDirectories) + + + + + Use + Level3 + Disabled + true + WIN32;_DEBUG;TLAC_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + false + + + + + NotUsing + Level3 + Disabled + true + _DEBUG;TLAC_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + + + stdcpp17 + ..\..\..\dependencies\detours\include;..\..\..\dependencies\freeglut\include;%(AdditionalIncludeDirectories) + + + Windows + true + false + ..\..\..\dependencies\detours\lib;..\..\..\dependencies\freeglut\lib;%(AdditionalLibraryDirectories) + XINPUT9_1_0.LIB;dinput8.lib;dxguid.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + Xinput.h + + + + + Use + Level3 + MaxSpeed + true + true + true + WIN32;NDEBUG;TLAC_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + true + true + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/plugins/TLAC/TLAC.vcxproj.filters b/source/plugins/TLAC/TLAC.vcxproj.filters new file mode 100644 index 0000000..7659af6 --- /dev/null +++ b/source/plugins/TLAC/TLAC.vcxproj.filters @@ -0,0 +1,336 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/source/plugins/TLAC/Utilities/EnumBitwiseOperations.h b/source/plugins/TLAC/Utilities/EnumBitwiseOperations.h new file mode 100644 index 0000000..27f9272 --- /dev/null +++ b/source/plugins/TLAC/Utilities/EnumBitwiseOperations.h @@ -0,0 +1,12 @@ +#pragma once + +namespace TLAC::Utilities +{ + template inline T operator~ (T a) { return (T)~(int)a; } + template inline T operator| (T a, T b) { return (T)((int)a | (int)b); } + template inline T operator& (T a, T b) { return (T)((int)a & (int)b); } + template inline T operator^ (T a, T b) { return (T)((int)a ^ (int)b); } + template inline T& operator|= (T& a, T b) { return (T&)((int&)a |= (int)b); } + template inline T& operator&= (T& a, T b) { return (T&)((int&)a &= (int)b); } + template inline T& operator^= (T& a, T b) { return (T&)((int&)a ^= (int)b); } +} \ No newline at end of file diff --git a/source/plugins/TLAC/Utilities/Math.cpp b/source/plugins/TLAC/Utilities/Math.cpp new file mode 100644 index 0000000..a20b661 --- /dev/null +++ b/source/plugins/TLAC/Utilities/Math.cpp @@ -0,0 +1,37 @@ +#define _USE_MATH_DEFINES +#include "Math.h" + +namespace TLAC::Utilities +{ + float ToDegrees(float radians) + { + return radians * (180.0f / M_PI); + } + + float ToRadians(float degrees) + { + return (degrees * M_PI) / 180.0f; + } + + Vec2 GetDirection(float degrees) + { + float radians = ToRadians(degrees); + return Vec2(cos(radians), sin(radians)); + } + + Vec2 PointFromAngle(float degrees, float distance) + { + float radians = ToRadians(degrees + 90.0f); + return Vec2(-1 * std::cos(radians) * distance, -1 * std::sin(radians) * distance); + } + + float AngleFromPoints(Vec2 p0, Vec2 p1) + { + return (float)(std::atan2(p1.Y - p0.Y, p1.X - p0.X) * 180.0 / M_PI) + 90.0f; + } + + float ConvertRange(float originalStart, float originalEnd, float newStart, float newEnd, float value) + { + return newStart + ((value - originalStart) * (newEnd - newStart) / (originalEnd - originalStart)); + } +} \ No newline at end of file diff --git a/source/plugins/TLAC/Utilities/Math.h b/source/plugins/TLAC/Utilities/Math.h new file mode 100644 index 0000000..780526c --- /dev/null +++ b/source/plugins/TLAC/Utilities/Math.h @@ -0,0 +1,15 @@ +#pragma once +#include +#include "Vec2.h" +#include "Vec3.h" + +namespace TLAC::Utilities +{ + float ToDegrees(float radians); + float ToRadians(float degrees); + + Vec2 GetDirection(float degrees); + Vec2 PointFromAngle(float degrees, float distance); + float AngleFromPoints(Vec2 p0, Vec2 p1); + float ConvertRange(float originalStart, float originalEnd, float newStart, float newEnd, float value); +} \ No newline at end of file diff --git a/source/plugins/TLAC/Utilities/Operations.cpp b/source/plugins/TLAC/Utilities/Operations.cpp new file mode 100644 index 0000000..fdca5b3 --- /dev/null +++ b/source/plugins/TLAC/Utilities/Operations.cpp @@ -0,0 +1,60 @@ +#pragma once +#include "Operations.h" + +namespace TLAC::Utilities +{ + std::vector Split(const std::string& str, const std::string& delim) + { + std::vector tokens; + size_t prev = 0, pos = 0; + do + { + pos = str.find(delim, prev); + if (pos == std::string::npos) + pos = str.length(); + + std::string token = str.substr(prev, pos - prev); + + if (!token.empty()) + tokens.push_back(token); + + prev = pos + delim.length(); + } while (pos < str.length() && prev < str.length()); + + return tokens; + } + + void LeftTrim(std::string &s) + { + s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](int ch) + { + return !std::isspace(ch); + })); + } + + void RightTrim(std::string &s) + { + s.erase(std::find_if(s.rbegin(), s.rend(), [](int ch) + { + return !std::isspace(ch); + }).base(), s.end()); + } + + void Trim(std::string &s) + { + s = trim(s); + } + + std::string trim(const std::string& str, const std::string& whitespace) + { + const size_t strBegin = str.find_first_not_of(whitespace); + + if (strBegin == std::string::npos) + return ""; + + const size_t strEnd = str.find_last_not_of(whitespace); + const size_t strRange = strEnd - strBegin + 1; + + return str.substr(strBegin, strRange); + } +} \ No newline at end of file diff --git a/source/plugins/TLAC/Utilities/Operations.h b/source/plugins/TLAC/Utilities/Operations.h new file mode 100644 index 0000000..b11c8a6 --- /dev/null +++ b/source/plugins/TLAC/Utilities/Operations.h @@ -0,0 +1,16 @@ +#pragma once +#include +#include +#include +#include + +namespace TLAC::Utilities +{ + std::vector Split(const std::string& str, const std::string& delim); + + void LeftTrim(std::string &s); + void RightTrim(std::string &s); + void Trim(std::string &s); + + std::string trim(const std::string& str, const std::string& whitespace = " \t"); +} diff --git a/source/plugins/TLAC/Utilities/Stopwatch.cpp b/source/plugins/TLAC/Utilities/Stopwatch.cpp new file mode 100644 index 0000000..f1c9304 --- /dev/null +++ b/source/plugins/TLAC/Utilities/Stopwatch.cpp @@ -0,0 +1,36 @@ +#include "Stopwatch.h" + +namespace TLAC::Utilities +{ + Stopwatch::Stopwatch() + { + } + + Stopwatch::~Stopwatch() + { + } + + void Stopwatch::Start() + { + start = high_resolution_clock::now(); + } + + float Stopwatch::Stop() + { + end = high_resolution_clock::now(); + return GetElapsed(); + } + + float Stopwatch::Restart() + { + float elapsed = Stop(); + Start(); + + return elapsed; + } + + float Stopwatch::GetElapsed() + { + return (float)(chrono::duration_cast(end - start).count() / TIME_FACTOR); + } +} \ No newline at end of file diff --git a/source/plugins/TLAC/Utilities/Stopwatch.h b/source/plugins/TLAC/Utilities/Stopwatch.h new file mode 100644 index 0000000..d21d268 --- /dev/null +++ b/source/plugins/TLAC/Utilities/Stopwatch.h @@ -0,0 +1,30 @@ +#pragma once +#include + +namespace chrono = std::chrono; + +typedef chrono::time_point steady_clock; +typedef chrono::high_resolution_clock high_resolution_clock; + +namespace TLAC::Utilities +{ + class Stopwatch + { + const float TIME_FACTOR = 1000.0f; + + public: + Stopwatch(); + ~Stopwatch(); + + void Start(); + float Stop(); + float Restart(); + + float GetElapsed(); + + private: + steady_clock start; + steady_clock end; + }; +} + diff --git a/source/plugins/TLAC/Utilities/Vec2.cpp b/source/plugins/TLAC/Utilities/Vec2.cpp new file mode 100644 index 0000000..0b27e03 --- /dev/null +++ b/source/plugins/TLAC/Utilities/Vec2.cpp @@ -0,0 +1,34 @@ +#include "Vec2.h" + +namespace TLAC::Utilities +{ + Vec2::Vec2() + { + }; + + Vec2::Vec2(float x, float y) : X(x), Y(y) + { + }; + + Vec2 Vec2::operator+(Vec2 value) + { + return Vec2(X + value.X, Y + value.Y); + } + + void Vec2::operator+=(const Vec2 &value) + { + X += value.X; + Y += value.Y; + } + + Vec2 Vec2::operator-(Vec2 value) + { + return Vec2(X - value.X, Y - value.Y); + } + + void Vec2::operator-=(const Vec2 &value) + { + X -= value.X; + Y -= value.Y; + } +} \ No newline at end of file diff --git a/source/plugins/TLAC/Utilities/Vec2.h b/source/plugins/TLAC/Utilities/Vec2.h new file mode 100644 index 0000000..0dd3aa4 --- /dev/null +++ b/source/plugins/TLAC/Utilities/Vec2.h @@ -0,0 +1,18 @@ +#pragma once + +namespace TLAC::Utilities +{ + struct Vec2 + { + float X, Y; + + Vec2(); + Vec2(float x, float y); + + Vec2 operator+(Vec2 value); + void operator+=(const Vec2 &value); + + Vec2 operator-(Vec2 value); + void operator-=(const Vec2 &value); + }; +} diff --git a/source/plugins/TLAC/Utilities/Vec3.cpp b/source/plugins/TLAC/Utilities/Vec3.cpp new file mode 100644 index 0000000..b5c8a34 --- /dev/null +++ b/source/plugins/TLAC/Utilities/Vec3.cpp @@ -0,0 +1,58 @@ +#include "Vec3.h" + +namespace TLAC::Utilities +{ + Vec3::Vec3() + { + }; + + Vec3::Vec3(float x, float y, float z) : X(x), Y(y), Z(z) + { + }; + + Vec3 Vec3::operator+(Vec2 value) + { + return Vec3(X + value.X, Y, Z + value.Y); + } + + void Vec3::operator+=(const Vec2 &value) + { + X += value.X; + Z += value.Y; + } + + Vec3 Vec3::operator-(Vec2 value) + { + return Vec3(X - value.X, Y, Z - value.Y); + } + + void Vec3::operator-=(const Vec2 &value) + { + X -= value.X; + Z -= value.Y; + } + + Vec3 Vec3::operator+(Vec3 value) + { + return Vec3(X + value.X, Y + value.Y, Z + value.Z); + } + + void Vec3::operator+=(const Vec3 &value) + { + X += value.X; + Y += value.Y; + Z += value.Z; + } + + Vec3 Vec3::operator-(Vec3 value) + { + return Vec3(X - value.X, Y - value.Y, Z - value.Z); + } + + void Vec3::operator-=(const Vec3 &value) + { + X -= value.X; + Y -= value.Y; + Z -= value.Z; + } +} \ No newline at end of file diff --git a/source/plugins/TLAC/Utilities/Vec3.h b/source/plugins/TLAC/Utilities/Vec3.h new file mode 100644 index 0000000..37c30fd --- /dev/null +++ b/source/plugins/TLAC/Utilities/Vec3.h @@ -0,0 +1,27 @@ +#pragma once +#include "Vec2.h" + +namespace TLAC::Utilities +{ + struct Vec3 + { + float X, Y, Z; + + Vec3(); + Vec3(float x, float y, float z); + + // Vec2 + Vec3 operator+(Vec2 value); + void operator+=(const Vec2 &value); + + Vec3 operator-(Vec2 value); + void operator-=(const Vec2 &value); + + // Vec3 + Vec3 operator+(Vec3 value); + void operator+=(const Vec3 &value); + + Vec3 operator-(Vec3 value); + void operator-=(const Vec3 &value); + }; +} \ No newline at end of file diff --git a/source/plugins/TLAC/dllmain.cpp b/source/plugins/TLAC/dllmain.cpp new file mode 100644 index 0000000..c3ed8ca --- /dev/null +++ b/source/plugins/TLAC/dllmain.cpp @@ -0,0 +1,337 @@ +#include +#include +#include +#include +#include +#include "Constants.h" +#include "framework.h" +#include "Input/Mouse/Mouse.h" +#include "Input/Xinput/Xinput.h" +#include "Input/Keyboard/Keyboard.h" +#include "Input/DirectInput/DirectInput.h" +#include "Input/DirectInput/Ds4/DualShock4.h" +#include "Components/ComponentsManager.h" +#include +#include + +#include +#pragma comment(lib, "detours.lib") + +void(__cdecl* divaEngineUpdate)() = (void(__cdecl*)())0x14018CC40; + +LRESULT CALLBACK MessageWindowProcessCallback(HWND, UINT, WPARAM, LPARAM); +DWORD WINAPI WindowMessageDispatcher(LPVOID); +VOID RegisterMessageWindowClass(); + +struct +{ + DWORD ID = NULL; + HANDLE Handle = NULL; +} MessageThread; + +const wchar_t* MessageWindowClassName = TEXT("MessageWindowClass"); +const wchar_t* MessageWindowName = TEXT("MessageWindowTitle"); + +namespace TLAC +{ + Components::ComponentsManager ComponentsManager; + bool DeviceConnected = true; + bool FirstUpdateTick = true; + bool HasWindowFocus, HadWindowFocus; + + void InitializeTick() + { + RegisterMessageWindowClass(); + if ((MessageThread.Handle = CreateThread(0, 0, WindowMessageDispatcher, 0, 0, 0)) == NULL) + printf("[TLAC] InitializeTick(): CreateThread() Error: %d\n", GetLastError()); + + framework::DivaWindowHandle = FindWindow(0, framework::DivaWindowName); + if (framework::DivaWindowHandle == NULL) + framework::DivaWindowHandle = FindWindow(0, framework::GlutDefaultName); + if (framework::DivaWindowHandle == NULL) + framework::DivaWindowHandle = FindWindow(0, framework::freeGlutDefaultName); + + HRESULT diInitResult = Input::InitializeDirectInput(framework::Module); + if (FAILED(diInitResult)) + printf("[TLAC] InitializeTick(): Failed to initialize DirectInput. Error: 0x%08X\n", diInitResult); + + ComponentsManager.Initialize(); + } + + void UpdateTick() + { + if (FirstUpdateTick) + { + FirstUpdateTick = false; + InitializeTick(); + } + + if (DeviceConnected) + { + DeviceConnected = false; + + if (!Input::DualShock4::InstanceInitialized()) + { + if (Input::DualShock4::TryInitializeInstance()) + printf("[TLAC] UpdateTick(): DualShock4 connected and initialized\n"); + } + } + + ComponentsManager.Update(); + + HadWindowFocus = HasWindowFocus; + HasWindowFocus = framework::DivaWindowHandle == NULL || GetForegroundWindow() == framework::DivaWindowHandle; + + if (HasWindowFocus && GetAsyncKeyState(VK_ESCAPE)) + { + exit(1); + } + + if ((HasWindowFocus) && (!framework::inputDisable)) + { + Input::Keyboard::GetInstance()->PollInput(); + Input::Mouse::GetInstance()->PollInput(); + Input::Xinput::GetInstance()->PollInput(); + + if (Input::DualShock4::GetInstance() != nullptr) + { + if (!Input::DualShock4::GetInstance()->PollInput()) + { + Input::DualShock4::DeleteInstance(); + printf("[TLAC] UpdateTick(): DualShock4 connection lost\n"); + } + } + + ComponentsManager.UpdateInput(); + } + + if ((framework::inputDisable)) + { + Input::Keyboard::GetInstance()->PollInput(); + Input::Mouse::GetInstance()->PollInput(); + Input::Xinput::GetInstance()->PollInput(); + + if (Input::DualShock4::GetInstance() != nullptr) + { + if (!Input::DualShock4::GetInstance()->PollInput()) + { + Input::DualShock4::DeleteInstance(); + printf("[TLAC] UpdateTick(): DualShock4 connection lost\n"); + } + } + } + + if (HasWindowFocus && !HadWindowFocus) + ComponentsManager.OnFocusGain(); + + if (!HasWindowFocus && HadWindowFocus) + ComponentsManager.OnFocusLost(); + } + + void InitializeExtraSettings() + { + const LPCTSTR RESOLUTION_CONFIG_FILE_NAME = _T(".\\config.ini"); + auto nCustomRes = GetPrivateProfileIntW(L"resolution", L"r.enable", FALSE, RESOLUTION_CONFIG_FILE_NAME); + auto nCustomWidth = GetPrivateProfileIntW(L"resolution", L"r.width", NULL, RESOLUTION_CONFIG_FILE_NAME); + auto nCustomHeight = GetPrivateProfileIntW(L"resolution", L"r.height", NULL, RESOLUTION_CONFIG_FILE_NAME); + auto nTAA = GetPrivateProfileIntW(L"graphics", L"taa", TRUE, RESOLUTION_CONFIG_FILE_NAME); + auto nMLAA = GetPrivateProfileIntW(L"graphics", L"mlaa", TRUE, RESOLUTION_CONFIG_FILE_NAME); + + if (nCustomRes) + { + printf("[TLAC] Custom internal resolution enabled\n"); + printf("[TLAC] X: %d Y: %d\n", nCustomWidth, nCustomHeight); + // Requires -wqhd launch parameter or Render.dva plugin + { + DWORD oldProtect, bck; + VirtualProtect((BYTE*)0x00000001409B8B68, 4, PAGE_EXECUTE_READWRITE, &oldProtect); + *((int*)0x00000001409B8B68) = nCustomWidth; + VirtualProtect((BYTE*)0x00000001409B8B68, 6, oldProtect, &bck); + } + { + DWORD oldProtect, bck; + VirtualProtect((BYTE*)0x00000001409B8B6C, 4, PAGE_EXECUTE_READWRITE, &oldProtect); + *((int*)0x00000001409B8B6C) = nCustomHeight; + VirtualProtect((BYTE*)0x00000001409B8B6C, 6, oldProtect, &bck); + } + + //*((int*)0x00000001409B8B6C) = maxHeight; + //*((int*)0x00000001409B8B14) = maxWidth; + //*((int*)0x00000001409B8B18) = maxHeight; + + //*((int*)0x00000001409B8B1C) = maxWidth; // No parameters width? + //*((int*)0x00000001409B8B20) = maxHeight; // No parameters height? + } + if (!nTAA) + { + DWORD oldProtect, bck; + VirtualProtect((BYTE*)0x00000001411AB67C, 1, PAGE_EXECUTE_READWRITE, &oldProtect); + *((byte*)0x00000001411AB67C + 0) = 0x00; + VirtualProtect((BYTE*)0x00000001411AB67C, 1, oldProtect, &bck); + + printf("[TLAC] TAA disabled\n"); + } + if (!nMLAA) + { + DWORD oldProtect, bck; + VirtualProtect((BYTE*)0x00000001411AB680, 1, PAGE_EXECUTE_READWRITE, &oldProtect); + *((byte*)0x00000001411AB680 + 0) = 0x00; + VirtualProtect((BYTE*)0x00000001411AB680, 1, oldProtect, &bck); + + printf("[TLAC] MLAA disabled\n"); + } + } + + void Dispose() + { + ComponentsManager.Dispose(); + + delete Input::Keyboard::GetInstance(); + delete Input::Mouse::GetInstance(); + delete Input::DualShock4::GetInstance(); + + Input::DisposeDirectInput(); + + PostThreadMessage(MessageThread.ID, WM_QUIT, 0, 0); + } +} + +DWORD WINAPI WindowMessageDispatcher(LPVOID lpParam) +{ + HWND windowHandle = CreateWindowW( + MessageWindowClassName, + MessageWindowName, + WS_OVERLAPPEDWINDOW, + CW_USEDEFAULT, CW_USEDEFAULT, + CW_USEDEFAULT, CW_USEDEFAULT, + NULL, NULL, + TLAC::framework::Module, + NULL); + + if (!windowHandle) + { + printf("[TLAC] WindowMessageDispatcher(): CreateWindowW() Error: %d\n", GetLastError()); + return 1; + } + + MessageThread.ID = GetCurrentThreadId(); + + MSG message; + DWORD returnValue; + + printf("[TLAC] WindowMessageDispatcher(): Entering message loop...\n"); + + while (1) + { + returnValue = GetMessage(&message, NULL, 0, 0); + if (returnValue != -1) + { + TranslateMessage(&message); + DispatchMessage(&message); + } + else + { + printf("[TLAC] WindowMessageDispatcher(): GetMessage() Error: %d\n", returnValue); + } + } + + DestroyWindow(windowHandle); + return 0; +} + +BOOL RegisterDeviceInterface(HWND hWnd, HDEVNOTIFY* hDeviceNotify) +{ + DEV_BROADCAST_DEVICEINTERFACE NotificationFilter = {}; + + NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE); + NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; + + *hDeviceNotify = RegisterDeviceNotification(hWnd, &NotificationFilter, DEVICE_NOTIFY_ALL_INTERFACE_CLASSES); + + return *hDeviceNotify != NULL; +} + +LRESULT CALLBACK MessageWindowProcessCallback(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + switch (message) + { + case WM_CREATE: + { + HDEVNOTIFY hDevNotify = NULL; + + if (!RegisterDeviceInterface(hWnd, &hDevNotify)) + printf("[TLAC] MessageWindowProcessCallback(): RegisterDeviceInterface() Error: %d\n", GetLastError()); + + break; + } + + case WM_DEVICECHANGE: + { + switch (wParam) + { + case DBT_DEVICEARRIVAL: + TLAC::DeviceConnected = true; + break; + + default: + break; + } + } + + default: + return DefWindowProc(hWnd, message, wParam, lParam); + } + + return 0; +} + +VOID RegisterMessageWindowClass() +{ + WNDCLASS windowClass = { }; + + windowClass.lpfnWndProc = MessageWindowProcessCallback; + windowClass.hInstance = TLAC::framework::Module; + windowClass.lpszClassName = MessageWindowClassName; + + RegisterClass(&windowClass); +} + +void hookedEngineUpdate() +{ + TLAC::UpdateTick(); + //divaEngineUpdate(); +} + +BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) +{ + HWND consoleHandle = GetConsoleWindow(); + + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + + // Are you a dev and want to debug? Want to always be able to watch the console upon game initialization? Comment this. + ShowWindow(consoleHandle, SW_HIDE); + + printf("[TLAC] DllMain(): Installing hooks...\n"); + + + //InstallHook((void*)ENGINE_UPDATE_HOOK_TARGET_ADDRESS, (void*)UpdateTick, 0xE); + DisableThreadLibraryCalls(hModule); + DetourTransactionBegin(); + DetourUpdateThread(GetCurrentThread()); + DetourAttach(&(PVOID&)divaEngineUpdate, hookedEngineUpdate); + DetourTransactionCommit(); + + TLAC::InitializeExtraSettings(); + + TLAC::framework::Module = hModule; + break; + + case DLL_PROCESS_DETACH: + TLAC::Dispose(); + break; + } + + return TRUE; +} \ No newline at end of file diff --git a/source/plugins/TLAC/framework.cpp b/source/plugins/TLAC/framework.cpp new file mode 100644 index 0000000..7d629c2 --- /dev/null +++ b/source/plugins/TLAC/framework.cpp @@ -0,0 +1,40 @@ +#include "framework.h" +#include + +namespace TLAC +{ + typedef std::filesystem::path fspath; + + std::string *framework::moduleDirectory; + + const wchar_t* framework::DivaWindowName = L"Hatsune Miku Project DIVA Arcade Future Tone"; + const wchar_t* framework::GlutDefaultName = L"GLUT"; + const wchar_t* framework::freeGlutDefaultName = L"FREEGLUT"; + + HWND framework::DivaWindowHandle; + HMODULE framework::Module; + + bool framework::inputDisable = false; + + std::string framework::GetModuleDirectory() + { + if (moduleDirectory == nullptr) + { + WCHAR modulePathBuffer[MAX_PATH]; + GetModuleFileNameW(framework::Module, modulePathBuffer, MAX_PATH); + + fspath configPath = fspath(modulePathBuffer).parent_path(); + moduleDirectory = new std::string(configPath.u8string()); + } + + return *moduleDirectory; + } + + RECT framework::GetWindowBounds() + { + RECT windowRect; + GetWindowRect(DivaWindowHandle, &windowRect); + + return windowRect; + } +} diff --git a/source/plugins/TLAC/framework.h b/source/plugins/TLAC/framework.h new file mode 100644 index 0000000..85f893e --- /dev/null +++ b/source/plugins/TLAC/framework.h @@ -0,0 +1,25 @@ +#pragma once +#include +#include + +namespace TLAC +{ + class framework + { + private: + static std::string *moduleDirectory; + + public: + static const wchar_t* DivaWindowName; + static const wchar_t* GlutDefaultName; + static const wchar_t* freeGlutDefaultName; + + static bool inputDisable; + + static HWND DivaWindowHandle; + static HMODULE Module; + + static std::string GetModuleDirectory(); + static RECT GetWindowBounds(); + }; +}