From 2d2283e0dbfb6faccc8c7ad3f74038efee7e00e7 Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Fri, 31 Jul 2020 20:41:51 +0300 Subject: [PATCH 001/112] submodules? --- librw | 2 +- ogg | 2 +- opus | 2 +- opusfile | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/librw b/librw index 99c15d5e..162c2d20 160000 --- a/librw +++ b/librw @@ -1 +1 @@ -Subproject commit 99c15d5ed78cc112e1055cc89452dd57df28da58 +Subproject commit 162c2d203577e7e8ca727e699da33f7d54d76257 diff --git a/ogg b/ogg index 1e8d7cce..0bbcba4e 160000 --- a/ogg +++ b/ogg @@ -1 +1 @@ -Subproject commit 1e8d7cce266df61afc9d35db0283bbacc0237aba +Subproject commit 0bbcba4e7cf32324170470569c4527ffd0002870 diff --git a/opus b/opus index 8aa77672..484af258 160000 --- a/opus +++ b/opus @@ -1 +1 @@ -Subproject commit 8aa7767207b1e3633004c26aecbb67d1c5118485 +Subproject commit 484af2580b82dffd695fcd0841fc34a9dc5f7293 diff --git a/opusfile b/opusfile index eb252537..a55c164e 160000 --- a/opusfile +++ b/opusfile @@ -1 +1 @@ -Subproject commit eb252537f374e30f7b68b84223c5a2303c05eca2 +Subproject commit a55c164e9891a9326188b7d4d216ec9a88373739 From 99d8e12207ee08e8727d0e20e9d81d77aef80d61 Mon Sep 17 00:00:00 2001 From: blingu <36486731+blingu@users.noreply.github.com> Date: Wed, 5 Aug 2020 14:28:12 +0200 Subject: [PATCH 002/112] added partial bsd support (FreeBSD) --- premake5.lua | 632 ++++++++++++++++++++++++++------------------------- 1 file changed, 326 insertions(+), 306 deletions(-) diff --git a/premake5.lua b/premake5.lua index c8190e15..dc64956d 100644 --- a/premake5.lua +++ b/premake5.lua @@ -1,308 +1,328 @@ -newoption { - trigger = "glewdir", - value = "PATH", - description = "Directory of GLEW", - default = "glew-2.1.0" -} - -newoption { - trigger = "glfwdir64", - value = "PATH", - description = "Directory of glfw", - default = "glfw-3.3.2.bin.WIN64", -} - -newoption { - trigger = "glfwdir32", - value = "PATH", - description = "Directory of glfw", - default = "glfw-3.3.2.bin.WIN32", -} - -newoption { - trigger = "with-librw", - description = "Build and use librw from this solution" -} - -newoption { - trigger = "with-opus", - description = "Build with opus" -} - -if(_OPTIONS["with-librw"]) then - Librw = "librw" -else - Librw = os.getenv("LIBRW") or "librw" -end - -function getsys(a) - if a == 'windows' then - return 'win' - end - return a -end - -function getarch(a) - if a == 'x86_64' then - return 'amd64' - elseif a == 'ARM' then - return 'arm' - end - return a -end - -workspace "re3" - language "C++" - configurations { "Debug", "Release" } - location "build" - symbols "Full" - staticruntime "off" - - filter { "system:windows" } - platforms { - "win-x86-RW33_d3d8-mss", - "win-x86-librw_d3d9-mss", - "win-x86-librw_gl3_glfw-mss", - "win-x86-RW33_d3d8-oal", - "win-x86-librw_d3d9-oal", - "win-x86-librw_gl3_glfw-oal", - "win-amd64-librw_d3d9-oal", - "win-amd64-librw_gl3_glfw-oal", - } - - filter { "system:linux" } - platforms { - "linux-x86-librw_gl3_glfw-oal", - "linux-amd64-librw_gl3_glfw-oal", - "linux-arm-librw_gl3_glfw-oal", - } - - filter "configurations:Debug" - defines { "DEBUG" } - - filter "configurations:Release" - defines { "NDEBUG" } - optimize "On" - - filter { "platforms:win*" } - system "windows" - - filter { "platforms:linux*" } - system "linux" - - filter { "platforms:*x86*" } - architecture "x86" - - filter { "platforms:*amd64*" } - architecture "amd64" - - filter { "platforms:*arm*" } - architecture "ARM" - - filter { "platforms:*librw_d3d9*" } - defines { "RW_D3D9" } - if(not _OPTIONS["with-librw"]) then - libdirs { path.join(Librw, "lib/win-%{getarch(cfg.architecture)}-d3d9/%{cfg.buildcfg}") } - end - - filter "platforms:*librw_gl3_glfw*" - defines { "RW_GL3" } - includedirs { path.join(_OPTIONS["glewdir"], "include") } - if(not _OPTIONS["with-librw"]) then - libdirs { path.join(Librw, "lib/%{getsys(cfg.system)}-%{getarch(cfg.architecture)}-gl3/%{cfg.buildcfg}") } - end - - filter "platforms:*x86-librw_gl3_glfw*" - includedirs { path.join(_OPTIONS["glfwdir32"], "include") } - - filter "platforms:*amd64-librw_gl3_glfw*" - includedirs { path.join(_OPTIONS["glfwdir64"], "include") } - - filter "platforms:win*librw_gl3_glfw*" - defines { "GLEW_STATIC" } - - filter {} - - function setpaths (gamepath, exepath, scriptspath) - scriptspath = scriptspath or "" - if (gamepath) then - postbuildcommands { - '{COPY} "%{cfg.buildtarget.abspath}" "' .. gamepath .. scriptspath .. '%{cfg.buildtarget.name}"' - } - debugdir (gamepath) - if (exepath) then - -- Used VS variable $(TargetFileName) because it doesn't accept premake tokens. Does debugcommand even work outside VS?? - debugcommand (gamepath .. "$(TargetFileName)") - dir, file = exepath:match'(.*/)(.*)' - debugdir (gamepath .. (dir or "")) - end - end - --targetdir ("bin/%{prj.name}/" .. scriptspath) - end - -if(_OPTIONS["with-librw"]) then -project "librw" - kind "StaticLib" - targetname "rw" - targetdir "lib/%{cfg.platform}/%{cfg.buildcfg}" - files { path.join(Librw, "src/*.*") } - files { path.join(Librw, "src/*/*.*") } - filter "platforms:*RW33*" - flags { "ExcludeFromBuild" } - filter {} -end - -local function addSrcFiles( prefix ) - return prefix .. "/*cpp", prefix .. "/*.h", prefix .. "/*.c", prefix .. "/*.ico", prefix .. "/*.rc" -end - -project "re3" - kind "WindowedApp" - targetname "re3" - targetdir "bin/%{cfg.platform}/%{cfg.buildcfg}" - - files { addSrcFiles("src") } - files { addSrcFiles("src/animation") } +newoption { + trigger = "glewdir", + value = "PATH", + description = "Directory of GLEW", + default = "glew-2.1.0" +} + +newoption { + trigger = "glfwdir64", + value = "PATH", + description = "Directory of glfw", + default = "glfw-3.3.2.bin.WIN64", +} + +newoption { + trigger = "glfwdir32", + value = "PATH", + description = "Directory of glfw", + default = "glfw-3.3.2.bin.WIN32", +} + +newoption { + trigger = "with-librw", + description = "Build and use librw from this solution" +} + +newoption { + trigger = "with-opus", + description = "Build with opus" +} + +if(_OPTIONS["with-librw"]) then + Librw = "librw" +else + Librw = os.getenv("LIBRW") or "librw" +end + +function getsys(a) + if a == 'windows' then + return 'win' + end + return a +end + +function getarch(a) + if a == 'x86_64' then + return 'amd64' + elseif a == 'ARM' then + return 'arm' + end + return a +end + +workspace "re3" + language "C++" + configurations { "Debug", "Release" } + location "build" + symbols "Full" + staticruntime "off" + + filter { "system:windows" } + platforms { + "win-x86-RW33_d3d8-mss", + "win-x86-librw_d3d9-mss", + "win-x86-librw_gl3_glfw-mss", + "win-x86-RW33_d3d8-oal", + "win-x86-librw_d3d9-oal", + "win-x86-librw_gl3_glfw-oal", + "win-amd64-librw_d3d9-oal", + "win-amd64-librw_gl3_glfw-oal", + } + + filter { "system:linux" } + platforms { + "linux-x86-librw_gl3_glfw-oal", + "linux-amd64-librw_gl3_glfw-oal", + "linux-arm-librw_gl3_glfw-oal", + } + filter { "system:bsd" } + platforms { + "bsd-amd64-librw_gl3_glfw-oal" + } + + filter "configurations:Debug" + defines { "DEBUG" } + + filter "configurations:Release" + defines { "NDEBUG" } + optimize "On" + + filter { "platforms:win*" } + system "windows" + + filter { "platforms:linux*" } + system "linux" + + filter { "platforms:bsd*" } + system "bsd" + + filter { "platforms:*x86*" } + architecture "x86" + + filter { "platforms:*amd64*" } + architecture "amd64" + + filter { "platforms:*arm*" } + architecture "ARM" + + filter { "platforms:*librw_d3d9*" } + defines { "RW_D3D9" } + if(not _OPTIONS["with-librw"]) then + libdirs { path.join(Librw, "lib/win-%{getarch(cfg.architecture)}-d3d9/%{cfg.buildcfg}") } + end + + filter "platforms:*librw_gl3_glfw*" + defines { "RW_GL3" } + includedirs { path.join(_OPTIONS["glewdir"], "include") } + if(not _OPTIONS["with-librw"]) then + libdirs { path.join(Librw, "lib/%{getsys(cfg.system)}-%{getarch(cfg.architecture)}-gl3/%{cfg.buildcfg}") } + end + + filter "platforms:*x86-librw_gl3_glfw*" + includedirs { path.join(_OPTIONS["glfwdir32"], "include") } + + filter "platforms:*amd64-librw_gl3_glfw*" + includedirs { path.join(_OPTIONS["glfwdir64"], "include") } + + filter "platforms:win*librw_gl3_glfw*" + defines { "GLEW_STATIC" } + + filter {} + + function setpaths (gamepath, exepath, scriptspath) + scriptspath = scriptspath or "" + if (gamepath) then + postbuildcommands { + '{COPY} "%{cfg.buildtarget.abspath}" "' .. gamepath .. scriptspath .. '%{cfg.buildtarget.name}"' + } + debugdir (gamepath) + if (exepath) then + -- Used VS variable $(TargetFileName) because it doesn't accept premake tokens. Does debugcommand even work outside VS?? + debugcommand (gamepath .. "$(TargetFileName)") + dir, file = exepath:match'(.*/)(.*)' + debugdir (gamepath .. (dir or "")) + end + end + --targetdir ("bin/%{prj.name}/" .. scriptspath) + end + +if(_OPTIONS["with-librw"]) then +project "librw" + kind "StaticLib" + targetname "rw" + targetdir "lib/%{cfg.platform}/%{cfg.buildcfg}" + files { path.join(Librw, "src/*.*") } + files { path.join(Librw, "src/*/*.*") } + + filter "platforms:bsd*" + includedirs { "/usr/local/include" } + libdirs { "/usr/local/lib" } + + filter "platforms:*RW33*" + flags { "ExcludeFromBuild" } + filter {} +end + +local function addSrcFiles( prefix ) + return prefix .. "/*cpp", prefix .. "/*.h", prefix .. "/*.c", prefix .. "/*.ico", prefix .. "/*.rc" +end + +project "re3" + kind "WindowedApp" + targetname "re3" + targetdir "bin/%{cfg.platform}/%{cfg.buildcfg}" + + files { addSrcFiles("src") } + files { addSrcFiles("src/animation") } files { addSrcFiles("src/audio") } - files { addSrcFiles("src/audio/eax") } - files { addSrcFiles("src/audio/oal") } - files { addSrcFiles("src/control") } - files { addSrcFiles("src/core") } - files { addSrcFiles("src/entities") } - files { addSrcFiles("src/math") } - files { addSrcFiles("src/modelinfo") } - files { addSrcFiles("src/objects") } - files { addSrcFiles("src/peds") } - files { addSrcFiles("src/render") } - files { addSrcFiles("src/rw") } - files { addSrcFiles("src/save") } - files { addSrcFiles("src/skel") } - files { addSrcFiles("src/skel/glfw") } - files { addSrcFiles("src/text") } - files { addSrcFiles("src/vehicles") } - files { addSrcFiles("src/weapons") } - files { addSrcFiles("src/extras") } - - includedirs { "src" } - includedirs { "src/animation" } + files { addSrcFiles("src/audio/eax") } + files { addSrcFiles("src/audio/oal") } + files { addSrcFiles("src/control") } + files { addSrcFiles("src/core") } + files { addSrcFiles("src/entities") } + files { addSrcFiles("src/math") } + files { addSrcFiles("src/modelinfo") } + files { addSrcFiles("src/objects") } + files { addSrcFiles("src/peds") } + files { addSrcFiles("src/render") } + files { addSrcFiles("src/rw") } + files { addSrcFiles("src/save") } + files { addSrcFiles("src/skel") } + files { addSrcFiles("src/skel/glfw") } + files { addSrcFiles("src/text") } + files { addSrcFiles("src/vehicles") } + files { addSrcFiles("src/weapons") } + files { addSrcFiles("src/extras") } + + includedirs { "src" } + includedirs { "src/animation" } includedirs { "src/audio" } - includedirs { "src/audio/eax" } - includedirs { "src/audio/oal" } - includedirs { "src/control" } - includedirs { "src/core" } - includedirs { "src/entities" } - includedirs { "src/math" } - includedirs { "src/modelinfo" } - includedirs { "src/objects" } - includedirs { "src/peds" } - includedirs { "src/render" } - includedirs { "src/rw" } - includedirs { "src/save/" } - includedirs { "src/skel/" } - includedirs { "src/skel/glfw" } - includedirs { "src/text" } - includedirs { "src/vehicles" } - includedirs { "src/weapons" } - includedirs { "src/extras" } - - if _OPTIONS["with-opus"] then - includedirs { "ogg/include" } - includedirs { "opus/include" } - includedirs { "opusfile/include" } - end - - filter "platforms:*mss" - defines { "AUDIO_MSS" } - includedirs { "sdk/milessdk/include" } - libdirs { "sdk/milessdk/lib" } - - if _OPTIONS["with-opus"] then - filter "platforms:win*" - libdirs { "ogg/win32/VS2015/Win32/%{cfg.buildcfg}" } - libdirs { "opus/win32/VS2015/Win32/%{cfg.buildcfg}" } - libdirs { "opusfile/win32/VS2015/Win32/Release-NoHTTP" } - filter {} - defines { "AUDIO_OPUS" } - end - - filter "platforms:*oal" - defines { "AUDIO_OAL" } - - filter {} - if(os.getenv("GTA_III_RE_DIR")) then - setpaths("$(GTA_III_RE_DIR)/", "%(cfg.buildtarget.name)", "") - end - - filter "platforms:win*" - files { addSrcFiles("src/skel/win") } - includedirs { "src/skel/win" } - linkoptions "/SAFESEH:NO" - characterset ("MBCS") - targetextension ".exe" - - filter "platforms:win-x86*oal" - includedirs { "openal-soft/include" } - includedirs { "libsndfile.32/include" } - includedirs { "mpg123.32/include" } - libdirs { "mpg123.32/lib" } - libdirs { "libsndfile.32/lib" } - libdirs { "openal-soft/libs/Win32" } - - filter "platforms:win-amd64*oal" - includedirs { "openal-soft/include" } - includedirs { "libsndfile.64/include" } - includedirs { "mpg123.64/include" } - libdirs { "mpg123.64/lib" } - libdirs { "libsndfile.64/lib" } - libdirs { "openal-soft/libs/Win64" } - - filter "platforms:linux*oal" - links { "openal", "mpg123", "sndfile", "pthread" } - - if _OPTIONS["with-opus"] then - filter {} - links { "libogg" } - links { "opus" } - links { "opusfile" } - end - - filter "platforms:*RW33*" - staticruntime "on" - includedirs { "sdk/rwsdk/include/d3d8" } - libdirs { "sdk/rwsdk/lib/d3d8/release" } - links { "rwcore", "rpworld", "rpmatfx", "rpskin", "rphanim", "rtbmp", "rtquat", "rtcharse" } - defines { "RWLIBS" } - linkoptions "/SECTION:_rwcseg,ER!W /MERGE:_rwcseg=.text" - - filter "platforms:*librw*" - defines { "LIBRW" } - files { addSrcFiles("src/fakerw") } - includedirs { "src/fakerw" } - includedirs { Librw } - if(_OPTIONS["with-librw"]) then - libdirs { "lib/%{cfg.platform}/%{cfg.buildcfg}" } - end - links { "rw" } - - filter "platforms:*d3d9*" - links { "d3d9" } - - filter "platforms:*x86*d3d*" - includedirs { "sdk/dx8sdk/include" } - libdirs { "sdk/dx8sdk/lib" } - - filter "platforms:*amd64*d3d9*" - defines { "USE_D3D9" } - - filter "platforms:win-x86*gl3_glfw*" - libdirs { path.join(_OPTIONS["glewdir"], "lib/Release/Win32") } - libdirs { path.join(_OPTIONS["glfwdir32"], "lib-" .. string.gsub(_ACTION or '', "vs", "vc")) } - links { "opengl32", "glew32s", "glfw3" } - - filter "platforms:win-amd64*gl3_glfw*" - libdirs { path.join(_OPTIONS["glewdir"], "lib/Release/x64") } - libdirs { path.join(_OPTIONS["glfwdir64"], "lib-" .. string.gsub(_ACTION or '', "vs", "vc")) } - links { "opengl32", "glew32s", "glfw3" } - - filter "platforms:linux*gl3_glfw*" - links { "GL", "GLEW", "glfw" } + includedirs { "src/audio/eax" } + includedirs { "src/audio/oal" } + includedirs { "src/control" } + includedirs { "src/core" } + includedirs { "src/entities" } + includedirs { "src/math" } + includedirs { "src/modelinfo" } + includedirs { "src/objects" } + includedirs { "src/peds" } + includedirs { "src/render" } + includedirs { "src/rw" } + includedirs { "src/save/" } + includedirs { "src/skel/" } + includedirs { "src/skel/glfw" } + includedirs { "src/text" } + includedirs { "src/vehicles" } + includedirs { "src/weapons" } + includedirs { "src/extras" } + + if _OPTIONS["with-opus"] then + includedirs { "ogg/include" } + includedirs { "opus/include" } + includedirs { "opusfile/include" } + end + + filter "platforms:*mss" + defines { "AUDIO_MSS" } + includedirs { "sdk/milessdk/include" } + libdirs { "sdk/milessdk/lib" } + + if _OPTIONS["with-opus"] then + filter "platforms:win*" + libdirs { "ogg/win32/VS2015/Win32/%{cfg.buildcfg}" } + libdirs { "opus/win32/VS2015/Win32/%{cfg.buildcfg}" } + libdirs { "opusfile/win32/VS2015/Win32/Release-NoHTTP" } + filter {} + defines { "AUDIO_OPUS" } + end + + filter "platforms:*oal" + defines { "AUDIO_OAL" } + + filter {} + if(os.getenv("GTA_III_RE_DIR")) then + setpaths("$(GTA_III_RE_DIR)/", "%(cfg.buildtarget.name)", "") + end + + filter "platforms:win*" + files { addSrcFiles("src/skel/win") } + includedirs { "src/skel/win" } + linkoptions "/SAFESEH:NO" + characterset ("MBCS") + targetextension ".exe" + + filter "platforms:win-x86*oal" + includedirs { "openal-soft/include" } + includedirs { "libsndfile.32/include" } + includedirs { "mpg123.32/include" } + libdirs { "mpg123.32/lib" } + libdirs { "libsndfile.32/lib" } + libdirs { "openal-soft/libs/Win32" } + + filter "platforms:win-amd64*oal" + includedirs { "openal-soft/include" } + includedirs { "libsndfile.64/include" } + includedirs { "mpg123.64/include" } + libdirs { "mpg123.64/lib" } + libdirs { "libsndfile.64/lib" } + libdirs { "openal-soft/libs/Win64" } + + filter "platforms:linux*oal" + links { "openal", "mpg123", "sndfile", "pthread" } + + filter "platforms:linux*oal" + links { "openal", "mpg123", "sndfile", "pthread" } + + if _OPTIONS["with-opus"] then + filter {} + links { "libogg" } + links { "opus" } + links { "opusfile" } + end + + filter "platforms:*RW33*" + staticruntime "on" + includedirs { "sdk/rwsdk/include/d3d8" } + libdirs { "sdk/rwsdk/lib/d3d8/release" } + links { "rwcore", "rpworld", "rpmatfx", "rpskin", "rphanim", "rtbmp", "rtquat", "rtcharse" } + defines { "RWLIBS" } + linkoptions "/SECTION:_rwcseg,ER!W /MERGE:_rwcseg=.text" + + filter "platforms:*librw*" + defines { "LIBRW" } + files { addSrcFiles("src/fakerw") } + includedirs { "src/fakerw" } + includedirs { Librw } + if(_OPTIONS["with-librw"]) then + libdirs { "lib/%{cfg.platform}/%{cfg.buildcfg}" } + end + links { "rw" } + + filter "platforms:*d3d9*" + links { "d3d9" } + + filter "platforms:*x86*d3d*" + includedirs { "sdk/dx8sdk/include" } + libdirs { "sdk/dx8sdk/lib" } + + filter "platforms:*amd64*d3d9*" + defines { "USE_D3D9" } + + filter "platforms:win-x86*gl3_glfw*" + libdirs { path.join(_OPTIONS["glewdir"], "lib/Release/Win32") } + libdirs { path.join(_OPTIONS["glfwdir32"], "lib-" .. string.gsub(_ACTION or '', "vs", "vc")) } + links { "opengl32", "glew32s", "glfw3" } + + filter "platforms:win-amd64*gl3_glfw*" + libdirs { path.join(_OPTIONS["glewdir"], "lib/Release/x64") } + libdirs { path.join(_OPTIONS["glfwdir64"], "lib-" .. string.gsub(_ACTION or '', "vs", "vc")) } + links { "opengl32", "glew32s", "glfw3" } + + filter "platforms:linux*gl3_glfw*" + links { "GL", "GLEW", "glfw" } + + filter "platforms:bsd*gl3_glfw*" + links { "GL", "GLEW", "glfw", "sysinfo" } + includedirs { "/usr/local/include" } + libdirs { "/usr/local/lib" } From 7a7b3527932d4ef5ff7d1676f8af022ae28cbdf5 Mon Sep 17 00:00:00 2001 From: blingu <36486731+blingu@users.noreply.github.com> Date: Wed, 5 Aug 2020 14:32:37 +0200 Subject: [PATCH 003/112] added FreeBSD support --- src/core/CdStreamPosix.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/core/CdStreamPosix.cpp b/src/core/CdStreamPosix.cpp index 45fd9832..ff36c18f 100644 --- a/src/core/CdStreamPosix.cpp +++ b/src/core/CdStreamPosix.cpp @@ -150,9 +150,11 @@ CdStreamInit(int32 numChannels) ASSERT(0); return; } - +#ifdef __linux__ _gdwCdStreamFlags = O_RDONLY | O_NOATIME; - +#elif __FreeBSD__ + _gdwCdStreamFlags = O_RDONLY; +#endif // People say it's slower /* if ( fsInfo.f_bsize <= CDSTREAM_SECTOR_SIZE ) @@ -400,9 +402,12 @@ void *CdStreamThread(void *param) if (gCdStreamThreadStatus == 0){ gCdStreamThreadStatus = 1; #endif + +#ifdef __linux__ pid_t tid = syscall(SYS_gettid); int ret = setpriority(PRIO_PROCESS, tid, getpriority(PRIO_PROCESS, getpid()) + 1); - } +#endif + } // spurious wakeup or we sent interrupt signal for flushing if(pChannel->nSectorsToRead == 0) From c4f9bfdc441fb0a0d6bfde208cd1f8192bacc880 Mon Sep 17 00:00:00 2001 From: blingu <36486731+blingu@users.noreply.github.com> Date: Wed, 5 Aug 2020 14:33:50 +0200 Subject: [PATCH 004/112] added FreeBSD support --- src/skel/glfw/glfw.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/skel/glfw/glfw.cpp b/src/skel/glfw/glfw.cpp index a1170c61..643a9e64 100644 --- a/src/skel/glfw/glfw.cpp +++ b/src/skel/glfw/glfw.cpp @@ -209,7 +209,11 @@ double psTimer(void) { struct timespec start; +#ifdef __linux__ clock_gettime(CLOCK_MONOTONIC_RAW, &start); +#elif __FreeBSD__ + clock_gettime(CLOCK_MONOTONIC, &start); +#endif return start.tv_sec * 1000.0 + start.tv_nsec/1000000.0; } #endif From 56ea53a5db82887163eb76388ad936f71788490e Mon Sep 17 00:00:00 2001 From: blingu <36486731+blingu@users.noreply.github.com> Date: Wed, 5 Aug 2020 14:35:24 +0200 Subject: [PATCH 005/112] clang throws an error if fixed comparisons are against NULL --- src/audio/sampman_oal.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/audio/sampman_oal.cpp b/src/audio/sampman_oal.cpp index 0e173152..5e4b5aba 100644 --- a/src/audio/sampman_oal.cpp +++ b/src/audio/sampman_oal.cpp @@ -587,16 +587,16 @@ cSampleManager::Initialise(void) } nSampleBankMemoryStartAddress[SAMPLEBANK_MAIN] = (uintptr)malloc(nSampleBankSize[SAMPLEBANK_MAIN]); - ASSERT(nSampleBankMemoryStartAddress[SAMPLEBANK_MAIN] != NULL); + ASSERT(nSampleBankMemoryStartAddress[SAMPLEBANK_MAIN] != 0); - if ( nSampleBankMemoryStartAddress[SAMPLEBANK_MAIN] == NULL ) + if ( nSampleBankMemoryStartAddress[SAMPLEBANK_MAIN] == 0 ) { Terminate(); return false; } nSampleBankMemoryStartAddress[SAMPLEBANK_PED] = (uintptr)malloc(PED_BLOCKSIZE*MAX_PEDSFX); - ASSERT(nSampleBankMemoryStartAddress[SAMPLEBANK_PED] != NULL); + ASSERT(nSampleBankMemoryStartAddress[SAMPLEBANK_PED] != 0); } From 47b7d4a53ab2dd824ce71e12aaf07d4cc595f091 Mon Sep 17 00:00:00 2001 From: blingu <36486731+blingu@users.noreply.github.com> Date: Wed, 5 Aug 2020 14:40:56 +0200 Subject: [PATCH 006/112] Update premake5.lua --- premake5.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/premake5.lua b/premake5.lua index dc64956d..8f5e9ad9 100644 --- a/premake5.lua +++ b/premake5.lua @@ -271,7 +271,7 @@ project "re3" filter "platforms:linux*oal" links { "openal", "mpg123", "sndfile", "pthread" } - filter "platforms:linux*oal" + filter "platforms:bsd*oal" links { "openal", "mpg123", "sndfile", "pthread" } if _OPTIONS["with-opus"] then From 21e1e7a474a3be5f08faff1b84e62a064065efd9 Mon Sep 17 00:00:00 2001 From: blingu <36486731+blingu@users.noreply.github.com> Date: Wed, 5 Aug 2020 23:29:53 +0200 Subject: [PATCH 007/112] Update premake5.lua From 658f94f15591b6cb4c73f51ec5e2f7e3e99462e7 Mon Sep 17 00:00:00 2001 From: aap Date: Fri, 7 Aug 2020 13:13:04 +0200 Subject: [PATCH 008/112] little emergecy fix for shadows with librw --- src/peds/Ped.cpp | 8 +++----- src/render/Shadows.cpp | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp index 4e1c3c6d..be39f26e 100644 --- a/src/peds/Ped.cpp +++ b/src/peds/Ped.cpp @@ -2788,14 +2788,12 @@ CPed::SetModelIndex(uint32 mi) // This is a mistake by R*, velocity is CVector, whereas m_vecAnimMoveDelta is CVector2D. (*RPANIMBLENDCLUMPDATA(m_rwObject))->velocity = (CVector*) &m_vecAnimMoveDelta; -#ifdef PED_SKIN if(modelInfo->GetHitColModel() == nil) modelInfo->CreateHitColModelSkinned(GetClump()); - if (IsClumpSkinned(GetClump())) // condition isn't there in VC - UpdateRpHAnim(); -#endif -#if 1 + UpdateRpHAnim(); + +#ifndef LIBRW if (!m_pRTShadow) { m_pRTShadow = new CCutsceneShadow; diff --git a/src/render/Shadows.cpp b/src/render/Shadows.cpp index 9b864d27..0ee63b9a 100644 --- a/src/render/Shadows.cpp +++ b/src/render/Shadows.cpp @@ -853,7 +853,7 @@ CShadows::StoreShadowForPed(CPed *pPed, float fDisplacementX, float fDisplacemen { if ( CTimeCycle::GetShadowStrength() != 0 ) { - #if 1 + #ifndef LIBRW CCutsceneShadow *pShadow = pPed->m_pRTShadow; if (pShadow) From 9eaa7a0707f84fd3ac5346e9d051dd2add408b48 Mon Sep 17 00:00:00 2001 From: Filip Gawin Date: Fri, 7 Aug 2020 17:14:11 +0200 Subject: [PATCH 009/112] Create basic config for github actions (windows) --- .github/workflows/msvc_amd64.yml | 67 +++++++++++++++++++++++++++++++ .github/workflows/msvc_x86.yml | 68 ++++++++++++++++++++++++++++++++ 2 files changed, 135 insertions(+) create mode 100644 .github/workflows/msvc_amd64.yml create mode 100644 .github/workflows/msvc_x86.yml diff --git a/.github/workflows/msvc_amd64.yml b/.github/workflows/msvc_amd64.yml new file mode 100644 index 00000000..9f8a2803 --- /dev/null +++ b/.github/workflows/msvc_amd64.yml @@ -0,0 +1,67 @@ +name: msvc_amd64 + +on: + pull_request: + push: + release: + types: published +env: + GLEW_VER: "2.1.0" + GLFW_VER: "3.3.2" + GLEW_BASE: "glew-2.1.0" + GLFW_BASE: "glfw-3.3.2.bin.WIN64" + GLEW_FILE: "glew-2.1.0-win32.zip" + GLFW_FILE: "glfw-3.3.2.bin.WIN64.zip" + GLEW_URL: "https://github.com/nigels-com/glew/releases/download/glew-2.1.0/glew-2.1.0-win32.zip" + GLFW_URL: "https://github.com/glfw/glfw/releases/download/3.3.2/glfw-3.3.2.bin.WIN64.zip" +jobs: + build: + runs-on: windows-2019 + strategy: + matrix: + platform: [win-amd64-librw_d3d9-oal, win-amd64-librw_gl3_glfw-oal] + buildtype: [Debug, Release] + steps: + - name: Add msbuild to PATH + uses: microsoft/setup-msbuild@v1.0.1 + - uses: actions/checkout@v2 + with: + submodules: 'true' + - if: ${{ matrix.platform }} == "win-amd64-librw_gl3_glfw-mss" + name: Download glew + uses: carlosperate/download-file-action@v1.0.3 + with: + file-url: ${{env.GLEW_URL}} + - if: ${{ matrix.platform }} == "win-amd64-librw_gl3_glfw-mss" + name: Download glfw + uses: carlosperate/download-file-action@v1.0.3 + with: + file-url: ${{env.GLFW_URL}} + - if: ${{ matrix.platform }} == "win-amd64-librw_gl3_glfw-mss" + name: Unpack archives + run: | + 7z x ${{env.GLEW_FILE}} + 7z x ${{env.GLFW_FILE}} + - name: Configure build + run: | + ./premake5 vs2019 --with-librw --glewdir=${{env.GLEW_BASE}} --glfwdir64=${{env.GLFW_BASE}} + - name: Build + run: | + msbuild -m build/re3.sln /property:Configuration=${{matrix.buildtype}} /property:Platform=${{matrix.platform}} + - name: Pack artifacts + run: | + 7z a re3_${{matrix.buildtype}}_${{matrix.platform}}.zip ./bin/${{matrix.platform}}/${{matrix.buildtype}}/* + - name: Upload artifact to actions + uses: actions/upload-artifact@v2 + with: + name: re3_${{matrix.buildtype}}_${{matrix.platform}} + path: ./bin/${{matrix.platform}}/${{matrix.buildtype}} +# - name: Upload artifact to Bintray +# uses: hpcsc/upload-bintray-docker-action@v1 +# with: +# repository: re3 +# package: ${{matrix.buildtype}}_${{matrix.platform}} +# version: 1.0-$(echo ${GITHUB_SHA} +# sourcePath: ./bin/${{matrix.platform}}/${{matrix.buildtype}} +# username: gtamodding +# apiKey: ${{secrets.BINTRAY_API_KEY}} diff --git a/.github/workflows/msvc_x86.yml b/.github/workflows/msvc_x86.yml new file mode 100644 index 00000000..cecf7103 --- /dev/null +++ b/.github/workflows/msvc_x86.yml @@ -0,0 +1,68 @@ +name: msvc_x86 + +on: + pull_request: + push: + release: + types: published +env: + GLEW_VER: "2.1.0" + GLFW_VER: "3.3.2" + GLEW_BASE: "glew-2.1.0" + GLFW_BASE: "glfw-3.3.2.bin.WIN32" + GLEW_FILE: "glew-2.1.0-win32.zip" + GLFW_FILE: "glfw-3.3.2.bin.WIN32.zip" + GLEW_URL: "https://github.com/nigels-com/glew/releases/download/glew-2.1.0/glew-2.1.0-win32.zip" + GLFW_URL: "https://github.com/glfw/glfw/releases/download/3.3.2/glfw-3.3.2.bin.WIN32.zip" +jobs: + build: + runs-on: windows-2019 + strategy: + matrix: + platform: [win-x86-librw_d3d9-mss, win-x86-librw_gl3_glfw-mss, win-x86-librw_d3d9-oal, win-x86-librw_gl3_glfw-oal] + buildtype: [Debug, Release] + steps: + - name: Add msbuild to PATH + uses: microsoft/setup-msbuild@v1.0.1 + - uses: actions/checkout@v2 + with: + submodules: 'true' + - if: ${{ matrix.platform }} == "win-x86-librw_gl3_glfw-mss" + name: Download glew + uses: carlosperate/download-file-action@v1.0.3 + with: + file-url: ${{env.GLEW_URL}} + - if: ${{ matrix.platform }} == "win-x86-librw_gl3_glfw-mss" + name: Download glfw + uses: carlosperate/download-file-action@v1.0.3 + with: + file-url: ${{env.GLFW_URL}} + - if: ${{ matrix.platform }} == "win-x86-librw_gl3_glfw-mss" + name: Unpack archives + run: | + 7z x ${{env.GLEW_FILE}} + 7z x ${{env.GLFW_FILE}} + - name: Configure build + run: | + ./premake5 vs2019 --with-librw --glewdir=${{env.GLEW_BASE}} --glfwdir32=${{env.GLFW_BASE}} + - name: Build + run: | + msbuild -m build/re3.sln /property:Configuration=${{matrix.buildtype}} /property:Platform=${{matrix.platform}} + - name: Pack artifacts + run: | + 7z a re3_${{matrix.buildtype}}_${{matrix.platform}}.zip ./bin/${{matrix.platform}}/${{matrix.buildtype}}/* + - name: Upload artifact to actions + uses: actions/upload-artifact@v2 + with: + name: re3_${{matrix.buildtype}}_${{matrix.platform}} + path: re3_${{matrix.buildtype}}_${{matrix.platform}}.zip +# - name: Upload artifact to Bintray +# uses: hpcsc/upload-bintray-docker-action@v1 +# with: +# repository: re3 +# package: ${{matrix.buildtype}}_${{matrix.platform}} +# version: 1.0-$(echo ${GITHUB_SHA} +# sourcePath: ./bin/${{matrix.platform}}/${{matrix.buildtype}} +# username: gtamodding +# apiKey: ${{secrets.BINTRAY_API_KEY}} + From 16ab30576acefc21f15fe5e7a621ec2efc67b47a Mon Sep 17 00:00:00 2001 From: Filip Gawin Date: Fri, 7 Aug 2020 17:34:29 +0200 Subject: [PATCH 010/112] Rename files to avoid conflict with revc --- .github/workflows/{msvc_amd64.yml => re3_msvc_amd64.yml} | 2 +- .github/workflows/{msvc_x86.yml => re3_msvc_x86.yml} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename .github/workflows/{msvc_amd64.yml => re3_msvc_amd64.yml} (99%) rename .github/workflows/{msvc_x86.yml => re3_msvc_x86.yml} (99%) diff --git a/.github/workflows/msvc_amd64.yml b/.github/workflows/re3_msvc_amd64.yml similarity index 99% rename from .github/workflows/msvc_amd64.yml rename to .github/workflows/re3_msvc_amd64.yml index 9f8a2803..07b793ba 100644 --- a/.github/workflows/msvc_amd64.yml +++ b/.github/workflows/re3_msvc_amd64.yml @@ -1,4 +1,4 @@ -name: msvc_amd64 +name: re3_msvc_amd64 on: pull_request: diff --git a/.github/workflows/msvc_x86.yml b/.github/workflows/re3_msvc_x86.yml similarity index 99% rename from .github/workflows/msvc_x86.yml rename to .github/workflows/re3_msvc_x86.yml index cecf7103..34e892cf 100644 --- a/.github/workflows/msvc_x86.yml +++ b/.github/workflows/re3_msvc_x86.yml @@ -1,4 +1,4 @@ -name: msvc_x86 +name: re3_msvc_x86 on: pull_request: From 4b6cc0188bcbfa0469d2d1d7ed674945e243b5cb Mon Sep 17 00:00:00 2001 From: blingu <36486731+blingu@users.noreply.github.com> Date: Fri, 7 Aug 2020 17:51:15 +0200 Subject: [PATCH 011/112] Update CdStreamPosix.cpp --- src/core/CdStreamPosix.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/CdStreamPosix.cpp b/src/core/CdStreamPosix.cpp index ff36c18f..e114a29a 100644 --- a/src/core/CdStreamPosix.cpp +++ b/src/core/CdStreamPosix.cpp @@ -152,7 +152,7 @@ CdStreamInit(int32 numChannels) } #ifdef __linux__ _gdwCdStreamFlags = O_RDONLY | O_NOATIME; -#elif __FreeBSD__ +#else _gdwCdStreamFlags = O_RDONLY; #endif // People say it's slower From 8392b9ad2fc578fd42dc9b5fa27a5da175bf92f5 Mon Sep 17 00:00:00 2001 From: blingu <36486731+blingu@users.noreply.github.com> Date: Fri, 7 Aug 2020 17:51:43 +0200 Subject: [PATCH 012/112] Update glfw.cpp --- src/skel/glfw/glfw.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/skel/glfw/glfw.cpp b/src/skel/glfw/glfw.cpp index 643a9e64..ed442348 100644 --- a/src/skel/glfw/glfw.cpp +++ b/src/skel/glfw/glfw.cpp @@ -211,7 +211,7 @@ psTimer(void) struct timespec start; #ifdef __linux__ clock_gettime(CLOCK_MONOTONIC_RAW, &start); -#elif __FreeBSD__ +#else clock_gettime(CLOCK_MONOTONIC, &start); #endif return start.tv_sec * 1000.0 + start.tv_nsec/1000000.0; From ce0633a0c2370ad0e075ca5ae0a65bc7061cc65d Mon Sep 17 00:00:00 2001 From: withmorten Date: Fri, 7 Aug 2020 18:21:05 +0200 Subject: [PATCH 013/112] remove CoUninitialize calls for FIX_BUGS (fixes PIX crash) and don't check return value for CoInitialize --- src/skel/win/win.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/skel/win/win.cpp b/src/skel/win/win.cpp index 5c5c7ece..6d44ce80 100644 --- a/src/skel/win/win.cpp +++ b/src/skel/win/win.cpp @@ -1851,7 +1851,11 @@ void PlayMovieInWindow(int cmdShow, const char* szFile) MultiByteToWideChar(CP_ACP, 0, szFile, -1, wFileName, sizeof(wFileName) - 1); // Initialize COM +#ifdef FIX_BUGS // will also return S_FALSE if it has already been inited in the same thread + CoInitialize(nil); +#else JIF(CoInitialize(nil)); +#endif // Get the interface for DirectShow's GraphBuilder JIF(CoCreateInstance(CLSID_FilterGraph, nil, CLSCTX_INPROC, @@ -2225,7 +2229,9 @@ WinMain(HINSTANCE instance, { CloseClip(); - CoUninitialize(); +#ifndef FIX_BUGS + CoUninitialize(); // CoUninitialize should only be called at the shutdown of a program, and by then it doesn't matter +#endif if ( CMenuManager::OS_Language == LANG_FRENCH || CMenuManager::OS_Language == LANG_GERMAN ) PlayMovieInWindow(cmdShow, "movies\\GTAtitlesGER.mpg"); @@ -2260,7 +2266,9 @@ WinMain(HINSTANCE instance, case GS_INIT_ONCE: { CloseClip(); - CoUninitialize(); +#ifndef FIX_BUGS + CoUninitialize(); // CoUninitialize should only be called at the shutdown of a program, and by then it doesn't matter +#endif #ifdef FIX_BUGS // draw one frame because otherwise we'll end up looking at black screen for a while if vsync is on From b5cd52b9b304e9a1f3c30d4d4146ceb92535f534 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Fri, 7 Aug 2020 19:58:21 +0300 Subject: [PATCH 014/112] rename for reVC --- .github/workflows/{re3_msvc_amd64.yml => reVC_msvc_amd64.yml} | 0 .github/workflows/{re3_msvc_x86.yml => reVC_msvc_x86.yml} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{re3_msvc_amd64.yml => reVC_msvc_amd64.yml} (100%) rename .github/workflows/{re3_msvc_x86.yml => reVC_msvc_x86.yml} (100%) diff --git a/.github/workflows/re3_msvc_amd64.yml b/.github/workflows/reVC_msvc_amd64.yml similarity index 100% rename from .github/workflows/re3_msvc_amd64.yml rename to .github/workflows/reVC_msvc_amd64.yml diff --git a/.github/workflows/re3_msvc_x86.yml b/.github/workflows/reVC_msvc_x86.yml similarity index 100% rename from .github/workflows/re3_msvc_x86.yml rename to .github/workflows/reVC_msvc_x86.yml From 2d9b89827123a37db756b0b629201efcf95c4d87 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Fri, 7 Aug 2020 19:59:32 +0300 Subject: [PATCH 015/112] more rename for reVC --- .github/workflows/reVC_msvc_amd64.yml | 2 +- .github/workflows/reVC_msvc_x86.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/reVC_msvc_amd64.yml b/.github/workflows/reVC_msvc_amd64.yml index 07b793ba..e699b512 100644 --- a/.github/workflows/reVC_msvc_amd64.yml +++ b/.github/workflows/reVC_msvc_amd64.yml @@ -1,4 +1,4 @@ -name: re3_msvc_amd64 +name: reVC_msvc_amd64 on: pull_request: diff --git a/.github/workflows/reVC_msvc_x86.yml b/.github/workflows/reVC_msvc_x86.yml index 34e892cf..93a86a05 100644 --- a/.github/workflows/reVC_msvc_x86.yml +++ b/.github/workflows/reVC_msvc_x86.yml @@ -1,4 +1,4 @@ -name: re3_msvc_x86 +name: reVC_msvc_x86 on: pull_request: From 0328cb04d73dc9ce07aef4c9d1f870f4ae3e0204 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Fri, 7 Aug 2020 20:07:57 +0300 Subject: [PATCH 016/112] build fix --- .github/workflows/reVC_msvc_amd64.yml | 8 ++++---- .github/workflows/reVC_msvc_x86.yml | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/reVC_msvc_amd64.yml b/.github/workflows/reVC_msvc_amd64.yml index e699b512..23e7644f 100644 --- a/.github/workflows/reVC_msvc_amd64.yml +++ b/.github/workflows/reVC_msvc_amd64.yml @@ -47,19 +47,19 @@ jobs: ./premake5 vs2019 --with-librw --glewdir=${{env.GLEW_BASE}} --glfwdir64=${{env.GLFW_BASE}} - name: Build run: | - msbuild -m build/re3.sln /property:Configuration=${{matrix.buildtype}} /property:Platform=${{matrix.platform}} + msbuild -m build/reVC.sln /property:Configuration=${{matrix.buildtype}} /property:Platform=${{matrix.platform}} - name: Pack artifacts run: | - 7z a re3_${{matrix.buildtype}}_${{matrix.platform}}.zip ./bin/${{matrix.platform}}/${{matrix.buildtype}}/* + 7z a reVC_${{matrix.buildtype}}_${{matrix.platform}}.zip ./bin/${{matrix.platform}}/${{matrix.buildtype}}/* - name: Upload artifact to actions uses: actions/upload-artifact@v2 with: - name: re3_${{matrix.buildtype}}_${{matrix.platform}} + name: reVC_${{matrix.buildtype}}_${{matrix.platform}} path: ./bin/${{matrix.platform}}/${{matrix.buildtype}} # - name: Upload artifact to Bintray # uses: hpcsc/upload-bintray-docker-action@v1 # with: -# repository: re3 +# repository: reVC # package: ${{matrix.buildtype}}_${{matrix.platform}} # version: 1.0-$(echo ${GITHUB_SHA} # sourcePath: ./bin/${{matrix.platform}}/${{matrix.buildtype}} diff --git a/.github/workflows/reVC_msvc_x86.yml b/.github/workflows/reVC_msvc_x86.yml index 93a86a05..9b1c939c 100644 --- a/.github/workflows/reVC_msvc_x86.yml +++ b/.github/workflows/reVC_msvc_x86.yml @@ -47,19 +47,19 @@ jobs: ./premake5 vs2019 --with-librw --glewdir=${{env.GLEW_BASE}} --glfwdir32=${{env.GLFW_BASE}} - name: Build run: | - msbuild -m build/re3.sln /property:Configuration=${{matrix.buildtype}} /property:Platform=${{matrix.platform}} + msbuild -m build/reVC.sln /property:Configuration=${{matrix.buildtype}} /property:Platform=${{matrix.platform}} - name: Pack artifacts run: | - 7z a re3_${{matrix.buildtype}}_${{matrix.platform}}.zip ./bin/${{matrix.platform}}/${{matrix.buildtype}}/* + 7z a reVC_${{matrix.buildtype}}_${{matrix.platform}}.zip ./bin/${{matrix.platform}}/${{matrix.buildtype}}/* - name: Upload artifact to actions uses: actions/upload-artifact@v2 with: - name: re3_${{matrix.buildtype}}_${{matrix.platform}} - path: re3_${{matrix.buildtype}}_${{matrix.platform}}.zip + name: reVC_${{matrix.buildtype}}_${{matrix.platform}} + path: reVC_${{matrix.buildtype}}_${{matrix.platform}}.zip # - name: Upload artifact to Bintray # uses: hpcsc/upload-bintray-docker-action@v1 # with: -# repository: re3 +# repository: reVC # package: ${{matrix.buildtype}}_${{matrix.platform}} # version: 1.0-$(echo ${GITHUB_SHA} # sourcePath: ./bin/${{matrix.platform}}/${{matrix.buildtype}} From db406e3c8201f751166c919e8ed2ce6f2cf3de18 Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Sat, 8 Aug 2020 13:07:55 +0300 Subject: [PATCH 017/112] submodules --- librw | 2 +- ogg | 2 +- opus | 2 +- opusfile | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/librw b/librw index 99c15d5e..d92996c6 160000 --- a/librw +++ b/librw @@ -1 +1 @@ -Subproject commit 99c15d5ed78cc112e1055cc89452dd57df28da58 +Subproject commit d92996c66d7938092218b42fc9197bd181606958 diff --git a/ogg b/ogg index 1e8d7cce..0bbcba4e 160000 --- a/ogg +++ b/ogg @@ -1 +1 @@ -Subproject commit 1e8d7cce266df61afc9d35db0283bbacc0237aba +Subproject commit 0bbcba4e7cf32324170470569c4527ffd0002870 diff --git a/opus b/opus index 8aa77672..484af258 160000 --- a/opus +++ b/opus @@ -1 +1 @@ -Subproject commit 8aa7767207b1e3633004c26aecbb67d1c5118485 +Subproject commit 484af2580b82dffd695fcd0841fc34a9dc5f7293 diff --git a/opusfile b/opusfile index eb252537..6452e838 160000 --- a/opusfile +++ b/opusfile @@ -1 +1 @@ -Subproject commit eb252537f374e30f7b68b84223c5a2303c05eca2 +Subproject commit 6452e838e68e8f4fc0b3599523c760ac6276ce89 From 2c8e1de610aacbba7cacc72a107d61a3ccbc423a Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Sat, 8 Aug 2020 13:09:05 +0300 Subject: [PATCH 018/112] submodules --- librw | 2 +- opusfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/librw b/librw index 162c2d20..d92996c6 160000 --- a/librw +++ b/librw @@ -1 +1 @@ -Subproject commit 162c2d203577e7e8ca727e699da33f7d54d76257 +Subproject commit d92996c66d7938092218b42fc9197bd181606958 diff --git a/opusfile b/opusfile index a55c164e..6452e838 160000 --- a/opusfile +++ b/opusfile @@ -1 +1 @@ -Subproject commit a55c164e9891a9326188b7d4d216ec9a88373739 +Subproject commit 6452e838e68e8f4fc0b3599523c760ac6276ce89 From 2af22cfabc6656c3278ab4eeb473eb4af57fe5f2 Mon Sep 17 00:00:00 2001 From: blingu <36486731+blingu@users.noreply.github.com> Date: Sat, 8 Aug 2020 12:49:38 +0200 Subject: [PATCH 019/112] Update premake5.lua --- premake5.lua | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/premake5.lua b/premake5.lua index 8f5e9ad9..f05a016d 100644 --- a/premake5.lua +++ b/premake5.lua @@ -76,10 +76,6 @@ workspace "re3" "linux-amd64-librw_gl3_glfw-oal", "linux-arm-librw_gl3_glfw-oal", } - filter { "system:bsd" } - platforms { - "bsd-amd64-librw_gl3_glfw-oal" - } filter "configurations:Debug" defines { "DEBUG" } @@ -93,9 +89,6 @@ workspace "re3" filter { "platforms:linux*" } system "linux" - - filter { "platforms:bsd*" } - system "bsd" filter { "platforms:*x86*" } architecture "x86" @@ -154,11 +147,6 @@ project "librw" targetdir "lib/%{cfg.platform}/%{cfg.buildcfg}" files { path.join(Librw, "src/*.*") } files { path.join(Librw, "src/*/*.*") } - - filter "platforms:bsd*" - includedirs { "/usr/local/include" } - libdirs { "/usr/local/lib" } - filter "platforms:*RW33*" flags { "ExcludeFromBuild" } filter {} @@ -271,9 +259,6 @@ project "re3" filter "platforms:linux*oal" links { "openal", "mpg123", "sndfile", "pthread" } - filter "platforms:bsd*oal" - links { "openal", "mpg123", "sndfile", "pthread" } - if _OPTIONS["with-opus"] then filter {} links { "libogg" } @@ -321,8 +306,3 @@ project "re3" filter "platforms:linux*gl3_glfw*" links { "GL", "GLEW", "glfw" } - - filter "platforms:bsd*gl3_glfw*" - links { "GL", "GLEW", "glfw", "sysinfo" } - includedirs { "/usr/local/include" } - libdirs { "/usr/local/lib" } From c50160a992237d5031c730d1048c9cef4d9ac611 Mon Sep 17 00:00:00 2001 From: Blingu Date: Sat, 8 Aug 2020 13:07:55 +0200 Subject: [PATCH 020/112] fixed line formatting --- premake5.lua | 633 ++++++++++++++++++++++++++------------------------- 1 file changed, 327 insertions(+), 306 deletions(-) diff --git a/premake5.lua b/premake5.lua index f05a016d..a84d8ff4 100644 --- a/premake5.lua +++ b/premake5.lua @@ -1,308 +1,329 @@ -newoption { - trigger = "glewdir", - value = "PATH", - description = "Directory of GLEW", - default = "glew-2.1.0" -} - -newoption { - trigger = "glfwdir64", - value = "PATH", - description = "Directory of glfw", - default = "glfw-3.3.2.bin.WIN64", -} - -newoption { - trigger = "glfwdir32", - value = "PATH", - description = "Directory of glfw", - default = "glfw-3.3.2.bin.WIN32", -} - -newoption { - trigger = "with-librw", - description = "Build and use librw from this solution" -} - -newoption { - trigger = "with-opus", - description = "Build with opus" -} - -if(_OPTIONS["with-librw"]) then - Librw = "librw" -else - Librw = os.getenv("LIBRW") or "librw" -end - -function getsys(a) - if a == 'windows' then - return 'win' - end - return a -end - -function getarch(a) - if a == 'x86_64' then - return 'amd64' - elseif a == 'ARM' then - return 'arm' - end - return a -end - -workspace "re3" - language "C++" - configurations { "Debug", "Release" } - location "build" - symbols "Full" - staticruntime "off" - - filter { "system:windows" } - platforms { - "win-x86-RW33_d3d8-mss", - "win-x86-librw_d3d9-mss", - "win-x86-librw_gl3_glfw-mss", - "win-x86-RW33_d3d8-oal", - "win-x86-librw_d3d9-oal", - "win-x86-librw_gl3_glfw-oal", - "win-amd64-librw_d3d9-oal", - "win-amd64-librw_gl3_glfw-oal", - } - - filter { "system:linux" } - platforms { - "linux-x86-librw_gl3_glfw-oal", - "linux-amd64-librw_gl3_glfw-oal", - "linux-arm-librw_gl3_glfw-oal", - } - - filter "configurations:Debug" - defines { "DEBUG" } - - filter "configurations:Release" - defines { "NDEBUG" } - optimize "On" - - filter { "platforms:win*" } - system "windows" - - filter { "platforms:linux*" } - system "linux" - - filter { "platforms:*x86*" } - architecture "x86" - - filter { "platforms:*amd64*" } - architecture "amd64" - - filter { "platforms:*arm*" } - architecture "ARM" - - filter { "platforms:*librw_d3d9*" } - defines { "RW_D3D9" } - if(not _OPTIONS["with-librw"]) then - libdirs { path.join(Librw, "lib/win-%{getarch(cfg.architecture)}-d3d9/%{cfg.buildcfg}") } - end - - filter "platforms:*librw_gl3_glfw*" - defines { "RW_GL3" } - includedirs { path.join(_OPTIONS["glewdir"], "include") } - if(not _OPTIONS["with-librw"]) then - libdirs { path.join(Librw, "lib/%{getsys(cfg.system)}-%{getarch(cfg.architecture)}-gl3/%{cfg.buildcfg}") } - end - - filter "platforms:*x86-librw_gl3_glfw*" - includedirs { path.join(_OPTIONS["glfwdir32"], "include") } - - filter "platforms:*amd64-librw_gl3_glfw*" - includedirs { path.join(_OPTIONS["glfwdir64"], "include") } - - filter "platforms:win*librw_gl3_glfw*" - defines { "GLEW_STATIC" } - - filter {} - - function setpaths (gamepath, exepath, scriptspath) - scriptspath = scriptspath or "" - if (gamepath) then - postbuildcommands { - '{COPY} "%{cfg.buildtarget.abspath}" "' .. gamepath .. scriptspath .. '%{cfg.buildtarget.name}"' - } - debugdir (gamepath) - if (exepath) then - -- Used VS variable $(TargetFileName) because it doesn't accept premake tokens. Does debugcommand even work outside VS?? - debugcommand (gamepath .. "$(TargetFileName)") - dir, file = exepath:match'(.*/)(.*)' - debugdir (gamepath .. (dir or "")) - end - end - --targetdir ("bin/%{prj.name}/" .. scriptspath) - end - -if(_OPTIONS["with-librw"]) then -project "librw" - kind "StaticLib" - targetname "rw" - targetdir "lib/%{cfg.platform}/%{cfg.buildcfg}" - files { path.join(Librw, "src/*.*") } - files { path.join(Librw, "src/*/*.*") } - filter "platforms:*RW33*" - flags { "ExcludeFromBuild" } - filter {} -end - -local function addSrcFiles( prefix ) - return prefix .. "/*cpp", prefix .. "/*.h", prefix .. "/*.c", prefix .. "/*.ico", prefix .. "/*.rc" -end - -project "re3" - kind "WindowedApp" - targetname "re3" - targetdir "bin/%{cfg.platform}/%{cfg.buildcfg}" - - files { addSrcFiles("src") } - files { addSrcFiles("src/animation") } +newoption { + trigger = "glewdir", + value = "PATH", + description = "Directory of GLEW", + default = "glew-2.1.0" +} + +newoption { + trigger = "glfwdir64", + value = "PATH", + description = "Directory of glfw", + default = "glfw-3.3.2.bin.WIN64", +} + +newoption { + trigger = "glfwdir32", + value = "PATH", + description = "Directory of glfw", + default = "glfw-3.3.2.bin.WIN32", +} + +newoption { + trigger = "with-librw", + description = "Build and use librw from this solution" +} + +newoption { + trigger = "with-opus", + description = "Build with opus" +} + +if(_OPTIONS["with-librw"]) then + Librw = "librw" +else + Librw = os.getenv("LIBRW") or "librw" +end + +function getsys(a) + if a == 'windows' then + return 'win' + end + return a +end + +function getarch(a) + if a == 'x86_64' then + return 'amd64' + elseif a == 'ARM' then + return 'arm' + end + return a +end + +workspace "re3" + language "C++" + configurations { "Debug", "Release" } + location "build" + symbols "Full" + staticruntime "off" + + filter { "system:windows" } + platforms { + "win-x86-RW33_d3d8-mss", + "win-x86-librw_d3d9-mss", + "win-x86-librw_gl3_glfw-mss", + "win-x86-RW33_d3d8-oal", + "win-x86-librw_d3d9-oal", + "win-x86-librw_gl3_glfw-oal", + "win-amd64-librw_d3d9-oal", + "win-amd64-librw_gl3_glfw-oal", + } + + filter { "system:linux" } + platforms { + "linux-x86-librw_gl3_glfw-oal", + "linux-amd64-librw_gl3_glfw-oal", + "linux-arm-librw_gl3_glfw-oal", + } + + filter { "system:bsd" } + platforms { + "bsd-amd64-librw_gl3_glfw-oal" + } + + filter "configurations:Debug" + defines { "DEBUG" } + + filter "configurations:Release" + defines { "NDEBUG" } + optimize "On" + + filter { "platforms:win*" } + system "windows" + + filter { "platforms:linux*" } + system "linux" + + filter { "platforms:bsd*" } + system "bsd" + + filter { "platforms:*x86*" } + architecture "x86" + + filter { "platforms:*amd64*" } + architecture "amd64" + + filter { "platforms:*arm*" } + architecture "ARM" + + filter { "platforms:*librw_d3d9*" } + defines { "RW_D3D9" } + if(not _OPTIONS["with-librw"]) then + libdirs { path.join(Librw, "lib/win-%{getarch(cfg.architecture)}-d3d9/%{cfg.buildcfg}") } + end + + filter "platforms:*librw_gl3_glfw*" + defines { "RW_GL3" } + includedirs { path.join(_OPTIONS["glewdir"], "include") } + if(not _OPTIONS["with-librw"]) then + libdirs { path.join(Librw, "lib/%{getsys(cfg.system)}-%{getarch(cfg.architecture)}-gl3/%{cfg.buildcfg}") } + end + + filter "platforms:*x86-librw_gl3_glfw*" + includedirs { path.join(_OPTIONS["glfwdir32"], "include") } + + filter "platforms:*amd64-librw_gl3_glfw*" + includedirs { path.join(_OPTIONS["glfwdir64"], "include") } + + filter "platforms:win*librw_gl3_glfw*" + defines { "GLEW_STATIC" } + + filter {} + + function setpaths (gamepath, exepath, scriptspath) + scriptspath = scriptspath or "" + if (gamepath) then + postbuildcommands { + '{COPY} "%{cfg.buildtarget.abspath}" "' .. gamepath .. scriptspath .. '%{cfg.buildtarget.name}"' + } + debugdir (gamepath) + if (exepath) then + -- Used VS variable $(TargetFileName) because it doesn't accept premake tokens. Does debugcommand even work outside VS?? + debugcommand (gamepath .. "$(TargetFileName)") + dir, file = exepath:match'(.*/)(.*)' + debugdir (gamepath .. (dir or "")) + end + end + --targetdir ("bin/%{prj.name}/" .. scriptspath) + end + +if(_OPTIONS["with-librw"]) then +project "librw" + kind "StaticLib" + targetname "rw" + targetdir "lib/%{cfg.platform}/%{cfg.buildcfg}" + files { path.join(Librw, "src/*.*") } + files { path.join(Librw, "src/*/*.*") } + + filter "platforms:bsd*" + includedirs { "/usr/local/include" } + libdirs { "/usr/local/lib" } + + filter "platforms:*RW33*" + flags { "ExcludeFromBuild" } + filter {} +end + +local function addSrcFiles( prefix ) + return prefix .. "/*cpp", prefix .. "/*.h", prefix .. "/*.c", prefix .. "/*.ico", prefix .. "/*.rc" +end + +project "re3" + kind "WindowedApp" + targetname "re3" + targetdir "bin/%{cfg.platform}/%{cfg.buildcfg}" + + files { addSrcFiles("src") } + files { addSrcFiles("src/animation") } files { addSrcFiles("src/audio") } - files { addSrcFiles("src/audio/eax") } - files { addSrcFiles("src/audio/oal") } - files { addSrcFiles("src/control") } - files { addSrcFiles("src/core") } - files { addSrcFiles("src/entities") } - files { addSrcFiles("src/math") } - files { addSrcFiles("src/modelinfo") } - files { addSrcFiles("src/objects") } - files { addSrcFiles("src/peds") } - files { addSrcFiles("src/render") } - files { addSrcFiles("src/rw") } - files { addSrcFiles("src/save") } - files { addSrcFiles("src/skel") } - files { addSrcFiles("src/skel/glfw") } - files { addSrcFiles("src/text") } - files { addSrcFiles("src/vehicles") } - files { addSrcFiles("src/weapons") } - files { addSrcFiles("src/extras") } - - includedirs { "src" } - includedirs { "src/animation" } + files { addSrcFiles("src/audio/eax") } + files { addSrcFiles("src/audio/oal") } + files { addSrcFiles("src/control") } + files { addSrcFiles("src/core") } + files { addSrcFiles("src/entities") } + files { addSrcFiles("src/math") } + files { addSrcFiles("src/modelinfo") } + files { addSrcFiles("src/objects") } + files { addSrcFiles("src/peds") } + files { addSrcFiles("src/render") } + files { addSrcFiles("src/rw") } + files { addSrcFiles("src/save") } + files { addSrcFiles("src/skel") } + files { addSrcFiles("src/skel/glfw") } + files { addSrcFiles("src/text") } + files { addSrcFiles("src/vehicles") } + files { addSrcFiles("src/weapons") } + files { addSrcFiles("src/extras") } + + includedirs { "src" } + includedirs { "src/animation" } includedirs { "src/audio" } - includedirs { "src/audio/eax" } - includedirs { "src/audio/oal" } - includedirs { "src/control" } - includedirs { "src/core" } - includedirs { "src/entities" } - includedirs { "src/math" } - includedirs { "src/modelinfo" } - includedirs { "src/objects" } - includedirs { "src/peds" } - includedirs { "src/render" } - includedirs { "src/rw" } - includedirs { "src/save/" } - includedirs { "src/skel/" } - includedirs { "src/skel/glfw" } - includedirs { "src/text" } - includedirs { "src/vehicles" } - includedirs { "src/weapons" } - includedirs { "src/extras" } - - if _OPTIONS["with-opus"] then - includedirs { "ogg/include" } - includedirs { "opus/include" } - includedirs { "opusfile/include" } - end - - filter "platforms:*mss" - defines { "AUDIO_MSS" } - includedirs { "sdk/milessdk/include" } - libdirs { "sdk/milessdk/lib" } - - if _OPTIONS["with-opus"] then - filter "platforms:win*" - libdirs { "ogg/win32/VS2015/Win32/%{cfg.buildcfg}" } - libdirs { "opus/win32/VS2015/Win32/%{cfg.buildcfg}" } - libdirs { "opusfile/win32/VS2015/Win32/Release-NoHTTP" } - filter {} - defines { "AUDIO_OPUS" } - end - - filter "platforms:*oal" - defines { "AUDIO_OAL" } - - filter {} - if(os.getenv("GTA_III_RE_DIR")) then - setpaths("$(GTA_III_RE_DIR)/", "%(cfg.buildtarget.name)", "") - end - - filter "platforms:win*" - files { addSrcFiles("src/skel/win") } - includedirs { "src/skel/win" } - linkoptions "/SAFESEH:NO" - characterset ("MBCS") - targetextension ".exe" - - filter "platforms:win-x86*oal" - includedirs { "openal-soft/include" } - includedirs { "libsndfile.32/include" } - includedirs { "mpg123.32/include" } - libdirs { "mpg123.32/lib" } - libdirs { "libsndfile.32/lib" } - libdirs { "openal-soft/libs/Win32" } - - filter "platforms:win-amd64*oal" - includedirs { "openal-soft/include" } - includedirs { "libsndfile.64/include" } - includedirs { "mpg123.64/include" } - libdirs { "mpg123.64/lib" } - libdirs { "libsndfile.64/lib" } - libdirs { "openal-soft/libs/Win64" } - - filter "platforms:linux*oal" - links { "openal", "mpg123", "sndfile", "pthread" } - - if _OPTIONS["with-opus"] then - filter {} - links { "libogg" } - links { "opus" } - links { "opusfile" } - end - - filter "platforms:*RW33*" - staticruntime "on" - includedirs { "sdk/rwsdk/include/d3d8" } - libdirs { "sdk/rwsdk/lib/d3d8/release" } - links { "rwcore", "rpworld", "rpmatfx", "rpskin", "rphanim", "rtbmp", "rtquat", "rtcharse" } - defines { "RWLIBS" } - linkoptions "/SECTION:_rwcseg,ER!W /MERGE:_rwcseg=.text" - - filter "platforms:*librw*" - defines { "LIBRW" } - files { addSrcFiles("src/fakerw") } - includedirs { "src/fakerw" } - includedirs { Librw } - if(_OPTIONS["with-librw"]) then - libdirs { "lib/%{cfg.platform}/%{cfg.buildcfg}" } - end - links { "rw" } - - filter "platforms:*d3d9*" - links { "d3d9" } - - filter "platforms:*x86*d3d*" - includedirs { "sdk/dx8sdk/include" } - libdirs { "sdk/dx8sdk/lib" } - - filter "platforms:*amd64*d3d9*" - defines { "USE_D3D9" } - - filter "platforms:win-x86*gl3_glfw*" - libdirs { path.join(_OPTIONS["glewdir"], "lib/Release/Win32") } - libdirs { path.join(_OPTIONS["glfwdir32"], "lib-" .. string.gsub(_ACTION or '', "vs", "vc")) } - links { "opengl32", "glew32s", "glfw3" } - - filter "platforms:win-amd64*gl3_glfw*" - libdirs { path.join(_OPTIONS["glewdir"], "lib/Release/x64") } - libdirs { path.join(_OPTIONS["glfwdir64"], "lib-" .. string.gsub(_ACTION or '', "vs", "vc")) } - links { "opengl32", "glew32s", "glfw3" } - - filter "platforms:linux*gl3_glfw*" - links { "GL", "GLEW", "glfw" } + includedirs { "src/audio/eax" } + includedirs { "src/audio/oal" } + includedirs { "src/control" } + includedirs { "src/core" } + includedirs { "src/entities" } + includedirs { "src/math" } + includedirs { "src/modelinfo" } + includedirs { "src/objects" } + includedirs { "src/peds" } + includedirs { "src/render" } + includedirs { "src/rw" } + includedirs { "src/save/" } + includedirs { "src/skel/" } + includedirs { "src/skel/glfw" } + includedirs { "src/text" } + includedirs { "src/vehicles" } + includedirs { "src/weapons" } + includedirs { "src/extras" } + + if _OPTIONS["with-opus"] then + includedirs { "ogg/include" } + includedirs { "opus/include" } + includedirs { "opusfile/include" } + end + + filter "platforms:*mss" + defines { "AUDIO_MSS" } + includedirs { "sdk/milessdk/include" } + libdirs { "sdk/milessdk/lib" } + + if _OPTIONS["with-opus"] then + filter "platforms:win*" + libdirs { "ogg/win32/VS2015/Win32/%{cfg.buildcfg}" } + libdirs { "opus/win32/VS2015/Win32/%{cfg.buildcfg}" } + libdirs { "opusfile/win32/VS2015/Win32/Release-NoHTTP" } + filter {} + defines { "AUDIO_OPUS" } + end + + filter "platforms:*oal" + defines { "AUDIO_OAL" } + + filter {} + if(os.getenv("GTA_III_RE_DIR")) then + setpaths("$(GTA_III_RE_DIR)/", "%(cfg.buildtarget.name)", "") + end + + filter "platforms:win*" + files { addSrcFiles("src/skel/win") } + includedirs { "src/skel/win" } + linkoptions "/SAFESEH:NO" + characterset ("MBCS") + targetextension ".exe" + + filter "platforms:win-x86*oal" + includedirs { "openal-soft/include" } + includedirs { "libsndfile.32/include" } + includedirs { "mpg123.32/include" } + libdirs { "mpg123.32/lib" } + libdirs { "libsndfile.32/lib" } + libdirs { "openal-soft/libs/Win32" } + + filter "platforms:win-amd64*oal" + includedirs { "openal-soft/include" } + includedirs { "libsndfile.64/include" } + includedirs { "mpg123.64/include" } + libdirs { "mpg123.64/lib" } + libdirs { "libsndfile.64/lib" } + libdirs { "openal-soft/libs/Win64" } + + filter "platforms:linux*oal" + links { "openal", "mpg123", "sndfile", "pthread" } + + filter "platforms:bsd*oal" + links { "openal", "mpg123", "sndfile", "pthread" } + + if _OPTIONS["with-opus"] then + filter {} + links { "libogg" } + links { "opus" } + links { "opusfile" } + end + + filter "platforms:*RW33*" + staticruntime "on" + includedirs { "sdk/rwsdk/include/d3d8" } + libdirs { "sdk/rwsdk/lib/d3d8/release" } + links { "rwcore", "rpworld", "rpmatfx", "rpskin", "rphanim", "rtbmp", "rtquat", "rtcharse" } + defines { "RWLIBS" } + linkoptions "/SECTION:_rwcseg,ER!W /MERGE:_rwcseg=.text" + + filter "platforms:*librw*" + defines { "LIBRW" } + files { addSrcFiles("src/fakerw") } + includedirs { "src/fakerw" } + includedirs { Librw } + if(_OPTIONS["with-librw"]) then + libdirs { "lib/%{cfg.platform}/%{cfg.buildcfg}" } + end + links { "rw" } + + filter "platforms:*d3d9*" + links { "d3d9" } + + filter "platforms:*x86*d3d*" + includedirs { "sdk/dx8sdk/include" } + libdirs { "sdk/dx8sdk/lib" } + + filter "platforms:*amd64*d3d9*" + defines { "USE_D3D9" } + + filter "platforms:win-x86*gl3_glfw*" + libdirs { path.join(_OPTIONS["glewdir"], "lib/Release/Win32") } + libdirs { path.join(_OPTIONS["glfwdir32"], "lib-" .. string.gsub(_ACTION or '', "vs", "vc")) } + links { "opengl32", "glew32s", "glfw3" } + + filter "platforms:win-amd64*gl3_glfw*" + libdirs { path.join(_OPTIONS["glewdir"], "lib/Release/x64") } + libdirs { path.join(_OPTIONS["glfwdir64"], "lib-" .. string.gsub(_ACTION or '', "vs", "vc")) } + links { "opengl32", "glew32s", "glfw3" } + + filter "platforms:linux*gl3_glfw*" + links { "GL", "GLEW", "glfw" } + + filter "platforms:bsd*gl3_glfw*" + links { "GL", "GLEW", "glfw", "sysinfo" } + includedirs { "/usr/local/include" } + libdirs { "/usr/local/lib" } From 24a1644b2a1f4cd0b20385fd29acd7be9808e027 Mon Sep 17 00:00:00 2001 From: withmorten Date: Sat, 8 Aug 2020 17:12:23 +0200 Subject: [PATCH 021/112] don't CoUninitialize for NO_MOVIES --- src/skel/win/win.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/skel/win/win.cpp b/src/skel/win/win.cpp index 6d44ce80..cf4749b1 100644 --- a/src/skel/win/win.cpp +++ b/src/skel/win/win.cpp @@ -2227,10 +2227,9 @@ WinMain(HINSTANCE instance, case GS_INIT_INTRO_MPEG: { +#ifndef NO_MOVIES CloseClip(); - -#ifndef FIX_BUGS - CoUninitialize(); // CoUninitialize should only be called at the shutdown of a program, and by then it doesn't matter + CoUninitialize(); #endif if ( CMenuManager::OS_Language == LANG_FRENCH || CMenuManager::OS_Language == LANG_GERMAN ) @@ -2265,9 +2264,9 @@ WinMain(HINSTANCE instance, case GS_INIT_ONCE: { +#ifndef NO_MOVIES CloseClip(); -#ifndef FIX_BUGS - CoUninitialize(); // CoUninitialize should only be called at the shutdown of a program, and by then it doesn't matter + CoUninitialize(); #endif #ifdef FIX_BUGS From 1a7270190352d23bc7c8a9ea1952b1cf606ad37b Mon Sep 17 00:00:00 2001 From: Fire-Head Date: Sat, 8 Aug 2020 18:14:01 +0300 Subject: [PATCH 022/112] Revert "little emergecy fix for shadows with librw" This reverts commit 658f94f15591b6cb4c73f51ec5e2f7e3e99462e7. --- src/peds/Ped.cpp | 8 +++++--- src/render/Shadows.cpp | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp index be39f26e..4e1c3c6d 100644 --- a/src/peds/Ped.cpp +++ b/src/peds/Ped.cpp @@ -2788,12 +2788,14 @@ CPed::SetModelIndex(uint32 mi) // This is a mistake by R*, velocity is CVector, whereas m_vecAnimMoveDelta is CVector2D. (*RPANIMBLENDCLUMPDATA(m_rwObject))->velocity = (CVector*) &m_vecAnimMoveDelta; +#ifdef PED_SKIN if(modelInfo->GetHitColModel() == nil) modelInfo->CreateHitColModelSkinned(GetClump()); - UpdateRpHAnim(); - -#ifndef LIBRW + if (IsClumpSkinned(GetClump())) // condition isn't there in VC + UpdateRpHAnim(); +#endif +#if 1 if (!m_pRTShadow) { m_pRTShadow = new CCutsceneShadow; diff --git a/src/render/Shadows.cpp b/src/render/Shadows.cpp index 0ee63b9a..9b864d27 100644 --- a/src/render/Shadows.cpp +++ b/src/render/Shadows.cpp @@ -853,7 +853,7 @@ CShadows::StoreShadowForPed(CPed *pPed, float fDisplacementX, float fDisplacemen { if ( CTimeCycle::GetShadowStrength() != 0 ) { - #ifndef LIBRW + #if 1 CCutsceneShadow *pShadow = pPed->m_pRTShadow; if (pShadow) From d2d8bea51e5b5903fa4106a94a61f07717c48f42 Mon Sep 17 00:00:00 2001 From: Fire-Head Date: Sun, 9 Aug 2020 01:30:57 +0300 Subject: [PATCH 023/112] rem pobj assert --- src/objects/ParticleObject.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/objects/ParticleObject.cpp b/src/objects/ParticleObject.cpp index b2a77bc5..6ed74214 100644 --- a/src/objects/ParticleObject.cpp +++ b/src/objects/ParticleObject.cpp @@ -124,8 +124,6 @@ CParticleObject::AddObject(uint16 type, CVector const &pos, CVector const &targe { CParticleObject *pobj = pUnusedListHead; - ASSERT(pobj != nil); - if ( pobj == nil ) { printf("Error: No particle objects available!\n"); From 5dc7ff98f2b14985693524a7a660990268f30095 Mon Sep 17 00:00:00 2001 From: aap Date: Sun, 9 Aug 2020 13:17:05 +0200 Subject: [PATCH 024/112] corona fixes --- src/render/Coronas.cpp | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/src/render/Coronas.cpp b/src/render/Coronas.cpp index 5bf89403..d2d229f9 100644 --- a/src/render/Coronas.cpp +++ b/src/render/Coronas.cpp @@ -255,7 +255,10 @@ CCoronas::Render(void) CVector spriteCoors; float spritew, spriteh; - if(CSprite::CalcScreenCoors(aCoronas[i].coors, spriteCoors, &spritew, &spriteh, true)){ + if(!CSprite::CalcScreenCoors(aCoronas[i].coors, spriteCoors, &spritew, &spriteh, true)){ + aCoronas[i].offScreen = true; + aCoronas[i].sightClear = false; + }else{ aCoronas[i].offScreen = false; if(spriteCoors.x < 0.0f || spriteCoors.y < 0.0f || @@ -289,10 +292,7 @@ CCoronas::Render(void) } - if(aCoronas[i].fadeAlpha == 0) - continue; - - if(spriteCoors.z < aCoronas[i].drawDist){ + if(aCoronas[i].fadeAlpha && spriteCoors.z < aCoronas[i].drawDist){ float recipz = 1.0f/spriteCoors.z; float fadeDistance = aCoronas[i].drawDist / 2.0f; float distanceFade = spriteCoors.z < fadeDistance ? 1.0f : 1.0f - (spriteCoors.z - fadeDistance)/fadeDistance; @@ -367,9 +367,6 @@ CCoronas::Render(void) recipz, 255); } } - }else{ - aCoronas[i].offScreen = true; - aCoronas[i].sightClear = false; } } } @@ -390,23 +387,24 @@ CCoronas::Render(void) if(!aCoronas[i].hasValue[j] || !aCoronas[i].hasValue[j+1]) continue; - int mod1 = (float)(6 - j) / 6 * 128; - int mod2 = (float)(6 - (j+1)) / 6 * 128; + int alpha1 = (float)(6 - j) / 6 * 128; + int alpha2 = (float)(6 - (j+1)) / 6 * 128; RwIm2DVertexSetScreenX(&vertexbufferX[0], aCoronas[i].prevX[j]); RwIm2DVertexSetScreenY(&vertexbufferX[0], aCoronas[i].prevY[j]); - RwIm2DVertexSetIntRGBA(&vertexbufferX[0], aCoronas[i].prevRed[j] * mod1 / 256, aCoronas[i].prevGreen[j] * mod1 / 256, aCoronas[i].prevBlue[j] * mod1 / 256, 255); + RwIm2DVertexSetIntRGBA(&vertexbufferX[0], aCoronas[i].prevRed[j] * alpha1 / 256, aCoronas[i].prevGreen[j] * alpha1 / 256, aCoronas[i].prevBlue[j] * alpha1 / 256, 255); RwIm2DVertexSetScreenX(&vertexbufferX[1], aCoronas[i].prevX[j+1]); RwIm2DVertexSetScreenY(&vertexbufferX[1], aCoronas[i].prevY[j+1]); - RwIm2DVertexSetIntRGBA(&vertexbufferX[1], aCoronas[i].prevRed[j+1] * mod2 / 256, aCoronas[i].prevGreen[j+1] * mod2 / 256, aCoronas[i].prevBlue[j+1] * mod2 / 256, 255); + RwIm2DVertexSetIntRGBA(&vertexbufferX[1], aCoronas[i].prevRed[j+1] * alpha2 / 256, aCoronas[i].prevGreen[j+1] * alpha2 / 256, aCoronas[i].prevBlue[j+1] * alpha2 / 256, 255); - // BUG: game doesn't do this +#ifdef FIX_BUGS RwIm2DVertexSetScreenZ(&vertexbufferX[0], RwIm2DGetNearScreenZ()); RwIm2DVertexSetCameraZ(&vertexbufferX[0], RwCameraGetNearClipPlane(Scene.camera)); RwIm2DVertexSetRecipCameraZ(&vertexbufferX[0], 1.0f/RwCameraGetNearClipPlane(Scene.camera)); RwIm2DVertexSetScreenZ(&vertexbufferX[1], RwIm2DGetNearScreenZ()); RwIm2DVertexSetCameraZ(&vertexbufferX[1], RwCameraGetNearClipPlane(Scene.camera)); RwIm2DVertexSetRecipCameraZ(&vertexbufferX[1], 1.0f/RwCameraGetNearClipPlane(Scene.camera)); +#endif RwIm2DRenderLine(vertexbufferX, 2, 0, 1); } @@ -425,6 +423,10 @@ CCoronas::RenderReflections(void) CEntity *entity; if(CWeather::WetRoads > 0.0f){ +#ifdef FIX_BUGS + CSprite::InitSpriteBuffer(); +#endif + RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void*)FALSE); RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE); RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)FALSE); @@ -435,7 +437,8 @@ CCoronas::RenderReflections(void) for(i = 0; i < NUMCORONAS; i++){ if(aCoronas[i].id == 0 || - aCoronas[i].fadeAlpha == 0 && aCoronas[i].alpha == 0) + aCoronas[i].fadeAlpha == 0 && aCoronas[i].alpha == 0 || + aCoronas[i].reflection == 0) continue; // check if we want a reflection on this corona @@ -450,11 +453,8 @@ CCoronas::RenderReflections(void) } } - if(!aCoronas[i].renderReflection) - continue; - // Don't draw if reflection is too high - if(aCoronas[i].heightAboveRoad < 20.0f){ + if(aCoronas[i].renderReflection && aCoronas[i].heightAboveRoad < 20.0f){ // don't draw if camera is below road if(CCoronas::aCoronas[i].coors.z - aCoronas[i].heightAboveRoad > TheCamera.GetPosition().z) continue; @@ -466,13 +466,14 @@ CCoronas::RenderReflections(void) float spritew, spriteh; if(CSprite::CalcScreenCoors(coors, spriteCoors, &spritew, &spriteh, true)){ float drawDist = 0.75f * aCoronas[i].drawDist; - drawDist = Min(drawDist, 50.0f); + drawDist = Min(drawDist, 55.0f); if(spriteCoors.z < drawDist){ float fadeDistance = drawDist / 2.0f; float distanceFade = spriteCoors.z < fadeDistance ? 1.0f : 1.0f - (spriteCoors.z - fadeDistance)/fadeDistance; distanceFade = clamp(distanceFade, 0.0f, 1.0f); float recipz = 1.0f/RwCameraGetNearClipPlane(Scene.camera); - int intensity = (20.0f - aCoronas[i].heightAboveRoad) * 230.0 * distanceFade*CWeather::WetRoads * 0.05f; + float heightFade = (20.0f - aCoronas[i].heightAboveRoad)/20.0f; + int intensity = distanceFade*heightFade * 230.0 * CWeather::WetRoads; CSprite::RenderBufferedOneXLUSprite( spriteCoors.x, spriteCoors.y, RwIm2DGetNearScreenZ(), From b02c7cdc442af117659df6cd5fc39f9184279c0d Mon Sep 17 00:00:00 2001 From: aap Date: Sun, 9 Aug 2020 13:17:48 +0200 Subject: [PATCH 025/112] coronas done --- src/core/main.cpp | 2 +- src/render/Coronas.cpp | 188 +++++++++++++++++++++++++++++++++++------ src/render/Coronas.h | 26 +++--- 3 files changed, 177 insertions(+), 39 deletions(-) diff --git a/src/core/main.cpp b/src/core/main.cpp index d4ef8c4b..83d4b66e 100644 --- a/src/core/main.cpp +++ b/src/core/main.cpp @@ -852,7 +852,7 @@ RenderScene(void) CRenderer::RenderFadingInEntities(); RwRenderStateSet(rwRENDERSTATECULLMODE, (void*)rwCULLMODECULLNONE); CWeather::RenderRainStreaks(); - // CCoronas::RenderSunReflection + CCoronas::RenderSunReflection(); } void diff --git a/src/render/Coronas.cpp b/src/render/Coronas.cpp index efe486fe..df5dfadb 100644 --- a/src/render/Coronas.cpp +++ b/src/render/Coronas.cpp @@ -2,6 +2,7 @@ #include "main.h" #include "General.h" +#include "RenderBuffer.h" #include "TxdStore.h" #include "Camera.h" #include "Sprite.h" @@ -12,6 +13,8 @@ #include "Timecycle.h" #include "Coronas.h" +//--MIAMI: file done + struct FlareDef { float position; @@ -130,13 +133,21 @@ void CCoronas::RegisterCorona(uint32 id, uint8 red, uint8 green, uint8 blue, uint8 alpha, const CVector &coors, float size, float drawDist, RwTexture *tex, int8 flareType, uint8 reflection, uint8 LOScheck, uint8 drawStreak, float someAngle, - bool longDist, float nearDist) + bool useNearDist, float nearDist) { int i; if(sq(drawDist) < (TheCamera.GetPosition() - coors).MagnitudeSqr2D()) return; + if(useNearDist){ + float dist = (TheCamera.GetPosition() - coors).Magnitude(); + if(dist < 35.0f) + return; + if(dist < 50.0f) + alpha *= (dist - 35.0f)/(50.0f - 35.0f); + } + for(i = 0; i < NUMCORONAS; i++) if(aCoronas[i].id == id) break; @@ -189,17 +200,19 @@ CCoronas::RegisterCorona(uint32 id, uint8 red, uint8 green, uint8 blue, uint8 al aCoronas[i].reflection = reflection; aCoronas[i].LOScheck = LOScheck; aCoronas[i].drawStreak = drawStreak; + aCoronas[i].useNearDist = useNearDist; + aCoronas[i].nearDist = nearDist; } void CCoronas::RegisterCorona(uint32 id, uint8 red, uint8 green, uint8 blue, uint8 alpha, const CVector &coors, float size, float drawDist, uint8 type, int8 flareType, uint8 reflection, uint8 LOScheck, uint8 drawStreak, float someAngle, - bool longDist, float nearDist) + bool useNearDist, float nearDist) { RegisterCorona(id, red, green, blue, alpha, coors, size, drawDist, gpCoronaTexture[type], flareType, reflection, LOScheck, drawStreak, someAngle, - longDist, nearDist); + useNearDist, nearDist); } void @@ -258,7 +271,10 @@ CCoronas::Render(void) CVector spriteCoors; float spritew, spriteh; - if(CSprite::CalcScreenCoors(aCoronas[i].coors, spriteCoors, &spritew, &spriteh, true)){ + if(!CSprite::CalcScreenCoors(aCoronas[i].coors, spriteCoors, &spritew, &spriteh, true)){ + aCoronas[i].offScreen = true; + aCoronas[i].sightClear = false; + }else{ aCoronas[i].offScreen = false; if(spriteCoors.x < 0.0f || spriteCoors.y < 0.0f || @@ -292,10 +308,7 @@ CCoronas::Render(void) } - if(aCoronas[i].fadeAlpha == 0) - continue; - - if(spriteCoors.z < aCoronas[i].drawDist){ + if(aCoronas[i].fadeAlpha && spriteCoors.z < aCoronas[i].drawDist){ float recipz = 1.0f/spriteCoors.z; float fadeDistance = aCoronas[i].drawDist / 2.0f; float distanceFade = spriteCoors.z < fadeDistance ? 1.0f : 1.0f - (spriteCoors.z - fadeDistance)/fadeDistance; @@ -312,7 +325,7 @@ CCoronas::Render(void) if(CCoronas::aCoronas[i].id == SUN_CORE) spriteCoors.z = 0.95f * RwCameraGetFarClipPlane(Scene.camera); RwRenderStateSet(rwRENDERSTATETEXTURERASTER, RwTextureGetRaster(aCoronas[i].texture)); - spriteCoors.z -= 1.5f; + spriteCoors.z -= aCoronas[i].nearDist; if(aCoronas[i].texture == gpCoronaTexture[8]){ // what's this? @@ -370,14 +383,11 @@ CCoronas::Render(void) recipz, 255); } } - }else{ - aCoronas[i].offScreen = true; - aCoronas[i].sightClear = false; } } } - RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)TRUE); + RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE); RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)FALSE); RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE); RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDONE); @@ -393,23 +403,24 @@ CCoronas::Render(void) if(!aCoronas[i].hasValue[j] || !aCoronas[i].hasValue[j+1]) continue; - int mod1 = (float)(6 - j) / 6 * 128; - int mod2 = (float)(6 - (j+1)) / 6 * 128; + int alpha1 = (float)(6 - j) / 6 * 128; + int alpha2 = (float)(6 - (j+1)) / 6 * 128; RwIm2DVertexSetScreenX(&vertexbufferX[0], aCoronas[i].prevX[j]); RwIm2DVertexSetScreenY(&vertexbufferX[0], aCoronas[i].prevY[j]); - RwIm2DVertexSetIntRGBA(&vertexbufferX[0], aCoronas[i].prevRed[j] * mod1 / 256, aCoronas[i].prevGreen[j] * mod1 / 256, aCoronas[i].prevBlue[j] * mod1 / 256, 255); + RwIm2DVertexSetIntRGBA(&vertexbufferX[0], aCoronas[i].prevRed[j] * alpha1 / 256, aCoronas[i].prevGreen[j] * alpha1 / 256, aCoronas[i].prevBlue[j] * alpha1 / 256, 255); RwIm2DVertexSetScreenX(&vertexbufferX[1], aCoronas[i].prevX[j+1]); RwIm2DVertexSetScreenY(&vertexbufferX[1], aCoronas[i].prevY[j+1]); - RwIm2DVertexSetIntRGBA(&vertexbufferX[1], aCoronas[i].prevRed[j+1] * mod2 / 256, aCoronas[i].prevGreen[j+1] * mod2 / 256, aCoronas[i].prevBlue[j+1] * mod2 / 256, 255); + RwIm2DVertexSetIntRGBA(&vertexbufferX[1], aCoronas[i].prevRed[j+1] * alpha2 / 256, aCoronas[i].prevGreen[j+1] * alpha2 / 256, aCoronas[i].prevBlue[j+1] * alpha2 / 256, 255); - // BUG: game doesn't do this +#ifdef FIX_BUGS RwIm2DVertexSetScreenZ(&vertexbufferX[0], RwIm2DGetNearScreenZ()); RwIm2DVertexSetCameraZ(&vertexbufferX[0], RwCameraGetNearClipPlane(Scene.camera)); RwIm2DVertexSetRecipCameraZ(&vertexbufferX[0], 1.0f/RwCameraGetNearClipPlane(Scene.camera)); RwIm2DVertexSetScreenZ(&vertexbufferX[1], RwIm2DGetNearScreenZ()); RwIm2DVertexSetCameraZ(&vertexbufferX[1], RwCameraGetNearClipPlane(Scene.camera)); RwIm2DVertexSetRecipCameraZ(&vertexbufferX[1], 1.0f/RwCameraGetNearClipPlane(Scene.camera)); +#endif RwIm2DRenderLine(vertexbufferX, 2, 0, 1); } @@ -428,6 +439,8 @@ CCoronas::RenderReflections(void) CEntity *entity; if(CWeather::WetRoads > 0.0f){ + CSprite::InitSpriteBuffer(); + RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void*)FALSE); RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE); RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)FALSE); @@ -438,7 +451,8 @@ CCoronas::RenderReflections(void) for(i = 0; i < NUMCORONAS; i++){ if(aCoronas[i].id == 0 || - aCoronas[i].fadeAlpha == 0 && aCoronas[i].alpha == 0) + aCoronas[i].fadeAlpha == 0 && aCoronas[i].alpha == 0 || + aCoronas[i].reflection == 0) continue; // check if we want a reflection on this corona @@ -453,11 +467,8 @@ CCoronas::RenderReflections(void) } } - if(!aCoronas[i].renderReflection) - continue; - // Don't draw if reflection is too high - if(aCoronas[i].heightAboveRoad < 20.0f){ + if(aCoronas[i].renderReflection && aCoronas[i].heightAboveRoad < 20.0f){ // don't draw if camera is below road if(CCoronas::aCoronas[i].coors.z - aCoronas[i].heightAboveRoad > TheCamera.GetPosition().z) continue; @@ -469,13 +480,14 @@ CCoronas::RenderReflections(void) float spritew, spriteh; if(CSprite::CalcScreenCoors(coors, spriteCoors, &spritew, &spriteh, true)){ float drawDist = 0.75f * aCoronas[i].drawDist; - drawDist = Min(drawDist, 50.0f); + drawDist = Min(drawDist, 55.0f); if(spriteCoors.z < drawDist){ float fadeDistance = drawDist / 2.0f; float distanceFade = spriteCoors.z < fadeDistance ? 1.0f : 1.0f - (spriteCoors.z - fadeDistance)/fadeDistance; distanceFade = clamp(distanceFade, 0.0f, 1.0f); float recipz = 1.0f/RwCameraGetNearClipPlane(Scene.camera); - int intensity = (20.0f - aCoronas[i].heightAboveRoad) * 230.0 * distanceFade*CWeather::WetRoads * 0.05f; + float heightFade = (20.0f - aCoronas[i].heightAboveRoad)/20.0f; + int intensity = distanceFade*heightFade * 230.0 * CWeather::WetRoads; CSprite::RenderBufferedOneXLUSprite( spriteCoors.x, spriteCoors.y, RwIm2DGetNearScreenZ(), @@ -504,6 +516,130 @@ CCoronas::RenderReflections(void) } } +void +CCoronas::RenderSunReflection(void) +{ + float sunZDir = CTimeCycle::GetSunDirection().z; + if(sunZDir > -0.05f){ + float intensity = (0.3f - Abs(sunZDir - 0.25f))/0.3f * + (1.0f - CWeather::CloudCoverage) * + (1.0f - CWeather::Foggyness) * + (1.0f - CWeather::Wind); + if(intensity > 0.0f){ + int r = (CTimeCycle::GetSunCoreRed() + CTimeCycle::GetSunCoronaRed())*intensity*0.25f; + int g = (CTimeCycle::GetSunCoreGreen() + CTimeCycle::GetSunCoronaGreen())*intensity*0.25f; + int b = (CTimeCycle::GetSunCoreBlue() + CTimeCycle::GetSunCoronaBlue())*intensity*0.25f; + + CVector sunPos = 40.0f*CTimeCycle::GetSunDirection() + TheCamera.GetPosition(); + sunPos.z = 0.5f*CWeather::Wind + 6.1f; + CVector sunDir = CTimeCycle::GetSunDirection(); + sunDir.z = 0.0; + sunDir.Normalise(); + + TempBufferIndicesStored = 6; + TempBufferRenderIndexList[0] = 2; + TempBufferRenderIndexList[1] = 1; + TempBufferRenderIndexList[2] = 0; + TempBufferRenderIndexList[3] = 2; + TempBufferRenderIndexList[4] = 3; + TempBufferRenderIndexList[5] = 1; + + // 60 unit square in sun direction + TempBufferVerticesStored = 4; + RwIm3DVertexSetRGBA(&TempBufferRenderVertices[0], r, g, b, 255); + RwIm3DVertexSetPos(&TempBufferRenderVertices[0], + sunPos.x + 30.0f*sunDir.y, + sunPos.y - 30.0f*sunDir.x, + sunPos.z); + RwIm3DVertexSetRGBA(&TempBufferRenderVertices[1], r, g, b, 255); + RwIm3DVertexSetPos(&TempBufferRenderVertices[1], + sunPos.x - 30.0f*sunDir.y, + sunPos.y + 30.0f*sunDir.x, + sunPos.z); + RwIm3DVertexSetRGBA(&TempBufferRenderVertices[2], r, g, b, 255); + RwIm3DVertexSetPos(&TempBufferRenderVertices[2], + sunPos.x + 60.0f*sunDir.x + 30.0f*sunDir.y, + sunPos.y + 60.0f*sunDir.y - 30.0f*sunDir.x, + sunPos.z); + RwIm3DVertexSetRGBA(&TempBufferRenderVertices[3], r, g, b, 255); + RwIm3DVertexSetPos(&TempBufferRenderVertices[3], + sunPos.x + 60.0f*sunDir.x - 30.0f*sunDir.y, + sunPos.y + 60.0f*sunDir.y + 30.0f*sunDir.x, + sunPos.z); + + RwIm3DVertexSetU(&TempBufferRenderVertices[0], 0.0f); + RwIm3DVertexSetV(&TempBufferRenderVertices[0], 1.0f); + RwIm3DVertexSetU(&TempBufferRenderVertices[1], 1.0f); + RwIm3DVertexSetV(&TempBufferRenderVertices[1], 1.0f); + RwIm3DVertexSetU(&TempBufferRenderVertices[2], 0.0f); + RwIm3DVertexSetV(&TempBufferRenderVertices[2], 0.5f); + RwIm3DVertexSetU(&TempBufferRenderVertices[3], 1.0f); + RwIm3DVertexSetV(&TempBufferRenderVertices[3], 0.5f); + + int timeInc = 0; + int sideInc = 0; + int fwdInc = 0; + for(int i = 0; i < 20; i++){ + TempBufferRenderIndexList[TempBufferIndicesStored + 0] = TempBufferVerticesStored; + TempBufferRenderIndexList[TempBufferIndicesStored + 1] = TempBufferVerticesStored-1; + TempBufferRenderIndexList[TempBufferIndicesStored + 2] = TempBufferVerticesStored-2; + TempBufferRenderIndexList[TempBufferIndicesStored + 3] = TempBufferVerticesStored; + TempBufferRenderIndexList[TempBufferIndicesStored + 4] = TempBufferVerticesStored+1; + TempBufferRenderIndexList[TempBufferIndicesStored + 5] = TempBufferVerticesStored-1; + TempBufferIndicesStored += 6; + + // What a weird way to do it... + float fwdLen = fwdInc/20 + 60; + float sideLen = sideInc/20 + 30; + sideLen += 10.0f*Sin((float)(CTimer::GetTimeInMilliseconds()+timeInc & 0x7FF)/0x800*TWOPI); + timeInc += 900; + sideInc += 970; + fwdInc += 1440; + + RwIm3DVertexSetRGBA(&TempBufferRenderVertices[TempBufferVerticesStored+0], r, g, b, 255); + RwIm3DVertexSetPos(&TempBufferRenderVertices[TempBufferVerticesStored+0], + sunPos.x + fwdLen*sunDir.x + sideLen*sunDir.y, + sunPos.y + fwdLen*sunDir.y - sideLen*sunDir.x, + sunPos.z); + + RwIm3DVertexSetRGBA(&TempBufferRenderVertices[TempBufferVerticesStored+1], r, g, b, 255); + RwIm3DVertexSetPos(&TempBufferRenderVertices[TempBufferVerticesStored+1], + sunPos.x + fwdLen*sunDir.x - sideLen*sunDir.x, + sunPos.y + fwdLen*sunDir.y + sideLen*sunDir.y, + sunPos.z); + + RwIm3DVertexSetU(&TempBufferRenderVertices[TempBufferVerticesStored+0], 0.0f); + RwIm3DVertexSetV(&TempBufferRenderVertices[TempBufferVerticesStored+0], 0.5f); + RwIm3DVertexSetU(&TempBufferRenderVertices[TempBufferVerticesStored+1], 1.0f); + RwIm3DVertexSetV(&TempBufferRenderVertices[TempBufferVerticesStored+1], 0.5f); + TempBufferVerticesStored += 2; + } + + + RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE); + RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)TRUE); + RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void*)FALSE); + RwRenderStateSet(rwRENDERSTATEFOGTYPE, (void*)rwFOGTYPELINEAR); + RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDONE); + RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDONE); + RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE); + RwRenderStateSet(rwRENDERSTATETEXTURERASTER, RwTextureGetRaster(gpCoronaTexture[4])); + if(RwIm3DTransform(TempBufferRenderVertices, TempBufferVerticesStored, nil, rwIM3D_VERTEXUV)){ + RwIm3DRenderIndexedPrimitive(rwPRIMTYPETRILIST, TempBufferRenderIndexList, TempBufferIndicesStored); + RwIm3DEnd(); + } + RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)TRUE); + RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)TRUE); + RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA); + RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA); + RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void*)FALSE); + RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)FALSE); + TempBufferVerticesStored = 0; + TempBufferIndicesStored = 0; + } + } +} + void CCoronas::DoSunAndMoon(void) { @@ -520,7 +656,7 @@ CCoronas::DoSunAndMoon(void) 255, sunCoors, size, 999999.88f, TYPE_STAR, FLARE_NONE, REFLECTION_OFF, LOSCHECK_OFF, STREAK_OFF, 0.0f); - if(CTimeCycle::GetSunDirection().z > 0.0f) + if(CTimeCycle::GetSunDirection().z > 0.0f && !CGame::IsInInterior()) RegisterCorona(SUN_CORONA, CTimeCycle::GetSunCoronaRed(), CTimeCycle::GetSunCoronaGreen(), CTimeCycle::GetSunCoronaBlue(), 255, sunCoors, 25.0f * CTimeCycle::GetSunSize(), diff --git a/src/render/Coronas.h b/src/render/Coronas.h index cb4e8583..45f027d8 100644 --- a/src/render/Coronas.h +++ b/src/render/Coronas.h @@ -4,19 +4,21 @@ extern RwTexture *gpCoronaTexture[9]; struct CRegisteredCorona { + CVector coors; uint32 id; uint32 lastLOScheck; RwTexture *texture; + float size; + float someAngle; + float drawDist; + float nearDist; + float heightAboveRoad; uint8 red; uint8 green; uint8 blue; uint8 alpha; // alpha when fully visible uint8 fadeAlpha; // actual value used for rendering, faded - CVector coors; - float size; - float someAngle; bool registeredThisFrame; - float drawDist; int8 flareType; int8 reflection; @@ -25,12 +27,11 @@ struct CRegisteredCorona uint8 firstUpdate : 1; uint8 drawStreak : 1; uint8 sightClear : 1; + uint8 useNearDist : 1; + uint8 renderReflection : 1; - bool renderReflection; - float heightAboveRoad; - - float prevX[6]; - float prevY[6]; + int16 prevX[6]; + int16 prevY[6]; uint8 prevRed[6]; uint8 prevGreen[6]; uint8 prevBlue[6]; @@ -39,7 +40,7 @@ struct CRegisteredCorona void Update(void); }; -VALIDATE_SIZE(CRegisteredCorona, 0x80); +VALIDATE_SIZE(CRegisteredCorona, 0x68); class CCoronas { @@ -91,13 +92,14 @@ public: static void RegisterCorona(uint32 id, uint8 red, uint8 green, uint8 blue, uint8 alpha, const CVector &coors, float size, float drawDist, RwTexture *tex, int8 flareType, uint8 reflection, uint8 LOScheck, uint8 drawStreak, float someAngle, - bool longDist = false, float nearClip = 1.5f); + bool useNearDist = false, float nearDist = 1.5f); static void RegisterCorona(uint32 id, uint8 red, uint8 green, uint8 blue, uint8 alpha, const CVector &coors, float size, float drawDist, uint8 type, int8 flareType, uint8 reflection, uint8 LOScheck, uint8 drawStreak, float someAngle, - bool longDist = false, float nearClip = 1.5f); + bool useNearDist = false, float nearDist = 1.5f); static void UpdateCoronaCoors(uint32 id, const CVector &coors, float drawDist, float someAngle); static void Render(void); static void RenderReflections(void); + static void RenderSunReflection(void); static void DoSunAndMoon(void); }; From 6514bc6b39faf5cfd6ecb1d45370e2c9c50e8f43 Mon Sep 17 00:00:00 2001 From: aap Date: Sun, 9 Aug 2020 15:45:38 +0200 Subject: [PATCH 026/112] pointlights done --- src/render/Fluff.cpp | 5 ++- src/render/PointLights.cpp | 68 ++++++++++++++++++++++++++++++-------- src/render/PointLights.h | 5 +++ 3 files changed, 64 insertions(+), 14 deletions(-) diff --git a/src/render/Fluff.cpp b/src/render/Fluff.cpp index 5d8ccf47..14c80a63 100644 --- a/src/render/Fluff.cpp +++ b/src/render/Fluff.cpp @@ -7,6 +7,7 @@ #include "Camera.h" #include "Sprite.h" #include "Coronas.h" +#include "PointLights.h" #include "Rubbish.h" #include "Timecycle.h" #include "General.h" @@ -391,7 +392,7 @@ void CMovingThings::Init() CPlaneTrails::Init(); CSmokeTrails::Init(); CPlaneBanners::Init(); - CEscalators::Init(); + CPointLights::Init(); StartCloseList.m_pNext = &CMovingThings::EndCloseList; StartCloseList.m_pPrev = nil; @@ -399,6 +400,8 @@ void CMovingThings::Init() EndCloseList.m_pPrev = &CMovingThings::StartCloseList; Num = 0; + CEscalators::Init(); + #ifndef MIAMI // something is still used here actually // Initialize scroll bars aScrollBars[0].Init(CVector( 228.3f, -669.0f, 39.0f ), SCROLL_BUSINESS, 0.0f, 0.5f, 0.5f, 255, 128, 0, 0.3f); diff --git a/src/render/PointLights.cpp b/src/render/PointLights.cpp index 88b9aaea..b09b07bd 100644 --- a/src/render/PointLights.cpp +++ b/src/render/PointLights.cpp @@ -1,6 +1,7 @@ #include "common.h" #include "main.h" +#include "CutsceneMgr.h" #include "Lights.h" #include "Camera.h" #include "Weather.h" @@ -10,8 +11,23 @@ #include "Timer.h" #include "PointLights.h" +//--MIAMI: file done + int16 CPointLights::NumLights; CRegisteredPointLight CPointLights::aLights[NUMPOINTLIGHTS]; +CVector CPointLights::aCachedMapReads[32]; +float CPointLights::aCachedMapReadResults[32]; +int32 CPointLights::NextCachedValue; + +void +CPointLights::Init(void) +{ + for(int i = 0; i < ARRAY_SIZE(aCachedMapReads); i++){ + aCachedMapReads[i] = CVector(0.0f, 0.0f, 0.0f); + aCachedMapReadResults[i] = 0.0f; + } + NextCachedValue = 0; +} void CPointLights::InitPerFrame(void) @@ -86,12 +102,11 @@ CPointLights::GenerateLightsAffectingObject(Const CVector *objCoors) ret *= distNorm; }else{ float intensity; + // distance fade if(distNorm < 0.5f) - // near enough intensity = 1.0f; else - // attenuate - intensity = 1.0f - (distNorm - 0.5f)*2.0f; + intensity = 1.0f - (distNorm - 0.5f)/(1.0f - 0.5f); if(distance != 0.0f){ CVector dir = dist / distance; @@ -143,17 +158,22 @@ CPointLights::RenderFogEffect(void) CVector spriteCoors; float spritew, spriteh; + if(CCutsceneMgr::IsRunning()) + return; + RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE); RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE); RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDONE); RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDONE); RwRenderStateSet(rwRENDERSTATETEXTURERASTER, gpPointlightRaster); + CSprite::InitSpriteBuffer(); + for(i = 0; i < NumLights; i++){ if(aLights[i].fogType != FOG_NORMAL && aLights[i].fogType != FOG_ALWAYS) continue; - fogginess = aLights[i].fogType == FOG_ALWAYS ? 1.0f : CWeather::Foggyness; + fogginess = aLights[i].fogType == FOG_NORMAL ? CWeather::Foggyness : 1.0f; if(fogginess == 0.0f) continue; @@ -198,7 +218,7 @@ CPointLights::RenderFogEffect(void) float distsq = sq(dx) + sq(dy); float linedistsq = distsq - sq(dot); if(dot > 0.0f && dot < FOG_AREA_LENGTH && linedistsq < sq(FOG_AREA_WIDTH)){ - CVector fogcoors(xi, yi, aLights[i].coors.z + 1.0f); + CVector fogcoors(xi, yi, aLights[i].coors.z + 10.0f); if(CWorld::ProcessVerticalLine(fogcoors, fogcoors.z - 20.0f, point, entity, true, false, false, false, true, false, nil)){ // Now same check again in xyz @@ -220,9 +240,9 @@ CPointLights::RenderFogEffect(void) intensity *= 1.0f - sq(Sqrt(linedistsq) / FOG_AREA_WIDTH); if(CSprite::CalcScreenCoors(fogcoors, spriteCoors, &spritew, &spriteh, true)){ - float rotation = (CTimer::GetTimeInMilliseconds()&0x1FFF) * 2*3.14f / 0x1FFF; + float rotation = (CTimer::GetTimeInMilliseconds()&0x1FFF) * 2*3.14f / 0x2000; float size = FogSizes[r>>1]; - CSprite::RenderOneXLUSprite_Rotate_Aspect(spriteCoors.x, spriteCoors.y, spriteCoors.z, + CSprite::RenderBufferedOneXLUSprite_Rotate_Aspect(spriteCoors.x, spriteCoors.y, spriteCoors.z, spritew * size, spriteh * size, aLights[i].red * intensity, aLights[i].green * intensity, aLights[i].blue * intensity, intensity, 1/spriteCoors.z, rotation, 255); @@ -234,9 +254,8 @@ CPointLights::RenderFogEffect(void) } }else if(aLights[i].type == LIGHT_POINT || aLights[i].type == LIGHT_FOGONLY || aLights[i].type == LIGHT_FOGONLY_ALWAYS){ - if(CWorld::ProcessVerticalLine(aLights[i].coors, aLights[i].coors.z - 20.0f, - point, entity, true, false, false, false, true, false, nil)){ - + float groundZ; + if(ProcessVerticalLineUsingCache(aLights[i].coors, &groundZ)){ xmin = aLights[i].coors.x - FOG_AREA_RADIUS; ymin = aLights[i].coors.y - FOG_AREA_RADIUS; xmax = aLights[i].coors.x + FOG_AREA_RADIUS; @@ -267,11 +286,11 @@ CPointLights::RenderFogEffect(void) // more intensity the closer to light source intensity *= 1.0f - sq(lightdist / FOG_AREA_RADIUS); - CVector fogcoors(xi, yi, point.point.z + 1.6f); + CVector fogcoors(xi, yi, groundZ + 1.6f); if(CSprite::CalcScreenCoors(fogcoors, spriteCoors, &spritew, &spriteh, true)){ - float rotation = (CTimer::GetTimeInMilliseconds()&0x3FFF) * 2*3.14f / 0x3FFF; + float rotation = (CTimer::GetTimeInMilliseconds()&0x3FFF) * 2*3.14f / 0x4000; float size = FogSizes[r>>1]; - CSprite::RenderOneXLUSprite_Rotate_Aspect(spriteCoors.x, spriteCoors.y, spriteCoors.z, + CSprite::RenderBufferedOneXLUSprite_Rotate_Aspect(spriteCoors.x, spriteCoors.y, spriteCoors.z, spritew * size, spriteh * size, aLights[i].red * intensity, aLights[i].green * intensity, aLights[i].blue * intensity, intensity, 1/spriteCoors.z, rotation, 255); @@ -283,4 +302,27 @@ CPointLights::RenderFogEffect(void) } } } + + CSprite::FlushSpriteBuffer(); +} + +bool +CPointLights::ProcessVerticalLineUsingCache(CVector coors, float *groundZ) +{ + for(int i = 0; i < ARRAY_SIZE(aCachedMapReads); i++) + if(aCachedMapReads[i] == coors){ + *groundZ = aCachedMapReadResults[i]; + return true; + } + + CColPoint point; + CEntity *entity; + if(CWorld::ProcessVerticalLine(coors, coors.z - 20.0f, point, entity, true, false, false, false, true, false, nil)){ + aCachedMapReads[NextCachedValue] = coors; + aCachedMapReadResults[NextCachedValue] = point.point.z; + NextCachedValue = (NextCachedValue+1) % ARRAY_SIZE(aCachedMapReads); + *groundZ = point.point.z; + return true; + } + return false; } diff --git a/src/render/PointLights.h b/src/render/PointLights.h index 9e94328f..827200b9 100644 --- a/src/render/PointLights.h +++ b/src/render/PointLights.h @@ -20,6 +20,9 @@ class CPointLights public: static int16 NumLights; static CRegisteredPointLight aLights[NUMPOINTLIGHTS]; + static CVector aCachedMapReads[32]; + static float aCachedMapReadResults[32]; + static int32 NextCachedValue; enum { LIGHT_POINT, @@ -37,9 +40,11 @@ public: FOG_ALWAYS }; + static void Init(void); static void InitPerFrame(void); static void AddLight(uint8 type, CVector coors, CVector dir, float radius, float red, float green, float blue, uint8 fogType, bool castExtraShadows); static float GenerateLightsAffectingObject(Const CVector *objCoors); static void RemoveLightsAffectingObject(void); static void RenderFogEffect(void); + static bool ProcessVerticalLineUsingCache(CVector coors, float *groundZ); }; From 59d25d3ad8271ec46326a8e69e692e231a4eb076 Mon Sep 17 00:00:00 2001 From: aap Date: Sun, 9 Aug 2020 15:45:54 +0200 Subject: [PATCH 027/112] pointlight fixes --- src/render/PointLights.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/render/PointLights.cpp b/src/render/PointLights.cpp index 88b9aaea..0713dc6d 100644 --- a/src/render/PointLights.cpp +++ b/src/render/PointLights.cpp @@ -86,12 +86,11 @@ CPointLights::GenerateLightsAffectingObject(Const CVector *objCoors) ret *= distNorm; }else{ float intensity; + // distance fade if(distNorm < 0.5f) - // near enough intensity = 1.0f; else - // attenuate - intensity = 1.0f - (distNorm - 0.5f)*2.0f; + intensity = 1.0f - (distNorm - 0.5f)/(1.0f - 0.5f); if(distance != 0.0f){ CVector dir = dist / distance; @@ -153,7 +152,7 @@ CPointLights::RenderFogEffect(void) if(aLights[i].fogType != FOG_NORMAL && aLights[i].fogType != FOG_ALWAYS) continue; - fogginess = aLights[i].fogType == FOG_ALWAYS ? 1.0f : CWeather::Foggyness; + fogginess = aLights[i].fogType == FOG_NORMAL ? CWeather::Foggyness : 1.0f; if(fogginess == 0.0f) continue; @@ -198,7 +197,7 @@ CPointLights::RenderFogEffect(void) float distsq = sq(dx) + sq(dy); float linedistsq = distsq - sq(dot); if(dot > 0.0f && dot < FOG_AREA_LENGTH && linedistsq < sq(FOG_AREA_WIDTH)){ - CVector fogcoors(xi, yi, aLights[i].coors.z + 1.0f); + CVector fogcoors(xi, yi, aLights[i].coors.z + 10.0f); if(CWorld::ProcessVerticalLine(fogcoors, fogcoors.z - 20.0f, point, entity, true, false, false, false, true, false, nil)){ // Now same check again in xyz @@ -220,7 +219,7 @@ CPointLights::RenderFogEffect(void) intensity *= 1.0f - sq(Sqrt(linedistsq) / FOG_AREA_WIDTH); if(CSprite::CalcScreenCoors(fogcoors, spriteCoors, &spritew, &spriteh, true)){ - float rotation = (CTimer::GetTimeInMilliseconds()&0x1FFF) * 2*3.14f / 0x1FFF; + float rotation = (CTimer::GetTimeInMilliseconds()&0x1FFF) * 2*3.14f / 0x2000; float size = FogSizes[r>>1]; CSprite::RenderOneXLUSprite_Rotate_Aspect(spriteCoors.x, spriteCoors.y, spriteCoors.z, spritew * size, spriteh * size, @@ -269,7 +268,7 @@ CPointLights::RenderFogEffect(void) CVector fogcoors(xi, yi, point.point.z + 1.6f); if(CSprite::CalcScreenCoors(fogcoors, spriteCoors, &spritew, &spriteh, true)){ - float rotation = (CTimer::GetTimeInMilliseconds()&0x3FFF) * 2*3.14f / 0x3FFF; + float rotation = (CTimer::GetTimeInMilliseconds()&0x3FFF) * 2*3.14f / 0x4000; float size = FogSizes[r>>1]; CSprite::RenderOneXLUSprite_Rotate_Aspect(spriteCoors.x, spriteCoors.y, spriteCoors.z, spritew * size, spriteh * size, From 0bb46f3f8c3db1d378a2f7f87de1519576e26d1d Mon Sep 17 00:00:00 2001 From: aap Date: Sun, 9 Aug 2020 16:49:15 +0200 Subject: [PATCH 028/112] rubbish done --- src/core/Stats.cpp | 1 + src/core/Stats.h | 1 + src/render/Antennas.cpp | 2 ++ src/render/Rubbish.cpp | 67 +++++++++++++++++------------------------ 4 files changed, 32 insertions(+), 39 deletions(-) diff --git a/src/core/Stats.cpp b/src/core/Stats.cpp index 2e3a27b2..29087b34 100644 --- a/src/core/Stats.cpp +++ b/src/core/Stats.cpp @@ -61,6 +61,7 @@ int32 CStats::FastestTimes[CStats::TOTAL_FASTEST_TIMES]; int32 CStats::HighestScores[CStats::TOTAL_HIGHEST_SCORES]; int32 CStats::BestPositions[CStats::TOTAL_BEST_POSITIONS]; int32 CStats::PropertyDestroyed; +int32 CStats::PamphletMissionPassed; int32 CStats::Sprayings; float CStats::AutoPaintingBudget; diff --git a/src/core/Stats.h b/src/core/Stats.h index 7dd527ea..e6b8df6a 100644 --- a/src/core/Stats.h +++ b/src/core/Stats.h @@ -65,6 +65,7 @@ public: static int32 HighestScores[TOTAL_HIGHEST_SCORES]; static int32 BestPositions[TOTAL_BEST_POSITIONS]; static int32 PropertyDestroyed; + static int32 PamphletMissionPassed; static int32 Sprayings; static float AutoPaintingBudget; static int32 NoMoreHurricanes; diff --git a/src/render/Antennas.cpp b/src/render/Antennas.cpp index 452069a0..b9da95cb 100644 --- a/src/render/Antennas.cpp +++ b/src/render/Antennas.cpp @@ -2,6 +2,8 @@ #include "Antennas.h" +//--MIAMI: file done + CAntenna CAntennas::aAntennas[NUMANTENNAS]; void diff --git a/src/render/Rubbish.cpp b/src/render/Rubbish.cpp index bfd50c07..dada2439 100644 --- a/src/render/Rubbish.cpp +++ b/src/render/Rubbish.cpp @@ -8,17 +8,18 @@ #include "World.h" #include "Vehicle.h" #include "ZoneCull.h" +#include "Stats.h" #include "TxdStore.h" #include "RenderBuffer.h" #include "Rubbish.h" -#define RUBBISH_MAX_DIST (18.0f) -#define RUBBISH_FADE_DIST (16.5f) +//--MIAMI: file done + +#define RUBBISH_MAX_DIST (23.0f) +#define RUBBISH_FADE_DIST (20.0f) RwTexture *gpRubbishTexture[4]; RwImVertexIndex RubbishIndexList[6]; -RwImVertexIndex RubbishIndexList2[6]; // unused -RwIm3DVertex RubbishVertices[4]; bool CRubbish::bRubbishInvisible; int CRubbish::RubbishVisibility; COneSheet CRubbish::aSheets[NUM_RUBBISH_SHEETS]; @@ -52,12 +53,16 @@ CRubbish::Render(void) { int type; + if(RubbishVisibility == 0) + return; + RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE); RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE); RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void*)TRUE); for(type = 0; type < 4; type++){ - RwRenderStateSet(rwRENDERSTATETEXTURERASTER, RwTextureGetRaster(gpRubbishTexture[type])); + if(type < 3 || CStats::PamphletMissionPassed) + RwRenderStateSet(rwRENDERSTATETEXTURERASTER, RwTextureGetRaster(gpRubbishTexture[type])); TempBufferIndicesStored = 0; TempBufferVerticesStored = 0; @@ -69,7 +74,7 @@ CRubbish::Render(void) if(sheet->m_state == 0) continue; - uint32 alpha = 128; + uint32 alpha = 100; CVector pos; if(sheet->m_state == 1){ pos = sheet->m_basePos; @@ -82,7 +87,7 @@ CRubbish::Render(void) float t = (float)(CTimer::GetTimeInMilliseconds() - sheet->m_moveStart)/sheet->m_moveDuration; float f1 = sheet->m_isVisible ? 1.0f-t : 0.0f; float f2 = sheet->m_targetIsVisible ? t : 0.0f; - alpha = 128 * (f1+f2); + alpha = 100 * (f1+f2); } } @@ -92,17 +97,27 @@ CRubbish::Render(void) alpha -= alpha*(camDist-RUBBISH_FADE_DIST)/(RUBBISH_MAX_DIST-RUBBISH_FADE_DIST); alpha = (RubbishVisibility*alpha)/256; - float vx = Sin(sheet->m_angle) * 0.4f; - float vy = Cos(sheet->m_angle) * 0.4f; + float vx1, vy1, vx2, vy2; + if(type == 0 || type == 1){ + vx1 = 0.9f*Sin(sheet->m_angle); + vy1 = 0.9f*Cos(sheet->m_angle); + vx2 = 0.3f*Cos(sheet->m_angle); + vy2 = -0.3f*Sin(sheet->m_angle); + }else{ + vx1 = 0.3f*Sin(sheet->m_angle); + vy1 = 0.3f*Cos(sheet->m_angle); + vx2 = 0.3f*Cos(sheet->m_angle); + vy2 = -0.3f*Sin(sheet->m_angle); + } int v = TempBufferVerticesStored; - RwIm3DVertexSetPos(&TempBufferRenderVertices[v+0], pos.x + vx, pos.y + vy, pos.z); + RwIm3DVertexSetPos(&TempBufferRenderVertices[v+0], pos.x + vx1 + vx2, pos.y + vy1 + vy2, pos.z); + RwIm3DVertexSetPos(&TempBufferRenderVertices[v+1], pos.x + vx1 - vx2, pos.y + vy1 - vy2, pos.z); + RwIm3DVertexSetPos(&TempBufferRenderVertices[v+2], pos.x - vx1 + vx2, pos.y - vy1 + vy2, pos.z); + RwIm3DVertexSetPos(&TempBufferRenderVertices[v+3], pos.x - vx1 - vx2, pos.y - vy1 - vy2, pos.z); RwIm3DVertexSetRGBA(&TempBufferRenderVertices[v+0], 255, 255, 255, alpha); - RwIm3DVertexSetPos(&TempBufferRenderVertices[v+1], pos.x - vy, pos.y + vx, pos.z); RwIm3DVertexSetRGBA(&TempBufferRenderVertices[v+1], 255, 255, 255, alpha); - RwIm3DVertexSetPos(&TempBufferRenderVertices[v+2], pos.x + vy, pos.y - vx, pos.z); RwIm3DVertexSetRGBA(&TempBufferRenderVertices[v+2], 255, 255, 255, alpha); - RwIm3DVertexSetPos(&TempBufferRenderVertices[v+3], pos.x - vx, pos.y - vy, pos.z); RwIm3DVertexSetRGBA(&TempBufferRenderVertices[v+3], 255, 255, 255, alpha); RwIm3DVertexSetU(&TempBufferRenderVertices[v+0], 0.0f); RwIm3DVertexSetV(&TempBufferRenderVertices[v+0], 0.0f); @@ -373,24 +388,6 @@ CRubbish::Init(void) EndMoversList.m_next = nil; EndMoversList.m_prev = &StartMoversList; - // unused - RwIm3DVertexSetU(&RubbishVertices[0], 0.0f); - RwIm3DVertexSetV(&RubbishVertices[0], 0.0f); - RwIm3DVertexSetU(&RubbishVertices[1], 1.0f); - RwIm3DVertexSetV(&RubbishVertices[1], 0.0f); - RwIm3DVertexSetU(&RubbishVertices[2], 0.0f); - RwIm3DVertexSetV(&RubbishVertices[2], 1.0f); - RwIm3DVertexSetU(&RubbishVertices[3], 1.0f); - RwIm3DVertexSetV(&RubbishVertices[3], 1.0f); - - // unused - RubbishIndexList2[0] = 0; - RubbishIndexList2[1] = 2; - RubbishIndexList2[2] = 1; - RubbishIndexList2[3] = 1; - RubbishIndexList2[4] = 2; - RubbishIndexList2[5] = 3; - RubbishIndexList[0] = 0; RubbishIndexList[1] = 1; RubbishIndexList[2] = 2; @@ -414,19 +411,11 @@ void CRubbish::Shutdown(void) { RwTextureDestroy(gpRubbishTexture[0]); -#ifdef GTA3_1_1_PATCH gpRubbishTexture[0] = nil; -#endif RwTextureDestroy(gpRubbishTexture[1]); -#ifdef GTA3_1_1_PATCH gpRubbishTexture[1] = nil; -#endif RwTextureDestroy(gpRubbishTexture[2]); -#ifdef GTA3_1_1_PATCH gpRubbishTexture[2] = nil; -#endif RwTextureDestroy(gpRubbishTexture[3]); -#ifdef GTA3_1_1_PATCH gpRubbishTexture[3] = nil; -#endif } From 4118d2aa5552223c02ff094e7d4e9f103daaac94 Mon Sep 17 00:00:00 2001 From: aap Date: Sun, 9 Aug 2020 17:14:24 +0200 Subject: [PATCH 029/112] finished skidmarks --- src/render/Skidmarks.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/render/Skidmarks.cpp b/src/render/Skidmarks.cpp index efd88387..f2a66db1 100644 --- a/src/render/Skidmarks.cpp +++ b/src/render/Skidmarks.cpp @@ -6,6 +6,8 @@ #include "Replay.h" #include "Skidmarks.h" +//--MIAMI: file done + CSkidmark CSkidmarks::aSkidmarks[NUMSKIDMARKS]; RwImVertexIndex SkidmarkIndexList[SKIDMARK_LENGTH * 6]; @@ -37,13 +39,6 @@ CSkidmarks::Init(void) SkidmarkIndexList[i*6+5] = ix+3; ix += 2; } - - for(i = 0; i < SKIDMARK_LENGTH; i++){ - RwIm3DVertexSetU(&SkidmarkVertices[i*2 + 0], 0.0f); - RwIm3DVertexSetV(&SkidmarkVertices[i*2 + 0], i*5.01f); - RwIm3DVertexSetU(&SkidmarkVertices[i*2 + 1], 1.0f); - RwIm3DVertexSetV(&SkidmarkVertices[i*2 + 1], i*5.01f); - } } void @@ -141,8 +136,12 @@ CSkidmarks::Render(void) p2.y -= aSkidmarks[i].m_sideY[j]; RwIm3DVertexSetRGBA(&SkidmarkVertices[j*2+0], color.red, color.green, color.blue, alpha); RwIm3DVertexSetPos(&SkidmarkVertices[j*2+0], p1.x, p1.y, p1.z+0.1f); + RwIm3DVertexSetU(&SkidmarkVertices[j*2+0], 0.0f); + RwIm3DVertexSetV(&SkidmarkVertices[j*2+0], j*5.01f); RwIm3DVertexSetRGBA(&SkidmarkVertices[j*2+1], color.red, color.green, color.blue, alpha); RwIm3DVertexSetPos(&SkidmarkVertices[j*2+1], p2.x, p2.y, p2.z+0.1f); + RwIm3DVertexSetU(&SkidmarkVertices[j*2+1], 1.0f); + RwIm3DVertexSetV(&SkidmarkVertices[j*2+1], j*5.01f); } LittleTest(); From 43bf8543741e6c153cb8ddc9fc5f1594b332e9d8 Mon Sep 17 00:00:00 2001 From: aap Date: Sun, 9 Aug 2020 19:11:44 +0200 Subject: [PATCH 030/112] timecycle done --- src/control/Script.cpp | 4 +- src/core/re3.cpp | 24 ++- src/render/Timecycle.cpp | 323 +++++++++++++++++++++++++++------------ src/render/Timecycle.h | 238 +++++++++++++++-------------- src/render/Weather.h | 4 +- 5 files changed, 377 insertions(+), 216 deletions(-) diff --git a/src/control/Script.cpp b/src/control/Script.cpp index eb950464..9508677b 100644 --- a/src/control/Script.cpp +++ b/src/control/Script.cpp @@ -12709,13 +12709,13 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command) case COMMAND_SET_EXTRA_COLOURS: { CollectParameters(&m_nIp, 2); - debug("SET_EXTRA_COLOURS not implemented, skipping\n"); + CTimeCycle::StartExtraColour(ScriptParams[0]-1, ScriptParams[1] != 0); return 0; } case COMMAND_CLEAR_EXTRA_COLOURS: { CollectParameters(&m_nIp, 1); - debug("CLEAR_EXTRA_COLOURS not implemented, skipping\n"); + CTimeCycle::StopExtraColour(ScriptParams[0]); return 0; } //case COMMAND_CLOSE_CAR_BOOT: diff --git a/src/core/re3.cpp b/src/core/re3.cpp index 10f0e032..e9c643ac 100644 --- a/src/core/re3.cpp +++ b/src/core/re3.cpp @@ -7,6 +7,7 @@ #include "Credits.h" #include "Camera.h" #include "Weather.h" +#include "Timecycle.h" #include "Clock.h" #include "World.h" #include "Vehicle.h" @@ -406,6 +407,26 @@ DebugMenuPopulate(void) static const char *weathers[] = { "Sunny", "Cloudy", "Rainy", "Foggy", "Extrasunny", "Stormy" }; + static const char *extracols[] = { + "1 - Malibu club", + "2 - Strib club", + "3 - Hotel", + "4 - Bank", + "5 - Police HQ", + "6 - Mall", + "7 - Rifle Range", + "8 - Mansion", + "9 - Dirt ring", + "10 - Blood ring", + "11 - Hot ring", + "12 - Concert hall", + "13 - Auntie Poulets", + "14 - Intro at docks", + "15 - Biker bar", + "16 - Intro cafe", + "17 - Studio", + "18", "19", "20", "21", "22", "23", "24" + }; DebugMenuEntry *e; e = DebugMenuAddVar("Time & Weather", "Current Hour", &CClock::GetHoursRef(), nil, 1, 0, 23, nil); DebugMenuEntrySetWrap(e, true); @@ -416,7 +437,8 @@ DebugMenuPopulate(void) DebugMenuEntrySetWrap(e, true); e = DebugMenuAddVar("Time & Weather", "New Weather", (int16*)&CWeather::NewWeatherType, nil, 1, 0, 5, weathers); DebugMenuEntrySetWrap(e, true); - DebugMenuAddVar("Time & Weather", "Wind", (float*)&CWeather::Wind, nil, 0.1f, 0.0f, 1.0f); + DebugMenuAddVarBool8("Time & Weather", "Extracolours On", &CTimeCycle::m_bExtraColourOn, nil); + DebugMenuAddVar("Time & Weather", "Extracolour", &CTimeCycle::m_ExtraColour, nil, 1, 0, 23, extracols); DebugMenuAddVar("Time & Weather", "Time scale", (float*)&CTimer::GetTimeScale(), nil, 0.1f, 0.0f, 10.0f); DebugMenuAddCmd("Cheats", "Weapon set 1", WeaponCheat1); diff --git a/src/render/Timecycle.cpp b/src/render/Timecycle.cpp index fe898412..7e8ad5e5 100644 --- a/src/render/Timecycle.cpp +++ b/src/render/Timecycle.cpp @@ -10,60 +10,60 @@ #include "FileMgr.h" #include "Timecycle.h" -// TODO(MIAMI): change some of the types here +//--MIAMI: done -int CTimeCycle::m_nAmbientRed[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nAmbientGreen[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nAmbientBlue[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nAmbientRed_Obj[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nAmbientGreen_Obj[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nAmbientBlue_Obj[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nAmbientRed_Bl[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nAmbientGreen_Bl[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nAmbientBlue_Bl[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nAmbientRed_Obj_Bl[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nAmbientGreen_Obj_Bl[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nAmbientBlue_Obj_Bl[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nDirectionalRed[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nDirectionalGreen[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nDirectionalBlue[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nSkyTopRed[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nSkyTopGreen[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nSkyTopBlue[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nSkyBottomRed[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nSkyBottomGreen[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nSkyBottomBlue[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nSunCoreRed[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nSunCoreGreen[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nSunCoreBlue[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nSunCoronaRed[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nSunCoronaGreen[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nSunCoronaBlue[NUMHOURS][NUMWEATHERS]; -float CTimeCycle::m_fSunSize[NUMHOURS][NUMWEATHERS]; -float CTimeCycle::m_fSpriteSize[NUMHOURS][NUMWEATHERS]; -float CTimeCycle::m_fSpriteBrightness[NUMHOURS][NUMWEATHERS]; -short CTimeCycle::m_nShadowStrength[NUMHOURS][NUMWEATHERS]; -short CTimeCycle::m_nLightShadowStrength[NUMHOURS][NUMWEATHERS]; -short CTimeCycle::m_nPoleShadowStrength[NUMHOURS][NUMWEATHERS]; -float CTimeCycle::m_fFogStart[NUMHOURS][NUMWEATHERS]; -float CTimeCycle::m_fFarClip[NUMHOURS][NUMWEATHERS]; -float CTimeCycle::m_fLightsOnGroundBrightness[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nLowCloudsRed[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nLowCloudsGreen[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nLowCloudsBlue[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nFluffyCloudsTopRed[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nFluffyCloudsTopGreen[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nFluffyCloudsTopBlue[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nFluffyCloudsBottomRed[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nFluffyCloudsBottomGreen[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nFluffyCloudsBottomBlue[NUMHOURS][NUMWEATHERS]; -float CTimeCycle::m_fBlurRed[NUMHOURS][NUMWEATHERS]; -float CTimeCycle::m_fBlurGreen[NUMHOURS][NUMWEATHERS]; -float CTimeCycle::m_fBlurBlue[NUMHOURS][NUMWEATHERS]; -float CTimeCycle::m_fWaterRed[NUMHOURS][NUMWEATHERS]; -float CTimeCycle::m_fWaterGreen[NUMHOURS][NUMWEATHERS]; -float CTimeCycle::m_fWaterBlue[NUMHOURS][NUMWEATHERS]; -float CTimeCycle::m_fWaterAlpha[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nAmbientRed[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nAmbientGreen[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nAmbientBlue[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nAmbientRed_Obj[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nAmbientGreen_Obj[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nAmbientBlue_Obj[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nAmbientRed_Bl[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nAmbientGreen_Bl[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nAmbientBlue_Bl[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nAmbientRed_Obj_Bl[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nAmbientGreen_Obj_Bl[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nAmbientBlue_Obj_Bl[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nDirectionalRed[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nDirectionalGreen[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nDirectionalBlue[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nSkyTopRed[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nSkyTopGreen[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nSkyTopBlue[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nSkyBottomRed[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nSkyBottomGreen[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nSkyBottomBlue[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nSunCoreRed[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nSunCoreGreen[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nSunCoreBlue[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nSunCoronaRed[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nSunCoronaGreen[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nSunCoronaBlue[NUMHOURS][NUMWEATHERS]; +int8 CTimeCycle::m_fSunSize[NUMHOURS][NUMWEATHERS]; +int8 CTimeCycle::m_fSpriteSize[NUMHOURS][NUMWEATHERS]; +int8 CTimeCycle::m_fSpriteBrightness[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nShadowStrength[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nLightShadowStrength[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nPoleShadowStrength[NUMHOURS][NUMWEATHERS]; +int16 CTimeCycle::m_fFogStart[NUMHOURS][NUMWEATHERS]; +int16 CTimeCycle::m_fFarClip[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_fLightsOnGroundBrightness[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nLowCloudsRed[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nLowCloudsGreen[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nLowCloudsBlue[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nFluffyCloudsTopRed[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nFluffyCloudsTopGreen[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nFluffyCloudsTopBlue[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nFluffyCloudsBottomRed[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nFluffyCloudsBottomGreen[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_nFluffyCloudsBottomBlue[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_fBlurRed[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_fBlurGreen[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_fBlurBlue[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_fWaterRed[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_fWaterGreen[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_fWaterBlue[NUMHOURS][NUMWEATHERS]; +uint8 CTimeCycle::m_fWaterAlpha[NUMHOURS][NUMWEATHERS]; float CTimeCycle::m_fCurrentAmbientRed; @@ -81,36 +81,36 @@ float CTimeCycle::m_fCurrentAmbientBlue_Obj_Bl; float CTimeCycle::m_fCurrentDirectionalRed; float CTimeCycle::m_fCurrentDirectionalGreen; float CTimeCycle::m_fCurrentDirectionalBlue; -int CTimeCycle::m_nCurrentSkyTopRed; -int CTimeCycle::m_nCurrentSkyTopGreen; -int CTimeCycle::m_nCurrentSkyTopBlue; -int CTimeCycle::m_nCurrentSkyBottomRed; -int CTimeCycle::m_nCurrentSkyBottomGreen; -int CTimeCycle::m_nCurrentSkyBottomBlue; -int CTimeCycle::m_nCurrentSunCoreRed; -int CTimeCycle::m_nCurrentSunCoreGreen; -int CTimeCycle::m_nCurrentSunCoreBlue; -int CTimeCycle::m_nCurrentSunCoronaRed; -int CTimeCycle::m_nCurrentSunCoronaGreen; -int CTimeCycle::m_nCurrentSunCoronaBlue; +int32 CTimeCycle::m_nCurrentSkyTopRed; +int32 CTimeCycle::m_nCurrentSkyTopGreen; +int32 CTimeCycle::m_nCurrentSkyTopBlue; +int32 CTimeCycle::m_nCurrentSkyBottomRed; +int32 CTimeCycle::m_nCurrentSkyBottomGreen; +int32 CTimeCycle::m_nCurrentSkyBottomBlue; +int32 CTimeCycle::m_nCurrentSunCoreRed; +int32 CTimeCycle::m_nCurrentSunCoreGreen; +int32 CTimeCycle::m_nCurrentSunCoreBlue; +int32 CTimeCycle::m_nCurrentSunCoronaRed; +int32 CTimeCycle::m_nCurrentSunCoronaGreen; +int32 CTimeCycle::m_nCurrentSunCoronaBlue; float CTimeCycle::m_fCurrentSunSize; float CTimeCycle::m_fCurrentSpriteSize; float CTimeCycle::m_fCurrentSpriteBrightness; -int CTimeCycle::m_nCurrentShadowStrength; -int CTimeCycle::m_nCurrentLightShadowStrength; -int CTimeCycle::m_nCurrentPoleShadowStrength; +int32 CTimeCycle::m_nCurrentShadowStrength; +int32 CTimeCycle::m_nCurrentLightShadowStrength; +int32 CTimeCycle::m_nCurrentPoleShadowStrength; float CTimeCycle::m_fCurrentFogStart; float CTimeCycle::m_fCurrentFarClip; float CTimeCycle::m_fCurrentLightsOnGroundBrightness; -int CTimeCycle::m_nCurrentLowCloudsRed; -int CTimeCycle::m_nCurrentLowCloudsGreen; -int CTimeCycle::m_nCurrentLowCloudsBlue; -int CTimeCycle::m_nCurrentFluffyCloudsTopRed; -int CTimeCycle::m_nCurrentFluffyCloudsTopGreen; -int CTimeCycle::m_nCurrentFluffyCloudsTopBlue; -int CTimeCycle::m_nCurrentFluffyCloudsBottomRed; -int CTimeCycle::m_nCurrentFluffyCloudsBottomGreen; -int CTimeCycle::m_nCurrentFluffyCloudsBottomBlue; +int32 CTimeCycle::m_nCurrentLowCloudsRed; +int32 CTimeCycle::m_nCurrentLowCloudsGreen; +int32 CTimeCycle::m_nCurrentLowCloudsBlue; +int32 CTimeCycle::m_nCurrentFluffyCloudsTopRed; +int32 CTimeCycle::m_nCurrentFluffyCloudsTopGreen; +int32 CTimeCycle::m_nCurrentFluffyCloudsTopBlue; +int32 CTimeCycle::m_nCurrentFluffyCloudsBottomRed; +int32 CTimeCycle::m_nCurrentFluffyCloudsBottomGreen; +int32 CTimeCycle::m_nCurrentFluffyCloudsBottomBlue; float CTimeCycle::m_fCurrentBlurRed; float CTimeCycle::m_fCurrentBlurGreen; float CTimeCycle::m_fCurrentBlurBlue; @@ -118,13 +118,16 @@ float CTimeCycle::m_fCurrentWaterRed; float CTimeCycle::m_fCurrentWaterGreen; float CTimeCycle::m_fCurrentWaterBlue; float CTimeCycle::m_fCurrentWaterAlpha; -int CTimeCycle::m_nCurrentFogColourRed; -int CTimeCycle::m_nCurrentFogColourGreen; -int CTimeCycle::m_nCurrentFogColourBlue; +int32 CTimeCycle::m_nCurrentFogColourRed; +int32 CTimeCycle::m_nCurrentFogColourGreen; +int32 CTimeCycle::m_nCurrentFogColourBlue; -int CTimeCycle::m_FogReduction; +int32 CTimeCycle::m_FogReduction; +bool CTimeCycle::m_bExtraColourOn; +int32 CTimeCycle::m_ExtraColour; +float CTimeCycle::m_ExtraColourInter; -int CTimeCycle::m_CurrentStoredValue; +int32 CTimeCycle::m_CurrentStoredValue; CVector CTimeCycle::m_VectorToSun[16]; float CTimeCycle::m_fShadowFrontX[16]; float CTimeCycle::m_fShadowFrontY[16]; @@ -133,7 +136,6 @@ float CTimeCycle::m_fShadowSideY[16]; float CTimeCycle::m_fShadowDisplacementX[16]; float CTimeCycle::m_fShadowDisplacementY[16]; - void CTimeCycle::Initialise(void) { @@ -233,15 +235,15 @@ CTimeCycle::Initialise(void) m_nSunCoronaRed[h][w] = sunCoronaR; m_nSunCoronaGreen[h][w] = sunCoronaG; m_nSunCoronaBlue[h][w] = sunCoronaB; - m_fSunSize[h][w] = sunSz; - m_fSpriteSize[h][w] = sprSz; - m_fSpriteBrightness[h][w] = sprBght; + m_fSunSize[h][w] = sunSz * 10.0f; + m_fSpriteSize[h][w] = sprSz * 10.0f; + m_fSpriteBrightness[h][w] = sprBght * 10.0f; m_nShadowStrength[h][w] = shad; m_nLightShadowStrength[h][w] = lightShad; m_nPoleShadowStrength[h][w] = poleShad; m_fFarClip[h][w] = farClp; m_fFogStart[h][w] = fogSt; - m_fLightsOnGroundBrightness[h][w] = lightGnd; + m_fLightsOnGroundBrightness[h][w] = lightGnd * 10.0f; m_nLowCloudsRed[h][w] = cloudR; m_nLowCloudsGreen[h][w] = cloudG; m_nLowCloudsBlue[h][w] = cloudB; @@ -265,6 +267,51 @@ CTimeCycle::Initialise(void) debug("CTimeCycle ready\n"); } +static float interp_c0, interp_c1, interp_c2, interp_c3; + +float CTimeCycle::Interpolate(int8 *a, int8 *b) +{ + return a[CWeather::OldWeatherType] * interp_c0 + + b[CWeather::OldWeatherType] * interp_c1 + + a[CWeather::NewWeatherType] * interp_c2 + + b[CWeather::NewWeatherType] * interp_c3; +} + +float CTimeCycle::Interpolate(uint8 *a, uint8 *b) +{ + return a[CWeather::OldWeatherType] * interp_c0 + + b[CWeather::OldWeatherType] * interp_c1 + + a[CWeather::NewWeatherType] * interp_c2 + + b[CWeather::NewWeatherType] * interp_c3; +} + +float CTimeCycle::Interpolate(int16 *a, int16 *b) +{ + return a[CWeather::OldWeatherType] * interp_c0 + + b[CWeather::OldWeatherType] * interp_c1 + + a[CWeather::NewWeatherType] * interp_c2 + + b[CWeather::NewWeatherType] * interp_c3; +} + +void +CTimeCycle::StartExtraColour(int32 c, bool fade) +{ + m_bExtraColourOn = true; + m_ExtraColour = c; + if(fade) + m_ExtraColourInter = 0.0f; + else + m_ExtraColourInter = 1.0f; +} + +void +CTimeCycle::StopExtraColour(bool fade) +{ + m_bExtraColourOn = false; + if(!fade) + m_ExtraColourInter = 0.0f; +} + void CTimeCycle::Update(void) { @@ -274,12 +321,12 @@ CTimeCycle::Update(void) int w2 = CWeather::NewWeatherType; float timeInterp = (CClock::GetMinutes() + CClock::GetSeconds()/60.0f)/60.0f; // coefficients for a bilinear interpolation - float c0 = (1.0f-timeInterp) * (1.0f-CWeather::InterpolationValue); - float c1 = timeInterp * (1.0f-CWeather::InterpolationValue); - float c2 = (1.0f-timeInterp) * CWeather::InterpolationValue; - float c3 = timeInterp * CWeather::InterpolationValue; + interp_c0 = (1.0f-timeInterp) * (1.0f-CWeather::InterpolationValue); + interp_c1 = timeInterp * (1.0f-CWeather::InterpolationValue); + interp_c2 = (1.0f-timeInterp) * CWeather::InterpolationValue; + interp_c3 = timeInterp * CWeather::InterpolationValue; -#define INTERP(v) v[h1][w1]*c0 + v[h2][w1]*c1 + v[h1][w2]*c2 + v[h2][w2]*c3; +#define INTERP(v) Interpolate(v[h1], v[h2]) m_nCurrentSkyTopRed = INTERP(m_nSkyTopRed); m_nCurrentSkyTopGreen = INTERP(m_nSkyTopGreen); @@ -317,15 +364,15 @@ CTimeCycle::Update(void) m_nCurrentSunCoronaGreen = INTERP(m_nSunCoronaGreen); m_nCurrentSunCoronaBlue = INTERP(m_nSunCoronaBlue); - m_fCurrentSunSize = INTERP(m_fSunSize); - m_fCurrentSpriteSize = INTERP(m_fSpriteSize); - m_fCurrentSpriteBrightness = INTERP(m_fSpriteBrightness); + m_fCurrentSunSize = INTERP(m_fSunSize)/10.0f; + m_fCurrentSpriteSize = INTERP(m_fSpriteSize)/10.0f; + m_fCurrentSpriteBrightness = INTERP(m_fSpriteBrightness)/10.0f; m_nCurrentShadowStrength = INTERP(m_nShadowStrength); m_nCurrentLightShadowStrength = INTERP(m_nLightShadowStrength); m_nCurrentPoleShadowStrength = INTERP(m_nPoleShadowStrength); m_fCurrentFarClip = INTERP(m_fFarClip); m_fCurrentFogStart = INTERP(m_fFogStart); - m_fCurrentLightsOnGroundBrightness = INTERP(m_fLightsOnGroundBrightness); + m_fCurrentLightsOnGroundBrightness = INTERP(m_fLightsOnGroundBrightness)/10.0f; m_nCurrentLowCloudsRed = INTERP(m_nLowCloudsRed); m_nCurrentLowCloudsGreen = INTERP(m_nLowCloudsGreen); @@ -347,6 +394,7 @@ CTimeCycle::Update(void) m_fCurrentWaterGreen = INTERP(m_fWaterGreen); m_fCurrentWaterBlue = INTERP(m_fWaterBlue); m_fCurrentWaterAlpha = INTERP(m_fWaterAlpha); +#undef INTERP if(m_FogReduction != 0) m_fCurrentFarClip = Max(m_fCurrentFarClip, m_FogReduction/64.0f * 650.0f); @@ -360,7 +408,88 @@ CTimeCycle::Update(void) sunPos.z = 0.2f - Cos(sunAngle); sunPos.Normalise(); - // TODO(MIAMI): extra colours + if(m_bExtraColourOn) + m_ExtraColourInter = Min(1.0f, m_ExtraColourInter + CTimer::GetTimeStep()/120.0f); + else + m_ExtraColourInter = Max(-.0f, m_ExtraColourInter - CTimer::GetTimeStep()/120.0f); + if(m_ExtraColourInter > 0.0f){ +#define INTERP(extra,cur) (m_ExtraColourInter*extra[m_ExtraColour][WEATHER_EXTRACOLOURS] + (1.0f-m_ExtraColourInter)*cur) +#define INTERPscl(extra,scl,cur) (m_ExtraColourInter*extra[m_ExtraColour][WEATHER_EXTRACOLOURS]/scl + (1.0f-m_ExtraColourInter)*cur) + if(m_nSkyTopRed[m_ExtraColour][WEATHER_EXTRACOLOURS] != 0 || + m_nSkyTopGreen[m_ExtraColour][WEATHER_EXTRACOLOURS] != 0 || + m_nSkyTopBlue[m_ExtraColour][WEATHER_EXTRACOLOURS] != 0){ + m_nCurrentSkyTopRed = INTERP(m_nSkyTopRed,m_nCurrentSkyTopRed); + m_nCurrentSkyTopGreen = INTERP(m_nSkyTopGreen,m_nCurrentSkyTopGreen); + m_nCurrentSkyTopBlue = INTERP(m_nSkyTopBlue,m_nCurrentSkyTopBlue); + + m_nCurrentSkyBottomRed = INTERP(m_nSkyBottomRed,m_nCurrentSkyBottomRed); + m_nCurrentSkyBottomGreen = INTERP(m_nSkyBottomGreen,m_nCurrentSkyBottomGreen); + m_nCurrentSkyBottomBlue = INTERP(m_nSkyBottomBlue,m_nCurrentSkyBottomBlue); + + m_nCurrentSunCoreRed = INTERP(m_nSunCoreRed,m_nCurrentSunCoreRed); + m_nCurrentSunCoreGreen = INTERP(m_nSunCoreGreen,m_nCurrentSunCoreGreen); + m_nCurrentSunCoreBlue = INTERP(m_nSunCoreBlue,m_nCurrentSunCoreBlue); + + m_nCurrentSunCoronaRed = INTERP(m_nSunCoronaRed,m_nCurrentSunCoronaRed); + m_nCurrentSunCoronaGreen = INTERP(m_nSunCoronaGreen,m_nCurrentSunCoronaGreen); + m_nCurrentSunCoronaBlue = INTERP(m_nSunCoronaBlue,m_nCurrentSunCoronaBlue); + + m_fCurrentSunSize = INTERPscl(m_fSunSize,10.0f,m_fCurrentSunSize); + + m_nCurrentLowCloudsRed = INTERP(m_nLowCloudsRed,m_nCurrentLowCloudsRed); + m_nCurrentLowCloudsGreen = INTERP(m_nLowCloudsGreen,m_nCurrentLowCloudsGreen); + m_nCurrentLowCloudsBlue = INTERP(m_nLowCloudsBlue,m_nCurrentLowCloudsBlue); + + m_nCurrentFluffyCloudsTopRed = INTERP(m_nFluffyCloudsTopRed,m_nCurrentFluffyCloudsTopRed); + m_nCurrentFluffyCloudsTopGreen = INTERP(m_nFluffyCloudsTopGreen,m_nCurrentFluffyCloudsTopGreen); + m_nCurrentFluffyCloudsTopBlue = INTERP(m_nFluffyCloudsTopBlue,m_nCurrentFluffyCloudsTopBlue); + + m_nCurrentFluffyCloudsBottomRed = INTERP(m_nFluffyCloudsBottomRed,m_nCurrentFluffyCloudsBottomRed); + m_nCurrentFluffyCloudsBottomGreen = INTERP(m_nFluffyCloudsBottomGreen,m_nCurrentFluffyCloudsBottomGreen); + m_nCurrentFluffyCloudsBottomBlue = INTERP(m_nFluffyCloudsBottomBlue,m_nCurrentFluffyCloudsBottomBlue); + + m_fCurrentWaterRed = INTERP(m_fWaterRed,m_fCurrentWaterRed); + m_fCurrentWaterGreen = INTERP(m_fWaterGreen,m_fCurrentWaterGreen); + m_fCurrentWaterBlue = INTERP(m_fWaterBlue,m_fCurrentWaterBlue); + m_fCurrentWaterAlpha = INTERP(m_fWaterAlpha,m_fCurrentWaterAlpha); + } + + m_fCurrentAmbientRed = INTERP(m_nAmbientRed,m_fCurrentAmbientRed); + m_fCurrentAmbientGreen = INTERP(m_nAmbientGreen,m_fCurrentAmbientGreen); + m_fCurrentAmbientBlue = INTERP(m_nAmbientBlue,m_fCurrentAmbientBlue); + + m_fCurrentAmbientRed_Obj = INTERP(m_nAmbientRed_Obj,m_fCurrentAmbientRed_Obj); + m_fCurrentAmbientGreen_Obj = INTERP(m_nAmbientGreen_Obj,m_fCurrentAmbientGreen_Obj); + m_fCurrentAmbientBlue_Obj = INTERP(m_nAmbientBlue_Obj,m_fCurrentAmbientBlue_Obj); + + m_fCurrentAmbientRed_Bl = INTERP(m_nAmbientRed_Bl,m_fCurrentAmbientRed_Bl); + m_fCurrentAmbientGreen_Bl = INTERP(m_nAmbientGreen_Bl,m_fCurrentAmbientGreen_Bl); + m_fCurrentAmbientBlue_Bl = INTERP(m_nAmbientBlue_Bl,m_fCurrentAmbientBlue_Bl); + + m_fCurrentAmbientRed_Obj_Bl = INTERP(m_nAmbientRed_Obj_Bl,m_fCurrentAmbientRed_Obj_Bl); + m_fCurrentAmbientGreen_Obj_Bl = INTERP(m_nAmbientGreen_Obj_Bl,m_fCurrentAmbientGreen_Obj_Bl); + m_fCurrentAmbientBlue_Obj_Bl = INTERP(m_nAmbientBlue_Obj_Bl,m_fCurrentAmbientBlue_Obj_Bl); + + m_fCurrentDirectionalRed = INTERP(m_nDirectionalRed,m_fCurrentDirectionalRed); + m_fCurrentDirectionalGreen = INTERP(m_nDirectionalGreen,m_fCurrentDirectionalGreen); + m_fCurrentDirectionalBlue = INTERP(m_nDirectionalBlue,m_fCurrentDirectionalBlue); + + m_fCurrentSpriteSize = INTERPscl(m_fSpriteSize,10.0f,m_fCurrentSpriteSize); + m_fCurrentSpriteBrightness = INTERPscl(m_fSpriteBrightness,10.0f,m_fCurrentSpriteBrightness); + m_nCurrentShadowStrength = INTERP(m_nShadowStrength,m_nCurrentShadowStrength); + m_nCurrentLightShadowStrength = INTERP(m_nLightShadowStrength,m_nCurrentLightShadowStrength); + m_nCurrentPoleShadowStrength = INTERP(m_nPoleShadowStrength,m_nCurrentPoleShadowStrength); + m_fCurrentFarClip = INTERP(m_fFarClip,m_fCurrentFarClip); + m_fCurrentFogStart = INTERP(m_fFogStart,m_fCurrentFogStart); + m_fCurrentLightsOnGroundBrightness = INTERPscl(m_fLightsOnGroundBrightness,10.0f,m_fCurrentLightsOnGroundBrightness); + + m_fCurrentBlurRed = INTERP(m_fBlurRed,m_fCurrentBlurRed); + m_fCurrentBlurGreen = INTERP(m_fBlurGreen,m_fCurrentBlurGreen); + m_fCurrentBlurBlue = INTERP(m_fBlurBlue,m_fCurrentBlurBlue); + +#undef INTERP +#undef INTERPscl + } if(TheCamera.m_BlurType == MOTION_BLUR_NONE || TheCamera.m_BlurType == MOTION_BLUR_LIGHT_SCENE) TheCamera.SetMotionBlur(m_fCurrentBlurRed, m_fCurrentBlurGreen, m_fCurrentBlurBlue, 5, MOTION_BLUR_LIGHT_SCENE); diff --git a/src/render/Timecycle.h b/src/render/Timecycle.h index 832b36e2..ad079a95 100644 --- a/src/render/Timecycle.h +++ b/src/render/Timecycle.h @@ -2,58 +2,58 @@ class CTimeCycle { - static int m_nAmbientRed[NUMHOURS][NUMWEATHERS]; - static int m_nAmbientGreen[NUMHOURS][NUMWEATHERS]; - static int m_nAmbientBlue[NUMHOURS][NUMWEATHERS]; - static int m_nAmbientRed_Obj[NUMHOURS][NUMWEATHERS]; - static int m_nAmbientGreen_Obj[NUMHOURS][NUMWEATHERS]; - static int m_nAmbientBlue_Obj[NUMHOURS][NUMWEATHERS]; - static int m_nAmbientRed_Bl[NUMHOURS][NUMWEATHERS]; - static int m_nAmbientGreen_Bl[NUMHOURS][NUMWEATHERS]; - static int m_nAmbientBlue_Bl[NUMHOURS][NUMWEATHERS]; - static int m_nAmbientRed_Obj_Bl[NUMHOURS][NUMWEATHERS]; - static int m_nAmbientGreen_Obj_Bl[NUMHOURS][NUMWEATHERS]; - static int m_nAmbientBlue_Obj_Bl[NUMHOURS][NUMWEATHERS]; - static int m_nDirectionalRed[NUMHOURS][NUMWEATHERS]; - static int m_nDirectionalGreen[NUMHOURS][NUMWEATHERS]; - static int m_nDirectionalBlue[NUMHOURS][NUMWEATHERS]; - static int m_nSkyTopRed[NUMHOURS][NUMWEATHERS]; - static int m_nSkyTopGreen[NUMHOURS][NUMWEATHERS]; - static int m_nSkyTopBlue[NUMHOURS][NUMWEATHERS]; - static int m_nSkyBottomRed[NUMHOURS][NUMWEATHERS]; - static int m_nSkyBottomGreen[NUMHOURS][NUMWEATHERS]; - static int m_nSkyBottomBlue[NUMHOURS][NUMWEATHERS]; - static int m_nSunCoreRed[NUMHOURS][NUMWEATHERS]; - static int m_nSunCoreGreen[NUMHOURS][NUMWEATHERS]; - static int m_nSunCoreBlue[NUMHOURS][NUMWEATHERS]; - static int m_nSunCoronaRed[NUMHOURS][NUMWEATHERS]; - static int m_nSunCoronaGreen[NUMHOURS][NUMWEATHERS]; - static int m_nSunCoronaBlue[NUMHOURS][NUMWEATHERS]; - static float m_fSunSize[NUMHOURS][NUMWEATHERS]; - static float m_fSpriteSize[NUMHOURS][NUMWEATHERS]; - static float m_fSpriteBrightness[NUMHOURS][NUMWEATHERS]; - static short m_nShadowStrength[NUMHOURS][NUMWEATHERS]; - static short m_nLightShadowStrength[NUMHOURS][NUMWEATHERS]; - static short m_nPoleShadowStrength[NUMHOURS][NUMWEATHERS]; - static float m_fFogStart[NUMHOURS][NUMWEATHERS]; - static float m_fFarClip[NUMHOURS][NUMWEATHERS]; - static float m_fLightsOnGroundBrightness[NUMHOURS][NUMWEATHERS]; - static int m_nLowCloudsRed[NUMHOURS][NUMWEATHERS]; - static int m_nLowCloudsGreen[NUMHOURS][NUMWEATHERS]; - static int m_nLowCloudsBlue[NUMHOURS][NUMWEATHERS]; - static int m_nFluffyCloudsTopRed[NUMHOURS][NUMWEATHERS]; - static int m_nFluffyCloudsTopGreen[NUMHOURS][NUMWEATHERS]; - static int m_nFluffyCloudsTopBlue[NUMHOURS][NUMWEATHERS]; - static int m_nFluffyCloudsBottomRed[NUMHOURS][NUMWEATHERS]; - static int m_nFluffyCloudsBottomGreen[NUMHOURS][NUMWEATHERS]; - static int m_nFluffyCloudsBottomBlue[NUMHOURS][NUMWEATHERS]; - static float m_fBlurRed[NUMHOURS][NUMWEATHERS]; - static float m_fBlurGreen[NUMHOURS][NUMWEATHERS]; - static float m_fBlurBlue[NUMHOURS][NUMWEATHERS]; - static float m_fWaterRed[NUMHOURS][NUMWEATHERS]; - static float m_fWaterGreen[NUMHOURS][NUMWEATHERS]; - static float m_fWaterBlue[NUMHOURS][NUMWEATHERS]; - static float m_fWaterAlpha[NUMHOURS][NUMWEATHERS]; + static uint8 m_nAmbientRed[NUMHOURS][NUMWEATHERS]; + static uint8 m_nAmbientGreen[NUMHOURS][NUMWEATHERS]; + static uint8 m_nAmbientBlue[NUMHOURS][NUMWEATHERS]; + static uint8 m_nAmbientRed_Obj[NUMHOURS][NUMWEATHERS]; + static uint8 m_nAmbientGreen_Obj[NUMHOURS][NUMWEATHERS]; + static uint8 m_nAmbientBlue_Obj[NUMHOURS][NUMWEATHERS]; + static uint8 m_nAmbientRed_Bl[NUMHOURS][NUMWEATHERS]; + static uint8 m_nAmbientGreen_Bl[NUMHOURS][NUMWEATHERS]; + static uint8 m_nAmbientBlue_Bl[NUMHOURS][NUMWEATHERS]; + static uint8 m_nAmbientRed_Obj_Bl[NUMHOURS][NUMWEATHERS]; + static uint8 m_nAmbientGreen_Obj_Bl[NUMHOURS][NUMWEATHERS]; + static uint8 m_nAmbientBlue_Obj_Bl[NUMHOURS][NUMWEATHERS]; + static uint8 m_nDirectionalRed[NUMHOURS][NUMWEATHERS]; + static uint8 m_nDirectionalGreen[NUMHOURS][NUMWEATHERS]; + static uint8 m_nDirectionalBlue[NUMHOURS][NUMWEATHERS]; + static uint8 m_nSkyTopRed[NUMHOURS][NUMWEATHERS]; + static uint8 m_nSkyTopGreen[NUMHOURS][NUMWEATHERS]; + static uint8 m_nSkyTopBlue[NUMHOURS][NUMWEATHERS]; + static uint8 m_nSkyBottomRed[NUMHOURS][NUMWEATHERS]; + static uint8 m_nSkyBottomGreen[NUMHOURS][NUMWEATHERS]; + static uint8 m_nSkyBottomBlue[NUMHOURS][NUMWEATHERS]; + static uint8 m_nSunCoreRed[NUMHOURS][NUMWEATHERS]; + static uint8 m_nSunCoreGreen[NUMHOURS][NUMWEATHERS]; + static uint8 m_nSunCoreBlue[NUMHOURS][NUMWEATHERS]; + static uint8 m_nSunCoronaRed[NUMHOURS][NUMWEATHERS]; + static uint8 m_nSunCoronaGreen[NUMHOURS][NUMWEATHERS]; + static uint8 m_nSunCoronaBlue[NUMHOURS][NUMWEATHERS]; + static int8 m_fSunSize[NUMHOURS][NUMWEATHERS]; + static int8 m_fSpriteSize[NUMHOURS][NUMWEATHERS]; + static int8 m_fSpriteBrightness[NUMHOURS][NUMWEATHERS]; + static uint8 m_nShadowStrength[NUMHOURS][NUMWEATHERS]; + static uint8 m_nLightShadowStrength[NUMHOURS][NUMWEATHERS]; + static uint8 m_nPoleShadowStrength[NUMHOURS][NUMWEATHERS]; + static int16 m_fFogStart[NUMHOURS][NUMWEATHERS]; + static int16 m_fFarClip[NUMHOURS][NUMWEATHERS]; + static uint8 m_fLightsOnGroundBrightness[NUMHOURS][NUMWEATHERS]; + static uint8 m_nLowCloudsRed[NUMHOURS][NUMWEATHERS]; + static uint8 m_nLowCloudsGreen[NUMHOURS][NUMWEATHERS]; + static uint8 m_nLowCloudsBlue[NUMHOURS][NUMWEATHERS]; + static uint8 m_nFluffyCloudsTopRed[NUMHOURS][NUMWEATHERS]; + static uint8 m_nFluffyCloudsTopGreen[NUMHOURS][NUMWEATHERS]; + static uint8 m_nFluffyCloudsTopBlue[NUMHOURS][NUMWEATHERS]; + static uint8 m_nFluffyCloudsBottomRed[NUMHOURS][NUMWEATHERS]; + static uint8 m_nFluffyCloudsBottomGreen[NUMHOURS][NUMWEATHERS]; + static uint8 m_nFluffyCloudsBottomBlue[NUMHOURS][NUMWEATHERS]; + static uint8 m_fBlurRed[NUMHOURS][NUMWEATHERS]; + static uint8 m_fBlurGreen[NUMHOURS][NUMWEATHERS]; + static uint8 m_fBlurBlue[NUMHOURS][NUMWEATHERS]; + static uint8 m_fWaterRed[NUMHOURS][NUMWEATHERS]; + static uint8 m_fWaterGreen[NUMHOURS][NUMWEATHERS]; + static uint8 m_fWaterBlue[NUMHOURS][NUMWEATHERS]; + static uint8 m_fWaterAlpha[NUMHOURS][NUMWEATHERS]; static float m_fCurrentAmbientRed; static float m_fCurrentAmbientGreen; @@ -70,36 +70,36 @@ class CTimeCycle static float m_fCurrentDirectionalRed; static float m_fCurrentDirectionalGreen; static float m_fCurrentDirectionalBlue; - static int m_nCurrentSkyTopRed; - static int m_nCurrentSkyTopGreen; - static int m_nCurrentSkyTopBlue; - static int m_nCurrentSkyBottomRed; - static int m_nCurrentSkyBottomGreen; - static int m_nCurrentSkyBottomBlue; - static int m_nCurrentSunCoreRed; - static int m_nCurrentSunCoreGreen; - static int m_nCurrentSunCoreBlue; - static int m_nCurrentSunCoronaRed; - static int m_nCurrentSunCoronaGreen; - static int m_nCurrentSunCoronaBlue; + static int32 m_nCurrentSkyTopRed; + static int32 m_nCurrentSkyTopGreen; + static int32 m_nCurrentSkyTopBlue; + static int32 m_nCurrentSkyBottomRed; + static int32 m_nCurrentSkyBottomGreen; + static int32 m_nCurrentSkyBottomBlue; + static int32 m_nCurrentSunCoreRed; + static int32 m_nCurrentSunCoreGreen; + static int32 m_nCurrentSunCoreBlue; + static int32 m_nCurrentSunCoronaRed; + static int32 m_nCurrentSunCoronaGreen; + static int32 m_nCurrentSunCoronaBlue; static float m_fCurrentSunSize; static float m_fCurrentSpriteSize; static float m_fCurrentSpriteBrightness; - static int m_nCurrentShadowStrength; - static int m_nCurrentLightShadowStrength; - static int m_nCurrentPoleShadowStrength; + static int32 m_nCurrentShadowStrength; + static int32 m_nCurrentLightShadowStrength; + static int32 m_nCurrentPoleShadowStrength; static float m_fCurrentFogStart; static float m_fCurrentFarClip; static float m_fCurrentLightsOnGroundBrightness; - static int m_nCurrentLowCloudsRed; - static int m_nCurrentLowCloudsGreen; - static int m_nCurrentLowCloudsBlue; - static int m_nCurrentFluffyCloudsTopRed; - static int m_nCurrentFluffyCloudsTopGreen; - static int m_nCurrentFluffyCloudsTopBlue; - static int m_nCurrentFluffyCloudsBottomRed; - static int m_nCurrentFluffyCloudsBottomGreen; - static int m_nCurrentFluffyCloudsBottomBlue; + static int32 m_nCurrentLowCloudsRed; + static int32 m_nCurrentLowCloudsGreen; + static int32 m_nCurrentLowCloudsBlue; + static int32 m_nCurrentFluffyCloudsTopRed; + static int32 m_nCurrentFluffyCloudsTopGreen; + static int32 m_nCurrentFluffyCloudsTopBlue; + static int32 m_nCurrentFluffyCloudsBottomRed; + static int32 m_nCurrentFluffyCloudsBottomGreen; + static int32 m_nCurrentFluffyCloudsBottomBlue; static float m_fCurrentBlurRed; static float m_fCurrentBlurGreen; static float m_fCurrentBlurBlue; @@ -107,14 +107,17 @@ class CTimeCycle static float m_fCurrentWaterGreen; static float m_fCurrentWaterBlue; static float m_fCurrentWaterAlpha; - static int m_nCurrentFogColourRed; - static int m_nCurrentFogColourGreen; - static int m_nCurrentFogColourBlue; + static int32 m_nCurrentFogColourRed; + static int32 m_nCurrentFogColourGreen; + static int32 m_nCurrentFogColourBlue; - static int m_FogReduction; + static int32 m_FogReduction; public: - static int m_CurrentStoredValue; + static bool m_bExtraColourOn; + static int32 m_ExtraColour; + static float m_ExtraColourInter; + static int32 m_CurrentStoredValue; static CVector m_VectorToSun[16]; static float m_fShadowFrontX[16]; static float m_fShadowFrontY[16]; @@ -138,51 +141,56 @@ public: static float GetDirectionalRed(void) { return m_fCurrentDirectionalRed; } static float GetDirectionalGreen(void) { return m_fCurrentDirectionalGreen; } static float GetDirectionalBlue(void) { return m_fCurrentDirectionalBlue; } - static int GetSkyTopRed(void) { return m_nCurrentSkyTopRed; } - static int GetSkyTopGreen(void) { return m_nCurrentSkyTopGreen; } - static int GetSkyTopBlue(void) { return m_nCurrentSkyTopBlue; } - static int GetSkyBottomRed(void) { return m_nCurrentSkyBottomRed; } - static int GetSkyBottomGreen(void) { return m_nCurrentSkyBottomGreen; } - static int GetSkyBottomBlue(void) { return m_nCurrentSkyBottomBlue; } - static int GetSunCoreRed(void) { return m_nCurrentSunCoreRed; } - static int GetSunCoreGreen(void) { return m_nCurrentSunCoreGreen; } - static int GetSunCoreBlue(void) { return m_nCurrentSunCoreBlue; } - static int GetSunCoronaRed(void) { return m_nCurrentSunCoronaRed; } - static int GetSunCoronaGreen(void) { return m_nCurrentSunCoronaGreen; } - static int GetSunCoronaBlue(void) { return m_nCurrentSunCoronaBlue; } + static int32 GetSkyTopRed(void) { return m_nCurrentSkyTopRed; } + static int32 GetSkyTopGreen(void) { return m_nCurrentSkyTopGreen; } + static int32 GetSkyTopBlue(void) { return m_nCurrentSkyTopBlue; } + static int32 GetSkyBottomRed(void) { return m_nCurrentSkyBottomRed; } + static int32 GetSkyBottomGreen(void) { return m_nCurrentSkyBottomGreen; } + static int32 GetSkyBottomBlue(void) { return m_nCurrentSkyBottomBlue; } + static int32 GetSunCoreRed(void) { return m_nCurrentSunCoreRed; } + static int32 GetSunCoreGreen(void) { return m_nCurrentSunCoreGreen; } + static int32 GetSunCoreBlue(void) { return m_nCurrentSunCoreBlue; } + static int32 GetSunCoronaRed(void) { return m_nCurrentSunCoronaRed; } + static int32 GetSunCoronaGreen(void) { return m_nCurrentSunCoronaGreen; } + static int32 GetSunCoronaBlue(void) { return m_nCurrentSunCoronaBlue; } static float GetSunSize(void) { return m_fCurrentSunSize; } static float GetSpriteBrightness(void) { return m_fCurrentSpriteBrightness; } static float GetSpriteSize(void) { return m_fCurrentSpriteSize; } - static int GetShadowStrength(void) { return m_nCurrentShadowStrength; } - static int GetLightShadowStrength(void) { return m_nCurrentLightShadowStrength; } + static int32 GetShadowStrength(void) { return m_nCurrentShadowStrength; } + static int32 GetLightShadowStrength(void) { return m_nCurrentLightShadowStrength; } static float GetLightOnGroundBrightness(void) { return m_fCurrentLightsOnGroundBrightness; } static float GetFarClip(void) { return m_fCurrentFarClip; } static float GetFogStart(void) { return m_fCurrentFogStart; } - static int GetLowCloudsRed(void) { return m_nCurrentLowCloudsRed; } - static int GetLowCloudsGreen(void) { return m_nCurrentLowCloudsGreen; } - static int GetLowCloudsBlue(void) { return m_nCurrentLowCloudsBlue; } - static int GetFluffyCloudsTopRed(void) { return m_nCurrentFluffyCloudsTopRed; } - static int GetFluffyCloudsTopGreen(void) { return m_nCurrentFluffyCloudsTopGreen; } - static int GetFluffyCloudsTopBlue(void) { return m_nCurrentFluffyCloudsTopBlue; } - static int GetFluffyCloudsBottomRed(void) { return m_nCurrentFluffyCloudsBottomRed; } - static int GetFluffyCloudsBottomGreen(void) { return m_nCurrentFluffyCloudsBottomGreen; } - static int GetFluffyCloudsBottomBlue(void) { return m_nCurrentFluffyCloudsBottomBlue; } - static int GetFogRed(void) { return m_nCurrentFogColourRed; } - static int GetFogGreen(void) { return m_nCurrentFogColourGreen; } - static int GetFogBlue(void) { return m_nCurrentFogColourBlue; } - static int GetFogReduction(void) { return m_FogReduction; } + static int32 GetLowCloudsRed(void) { return m_nCurrentLowCloudsRed; } + static int32 GetLowCloudsGreen(void) { return m_nCurrentLowCloudsGreen; } + static int32 GetLowCloudsBlue(void) { return m_nCurrentLowCloudsBlue; } + static int32 GetFluffyCloudsTopRed(void) { return m_nCurrentFluffyCloudsTopRed; } + static int32 GetFluffyCloudsTopGreen(void) { return m_nCurrentFluffyCloudsTopGreen; } + static int32 GetFluffyCloudsTopBlue(void) { return m_nCurrentFluffyCloudsTopBlue; } + static int32 GetFluffyCloudsBottomRed(void) { return m_nCurrentFluffyCloudsBottomRed; } + static int32 GetFluffyCloudsBottomGreen(void) { return m_nCurrentFluffyCloudsBottomGreen; } + static int32 GetFluffyCloudsBottomBlue(void) { return m_nCurrentFluffyCloudsBottomBlue; } + static int32 GetFogRed(void) { return m_nCurrentFogColourRed; } + static int32 GetFogGreen(void) { return m_nCurrentFogColourGreen; } + static int32 GetFogBlue(void) { return m_nCurrentFogColourBlue; } + static int32 GetFogReduction(void) { return m_FogReduction; } - static int GetBlurRed(void) { return m_fCurrentBlurRed; } - static int GetBlurGreen(void) { return m_fCurrentBlurGreen; } - static int GetBlurBlue(void) { return m_fCurrentBlurBlue; } - static int GetWaterRed(void) { return m_fCurrentWaterRed; } - static int GetWaterGreen(void) { return m_fCurrentWaterGreen; } - static int GetWaterBlue(void) { return m_fCurrentWaterBlue; } - static int GetWaterAlpha(void) { return m_fCurrentWaterAlpha; } + static int32 GetBlurRed(void) { return m_fCurrentBlurRed; } + static int32 GetBlurGreen(void) { return m_fCurrentBlurGreen; } + static int32 GetBlurBlue(void) { return m_fCurrentBlurBlue; } + static int32 GetWaterRed(void) { return m_fCurrentWaterRed; } + static int32 GetWaterGreen(void) { return m_fCurrentWaterGreen; } + static int32 GetWaterBlue(void) { return m_fCurrentWaterBlue; } + static int32 GetWaterAlpha(void) { return m_fCurrentWaterAlpha; } static void Initialise(void); static void Update(void); + static float Interpolate(int8 *a, int8 *b); + static float Interpolate(uint8 *a, uint8 *b); + static float Interpolate(int16 *a, int16 *b); + static void StartExtraColour(int32 c, bool fade); + static void StopExtraColour(bool fade); static CVector &GetSunDirection(void) { return m_VectorToSun[m_CurrentStoredValue]; } static float GetShadowFrontX(void) { return m_fShadowFrontX[m_CurrentStoredValue]; } static float GetShadowFrontY(void) { return m_fShadowFrontY[m_CurrentStoredValue]; } diff --git a/src/render/Weather.h b/src/render/Weather.h index ae09e5d1..809bb787 100644 --- a/src/render/Weather.h +++ b/src/render/Weather.h @@ -6,7 +6,9 @@ enum { WEATHER_FOGGY, WEATHER_EXTRA_SUNNY, WEATHER_HURRICANE, - WEATHER_TOTAL + WEATHER_TOTAL, + + WEATHER_EXTRACOLOURS = 6 }; class CWeather From a149d9d511e432fbaa36382407fd14a8524c9e59 Mon Sep 17 00:00:00 2001 From: aap Date: Sun, 9 Aug 2020 19:32:32 +0200 Subject: [PATCH 031/112] little timecycle cleanup --- src/render/Timecycle.cpp | 120 +++++++++++++-------------- src/render/Timecycle.h | 172 +++++++++++++++++++-------------------- 2 files changed, 146 insertions(+), 146 deletions(-) diff --git a/src/render/Timecycle.cpp b/src/render/Timecycle.cpp index 162983dd..0d94dbd6 100644 --- a/src/render/Timecycle.cpp +++ b/src/render/Timecycle.cpp @@ -10,42 +10,42 @@ #include "FileMgr.h" #include "Timecycle.h" -int CTimeCycle::m_nAmbientRed[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nAmbientGreen[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nAmbientBlue[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nDirectionalRed[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nDirectionalGreen[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nDirectionalBlue[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nSkyTopRed[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nSkyTopGreen[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nSkyTopBlue[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nSkyBottomRed[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nSkyBottomGreen[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nSkyBottomBlue[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nSunCoreRed[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nSunCoreGreen[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nSunCoreBlue[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nSunCoronaRed[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nSunCoronaGreen[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nSunCoronaBlue[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nAmbientRed[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nAmbientGreen[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nAmbientBlue[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nDirectionalRed[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nDirectionalGreen[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nDirectionalBlue[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nSkyTopRed[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nSkyTopGreen[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nSkyTopBlue[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nSkyBottomRed[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nSkyBottomGreen[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nSkyBottomBlue[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nSunCoreRed[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nSunCoreGreen[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nSunCoreBlue[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nSunCoronaRed[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nSunCoronaGreen[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nSunCoronaBlue[NUMHOURS][NUMWEATHERS]; float CTimeCycle::m_fSunSize[NUMHOURS][NUMWEATHERS]; float CTimeCycle::m_fSpriteSize[NUMHOURS][NUMWEATHERS]; float CTimeCycle::m_fSpriteBrightness[NUMHOURS][NUMWEATHERS]; -short CTimeCycle::m_nShadowStrength[NUMHOURS][NUMWEATHERS]; -short CTimeCycle::m_nLightShadowStrength[NUMHOURS][NUMWEATHERS]; -short CTimeCycle::m_nTreeShadowStrength[NUMHOURS][NUMWEATHERS]; +int16 CTimeCycle::m_nShadowStrength[NUMHOURS][NUMWEATHERS]; +int16 CTimeCycle::m_nLightShadowStrength[NUMHOURS][NUMWEATHERS]; +int16 CTimeCycle::m_nTreeShadowStrength[NUMHOURS][NUMWEATHERS]; float CTimeCycle::m_fFogStart[NUMHOURS][NUMWEATHERS]; float CTimeCycle::m_fFarClip[NUMHOURS][NUMWEATHERS]; float CTimeCycle::m_fLightsOnGroundBrightness[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nLowCloudsRed[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nLowCloudsGreen[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nLowCloudsBlue[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nFluffyCloudsTopRed[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nFluffyCloudsTopGreen[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nFluffyCloudsTopBlue[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nFluffyCloudsBottomRed[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nFluffyCloudsBottomGreen[NUMHOURS][NUMWEATHERS]; -int CTimeCycle::m_nFluffyCloudsBottomBlue[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nLowCloudsRed[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nLowCloudsGreen[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nLowCloudsBlue[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nFluffyCloudsTopRed[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nFluffyCloudsTopGreen[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nFluffyCloudsTopBlue[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nFluffyCloudsBottomRed[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nFluffyCloudsBottomGreen[NUMHOURS][NUMWEATHERS]; +int32 CTimeCycle::m_nFluffyCloudsBottomBlue[NUMHOURS][NUMWEATHERS]; float CTimeCycle::m_fBlurRed[NUMHOURS][NUMWEATHERS]; float CTimeCycle::m_fBlurGreen[NUMHOURS][NUMWEATHERS]; float CTimeCycle::m_fBlurBlue[NUMHOURS][NUMWEATHERS]; @@ -57,47 +57,47 @@ float CTimeCycle::m_fCurrentAmbientBlue; float CTimeCycle::m_fCurrentDirectionalRed; float CTimeCycle::m_fCurrentDirectionalGreen; float CTimeCycle::m_fCurrentDirectionalBlue; -int CTimeCycle::m_nCurrentSkyTopRed; -int CTimeCycle::m_nCurrentSkyTopGreen; -int CTimeCycle::m_nCurrentSkyTopBlue; -int CTimeCycle::m_nCurrentSkyBottomRed; -int CTimeCycle::m_nCurrentSkyBottomGreen; -int CTimeCycle::m_nCurrentSkyBottomBlue; -int CTimeCycle::m_nCurrentSunCoreRed; -int CTimeCycle::m_nCurrentSunCoreGreen; -int CTimeCycle::m_nCurrentSunCoreBlue; -int CTimeCycle::m_nCurrentSunCoronaRed; -int CTimeCycle::m_nCurrentSunCoronaGreen; -int CTimeCycle::m_nCurrentSunCoronaBlue; +int32 CTimeCycle::m_nCurrentSkyTopRed; +int32 CTimeCycle::m_nCurrentSkyTopGreen; +int32 CTimeCycle::m_nCurrentSkyTopBlue; +int32 CTimeCycle::m_nCurrentSkyBottomRed; +int32 CTimeCycle::m_nCurrentSkyBottomGreen; +int32 CTimeCycle::m_nCurrentSkyBottomBlue; +int32 CTimeCycle::m_nCurrentSunCoreRed; +int32 CTimeCycle::m_nCurrentSunCoreGreen; +int32 CTimeCycle::m_nCurrentSunCoreBlue; +int32 CTimeCycle::m_nCurrentSunCoronaRed; +int32 CTimeCycle::m_nCurrentSunCoronaGreen; +int32 CTimeCycle::m_nCurrentSunCoronaBlue; float CTimeCycle::m_fCurrentSunSize; float CTimeCycle::m_fCurrentSpriteSize; float CTimeCycle::m_fCurrentSpriteBrightness; -int CTimeCycle::m_nCurrentShadowStrength; -int CTimeCycle::m_nCurrentLightShadowStrength; -int CTimeCycle::m_nCurrentTreeShadowStrength; +int32 CTimeCycle::m_nCurrentShadowStrength; +int32 CTimeCycle::m_nCurrentLightShadowStrength; +int32 CTimeCycle::m_nCurrentTreeShadowStrength; float CTimeCycle::m_fCurrentFogStart; float CTimeCycle::m_fCurrentFarClip; float CTimeCycle::m_fCurrentLightsOnGroundBrightness; -int CTimeCycle::m_nCurrentLowCloudsRed; -int CTimeCycle::m_nCurrentLowCloudsGreen; -int CTimeCycle::m_nCurrentLowCloudsBlue; -int CTimeCycle::m_nCurrentFluffyCloudsTopRed; -int CTimeCycle::m_nCurrentFluffyCloudsTopGreen; -int CTimeCycle::m_nCurrentFluffyCloudsTopBlue; -int CTimeCycle::m_nCurrentFluffyCloudsBottomRed; -int CTimeCycle::m_nCurrentFluffyCloudsBottomGreen; -int CTimeCycle::m_nCurrentFluffyCloudsBottomBlue; +int32 CTimeCycle::m_nCurrentLowCloudsRed; +int32 CTimeCycle::m_nCurrentLowCloudsGreen; +int32 CTimeCycle::m_nCurrentLowCloudsBlue; +int32 CTimeCycle::m_nCurrentFluffyCloudsTopRed; +int32 CTimeCycle::m_nCurrentFluffyCloudsTopGreen; +int32 CTimeCycle::m_nCurrentFluffyCloudsTopBlue; +int32 CTimeCycle::m_nCurrentFluffyCloudsBottomRed; +int32 CTimeCycle::m_nCurrentFluffyCloudsBottomGreen; +int32 CTimeCycle::m_nCurrentFluffyCloudsBottomBlue; float CTimeCycle::m_fCurrentBlurRed; float CTimeCycle::m_fCurrentBlurGreen; float CTimeCycle::m_fCurrentBlurBlue; float CTimeCycle::m_fCurrentBlurAlpha; -int CTimeCycle::m_nCurrentFogColourRed; -int CTimeCycle::m_nCurrentFogColourGreen; -int CTimeCycle::m_nCurrentFogColourBlue; +int32 CTimeCycle::m_nCurrentFogColourRed; +int32 CTimeCycle::m_nCurrentFogColourGreen; +int32 CTimeCycle::m_nCurrentFogColourBlue; -int CTimeCycle::m_FogReduction; +int32 CTimeCycle::m_FogReduction; -int CTimeCycle::m_CurrentStoredValue; +int32 CTimeCycle::m_CurrentStoredValue; CVector CTimeCycle::m_VectorToSun[16]; float CTimeCycle::m_fShadowFrontX[16]; float CTimeCycle::m_fShadowFrontY[16]; @@ -227,7 +227,7 @@ CTimeCycle::Update(void) float c2 = (1.0f-timeInterp) * CWeather::InterpolationValue; float c3 = timeInterp * CWeather::InterpolationValue; -#define INTERP(v) v[h1][w1]*c0 + v[h2][w1]*c1 + v[h1][w2]*c2 + v[h2][w2]*c3; +#define INTERP(v) v[h1][w1]*c0 + v[h2][w1]*c1 + v[h1][w2]*c2 + v[h2][w2]*c3 m_nCurrentSkyTopRed = INTERP(m_nSkyTopRed); m_nCurrentSkyTopGreen = INTERP(m_nSkyTopGreen); diff --git a/src/render/Timecycle.h b/src/render/Timecycle.h index 0cb02b67..d5d7b67a 100644 --- a/src/render/Timecycle.h +++ b/src/render/Timecycle.h @@ -2,42 +2,42 @@ class CTimeCycle { - static int m_nAmbientRed[NUMHOURS][NUMWEATHERS]; - static int m_nAmbientGreen[NUMHOURS][NUMWEATHERS]; - static int m_nAmbientBlue[NUMHOURS][NUMWEATHERS]; - static int m_nDirectionalRed[NUMHOURS][NUMWEATHERS]; - static int m_nDirectionalGreen[NUMHOURS][NUMWEATHERS]; - static int m_nDirectionalBlue[NUMHOURS][NUMWEATHERS]; - static int m_nSkyTopRed[NUMHOURS][NUMWEATHERS]; - static int m_nSkyTopGreen[NUMHOURS][NUMWEATHERS]; - static int m_nSkyTopBlue[NUMHOURS][NUMWEATHERS]; - static int m_nSkyBottomRed[NUMHOURS][NUMWEATHERS]; - static int m_nSkyBottomGreen[NUMHOURS][NUMWEATHERS]; - static int m_nSkyBottomBlue[NUMHOURS][NUMWEATHERS]; - static int m_nSunCoreRed[NUMHOURS][NUMWEATHERS]; - static int m_nSunCoreGreen[NUMHOURS][NUMWEATHERS]; - static int m_nSunCoreBlue[NUMHOURS][NUMWEATHERS]; - static int m_nSunCoronaRed[NUMHOURS][NUMWEATHERS]; - static int m_nSunCoronaGreen[NUMHOURS][NUMWEATHERS]; - static int m_nSunCoronaBlue[NUMHOURS][NUMWEATHERS]; + static int32 m_nAmbientRed[NUMHOURS][NUMWEATHERS]; + static int32 m_nAmbientGreen[NUMHOURS][NUMWEATHERS]; + static int32 m_nAmbientBlue[NUMHOURS][NUMWEATHERS]; + static int32 m_nDirectionalRed[NUMHOURS][NUMWEATHERS]; + static int32 m_nDirectionalGreen[NUMHOURS][NUMWEATHERS]; + static int32 m_nDirectionalBlue[NUMHOURS][NUMWEATHERS]; + static int32 m_nSkyTopRed[NUMHOURS][NUMWEATHERS]; + static int32 m_nSkyTopGreen[NUMHOURS][NUMWEATHERS]; + static int32 m_nSkyTopBlue[NUMHOURS][NUMWEATHERS]; + static int32 m_nSkyBottomRed[NUMHOURS][NUMWEATHERS]; + static int32 m_nSkyBottomGreen[NUMHOURS][NUMWEATHERS]; + static int32 m_nSkyBottomBlue[NUMHOURS][NUMWEATHERS]; + static int32 m_nSunCoreRed[NUMHOURS][NUMWEATHERS]; + static int32 m_nSunCoreGreen[NUMHOURS][NUMWEATHERS]; + static int32 m_nSunCoreBlue[NUMHOURS][NUMWEATHERS]; + static int32 m_nSunCoronaRed[NUMHOURS][NUMWEATHERS]; + static int32 m_nSunCoronaGreen[NUMHOURS][NUMWEATHERS]; + static int32 m_nSunCoronaBlue[NUMHOURS][NUMWEATHERS]; static float m_fSunSize[NUMHOURS][NUMWEATHERS]; static float m_fSpriteSize[NUMHOURS][NUMWEATHERS]; static float m_fSpriteBrightness[NUMHOURS][NUMWEATHERS]; - static short m_nShadowStrength[NUMHOURS][NUMWEATHERS]; - static short m_nLightShadowStrength[NUMHOURS][NUMWEATHERS]; - static short m_nTreeShadowStrength[NUMHOURS][NUMWEATHERS]; + static int16 m_nShadowStrength[NUMHOURS][NUMWEATHERS]; + static int16 m_nLightShadowStrength[NUMHOURS][NUMWEATHERS]; + static int16 m_nTreeShadowStrength[NUMHOURS][NUMWEATHERS]; static float m_fFogStart[NUMHOURS][NUMWEATHERS]; static float m_fFarClip[NUMHOURS][NUMWEATHERS]; static float m_fLightsOnGroundBrightness[NUMHOURS][NUMWEATHERS]; - static int m_nLowCloudsRed[NUMHOURS][NUMWEATHERS]; - static int m_nLowCloudsGreen[NUMHOURS][NUMWEATHERS]; - static int m_nLowCloudsBlue[NUMHOURS][NUMWEATHERS]; - static int m_nFluffyCloudsTopRed[NUMHOURS][NUMWEATHERS]; - static int m_nFluffyCloudsTopGreen[NUMHOURS][NUMWEATHERS]; - static int m_nFluffyCloudsTopBlue[NUMHOURS][NUMWEATHERS]; - static int m_nFluffyCloudsBottomRed[NUMHOURS][NUMWEATHERS]; - static int m_nFluffyCloudsBottomGreen[NUMHOURS][NUMWEATHERS]; - static int m_nFluffyCloudsBottomBlue[NUMHOURS][NUMWEATHERS]; + static int32 m_nLowCloudsRed[NUMHOURS][NUMWEATHERS]; + static int32 m_nLowCloudsGreen[NUMHOURS][NUMWEATHERS]; + static int32 m_nLowCloudsBlue[NUMHOURS][NUMWEATHERS]; + static int32 m_nFluffyCloudsTopRed[NUMHOURS][NUMWEATHERS]; + static int32 m_nFluffyCloudsTopGreen[NUMHOURS][NUMWEATHERS]; + static int32 m_nFluffyCloudsTopBlue[NUMHOURS][NUMWEATHERS]; + static int32 m_nFluffyCloudsBottomRed[NUMHOURS][NUMWEATHERS]; + static int32 m_nFluffyCloudsBottomGreen[NUMHOURS][NUMWEATHERS]; + static int32 m_nFluffyCloudsBottomBlue[NUMHOURS][NUMWEATHERS]; static float m_fBlurRed[NUMHOURS][NUMWEATHERS]; static float m_fBlurGreen[NUMHOURS][NUMWEATHERS]; static float m_fBlurBlue[NUMHOURS][NUMWEATHERS]; @@ -49,48 +49,48 @@ class CTimeCycle static float m_fCurrentDirectionalRed; static float m_fCurrentDirectionalGreen; static float m_fCurrentDirectionalBlue; - static int m_nCurrentSkyTopRed; - static int m_nCurrentSkyTopGreen; - static int m_nCurrentSkyTopBlue; - static int m_nCurrentSkyBottomRed; - static int m_nCurrentSkyBottomGreen; - static int m_nCurrentSkyBottomBlue; - static int m_nCurrentSunCoreRed; - static int m_nCurrentSunCoreGreen; - static int m_nCurrentSunCoreBlue; - static int m_nCurrentSunCoronaRed; - static int m_nCurrentSunCoronaGreen; - static int m_nCurrentSunCoronaBlue; + static int32 m_nCurrentSkyTopRed; + static int32 m_nCurrentSkyTopGreen; + static int32 m_nCurrentSkyTopBlue; + static int32 m_nCurrentSkyBottomRed; + static int32 m_nCurrentSkyBottomGreen; + static int32 m_nCurrentSkyBottomBlue; + static int32 m_nCurrentSunCoreRed; + static int32 m_nCurrentSunCoreGreen; + static int32 m_nCurrentSunCoreBlue; + static int32 m_nCurrentSunCoronaRed; + static int32 m_nCurrentSunCoronaGreen; + static int32 m_nCurrentSunCoronaBlue; static float m_fCurrentSunSize; static float m_fCurrentSpriteSize; static float m_fCurrentSpriteBrightness; - static int m_nCurrentShadowStrength; - static int m_nCurrentLightShadowStrength; - static int m_nCurrentTreeShadowStrength; + static int32 m_nCurrentShadowStrength; + static int32 m_nCurrentLightShadowStrength; + static int32 m_nCurrentTreeShadowStrength; static float m_fCurrentFogStart; static float m_fCurrentFarClip; static float m_fCurrentLightsOnGroundBrightness; - static int m_nCurrentLowCloudsRed; - static int m_nCurrentLowCloudsGreen; - static int m_nCurrentLowCloudsBlue; - static int m_nCurrentFluffyCloudsTopRed; - static int m_nCurrentFluffyCloudsTopGreen; - static int m_nCurrentFluffyCloudsTopBlue; - static int m_nCurrentFluffyCloudsBottomRed; - static int m_nCurrentFluffyCloudsBottomGreen; - static int m_nCurrentFluffyCloudsBottomBlue; + static int32 m_nCurrentLowCloudsRed; + static int32 m_nCurrentLowCloudsGreen; + static int32 m_nCurrentLowCloudsBlue; + static int32 m_nCurrentFluffyCloudsTopRed; + static int32 m_nCurrentFluffyCloudsTopGreen; + static int32 m_nCurrentFluffyCloudsTopBlue; + static int32 m_nCurrentFluffyCloudsBottomRed; + static int32 m_nCurrentFluffyCloudsBottomGreen; + static int32 m_nCurrentFluffyCloudsBottomBlue; static float m_fCurrentBlurRed; static float m_fCurrentBlurGreen; static float m_fCurrentBlurBlue; static float m_fCurrentBlurAlpha; - static int m_nCurrentFogColourRed; - static int m_nCurrentFogColourGreen; - static int m_nCurrentFogColourBlue; + static int32 m_nCurrentFogColourRed; + static int32 m_nCurrentFogColourGreen; + static int32 m_nCurrentFogColourBlue; - static int m_FogReduction; + static int32 m_FogReduction; public: - static int m_CurrentStoredValue; + static int32 m_CurrentStoredValue; static CVector m_VectorToSun[16]; static float m_fShadowFrontX[16]; static float m_fShadowFrontY[16]; @@ -105,40 +105,40 @@ public: static float GetDirectionalRed(void) { return m_fCurrentDirectionalRed; } static float GetDirectionalGreen(void) { return m_fCurrentDirectionalGreen; } static float GetDirectionalBlue(void) { return m_fCurrentDirectionalBlue; } - static int GetSkyTopRed(void) { return m_nCurrentSkyTopRed; } - static int GetSkyTopGreen(void) { return m_nCurrentSkyTopGreen; } - static int GetSkyTopBlue(void) { return m_nCurrentSkyTopBlue; } - static int GetSkyBottomRed(void) { return m_nCurrentSkyBottomRed; } - static int GetSkyBottomGreen(void) { return m_nCurrentSkyBottomGreen; } - static int GetSkyBottomBlue(void) { return m_nCurrentSkyBottomBlue; } - static int GetSunCoreRed(void) { return m_nCurrentSunCoreRed; } - static int GetSunCoreGreen(void) { return m_nCurrentSunCoreGreen; } - static int GetSunCoreBlue(void) { return m_nCurrentSunCoreBlue; } - static int GetSunCoronaRed(void) { return m_nCurrentSunCoronaRed; } - static int GetSunCoronaGreen(void) { return m_nCurrentSunCoronaGreen; } - static int GetSunCoronaBlue(void) { return m_nCurrentSunCoronaBlue; } + static int32 GetSkyTopRed(void) { return m_nCurrentSkyTopRed; } + static int32 GetSkyTopGreen(void) { return m_nCurrentSkyTopGreen; } + static int32 GetSkyTopBlue(void) { return m_nCurrentSkyTopBlue; } + static int32 GetSkyBottomRed(void) { return m_nCurrentSkyBottomRed; } + static int32 GetSkyBottomGreen(void) { return m_nCurrentSkyBottomGreen; } + static int32 GetSkyBottomBlue(void) { return m_nCurrentSkyBottomBlue; } + static int32 GetSunCoreRed(void) { return m_nCurrentSunCoreRed; } + static int32 GetSunCoreGreen(void) { return m_nCurrentSunCoreGreen; } + static int32 GetSunCoreBlue(void) { return m_nCurrentSunCoreBlue; } + static int32 GetSunCoronaRed(void) { return m_nCurrentSunCoronaRed; } + static int32 GetSunCoronaGreen(void) { return m_nCurrentSunCoronaGreen; } + static int32 GetSunCoronaBlue(void) { return m_nCurrentSunCoronaBlue; } static float GetSunSize(void) { return m_fCurrentSunSize; } static float GetSpriteBrightness(void) { return m_fCurrentSpriteBrightness; } static float GetSpriteSize(void) { return m_fCurrentSpriteSize; } - static int GetShadowStrength(void) { return m_nCurrentShadowStrength; } - static int GetLightShadowStrength(void) { return m_nCurrentLightShadowStrength; } + static int32 GetShadowStrength(void) { return m_nCurrentShadowStrength; } + static int32 GetLightShadowStrength(void) { return m_nCurrentLightShadowStrength; } static float GetLightOnGroundBrightness(void) { return m_fCurrentLightsOnGroundBrightness; } static float GetFarClip(void) { return m_fCurrentFarClip; } static float GetFogStart(void) { return m_fCurrentFogStart; } - static int GetLowCloudsRed(void) { return m_nCurrentLowCloudsRed; } - static int GetLowCloudsGreen(void) { return m_nCurrentLowCloudsGreen; } - static int GetLowCloudsBlue(void) { return m_nCurrentLowCloudsBlue; } - static int GetFluffyCloudsTopRed(void) { return m_nCurrentFluffyCloudsTopRed; } - static int GetFluffyCloudsTopGreen(void) { return m_nCurrentFluffyCloudsTopGreen; } - static int GetFluffyCloudsTopBlue(void) { return m_nCurrentFluffyCloudsTopBlue; } - static int GetFluffyCloudsBottomRed(void) { return m_nCurrentFluffyCloudsBottomRed; } - static int GetFluffyCloudsBottomGreen(void) { return m_nCurrentFluffyCloudsBottomGreen; } - static int GetFluffyCloudsBottomBlue(void) { return m_nCurrentFluffyCloudsBottomBlue; } - static int GetFogRed(void) { return m_nCurrentFogColourRed; } - static int GetFogGreen(void) { return m_nCurrentFogColourGreen; } - static int GetFogBlue(void) { return m_nCurrentFogColourBlue; } - static int GetFogReduction(void) { return m_FogReduction; } + static int32 GetLowCloudsRed(void) { return m_nCurrentLowCloudsRed; } + static int32 GetLowCloudsGreen(void) { return m_nCurrentLowCloudsGreen; } + static int32 GetLowCloudsBlue(void) { return m_nCurrentLowCloudsBlue; } + static int32 GetFluffyCloudsTopRed(void) { return m_nCurrentFluffyCloudsTopRed; } + static int32 GetFluffyCloudsTopGreen(void) { return m_nCurrentFluffyCloudsTopGreen; } + static int32 GetFluffyCloudsTopBlue(void) { return m_nCurrentFluffyCloudsTopBlue; } + static int32 GetFluffyCloudsBottomRed(void) { return m_nCurrentFluffyCloudsBottomRed; } + static int32 GetFluffyCloudsBottomGreen(void) { return m_nCurrentFluffyCloudsBottomGreen; } + static int32 GetFluffyCloudsBottomBlue(void) { return m_nCurrentFluffyCloudsBottomBlue; } + static int32 GetFogRed(void) { return m_nCurrentFogColourRed; } + static int32 GetFogGreen(void) { return m_nCurrentFogColourGreen; } + static int32 GetFogBlue(void) { return m_nCurrentFogColourBlue; } + static int32 GetFogReduction(void) { return m_FogReduction; } static void Initialise(void); static void Update(void); From e57d4508098a9a930724d018a2132a4e704b1cf1 Mon Sep 17 00:00:00 2001 From: aap Date: Sun, 9 Aug 2020 19:51:16 +0200 Subject: [PATCH 032/112] drunk blur done --- src/render/MBlur.cpp | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/render/MBlur.cpp b/src/render/MBlur.cpp index 568a0bc1..4c805d25 100644 --- a/src/render/MBlur.cpp +++ b/src/render/MBlur.cpp @@ -255,6 +255,11 @@ CMBlur::MotionBlurRender(RwCamera *cam, uint32 red, uint32 green, uint32 blue, u #endif } +static uint8 DrunkBlurRed = 128; +static uint8 DrunkBlurGreen = 128; +static uint8 DrunkBlurBlue = 128; +static int32 DrunkBlurIncrement = 1; + void CMBlur::OverlayRender(RwCamera *cam, RwRaster *raster, RwRGBA color, int32 type, int32 bluralpha) { @@ -367,7 +372,36 @@ CMBlur::OverlayRender(RwCamera *cam, RwRaster *raster, RwRGBA color, int32 type, } } - // TODO(MIAMI): drunkness + int DrunkBlurAlpha = 175.0f * Drunkness; + if(DrunkBlurAlpha != 0){ + RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA); + RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA); + if(BlurOn){ + RwIm2DVertexSetIntRGBA(&Vertex[0], 255, 255, 255, DrunkBlurAlpha); + RwIm2DVertexSetIntRGBA(&Vertex[1], 255, 255, 255, DrunkBlurAlpha); + RwIm2DVertexSetIntRGBA(&Vertex[2], 255, 255, 255, DrunkBlurAlpha); + RwIm2DVertexSetIntRGBA(&Vertex[3], 255, 255, 255, DrunkBlurAlpha); + }else{ + RwIm2DVertexSetIntRGBA(&Vertex[0], DrunkBlurRed, DrunkBlurGreen, DrunkBlurBlue, DrunkBlurAlpha); + RwIm2DVertexSetIntRGBA(&Vertex[1], DrunkBlurRed, DrunkBlurGreen, DrunkBlurBlue, DrunkBlurAlpha); + RwIm2DVertexSetIntRGBA(&Vertex[2], DrunkBlurRed, DrunkBlurGreen, DrunkBlurBlue, DrunkBlurAlpha); + RwIm2DVertexSetIntRGBA(&Vertex[3], DrunkBlurRed, DrunkBlurGreen, DrunkBlurBlue, DrunkBlurAlpha); + if(DrunkBlurIncrement){ + if(DrunkBlurRed < 255) DrunkBlurRed++; + if(DrunkBlurGreen < 255) DrunkBlurGreen++; + if(DrunkBlurBlue < 255) DrunkBlurBlue++; + if(DrunkBlurRed == 255) + DrunkBlurIncrement = 0; + }else{ + if(DrunkBlurRed > 128) DrunkBlurRed--; + if(DrunkBlurGreen > 128) DrunkBlurGreen--; + if(DrunkBlurBlue > 128) DrunkBlurBlue--; + if(DrunkBlurRed == 128) + DrunkBlurIncrement = 1; + } + } + RwIm2DRenderIndexedPrimitive(rwPRIMTYPETRILIST, Vertex, 4, Index, 6); + } // TODO(MIAMI): OverlayRenderFx From b73b6b8e130a545687aad4024465fc977e3f01ee Mon Sep 17 00:00:00 2001 From: majestic Date: Tue, 4 Aug 2020 19:11:42 -0700 Subject: [PATCH 033/112] CWindModifiers --- src/core/Game.cpp | 2 + src/peds/Ped.cpp | 72 ++++++++++++++++++++++++++++++++++++ src/render/WindModifiers.cpp | 44 ++++++++++++++++++++-- src/render/WindModifiers.h | 7 +++- 4 files changed, 120 insertions(+), 5 deletions(-) diff --git a/src/core/Game.cpp b/src/core/Game.cpp index 7700d321..6573ac22 100644 --- a/src/core/Game.cpp +++ b/src/core/Game.cpp @@ -89,6 +89,7 @@ #include "Occlusion.h" #include "debugmenu.h" #include "Ropes.h" +#include "WindModifiers.h" eLevelName CGame::currLevel; int32 CGame::currArea; @@ -693,6 +694,7 @@ void CGame::Process(void) if (!CCutsceneMgr::IsCutsceneProcessing() && !CTimer::GetIsCodePaused()) FrontEndMenuManager.Process(); CStreaming::Update(); + CWindModifiers::Number = 0; if (!CTimer::GetIsPaused()) { CTheZones::Update(); diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp index 53c2b2c2..f6624c1f 100644 --- a/src/peds/Ped.cpp +++ b/src/peds/Ped.cpp @@ -63,6 +63,7 @@ #include "Debug.h" #include "GameLogic.h" #include "Bike.h" +#include "WindModifiers.h" #define CAN_SEE_ENTITY_ANGLE_THRESHOLD DEGTORAD(60.0f) @@ -16414,6 +16415,77 @@ CPed::PreRender(void) } #endif + bool bIsWindModifierTurnedOn = false; + float fAnyDirectionShift = 1.0f; + if (IsPlayer() && CWindModifiers::FindWindModifier(GetPosition(), &fAnyDirectionShift, &fAnyDirectionShift) + && !CCullZones::PlayerNoRain() && GetPedState() != PED_DRIVING) + bIsWindModifierTurnedOn = true; + + bool bIsPlayerDrivingBikeOrOpenTopCar = false; + if (GetPedState() == PED_DRIVING && m_pMyVehicle) { + if (m_pMyVehicle->m_vehType == VEHICLE_TYPE_BIKE + || (m_pMyVehicle->m_vehType == VEHICLE_TYPE_CAR && m_pMyVehicle->IsOpenTopCar())) + bIsPlayerDrivingBikeOrOpenTopCar = true; + } + + if (bIsWindModifierTurnedOn || bIsPlayerDrivingBikeOrOpenTopCar) { + float fWindMult = 0.0f; + if (bIsPlayerDrivingBikeOrOpenTopCar) { + fWindMult = DotProduct(m_pMyVehicle->m_vecMoveSpeed, GetForward()); + if (fWindMult > 0.4f) { + float volume = (fWindMult - 0.4f) / 0.6f; + DMAudio.PlayOneShot(m_audioEntityId, SOUND_SET_202, volume); //TODO(MIAMI): revise when audio is done + } + } + + if (bIsWindModifierTurnedOn) + fWindMult = Min(fWindMult, Abs(fAnyDirectionShift - 1.0f)); + + RpHAnimHierarchy* hier = GetAnimHierarchyFromSkinClump(GetClump()); + int32 idx; + RwV3d scale; + float fScaleOffset; + + fScaleOffset = fWindMult * 0.2f; + scale.x = CGeneral::GetRandomNumberInRange(1.0f - fScaleOffset, 1.0f + fScaleOffset); + scale.y = CGeneral::GetRandomNumberInRange(1.0f - fScaleOffset, 1.0f + fScaleOffset); + scale.z = CGeneral::GetRandomNumberInRange(1.0f - fScaleOffset, 1.0f + fScaleOffset); + + idx = RpHAnimIDGetIndex(hier, ConvertPedNode2BoneTag(PED_NECK)); + RwMatrix* neck = &RpHAnimHierarchyGetMatrixArray(hier)[idx]; + RwMatrixScale(neck, &scale, rwCOMBINEPRECONCAT); + + fScaleOffset = fWindMult * 0.1f; + scale.x = CGeneral::GetRandomNumberInRange(1.0f - fScaleOffset, 1.0f + fScaleOffset); + scale.y = CGeneral::GetRandomNumberInRange(1.0f - fScaleOffset, 1.0f + fScaleOffset); + scale.z = CGeneral::GetRandomNumberInRange(1.0f - fScaleOffset, 1.0f + fScaleOffset); + + idx = RpHAnimIDGetIndex(hier, ConvertPedNode2BoneTag(PED_CLAVICLEL)); + RwMatrix* clavicleL = &RpHAnimHierarchyGetMatrixArray(hier)[idx]; + RwMatrixScale(clavicleL, &scale, rwCOMBINEPRECONCAT); + + idx = RpHAnimIDGetIndex(hier, ConvertPedNode2BoneTag(PED_CLAVICLER)); + RwMatrix* clavicleR = &RpHAnimHierarchyGetMatrixArray(hier)[idx]; + RwMatrixScale(clavicleR, &scale, rwCOMBINEPRECONCAT); + + idx = RpHAnimIDGetIndex(hier, ConvertPedNode2BoneTag(PED_MID)); + RwMatrix* mid = &RpHAnimHierarchyGetMatrixArray(hier)[idx]; + RwMatrixScale(mid, &scale, rwCOMBINEPRECONCAT); + + fScaleOffset = fWindMult * 0.2f; + scale.x = CGeneral::GetRandomNumberInRange(1.0f - fScaleOffset, 1.0f + fScaleOffset); + scale.y = CGeneral::GetRandomNumberInRange(1.0f - fScaleOffset, 1.0f + fScaleOffset); + scale.z = CGeneral::GetRandomNumberInRange(1.0f - fScaleOffset, 1.0f + fScaleOffset); + + idx = RpHAnimIDGetIndex(hier, ConvertPedNode2BoneTag(PED_UPPERARML)); + RwMatrix* upperArmL = &RpHAnimHierarchyGetMatrixArray(hier)[idx]; + RwMatrixScale(upperArmL, &scale, rwCOMBINEPRECONCAT); + + idx = RpHAnimIDGetIndex(hier, ConvertPedNode2BoneTag(PED_UPPERARMR)); + RwMatrix* upperArmR = &RpHAnimHierarchyGetMatrixArray(hier)[idx]; + RwMatrixScale(upperArmR, &scale, rwCOMBINEPRECONCAT); + } + if (bBodyPartJustCameOff && bIsPedDieAnimPlaying && m_bodyPartBleeding != -1 && (CTimer::GetFrameCounter() & 7) > 3) { CVector bloodDir(0.0f, 0.0f, 0.0f); CVector bloodPos(0.0f, 0.0f, 0.0f); diff --git a/src/render/WindModifiers.cpp b/src/render/WindModifiers.cpp index 49e7c96a..2061df6a 100644 --- a/src/render/WindModifiers.cpp +++ b/src/render/WindModifiers.cpp @@ -1,13 +1,51 @@ #include "common.h" #include "WindModifiers.h" +#include "Camera.h" +#include "General.h" + +#define MAX_HEIGHT_DIST 40.0f +#define MIN_FADE_DIST 20.0f +#define MAX_FADE_DIST 50.0f + +CWindModifiers Array[16]; +int32 CWindModifiers::Number; void -CWindModifiers::RegisterOne(CVector pos, int32 unk) +CWindModifiers::RegisterOne(CVector pos, int32 type = 1) { + if (CWindModifiers::Number < 16 && (pos - TheCamera.GetPosition()).Magnitude() < 100.0f) { + Array[Number].m_pos = pos; + Array[Number].m_type = type; + Number++; + } } -int32 +bool CWindModifiers::FindWindModifier(CVector pos, float *x, float *y) { - return 0; + bool bWasWindModifierFound = false; + CVector2D dir; + for (int i = 0; i < Number; i++) { + if (Array[i].m_type == 1) { + float zDist = Abs(15.0f + pos.z - Array[i].m_pos.z); + + if (zDist < MAX_HEIGHT_DIST) { + float dist = (pos - Array[i].m_pos).Magnitude(); + if (dist < MAX_FADE_DIST) { + float distFade = dist < MIN_FADE_DIST ? 1.0f : 1.0f - (dist - MIN_FADE_DIST) / (MAX_FADE_DIST - MIN_FADE_DIST); + float heightFade = 1.0f - zDist / MAX_HEIGHT_DIST; + dir = (pos - Array[i].m_pos) * heightFade / dist; + bWasWindModifierFound = true; + } + } + } + } + + if (bWasWindModifierFound) { + float directionMult = ((CGeneral::GetRandomNumber() & 0x1F) - 16) * 0.0035f + 1.0f; + *x += dir.x * directionMult; + *y += dir.y * directionMult; + } + + return bWasWindModifierFound; } diff --git a/src/render/WindModifiers.h b/src/render/WindModifiers.h index c42e185d..7c2e57bd 100644 --- a/src/render/WindModifiers.h +++ b/src/render/WindModifiers.h @@ -2,7 +2,10 @@ class CWindModifiers { + CVector m_pos; + int32 m_type; public: - static void RegisterOne(CVector pos, int32 unk); - static int32 FindWindModifier(CVector pos, float *x, float *y); + static int32 Number; + static void RegisterOne(CVector pos, int32 windSourceType); + static bool FindWindModifier(CVector pos, float *x, float *y); }; From 2f987e315e11ee1d93b5f3c2cda3f593c254b373 Mon Sep 17 00:00:00 2001 From: aap Date: Mon, 10 Aug 2020 17:04:57 +0200 Subject: [PATCH 034/112] update librw (shadows are working now) --- librw | 2 +- src/render/ShadowCamera.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/librw b/librw index 99c15d5e..113d76cf 160000 --- a/librw +++ b/librw @@ -1 +1 @@ -Subproject commit 99c15d5ed78cc112e1055cc89452dd57df28da58 +Subproject commit 113d76cfaaf064447ac936f79d91ea04788fca24 diff --git a/src/render/ShadowCamera.cpp b/src/render/ShadowCamera.cpp index ae94f8ac..f69c234f 100644 --- a/src/render/ShadowCamera.cpp +++ b/src/render/ShadowCamera.cpp @@ -160,7 +160,7 @@ CShadowCamera::SetCenter(RwV3d *center) ASSERT(m_pCamera != nil); RwFrame *camFrame = RwCameraGetFrame(m_pCamera); - RwMatrix *camMatrix = RwFrameGetMatrix(camFrame); + RwMatrix *camMatrix = RwFrameGetMatrix(camFrame); *RwMatrixGetPos(camMatrix) = *center; @@ -188,7 +188,7 @@ CShadowCamera::Update(RpClump *clump) if ( RwCameraBeginUpdate(m_pCamera) ) { - geometry = GetFirstAtomic(clump)->geometry; + geometry = RpAtomicGetGeometry(GetFirstAtomic(clump)); ASSERT(geometry != nil); flags = RpGeometryGetFlags(geometry); From e29e911302ddf8bd4274bd707e73a70122de9d79 Mon Sep 17 00:00:00 2001 From: aap Date: Mon, 10 Aug 2020 17:05:34 +0200 Subject: [PATCH 035/112] update librw --- librw | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librw b/librw index 99c15d5e..113d76cf 160000 --- a/librw +++ b/librw @@ -1 +1 @@ -Subproject commit 99c15d5ed78cc112e1055cc89452dd57df28da58 +Subproject commit 113d76cfaaf064447ac936f79d91ea04788fca24 From 2d1b48267dde282489a612c074d7326107c4af83 Mon Sep 17 00:00:00 2001 From: majestic Date: Mon, 10 Aug 2020 14:04:33 -0700 Subject: [PATCH 036/112] improved mission switcher --- src/core/re3.cpp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/core/re3.cpp b/src/core/re3.cpp index e9c643ac..9d10193d 100644 --- a/src/core/re3.cpp +++ b/src/core/re3.cpp @@ -556,7 +556,30 @@ DebugMenuPopulate(void) DebugMenuAddVarBool8("Debug", "Show Timebars", &gbShowTimebars, nil); #endif #ifdef MISSION_SWITCHER - DebugMenuAddInt8("Debug", "Select mission no", &nextMissionToSwitch, nil, 1, 0, 96, nil); + DebugMenuEntry *missionEntry; + static const char* missions[] = { + "Initial", "Intro", "An Old Friend", "The Party", "Back Alley Brawl", "Jury Fury", "Riot", + "Treacherous Swine", "Mall Shootout", "Guardian Angels", "Sir, Yes Sir!", "All Hands On Deck!", + "The Chase", "Phnom Penh '86", "The Fastest Boat", "Supply & Demand", "Rub Out", "Death Row", + "Four Iron", "Demolition Man", "Two Bit Hit", "No Escape?", "The Shootist", "The Driver", + "The Job", "Gun Runner", "Boomshine Saigon", "Recruitment Drive", "Dildo Dodo", "Martha's Mug Shot", + "G-spotlight", "Shakedown", "Bar Brawl", "Cop Land", "Spilling the Beans", "Hit the Courier", + "Printworks Buy", "Sunshine Autos", "Interglobal Films Buy", "Cherry Popper Icecreams Buy", + "Kaufman Cabs Buy", "Malibu Club Buy", "The Boatyard Buy", "Pole Position Club Buy", "El Swanko Casa Buy", + "Links View Apartment Buy", "Hyman Condo Buy", "Ocean Heighs Aprt. Buy", "1102 Washington Street Buy", + "Vice Point Buy", "Skumole Shack Buy", "Cap the Collector", "Keep your Friends Close...", + "Alloy Wheels of Steel", "Messing with the Man", "Hog Tied", "Stunt Boat Challenge", "Cannon Fodder", + "Naval Engagement", "Trojan Voodoo", "Juju Scramble", "Bombs Away!", "Dirty Lickin's", "Love Juice", + "Psycho Killer", "Publicity Tour", "Weapon Range", "Road Kill", "Waste the Wife", "Autocide", + "Check Out at the Check In", "Loose Ends", "V.I.P.", "Friendly Rivalry", "Cabmaggedon", "TAXI DRIVER", + "PARAMEDIC", "FIREFIGHTER", "VIGILANTE", "HOTRING", "BLOODRING", "DIRTRING", "Sunshine Autos Races", + "Distribution", "Downtown Chopper Checkpoint", "Ocean Beach Chopper Checkpoint", "Vice Point Chopper Checkpoint", + "Little Haiti Chopper Checkpoint", "Trial by Dirt", "Test Track", "PCJ Playground", "Cone Crazy", + "PIZZA BOY", "RC Raider Pickup", "RC Bandit Race", "RC Baron Race", "Checkpoint Charlie" + }; + + missionEntry = DebugMenuAddVar("Debug", "Select mission", &nextMissionToSwitch, nil, 1, 0, 96, missions); + DebugMenuEntrySetWrap(missionEntry, true); DebugMenuAddCmd("Debug", "Start selected mission ", SwitchToMission); #endif extern bool PrintDebugCode; From b468d010a8a185bd04cdb1fb41810a189971e583 Mon Sep 17 00:00:00 2001 From: aap Date: Tue, 11 Aug 2020 18:39:53 +0200 Subject: [PATCH 037/112] implemented extended postfx --- src/core/Camera.cpp | 5 + src/core/Game.cpp | 4 + src/core/config.h | 1 + src/core/re3.cpp | 11 + src/extras/postfx.cpp | 516 +++++++++++++++++++ src/extras/postfx.h | 45 ++ src/extras/shaders/Makefile | 16 + src/extras/shaders/colourfilterVC.frag | 28 + src/extras/shaders/colourfilterVC_PS.cso | Bin 0 -> 648 bytes src/extras/shaders/colourfilterVC_PS.hlsl | 23 + src/extras/shaders/colourfilterVC_PS.inc | 56 ++ src/extras/shaders/colourfilterVC_fs_gl3.inc | 30 ++ src/extras/shaders/contrast.frag | 18 + src/extras/shaders/contrastPS.cso | Bin 0 -> 344 bytes src/extras/shaders/contrastPS.hlsl | 21 + src/extras/shaders/contrastPS.inc | 31 ++ src/extras/shaders/contrast_fs_gl3.inc | 20 + src/extras/shaders/im2d.vert | 21 + src/extras/shaders/im2d_gl3.inc | 23 + src/extras/shaders/make.cmd | 3 + src/extras/shaders/makeinc.sh | 5 + src/peds/Ped.cpp | 1 + src/render/MBlur.cpp | 32 +- src/rw/Lights.cpp | 11 +- 24 files changed, 909 insertions(+), 12 deletions(-) create mode 100644 src/extras/postfx.cpp create mode 100644 src/extras/postfx.h create mode 100644 src/extras/shaders/Makefile create mode 100644 src/extras/shaders/colourfilterVC.frag create mode 100644 src/extras/shaders/colourfilterVC_PS.cso create mode 100644 src/extras/shaders/colourfilterVC_PS.hlsl create mode 100644 src/extras/shaders/colourfilterVC_PS.inc create mode 100644 src/extras/shaders/colourfilterVC_fs_gl3.inc create mode 100644 src/extras/shaders/contrast.frag create mode 100644 src/extras/shaders/contrastPS.cso create mode 100644 src/extras/shaders/contrastPS.hlsl create mode 100644 src/extras/shaders/contrastPS.inc create mode 100644 src/extras/shaders/contrast_fs_gl3.inc create mode 100644 src/extras/shaders/im2d.vert create mode 100644 src/extras/shaders/im2d_gl3.inc create mode 100644 src/extras/shaders/make.cmd create mode 100644 src/extras/shaders/makeinc.sh diff --git a/src/core/Camera.cpp b/src/core/Camera.cpp index 2f977a20..df778815 100644 --- a/src/core/Camera.cpp +++ b/src/core/Camera.cpp @@ -514,7 +514,12 @@ CCamera::Process(void) int tableIndex = (int)(DEGTORAD(DrunkAngle)/TWOPI * CParticle::SIN_COS_TABLE_SIZE) & CParticle::SIN_COS_TABLE_SIZE-1; DrunkAngle += 5.0f; +#ifndef FIX_BUGS + // This just messes up interpolation, probably not what they intended + // and multiplying the interpolated FOV is also a bit extreme + // so let's not do any of this nonsense Cams[ActiveCam].FOV *= (1.0f + CMBlur::Drunkness); +#endif CamSource.x += -0.02f*CMBlur::Drunkness * CParticle::m_CosTable[tableIndex]; CamSource.y += -0.02f*CMBlur::Drunkness * CParticle::m_SinTable[tableIndex]; diff --git a/src/core/Game.cpp b/src/core/Game.cpp index 7b113d89..ce2194a0 100644 --- a/src/core/Game.cpp +++ b/src/core/Game.cpp @@ -90,6 +90,7 @@ #include "debugmenu.h" #include "Ropes.h" #include "WindModifiers.h" +#include "postfx.h" eLevelName CGame::currLevel; int32 CGame::currArea; @@ -152,6 +153,9 @@ CGame::InitialiseOnceBeforeRW(void) CFileMgr::Initialise(); CdStreamInit(MAX_CDCHANNELS); ValidateVersion(); +#ifdef EXTENDED_COLOURFILTER + CPostFX::InitOnce(); +#endif return true; } diff --git a/src/core/config.h b/src/core/config.h index 469f9017..eadbc307 100644 --- a/src/core/config.h +++ b/src/core/config.h @@ -225,6 +225,7 @@ enum Config { //#define NO_ISLAND_LOADING // disable loadscreen between islands via loading all island data at once, consumes more memory and CPU //#define USE_TEXTURE_POOL #define CUTSCENE_BORDERS_SWITCH +//#define EXTENDED_COLOURFILTER // more options for colour filter (replaces mblur) // Water & Particle #define PC_PARTICLE diff --git a/src/core/re3.cpp b/src/core/re3.cpp index 9d10193d..34fbb428 100644 --- a/src/core/re3.cpp +++ b/src/core/re3.cpp @@ -33,6 +33,8 @@ #include "WaterLevel.h" #include "main.h" #include "Script.h" +#include "MBlur.h" +#include "postfx.h" #ifndef _WIN32 #include "assert.h" @@ -515,6 +517,15 @@ DebugMenuPopulate(void) DebugMenuAddVarBool8("Render", "Frame limiter", &FrontEndMenuManager.m_PrefsFrameLimiter, nil); DebugMenuAddVarBool8("Render", "VSynch", &FrontEndMenuManager.m_PrefsVsync, nil); DebugMenuAddVar("Render", "Max FPS", &RsGlobal.maxFPS, nil, 1, 1, 1000, nil); +#ifdef EXTENDED_COLOURFILTER + static const char *filternames[] = { "None", "Simple", "Normal", "Mobile" }; + e = DebugMenuAddVar("Render", "Colourfilter", &CPostFX::EffectSwitch, nil, 1, CPostFX::POSTFX_OFF, CPostFX::POSTFX_MOBILE, filternames); + DebugMenuEntrySetWrap(e, true); + DebugMenuAddVar("Render", "Intensity", &CPostFX::Intensity, nil, 0.05f, 0, 10.0f); + DebugMenuAddVarBool8("Render", "Blur", &CPostFX::BlurOn, nil); + DebugMenuAddVarBool8("Render", "Motion Blur", &CPostFX::MotionBlurOn, nil); +#endif + DebugMenuAddVar("Render", "Drunkness", &CMBlur::Drunkness, nil, 0.05f, 0, 1.0f); DebugMenuAddVarBool8("Render", "Occlusion debug", &bDisplayOccDebugStuff, nil); DebugMenuAddVarBool8("Render", "Show Ped Paths", &gbShowPedPaths, nil); DebugMenuAddVarBool8("Render", "Show Car Paths", &gbShowCarPaths, nil); diff --git a/src/extras/postfx.cpp b/src/extras/postfx.cpp new file mode 100644 index 00000000..e8cd4bc4 --- /dev/null +++ b/src/extras/postfx.cpp @@ -0,0 +1,516 @@ +#define WITHWINDOWS +#define WITH_D3D +#include "common.h" + +#ifdef EXTENDED_COLOURFILTER + +#ifndef LIBRW +#error "Need librw for EXTENDED_COLOURFILTER" +#endif + +#include "RwHelper.h" +#include "Camera.h" +#include "MBlur.h" +#include "postfx.h" + +RwRaster *CPostFX::pFrontBuffer; +RwRaster *CPostFX::pBackBuffer; +bool CPostFX::bJustInitialised; +int CPostFX::EffectSwitch = POSTFX_NORMAL; +bool CPostFX::BlurOn = false; +bool CPostFX::MotionBlurOn = false; + +static RwIm2DVertex Vertex[4]; +static RwIm2DVertex Vertex2[4]; +static RwImVertexIndex Index[6] = { 0, 1, 2, 0, 2, 3 }; + +#ifdef RW_D3D9 +void *colourfilterVC_PS; +void *contrast_PS; +#endif +#ifdef RW_OPENGL +int32 u_blurcolor; +int32 u_contrastAdd; +int32 u_contrastMult; +rw::gl3::Shader *colourFilterVC; +rw::gl3::Shader *contrast; +#endif + +void +CPostFX::InitOnce(void) +{ +#ifdef RW_OPENGL + u_blurcolor = rw::gl3::registerUniform("u_blurcolor"); + u_contrastAdd = rw::gl3::registerUniform("u_contrastAdd"); + u_contrastMult = rw::gl3::registerUniform("u_contrastMult"); +#endif +} + +void +CPostFX::Open(RwCamera *cam) +{ + uint32 width = Pow(2.0f, int32(log2(RwRasterGetWidth (RwCameraGetRaster(cam))))+1); + uint32 height = Pow(2.0f, int32(log2(RwRasterGetHeight(RwCameraGetRaster(cam))))+1); + uint32 depth = RwRasterGetDepth(RwCameraGetRaster(cam)); + pFrontBuffer = RwRasterCreate(width, height, depth, rwRASTERTYPECAMERATEXTURE); + pBackBuffer = RwRasterCreate(width, height, depth, rwRASTERTYPECAMERATEXTURE); + bJustInitialised = true; + + float zero, xmax, ymax; + + if(RwRasterGetDepth(RwCameraGetRaster(cam)) == 16){ + zero = HALFPX; + xmax = width + HALFPX; + ymax = height + HALFPX; + }else{ + zero = -HALFPX; + xmax = width - HALFPX; + ymax = height - HALFPX; + } + + RwIm2DVertexSetScreenX(&Vertex[0], zero); + RwIm2DVertexSetScreenY(&Vertex[0], zero); + RwIm2DVertexSetScreenZ(&Vertex[0], RwIm2DGetNearScreenZ()); + RwIm2DVertexSetCameraZ(&Vertex[0], RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetRecipCameraZ(&Vertex[0], 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetU(&Vertex[0], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetV(&Vertex[0], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetIntRGBA(&Vertex[0], 255, 255, 255, 255); + + RwIm2DVertexSetScreenX(&Vertex[1], zero); + RwIm2DVertexSetScreenY(&Vertex[1], ymax); + RwIm2DVertexSetScreenZ(&Vertex[1], RwIm2DGetNearScreenZ()); + RwIm2DVertexSetCameraZ(&Vertex[1], RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetRecipCameraZ(&Vertex[1], 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetU(&Vertex[1], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetV(&Vertex[1], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetIntRGBA(&Vertex[1], 255, 255, 255, 255); + + RwIm2DVertexSetScreenX(&Vertex[2], xmax); + RwIm2DVertexSetScreenY(&Vertex[2], ymax); + RwIm2DVertexSetScreenZ(&Vertex[2], RwIm2DGetNearScreenZ()); + RwIm2DVertexSetCameraZ(&Vertex[2], RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetRecipCameraZ(&Vertex[2], 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetU(&Vertex[2], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetV(&Vertex[2], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetIntRGBA(&Vertex[2], 255, 255, 255, 255); + + RwIm2DVertexSetScreenX(&Vertex[3], xmax); + RwIm2DVertexSetScreenY(&Vertex[3], zero); + RwIm2DVertexSetScreenZ(&Vertex[3], RwIm2DGetNearScreenZ()); + RwIm2DVertexSetCameraZ(&Vertex[3], RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetRecipCameraZ(&Vertex[3], 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetU(&Vertex[3], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetV(&Vertex[3], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetIntRGBA(&Vertex[3], 255, 255, 255, 255); + + + RwIm2DVertexSetScreenX(&Vertex2[0], zero + 2.0f); + RwIm2DVertexSetScreenY(&Vertex2[0], zero + 2.0f); + RwIm2DVertexSetScreenZ(&Vertex2[0], RwIm2DGetNearScreenZ()); + RwIm2DVertexSetCameraZ(&Vertex2[0], RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetRecipCameraZ(&Vertex2[0], 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetU(&Vertex2[0], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetV(&Vertex2[0], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetIntRGBA(&Vertex2[0], 255, 255, 255, 255); + + RwIm2DVertexSetScreenX(&Vertex2[1], 2.0f); + RwIm2DVertexSetScreenY(&Vertex2[1], ymax + 2.0f); + RwIm2DVertexSetScreenZ(&Vertex2[1], RwIm2DGetNearScreenZ()); + RwIm2DVertexSetCameraZ(&Vertex2[1], RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetRecipCameraZ(&Vertex2[1], 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetU(&Vertex2[1], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetV(&Vertex2[1], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetIntRGBA(&Vertex2[1], 255, 255, 255, 255); + + RwIm2DVertexSetScreenX(&Vertex2[2], xmax + 2.0f); + RwIm2DVertexSetScreenY(&Vertex2[2], ymax + 2.0f); + RwIm2DVertexSetScreenZ(&Vertex2[2], RwIm2DGetNearScreenZ()); + RwIm2DVertexSetCameraZ(&Vertex2[2], RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetRecipCameraZ(&Vertex2[2], 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetU(&Vertex2[2], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetV(&Vertex2[2], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetIntRGBA(&Vertex2[2], 255, 255, 255, 255); + + RwIm2DVertexSetScreenX(&Vertex2[3], xmax + 2.0f); + RwIm2DVertexSetScreenY(&Vertex2[3], zero + 2.0f); + RwIm2DVertexSetScreenZ(&Vertex2[3], RwIm2DGetNearScreenZ()); + RwIm2DVertexSetCameraZ(&Vertex2[3], RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetRecipCameraZ(&Vertex2[3], 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetU(&Vertex2[3], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetV(&Vertex2[3], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetIntRGBA(&Vertex2[3], 255, 255, 255, 255); + + +#ifdef RW_D3D9 +#include "shaders/colourfilterVC_PS.inc" + colourfilterVC_PS = rw::d3d::createPixelShader(colourfilterVC_PS_cso); +#include "shaders/contrastPS.inc" + contrast_PS = rw::d3d::createPixelShader(contrastPS_cso); +#endif +#ifdef RW_OPENGL + using namespace rw::gl3; +// AllocConsole(); +// freopen("CONIN$", "r", stdin); +// freopen("CONOUT$", "w", stdout); +// freopen("CONOUT$", "w", stderr); + + + { +#ifdef RW_GLES2 +#include "gl2_shaders/im2d_gl2.inc" +#include "gl2_shaders/colourfilterVC_fs_gl2.inc" +#else +#include "shaders/im2d_gl3.inc" +#include "shaders/colourfilterVC_fs_gl3.inc" +#endif + const char *vs[] = { shaderDecl, header_vert_src, im2d_vert_src, nil }; + const char *fs[] = { shaderDecl, header_frag_src, colourfilterVC_frag_src, nil }; + colourFilterVC = Shader::create(vs, fs); + assert(colourFilterVC); + } + + { +#ifdef RW_GLES2 +#include "gl2_shaders/im2d_gl2.inc" +#include "gl2_shaders/contrast_fs_gl2.inc" +#else +#include "shaders/im2d_gl3.inc" +#include "shaders/contrast_fs_gl3.inc" + const char *vs[] = { shaderDecl, header_vert_src, im2d_vert_src, nil }; + const char *fs[] = { shaderDecl, header_frag_src, contrast_frag_src, nil }; + contrast = Shader::create(vs, fs); + assert(contrast); +#endif + } + +#endif +} + +void +CPostFX::Close(void) +{ + if(pFrontBuffer){ + RwRasterDestroy(pFrontBuffer); + pFrontBuffer = nil; + } + if(pBackBuffer){ + RwRasterDestroy(pBackBuffer); + pBackBuffer = nil; + } +#ifdef RW_D3D9 + if(colourfilterVC_PS){ + rw::d3d::destroyPixelShader(colourfilterVC_PS); + colourfilterVC_PS = nil; + } + if(contrast_PS){ + rw::d3d::destroyPixelShader(contrast_PS); + contrast_PS = nil; + } +#endif +#ifdef RW_OPENGL + if(colourFilterVC){ + colourFilterVC->destroy(); + colourFilterVC = nil; + } + if(contrast){ + contrast->destroy(); + contrast = nil; + } +#endif +} + +void +CPostFX::RenderOverlayBlur(RwCamera *cam, int32 r, int32 g, int32 b, int32 a) +{ + RwRenderStateSet(rwRENDERSTATETEXTURERASTER, pFrontBuffer); + RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE); + + RwIm2DVertexSetIntRGBA(&Vertex[0], r*2, g*2, b*2, 30); + RwIm2DVertexSetIntRGBA(&Vertex[1], r*2, g*2, b*2, 30); + RwIm2DVertexSetIntRGBA(&Vertex[2], r*2, g*2, b*2, 30); + RwIm2DVertexSetIntRGBA(&Vertex[3], r*2, g*2, b*2, 30); + RwIm2DVertexSetIntRGBA(&Vertex2[0], r*2, g*2, b*2, 30); + RwIm2DVertexSetIntRGBA(&Vertex2[1], r*2, g*2, b*2, 30); + RwIm2DVertexSetIntRGBA(&Vertex2[2], r*2, g*2, b*2, 30); + RwIm2DVertexSetIntRGBA(&Vertex2[3], r*2, g*2, b*2, 30); + + RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA); + RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA); + + RwIm2DRenderIndexedPrimitive(rwPRIMTYPETRILIST, BlurOn ? Vertex2 : Vertex, 4, Index, 6); + + + RwIm2DVertexSetIntRGBA(&Vertex2[0], r, g, b, a); + RwIm2DVertexSetIntRGBA(&Vertex[0], r, g, b, a); + RwIm2DVertexSetIntRGBA(&Vertex2[1], r, g, b, a); + RwIm2DVertexSetIntRGBA(&Vertex[1], r, g, b, a); + RwIm2DVertexSetIntRGBA(&Vertex2[2], r, g, b, a); + RwIm2DVertexSetIntRGBA(&Vertex[2], r, g, b, a); + RwIm2DVertexSetIntRGBA(&Vertex2[3], r, g, b, a); + RwIm2DVertexSetIntRGBA(&Vertex[3], r, g, b, a); + + RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDONE); + RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDONE); + + RwIm2DRenderIndexedPrimitive(rwPRIMTYPETRILIST, Vertex, 4, Index, 6); + RwIm2DRenderIndexedPrimitive(rwPRIMTYPETRILIST, BlurOn ? Vertex2 : Vertex, 4, Index, 6); +} + +void +CPostFX::RenderOverlaySniper(RwCamera *cam, int32 r, int32 g, int32 b, int32 a) +{ + RwRenderStateSet(rwRENDERSTATETEXTURERASTER, pFrontBuffer); + RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE); + + RwIm2DVertexSetIntRGBA(&Vertex[0], r, g, b, 80); + RwIm2DVertexSetIntRGBA(&Vertex[1], r, g, b, 80); + RwIm2DVertexSetIntRGBA(&Vertex[2], r, g, b, 80); + RwIm2DVertexSetIntRGBA(&Vertex[3], r, g, b, 80); + RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA); + RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA); + + RwIm2DRenderIndexedPrimitive(rwPRIMTYPETRILIST, Vertex, 4, Index, 6); +} + +float CPostFX::Intensity = 1.0f; + +void +CPostFX::RenderOverlayShader(RwCamera *cam, int32 r, int32 g, int32 b, int32 a) +{ + RwRenderStateSet(rwRENDERSTATETEXTURERASTER, pBackBuffer); + + if(EffectSwitch == POSTFX_MOBILE){ + float mult[3], add[3]; + mult[0] = (r-64)/256.0f + 1.4f; + mult[1] = (g-64)/256.0f + 1.4f; + mult[2] = (b-64)/256.0f + 1.4f; + add[0] = r/1536.f - 0.05f; + add[1] = g/1536.f - 0.05f; + add[2] = b/1536.f - 0.05f; +#ifdef RW_D3D9 + rw::d3d::d3ddevice->SetPixelShaderConstantF(10, mult, 1); + rw::d3d::d3ddevice->SetPixelShaderConstantF(11, add, 1); + + rw::d3d::im2dOverridePS = contrast_PS; +#endif +#ifdef RW_OPENGL + rw::gl3::im2dOverrideShader = contrast; + contrast->use(); + glUniform3fv(contrast->uniformLocations[u_contrastMult], 1, mult); + glUniform3fv(contrast->uniformLocations[u_contrastAdd], 1, add); +#endif + }else{ + float f = Intensity; + float blurcolors[4]; + blurcolors[0] = r*f/255.0f; + blurcolors[1] = g*f/255.0f; + blurcolors[2] = b*f/255.0f; + blurcolors[3] = 30/255.0f; +#ifdef RW_D3D9 + rw::d3d::d3ddevice->SetPixelShaderConstantF(10, blurcolors, 1); + +/* + float blurcolors[NUMAVERAGE*4]; + int j = Next; + for(int i = NUMAVERAGE-1; i >= 0; i--){ + j = (j+NUMAVERAGE-1)%NUMAVERAGE; +// blurcolors[i*4+0] = PrevRed[j]/255.0f; +// blurcolors[i*4+1] = PrevGreen[j]/255.0f; +// blurcolors[i*4+2] = PrevBlue[j]/255.0f; +// blurcolors[i*4+3] = Intensity/255.0f; + + blurcolors[i*4+0] = r/255.0f; + blurcolors[i*4+1] = g/255.0f; + blurcolors[i*4+2] = b/255.0f; + blurcolors[i*4+3] = Intensity/255.0f; + } + rw::d3d::d3ddevice->SetPixelShaderConstantF(15, blurcolors, NUMAVERAGE); +*/ + + rw::d3d::im2dOverridePS = colourfilterVC_PS; +#endif +#ifdef RW_OPENGL + rw::gl3::im2dOverrideShader = colourFilterVC; + colourFilterVC->use(); + glUniform4fv(colourFilterVC->uniformLocations[u_blurcolor], 1, blurcolors); +#endif + } + RwIm2DRenderIndexedPrimitive(rwPRIMTYPETRILIST, Vertex, 4, Index, 6); +#ifdef RW_D3D9 + rw::d3d::im2dOverridePS = nil; +#endif +#ifdef RW_OPENGL + rw::gl3::im2dOverrideShader = nil; +#endif +} + +void +CPostFX::RenderMotionBlur(RwCamera *cam, uint32 blur) +{ + if(blur == 0) + return; + + RwRenderStateSet(rwRENDERSTATETEXTURERASTER, pFrontBuffer); + RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE); + RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA); + RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA); + + RwIm2DVertexSetIntRGBA(&Vertex[0], 255, 255, 255, blur); + RwIm2DVertexSetIntRGBA(&Vertex[1], 255, 255, 255, blur); + RwIm2DVertexSetIntRGBA(&Vertex[2], 255, 255, 255, blur); + RwIm2DVertexSetIntRGBA(&Vertex[3], 255, 255, 255, blur); + + RwIm2DRenderIndexedPrimitive(rwPRIMTYPETRILIST, Vertex, 4, Index, 6); +} + +bool +CPostFX::NeedBackBuffer(void) +{ + // Current frame -- needed for non-blur effect + switch(EffectSwitch){ + case POSTFX_OFF: + case POSTFX_SIMPLE: + // no actual rendering here + return false; + case POSTFX_NORMAL: + if(MotionBlurOn) + return false; + else + return true; + case POSTFX_MOBILE: + return true; + } + return false; +} + +bool +CPostFX::NeedFrontBuffer(int32 type) +{ + // Last frame -- needed for motion blur + if(CMBlur::Drunkness > 0.0f) + return true; + if(type == MOTION_BLUR_SNIPER) + return true; + + switch(EffectSwitch){ + case POSTFX_OFF: + case POSTFX_SIMPLE: + // no actual rendering here + return false; + case POSTFX_NORMAL: + if(MotionBlurOn) + return true; + else + return false; + case POSTFX_MOBILE: + return false; + } + return false; +} + +void +CPostFX::Render(RwCamera *cam, uint32 red, uint32 green, uint32 blue, uint32 blur, int32 type, uint32 bluralpha) +{ + if(pFrontBuffer == nil) + Open(cam); + assert(pFrontBuffer); + assert(pBackBuffer); + + if(type == MOTION_BLUR_LIGHT_SCENE){ + SmoothColor(red, green, blue, blur); + red = AvgRed; + green = AvgGreen; + blue = AvgBlue; + blur = AvgAlpha; + } + + if(NeedBackBuffer()){ + RwRasterPushContext(pBackBuffer); + RwRasterRenderFast(RwCameraGetRaster(cam), 0, 0); + RwRasterPopContext(); + } + + DefinedState(); + + RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void*)FALSE); + RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, (void*)rwFILTERNEAREST); + RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)FALSE); + RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE); + + if(type == MOTION_BLUR_SNIPER){ + if(!bJustInitialised) + RenderOverlaySniper(cam, red, green, blue, blur); + }else switch(EffectSwitch){ + case POSTFX_OFF: + case POSTFX_SIMPLE: + // no actual rendering here + break; + case POSTFX_NORMAL: + if(MotionBlurOn){ + if(!bJustInitialised) + RenderOverlayBlur(cam, red, green, blue, blur); + }else{ + RenderOverlayShader(cam, red, green, blue, blur); + } + break; + case POSTFX_MOBILE: + RenderOverlayShader(cam, red, green, blue, blur); + break; + } + + if(!bJustInitialised) + RenderMotionBlur(cam, 175.0f * CMBlur::Drunkness); + + RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)TRUE); + RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)TRUE); + RwRenderStateSet(rwRENDERSTATETEXTURERASTER, nil); + RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)FALSE); + RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA); + RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA); + + if(NeedFrontBuffer(type)){ + RwRasterPushContext(pFrontBuffer); + RwRasterRenderFast(RwCameraGetRaster(cam), 0, 0); + RwRasterPopContext(); + bJustInitialised = false; + }else + bJustInitialised = true; +} + +int CPostFX::PrevRed[NUMAVERAGE], CPostFX::AvgRed; +int CPostFX::PrevGreen[NUMAVERAGE], CPostFX::AvgGreen; +int CPostFX::PrevBlue[NUMAVERAGE], CPostFX::AvgBlue; +int CPostFX::PrevAlpha[NUMAVERAGE], CPostFX::AvgAlpha; +int CPostFX::Next; +int CPostFX::NumValues; + +// This is rather annoying...the blur color can flicker slightly +// which becomes very visible when amplified by the shader +void +CPostFX::SmoothColor(uint32 red, uint32 green, uint32 blue, uint32 alpha) +{ + PrevRed[Next] = red; + PrevGreen[Next] = green; + PrevBlue[Next] = blue; + PrevAlpha[Next] = alpha; + Next = (Next+1) % NUMAVERAGE; + NumValues = Min(NumValues+1, NUMAVERAGE); + + AvgRed = 0; + AvgGreen = 0; + AvgBlue = 0; + AvgAlpha = 0; + for(int i = 0; i < NumValues; i++){ + AvgRed += PrevRed[i]; + AvgGreen += PrevGreen[i]; + AvgBlue += PrevBlue[i]; + AvgAlpha += PrevAlpha[i]; + } + AvgRed /= NumValues; + AvgGreen /= NumValues; + AvgBlue /= NumValues; + AvgAlpha /= NumValues; +} + +#endif diff --git a/src/extras/postfx.h b/src/extras/postfx.h new file mode 100644 index 00000000..ace2e4a8 --- /dev/null +++ b/src/extras/postfx.h @@ -0,0 +1,45 @@ +#pragma once + +#ifdef EXTENDED_COLOURFILTER + +class CPostFX +{ +public: + enum { + POSTFX_OFF, + POSTFX_SIMPLE, + POSTFX_NORMAL, + POSTFX_MOBILE + }; + static RwRaster *pFrontBuffer; + static RwRaster *pBackBuffer; + static bool bJustInitialised; + static int EffectSwitch; + static bool BlurOn; // or use CMblur for that? + static bool MotionBlurOn; // or use CMblur for that? + static float Intensity; + + // smooth blur color + enum { NUMAVERAGE = 20 }; + static int PrevRed[NUMAVERAGE], AvgRed; + static int PrevGreen[NUMAVERAGE], AvgGreen; + static int PrevBlue[NUMAVERAGE], AvgBlue; + static int PrevAlpha[NUMAVERAGE], AvgAlpha; + static int Next; + static int NumValues; + + static void InitOnce(void); + static void Open(RwCamera *cam); + static void Close(void); + static void RenderOverlayBlur(RwCamera *cam, int32 r, int32 g, int32 b, int32 a); + static void RenderOverlaySniper(RwCamera *cam, int32 r, int32 g, int32 b, int32 a); + static void RenderOverlayShader(RwCamera *cam, int32 r, int32 g, int32 b, int32 a); + static void RenderMotionBlur(RwCamera *cam, uint32 blur); + static void Render(RwCamera *cam, uint32 red, uint32 green, uint32 blue, uint32 blur, int32 type, uint32 bluralpha); + static void SmoothColor(uint32 red, uint32 green, uint32 blue, uint32 alpha); + static bool NeedBackBuffer(void); + static bool NeedFrontBuffer(int32 type); + static bool UseBlurColours(void) { return EffectSwitch != POSTFX_SIMPLE; } +}; + +#endif diff --git a/src/extras/shaders/Makefile b/src/extras/shaders/Makefile new file mode 100644 index 00000000..effb6afc --- /dev/null +++ b/src/extras/shaders/Makefile @@ -0,0 +1,16 @@ +all: im2d_gl3.inc colourfilterVC_fs_gl3.inc contrast_fs_gl3.inc + +im2d_gl3.inc: im2d.vert + (echo 'const char *im2d_vert_src =';\ + sed 's/..*/"&\\n"/' im2d.vert;\ + echo ';') >im2d_gl3.inc + +colourfilterVC_fs_gl3.inc: colourfilterVC.frag + (echo 'const char *colourfilterVC_frag_src =';\ + sed 's/..*/"&\\n"/' colourfilterVC.frag;\ + echo ';') >colourfilterVC_fs_gl3.inc + +contrast_fs_gl3.inc: contrast.frag + (echo 'const char *contrast_frag_src =';\ + sed 's/..*/"&\\n"/' contrast.frag;\ + echo ';') >contrast_fs_gl3.inc diff --git a/src/extras/shaders/colourfilterVC.frag b/src/extras/shaders/colourfilterVC.frag new file mode 100644 index 00000000..e19a8600 --- /dev/null +++ b/src/extras/shaders/colourfilterVC.frag @@ -0,0 +1,28 @@ +uniform sampler2D tex0; +uniform vec4 u_blurcolor; + +in vec4 v_color; +in vec2 v_tex0; +in float v_fog; + +out vec4 color; + +void +main(void) +{ + float a = u_blurcolor.a; + + vec4 doublec = clamp(u_blurcolor*2, 0.0, 1.0); + vec4 dst = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y)); + vec4 prev = dst; + for(int i = 0; i < 5; i++){ +// vec4 doublec = clamp(u_blurcolor*2, 0.0, 1.0); + vec4 tmp = dst*(1.0-a) + prev*doublec*a; + tmp += prev*u_blurcolor; + tmp += prev*u_blurcolor; + prev = clamp(tmp, 0.0, 1.0); + } + color.rgb = prev.rgb; + color.a = 1.0f; +} + diff --git a/src/extras/shaders/colourfilterVC_PS.cso b/src/extras/shaders/colourfilterVC_PS.cso new file mode 100644 index 0000000000000000000000000000000000000000..4b0e9f3fa72d0277834a8d66b592c49aa159ce0c GIT binary patch literal 648 zcmZQz`v3pme{BZm5Jx8&1_p+51_lO@7!v~n1BlPS$iPs*z`)=F5@z6HU}Vr@@Byh| zU|@)0U|?WoU|?WmU}8vsiY4Wg7A5EBFfcMOGcYo+fV6{UN>VErSQvO17{L%M#86Ni zZxnC9;G3CTlwX{mR-&L0q^aQH6YQf9oROH4TBP8dpIeZblUk%;sb^%VXK8ArXKZL_ z$PmcDz{(!GVFH!5(571A{yR1IXD83=GU0pzH|@9Q+HMz|Q1vU|@K%fq~=6 z0wx9qW=00_1}=st3qY8afq|KcfgL2@z{v2VL5P8Yg_(i9fs5h)0w#thU~yzMAU!M$ z3@l6x;tddah6T(FPZ~gKK>9#tfW$$3khvf>NDs(d7O1%(^$ZM88qm#Q8KmYgGO&Zg q2ILoP{sQ?M6kZ^|!~Dg77CwyN_~B?^UeVa^JPeFr2vJi|9B&kFz~GyiT$Ep&pH`xv5u~Z$;S=nm5S)>il3JwToS$2e znUh+iV5w(hsb^_wq-ShsXvh%Az`)ADz`uZjp}`(v5`>gzU|?ckU}#`qVBP>_PhjBS zU*H6GI)4KL!;=jR98VT7GB7YPGO#yrF+5qo!oa}7z`zcYYhYw}(!k9Ck!N7wXkcJq Q0IOx-0PAh||DS;Y0E@Fdy8r+H literal 0 HcmV?d00001 diff --git a/src/extras/shaders/contrastPS.hlsl b/src/extras/shaders/contrastPS.hlsl new file mode 100644 index 00000000..a1de1d81 --- /dev/null +++ b/src/extras/shaders/contrastPS.hlsl @@ -0,0 +1,21 @@ +struct PS_INPUT +{ + float4 position : POSITION; + float3 texcoord0 : TEXCOORD0; + float4 color : COLOR0; +}; + +uniform float3 contrastMult : register(c10); +uniform float3 contrastAdd : register(c11); + +sampler2D tex : register(s0); + +float4 +main(PS_INPUT In) : COLOR +{ + float4 dst = tex2D(tex, In.texcoord0.xy); + + dst.rgb = dst.rgb*contrastMult + contrastAdd; + dst.a = 1.0; + return dst; +} diff --git a/src/extras/shaders/contrastPS.inc b/src/extras/shaders/contrastPS.inc new file mode 100644 index 00000000..5386792f --- /dev/null +++ b/src/extras/shaders/contrastPS.inc @@ -0,0 +1,31 @@ +static unsigned char contrastPS_cso[] = { + 0x00, 0x02, 0xff, 0xff, 0xfe, 0xff, 0x35, 0x00, 0x43, 0x54, 0x41, 0x42, + 0x1c, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, + 0x03, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x98, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0b, 0x00, + 0x01, 0x00, 0x2e, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x74, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0a, 0x00, 0x01, 0x00, 0x2a, 0x00, + 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x88, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, + 0x41, 0x64, 0x64, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x03, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6e, 0x74, + 0x72, 0x61, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x00, 0x74, 0x65, 0x78, + 0x00, 0xab, 0xab, 0xab, 0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x32, + 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, + 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, + 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, + 0x72, 0x20, 0x39, 0x2e, 0x32, 0x39, 0x2e, 0x39, 0x35, 0x32, 0x2e, 0x33, + 0x31, 0x31, 0x31, 0x00, 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0, + 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x03, 0xb0, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90, + 0x00, 0x08, 0x0f, 0xa0, 0x42, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, + 0x00, 0x00, 0xe4, 0xb0, 0x00, 0x08, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, + 0x01, 0x00, 0x07, 0x80, 0x0a, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x80, + 0x0b, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x80, + 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, + 0x00, 0x00, 0xe4, 0x80, 0xff, 0xff, 0x00, 0x00 +}; diff --git a/src/extras/shaders/contrast_fs_gl3.inc b/src/extras/shaders/contrast_fs_gl3.inc new file mode 100644 index 00000000..58aaf079 --- /dev/null +++ b/src/extras/shaders/contrast_fs_gl3.inc @@ -0,0 +1,20 @@ +const char *contrast_frag_src = +"uniform sampler2D tex0;\n" +"uniform vec3 u_contrastAdd;\n" +"uniform vec3 u_contrastMult;\n" + +"in vec4 v_color;\n" +"in vec2 v_tex0;\n" +"in float v_fog;\n" + +"out vec4 color;\n" + +"void\n" +"main(void)\n" +"{\n" +" vec4 dst = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));\n" +" color.rgb = dst.rgb*u_contrastMult + u_contrastAdd;\n" +" color.a = 1.0f;\n" +"}\n" + +; diff --git a/src/extras/shaders/im2d.vert b/src/extras/shaders/im2d.vert new file mode 100644 index 00000000..241593b1 --- /dev/null +++ b/src/extras/shaders/im2d.vert @@ -0,0 +1,21 @@ +uniform vec4 u_xform; + +layout(location = 0) in vec4 in_pos; +layout(location = 2) in vec4 in_color; +layout(location = 3) in vec2 in_tex0; + +out vec4 v_color; +out vec2 v_tex0; +out float v_fog; + +void +main(void) +{ + gl_Position = in_pos; + gl_Position.w = 1.0; + gl_Position.xy = gl_Position.xy * u_xform.xy + u_xform.zw; + v_fog = DoFog(gl_Position.z); + gl_Position.xyz *= gl_Position.w; + v_color = in_color; + v_tex0 = in_tex0; +} diff --git a/src/extras/shaders/im2d_gl3.inc b/src/extras/shaders/im2d_gl3.inc new file mode 100644 index 00000000..68341b39 --- /dev/null +++ b/src/extras/shaders/im2d_gl3.inc @@ -0,0 +1,23 @@ +const char *im2d_vert_src = +"uniform vec4 u_xform;\n" + +"layout(location = 0) in vec4 in_pos;\n" +"layout(location = 2) in vec4 in_color;\n" +"layout(location = 3) in vec2 in_tex0;\n" + +"out vec4 v_color;\n" +"out vec2 v_tex0;\n" +"out float v_fog;\n" + +"void\n" +"main(void)\n" +"{\n" +" gl_Position = in_pos;\n" +" gl_Position.w = 1.0;\n" +" gl_Position.xy = gl_Position.xy * u_xform.xy + u_xform.zw;\n" +" v_fog = DoFog(gl_Position.z);\n" +" gl_Position.xyz *= gl_Position.w;\n" +" v_color = in_color;\n" +" v_tex0 = in_tex0;\n" +"}\n" +; diff --git a/src/extras/shaders/make.cmd b/src/extras/shaders/make.cmd new file mode 100644 index 00000000..8404ac6c --- /dev/null +++ b/src/extras/shaders/make.cmd @@ -0,0 +1,3 @@ +@echo off +for %%f in (*PS.hlsl) do "%DXSDK_DIR%\Utilities\bin\x86\fxc.exe" /T ps_2_0 /nologo /E main /Fo %%~nf.cso %%f +for %%f in (*VS.hlsl) do "%DXSDK_DIR%\Utilities\bin\x86\fxc.exe" /T vs_2_0 /nologo /E main /Fo %%~nf.cso %%f diff --git a/src/extras/shaders/makeinc.sh b/src/extras/shaders/makeinc.sh new file mode 100644 index 00000000..a649af33 --- /dev/null +++ b/src/extras/shaders/makeinc.sh @@ -0,0 +1,5 @@ +#!sh +for i in *cso; do + (echo -n 'static ' + xxd -i $i | grep -v '_len = ') > ${i%cso}inc +done diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp index a1c03024..26c91abb 100644 --- a/src/peds/Ped.cpp +++ b/src/peds/Ped.cpp @@ -2798,6 +2798,7 @@ CPed::SetModelIndex(uint32 mi) { m_pRTShadow = new CCutsceneShadow; m_pRTShadow->Create(m_rwObject, 10, 1, 1, 1); + //m_pRTShadow->Create(m_rwObject, 8, 0, 0, 0); } #endif } diff --git a/src/render/MBlur.cpp b/src/render/MBlur.cpp index 4c805d25..08298a1f 100644 --- a/src/render/MBlur.cpp +++ b/src/render/MBlur.cpp @@ -11,6 +11,7 @@ #include "Camera.h" #include "MBlur.h" #include "Timer.h" +#include "postfx.h" // Originally taken from RW example 'mblur' @@ -30,6 +31,10 @@ extern "C" D3DCAPS8 _RwD3D8DeviceCaps; RwBool CMBlur::MotionBlurOpen(RwCamera *cam) { +#ifdef EXTENDED_COLOURFILTER + CPostFX::Open(cam); + return TRUE; +#else #ifdef GTA_PS2 RwRect rect = {0, 0, 0, 0}; @@ -130,18 +135,22 @@ CMBlur::MotionBlurOpen(RwCamera *cam) return TRUE; #endif +#endif } RwBool CMBlur::MotionBlurClose(void) { +#ifdef EXTENDED_COLOURFILTER + CPostFX::Close(); +#else if(pFrontBuffer){ RwRasterDestroy(pFrontBuffer); pFrontBuffer = nil; return TRUE; } - +#endif return FALSE; } @@ -197,8 +206,8 @@ CMBlur::CreateImmediateModeData(RwCamera *cam, RwRect *rect) RwIm2DVertexSetIntRGBA(&Vertex[3], 255, 255, 255, 255); - RwIm2DVertexSetScreenX(&Vertex2[0], zero); - RwIm2DVertexSetScreenY(&Vertex2[0], zero); + RwIm2DVertexSetScreenX(&Vertex2[0], zero + 2.0f); + RwIm2DVertexSetScreenY(&Vertex2[0], zero + 2.0f); RwIm2DVertexSetScreenZ(&Vertex2[0], RwIm2DGetNearScreenZ()); RwIm2DVertexSetCameraZ(&Vertex2[0], RwCameraGetNearClipPlane(cam)); RwIm2DVertexSetRecipCameraZ(&Vertex2[0], 1.0f/RwCameraGetNearClipPlane(cam)); @@ -206,8 +215,8 @@ CMBlur::CreateImmediateModeData(RwCamera *cam, RwRect *rect) RwIm2DVertexSetV(&Vertex2[0], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam)); RwIm2DVertexSetIntRGBA(&Vertex2[0], 255, 255, 255, 255); - RwIm2DVertexSetScreenX(&Vertex2[1], zero); - RwIm2DVertexSetScreenY(&Vertex2[1], ymax); + RwIm2DVertexSetScreenX(&Vertex2[1], 2.0f); + RwIm2DVertexSetScreenY(&Vertex2[1], ymax + 2.0f); RwIm2DVertexSetScreenZ(&Vertex2[1], RwIm2DGetNearScreenZ()); RwIm2DVertexSetCameraZ(&Vertex2[1], RwCameraGetNearClipPlane(cam)); RwIm2DVertexSetRecipCameraZ(&Vertex2[1], 1.0f/RwCameraGetNearClipPlane(cam)); @@ -215,8 +224,8 @@ CMBlur::CreateImmediateModeData(RwCamera *cam, RwRect *rect) RwIm2DVertexSetV(&Vertex2[1], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam)); RwIm2DVertexSetIntRGBA(&Vertex2[1], 255, 255, 255, 255); - RwIm2DVertexSetScreenX(&Vertex2[2], xmax); - RwIm2DVertexSetScreenY(&Vertex2[2], ymax); + RwIm2DVertexSetScreenX(&Vertex2[2], xmax + 2.0f); + RwIm2DVertexSetScreenY(&Vertex2[2], ymax + 2.0f); RwIm2DVertexSetScreenZ(&Vertex2[2], RwIm2DGetNearScreenZ()); RwIm2DVertexSetCameraZ(&Vertex2[2], RwCameraGetNearClipPlane(cam)); RwIm2DVertexSetRecipCameraZ(&Vertex2[2], 1.0f/RwCameraGetNearClipPlane(cam)); @@ -224,20 +233,22 @@ CMBlur::CreateImmediateModeData(RwCamera *cam, RwRect *rect) RwIm2DVertexSetV(&Vertex2[2], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam)); RwIm2DVertexSetIntRGBA(&Vertex2[2], 255, 255, 255, 255); - RwIm2DVertexSetScreenX(&Vertex2[3], xmax); - RwIm2DVertexSetScreenY(&Vertex2[3], zero); + RwIm2DVertexSetScreenX(&Vertex2[3], xmax + 2.0f); + RwIm2DVertexSetScreenY(&Vertex2[3], zero + 2.0f); RwIm2DVertexSetScreenZ(&Vertex2[3], RwIm2DGetNearScreenZ()); RwIm2DVertexSetCameraZ(&Vertex2[3], RwCameraGetNearClipPlane(cam)); RwIm2DVertexSetRecipCameraZ(&Vertex2[3], 1.0f/RwCameraGetNearClipPlane(cam)); RwIm2DVertexSetU(&Vertex2[3], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam)); RwIm2DVertexSetV(&Vertex2[3], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam)); RwIm2DVertexSetIntRGBA(&Vertex2[3], 255, 255, 255, 255); - } void CMBlur::MotionBlurRender(RwCamera *cam, uint32 red, uint32 green, uint32 blue, uint32 blur, int32 type, uint32 bluralpha) { +#ifdef EXTENDED_COLOURFILTER + CPostFX::Render(cam, red, green, blue, blur, type, bluralpha); +#else RwRGBA color = { (RwUInt8)red, (RwUInt8)green, (RwUInt8)blue, (RwUInt8)blur }; #ifdef GTA_PS2 if( pFrontBuffer ) @@ -253,6 +264,7 @@ CMBlur::MotionBlurRender(RwCamera *cam, uint32 red, uint32 green, uint32 blue, u RwRasterPopContext(); } #endif +#endif } static uint8 DrunkBlurRed = 128; diff --git a/src/rw/Lights.cpp b/src/rw/Lights.cpp index cd45b81f..c5038232 100644 --- a/src/rw/Lights.cpp +++ b/src/rw/Lights.cpp @@ -23,6 +23,13 @@ RwRGBAReal DirectionalLightColourForFrame; RwRGBAReal AmbientLightColour; RwRGBAReal DirectionalLightColour; +#ifdef EXTENDED_COLOURFILTER +#include "postfx.h" +#define USEBLURCOLORS CPostFX::UseBlurColours() +#else +#define USEBLURCOLORS CMBlur::BlurOn +#endif + //--MIAMI: done void SetLightsWithTimeOfDayColour(RpWorld *) @@ -31,7 +38,7 @@ SetLightsWithTimeOfDayColour(RpWorld *) RwMatrix mat; if(pAmbient){ - if(CMBlur::BlurOn){ + if(USEBLURCOLORS){ AmbientLightColourForFrame.red = CTimeCycle::GetAmbientRed_Bl() * CCoronas::LightsMult; AmbientLightColourForFrame.green = CTimeCycle::GetAmbientGreen_Bl() * CCoronas::LightsMult; AmbientLightColourForFrame.blue = CTimeCycle::GetAmbientBlue_Bl() * CCoronas::LightsMult; @@ -41,7 +48,7 @@ SetLightsWithTimeOfDayColour(RpWorld *) AmbientLightColourForFrame.blue = CTimeCycle::GetAmbientBlue() * CCoronas::LightsMult; } - if(CMBlur::BlurOn){ + if(USEBLURCOLORS){ AmbientLightColourForFrame_PedsCarsAndObjects.red = CTimeCycle::GetAmbientRed_Obj_Bl() * CCoronas::LightsMult; AmbientLightColourForFrame_PedsCarsAndObjects.green = CTimeCycle::GetAmbientGreen_Obj_Bl() * CCoronas::LightsMult; AmbientLightColourForFrame_PedsCarsAndObjects.blue = CTimeCycle::GetAmbientBlue_Obj_Bl() * CCoronas::LightsMult; From 4635daf6b3c8679387f3e654d64f4dd7a8fcfedb Mon Sep 17 00:00:00 2001 From: aap Date: Tue, 11 Aug 2020 18:42:21 +0200 Subject: [PATCH 038/112] update librw --- librw | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librw b/librw index 113d76cf..5e299fb1 160000 --- a/librw +++ b/librw @@ -1 +1 @@ -Subproject commit 113d76cfaaf064447ac936f79d91ea04788fca24 +Subproject commit 5e299fb12e0ab85b5a32032544f58480a93a4a32 From a9935dcd452a309ab6a9f38b978ba794784b5d33 Mon Sep 17 00:00:00 2001 From: aap Date: Tue, 11 Aug 2020 19:42:08 +0200 Subject: [PATCH 039/112] tiny postfx cleanup --- src/extras/postfx.cpp | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/src/extras/postfx.cpp b/src/extras/postfx.cpp index e8cd4bc4..7e9df4e7 100644 --- a/src/extras/postfx.cpp +++ b/src/extras/postfx.cpp @@ -150,11 +150,6 @@ CPostFX::Open(RwCamera *cam) #endif #ifdef RW_OPENGL using namespace rw::gl3; -// AllocConsole(); -// freopen("CONIN$", "r", stdin); -// freopen("CONOUT$", "w", stdout); -// freopen("CONOUT$", "w", stderr); - { #ifdef RW_GLES2 @@ -309,25 +304,6 @@ CPostFX::RenderOverlayShader(RwCamera *cam, int32 r, int32 g, int32 b, int32 a) blurcolors[3] = 30/255.0f; #ifdef RW_D3D9 rw::d3d::d3ddevice->SetPixelShaderConstantF(10, blurcolors, 1); - -/* - float blurcolors[NUMAVERAGE*4]; - int j = Next; - for(int i = NUMAVERAGE-1; i >= 0; i--){ - j = (j+NUMAVERAGE-1)%NUMAVERAGE; -// blurcolors[i*4+0] = PrevRed[j]/255.0f; -// blurcolors[i*4+1] = PrevGreen[j]/255.0f; -// blurcolors[i*4+2] = PrevBlue[j]/255.0f; -// blurcolors[i*4+3] = Intensity/255.0f; - - blurcolors[i*4+0] = r/255.0f; - blurcolors[i*4+1] = g/255.0f; - blurcolors[i*4+2] = b/255.0f; - blurcolors[i*4+3] = Intensity/255.0f; - } - rw::d3d::d3ddevice->SetPixelShaderConstantF(15, blurcolors, NUMAVERAGE); -*/ - rw::d3d::im2dOverridePS = colourfilterVC_PS; #endif #ifdef RW_OPENGL From 878ffa8998f7fc78064d0e38795f26ee0de57688 Mon Sep 17 00:00:00 2001 From: aap Date: Wed, 12 Aug 2020 10:48:00 +0200 Subject: [PATCH 040/112] sun reflection fix --- src/render/Coronas.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/render/Coronas.cpp b/src/render/Coronas.cpp index df5dfadb..2d621d18 100644 --- a/src/render/Coronas.cpp +++ b/src/render/Coronas.cpp @@ -604,8 +604,8 @@ CCoronas::RenderSunReflection(void) RwIm3DVertexSetRGBA(&TempBufferRenderVertices[TempBufferVerticesStored+1], r, g, b, 255); RwIm3DVertexSetPos(&TempBufferRenderVertices[TempBufferVerticesStored+1], - sunPos.x + fwdLen*sunDir.x - sideLen*sunDir.x, - sunPos.y + fwdLen*sunDir.y + sideLen*sunDir.y, + sunPos.x + fwdLen*sunDir.x - sideLen*sunDir.y, + sunPos.y + fwdLen*sunDir.y + sideLen*sunDir.x, sunPos.z); RwIm3DVertexSetU(&TempBufferRenderVertices[TempBufferVerticesStored+0], 0.0f); From 2034d7b2aebdeb3759efb150a1d09c586f5d2ce3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?eray=20or=C3=A7unus?= Date: Thu, 13 Aug 2020 01:29:34 +0300 Subject: [PATCH 041/112] Register start button for real --- src/core/ControllerConfig.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/core/ControllerConfig.cpp b/src/core/ControllerConfig.cpp index 6a5080e5..fe1821c2 100644 --- a/src/core/ControllerConfig.cpp +++ b/src/core/ControllerConfig.cpp @@ -633,6 +633,11 @@ void CControllerConfigManager::AffectControllerStateOn_ButtonDown(int32 button, } AffectControllerStateOn_ButtonDown_AllStates(button, type, *state); + +#ifdef REGISTER_START_BUTTON + if (button == 12) + state->Start = 255; +#endif } } } @@ -1036,6 +1041,11 @@ void CControllerConfigManager::AffectControllerStateOn_ButtonUp(int32 button, eC { if (FrontEndMenuManager.GetIsMenuActive()) AffectControllerStateOn_ButtonUp_All_Player_States(button, type, *state); + +#ifdef REGISTER_START_BUTTON + if (button == 12) + state->Start = 0; +#endif } } } From f0503edf62ff0263ae3e55b3a7916e03b2152b7a Mon Sep 17 00:00:00 2001 From: aap Date: Thu, 13 Aug 2020 16:29:42 +0200 Subject: [PATCH 042/112] fix render poly bug --- src/render/Renderer.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 717021a7..7ae29a2f 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -836,8 +836,13 @@ CRenderer::ScanSectorPoly(RwV2d *poly, int32 numVertices, void (*scanfunc)(CPtrL a2 = i; } } +#ifdef FIX_BUGS + y = Floor(miny); + yend = Floor(maxy); +#else y = miny; yend = maxy; +#endif // Go left in poly to find first edge b b2 = a2; @@ -875,8 +880,8 @@ CRenderer::ScanSectorPoly(RwV2d *poly, int32 numVertices, void (*scanfunc)(CPtrL while(y <= yend && y < NUMSECTORS_Y){ // scan one x-line if(y >= 0 && xstart < NUMSECTORS_X) - for(x = xstart; x <= xend; x++) - if(x >= 0 && x != NUMSECTORS_X) + for(x = xstart; x <= xend && x != NUMSECTORS_X; x++) + if(x >= 0) scanfunc(CWorld::GetSector(x, y)->m_lists); // advance one scan line From 0d8fcb41eec5da54ef0ec9e4c861f5281794b0a9 Mon Sep 17 00:00:00 2001 From: aap Date: Thu, 13 Aug 2020 16:29:42 +0200 Subject: [PATCH 043/112] fix render poly bug --- src/render/Renderer.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 03ef1064..66c12dd9 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -908,8 +908,13 @@ CRenderer::ScanSectorPoly(RwV2d *poly, int32 numVertices, void (*scanfunc)(CPtrL a2 = i; } } +#ifdef FIX_BUGS + y = Floor(miny); + yend = Floor(maxy); +#else y = miny; yend = maxy; +#endif // Go left in poly to find first edge b b2 = a2; @@ -947,8 +952,8 @@ CRenderer::ScanSectorPoly(RwV2d *poly, int32 numVertices, void (*scanfunc)(CPtrL while(y <= yend && y < NUMSECTORS_Y){ // scan one x-line if(y >= 0 && xstart < NUMSECTORS_X) - for(x = xstart; x <= xend; x++) - if(x >= 0 && x != NUMSECTORS_X) + for(x = xstart; x <= xend && x != NUMSECTORS_X; x++) + if(x >= 0) scanfunc(CWorld::GetSector(x, y)->m_lists); // advance one scan line From afed831aeda5415f1d99612d0f14541fdd34720f Mon Sep 17 00:00:00 2001 From: aap Date: Thu, 13 Aug 2020 18:14:24 +0200 Subject: [PATCH 044/112] extended postfx and sniper hud fix --- src/core/Game.cpp | 4 + src/core/config.h | 1 + src/core/re3.cpp | 9 + src/extras/postfx.cpp | 475 ++++++++++++++++++ src/extras/postfx.h | 35 ++ src/extras/shaders/Makefile | 16 + src/extras/shaders/colourfilterIII.frag | 28 ++ src/extras/shaders/colourfilterIII_PS.cso | Bin 0 -> 452 bytes src/extras/shaders/colourfilterIII_PS.hlsl | 15 + src/extras/shaders/colourfilterIII_PS.inc | 40 ++ src/extras/shaders/colourfilterIII_fs_gl3.inc | 30 ++ src/extras/shaders/contrast.frag | 18 + src/extras/shaders/contrastPS.cso | Bin 0 -> 344 bytes src/extras/shaders/contrastPS.hlsl | 21 + src/extras/shaders/contrastPS.inc | 31 ++ src/extras/shaders/contrast_fs_gl3.inc | 20 + src/extras/shaders/im2d.vert | 21 + src/extras/shaders/im2d_gl3.inc | 23 + src/extras/shaders/make.cmd | 3 + src/extras/shaders/makeinc.sh | 5 + src/render/Hud.cpp | 57 ++- src/render/MBlur.cpp | 16 +- src/render/Sprite2d.cpp | 17 +- 23 files changed, 851 insertions(+), 34 deletions(-) create mode 100644 src/extras/postfx.cpp create mode 100644 src/extras/postfx.h create mode 100644 src/extras/shaders/Makefile create mode 100644 src/extras/shaders/colourfilterIII.frag create mode 100644 src/extras/shaders/colourfilterIII_PS.cso create mode 100644 src/extras/shaders/colourfilterIII_PS.hlsl create mode 100644 src/extras/shaders/colourfilterIII_PS.inc create mode 100644 src/extras/shaders/colourfilterIII_fs_gl3.inc create mode 100644 src/extras/shaders/contrast.frag create mode 100644 src/extras/shaders/contrastPS.cso create mode 100644 src/extras/shaders/contrastPS.hlsl create mode 100644 src/extras/shaders/contrastPS.inc create mode 100644 src/extras/shaders/contrast_fs_gl3.inc create mode 100644 src/extras/shaders/im2d.vert create mode 100644 src/extras/shaders/im2d_gl3.inc create mode 100644 src/extras/shaders/make.cmd create mode 100644 src/extras/shaders/makeinc.sh diff --git a/src/core/Game.cpp b/src/core/Game.cpp index 08623c65..d5b376f6 100644 --- a/src/core/Game.cpp +++ b/src/core/Game.cpp @@ -87,6 +87,7 @@ #include "Zones.h" #include "debugmenu.h" #include "frontendoption.h" +#include "postfx.h" eLevelName CGame::currLevel; bool CGame::bDemoMode = true; @@ -148,6 +149,9 @@ CGame::InitialiseOnceBeforeRW(void) CFileMgr::Initialise(); CdStreamInit(MAX_CDCHANNELS); ValidateVersion(); +#ifdef EXTENDED_COLOURFILTER + CPostFX::InitOnce(); +#endif return true; } diff --git a/src/core/config.h b/src/core/config.h index 43fc54fa..bb6adce6 100644 --- a/src/core/config.h +++ b/src/core/config.h @@ -208,6 +208,7 @@ enum Config { //#define NO_ISLAND_LOADING // disable loadscreen between islands via loading all island data at once, consumes more memory and CPU //#define USE_TEXTURE_POOL #define CUTSCENE_BORDERS_SWITCH +//#define EXTENDED_COLOURFILTER // more options for colour filter (replaces mblur) // Particle //#define PC_PARTICLE diff --git a/src/core/re3.cpp b/src/core/re3.cpp index f9be4b51..9edd9497 100644 --- a/src/core/re3.cpp +++ b/src/core/re3.cpp @@ -29,6 +29,8 @@ #include "Text.h" #include "WaterLevel.h" #include "main.h" +#include "MBlur.h" +#include "postfx.h" #ifndef _WIN32 #include "assert.h" @@ -461,6 +463,13 @@ DebugMenuPopulate(void) DebugMenuAddVarBool8("Render", "Frame limiter", &FrontEndMenuManager.m_PrefsFrameLimiter, nil); DebugMenuAddVarBool8("Render", "VSynch", &FrontEndMenuManager.m_PrefsVsync, nil); DebugMenuAddVar("Render", "Max FPS", &RsGlobal.maxFPS, nil, 1, 1, 1000, nil); +#ifdef EXTENDED_COLOURFILTER + static const char *filternames[] = { "None", "Simple", "Normal", "Mobile" }; + e = DebugMenuAddVar("Render", "Colourfilter", &CPostFX::EffectSwitch, nil, 1, CPostFX::POSTFX_OFF, CPostFX::POSTFX_MOBILE, filternames); + DebugMenuEntrySetWrap(e, true); + DebugMenuAddVar("Render", "Intensity", &CPostFX::Intensity, nil, 0.05f, 0, 10.0f); + DebugMenuAddVarBool8("Render", "Motion Blur", &CPostFX::MotionBlurOn, nil); +#endif DebugMenuAddVarBool8("Render", "Show Ped Paths", &gbShowPedPaths, nil); DebugMenuAddVarBool8("Render", "Show Car Paths", &gbShowCarPaths, nil); DebugMenuAddVarBool8("Render", "Show Car Path Links", &gbShowCarPathsLinks, nil); diff --git a/src/extras/postfx.cpp b/src/extras/postfx.cpp new file mode 100644 index 00000000..6355dfb1 --- /dev/null +++ b/src/extras/postfx.cpp @@ -0,0 +1,475 @@ +#define WITHWINDOWS +#define WITH_D3D +#include "common.h" + +#ifdef EXTENDED_COLOURFILTER + +#ifndef LIBRW +#error "Need librw for EXTENDED_COLOURFILTER" +#endif + +#include "RwHelper.h" +#include "Camera.h" +#include "MBlur.h" +#include "postfx.h" + +RwRaster *CPostFX::pFrontBuffer; +RwRaster *CPostFX::pBackBuffer; +bool CPostFX::bJustInitialised; +int CPostFX::EffectSwitch = POSTFX_NORMAL; +bool CPostFX::MotionBlurOn = false; + +static RwIm2DVertex Vertex[4]; +static RwIm2DVertex Vertex2[4]; +static RwImVertexIndex Index[6] = { 0, 1, 2, 0, 2, 3 }; + +#ifdef RW_D3D9 +void *colourfilterIII_PS; +void *contrast_PS; +#endif +#ifdef RW_OPENGL +int32 u_blurcolor; +int32 u_contrastAdd; +int32 u_contrastMult; +rw::gl3::Shader *colourFilterIII; +rw::gl3::Shader *contrast; +#endif + +void +CPostFX::InitOnce(void) +{ +#ifdef RW_OPENGL + u_blurcolor = rw::gl3::registerUniform("u_blurcolor"); + u_contrastAdd = rw::gl3::registerUniform("u_contrastAdd"); + u_contrastMult = rw::gl3::registerUniform("u_contrastMult"); +#endif +} + +void +CPostFX::Open(RwCamera *cam) +{ + uint32 width = Pow(2.0f, int32(log2(RwRasterGetWidth (RwCameraGetRaster(cam))))+1); + uint32 height = Pow(2.0f, int32(log2(RwRasterGetHeight(RwCameraGetRaster(cam))))+1); + uint32 depth = RwRasterGetDepth(RwCameraGetRaster(cam)); + pFrontBuffer = RwRasterCreate(width, height, depth, rwRASTERTYPECAMERATEXTURE); + pBackBuffer = RwRasterCreate(width, height, depth, rwRASTERTYPECAMERATEXTURE); + bJustInitialised = true; + + float zero, xmax, ymax; + + if(RwRasterGetDepth(RwCameraGetRaster(cam)) == 16){ + zero = HALFPX; + xmax = width + HALFPX; + ymax = height + HALFPX; + }else{ + zero = -HALFPX; + xmax = width - HALFPX; + ymax = height - HALFPX; + } + + RwIm2DVertexSetScreenX(&Vertex[0], zero); + RwIm2DVertexSetScreenY(&Vertex[0], zero); + RwIm2DVertexSetScreenZ(&Vertex[0], RwIm2DGetNearScreenZ()); + RwIm2DVertexSetCameraZ(&Vertex[0], RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetRecipCameraZ(&Vertex[0], 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetU(&Vertex[0], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetV(&Vertex[0], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetIntRGBA(&Vertex[0], 255, 255, 255, 255); + + RwIm2DVertexSetScreenX(&Vertex[1], zero); + RwIm2DVertexSetScreenY(&Vertex[1], ymax); + RwIm2DVertexSetScreenZ(&Vertex[1], RwIm2DGetNearScreenZ()); + RwIm2DVertexSetCameraZ(&Vertex[1], RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetRecipCameraZ(&Vertex[1], 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetU(&Vertex[1], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetV(&Vertex[1], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetIntRGBA(&Vertex[1], 255, 255, 255, 255); + + RwIm2DVertexSetScreenX(&Vertex[2], xmax); + RwIm2DVertexSetScreenY(&Vertex[2], ymax); + RwIm2DVertexSetScreenZ(&Vertex[2], RwIm2DGetNearScreenZ()); + RwIm2DVertexSetCameraZ(&Vertex[2], RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetRecipCameraZ(&Vertex[2], 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetU(&Vertex[2], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetV(&Vertex[2], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetIntRGBA(&Vertex[2], 255, 255, 255, 255); + + RwIm2DVertexSetScreenX(&Vertex[3], xmax); + RwIm2DVertexSetScreenY(&Vertex[3], zero); + RwIm2DVertexSetScreenZ(&Vertex[3], RwIm2DGetNearScreenZ()); + RwIm2DVertexSetCameraZ(&Vertex[3], RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetRecipCameraZ(&Vertex[3], 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetU(&Vertex[3], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetV(&Vertex[3], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetIntRGBA(&Vertex[3], 255, 255, 255, 255); + + + RwIm2DVertexSetScreenX(&Vertex2[0], zero + 2.0f); + RwIm2DVertexSetScreenY(&Vertex2[0], zero + 2.0f); + RwIm2DVertexSetScreenZ(&Vertex2[0], RwIm2DGetNearScreenZ()); + RwIm2DVertexSetCameraZ(&Vertex2[0], RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetRecipCameraZ(&Vertex2[0], 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetU(&Vertex2[0], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetV(&Vertex2[0], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetIntRGBA(&Vertex2[0], 255, 255, 255, 255); + + RwIm2DVertexSetScreenX(&Vertex2[1], 2.0f); + RwIm2DVertexSetScreenY(&Vertex2[1], ymax + 2.0f); + RwIm2DVertexSetScreenZ(&Vertex2[1], RwIm2DGetNearScreenZ()); + RwIm2DVertexSetCameraZ(&Vertex2[1], RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetRecipCameraZ(&Vertex2[1], 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetU(&Vertex2[1], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetV(&Vertex2[1], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetIntRGBA(&Vertex2[1], 255, 255, 255, 255); + + RwIm2DVertexSetScreenX(&Vertex2[2], xmax + 2.0f); + RwIm2DVertexSetScreenY(&Vertex2[2], ymax + 2.0f); + RwIm2DVertexSetScreenZ(&Vertex2[2], RwIm2DGetNearScreenZ()); + RwIm2DVertexSetCameraZ(&Vertex2[2], RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetRecipCameraZ(&Vertex2[2], 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetU(&Vertex2[2], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetV(&Vertex2[2], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetIntRGBA(&Vertex2[2], 255, 255, 255, 255); + + RwIm2DVertexSetScreenX(&Vertex2[3], xmax + 2.0f); + RwIm2DVertexSetScreenY(&Vertex2[3], zero + 2.0f); + RwIm2DVertexSetScreenZ(&Vertex2[3], RwIm2DGetNearScreenZ()); + RwIm2DVertexSetCameraZ(&Vertex2[3], RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetRecipCameraZ(&Vertex2[3], 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetU(&Vertex2[3], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetV(&Vertex2[3], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam)); + RwIm2DVertexSetIntRGBA(&Vertex2[3], 255, 255, 255, 255); + + +#ifdef RW_D3D9 +#include "shaders/colourfilterIII_PS.inc" + colourfilterIII_PS = rw::d3d::createPixelShader(colourfilterIII_PS_cso); +#include "shaders/contrastPS.inc" + contrast_PS = rw::d3d::createPixelShader(contrastPS_cso); +#endif +#ifdef RW_OPENGL + using namespace rw::gl3; + { +#ifdef RW_GLES2 +#include "gl2_shaders/im2d_gl2.inc" +#include "gl2_shaders/colourfilterIII_fs_gl2.inc" +#else +#include "shaders/im2d_gl3.inc" +#include "shaders/colourfilterIII_fs_gl3.inc" +#endif + const char *vs[] = { shaderDecl, header_vert_src, im2d_vert_src, nil }; + const char *fs[] = { shaderDecl, header_frag_src, colourfilterIII_frag_src, nil }; + colourFilterIII = Shader::create(vs, fs); + assert(colourFilterIII); + } + + { +#ifdef RW_GLES2 +#include "gl2_shaders/im2d_gl2.inc" +#include "gl2_shaders/contrast_fs_gl2.inc" +#else +#include "shaders/im2d_gl3.inc" +#include "shaders/contrast_fs_gl3.inc" + const char *vs[] = { shaderDecl, header_vert_src, im2d_vert_src, nil }; + const char *fs[] = { shaderDecl, header_frag_src, contrast_frag_src, nil }; + contrast = Shader::create(vs, fs); + assert(contrast); +#endif + } + +#endif +} + +void +CPostFX::Close(void) +{ + if(pFrontBuffer){ + RwRasterDestroy(pFrontBuffer); + pFrontBuffer = nil; + } + if(pBackBuffer){ + RwRasterDestroy(pBackBuffer); + pBackBuffer = nil; + } +#ifdef RW_D3D9 + if(colourfilterIII_PS){ + rw::d3d::destroyPixelShader(colourfilterIII_PS); + colourfilterIII_PS = nil; + } + if(contrast_PS){ + rw::d3d::destroyPixelShader(contrast_PS); + contrast_PS = nil; + } +#endif +#ifdef RW_OPENGL + if(colourFilterIII){ + colourFilterIII->destroy(); + colourFilterIII = nil; + } + if(contrast){ + contrast->destroy(); + contrast = nil; + } +#endif +} + +void +CPostFX::RenderOverlayBlur(RwCamera *cam, int32 r, int32 g, int32 b, int32 a) +{ + RwRenderStateSet(rwRENDERSTATETEXTURERASTER, pFrontBuffer); + RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE); + + RwIm2DVertexSetIntRGBA(&Vertex[0], r, g, b, a); + RwIm2DVertexSetIntRGBA(&Vertex[1], r, g, b, a); + RwIm2DVertexSetIntRGBA(&Vertex[2], r, g, b, a); + RwIm2DVertexSetIntRGBA(&Vertex[3], r, g, b, a); + + RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA); + RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA); + + RwIm2DRenderIndexedPrimitive(rwPRIMTYPETRILIST, Vertex, 4, Index, 6); +} + +void +CPostFX::RenderOverlaySimple(RwCamera *cam, int32 r, int32 g, int32 b, int32 a) +{ + RwRenderStateSet(rwRENDERSTATETEXTURERASTER, nil); + RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE); + + r *= 0.6f; + g *= 0.6f; + b *= 0.6f; + a *= 0.6f; + + RwIm2DVertexSetIntRGBA(&Vertex[0], r, g, b, a); + RwIm2DVertexSetIntRGBA(&Vertex[1], r, g, b, a); + RwIm2DVertexSetIntRGBA(&Vertex[2], r, g, b, a); + RwIm2DVertexSetIntRGBA(&Vertex[3], r, g, b, a); + + RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA); + RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA); + + RwIm2DRenderIndexedPrimitive(rwPRIMTYPETRILIST, Vertex, 4, Index, 6); +} + +void +CPostFX::RenderOverlaySniper(RwCamera *cam, int32 r, int32 g, int32 b, int32 a) +{ + RwRenderStateSet(rwRENDERSTATETEXTURERASTER, pFrontBuffer); + RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE); + + RwIm2DVertexSetIntRGBA(&Vertex[0], r, g, b, 80); + RwIm2DVertexSetIntRGBA(&Vertex[1], r, g, b, 80); + RwIm2DVertexSetIntRGBA(&Vertex[2], r, g, b, 80); + RwIm2DVertexSetIntRGBA(&Vertex[3], r, g, b, 80); + RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA); + RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA); + + RwIm2DRenderIndexedPrimitive(rwPRIMTYPETRILIST, Vertex, 4, Index, 6); +} + +float CPostFX::Intensity = 1.0f; + +void +CPostFX::RenderOverlayShader(RwCamera *cam, int32 r, int32 g, int32 b, int32 a) +{ + RwRenderStateSet(rwRENDERSTATETEXTURERASTER, pBackBuffer); + + if(EffectSwitch == POSTFX_MOBILE){ + float mult[3], add[3]; + mult[0] = (r-64)/384.0f + 1.14f; + mult[1] = (g-64)/384.0f + 1.14f; + mult[2] = (b-64)/384.0f + 1.14f; + add[0] = r/1536.f; + add[1] = g/1536.f; + add[2] = b/1536.f; +#ifdef RW_D3D9 + rw::d3d::d3ddevice->SetPixelShaderConstantF(10, mult, 1); + rw::d3d::d3ddevice->SetPixelShaderConstantF(11, add, 1); + + rw::d3d::im2dOverridePS = contrast_PS; +#endif +#ifdef RW_OPENGL + rw::gl3::im2dOverrideShader = contrast; + contrast->use(); + glUniform3fv(contrast->uniformLocations[u_contrastMult], 1, mult); + glUniform3fv(contrast->uniformLocations[u_contrastAdd], 1, add); +#endif + }else{ + float f = Intensity; + float blurcolors[4]; + blurcolors[0] = r/255.0f; + blurcolors[1] = g/255.0f; + blurcolors[2] = b/255.0f; + blurcolors[3] = a*f/255.0f; +#ifdef RW_D3D9 + rw::d3d::d3ddevice->SetPixelShaderConstantF(10, blurcolors, 1); + rw::d3d::im2dOverridePS = colourfilterIII_PS; +#endif +#ifdef RW_OPENGL + rw::gl3::im2dOverrideShader = colourFilterIII; + colourFilterIII->use(); + glUniform4fv(colourFilterIII->uniformLocations[u_blurcolor], 1, blurcolors); +#endif + } + RwIm2DRenderIndexedPrimitive(rwPRIMTYPETRILIST, Vertex, 4, Index, 6); +#ifdef RW_D3D9 + rw::d3d::im2dOverridePS = nil; +#endif +#ifdef RW_OPENGL + rw::gl3::im2dOverrideShader = nil; +#endif +} + +void +CPostFX::RenderMotionBlur(RwCamera *cam, uint32 blur) +{ + if(blur == 0) + return; + + RwRenderStateSet(rwRENDERSTATETEXTURERASTER, pFrontBuffer); + RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE); + RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA); + RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA); + + RwIm2DVertexSetIntRGBA(&Vertex[0], 255, 255, 255, blur); + RwIm2DVertexSetIntRGBA(&Vertex[1], 255, 255, 255, blur); + RwIm2DVertexSetIntRGBA(&Vertex[2], 255, 255, 255, blur); + RwIm2DVertexSetIntRGBA(&Vertex[3], 255, 255, 255, blur); + + RwIm2DRenderIndexedPrimitive(rwPRIMTYPETRILIST, Vertex, 4, Index, 6); +} + +bool +CPostFX::NeedBackBuffer(void) +{ + // Current frame -- needed for non-blur effect + switch(EffectSwitch){ + case POSTFX_OFF: + // no actual rendering here + return false; + case POSTFX_SIMPLE: + return false; + case POSTFX_NORMAL: + if(MotionBlurOn) + return false; + else + return true; + case POSTFX_MOBILE: + return true; + } + return false; +} + +bool +CPostFX::NeedFrontBuffer(int32 type) +{ + // Last frame -- needed for motion blur + if(MotionBlurOn) + return true; + if(type == MOTION_BLUR_SNIPER) + return true; + + return false; +} + +void +CPostFX::Render(RwCamera *cam, uint32 red, uint32 green, uint32 blue, uint32 blur, int32 type, uint32 bluralpha) +{ + switch(type) + { + case MOTION_BLUR_SECURITY_CAM: + red = 0; + green = 255; + blue = 0; + blur = 128; + break; + case MOTION_BLUR_INTRO: + red = 100; + green = 220; + blue = 230; + blur = 158; + break; + case MOTION_BLUR_INTRO2: + red = 80; + green = 255; + blue = 230; + blur = 138; + break; + case MOTION_BLUR_INTRO3: + red = 255; + green = 60; + blue = 60; + blur = 200; + break; + case MOTION_BLUR_INTRO4: + red = 255; + green = 180; + blue = 180; + blur = 128; + break; + } + + if(pFrontBuffer == nil) + Open(cam); + assert(pFrontBuffer); + assert(pBackBuffer); + + if(NeedBackBuffer()){ + RwRasterPushContext(pBackBuffer); + RwRasterRenderFast(RwCameraGetRaster(cam), 0, 0); + RwRasterPopContext(); + } + + DefinedState(); + + RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void*)FALSE); + RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, (void*)rwFILTERNEAREST); + RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)FALSE); + RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE); + + if(type == MOTION_BLUR_SNIPER){ + if(!bJustInitialised) + RenderOverlaySniper(cam, red, green, blue, blur); + }else switch(EffectSwitch){ + case POSTFX_OFF: + // no actual rendering here + break; + case POSTFX_SIMPLE: + RenderOverlaySimple(cam, red, green, blue, blur); + break; + case POSTFX_NORMAL: + if(MotionBlurOn){ + if(!bJustInitialised) + RenderOverlayBlur(cam, red, green, blue, blur); + }else{ + RenderOverlayShader(cam, red, green, blue, blur); + } + break; + case POSTFX_MOBILE: + RenderOverlayShader(cam, red, green, blue, blur); + break; + } + + // TODO? maybe we want this even without motion blur on sometimes? + if(MotionBlurOn) + if(!bJustInitialised) + RenderMotionBlur(cam, bluralpha); + + RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)TRUE); + RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)TRUE); + RwRenderStateSet(rwRENDERSTATETEXTURERASTER, nil); + RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)FALSE); + RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA); + RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA); + + if(NeedFrontBuffer(type)){ + RwRasterPushContext(pFrontBuffer); + RwRasterRenderFast(RwCameraGetRaster(cam), 0, 0); + RwRasterPopContext(); + bJustInitialised = false; + }else + bJustInitialised = true; +} + +#endif diff --git a/src/extras/postfx.h b/src/extras/postfx.h new file mode 100644 index 00000000..658c2d88 --- /dev/null +++ b/src/extras/postfx.h @@ -0,0 +1,35 @@ +#pragma once + +#ifdef EXTENDED_COLOURFILTER + +class CPostFX +{ +public: + enum { + POSTFX_OFF, + POSTFX_SIMPLE, + POSTFX_NORMAL, + POSTFX_MOBILE + }; + static RwRaster *pFrontBuffer; + static RwRaster *pBackBuffer; + static bool bJustInitialised; + static int EffectSwitch; + static bool MotionBlurOn; // or use CMblur for that? + static float Intensity; + + static void InitOnce(void); + static void Open(RwCamera *cam); + static void Close(void); + static void RenderOverlayBlur(RwCamera *cam, int32 r, int32 g, int32 b, int32 a); + static void RenderOverlaySimple(RwCamera *cam, int32 r, int32 g, int32 b, int32 a); + static void RenderOverlaySniper(RwCamera *cam, int32 r, int32 g, int32 b, int32 a); + static void RenderOverlayShader(RwCamera *cam, int32 r, int32 g, int32 b, int32 a); + static void RenderMotionBlur(RwCamera *cam, uint32 blur); + static void Render(RwCamera *cam, uint32 red, uint32 green, uint32 blue, uint32 blur, int32 type, uint32 bluralpha); + static bool NeedBackBuffer(void); + static bool NeedFrontBuffer(int32 type); + static bool UseBlurColours(void) { return EffectSwitch != POSTFX_SIMPLE; } +}; + +#endif diff --git a/src/extras/shaders/Makefile b/src/extras/shaders/Makefile new file mode 100644 index 00000000..87be011e --- /dev/null +++ b/src/extras/shaders/Makefile @@ -0,0 +1,16 @@ +all: im2d_gl3.inc colourfilterIII_fs_gl3.inc contrast_fs_gl3.inc + +im2d_gl3.inc: im2d.vert + (echo 'const char *im2d_vert_src =';\ + sed 's/..*/"&\\n"/' im2d.vert;\ + echo ';') >im2d_gl3.inc + +colourfilterIII_fs_gl3.inc: colourfilterIII.frag + (echo 'const char *colourfilterIII_frag_src =';\ + sed 's/..*/"&\\n"/' colourfilterIII.frag;\ + echo ';') >colourfilterIII_fs_gl3.inc + +contrast_fs_gl3.inc: contrast.frag + (echo 'const char *contrast_frag_src =';\ + sed 's/..*/"&\\n"/' contrast.frag;\ + echo ';') >contrast_fs_gl3.inc diff --git a/src/extras/shaders/colourfilterIII.frag b/src/extras/shaders/colourfilterIII.frag new file mode 100644 index 00000000..e19a8600 --- /dev/null +++ b/src/extras/shaders/colourfilterIII.frag @@ -0,0 +1,28 @@ +uniform sampler2D tex0; +uniform vec4 u_blurcolor; + +in vec4 v_color; +in vec2 v_tex0; +in float v_fog; + +out vec4 color; + +void +main(void) +{ + float a = u_blurcolor.a; + + vec4 doublec = clamp(u_blurcolor*2, 0.0, 1.0); + vec4 dst = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y)); + vec4 prev = dst; + for(int i = 0; i < 5; i++){ +// vec4 doublec = clamp(u_blurcolor*2, 0.0, 1.0); + vec4 tmp = dst*(1.0-a) + prev*doublec*a; + tmp += prev*u_blurcolor; + tmp += prev*u_blurcolor; + prev = clamp(tmp, 0.0, 1.0); + } + color.rgb = prev.rgb; + color.a = 1.0f; +} + diff --git a/src/extras/shaders/colourfilterIII_PS.cso b/src/extras/shaders/colourfilterIII_PS.cso new file mode 100644 index 0000000000000000000000000000000000000000..cc41bcecdbe4f6ba923ce659c433607b86209dd8 GIT binary patch literal 452 zcmZQz`v3pme{BZm5Jx8&1_p+51_lO@7!v~n1BlPS$iPs*z`)=F5@z6HU}Vr@@Byh| zU|@)0U|?WoU|?WmU}8vsiY4Wg7A5EBFfcMOGcYo+fV6{UN>VErSQvO17{L%M#86Ni zZxnC9;G3CTlwX{mR-&L0q^aQH6YQf9oROH4TBP8dpIeZblUk%;sb^%VXK8ArXKZL_ z$PmcDz{eVa^JPeFr2vJi|9B&kFz~GyiT$Ep&pH`xv5u~Z$;S=nm5S)>il3JwToS$2e znUh+iV5w(hsb^_wq-ShsXvh%Az`)ADz`uZjp}`(v5`>gzU|?ckU}#`qVBP>_PhjBS zU*H6GI)4KL!;=jR98VT7GB7YPGO#yrF+5qo!oa}7z`zcYYhYw}(!k9Ck!N7wXkcJq Q0IOx-0PAh||DS;Y0E@Fdy8r+H literal 0 HcmV?d00001 diff --git a/src/extras/shaders/contrastPS.hlsl b/src/extras/shaders/contrastPS.hlsl new file mode 100644 index 00000000..a1de1d81 --- /dev/null +++ b/src/extras/shaders/contrastPS.hlsl @@ -0,0 +1,21 @@ +struct PS_INPUT +{ + float4 position : POSITION; + float3 texcoord0 : TEXCOORD0; + float4 color : COLOR0; +}; + +uniform float3 contrastMult : register(c10); +uniform float3 contrastAdd : register(c11); + +sampler2D tex : register(s0); + +float4 +main(PS_INPUT In) : COLOR +{ + float4 dst = tex2D(tex, In.texcoord0.xy); + + dst.rgb = dst.rgb*contrastMult + contrastAdd; + dst.a = 1.0; + return dst; +} diff --git a/src/extras/shaders/contrastPS.inc b/src/extras/shaders/contrastPS.inc new file mode 100644 index 00000000..5386792f --- /dev/null +++ b/src/extras/shaders/contrastPS.inc @@ -0,0 +1,31 @@ +static unsigned char contrastPS_cso[] = { + 0x00, 0x02, 0xff, 0xff, 0xfe, 0xff, 0x35, 0x00, 0x43, 0x54, 0x41, 0x42, + 0x1c, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, + 0x03, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x98, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0b, 0x00, + 0x01, 0x00, 0x2e, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x74, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0a, 0x00, 0x01, 0x00, 0x2a, 0x00, + 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x88, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, + 0x41, 0x64, 0x64, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x03, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6e, 0x74, + 0x72, 0x61, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x00, 0x74, 0x65, 0x78, + 0x00, 0xab, 0xab, 0xab, 0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x32, + 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, + 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, + 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, + 0x72, 0x20, 0x39, 0x2e, 0x32, 0x39, 0x2e, 0x39, 0x35, 0x32, 0x2e, 0x33, + 0x31, 0x31, 0x31, 0x00, 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0, + 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x03, 0xb0, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90, + 0x00, 0x08, 0x0f, 0xa0, 0x42, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, + 0x00, 0x00, 0xe4, 0xb0, 0x00, 0x08, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, + 0x01, 0x00, 0x07, 0x80, 0x0a, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x80, + 0x0b, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x80, + 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, + 0x00, 0x00, 0xe4, 0x80, 0xff, 0xff, 0x00, 0x00 +}; diff --git a/src/extras/shaders/contrast_fs_gl3.inc b/src/extras/shaders/contrast_fs_gl3.inc new file mode 100644 index 00000000..58aaf079 --- /dev/null +++ b/src/extras/shaders/contrast_fs_gl3.inc @@ -0,0 +1,20 @@ +const char *contrast_frag_src = +"uniform sampler2D tex0;\n" +"uniform vec3 u_contrastAdd;\n" +"uniform vec3 u_contrastMult;\n" + +"in vec4 v_color;\n" +"in vec2 v_tex0;\n" +"in float v_fog;\n" + +"out vec4 color;\n" + +"void\n" +"main(void)\n" +"{\n" +" vec4 dst = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));\n" +" color.rgb = dst.rgb*u_contrastMult + u_contrastAdd;\n" +" color.a = 1.0f;\n" +"}\n" + +; diff --git a/src/extras/shaders/im2d.vert b/src/extras/shaders/im2d.vert new file mode 100644 index 00000000..241593b1 --- /dev/null +++ b/src/extras/shaders/im2d.vert @@ -0,0 +1,21 @@ +uniform vec4 u_xform; + +layout(location = 0) in vec4 in_pos; +layout(location = 2) in vec4 in_color; +layout(location = 3) in vec2 in_tex0; + +out vec4 v_color; +out vec2 v_tex0; +out float v_fog; + +void +main(void) +{ + gl_Position = in_pos; + gl_Position.w = 1.0; + gl_Position.xy = gl_Position.xy * u_xform.xy + u_xform.zw; + v_fog = DoFog(gl_Position.z); + gl_Position.xyz *= gl_Position.w; + v_color = in_color; + v_tex0 = in_tex0; +} diff --git a/src/extras/shaders/im2d_gl3.inc b/src/extras/shaders/im2d_gl3.inc new file mode 100644 index 00000000..68341b39 --- /dev/null +++ b/src/extras/shaders/im2d_gl3.inc @@ -0,0 +1,23 @@ +const char *im2d_vert_src = +"uniform vec4 u_xform;\n" + +"layout(location = 0) in vec4 in_pos;\n" +"layout(location = 2) in vec4 in_color;\n" +"layout(location = 3) in vec2 in_tex0;\n" + +"out vec4 v_color;\n" +"out vec2 v_tex0;\n" +"out float v_fog;\n" + +"void\n" +"main(void)\n" +"{\n" +" gl_Position = in_pos;\n" +" gl_Position.w = 1.0;\n" +" gl_Position.xy = gl_Position.xy * u_xform.xy + u_xform.zw;\n" +" v_fog = DoFog(gl_Position.z);\n" +" gl_Position.xyz *= gl_Position.w;\n" +" v_color = in_color;\n" +" v_tex0 = in_tex0;\n" +"}\n" +; diff --git a/src/extras/shaders/make.cmd b/src/extras/shaders/make.cmd new file mode 100644 index 00000000..8404ac6c --- /dev/null +++ b/src/extras/shaders/make.cmd @@ -0,0 +1,3 @@ +@echo off +for %%f in (*PS.hlsl) do "%DXSDK_DIR%\Utilities\bin\x86\fxc.exe" /T ps_2_0 /nologo /E main /Fo %%~nf.cso %%f +for %%f in (*VS.hlsl) do "%DXSDK_DIR%\Utilities\bin\x86\fxc.exe" /T vs_2_0 /nologo /E main /Fo %%~nf.cso %%f diff --git a/src/extras/shaders/makeinc.sh b/src/extras/shaders/makeinc.sh new file mode 100644 index 00000000..a649af33 --- /dev/null +++ b/src/extras/shaders/makeinc.sh @@ -0,0 +1,5 @@ +#!sh +for i in *cso; do + (echo -n 'static ' + xxd -i $i | grep -v '_len = ') > ${i%cso}inc +done diff --git a/src/render/Hud.cpp b/src/render/Hud.cpp index 1e536382..08c0cb85 100644 --- a/src/render/Hud.cpp +++ b/src/render/Hud.cpp @@ -175,7 +175,8 @@ void CHud::Draw() rect.right = f3rdX + SCREEN_SCALE_X(32.0f * 0.6f); rect.bottom = f3rdY + SCREEN_SCALE_Y(32.0f * 0.6f); - Sprites[HUD_SITEM16].Draw(CRect(rect), CRGBA(255, 255, 255, 255)); + Sprites[HUD_SITEM16].Draw(CRect(rect), CRGBA(255, 255, 255, 255), + 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f); } else { rect.left = f3rdX - SCREEN_SCALE_X(32.0f * 0.4f); @@ -183,7 +184,8 @@ void CHud::Draw() rect.right = f3rdX + SCREEN_SCALE_X(32.0f * 0.4f); rect.bottom = f3rdY + SCREEN_SCALE_Y(32.0f * 0.4f); - Sprites[HUD_SITEM16].Draw(CRect(rect), CRGBA(255, 255, 255, 255)); + Sprites[HUD_SITEM16].Draw(CRect(rect), CRGBA(255, 255, 255, 255), + 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f); } } else { @@ -194,7 +196,9 @@ void CHud::Draw() rect.top = (SCREEN_HEIGHT / 2) - SCREEN_SCALE_Y(32.0f); rect.right = (SCREEN_WIDTH / 2) + SCREEN_SCALE_X(32.0f); rect.bottom = (SCREEN_HEIGHT / 2) + SCREEN_SCALE_Y(32.0f); - Sprites[HUD_SITEM16].Draw(CRect(rect), CRGBA(255, 255, 255, 255)); + Sprites[HUD_SITEM16].Draw(CRect(rect), CRGBA(255, 255, 255, 255), + 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f); + } else if (Mode == CCam::MODE_1STPERSON_RUNABOUT) { rect.left = (SCREEN_WIDTH / 2) - SCREEN_SCALE_X(32.0f * 0.7f); @@ -202,7 +206,8 @@ void CHud::Draw() rect.right = (SCREEN_WIDTH / 2) + SCREEN_SCALE_X(32.0f * 0.7f); rect.bottom = (SCREEN_HEIGHT / 2) + SCREEN_SCALE_Y(32.0f * 0.7f); - Sprites[HUD_SITEM16].Draw(CRect(rect), CRGBA(255, 255, 255, 255)); + Sprites[HUD_SITEM16].Draw(CRect(rect), CRGBA(255, 255, 255, 255), + 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f); } else if (Mode == CCam::MODE_ROCKETLAUNCHER || Mode == CCam::MODE_ROCKETLAUNCHER_RUNABOUT) { RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void *)TRUE); @@ -216,29 +221,33 @@ void CHud::Draw() } else { // Sniper - rect.left = (SCREEN_WIDTH / 2) - SCREEN_SCALE_X(210.0f); - rect.top = (SCREEN_HEIGHT / 2) - SCREEN_SCALE_Y(210.0f); - rect.right = SCREEN_WIDTH / 2; - rect.bottom = SCREEN_HEIGHT / 2; - Sprites[HUD_SITESNIPER].Draw(CRect(rect), CRGBA(255, 255, 255, 255)); + rect.left = SCREEN_WIDTH/2 - SCREEN_SCALE_X(210.0f); + rect.top = SCREEN_HEIGHT/2 - SCREEN_SCALE_Y(210.0f); + rect.right = SCREEN_WIDTH/2; + rect.bottom = SCREEN_HEIGHT/2; + Sprites[HUD_SITESNIPER].Draw(CRect(rect), CRGBA(255, 255, 255, 255), + 0.01f, 0.01f, 1.0f, 0.0f, 0.01f, 1.0f, 1.0f, 1.0f); - rect.right = (SCREEN_WIDTH / 2); - rect.top = (SCREEN_HEIGHT / 2) - SCREEN_SCALE_Y(210.0f); - rect.left = SCREEN_SCALE_X(210.0f) + (SCREEN_WIDTH / 2); - rect.bottom = SCREEN_HEIGHT / 2; - Sprites[HUD_SITESNIPER].Draw(CRect(rect), CRGBA(255, 255, 255, 255)); + rect.left = SCREEN_WIDTH/2; + rect.top = SCREEN_HEIGHT/2 - SCREEN_SCALE_Y(210.0f); + rect.right = SCREEN_WIDTH/2 + SCREEN_SCALE_X(210.0f); + rect.bottom = SCREEN_HEIGHT/2; + Sprites[HUD_SITESNIPER].Draw(CRect(rect), CRGBA(255, 255, 255, 255), + 0.99f, 0.0f, 0.01f, 0.01f, 0.99f, 1.0f, 0.01f, 1.0f); - rect.left = (SCREEN_WIDTH / 2) - SCREEN_SCALE_X(210.0f); - rect.bottom = (SCREEN_HEIGHT / 2); - rect.right = (SCREEN_WIDTH / 2); - rect.top = SCREEN_SCALE_Y(210.0f) + (SCREEN_HEIGHT / 2); - Sprites[HUD_SITESNIPER].Draw(CRect(rect), CRGBA(255, 255, 255, 255)); + rect.left = SCREEN_WIDTH/2 - SCREEN_SCALE_X(210.0f); + rect.top = SCREEN_HEIGHT/2; + rect.right = SCREEN_WIDTH/2; + rect.bottom = SCREEN_HEIGHT/2 + SCREEN_SCALE_Y(210.0f); + Sprites[HUD_SITESNIPER].Draw(CRect(rect), CRGBA(255, 255, 255, 255), + 0.01f, 0.99f, 1.0f, 0.99f, 0.01f, 0.01f, 1.0f, 0.01f); - rect.right = (SCREEN_WIDTH / 2); - rect.bottom = (SCREEN_HEIGHT / 2); - rect.left = SCREEN_SCALE_X(210.0f) + (SCREEN_WIDTH / 2); - rect.top = SCREEN_SCALE_Y(210.0f) + (SCREEN_HEIGHT / 2); - Sprites[HUD_SITESNIPER].Draw(CRect(rect), CRGBA(255, 255, 255, 255)); + rect.left = SCREEN_WIDTH/2; + rect.top = SCREEN_HEIGHT/2; + rect.right = SCREEN_WIDTH/2 + SCREEN_SCALE_X(210.0f); + rect.bottom = SCREEN_HEIGHT/2 + SCREEN_SCALE_Y(210.0f); + Sprites[HUD_SITESNIPER].Draw(CRect(rect), CRGBA(255, 255, 255, 255), + 0.99f, 0.99f, 0.01f, 0.99f, 0.99f, 0.01f, 0.1f, 0.01f); } } RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, (void *)rwFILTERLINEAR); diff --git a/src/render/MBlur.cpp b/src/render/MBlur.cpp index ec811e56..de15358e 100644 --- a/src/render/MBlur.cpp +++ b/src/render/MBlur.cpp @@ -10,6 +10,7 @@ #include "RwHelper.h" #include "Camera.h" #include "MBlur.h" +#include "postfx.h" // Originally taken from RW example 'mblur' @@ -27,6 +28,10 @@ extern "C" D3DCAPS8 _RwD3D8DeviceCaps; RwBool CMBlur::MotionBlurOpen(RwCamera *cam) { +#ifdef EXTENDED_COLOURFILTER + CPostFX::Open(cam); + return TRUE; +#else #ifdef GTA_PS2 RwRect rect = {0, 0, 0, 0}; @@ -127,18 +132,22 @@ CMBlur::MotionBlurOpen(RwCamera *cam) return TRUE; #endif +#endif } RwBool CMBlur::MotionBlurClose(void) { +#ifdef EXTENDED_COLOURFILTER + CPostFX::Close(); +#else if(pFrontBuffer){ RwRasterDestroy(pFrontBuffer); pFrontBuffer = nil; return TRUE; } - +#endif return FALSE; } @@ -192,12 +201,14 @@ CMBlur::CreateImmediateModeData(RwCamera *cam, RwRect *rect) RwIm2DVertexSetU(&Vertex[3], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam)); RwIm2DVertexSetV(&Vertex[3], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam)); RwIm2DVertexSetIntRGBA(&Vertex[3], 255, 255, 255, 255); - } void CMBlur::MotionBlurRender(RwCamera *cam, uint32 red, uint32 green, uint32 blue, uint32 blur, int32 type, uint32 bluralpha) { +#ifdef EXTENDED_COLOURFILTER + CPostFX::Render(cam, red, green, blue, blur, type, bluralpha); +#else RwRGBA color = { (RwUInt8)red, (RwUInt8)green, (RwUInt8)blue, (RwUInt8)blur }; #ifdef GTA_PS2 if( pFrontBuffer ) @@ -217,6 +228,7 @@ CMBlur::MotionBlurRender(RwCamera *cam, uint32 red, uint32 green, uint32 blue, u OverlayRender(cam, nil, color, type, bluralpha); } #endif +#endif } void diff --git a/src/render/Sprite2d.cpp b/src/render/Sprite2d.cpp index 453ed004..98bb6eb2 100644 --- a/src/render/Sprite2d.cpp +++ b/src/render/Sprite2d.cpp @@ -178,6 +178,7 @@ CSprite2d::SetVertices(const CRect &r, const CRGBA &c0, const CRGBA &c1, const C z = 1.0f/RecipNearClip; } recipz = 1.0f/z; + float offset = 1.0f/1024.0f; // This is what we draw: // 0---1 @@ -189,8 +190,8 @@ CSprite2d::SetVertices(const CRect &r, const CRGBA &c0, const CRGBA &c1, const C RwIm2DVertexSetCameraZ(&maVertices[0], z); RwIm2DVertexSetRecipCameraZ(&maVertices[0], recipz); RwIm2DVertexSetIntRGBA(&maVertices[0], c2.r, c2.g, c2.b, c2.a); - RwIm2DVertexSetU(&maVertices[0], 0.0f, recipz); - RwIm2DVertexSetV(&maVertices[0], 0.0f, recipz); + RwIm2DVertexSetU(&maVertices[0], 0.0f+offset, recipz); + RwIm2DVertexSetV(&maVertices[0], 0.0f+offset, recipz); RwIm2DVertexSetScreenX(&maVertices[1], r.right); RwIm2DVertexSetScreenY(&maVertices[1], r.top); @@ -198,8 +199,8 @@ CSprite2d::SetVertices(const CRect &r, const CRGBA &c0, const CRGBA &c1, const C RwIm2DVertexSetCameraZ(&maVertices[1], z); RwIm2DVertexSetRecipCameraZ(&maVertices[1], recipz); RwIm2DVertexSetIntRGBA(&maVertices[1], c3.r, c3.g, c3.b, c3.a); - RwIm2DVertexSetU(&maVertices[1], 1.0f, recipz); - RwIm2DVertexSetV(&maVertices[1], 0.0f, recipz); + RwIm2DVertexSetU(&maVertices[1], 1.0f+offset, recipz); + RwIm2DVertexSetV(&maVertices[1], 0.0f+offset, recipz); RwIm2DVertexSetScreenX(&maVertices[2], r.right); RwIm2DVertexSetScreenY(&maVertices[2], r.bottom); @@ -207,8 +208,8 @@ CSprite2d::SetVertices(const CRect &r, const CRGBA &c0, const CRGBA &c1, const C RwIm2DVertexSetCameraZ(&maVertices[2], z); RwIm2DVertexSetRecipCameraZ(&maVertices[2], recipz); RwIm2DVertexSetIntRGBA(&maVertices[2], c1.r, c1.g, c1.b, c1.a); - RwIm2DVertexSetU(&maVertices[2], 1.0f, recipz); - RwIm2DVertexSetV(&maVertices[2], 1.0f, recipz); + RwIm2DVertexSetU(&maVertices[2], 1.0f+offset, recipz); + RwIm2DVertexSetV(&maVertices[2], 1.0f+offset, recipz); RwIm2DVertexSetScreenX(&maVertices[3], r.left); RwIm2DVertexSetScreenY(&maVertices[3], r.bottom); @@ -216,8 +217,8 @@ CSprite2d::SetVertices(const CRect &r, const CRGBA &c0, const CRGBA &c1, const C RwIm2DVertexSetCameraZ(&maVertices[3], z); RwIm2DVertexSetRecipCameraZ(&maVertices[3], recipz); RwIm2DVertexSetIntRGBA(&maVertices[3], c0.r, c0.g, c0.b, c0.a); - RwIm2DVertexSetU(&maVertices[3], 0.0f, recipz); - RwIm2DVertexSetV(&maVertices[3], 1.0f, recipz); + RwIm2DVertexSetU(&maVertices[3], 0.0f+offset, recipz); + RwIm2DVertexSetV(&maVertices[3], 1.0f+offset, recipz); } void From cdebea71f39377418355efdc86e2d6501cbf292f Mon Sep 17 00:00:00 2001 From: aap Date: Thu, 13 Aug 2020 18:47:39 +0200 Subject: [PATCH 045/112] fixes to HUD and sprite2d --- src/render/Hud.cpp | 56 +++++----- src/render/Sprite2d.cpp | 234 +++++++++++++++++----------------------- src/render/Sprite2d.h | 3 +- 3 files changed, 133 insertions(+), 160 deletions(-) diff --git a/src/render/Hud.cpp b/src/render/Hud.cpp index 10408355..cbf3c7f2 100644 --- a/src/render/Hud.cpp +++ b/src/render/Hud.cpp @@ -205,7 +205,8 @@ void CHud::Draw() rect.right = f3rdX + SCREEN_SCALE_X(32.0f * 0.6f); rect.bottom = f3rdY + SCREEN_SCALE_Y(32.0f * 0.6f); - Sprites[HUD_SITEM16].Draw(CRect(rect), CRGBA(255, 255, 255, 255)); + Sprites[HUD_SITEM16].Draw(CRect(rect), CRGBA(255, 255, 255, 255), + 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f); } else { rect.left = f3rdX - SCREEN_SCALE_X(32.0f * 0.4f); @@ -213,7 +214,8 @@ void CHud::Draw() rect.right = f3rdX + SCREEN_SCALE_X(32.0f * 0.4f); rect.bottom = f3rdY + SCREEN_SCALE_Y(32.0f * 0.4f); - Sprites[HUD_SITEM16].Draw(CRect(rect), CRGBA(255, 255, 255, 255)); + Sprites[HUD_SITEM16].Draw(CRect(rect), CRGBA(255, 255, 255, 255), + 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f); } } else { if (Mode == CCam::MODE_M16_1STPERSON || @@ -223,7 +225,8 @@ void CHud::Draw() rect.top = (SCREEN_HEIGHT / 2) - SCREEN_SCALE_Y(32.0f); rect.right = (SCREEN_WIDTH / 2) + SCREEN_SCALE_X(32.0f); rect.bottom = (SCREEN_HEIGHT / 2) + SCREEN_SCALE_Y(32.0f); - Sprites[HUD_SITEM16].Draw(CRect(rect), CRGBA(255, 255, 255, 255)); + Sprites[HUD_SITEM16].Draw(CRect(rect), CRGBA(255, 255, 255, 255), + 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f); } else if (Mode == CCam::MODE_1STPERSON_RUNABOUT) { rect.left = (SCREEN_WIDTH / 2) - SCREEN_SCALE_X(32.0f * 0.7f); @@ -231,7 +234,8 @@ void CHud::Draw() rect.right = (SCREEN_WIDTH / 2) + SCREEN_SCALE_X(32.0f * 0.7f); rect.bottom = (SCREEN_HEIGHT / 2) + SCREEN_SCALE_Y(32.0f * 0.7f); - Sprites[HUD_SITEM16].Draw(CRect(rect), CRGBA(255, 255, 255, 255)); + Sprites[HUD_SITEM16].Draw(CRect(rect), CRGBA(255, 255, 255, 255), + 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f); } else if (Mode == CCam::MODE_ROCKETLAUNCHER || Mode == CCam::MODE_ROCKETLAUNCHER_RUNABOUT) { RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void *)TRUE); @@ -248,29 +252,33 @@ void CHud::Draw() // TODO(Miami) // Sniper - rect.left = (SCREEN_WIDTH / 2) - SCREEN_SCALE_X(210.0f); - rect.top = (SCREEN_HEIGHT / 2) - SCREEN_SCALE_Y(210.0f); - rect.right = SCREEN_WIDTH / 2; - rect.bottom = SCREEN_HEIGHT / 2; - Sprites[HUD_SITESNIPER].Draw(CRect(rect), CRGBA(255, 255, 255, 255)); + rect.left = SCREEN_WIDTH/2 - SCREEN_SCALE_X(210.0f); + rect.top = SCREEN_HEIGHT/2 - SCREEN_SCALE_Y(210.0f); + rect.right = SCREEN_WIDTH/2; + rect.bottom = SCREEN_HEIGHT/2; + Sprites[HUD_SITESNIPER].Draw(CRect(rect), CRGBA(255, 255, 255, 255), + 0.01f, 0.01f, 1.0f, 0.0f, 0.01f, 1.0f, 1.0f, 1.0f); - rect.right = (SCREEN_WIDTH / 2); - rect.top = (SCREEN_HEIGHT / 2) - SCREEN_SCALE_Y(210.0f); - rect.left = SCREEN_SCALE_X(210.0f) + (SCREEN_WIDTH / 2); - rect.bottom = SCREEN_HEIGHT / 2; - Sprites[HUD_SITESNIPER].Draw(CRect(rect), CRGBA(255, 255, 255, 255)); + rect.left = SCREEN_WIDTH/2; + rect.top = SCREEN_HEIGHT/2 - SCREEN_SCALE_Y(210.0f); + rect.right = SCREEN_WIDTH/2 + SCREEN_SCALE_X(210.0f); + rect.bottom = SCREEN_HEIGHT/2; + Sprites[HUD_SITESNIPER].Draw(CRect(rect), CRGBA(255, 255, 255, 255), + 0.99f, 0.0f, 0.01f, 0.01f, 0.99f, 1.0f, 0.01f, 1.0f); - rect.left = (SCREEN_WIDTH / 2) - SCREEN_SCALE_X(210.0f); - rect.bottom = (SCREEN_HEIGHT / 2); - rect.right = (SCREEN_WIDTH / 2); - rect.top = SCREEN_SCALE_Y(210.0f) + (SCREEN_HEIGHT / 2); - Sprites[HUD_SITESNIPER].Draw(CRect(rect), CRGBA(255, 255, 255, 255)); + rect.left = SCREEN_WIDTH/2 - SCREEN_SCALE_X(210.0f); + rect.top = SCREEN_HEIGHT/2; + rect.right = SCREEN_WIDTH/2; + rect.bottom = SCREEN_HEIGHT/2 + SCREEN_SCALE_Y(210.0f); + Sprites[HUD_SITESNIPER].Draw(CRect(rect), CRGBA(255, 255, 255, 255), + 0.01f, 0.99f, 1.0f, 0.99f, 0.01f, 0.01f, 1.0f, 0.01f); - rect.right = (SCREEN_WIDTH / 2); - rect.bottom = (SCREEN_HEIGHT / 2); - rect.left = SCREEN_SCALE_X(210.0f) + (SCREEN_WIDTH / 2); - rect.top = SCREEN_SCALE_Y(210.0f) + (SCREEN_HEIGHT / 2); - Sprites[HUD_SITESNIPER].Draw(CRect(rect), CRGBA(255, 255, 255, 255)); + rect.left = SCREEN_WIDTH/2; + rect.top = SCREEN_HEIGHT/2; + rect.right = SCREEN_WIDTH/2 + SCREEN_SCALE_X(210.0f); + rect.bottom = SCREEN_HEIGHT/2 + SCREEN_SCALE_Y(210.0f); + Sprites[HUD_SITESNIPER].Draw(CRect(rect), CRGBA(255, 255, 255, 255), + 0.99f, 0.99f, 0.01f, 0.99f, 0.99f, 0.01f, 0.1f, 0.01f); } } RwRenderStateSet(rwRENDERSTATESRCBLEND, (void *)rwBLENDSRCALPHA); diff --git a/src/render/Sprite2d.cpp b/src/render/Sprite2d.cpp index cba64e7a..7dcedb26 100644 --- a/src/render/Sprite2d.cpp +++ b/src/render/Sprite2d.cpp @@ -9,6 +9,7 @@ float CSprite2d::RecipNearClip; float CSprite2d::NearScreenZ; +float CSprite2d::NearCamZ; int CSprite2d::nextBufferVertex; int CSprite2d::nextBufferIndex; RwIm2DVertex CSprite2d::maVertices[8]; @@ -26,6 +27,9 @@ CSprite2d::InitPerFrame(void) nextBufferIndex = 0; RecipNearClip = 1.0f / RwCameraGetNearClipPlane(Scene.camera); NearScreenZ = RwIm2DGetNearScreenZ(); + // not original but you're supposed to set camera z too + // wrapping all this in FIX_BUGS is too ugly + NearCamZ = RwCameraGetNearClipPlane(Scene.camera); } void CSprite2d::Delete(void) @@ -71,7 +75,7 @@ CSprite2d::SetRenderState(void) void CSprite2d::Draw(float x, float y, float w, float h, const CRGBA &col) { - SetVertices(CRect(x, y, x + w, y + h), col, col, col, col, 0); + SetVertices(CRect(x, y, x + w, y + h), col, col, col, col); SetRenderState(); RwIm2DRenderPrimitive(rwPRIMTYPETRIFAN, CSprite2d::maVertices, 4); } @@ -79,7 +83,7 @@ CSprite2d::Draw(float x, float y, float w, float h, const CRGBA &col) void CSprite2d::Draw(const CRect &rect, const CRGBA &col) { - SetVertices(rect, col, col, col, col, 0); + SetVertices(rect, col, col, col, col); SetRenderState(); RwIm2DRenderPrimitive(rwPRIMTYPETRIFAN, CSprite2d::maVertices, 4); } @@ -96,7 +100,7 @@ CSprite2d::Draw(const CRect &rect, const CRGBA &col, void CSprite2d::Draw(const CRect &rect, const CRGBA &c0, const CRGBA &c1, const CRGBA &c2, const CRGBA &c3) { - SetVertices(rect, c0, c1, c2, c3, 0); + SetVertices(rect, c0, c1, c2, c3); SetRenderState(); RwIm2DRenderPrimitive(rwPRIMTYPETRIFAN, CSprite2d::maVertices, 4); } @@ -114,178 +118,149 @@ CSprite2d::Draw(float x1, float y1, float x2, float y2, float x3, float y3, floa // | | // 0---1 void -CSprite2d::SetVertices(const CRect &r, const CRGBA &c0, const CRGBA &c1, const CRGBA &c2, const CRGBA &c3, uint32 far) +CSprite2d::SetVertices(const CRect &r, const CRGBA &c0, const CRGBA &c1, const CRGBA &c2, const CRGBA &c3) { - float screenz, z, recipz; - - if(far){ - screenz = RwIm2DGetFarScreenZ(); - z = RwCameraGetFarClipPlane(Scene.camera); - }else{ - screenz = NearScreenZ; - z = 1.0f/RecipNearClip; - } - recipz = 1.0f/z; - // This is what we draw: // 0---1 // | / | // 3---2 RwIm2DVertexSetScreenX(&maVertices[0], r.left); RwIm2DVertexSetScreenY(&maVertices[0], r.top); - RwIm2DVertexSetScreenZ(&maVertices[0], screenz); - RwIm2DVertexSetCameraZ(&maVertices[0], z); - RwIm2DVertexSetRecipCameraZ(&maVertices[0], recipz); + RwIm2DVertexSetScreenZ(&maVertices[0], NearScreenZ); + RwIm2DVertexSetCameraZ(&maVertices[0], NearCamZ); + RwIm2DVertexSetRecipCameraZ(&maVertices[0], RecipNearClip); RwIm2DVertexSetIntRGBA(&maVertices[0], c2.r, c2.g, c2.b, c2.a); - RwIm2DVertexSetU(&maVertices[0], 0.0f, recipz); - RwIm2DVertexSetV(&maVertices[0], 0.0f, recipz); + RwIm2DVertexSetU(&maVertices[0], 0.0f, RecipNearClip); + RwIm2DVertexSetV(&maVertices[0], 0.0f, RecipNearClip); RwIm2DVertexSetScreenX(&maVertices[1], r.right); RwIm2DVertexSetScreenY(&maVertices[1], r.top); - RwIm2DVertexSetScreenZ(&maVertices[1], screenz); - RwIm2DVertexSetCameraZ(&maVertices[1], z); - RwIm2DVertexSetRecipCameraZ(&maVertices[1], recipz); + RwIm2DVertexSetScreenZ(&maVertices[1], NearScreenZ); + RwIm2DVertexSetCameraZ(&maVertices[1], NearCamZ); + RwIm2DVertexSetRecipCameraZ(&maVertices[1], RecipNearClip); RwIm2DVertexSetIntRGBA(&maVertices[1], c3.r, c3.g, c3.b, c3.a); - RwIm2DVertexSetU(&maVertices[1], 1.0f, recipz); - RwIm2DVertexSetV(&maVertices[1], 0.0f, recipz); + RwIm2DVertexSetU(&maVertices[1], 1.0f, RecipNearClip); + RwIm2DVertexSetV(&maVertices[1], 0.0f, RecipNearClip); RwIm2DVertexSetScreenX(&maVertices[2], r.right); RwIm2DVertexSetScreenY(&maVertices[2], r.bottom); - RwIm2DVertexSetScreenZ(&maVertices[2], screenz); - RwIm2DVertexSetCameraZ(&maVertices[2], z); - RwIm2DVertexSetRecipCameraZ(&maVertices[2], recipz); + RwIm2DVertexSetScreenZ(&maVertices[2], NearScreenZ); + RwIm2DVertexSetCameraZ(&maVertices[2], NearCamZ); + RwIm2DVertexSetRecipCameraZ(&maVertices[2], RecipNearClip); RwIm2DVertexSetIntRGBA(&maVertices[2], c1.r, c1.g, c1.b, c1.a); - RwIm2DVertexSetU(&maVertices[2], 1.0f, recipz); - RwIm2DVertexSetV(&maVertices[2], 1.0f, recipz); + RwIm2DVertexSetU(&maVertices[2], 1.0f, RecipNearClip); + RwIm2DVertexSetV(&maVertices[2], 1.0f, RecipNearClip); RwIm2DVertexSetScreenX(&maVertices[3], r.left); RwIm2DVertexSetScreenY(&maVertices[3], r.bottom); - RwIm2DVertexSetScreenZ(&maVertices[3], screenz); - RwIm2DVertexSetCameraZ(&maVertices[3], z); - RwIm2DVertexSetRecipCameraZ(&maVertices[3], recipz); + RwIm2DVertexSetScreenZ(&maVertices[3], NearScreenZ); + RwIm2DVertexSetCameraZ(&maVertices[3], NearCamZ); + RwIm2DVertexSetRecipCameraZ(&maVertices[3], RecipNearClip); RwIm2DVertexSetIntRGBA(&maVertices[3], c0.r, c0.g, c0.b, c0.a); - RwIm2DVertexSetU(&maVertices[3], 0.0f, recipz); - RwIm2DVertexSetV(&maVertices[3], 1.0f, recipz); + RwIm2DVertexSetU(&maVertices[3], 0.0f, RecipNearClip); + RwIm2DVertexSetV(&maVertices[3], 1.0f, RecipNearClip); } void CSprite2d::SetVertices(const CRect &r, const CRGBA &c0, const CRGBA &c1, const CRGBA &c2, const CRGBA &c3, float u0, float v0, float u1, float v1, float u3, float v3, float u2, float v2) { - float screenz, z, recipz; - - screenz = NearScreenZ; - z = 1.0f/RecipNearClip; - recipz = 1.0f/z; - // This is what we draw: // 0---1 // | / | // 3---2 RwIm2DVertexSetScreenX(&maVertices[0], r.left); RwIm2DVertexSetScreenY(&maVertices[0], r.top); - RwIm2DVertexSetScreenZ(&maVertices[0], screenz); - RwIm2DVertexSetCameraZ(&maVertices[0], z); - RwIm2DVertexSetRecipCameraZ(&maVertices[0], recipz); + RwIm2DVertexSetScreenZ(&maVertices[0], NearScreenZ); + RwIm2DVertexSetCameraZ(&maVertices[0], NearCamZ); + RwIm2DVertexSetRecipCameraZ(&maVertices[0], RecipNearClip); RwIm2DVertexSetIntRGBA(&maVertices[0], c2.r, c2.g, c2.b, c2.a); - RwIm2DVertexSetU(&maVertices[0], u0, recipz); - RwIm2DVertexSetV(&maVertices[0], v0, recipz); + RwIm2DVertexSetU(&maVertices[0], u0, RecipNearClip); + RwIm2DVertexSetV(&maVertices[0], v0, RecipNearClip); RwIm2DVertexSetScreenX(&maVertices[1], r.right); RwIm2DVertexSetScreenY(&maVertices[1], r.top); - RwIm2DVertexSetScreenZ(&maVertices[1], screenz); - RwIm2DVertexSetCameraZ(&maVertices[1], z); - RwIm2DVertexSetRecipCameraZ(&maVertices[1], recipz); + RwIm2DVertexSetScreenZ(&maVertices[1], NearScreenZ); + RwIm2DVertexSetCameraZ(&maVertices[1], NearCamZ); + RwIm2DVertexSetRecipCameraZ(&maVertices[1], RecipNearClip); RwIm2DVertexSetIntRGBA(&maVertices[1], c3.r, c3.g, c3.b, c3.a); - RwIm2DVertexSetU(&maVertices[1], u1, recipz); - RwIm2DVertexSetV(&maVertices[1], v1, recipz); + RwIm2DVertexSetU(&maVertices[1], u1, RecipNearClip); + RwIm2DVertexSetV(&maVertices[1], v1, RecipNearClip); RwIm2DVertexSetScreenX(&maVertices[2], r.right); RwIm2DVertexSetScreenY(&maVertices[2], r.bottom); - RwIm2DVertexSetScreenZ(&maVertices[2], screenz); - RwIm2DVertexSetCameraZ(&maVertices[2], z); - RwIm2DVertexSetRecipCameraZ(&maVertices[2], recipz); + RwIm2DVertexSetScreenZ(&maVertices[2], NearScreenZ); + RwIm2DVertexSetCameraZ(&maVertices[2], NearCamZ); + RwIm2DVertexSetRecipCameraZ(&maVertices[2], RecipNearClip); RwIm2DVertexSetIntRGBA(&maVertices[2], c1.r, c1.g, c1.b, c1.a); - RwIm2DVertexSetU(&maVertices[2], u2, recipz); - RwIm2DVertexSetV(&maVertices[2], v2, recipz); + RwIm2DVertexSetU(&maVertices[2], u2, RecipNearClip); + RwIm2DVertexSetV(&maVertices[2], v2, RecipNearClip); RwIm2DVertexSetScreenX(&maVertices[3], r.left); RwIm2DVertexSetScreenY(&maVertices[3], r.bottom); - RwIm2DVertexSetScreenZ(&maVertices[3], screenz); - RwIm2DVertexSetCameraZ(&maVertices[3], z); - RwIm2DVertexSetRecipCameraZ(&maVertices[3], recipz); + RwIm2DVertexSetScreenZ(&maVertices[3], NearScreenZ); + RwIm2DVertexSetCameraZ(&maVertices[3], NearCamZ); + RwIm2DVertexSetRecipCameraZ(&maVertices[3], RecipNearClip); RwIm2DVertexSetIntRGBA(&maVertices[3], c0.r, c0.g, c0.b, c0.a); - RwIm2DVertexSetU(&maVertices[3], u3, recipz); - RwIm2DVertexSetV(&maVertices[3], v3, recipz); + RwIm2DVertexSetU(&maVertices[3], u3, RecipNearClip); + RwIm2DVertexSetV(&maVertices[3], v3, RecipNearClip); } void CSprite2d::SetVertices(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4, const CRGBA &c0, const CRGBA &c1, const CRGBA &c2, const CRGBA &c3) { - float screenz, recipz; - float z = RwCameraGetNearClipPlane(Scene.camera); // not done by game - - screenz = NearScreenZ; - recipz = RecipNearClip; - RwIm2DVertexSetScreenX(&maVertices[0], x3); RwIm2DVertexSetScreenY(&maVertices[0], y3); - RwIm2DVertexSetScreenZ(&maVertices[0], screenz); - RwIm2DVertexSetCameraZ(&maVertices[0], z); - RwIm2DVertexSetRecipCameraZ(&maVertices[0], recipz); + RwIm2DVertexSetScreenZ(&maVertices[0], NearScreenZ); + RwIm2DVertexSetCameraZ(&maVertices[0], NearCamZ); + RwIm2DVertexSetRecipCameraZ(&maVertices[0], RecipNearClip); RwIm2DVertexSetIntRGBA(&maVertices[0], c2.r, c2.g, c2.b, c2.a); - RwIm2DVertexSetU(&maVertices[0], 0.0f, recipz); - RwIm2DVertexSetV(&maVertices[0], 0.0f, recipz); + RwIm2DVertexSetU(&maVertices[0], 0.0f, RecipNearClip); + RwIm2DVertexSetV(&maVertices[0], 0.0f, RecipNearClip); RwIm2DVertexSetScreenX(&maVertices[1], x4); RwIm2DVertexSetScreenY(&maVertices[1], y4); - RwIm2DVertexSetScreenZ(&maVertices[1], screenz); - RwIm2DVertexSetCameraZ(&maVertices[1], z); - RwIm2DVertexSetRecipCameraZ(&maVertices[1], recipz); + RwIm2DVertexSetScreenZ(&maVertices[1], NearScreenZ); + RwIm2DVertexSetCameraZ(&maVertices[1], NearCamZ); + RwIm2DVertexSetRecipCameraZ(&maVertices[1], RecipNearClip); RwIm2DVertexSetIntRGBA(&maVertices[1], c3.r, c3.g, c3.b, c3.a); - RwIm2DVertexSetU(&maVertices[1], 1.0f, recipz); - RwIm2DVertexSetV(&maVertices[1], 0.0f, recipz); + RwIm2DVertexSetU(&maVertices[1], 1.0f, RecipNearClip); + RwIm2DVertexSetV(&maVertices[1], 0.0f, RecipNearClip); RwIm2DVertexSetScreenX(&maVertices[2], x2); RwIm2DVertexSetScreenY(&maVertices[2], y2); - RwIm2DVertexSetScreenZ(&maVertices[2], screenz); - RwIm2DVertexSetCameraZ(&maVertices[2], z); - RwIm2DVertexSetRecipCameraZ(&maVertices[2], recipz); + RwIm2DVertexSetScreenZ(&maVertices[2], NearScreenZ); + RwIm2DVertexSetCameraZ(&maVertices[2], NearCamZ); + RwIm2DVertexSetRecipCameraZ(&maVertices[2], RecipNearClip); RwIm2DVertexSetIntRGBA(&maVertices[2], c1.r, c1.g, c1.b, c1.a); - RwIm2DVertexSetU(&maVertices[2], 1.0f, recipz); - RwIm2DVertexSetV(&maVertices[2], 1.0f, recipz); + RwIm2DVertexSetU(&maVertices[2], 1.0f, RecipNearClip); + RwIm2DVertexSetV(&maVertices[2], 1.0f, RecipNearClip); RwIm2DVertexSetScreenX(&maVertices[3], x1); RwIm2DVertexSetScreenY(&maVertices[3], y1); - RwIm2DVertexSetScreenZ(&maVertices[3], screenz); - RwIm2DVertexSetCameraZ(&maVertices[3], z); - RwIm2DVertexSetRecipCameraZ(&maVertices[3], recipz); + RwIm2DVertexSetScreenZ(&maVertices[3], NearScreenZ); + RwIm2DVertexSetCameraZ(&maVertices[3], NearCamZ); + RwIm2DVertexSetRecipCameraZ(&maVertices[3], RecipNearClip); RwIm2DVertexSetIntRGBA(&maVertices[3], c0.r, c0.g, c0.b, c0.a); - RwIm2DVertexSetU(&maVertices[3], 0.0f, recipz); - RwIm2DVertexSetV(&maVertices[3], 1.0f, recipz); + RwIm2DVertexSetU(&maVertices[3], 0.0f, RecipNearClip); + RwIm2DVertexSetV(&maVertices[3], 1.0f, RecipNearClip); } void CSprite2d::SetVertices(int n, float *positions, float *uvs, const CRGBA &col) { int i; - float screenz, recipz, z; - - screenz = NearScreenZ; - recipz = RecipNearClip; - z = RwCameraGetNearClipPlane(Scene.camera); // not done by game - for(i = 0; i < n; i++){ RwIm2DVertexSetScreenX(&maVertices[i], positions[i*2 + 0]); RwIm2DVertexSetScreenY(&maVertices[i], positions[i*2 + 1]); - RwIm2DVertexSetScreenZ(&maVertices[i], screenz + 0.0001f); - RwIm2DVertexSetCameraZ(&maVertices[i], z); - RwIm2DVertexSetRecipCameraZ(&maVertices[i], recipz); + RwIm2DVertexSetScreenZ(&maVertices[i], NearScreenZ + 0.0001f); + RwIm2DVertexSetCameraZ(&maVertices[i], NearCamZ); + RwIm2DVertexSetRecipCameraZ(&maVertices[i], RecipNearClip); RwIm2DVertexSetIntRGBA(&maVertices[i], col.r, col.g, col.b, col.a); - RwIm2DVertexSetU(&maVertices[i], uvs[i*2 + 0], recipz); - RwIm2DVertexSetV(&maVertices[i], uvs[i*2 + 1], recipz); + RwIm2DVertexSetU(&maVertices[i], uvs[i*2 + 0], RecipNearClip); + RwIm2DVertexSetV(&maVertices[i], uvs[i*2 + 1], RecipNearClip); } } @@ -293,18 +268,13 @@ void CSprite2d::SetMaskVertices(int n, float *positions) { int i; - float screenz, recipz, z; - - screenz = NearScreenZ; - recipz = RecipNearClip; - z = RwCameraGetNearClipPlane(Scene.camera); // not done by game for(i = 0; i < n; i++){ RwIm2DVertexSetScreenX(&maVertices[i], positions[i*2 + 0]); RwIm2DVertexSetScreenY(&maVertices[i], positions[i*2 + 1]); - RwIm2DVertexSetScreenZ(&maVertices[i], screenz); - RwIm2DVertexSetCameraZ(&maVertices[i], z); - RwIm2DVertexSetRecipCameraZ(&maVertices[i], recipz); + RwIm2DVertexSetScreenZ(&maVertices[i], NearScreenZ); + RwIm2DVertexSetCameraZ(&maVertices[i], NearCamZ); + RwIm2DVertexSetRecipCameraZ(&maVertices[i], RecipNearClip); RwIm2DVertexSetIntRGBA(&maVertices[i], 255, 255, 255, 255); // 0, 0, 0, 0 on PC } } @@ -313,53 +283,47 @@ void CSprite2d::SetVertices(RwIm2DVertex *verts, const CRect &r, const CRGBA &c0, const CRGBA &c1, const CRGBA &c2, const CRGBA &c3, float u0, float v0, float u1, float v1, float u3, float v3, float u2, float v2) { - float screenz, recipz, z; - - screenz = NearScreenZ; - recipz = RecipNearClip; - z = RwCameraGetNearClipPlane(Scene.camera); // not done by game - RwIm2DVertexSetScreenX(&verts[0], r.left); RwIm2DVertexSetScreenY(&verts[0], r.top); - RwIm2DVertexSetScreenZ(&verts[0], screenz); - RwIm2DVertexSetCameraZ(&verts[0], z); - RwIm2DVertexSetRecipCameraZ(&verts[0], recipz); + RwIm2DVertexSetScreenZ(&verts[0], NearScreenZ); + RwIm2DVertexSetCameraZ(&verts[0], NearCamZ); + RwIm2DVertexSetRecipCameraZ(&verts[0], RecipNearClip); RwIm2DVertexSetIntRGBA(&verts[0], c2.r, c2.g, c2.b, c2.a); - RwIm2DVertexSetU(&verts[0], u0, recipz); - RwIm2DVertexSetV(&verts[0], v0, recipz); + RwIm2DVertexSetU(&verts[0], u0, RecipNearClip); + RwIm2DVertexSetV(&verts[0], v0, RecipNearClip); RwIm2DVertexSetScreenX(&verts[1], r.right); RwIm2DVertexSetScreenY(&verts[1], r.top); - RwIm2DVertexSetScreenZ(&verts[1], screenz); - RwIm2DVertexSetCameraZ(&verts[1], z); - RwIm2DVertexSetRecipCameraZ(&verts[1], recipz); + RwIm2DVertexSetScreenZ(&verts[1], NearScreenZ); + RwIm2DVertexSetCameraZ(&verts[1], NearCamZ); + RwIm2DVertexSetRecipCameraZ(&verts[1], RecipNearClip); RwIm2DVertexSetIntRGBA(&verts[1], c3.r, c3.g, c3.b, c3.a); - RwIm2DVertexSetU(&verts[1], u1, recipz); - RwIm2DVertexSetV(&verts[1], v1, recipz); + RwIm2DVertexSetU(&verts[1], u1, RecipNearClip); + RwIm2DVertexSetV(&verts[1], v1, RecipNearClip); RwIm2DVertexSetScreenX(&verts[2], r.right); RwIm2DVertexSetScreenY(&verts[2], r.bottom); - RwIm2DVertexSetScreenZ(&verts[2], screenz); - RwIm2DVertexSetCameraZ(&verts[2], z); - RwIm2DVertexSetRecipCameraZ(&verts[2], recipz); + RwIm2DVertexSetScreenZ(&verts[2], NearScreenZ); + RwIm2DVertexSetCameraZ(&verts[2], NearCamZ); + RwIm2DVertexSetRecipCameraZ(&verts[2], RecipNearClip); RwIm2DVertexSetIntRGBA(&verts[2], c1.r, c1.g, c1.b, c1.a); - RwIm2DVertexSetU(&verts[2], u2, recipz); - RwIm2DVertexSetV(&verts[2], v2, recipz); + RwIm2DVertexSetU(&verts[2], u2, RecipNearClip); + RwIm2DVertexSetV(&verts[2], v2, RecipNearClip); RwIm2DVertexSetScreenX(&verts[3], r.left); RwIm2DVertexSetScreenY(&verts[3], r.bottom); - RwIm2DVertexSetScreenZ(&verts[3], screenz); - RwIm2DVertexSetCameraZ(&verts[3], z); - RwIm2DVertexSetRecipCameraZ(&verts[3], recipz); + RwIm2DVertexSetScreenZ(&verts[3], NearScreenZ); + RwIm2DVertexSetCameraZ(&verts[3], NearCamZ); + RwIm2DVertexSetRecipCameraZ(&verts[3], RecipNearClip); RwIm2DVertexSetIntRGBA(&verts[3], c0.r, c0.g, c0.b, c0.a); - RwIm2DVertexSetU(&verts[3], u3, recipz); - RwIm2DVertexSetV(&verts[3], v3, recipz); + RwIm2DVertexSetU(&verts[3], u3, RecipNearClip); + RwIm2DVertexSetV(&verts[3], v3, RecipNearClip); } void CSprite2d::DrawRect(const CRect &r, const CRGBA &col) { - SetVertices(r, col, col, col, col, false); + SetVertices(r, col, col, col, col); RwRenderStateSet(rwRENDERSTATETEXTURERASTER, nil); RwRenderStateSet(rwRENDERSTATESHADEMODE, (void*)rwSHADEMODEFLAT); RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)FALSE); @@ -374,7 +338,7 @@ CSprite2d::DrawRect(const CRect &r, const CRGBA &col) void CSprite2d::DrawRect(const CRect &r, const CRGBA &c0, const CRGBA &c1, const CRGBA &c2, const CRGBA &c3) { - SetVertices(r, c0, c1, c2, c3, false); + SetVertices(r, c0, c1, c2, c3); RwRenderStateSet(rwRENDERSTATETEXTURERASTER, nil); RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)FALSE); RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE); @@ -387,7 +351,7 @@ CSprite2d::DrawRect(const CRect &r, const CRGBA &c0, const CRGBA &c1, const CRGB void CSprite2d::DrawRectXLU(const CRect &r, const CRGBA &c0, const CRGBA &c1, const CRGBA &c2, const CRGBA &c3) { - SetVertices(r, c0, c1, c2, c3, false); + SetVertices(r, c0, c1, c2, c3); RwRenderStateSet(rwRENDERSTATETEXTURERASTER, nil); RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)FALSE); RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE); diff --git a/src/render/Sprite2d.h b/src/render/Sprite2d.h index 1adb5d49..5abd8d71 100644 --- a/src/render/Sprite2d.h +++ b/src/render/Sprite2d.h @@ -4,6 +4,7 @@ class CSprite2d { static float RecipNearClip; static float NearScreenZ; + static float NearCamZ; // not original static int nextBufferVertex; static int nextBufferIndex; static RwIm2DVertex maVertices[8]; @@ -27,7 +28,7 @@ public: void Draw(const CRect &rect, const CRGBA &c0, const CRGBA &c1, const CRGBA &c2, const CRGBA &c3); void Draw(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4, const CRGBA &col); - static void SetVertices(const CRect &r, const CRGBA &c0, const CRGBA &c1, const CRGBA &c2, const CRGBA &c3, uint32 far); + static void SetVertices(const CRect &r, const CRGBA &c0, const CRGBA &c1, const CRGBA &c2, const CRGBA &c3); static void SetVertices(const CRect &r, const CRGBA &c0, const CRGBA &c1, const CRGBA &c2, const CRGBA &c3, float u0, float v0, float u1, float v1, float u3, float v3, float u2, float v2); static void SetVertices(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4, From b54bb62c944f8f3e8d85501fbb762915fdc6569b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?eray=20or=C3=A7unus?= Date: Thu, 13 Aug 2020 23:39:55 +0300 Subject: [PATCH 046/112] Stats(except displaying), PlayerInfo, marker fix --- src/audio/AudioLogic.cpp | 1 - src/audio/audio_enums.h | 3 +- src/control/GameLogic.cpp | 6 +- src/control/Script.cpp | 40 +-- src/core/Cam.cpp | 22 +- src/core/Frontend.cpp | 46 ++- src/core/Frontend_PS2.cpp | 27 +- src/core/Pad.cpp | 22 +- src/core/Pad.h | 1 + src/core/PlayerInfo.cpp | 365 +++++++++++++++++---- src/core/PlayerInfo.h | 25 +- src/core/Radar.h | 2 +- src/core/Stats.cpp | 539 ++++++++++++++++++++++++-------- src/core/Stats.h | 80 +++-- src/core/Wanted.cpp | 13 +- src/core/re3.cpp | 2 +- src/peds/Ped.cpp | 6 +- src/render/SpecialFX.cpp | 40 ++- src/render/SpecialFX.h | 1 + src/render/Timecycle.cpp | 2 +- src/render/Timecycle.h | 2 +- src/save/GenericGameStorage.cpp | 19 +- src/skel/glfw/glfw.cpp | 2 +- src/weapons/BulletInfo.cpp | 2 +- src/weapons/Weapon.cpp | 15 +- 25 files changed, 952 insertions(+), 331 deletions(-) diff --git a/src/audio/AudioLogic.cpp b/src/audio/AudioLogic.cpp index b814d58c..98ebf0d8 100644 --- a/src/audio/AudioLogic.cpp +++ b/src/audio/AudioLogic.cpp @@ -2756,7 +2756,6 @@ cAudioManager::ProcessPlane(cVehicleParams *params) ProcessCesna(params); break; default: - debug("Plane Model Id is %d\n, ", params->m_pVehicle->GetModelIndex()); break; } } diff --git a/src/audio/audio_enums.h b/src/audio/audio_enums.h index 1f13521b..375c4a70 100644 --- a/src/audio/audio_enums.h +++ b/src/audio/audio_enums.h @@ -12,7 +12,8 @@ enum eRadioStation EMOTION, WAVE, USERTRACK, - POLICE_RADIO, + NUM_RADIOS = 10, + POLICE_RADIO = 10, //TAXI_RADIO, RADIO_OFF, }; diff --git a/src/control/GameLogic.cpp b/src/control/GameLogic.cpp index 2af9464c..f4e4fdd4 100644 --- a/src/control/GameLogic.cpp +++ b/src/control/GameLogic.cpp @@ -28,6 +28,7 @@ #include "Particle.h" #include "ColStore.h" #include "Automobile.h" +#include "MBlur.h" uint8 CGameLogic::ActivePlayers; uint8 CGameLogic::ShortCutState; @@ -343,7 +344,10 @@ CGameLogic::RestorePlayerStuffDuringResurrection(CPlayerPed *pPlayerPed, CVector pPlayerPed->bIsVisible = true; pPlayerPed->m_bloodyFootprintCountOrDeathTime = 0; pPlayerPed->bDoBloodyFootprints = false; - //TODO(MIAMI): clear drunk stuff + pPlayerPed->m_nDrunkenness = 0; + pPlayerPed->m_nFadeDrunkenness = 0; + CMBlur::ClearDrunkBlur(); + pPlayerPed->m_nDrunkCountdown = 0; pPlayerPed->ClearAdrenaline(); pPlayerPed->m_fCurrentStamina = pPlayerPed->m_fMaxStamina; if (pPlayerPed->m_pFire) diff --git a/src/control/Script.cpp b/src/control/Script.cpp index 9508677b..69b8ee4f 100644 --- a/src/control/Script.cpp +++ b/src/control/Script.cpp @@ -1806,7 +1806,7 @@ void CMissionCleanup::Process() // TODO(MIAMI) //CSpecialFX::bLiftCam = false; //CSpecialFX::bVideoCam = false; - //CTimeCycle::StopExtraColour(0); + CTimeCycle::StopExtraColour(0); for (int i = 0; i < MISSION_AUDIO_SLOTS; i++) DMAudio.ClearMissionAudio(i); CWeather::ReleaseWeather(); @@ -1822,8 +1822,11 @@ void CMissionCleanup::Process() CWorld::Players[0].m_pPed->m_pWanted->m_bIgnoredByCops = false; CWorld::Players[0].m_pPed->m_pWanted->m_bIgnoredByEveryone = false; CWorld::Players[0].MakePlayerSafe(false); - //TODO(MIAMI): drunkenness, enable drive by - //DMAudio::ShutUpPlayerTalking(0); + CWorld::Players[0].m_pPed->m_nFadeDrunkenness = 1; + CWorld::Players[0].m_pPed->m_nDrunkCountdown = 0; + // CPad::GetPad(0)->SetDrunkInputDelay(0); // TODO(Miami) + CWorld::Players[0].m_bDriveByAllowed = true; + // DMAudio::ShutUpPlayerTalking(0); // TODO(Miami) CVehicle::bDisableRemoteDetonation = false; CVehicle::bDisableRemoteDetonationOnContact = false; CGameLogic::ClearShortCut(); @@ -5353,7 +5356,7 @@ int8 CRunningScript::ProcessCommands300To399(int32 command) if (pos.z <= MAP_Z_LOW_LIMIT) pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - int handle = CRadar::SetCoordBlip(BLIP_COORD, pos, 2, BLIP_DISPLAY_BOTH); + int handle = CRadar::SetCoordBlip(BLIP_CONTACT_POINT, pos, 2, BLIP_DISPLAY_BOTH); CRadar::ChangeBlipScale(handle, 3); ScriptParams[0] = handle; StoreParameters(&m_nIp, 1); @@ -9792,7 +9795,7 @@ int8 CRunningScript::ProcessCommands900To999(int32 command) CVector pos = *(CVector*)&ScriptParams[0]; if (pos.z <= MAP_Z_LOW_LIMIT) pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - C3dMarkers::PlaceMarkerSet((uintptr)this + m_nIp, 4, pos, *(float*)&ScriptParams[3], + C3dMarkers::PlaceMarkerSet((uintptr)this + m_nIp, MARKERTYPE_CYLINDER, pos, *(float*)&ScriptParams[3], SPHERE_MARKER_R, SPHERE_MARKER_G, SPHERE_MARKER_B, SPHERE_MARKER_A, SPHERE_MARKER_PULSE_PERIOD, SPHERE_MARKER_PULSE_FRACTION, 0); return 0; @@ -13008,11 +13011,11 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command) //case COMMAND_IS_MISSION_AUDIO_LOADING: case COMMAND_ADD_MONEY_SPENT_ON_WEAPONS: CollectParameters(&m_nIp, 1); - debug("ADD_MONEY_SPENT_ON_WEAPON not implemented\n"); // TODO(MIAMI) + CStats::MoneySpentOnWeapons(ScriptParams[0]); return 0; case COMMAND_ADD_MONEY_SPENT_ON_PROPERTY: CollectParameters(&m_nIp, 1); - debug("ADD_MONEY_SPENT_ON_PROPERTY not implemented\n"); // TODO(MIAMI) + CStats::MoneySpentOnProperty(ScriptParams[0]); return 0; //case COMMAND_ADD_MONEY_SPENT_ON_AUTO_PAINTING: case COMMAND_SET_CHAR_ANSWERING_MOBILE: @@ -13041,21 +13044,21 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command) //case COMMAND_ADD_LOAN_SHARK_VISITS: case COMMAND_ADD_STORES_KNOCKED_OFF: CollectParameters(&m_nIp, 1); - debug("ADD_STORES_KNOCKED_OFF not implemented\n"); // TODO(MIAMI) + CStats::NumOfStoresKnockedOff(ScriptParams[0]); return 0; //case COMMAND_ADD_MOVIE_STUNTS: case COMMAND_ADD_NUMBER_OF_ASSASSINATIONS: CollectParameters(&m_nIp, 1); - debug("ADD_NUMBER_OF_ASSASSINATIONS not implemented\n"); // TODO(MIAMI) + CStats::NumOfAssassinations(ScriptParams[0]); return 0; case COMMAND_ADD_PIZZAS_DELIVERED: CollectParameters(&m_nIp, 1); - debug("ADD_PIZZAS_DELIVERED not implemented\n"); // TODO(MIAMI) + CStats::NumOfPizzasDelivered(ScriptParams[0]); return 0; //case COMMAND_ADD_GARBAGE_PICKUPS: case COMMAND_ADD_ICE_CREAMS_SOLD: CollectParameters(&m_nIp, 1); - debug("ADD_ICE_CREAMS_SOLD not implemented\n"); // TODO(MIAMI) + CStats::NumOfIceCreamSold(ScriptParams[0]); return 0; //case COMMAND_SET_TOP_SHOOTING_RANGE_SCORE: //case COMMAND_ADD_SHOOTING_RANGE_RANK: @@ -13137,15 +13140,15 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command) } case COMMAND_SET_PROPERTY_AS_OWNED: CollectParameters(&m_nIp, 1); - debug("SET_PROPERTY_AS_OWNED not implemented\n"); // TODO(MIAMI) + CStats::AddPropertyAsOwned(ScriptParams[0]); return 0; case COMMAND_ADD_BLOOD_RING_KILLS: CollectParameters(&m_nIp, 1); - debug("ADD_BLOOD_RING_KILLS not implemented\n"); // TODO(MIAMI) + CStats::AddNumBloodRingKills(ScriptParams[0]); return 0; case COMMAND_SET_LONGEST_TIME_IN_BLOOD_RING: CollectParameters(&m_nIp, 1); - debug("SET_LONGEST_TIME_IN_BLOOD_RING not implemented\n"); // TODO(MIAMI) + CStats::LongestTimeInBloodRing(ScriptParams[0]); return 0; case COMMAND_REMOVE_EVERYTHING_FOR_HUGE_CUTSCENE: { @@ -13271,7 +13274,8 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command) //case COMMAND_SET_CHAR_OBJ_GOTO_CAR_ON_FOOT: //case COMMAND_GET_CLOSEST_WATER_NODE: case COMMAND_ADD_PORN_LEAFLET_TO_RUBBISH: - debug("ADD_PORN_LEAFLET_TO_RUBBISH is not implemented\n"); // TODO(MIAMI) + CollectParameters(&m_nIp, 1); + CStats::PamphletMissionPassed = ScriptParams[0]; return 0; case COMMAND_CREATE_CLOTHES_PICKUP: { @@ -13541,7 +13545,7 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command) switch (command) { case COMMAND_REGISTER_VIGILANTE_LEVEL: CollectParameters(&m_nIp, 1); - debug("REGISTER_VIGILANTE_LEVEL not implemented\n"); // TODO(MIAMI) + CStats::RegisterLevelVigilanteMission(ScriptParams[0]); return 0; case COMMAND_CLEAR_ALL_CHAR_ANIMS: { @@ -13854,7 +13858,7 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command) } case COMMAND_REGISTER_FIRE_LEVEL: CollectParameters(&m_nIp, 1); - debug("REGISTER_FIRE_LEVEL not implemented\n"); // TODO(MIAMI) + CStats::RegisterLevelFireMission(ScriptParams[0]); return 0; case COMMAND_IS_AUSTRALIAN_GAME: UpdateCompareFlag(false); // should we make some check? @@ -14007,7 +14011,7 @@ void CTheScripts::DrawScriptSpheres() { for (int i = 0; i < MAX_NUM_SCRIPT_SPHERES; i++) { if (ScriptSphereArray[i].m_bInUse) - C3dMarkers::PlaceMarkerSet(ScriptSphereArray[i].m_Id, 4, ScriptSphereArray[i].m_vecCenter, ScriptSphereArray[i].m_fRadius, + C3dMarkers::PlaceMarkerSet(ScriptSphereArray[i].m_Id, MARKERTYPE_CYLINDER, ScriptSphereArray[i].m_vecCenter, ScriptSphereArray[i].m_fRadius, SPHERE_MARKER_R, SPHERE_MARKER_G, SPHERE_MARKER_B, SPHERE_MARKER_A, SPHERE_MARKER_PULSE_PERIOD, SPHERE_MARKER_PULSE_FRACTION, 0); } } diff --git a/src/core/Cam.cpp b/src/core/Cam.cpp index 375e9d5b..b996e77f 100644 --- a/src/core/Cam.cpp +++ b/src/core/Cam.cpp @@ -4894,11 +4894,6 @@ CCam::Process_FollowCar_SA(const CVector& CameraTarget, float TargetOrientation, if (ResetStatics) { FOV = DefaultFOV; - - // TODO(Miami): Remove that when cam is done! - // GTA 3 has this in veh. camera - if (TheCamera.m_bIdleOn) - TheCamera.m_uiTimeWeEnteredIdle = CTimer::GetTimeInMilliseconds(); } else { if (isCar || isBike) { // 0.4f: CAR_FOV_START_SPEED @@ -4933,18 +4928,13 @@ CCam::Process_FollowCar_SA(const CVector& CameraTarget, float TargetOrientation, Rotating = false; m_bCollisionChecksOn = true; - - // TODO(Miami): Uncomment that when cam is done! - - // Garage exit cam is not working well in III... - // if (!TheCamera.m_bJustCameOutOfGarage) - // { - Alpha = 0.0f; - Beta = car->GetForward().Heading() - HALFPI; - if (TheCamera.m_bCamDirectlyInFront) { - Beta += PI; + if (!TheCamera.m_bJustCameOutOfGarage) { + Alpha = 0.0f; + Beta = car->GetForward().Heading() - HALFPI; + if (TheCamera.m_bCamDirectlyInFront) { + Beta += PI; + } } - // } BetaSpeed = 0.0; AlphaSpeed = 0.0; diff --git a/src/core/Frontend.cpp b/src/core/Frontend.cpp index ccb89fbd..93061fd0 100644 --- a/src/core/Frontend.cpp +++ b/src/core/Frontend.cpp @@ -36,6 +36,7 @@ #include "Stats.h" #include "Messages.h" #include "FileLoader.h" +#include "User.h" // TODO(Miami): Remove that!! That was my map implementation for III, instead use MAP_ENHACEMENTS on some places #define CUSTOM_MAP @@ -5226,9 +5227,13 @@ CMenuManager::SwitchMenuOnAndOff() Initialise(); LoadAllTextures(); - // TODO(Miami): Cheat warning - m_nCurrScreen = MENUPAGE_CHOOSE_SAVE_SLOT; - m_nCurrOption = 8; + if (CPad::bHasPlayerCheated) { + m_nCurrScreen = MENUPAGE_SAVE_CHEAT_WARNING; + m_nCurrOption = 0; + } else { + m_nCurrScreen = MENUPAGE_CHOOSE_SAVE_SLOT; + m_nCurrOption = 8; + } } m_bStartUpFrontEndRequested = false; @@ -5262,7 +5267,7 @@ CMenuManager::UnloadTextures() m_bSpritesLoaded = false; } m_OnlySaveMenu = false; - // TODO(Miami): Place name thing + CUserDisplay::PlaceName.ProcessAfterFrontEndShutDown(); } void @@ -5565,27 +5570,6 @@ CMenuManager::ConstructStatLine(int rowIdx) STAT_LINE("DED_CRI", &(nTemp = CStats::PedsKilledOfThisType[PEDTYPE_CRIMINAL]), false, nil); STAT_LINE("HEL_DST", &CStats::HelisDestroyed, false, nil); STAT_LINE("KGS_EXP", &CStats::KgsOfExplosivesUsed, false, nil); - STAT_LINE("ACCURA", &(nTemp = (CStats::InstantHitsFiredByPlayer == 0 ? 0 : - CStats::InstantHitsHitByPlayer * 100.0f / CStats::InstantHitsFiredByPlayer)), false, nil); - - if (CStats::ElBurroTime > 0) { - STAT_LINE("ELBURRO", &CStats::ElBurroTime, false, nil); - } - if (CStats::Record4x4One > 0) { - STAT_LINE("FEST_R1", &CStats::Record4x4One, false, nil); - } - if (CStats::Record4x4Two > 0) { - STAT_LINE("FEST_R2", &CStats::Record4x4Two, false, nil); - } - if (CStats::Record4x4Three > 0) { - STAT_LINE("FEST_R3", &CStats::Record4x4Three, false, nil); - } - if (CStats::Record4x4Mayhem > 0) { - STAT_LINE("FEST_RM", &CStats::Record4x4Mayhem, false, nil); - } - if (CStats::TimeTakenDefuseMission > 0) { - STAT_LINE("FEST_BD", &CStats::TimeTakenDefuseMission, false, nil); - } if (CStats::HighestScores[0] > 0) { STAT_LINE("FEST_BB", nil, false, nil); @@ -5612,7 +5596,11 @@ CMenuManager::ConstructStatLine(int rowIdx) #ifndef USE_MEASUREMENTS_IN_METERS float fTemp; STAT_LINE("FEST_DF", &(fTemp = CStats::DistanceTravelledOnFoot * MILES_IN_METER), true, nil); - STAT_LINE("FEST_DC", &(fTemp = CStats::DistanceTravelledInVehicle * MILES_IN_METER), true, nil); + STAT_LINE("FEST_DC", &(fTemp = CStats::DistanceTravelledByCar * MILES_IN_METER), true, nil); + STAT_LINE("DISTBIK", &(fTemp = CStats::DistanceTravelledByBike * MILES_IN_METER), true, nil); + STAT_LINE("DISTBOA", &(fTemp = CStats::DistanceTravelledByBoat * MILES_IN_METER), true, nil); + STAT_LINE("DISTGOL", &(fTemp = CStats::DistanceTravelledByGolfCart * MILES_IN_METER), true, nil); + STAT_LINE("DISTHEL", &(fTemp = CStats::DistanceTravelledByHelicoptor * MILES_IN_METER), true, nil); STAT_LINE("MXCARD", &(fTemp = CStats::MaximumJumpDistance * FEET_IN_METER), true, nil); STAT_LINE("MXCARJ", &(fTemp = CStats::MaximumJumpHeight * FEET_IN_METER), true, nil); break; @@ -5627,7 +5615,11 @@ CMenuManager::ConstructStatLine(int rowIdx) case LANGUAGE_JAPANESE: #endif STAT_LINE("FESTDFM", &CStats::DistanceTravelledOnFoot, true, nil); - STAT_LINE("FESTDCM", &CStats::DistanceTravelledInVehicle, true, nil); + STAT_LINE("FESTDCM", &CStats::DistanceTravelledByCar, true, nil); + STAT_LINE("DISTBIM", &CStats::DistanceTravelledByBike, true, nil); + STAT_LINE("DISTBOM", &CStats::DistanceTravelledByBoat, true, nil); + STAT_LINE("DISTGOM", &CStats::DistanceTravelledByGolfCart, true, nil); + STAT_LINE("DISTHEM", &CStats::DistanceTravelledByHelicoptor, true, nil); STAT_LINE("MXCARDM", &CStats::MaximumJumpDistance, true, nil); STAT_LINE("MXCARJM", &CStats::MaximumJumpHeight, true, nil); break; diff --git a/src/core/Frontend_PS2.cpp b/src/core/Frontend_PS2.cpp index 8e604978..d9eff445 100644 --- a/src/core/Frontend_PS2.cpp +++ b/src/core/Frontend_PS2.cpp @@ -1179,30 +1179,9 @@ CMenuManager::InitialiseMenuContents(void) STAT_LINE("KGS_EXP", &CStats::KgsOfExplosivesUsed, 0, nil); - nTemp = (CStats::InstantHitsFiredByPlayer == 0 ? 0 : CStats::InstantHitsHitByPlayer * 100.0f / CStats::InstantHitsFiredByPlayer); - STAT_LINE("ACCURA", &nTemp, 0, nil); - - if (CStats::ElBurroTime > 0) - STAT_LINE("ELBURRO", &CStats::ElBurroTime, 0, nil); - - if (CStats::Record4x4One > 0) - STAT_LINE("FEST_R1", &CStats::Record4x4One, 0, nil); - - if (CStats::Record4x4Two > 0) - STAT_LINE("FEST_R2", &CStats::Record4x4Two, 0, nil); - - if (CStats::Record4x4Three > 0) - STAT_LINE("FEST_R3", &CStats::Record4x4Three, 0, nil); - - if (CStats::Record4x4Mayhem > 0) - STAT_LINE("FEST_RM", &CStats::Record4x4Mayhem, 0, nil); - if (CStats::LongestFlightInDodo > 0) STAT_LINE("FEST_LF", &CStats::LongestFlightInDodo, 0, nil); - if (CStats::TimeTakenDefuseMission > 0) - STAT_LINE("FEST_BD", &CStats::TimeTakenDefuseMission, 0, nil); - STAT_LINE("CAR_CRU", &CStats::CarsCrushed, 0, nil); if (CStats::HighestScores[0] > 0) @@ -1231,7 +1210,11 @@ CMenuManager::InitialiseMenuContents(void) STAT_LINE("FEST_H4", &CStats::HighestScores[4], 0, nil); STAT_LINE("FESTDFM", &CStats::DistanceTravelledOnFoot, 0, nil); - STAT_LINE("FESTDCM", &CStats::DistanceTravelledInVehicle, 0, nil); + STAT_LINE("FESTDCM", &CStats::DistanceTravelledByCar, 0, nil); + STAT_LINE("DISTBIM", &CStats::DistanceTravelledByBike, 0, nil); + STAT_LINE("DISTBOM", &CStats::DistanceTravelledByBoat, 0, nil); + STAT_LINE("DISTGOM", &CStats::DistanceTravelledByGolfCart, 0, nil); + STAT_LINE("DISTHEM", &CStats::DistanceTravelledByHelicoptor, 0, nil); STAT_LINE("MMRAIN", &CStats::mmRain, 0, nil); nTemp = (int32)CStats::MaximumJumpDistance; STAT_LINE("MXCARDM", &nTemp, 0, nil); diff --git a/src/core/Pad.cpp b/src/core/Pad.cpp index c1016bdd..6d6c30e4 100644 --- a/src/core/Pad.cpp +++ b/src/core/Pad.cpp @@ -41,6 +41,7 @@ #include "Fluff.h" #include "Gangs.h" #include "platform.h" +#include "Stats.h" #ifdef GTA_PS2 #include "eetypes.h" @@ -59,6 +60,7 @@ bool CPad::bDisplayNoControllerMessage; bool CPad::bObsoleteControllerMessage; bool CPad::bOldDisplayNoControllerMessage; bool CPad::m_bMapPadOneToPadTwo; +bool CPad::bHasPlayerCheated; #ifdef GTA_PS2 unsigned char act_direct[6]; unsigned char act_align[6]; @@ -228,6 +230,8 @@ void VehicleCheat(bool something, int model) CWorld::Add(vehicle); } } + CStats::CheatedCount += 1000; + CPad::bHasPlayerCheated = true; } void BlowUpCarsCheat() @@ -287,6 +291,8 @@ void MayhemCheat() PED_FLAG_GANG2 | PED_FLAG_GANG3 | PED_FLAG_GANG4 | PED_FLAG_GANG5 | PED_FLAG_GANG6 | PED_FLAG_GANG7 | PED_FLAG_GANG8 | PED_FLAG_GANG9 | PED_FLAG_EMERGENCY | PED_FLAG_PROSTITUTE | PED_FLAG_CRIMINAL | PED_FLAG_SPECIAL ); + CStats::CheatedCount += 1000; + CPad::bHasPlayerCheated = true; } void EverybodyAttacksPlayerCheat() @@ -294,12 +300,17 @@ void EverybodyAttacksPlayerCheat() CHud::SetHelpMessage(TheText.Get("CHEAT1"), true); for (int i = PEDTYPE_CIVMALE; i < PEDTYPE_SPECIAL; i++) CPedType::AddThreat(i, PED_FLAG_PLAYER1); + + CStats::CheatedCount += 1000; + CPad::bHasPlayerCheated = true; } void WeaponsForAllCheat() { CHud::SetHelpMessage(TheText.Get("CHEAT1"), true); CPopulation::ms_bGivePedsWeapons = !CPopulation::ms_bGivePedsWeapons; + CStats::CheatedCount += 1000; + CPad::bHasPlayerCheated = true; } void FastTimeCheat() @@ -380,19 +391,24 @@ void OnlyRenderWheelsCheat() { CHud::SetHelpMessage(TheText.Get("CHEAT1"), true); CVehicle::bWheelsOnlyCheat = !CVehicle::bWheelsOnlyCheat; + CStats::CheatedCount += 1000; + CPad::bHasPlayerCheated = true; } - void ChittyChittyBangBangCheat() { CHud::SetHelpMessage(TheText.Get("CHEAT1"), true); CVehicle::bAllDodosCheat = !CVehicle::bAllDodosCheat; + CStats::CheatedCount += 1000; + CPad::bHasPlayerCheated = true; } void StrongGripCheat() { CHud::SetHelpMessage(TheText.Get("CHEAT1"), true); CVehicle::bCheat3 = !CVehicle::bCheat3; + CStats::CheatedCount += 1000; + CPad::bHasPlayerCheated = true; } void NastyLimbsCheat() @@ -404,6 +420,7 @@ void FannyMagnetCheat() { CHud::SetHelpMessage(TheText.Get("CHEAT1"), true); CPed::bFannyMagnetCheat = !CPed::bFannyMagnetCheat; + CPad::bHasPlayerCheated = true; } void BlackCarsCheat() @@ -437,6 +454,7 @@ void BackToTheFuture(void) { CHud::SetHelpMessage(TheText.Get("CHEAT1"), true); CVehicle::bHoverCheat = !CVehicle::bHoverCheat; + CPad::bHasPlayerCheated = true; } void SuicideCheat(void) { @@ -453,6 +471,8 @@ void DoChicksWithGunsCheat(void) { CStreaming::RemoveCurrentZonesModels(); CGangs::SetGangPedModels(GANG_PLAYER, MI_HFYBE, MI_WFYBE); CGangs::SetGangWeapons(GANG_PLAYER, WEAPONTYPE_M4, WEAPONTYPE_M4); + CStats::CheatedCount += 1000; + CPad::bHasPlayerCheated = true; } ////////////////////////////////////////////////////////////////////////// diff --git a/src/core/Pad.h b/src/core/Pad.h index 2a0bb7d3..4374bc1a 100644 --- a/src/core/Pad.h +++ b/src/core/Pad.h @@ -171,6 +171,7 @@ public: static bool bObsoleteControllerMessage; static bool bOldDisplayNoControllerMessage; static bool m_bMapPadOneToPadTwo; + static bool bHasPlayerCheated; static CKeyboardState OldKeyState; static CKeyboardState NewKeyState; diff --git a/src/core/PlayerInfo.cpp b/src/core/PlayerInfo.cpp index 3c01a176..f5f6a684 100644 --- a/src/core/PlayerInfo.cpp +++ b/src/core/PlayerInfo.cpp @@ -30,7 +30,13 @@ #include "World.h" #include "ZoneCull.h" #include "main.h" +#include "Bike.h" +#include "Automobile.h" +#include "GameLogic.h" +CVector lastPlayerPos; + +// --MIAMI: Done void CPlayerInfo::SetPlayerSkin(char *skin) { @@ -38,6 +44,7 @@ CPlayerInfo::SetPlayerSkin(char *skin) LoadPlayerSkin(); } +// --MIAMI: Done const CVector & CPlayerInfo::GetPos() { @@ -50,16 +57,16 @@ CPlayerInfo::GetPos() return m_pPed->GetPosition(); } +// --MIAMI: Done void CPlayerInfo::LoadPlayerSkin() { DeletePlayerSkin(); m_pSkinTexture = CPlayerSkin::GetSkinTexture(m_aSkinName); - if (!m_pSkinTexture) - m_pSkinTexture = CPlayerSkin::GetSkinTexture(DEFAULT_SKIN_NAME); } +// --MIAMI: Done void CPlayerInfo::DeletePlayerSkin() { @@ -69,6 +76,7 @@ CPlayerInfo::DeletePlayerSkin() } } +// --MIAMI: Done void CPlayerInfo::KillPlayer() { @@ -81,6 +89,7 @@ CPlayerInfo::KillPlayer() CStats::TimesDied++; } +// --MIAMI: Done void CPlayerInfo::ArrestPlayer() { @@ -88,11 +97,13 @@ CPlayerInfo::ArrestPlayer() m_WBState = WBSTATE_BUSTED; m_nWBTime = CTimer::GetTimeInMilliseconds(); + m_nBustedAudioStatus = BUSTEDAUDIO_NONE; CDarkel::ResetOnPlayerDeath(); CMessages::AddBigMessage(TheText.Get("BUSTED"), 5000, 2); CStats::TimesArrested++; } +// --MIAMI: Done bool CPlayerInfo::IsPlayerInRemoteMode() { @@ -109,6 +120,7 @@ CPlayerInfo::PlayerFailedCriticalMission() CDarkel::ResetOnPlayerDeath(); } +// --MIAMI: Done void CPlayerInfo::Clear(void) { @@ -125,6 +137,8 @@ CPlayerInfo::Clear(void) m_nTrafficMultiplier = 0; m_fRoadDensity = 1.0f; m_bInRemoteMode = false; + field_D5 = false; + field_D6 = false; m_bUnusedTaxiThing = false; m_nUnusedTaxiTimer = 0; m_nCollectedPackages = 0; @@ -136,10 +150,25 @@ CPlayerInfo::Clear(void) m_nSexFrequency = 0; m_pHooker = nil; m_nTimeTankShotGun = 0; - field_248 = 0; + field_EC = 0; m_nUpsideDownCounter = 0; + m_nTimeCarSpentOnTwoWheels = 0; + m_nDistanceCarTravelledOnTwoWheels = 0; + m_nTimeNotFullyOnGround = 0; + m_nTimeSpentOnWheelie = 0; + m_nDistanceTravelledOnWheelie = 0.0f; + m_nTimeSpentOnStoppie = 0; + m_nDistanceTravelledOnStoppie = 0.0f; + m_nCancelWheelStuntTimer = 0; + m_nPrevTimeCarSpentOnTwoWheels = 0; + m_nPrevDistanceCarTravelledOnTwoWheels = 0; + m_nPrevTimeSpentOnWheelie = 0; + m_nPrevDistanceTravelledOnWheelie = 0; + m_nPrevTimeSpentOnStoppie = 0; + m_nPrevDistanceTravelledOnStoppie = 0; m_bInfiniteSprint = false; m_bFastReload = false; + m_bFireproof = false; m_nMaxHealth = m_nMaxArmour = 100; m_bGetOutOfJailFree = false; m_bGetOutOfHospitalFree = false; @@ -147,11 +176,12 @@ CPlayerInfo::Clear(void) m_nPreviousTimeRewardedForExplosion = 0; m_nExplosionsSinceLastReward = 0; m_nHavocLevel = 0; - m_fMediaAttention = 0; + m_fMediaAttention = 0.0f; m_nCurrentBustedAudio = 1; m_nBustedAudioStatus = BUSTEDAUDIO_NONE; } +// --MIAMI: Done void CPlayerInfo::BlowUpRCBuggy(bool actually) { @@ -163,6 +193,7 @@ CPlayerInfo::BlowUpRCBuggy(bool actually) m_pRemoteVehicle->BlowUpCar(FindPlayerPed()); } +// --MIAMI: Done void CPlayerInfo::CancelPlayerEnteringCars(CVehicle *car) { @@ -174,6 +205,7 @@ CPlayerInfo::CancelPlayerEnteringCars(CVehicle *car) m_pPed->ClearObjective(); } +// --MIAMI: Done void CPlayerInfo::MakePlayerSafe(bool toggle) { @@ -198,8 +230,7 @@ CPlayerInfo::MakePlayerSafe(bool toggle) CWorld::ExtinguishAllCarFiresInArea(GetPos(), 4000.0f); CReplay::DisableReplays(); - } - else { + } else { m_pPed->m_pWanted->m_bIgnoredByEveryone = false; CPad::GetPad(0)->SetEnablePlayerControls(PLAYERCONTROL_PLAYERINFO); m_pPed->bBulletProof = false; @@ -214,18 +245,21 @@ CPlayerInfo::MakePlayerSafe(bool toggle) } } +// --MIAMI: Done bool CPlayerInfo::IsRestartingAfterDeath() { return m_WBState == WBSTATE_WASTED; } +// --MIAMI: Done bool CPlayerInfo::IsRestartingAfterArrest() { return m_WBState == WBSTATE_BUSTED; } +// --MIAMI: Done // lastCloseness is passed to other calls of this function void CPlayerInfo::EvaluateCarPosition(CEntity *carToTest, CPed *player, float carBoundCentrePedDist, float *lastCloseness, CVehicle **closestCarOutput) @@ -250,32 +284,7 @@ CPlayerInfo::EvaluateCarPosition(CEntity *carToTest, CPed *player, float carBoun } } -// There is something unfinished in here... Sadly all IDBs we have have it unfinished. -void -CPlayerInfo::AwardMoneyForExplosion(CVehicle *wreckedCar) -{ - if (CTimer::GetTimeInMilliseconds() - m_nPreviousTimeRewardedForExplosion < 6000) - ++m_nExplosionsSinceLastReward; - else - m_nExplosionsSinceLastReward = 1; - - m_nPreviousTimeRewardedForExplosion = CTimer::GetTimeInMilliseconds(); - int award = wreckedCar->pHandling->nMonetaryValue * 0.002f; - sprintf(gString, "$%d", award); -#ifdef MONEY_MESSAGES - // This line is a leftover from PS2, I don't know what it was meant to be. - // CVector sth(TheCamera.GetPosition() * 4.0f); - - CMoneyMessages::RegisterOne(wreckedCar->GetPosition() + CVector(0.0f, 0.0f, 2.0f), gString, 0, 255, 0, 2.0f, 0.5f); -#endif - CWorld::Players[CWorld::PlayerInFocus].m_nMoney += award; - - for (int i = m_nExplosionsSinceLastReward; i > 1; --i) { - CGeneral::GetRandomNumber(); - CWorld::Players[CWorld::PlayerInFocus].m_nMoney += award; - } -} - +// --MIAMI: Done void CPlayerInfo::SavePlayerInfo(uint8 *buf, uint32 *size) { @@ -293,12 +302,19 @@ CPlayerInfo::SavePlayerInfo(uint8 *buf, uint32 *size) CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nTotalPackages); CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bInfiniteSprint); CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bFastReload); + CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bFireproof); + CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nMaxHealth); + CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nMaxArmour); CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bGetOutOfJailFree); CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bGetOutOfHospitalFree); + CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bDriveByAllowed); CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_aPlayerName); + CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nBustedAudioStatus); + CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nCurrentBustedAudio); #undef CopyToBuf } +// --MIAMI: Done void CPlayerInfo::LoadPlayerInfo(uint8 *buf, uint32 size) { @@ -313,12 +329,19 @@ CPlayerInfo::LoadPlayerInfo(uint8 *buf, uint32 size) CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nTotalPackages); CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bInfiniteSprint); CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bFastReload); + CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bFireproof); + CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nMaxHealth); + CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nMaxArmour); CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bGetOutOfJailFree); CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bGetOutOfHospitalFree); - CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_aPlayerName) + CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bDriveByAllowed); + CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_aPlayerName); + CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nBustedAudioStatus); + CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nCurrentBustedAudio) #undef CopyFromBuf } +// --MIAMI: Done void CPlayerInfo::FindClosestCarSectorList(CPtrList& carList, CPed* ped, float unk1, float unk2, float unk3, float unk4, float* lastCloseness, CVehicle** closestCarOutput) { @@ -333,7 +356,7 @@ CPlayerInfo::FindClosestCarSectorList(CPtrList& carList, CPed* ped, float unk1, && (car->GetUp().z > 0.3f || (car->IsVehicle() && ((CVehicle*)car)->m_vehType == VEHICLE_TYPE_BIKE))) { CVector carCentre = car->GetBoundCentre(); - if (Abs(ped->GetPosition().z - carCentre.z) < 2.0f) { + if (Abs(ped->GetPosition().z - carCentre.z) < 2.0f || car->IsCar() && carCentre.z < ped->GetPosition().z && ped->GetPosition().z - 4.f < carCentre.z) { float dist = (ped->GetPosition() - carCentre).Magnitude2D(); if (dist <= 10.0f && !CCranes::IsThisCarBeingCarriedByAnyCrane(car)) { EvaluateCarPosition(car, ped, dist, lastCloseness, closestCarOutput); @@ -367,6 +390,157 @@ CPlayerInfo::Process(void) if (startTaxiTimer) m_nUnusedTaxiTimer = CTimer::GetTimeInMilliseconds(); + if (!m_pPed->InVehicle()) { + m_nTimeCarSpentOnTwoWheels = 0; + m_nTimeNotFullyOnGround = 0; + m_nTimeSpentOnWheelie = 0; + m_nTimeSpentOnStoppie = 0; + m_nCancelWheelStuntTimer = 0; + } else if (m_pPed->m_pMyVehicle->IsCar()) { + CAutomobile *car = (CAutomobile*)m_pPed->m_pMyVehicle; + + if (car->m_nWheelsOnGround < 3) + m_nTimeNotFullyOnGround += CTimer::GetTimeInMilliseconds(); + else + m_nTimeNotFullyOnGround = 0; + + if (car->m_aSuspensionSpringRatioPrev[2] == 1.f && car->m_aSuspensionSpringRatioPrev[3] == 1.f) { + if (car->m_aSuspensionSpringRatioPrev[0] < 1.0f && car->m_aSuspensionSpringRatioPrev[1] < 1.0f && car->m_fDamageImpulse == 0.0f) { + m_nTimeCarSpentOnTwoWheels += CTimer::GetTimeStepInMilliseconds(); + m_nDistanceCarTravelledOnTwoWheels += car->m_fDistanceTravelled; + m_nCancelWheelStuntTimer = Max(0.0f, m_nCancelWheelStuntTimer - CTimer::GetTimeStepInMilliseconds() * 0.5f); + + } else { + if (m_nTimeCarSpentOnTwoWheels != 0 && m_nCancelWheelStuntTimer < 500) { + m_nCancelWheelStuntTimer += CTimer::GetTimeStepInMilliseconds(); + } else { + if (m_nTimeCarSpentOnTwoWheels >= 2000) { + m_nPrevTimeCarSpentOnTwoWheels = m_nTimeCarSpentOnTwoWheels; + m_nPrevDistanceCarTravelledOnTwoWheels = m_nDistanceCarTravelledOnTwoWheels; + if (CStats::Longest2Wheel < m_nTimeCarSpentOnTwoWheels / 1000) + CStats::Longest2Wheel = m_nTimeCarSpentOnTwoWheels / 1000; + if (CStats::Longest2WheelDist < m_nDistanceCarTravelledOnTwoWheels) + CStats::Longest2WheelDist = m_nDistanceCarTravelledOnTwoWheels; + } + m_nTimeCarSpentOnTwoWheels = 0; + m_nDistanceCarTravelledOnTwoWheels = 0; + m_nCancelWheelStuntTimer = 0; + } + } + } else if (car->m_aSuspensionSpringRatioPrev[0] == 1.0f && car->m_aSuspensionSpringRatioPrev[1] == 1.0f) { +#ifdef FIX_BUGS + if (car->m_aSuspensionSpringRatioPrev[2] < 1.f +#else + if (car->m_aSuspensionSpringRatioPrev[1] < 1.f +#endif + && car->m_aSuspensionSpringRatioPrev[3] < 1.f && 0.0f == car->m_fDamageImpulse) { + m_nTimeCarSpentOnTwoWheels += CTimer::GetTimeStepInMilliseconds(); + m_nDistanceCarTravelledOnTwoWheels += car->m_fDistanceTravelled; + m_nCancelWheelStuntTimer = Max(0.0f, m_nCancelWheelStuntTimer - CTimer::GetTimeStepInMilliseconds() * 0.2f); + + } else if (m_nTimeCarSpentOnTwoWheels != 0 && m_nCancelWheelStuntTimer < 500) { + m_nCancelWheelStuntTimer += CTimer::GetTimeStepInMilliseconds(); + + } else { + if (m_nTimeCarSpentOnTwoWheels >= 2000) { + m_nPrevTimeCarSpentOnTwoWheels = m_nTimeCarSpentOnTwoWheels; + m_nPrevDistanceCarTravelledOnTwoWheels = m_nDistanceCarTravelledOnTwoWheels; + if (CStats::Longest2Wheel < m_nTimeCarSpentOnTwoWheels / 1000) + CStats::Longest2Wheel = m_nTimeCarSpentOnTwoWheels / 1000; + if (CStats::Longest2WheelDist < m_nDistanceCarTravelledOnTwoWheels) + CStats::Longest2WheelDist = m_nDistanceCarTravelledOnTwoWheels; + } + m_nTimeCarSpentOnTwoWheels = 0; + m_nDistanceCarTravelledOnTwoWheels = 0; + m_nCancelWheelStuntTimer = 0; + } + } else if (m_nTimeCarSpentOnTwoWheels != 0) { + if (m_nTimeCarSpentOnTwoWheels >= 2000) { + m_nPrevTimeCarSpentOnTwoWheels = m_nTimeCarSpentOnTwoWheels; + m_nPrevDistanceCarTravelledOnTwoWheels = m_nDistanceCarTravelledOnTwoWheels; + if (CStats::Longest2Wheel < m_nTimeCarSpentOnTwoWheels / 1000) + CStats::Longest2Wheel = m_nTimeCarSpentOnTwoWheels / 1000; + if (CStats::Longest2WheelDist < m_nDistanceCarTravelledOnTwoWheels) + CStats::Longest2WheelDist = m_nDistanceCarTravelledOnTwoWheels; + } + m_nTimeCarSpentOnTwoWheels = 0; + m_nDistanceCarTravelledOnTwoWheels = 0; + m_nCancelWheelStuntTimer = 0; + } + m_nTimeSpentOnWheelie = 0; + m_nTimeSpentOnStoppie = 0; + } else if (m_pPed->m_pMyVehicle->IsBike()) { + CBike *bike = (CBike*)m_pPed->m_pMyVehicle; + if (bike->m_aSuspensionSpringRatioPrev[0] == 1.0f && bike->m_aSuspensionSpringRatioPrev[1] == 1.0f) { + if (bike->m_aSuspensionSpringRatioPrev[2] < 1.0f + || (bike->m_aSuspensionSpringRatioPrev[3] < 1.0f && 0.0f == bike->m_fDamageImpulse)) { + m_nTimeSpentOnWheelie += CTimer::GetTimeStepInMilliseconds(); + m_nDistanceTravelledOnWheelie += bike->m_fDistanceTravelled; + m_nCancelWheelStuntTimer = Max(0.0f, m_nCancelWheelStuntTimer - CTimer::GetTimeStepInMilliseconds() * 0.2f); + + } else { + if (m_nTimeSpentOnWheelie != 0 && m_nCancelWheelStuntTimer < 500) { + m_nCancelWheelStuntTimer += CTimer::GetTimeStepInMilliseconds(); + } else { + if (m_nTimeSpentOnWheelie >= 5000) { + m_nPrevTimeSpentOnWheelie = m_nTimeSpentOnWheelie; + m_nPrevDistanceTravelledOnWheelie = m_nDistanceTravelledOnWheelie; + if (CStats::LongestWheelie < m_nTimeSpentOnWheelie / 1000) + CStats::LongestWheelie = m_nTimeSpentOnWheelie / 1000; + if (CStats::LongestWheelieDist < m_nDistanceTravelledOnWheelie) + CStats::LongestWheelieDist = m_nDistanceTravelledOnWheelie; + } + m_nTimeSpentOnWheelie = 0; + m_nDistanceTravelledOnWheelie = 0; + m_nCancelWheelStuntTimer = 0; + } + } + } else if (m_nTimeSpentOnWheelie != 0) { + if (m_nTimeSpentOnWheelie >= 5000) { + m_nPrevTimeSpentOnWheelie = m_nTimeSpentOnWheelie; + m_nPrevDistanceTravelledOnWheelie = m_nDistanceTravelledOnWheelie; + if (CStats::LongestWheelie < m_nTimeSpentOnWheelie / 1000) + CStats::LongestWheelie = m_nTimeSpentOnWheelie / 1000; + if (CStats::LongestWheelieDist < m_nDistanceTravelledOnWheelie) + CStats::LongestWheelieDist = m_nDistanceTravelledOnWheelie; + } + m_nTimeSpentOnWheelie = 0; + m_nDistanceTravelledOnWheelie = 0; + m_nCancelWheelStuntTimer = 0; + + } else if (bike->m_aSuspensionSpringRatioPrev[2] == 1.0f && bike->m_aSuspensionSpringRatioPrev[3] == 1.0f + && 0.0f == bike->m_fDamageImpulse) { + m_nTimeSpentOnStoppie += CTimer::GetTimeStepInMilliseconds(); + m_nDistanceTravelledOnStoppie += bike->m_fDistanceTravelled; + m_nCancelWheelStuntTimer = Max(0.0f, m_nCancelWheelStuntTimer - CTimer::GetTimeStepInMilliseconds() * 0.2f); + + } else { + if (m_nTimeSpentOnStoppie != 0 && m_nCancelWheelStuntTimer < 500) { + m_nCancelWheelStuntTimer += CTimer::GetTimeStepInMilliseconds(); + } else { + if (m_nTimeSpentOnStoppie >= 2000) { + m_nPrevTimeSpentOnStoppie = m_nTimeSpentOnStoppie; + m_nPrevDistanceTravelledOnStoppie = m_nDistanceTravelledOnStoppie; + if (CStats::LongestStoppie < m_nTimeSpentOnStoppie / 1000) + CStats::LongestStoppie = m_nTimeSpentOnStoppie / 1000; + if (CStats::LongestStoppieDist < m_nDistanceTravelledOnStoppie) + CStats::LongestStoppieDist = m_nDistanceTravelledOnStoppie; + } + m_nTimeSpentOnStoppie = 0; + m_nDistanceTravelledOnStoppie = 0; + m_nCancelWheelStuntTimer = 0; + } + } + m_nTimeCarSpentOnTwoWheels = 0; + m_nTimeNotFullyOnGround = 0; + } else { + m_nTimeCarSpentOnTwoWheels = 0; + m_nTimeNotFullyOnGround = 0; + m_nTimeSpentOnWheelie = 0; + m_nTimeSpentOnStoppie = 0; + m_nCancelWheelStuntTimer = 0; + } + // The effect that makes money counter does while earning/losing money if (m_nVisibleMoney != m_nMoney) { int diff = m_nMoney - m_nVisibleMoney; @@ -395,7 +569,7 @@ CPlayerInfo::Process(void) m_fRoadDensity = ThePaths.CalcRoadDensity(playerPos.x, playerPos.y); } - m_fRoadDensity = clamp(m_fRoadDensity, 0.4f, 1.45f); + m_fRoadDensity = clamp(m_fRoadDensity, 0.5f, 1.45f); // Because vehicle enter/exit use same key binding. bool enterOrExitVeh; @@ -404,39 +578,31 @@ CPlayerInfo::Process(void) else enterOrExitVeh = CPad::GetPad(0)->GetExitVehicle(); - if (enterOrExitVeh && m_pPed->m_nPedState != PED_SNIPER_MODE && m_pPed->m_nPedState != PED_ROCKET_MODE) { + if (enterOrExitVeh && m_pPed->m_nPedState != PED_ANSWER_MOBILE && m_pPed->m_nPedState != PED_SNIPER_MODE && m_pPed->m_nPedState != PED_ROCKET_MODE) { if (m_pPed->bInVehicle) { if (!m_pRemoteVehicle) { CEntity *surfaceBelowVeh = m_pPed->m_pMyVehicle->m_pCurGroundEntity; if (!surfaceBelowVeh || !CBridge::ThisIsABridgeObjectMovingUp(surfaceBelowVeh->GetModelIndex())) { CVehicle *veh = m_pPed->m_pMyVehicle; if (!veh->IsBoat() || veh->m_nDoorLock == CARLOCK_LOCKED_PLAYER_INSIDE) { - - // This condition will always return true, else block was probably WIP Miami code. - if (veh->m_vehType != VEHICLE_TYPE_BIKE || veh->m_nDoorLock == CARLOCK_LOCKED_PLAYER_INSIDE) { - if (veh->GetStatus() != STATUS_WRECKED && veh->GetStatus() != STATUS_TRAIN_MOVING && veh->m_nDoorLock != CARLOCK_LOCKED_PLAYER_INSIDE) { - if (veh->m_vecMoveSpeed.Magnitude() < 0.17f && CTimer::GetTimeScale() >= 0.5f && !veh->bIsInWater) { - m_pPed->SetObjective(OBJECTIVE_LEAVE_CAR, veh); - } + if (veh->GetStatus() != STATUS_WRECKED && veh->GetStatus() != STATUS_TRAIN_MOVING && veh->m_nDoorLock != CARLOCK_LOCKED_PLAYER_INSIDE) { + bool canJumpOff = false; + if (veh->m_vehType == VEHICLE_TYPE_BIKE) { + canJumpOff = veh->CanPedJumpOffBike(); + } else if (veh->pDriver == m_pPed) { + canJumpOff = veh->CanPedJumpOutCar(); } - } else { - CVector sth = 0.7f * veh->GetRight() + veh->GetPosition(); - bool found = false; - float groundZ = CWorld::FindGroundZFor3DCoord(sth.x, sth.y, 2.0f + sth.z, &found); - if (found) - sth.z = 1.0f + groundZ; - m_pPed->m_nPedState = PED_IDLE; - m_pPed->SetMoveState(PEDMOVE_STILL); - CPed::PedSetOutCarCB(0, m_pPed); - CAnimManager::BlendAnimation(m_pPed->GetClump(), m_pPed->m_animGroup, ANIM_IDLE_STANCE, 100.0f); - CAnimManager::BlendAnimation(m_pPed->GetClump(), ASSOCGRP_STD, ANIM_FALL_LAND, 100.0f); - m_pPed->SetPosition(sth); - m_pPed->SetMoveState(PEDMOVE_STILL); - m_pPed->m_vecMoveSpeed = veh->m_vecMoveSpeed; + if (canJumpOff || veh->m_vecMoveSpeed.Magnitude() < 0.1f) { + if (!veh->bIsInWater) + m_pPed->SetObjective(OBJECTIVE_LEAVE_CAR, veh); + + } else if (veh->GetStatus() != STATUS_PLAYER && veh != CGameLogic::pShortCutTaxi) { + veh->AutoPilot.m_nTempAction = TEMPACT_WAIT; + veh->AutoPilot.m_nTimeTempAction = CTimer::GetTimeInMilliseconds() + 1000; + } } } else { - // The code in here was under CPed::SetExitBoat in VC, did the same for here. m_pPed->SetExitBoat(veh); m_pPed->bTryingToReachDryLand = true; } @@ -451,14 +617,10 @@ CPlayerInfo::Process(void) CEntity *surfaceBelow = m_pPed->m_pCurrentPhysSurface; if (surfaceBelow && surfaceBelow->IsVehicle()) { carBelow = (CVehicle*)surfaceBelow; - if (carBelow->IsBoat()) { + if (carBelow->IsBoat() && carBelow->m_modelIndex != MI_SKIMMER) { weAreOnBoat = true; m_pPed->bOnBoat = true; -#ifdef VC_PED_PORTS if (carBelow->GetStatus() != STATUS_WRECKED && carBelow->GetUp().z > 0.3f) -#else - if (carBelow->GetStatus() != STATUS_WRECKED) -#endif m_pPed->SetSeekBoatPosition(carBelow); } } @@ -506,14 +668,15 @@ CPlayerInfo::Process(void) } } } + if (m_bInRemoteMode) { uint32 timeWithoutRemoteCar = CTimer::GetTimeInMilliseconds() - m_nTimeLostRemoteCar; - if (CTimer::GetPreviousTimeInMilliseconds() - m_nTimeLostRemoteCar < 1000 && timeWithoutRemoteCar >= 1000 && m_WBState == WBSTATE_PLAYING) { + if (CTimer::GetPreviousTimeInMilliseconds() - m_nTimeLostRemoteCar < 1000 && timeWithoutRemoteCar >= 1000 && m_WBState == WBSTATE_PLAYING && field_D6) { TheCamera.SetFadeColour(0, 0, 0); TheCamera.Fade(1.0f, 0); } if (timeWithoutRemoteCar > 2000) { - if (m_WBState == WBSTATE_PLAYING) { + if (m_WBState == WBSTATE_PLAYING && field_D6) { TheCamera.RestoreWithJumpCut(); TheCamera.SetFadeColour(0, 0, 0); TheCamera.Fade(1.0f, 1); @@ -525,6 +688,7 @@ CPlayerInfo::Process(void) CTimer::Update(); } m_bInRemoteMode = false; + CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle->bRemoveFromWorld = true; CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle = nil; if (FindPlayerVehicle()) { FindPlayerVehicle()->SetStatus(STATUS_PLAYER); @@ -534,11 +698,10 @@ CPlayerInfo::Process(void) if (!(CTimer::GetFrameCounter() & 31)) { CVehicle *veh = FindPlayerVehicle(); if (veh && m_pPed->bInVehicle && veh->GetUp().z < 0.0f - && veh->m_vecMoveSpeed.Magnitude() < 0.05f && veh->IsCar() && !veh->bIsInWater) { + && veh->m_vecMoveSpeed.Magnitude() < 0.05f && (veh->IsCar() || veh->IsBoat()) && !veh->bIsInWater) { if (veh->GetUp().z < -0.5f) { m_nUpsideDownCounter += 2; - } else { m_nUpsideDownCounter++; } @@ -562,8 +725,74 @@ CPlayerInfo::Process(void) if (veh->pPassengers[i]) veh->pPassengers[i]->m_nZoneLevel = LEVEL_GENERIC; } - CStats::DistanceTravelledInVehicle += veh->m_fDistanceTravelled; + if(veh->m_modelIndex == MI_CADDY) + CStats::DistanceTravelledByGolfCart += veh->m_fDistanceTravelled; + else { + if(veh->GetVehicleAppearance() == VEHICLE_APPEARANCE_HELI) + CStats::DistanceTravelledByHelicoptor += veh->m_fDistanceTravelled; + if (veh->GetVehicleAppearance() == VEHICLE_APPEARANCE_PLANE) + CStats::DistanceTravelledByPlane += veh->m_fDistanceTravelled; + if (veh->GetVehicleAppearance() == VEHICLE_APPEARANCE_CAR) + CStats::DistanceTravelledByCar += veh->m_fDistanceTravelled; + if (veh->GetVehicleAppearance() == VEHICLE_APPEARANCE_BIKE) + CStats::DistanceTravelledByBike += veh->m_fDistanceTravelled; + if (veh->GetVehicleAppearance() == VEHICLE_APPEARANCE_BOAT) + CStats::DistanceTravelledByBoat += veh->m_fDistanceTravelled; + + if (veh->GetVehicleAppearance() == VEHICLE_APPEARANCE_PLANE) { + if (veh->m_vecMoveSpeed.Magnitude() > 0.2f) { + CStats::FlightTime += CTimer::GetTimeStep() * 16.f; // what a weird choice + } + } + } } else { CStats::DistanceTravelledOnFoot += FindPlayerPed()->m_fDistanceTravelled; } + + if (m_pPed->m_pWanted->m_nWantedLevel && !CTheScripts::IsPlayerOnAMission()) { + float maxDelta = 0.0f; + static bool movedSignificantly = true; + static bool thereIsACarPathNear = true; + // there was one more guard without variable's itself??? + + if (CTimer::GetTimeInMilliseconds() / 20000 != CTimer::GetPreviousTimeInMilliseconds() / 20000) { + float posChange = (lastPlayerPos - FindPlayerCoors()).Magnitude(); + movedSignificantly = posChange >= 10.0f; + lastPlayerPos = FindPlayerCoors(); + thereIsACarPathNear = ThePaths.FindNodeClosestToCoors(FindPlayerCoors(), PATH_CAR, 60.0f, true, false, false, false) != 0; + } + switch (m_pPed->m_pWanted->m_nWantedLevel) { + case 1: + maxDelta = 31.f; + break; + case 2: + maxDelta = 62.f; + break; + case 3: + maxDelta = 125.f; + break; + case 4: + maxDelta = 250.f; + break; + case 5: + maxDelta = 500.f; + break; + case 6: + maxDelta = 1000.f; + break; + default: + break; + } + float increaseDelta = maxDelta - m_fMediaAttention; + float increaseAttentionBy = CTimer::GetTimeStep() * 0.0001f * increaseDelta; + if (increaseAttentionBy < 0.0f + || movedSignificantly && thereIsACarPathNear && !CCullZones::NoPolice() && !CCullZones::PoliceAbandonCars() && CGame::currArea == AREA_MAIN_MAP) { + m_fMediaAttention += increaseAttentionBy; + } + } else { + m_fMediaAttention = 0.0f; + } + CStats::HighestChaseValue = Max(m_fMediaAttention, CStats::HighestChaseValue); + m_nMoney = Min(999999999, m_nMoney); + m_nVisibleMoney = Min(999999999, m_nVisibleMoney); } diff --git a/src/core/PlayerInfo.h b/src/core/PlayerInfo.h index 11f51ac0..1a8df47c 100644 --- a/src/core/PlayerInfo.h +++ b/src/core/PlayerInfo.h @@ -45,19 +45,33 @@ public: int8 m_WBState; // eWastedBustedState uint32 m_nWBTime; bool m_bInRemoteMode; + bool field_D5; + bool field_D6; uint32 m_nTimeLostRemoteCar; uint32 m_nTimeLastHealthLoss; uint32 m_nTimeLastArmourLoss; uint32 m_nTimeTankShotGun; - int32 m_nTimeNotFullyOnGround; int32 m_nUpsideDownCounter; - int32 field_248; + int32 field_EC; + int32 m_nTimeCarSpentOnTwoWheels; + int32 m_nDistanceCarTravelledOnTwoWheels; + int32 m_nTimeNotFullyOnGround; + int32 m_nTimeSpentOnWheelie; + float m_nDistanceTravelledOnWheelie; + int32 m_nTimeSpentOnStoppie; + float m_nDistanceTravelledOnStoppie; + int32 m_nCancelWheelStuntTimer; + int32 m_nPrevTimeCarSpentOnTwoWheels; + int32 m_nPrevDistanceCarTravelledOnTwoWheels; + int32 m_nPrevTimeSpentOnWheelie; + int32 m_nPrevDistanceTravelledOnWheelie; + int32 m_nPrevTimeSpentOnStoppie; + int32 m_nPrevDistanceTravelledOnStoppie; int16 m_nTrafficMultiplier; + int16 field_12A; float m_fRoadDensity; uint32 m_nPreviousTimeRewardedForExplosion; - int32 m_nExplosionsSinceLastReward; - int32 field_268; - int32 field_272; + uint32 m_nExplosionsSinceLastReward; uint32 m_nHavocLevel; float m_fMediaAttention; bool m_bInfiniteSprint; @@ -76,7 +90,6 @@ public: void MakePlayerSafe(bool); void LoadPlayerSkin(); void DeletePlayerSkin(); - void AwardMoneyForExplosion(CVehicle *vehicle); void SetPlayerSkin(char* skin); const CVector &GetPos(); void Process(void); diff --git a/src/core/Radar.h b/src/core/Radar.h index a36faaea..100da8f3 100644 --- a/src/core/Radar.h +++ b/src/core/Radar.h @@ -19,7 +19,7 @@ #define COORDBLIP_MARKER_COLOR_R 252 #define COORDBLIP_MARKER_COLOR_G 138 #define COORDBLIP_MARKER_COLOR_B 242 -#define COORDBLIP_MARKER_COLOR_A 255 +#define COORDBLIP_MARKER_COLOR_A 228 #define NUM_MAP_LEGENDS 75 diff --git a/src/core/Stats.cpp b/src/core/Stats.cpp index 29087b34..d5c08e4f 100644 --- a/src/core/Stats.cpp +++ b/src/core/Stats.cpp @@ -3,12 +3,14 @@ #include "Stats.h" #include "Text.h" #include "World.h" +#include "Pad.h" #include -//TODO int32 CStats::SeagullsKilled; - +int32 CStats::BoatsExploded; +int32 CStats::WantedStarsAttained; +int32 CStats::WantedStarsEvaded; int32 CStats::DaysPassed; int32 CStats::HeadsPopped; int32 CStats::CommercialPassed; @@ -21,8 +23,25 @@ int32 CStats::PedsKilledOfThisType[NUM_PEDTYPES]; int32 CStats::TimesDied; int32 CStats::TimesArrested; int32 CStats::KillsSinceLastCheckpoint; -float CStats::DistanceTravelledInVehicle; +float CStats::DistanceTravelledByCar; +float CStats::DistanceTravelledByHelicoptor; +float CStats::DistanceTravelledByBike; +float CStats::DistanceTravelledByBoat; +float CStats::DistanceTravelledByPlane; +float CStats::DistanceTravelledByGolfCart; float CStats::DistanceTravelledOnFoot; +int32 CStats::FlightTime; +int32 CStats::TimesDrowned; +int32 CStats::PhotosTaken; +float CStats::LoanSharks; +float CStats::StoresKnockedOff; +float CStats::MovieStunts; +float CStats::Assassinations; +float CStats::PizzasDelivered; +float CStats::GarbagePickups; +float CStats::IceCreamSold; +float CStats::TopShootingRangeScore; +float CStats::ShootingRank; int32 CStats::ProgressMade; int32 CStats::TotalProgressInGame; int32 CStats::CarsExploded; @@ -40,95 +59,153 @@ int32 CStats::MissionsGiven; int32 CStats::MissionsPassed; char CStats::LastMissionPassedName[8]; int32 CStats::TotalLegitimateKills; -int32 CStats::ElBurroTime; -int32 CStats::Record4x4One; -int32 CStats::Record4x4Two; -int32 CStats::Record4x4Three; -int32 CStats::Record4x4Mayhem; int32 CStats::LivesSavedWithAmbulance; int32 CStats::CriminalsCaught; int32 CStats::HighestLevelAmbulanceMission; +int32 CStats::HighestLevelVigilanteMission; +int32 CStats::HighestLevelFireMission; int32 CStats::FiresExtinguished; -int32 CStats::TimeTakenDefuseMission; int32 CStats::TotalNumberKillFrenzies; int32 CStats::TotalNumberMissions; int32 CStats::RoundsFiredByPlayer; int32 CStats::KgsOfExplosivesUsed; -int32 CStats::InstantHitsFiredByPlayer; -int32 CStats::InstantHitsHitByPlayer; +int32 CStats::BulletsThatHit; int32 CStats::BestTimeBombDefusal; int32 CStats::FastestTimes[CStats::TOTAL_FASTEST_TIMES]; int32 CStats::HighestScores[CStats::TOTAL_HIGHEST_SCORES]; int32 CStats::BestPositions[CStats::TOTAL_BEST_POSITIONS]; +bool CStats::PropertyOwned[CStats::TOTAL_PROPERTIES]; +int32 CStats::NumPropertyOwned; int32 CStats::PropertyDestroyed; +float CStats::HighestChaseValue; +int32 CStats::CheatedCount; +int32 CStats::ShowChaseStatOnScreen; int32 CStats::PamphletMissionPassed; +bool CStats::abSonyCDs[1]; +int32 CStats::BloodRingKills; +int32 CStats::BloodRingTime; +float CStats::FavoriteRadioStationList[NUM_RADIOS]; int32 CStats::Sprayings; float CStats::AutoPaintingBudget; int32 CStats::NoMoreHurricanes; float CStats::FashionBudget; +float CStats::PropertyBudget; +float CStats::WeaponBudget; int32 CStats::SafeHouseVisits; int32 CStats::TyresPopped; +int32 CStats::LongestWheelie; +int32 CStats::LongestStoppie; +int32 CStats::Longest2Wheel; +float CStats::LongestWheelieDist; +float CStats::LongestStoppieDist; +float CStats::Longest2WheelDist; + +// --MIAMI: functions below are done except TODOs, but there are some to be moved from Frontend + void CStats::Init() { PeopleKilledByOthers = 0; PeopleKilledByPlayer = 0; - RoundsFiredByPlayer = 0; CarsExploded = 0; + BoatsExploded = 0; + RoundsFiredByPlayer = 0; + for (int i = 0; i < NUM_PEDTYPES; i++) + PedsKilledOfThisType[i] = 0; HelisDestroyed = 0; ProgressMade = 0; KgsOfExplosivesUsed = 0; - InstantHitsFiredByPlayer = 0; - InstantHitsHitByPlayer = 0; + BulletsThatHit = 0; + TyresPopped = 0; HeadsPopped = 0; + WantedStarsAttained = 0; + WantedStarsEvaded = 0; TimesArrested = 0; TimesDied = 0; DaysPassed = 0; - NumberOfUniqueJumpsFound = 0; - MaximumJumpFlips = 0; - MaximumJumpSpins = 0; + SafeHouseVisits = 0; + Sprayings = 0; MaximumJumpDistance = 0; MaximumJumpHeight = 0; + MaximumJumpFlips = 0; + MaximumJumpSpins = 0; BestStuntJump = 0; + NumberOfUniqueJumpsFound = 0; TotalNumberOfUniqueJumps = 0; - Record4x4One = 0; - Record4x4Two = 0; - PassengersDroppedOffWithTaxi = 0; - Record4x4Three = 0; - MoneyMadeWithTaxi = 0; - Record4x4Mayhem = 0; - LivesSavedWithAmbulance = 0; - ElBurroTime = 0; - CriminalsCaught = 0; MissionsGiven = 0; - HighestLevelAmbulanceMission = 0; MissionsPassed = 0; - FiresExtinguished = 0; + PassengersDroppedOffWithTaxi = 0; + MoneyMadeWithTaxi = 0; DistanceTravelledOnFoot = 0; - TimeTakenDefuseMission = 0; + DistanceTravelledByCar = 0; + DistanceTravelledByBike = 0; + DistanceTravelledByBoat = 0; + DistanceTravelledByGolfCart = 0; + DistanceTravelledByHelicoptor = 0; + DistanceTravelledByPlane = 0; // FIX: Wasn't initialized + LivesSavedWithAmbulance = 0; + CriminalsCaught = 0; + HighestLevelVigilanteMission = 0; + HighestLevelAmbulanceMission = 0; + HighestLevelFireMission = 0; + FiresExtinguished = 0; + PhotosTaken = 0; NumberKillFrenziesPassed = 0; - DistanceTravelledInVehicle = 0; TotalNumberKillFrenzies = 0; TotalNumberMissions = 0; - KillsSinceLastCheckpoint = 0; - TotalLegitimateKills = 0; + FlightTime = 0; + TimesDrowned = 0; + SeagullsKilled = 0; + WeaponBudget = 0.0f; + FashionBudget = 0.0f; + LoanSharks = 0.0f; + StoresKnockedOff = 0.0f; + MovieStunts = 0.0f; + Assassinations = 0.0f; + PizzasDelivered = 0.0f; + GarbagePickups = 0.0f; + IceCreamSold = 0.0f; + TopShootingRangeScore = 0.0f; + ShootingRank = 0.0f; + LongestWheelie = 0; + LongestStoppie = 0; + Longest2Wheel = 0; + LongestWheelieDist = 0.0f; + LongestStoppieDist = 0.0f; + Longest2WheelDist = 0.0f; + PropertyBudget = 0.0f; + AutoPaintingBudget = 0.0f; + PropertyDestroyed = 0; + HighestChaseValue = 0.0f; + CheatedCount = 0; + for (int i = 0; i < TOTAL_FASTEST_TIMES; i++) FastestTimes[i] = 0; for (int i = 0; i < TOTAL_HIGHEST_SCORES; i++) HighestScores[i] = 0; for (int i = 0; i < TOTAL_BEST_POSITIONS; i++) BestPositions[i] = INT_MAX; - for (int i = 0; i < NUM_PEDTYPES; i++) - PedsKilledOfThisType[i] = 0; + + KillsSinceLastCheckpoint = 0; + TotalLegitimateKills = 0; IndustrialPassed = 0; CommercialPassed = 0; SuburbanPassed = 0; - - Sprayings = 0; - AutoPaintingBudget = 0.0f; + PamphletMissionPassed = 0; NoMoreHurricanes = 0; - SafeHouseVisits = 0; + ShowChaseStatOnScreen = 0; + abSonyCDs[0] = 0; + // TODO(Miami): Change this with PopulateFavoriteRadioStationList(); !! + for (int i = 0; i < NUM_RADIOS; i++) + FavoriteRadioStationList[i] = 0.0f; + + NumPropertyOwned = 0; + for (int i = 0; i < TOTAL_PROPERTIES; i++) + PropertyOwned[i] = false; + + BloodRingKills = 0; + BloodRingTime = 0; } void CStats::RegisterFastestTime(int32 index, int32 time) @@ -152,31 +229,6 @@ void CStats::RegisterBestPosition(int32 index, int32 position) BestPositions[index] = Min(BestPositions[index], position); } -void CStats::RegisterElBurroTime(int32 time) -{ - ElBurroTime = (ElBurroTime && ElBurroTime < time) ? ElBurroTime : time; -} - -void CStats::Register4x4OneTime(int32 time) -{ - Record4x4One = (Record4x4One && Record4x4One < time) ? Record4x4One : time; -} - -void CStats::Register4x4TwoTime(int32 time) -{ - Record4x4Two = (Record4x4Two && Record4x4Two < time) ? Record4x4Two : time; -} - -void CStats::Register4x4ThreeTime(int32 time) -{ - Record4x4Three = (Record4x4Three && Record4x4Three < time) ? Record4x4Three : time; -} - -void CStats::Register4x4MayhemTime(int32 time) -{ - Record4x4Mayhem = (Record4x4Mayhem && Record4x4Mayhem < time) ? Record4x4Mayhem : time; -} - void CStats::AnotherLifeSavedWithAmbulance() { ++LivesSavedWithAmbulance; @@ -192,16 +244,21 @@ void CStats::RegisterLevelAmbulanceMission(int32 level) HighestLevelAmbulanceMission = Max(HighestLevelAmbulanceMission, level); } +void CStats::RegisterLevelVigilanteMission(int32 level) +{ + HighestLevelVigilanteMission = Max(HighestLevelVigilanteMission, level); +} + +void CStats::RegisterLevelFireMission(int32 level) +{ + HighestLevelFireMission = Max(HighestLevelFireMission, level); +} + void CStats::AnotherFireExtinguished() { ++FiresExtinguished; } -void CStats::RegisterTimeTakenDefuseMission(int32 time) -{ - TimeTakenDefuseMission = (TimeTakenDefuseMission && TimeTakenDefuseMission < time) ? TimeTakenDefuseMission : time; -} - void CStats::AnotherKillFrenzyPassed() { ++NumberKillFrenziesPassed; @@ -221,40 +278,88 @@ wchar *CStats::FindCriminalRatingString() { int rating = FindCriminalRatingNumber(); - if (rating < 10) return TheText.Get("RATNG1"); - if (rating < 25) return TheText.Get("RATNG2"); - if (rating < 70) return TheText.Get("RATNG3"); - if (rating < 150) return TheText.Get("RATNG4"); - if (rating < 250) return TheText.Get("RATNG5"); - if (rating < 450) return TheText.Get("RATNG6"); - if (rating < 700) return TheText.Get("RATNG7"); - if (rating < 1000) return TheText.Get("RATNG8"); - if (rating < 1400) return TheText.Get("RATNG9"); - if (rating < 1900) return TheText.Get("RATNG10"); - if (rating < 2500) return TheText.Get("RATNG11"); - if (rating < 3200) return TheText.Get("RATNG12"); - if (rating < 4000) return TheText.Get("RATNG13"); - if (rating < 5000) return TheText.Get("RATNG14"); - return TheText.Get("RATNG15"); + if (rating < 0) { + if (rating > -500) return TheText.Get("RATNG53"); + if (rating > -2000) return TheText.Get("RATNG54"); + if (rating > -4000) return TheText.Get("RATNG55"); + if (rating > -6000) return TheText.Get("RATNG56"); + return TheText.Get("RATNG57"); + } + if (rating < 20) return TheText.Get("RATNG1"); + if (rating < 50) return TheText.Get("RATNG2"); + if (rating < 75) return TheText.Get("RATNG3"); + if (rating < 100) return TheText.Get("RATNG4"); + if (rating < 120) return TheText.Get("RATNG5"); + if (rating < 150) return TheText.Get("RATNG6"); + if (rating < 200) return TheText.Get("RATNG7"); + if (rating < 240) return TheText.Get("RATNG8"); + if (rating < 270) return TheText.Get("RATNG9"); + if (rating < 300) return TheText.Get("RATNG10"); + if (rating < 335) return TheText.Get("RATNG11"); + if (rating < 370) return TheText.Get("RATNG12"); + if (rating < 400) return TheText.Get("RATNG13"); + if (rating < 450) return TheText.Get("RATNG14"); + if (rating < 500) return TheText.Get("RATNG15"); + if (rating < 550) return TheText.Get("RATNG16"); + if (rating < 600) return TheText.Get("RATNG17"); + if (rating < 610) return TheText.Get("RATNG18"); + if (rating < 650) return TheText.Get("RATNG19"); + if (rating < 700) return TheText.Get("RATNG20"); + if (rating < 850) return TheText.Get("RATNG21"); + if (rating < 1000) return TheText.Get("RATNG22"); + if (rating < 1005) return TheText.Get("RATNG23"); + if (rating < 1150) return TheText.Get("RATNG24"); + if (rating < 1300) return TheText.Get(TimesArrested > 0 ? "RATNG25" : "RATNG24"); + if (rating < 1500) return TheText.Get("RATNG26"); + if (rating < 1700) return TheText.Get("RATNG27"); + if (rating < 2000) return TheText.Get("RATNG28"); + if (rating < 2100) return TheText.Get("RATNG29"); + if (rating < 2300) return TheText.Get("RATNG30"); + if (rating < 2500) return TheText.Get("RATNG31"); + if (rating < 2750) return TheText.Get("RATNG32"); + if (rating < 3000) return TheText.Get("RATNG33"); + if (rating < 3500) return TheText.Get("RATNG34"); + if (rating < 4000) return TheText.Get("RATNG35"); + if (rating < 5000) return TheText.Get("RATNG36"); + if (rating < 7500) return TheText.Get("RATNG37"); + if (rating < 10000) return TheText.Get("RATNG38"); + if (rating < 20000) return TheText.Get("RATNG39"); + if (rating < 30000) return TheText.Get("RATNG40"); + if (rating < 40000) return TheText.Get("RATNG41"); + if (rating < 50000) return TheText.Get("RATNG42"); + if (rating < 65000) return TheText.Get("RATNG43"); + if (rating < 80000) return TheText.Get("RATNG44"); + if (rating < 100000) return TheText.Get("RATNG45"); + if (rating < 150000) return TheText.Get("RATNG46"); + if (rating < 200000) return TheText.Get("RATNG47"); + if (rating < 300000) return TheText.Get("RATNG48"); + if (rating < 375000) return TheText.Get("RATNG49"); + if (rating < 500000) return TheText.Get(FlightTime / 60000 / 60 > 10 ? "RATNG50" : "RATNG49"); + if (rating < 1000000) return TheText.Get("RATNG51"); + return TheText.Get(CWorld::Players[CWorld::PlayerInFocus].m_nVisibleMoney > 10000000 ? "RATNG52" : "RATNG51"); } int32 CStats::FindCriminalRatingNumber() { int32 rating; - rating = FiresExtinguished + 10 * HighestLevelAmbulanceMission + CriminalsCaught + LivesSavedWithAmbulance + rating = FiresExtinguished + 10 * HighestLevelFireMission + 10 * HighestLevelAmbulanceMission + + CriminalsCaught + LivesSavedWithAmbulance + 30 * HelisDestroyed + TotalLegitimateKills - 3 * TimesArrested - 3 * TimesDied + CWorld::Players[CWorld::PlayerInFocus].m_nMoney / 5000; - if (rating <= 0) rating = 0; + if (CPad::bHasPlayerCheated || CheatedCount > 0) { + rating -= CheatedCount; + if (rating <= -10000) + rating = -10000; - if (InstantHitsFiredByPlayer > 100) - rating += (float)CStats::InstantHitsHitByPlayer / (float)CStats::InstantHitsFiredByPlayer * 500.0f; + } else if (rating <= 0) { + rating = 0; + } + + if (RoundsFiredByPlayer > 100) + rating += (float)CStats::BulletsThatHit / (float)CStats::RoundsFiredByPlayer * 500.0f; if (TotalProgressInGame) rating += (float)CStats::ProgressMade / (float)CStats::TotalProgressInGame * 1000.0f; - if (!IndustrialPassed && rating >= 3521) - rating = 3521; - if (!CommercialPassed && rating >= 4552) - rating = 4552; return rating; } @@ -266,11 +371,80 @@ float CStats::GetPercentageProgress() return Min(percentCompleted, 100.0f); } +void CStats::MoneySpentOnWeapons(int32 money) +{ + WeaponBudget += money; +} + +void CStats::MoneySpentOnProperty(int32 money) +{ + PropertyBudget += money; +} + +void CStats::MoneySpentOnAutoPainting(int32 money) +{ + AutoPaintingBudget += money; +} + void CStats::MoneySpentOnFashion(int32 money) { FashionBudget += money; } +void CStats::NumOfVisitsFromLoanSharks(int32 num) +{ + LoanSharks += num; +} + +void CStats::NumOfStoresKnockedOff(int32 num) +{ + StoresKnockedOff += num; +} + +void CStats::NumOfMovieStunts(int32 num) +{ + MovieStunts += num; +} + +void CStats::NumOfAssassinations(int32 num) +{ + Assassinations += num; +} + +void CStats::NumOfPizzasDelivered(int32 num) +{ + PizzasDelivered += num; +} + +void CStats::NumOfGarbagePickups(int32 num) +{ + GarbagePickups += num; +} + +void CStats::NumOfIceCreamSold(int32 num) +{ + IceCreamSold += num; +} + +void CStats::AddNumBloodRingKills(int32 num) +{ + BloodRingKills += num; +} + +void CStats::LongestTimeInBloodRing(int32 time) +{ + if (BloodRingTime < time) + BloodRingTime = time; +} + +void CStats::AddPropertyAsOwned(int32 id) +{ + if (!PropertyOwned[id]) { + PropertyOwned[id] = true; + ++NumPropertyOwned; + } +} + void CStats::SaveStats(uint8 *buf, uint32 *size) { CheckPointReachedSuccessfully(); @@ -278,18 +452,23 @@ void CStats::SaveStats(uint8 *buf, uint32 *size) *size = sizeof(PeopleKilledByPlayer) + sizeof(PeopleKilledByOthers) + sizeof(CarsExploded) + + sizeof(BoatsExploded) + + sizeof(TyresPopped) + sizeof(RoundsFiredByPlayer) + sizeof(PedsKilledOfThisType) + sizeof(HelisDestroyed) + sizeof(ProgressMade) + sizeof(TotalProgressInGame) + sizeof(KgsOfExplosivesUsed) + - sizeof(InstantHitsFiredByPlayer) + - sizeof(InstantHitsHitByPlayer) + + sizeof(BulletsThatHit) + sizeof(HeadsPopped) + + sizeof(WantedStarsAttained) + + sizeof(WantedStarsEvaded) + sizeof(TimesArrested) + sizeof(TimesDied) + sizeof(DaysPassed) + + sizeof(SafeHouseVisits) + + sizeof(Sprayings) + sizeof(MaximumJumpDistance) + sizeof(MaximumJumpHeight) + sizeof(MaximumJumpFlips) + @@ -298,50 +477,88 @@ void CStats::SaveStats(uint8 *buf, uint32 *size) sizeof(NumberOfUniqueJumpsFound) + sizeof(TotalNumberOfUniqueJumps) + sizeof(MissionsGiven) + - sizeof(MissionsPassed) + sizeof(PassengersDroppedOffWithTaxi) + sizeof(MoneyMadeWithTaxi) + sizeof(IndustrialPassed) + sizeof(CommercialPassed) + sizeof(SuburbanPassed) + - sizeof(ElBurroTime) + + sizeof(PamphletMissionPassed) + + sizeof(NoMoreHurricanes) + sizeof(DistanceTravelledOnFoot) + - sizeof(DistanceTravelledInVehicle) + - sizeof(Record4x4One) + - sizeof(Record4x4Two) + - sizeof(Record4x4Three) + - sizeof(Record4x4Mayhem) + + sizeof(DistanceTravelledByCar) + + sizeof(DistanceTravelledByBike) + + sizeof(DistanceTravelledByBoat) + + sizeof(DistanceTravelledByGolfCart) + + sizeof(DistanceTravelledByHelicoptor) + + sizeof(DistanceTravelledByPlane) + sizeof(LivesSavedWithAmbulance) + sizeof(CriminalsCaught) + - sizeof(HighestLevelAmbulanceMission) + sizeof(FiresExtinguished) + - sizeof(TimeTakenDefuseMission) + + sizeof(HighestLevelVigilanteMission) + + sizeof(HighestLevelAmbulanceMission) + + sizeof(HighestLevelFireMission) + + sizeof(PhotosTaken) + sizeof(NumberKillFrenziesPassed) + sizeof(TotalNumberKillFrenzies) + sizeof(TotalNumberMissions) + + sizeof(FlightTime) + + sizeof(TimesDrowned) + + sizeof(SeagullsKilled) + + sizeof(WeaponBudget) + + sizeof(FashionBudget) + + sizeof(LoanSharks) + + sizeof(StoresKnockedOff) + + sizeof(MovieStunts) + + sizeof(Assassinations) + + sizeof(PizzasDelivered) + + sizeof(GarbagePickups) + + sizeof(IceCreamSold) + + sizeof(TopShootingRangeScore) + + sizeof(ShootingRank) + + sizeof(LongestWheelie) + + sizeof(LongestStoppie) + + sizeof(Longest2Wheel) + + sizeof(LongestWheelieDist) + + sizeof(LongestStoppieDist) + + sizeof(Longest2WheelDist) + + sizeof(PropertyBudget) + + sizeof(AutoPaintingBudget) + + sizeof(PropertyDestroyed) + + sizeof(NumPropertyOwned) + + sizeof(BloodRingKills) + + sizeof(BloodRingTime) + + sizeof(PropertyOwned) + + sizeof(HighestChaseValue) + sizeof(FastestTimes) + sizeof(HighestScores) + sizeof(BestPositions) + sizeof(KillsSinceLastCheckpoint) + sizeof(TotalLegitimateKills) + - sizeof(LastMissionPassedName); + sizeof(LastMissionPassedName) + + sizeof(CheatedCount) + + sizeof(FavoriteRadioStationList); #define CopyToBuf(buf, data) memcpy(buf, &data, sizeof(data)); buf += sizeof(data); CopyToBuf(buf, PeopleKilledByPlayer); CopyToBuf(buf, PeopleKilledByOthers); CopyToBuf(buf, CarsExploded); + CopyToBuf(buf, BoatsExploded); + CopyToBuf(buf, TyresPopped); CopyToBuf(buf, RoundsFiredByPlayer); CopyToBuf(buf, PedsKilledOfThisType); CopyToBuf(buf, HelisDestroyed); CopyToBuf(buf, ProgressMade); CopyToBuf(buf, TotalProgressInGame); CopyToBuf(buf, KgsOfExplosivesUsed); - CopyToBuf(buf, InstantHitsFiredByPlayer); - CopyToBuf(buf, InstantHitsHitByPlayer); + CopyToBuf(buf, BulletsThatHit); CopyToBuf(buf, HeadsPopped); + CopyToBuf(buf, WantedStarsAttained); + CopyToBuf(buf, WantedStarsEvaded); CopyToBuf(buf, TimesArrested); CopyToBuf(buf, TimesDied); CopyToBuf(buf, DaysPassed); + CopyToBuf(buf, SafeHouseVisits); + CopyToBuf(buf, Sprayings); CopyToBuf(buf, MaximumJumpDistance); CopyToBuf(buf, MaximumJumpHeight); CopyToBuf(buf, MaximumJumpFlips); @@ -350,33 +567,67 @@ void CStats::SaveStats(uint8 *buf, uint32 *size) CopyToBuf(buf, NumberOfUniqueJumpsFound); CopyToBuf(buf, TotalNumberOfUniqueJumps); CopyToBuf(buf, MissionsGiven); - CopyToBuf(buf, MissionsPassed); CopyToBuf(buf, PassengersDroppedOffWithTaxi); CopyToBuf(buf, MoneyMadeWithTaxi); CopyToBuf(buf, IndustrialPassed); CopyToBuf(buf, CommercialPassed); CopyToBuf(buf, SuburbanPassed); - CopyToBuf(buf, ElBurroTime); + CopyToBuf(buf, PamphletMissionPassed); + CopyToBuf(buf, NoMoreHurricanes); CopyToBuf(buf, DistanceTravelledOnFoot); - CopyToBuf(buf, DistanceTravelledInVehicle); - CopyToBuf(buf, Record4x4One); - CopyToBuf(buf, Record4x4Two); - CopyToBuf(buf, Record4x4Three); - CopyToBuf(buf, Record4x4Mayhem); + CopyToBuf(buf, DistanceTravelledByCar); + CopyToBuf(buf, DistanceTravelledByBike); + CopyToBuf(buf, DistanceTravelledByBoat); + CopyToBuf(buf, DistanceTravelledByGolfCart); + CopyToBuf(buf, DistanceTravelledByHelicoptor); + CopyToBuf(buf, DistanceTravelledByPlane); CopyToBuf(buf, LivesSavedWithAmbulance); CopyToBuf(buf, CriminalsCaught); - CopyToBuf(buf, HighestLevelAmbulanceMission); CopyToBuf(buf, FiresExtinguished); - CopyToBuf(buf, TimeTakenDefuseMission); + CopyToBuf(buf, HighestLevelVigilanteMission); + CopyToBuf(buf, HighestLevelAmbulanceMission); + CopyToBuf(buf, HighestLevelFireMission); + CopyToBuf(buf, PhotosTaken); CopyToBuf(buf, NumberKillFrenziesPassed); CopyToBuf(buf, TotalNumberKillFrenzies); CopyToBuf(buf, TotalNumberMissions); + CopyToBuf(buf, FlightTime); + CopyToBuf(buf, TimesDrowned); + CopyToBuf(buf, SeagullsKilled); + CopyToBuf(buf, WeaponBudget); + CopyToBuf(buf, FashionBudget); + CopyToBuf(buf, LoanSharks); + CopyToBuf(buf, StoresKnockedOff); + CopyToBuf(buf, MovieStunts); + CopyToBuf(buf, Assassinations); + CopyToBuf(buf, PizzasDelivered); + CopyToBuf(buf, GarbagePickups); + CopyToBuf(buf, IceCreamSold); + CopyToBuf(buf, TopShootingRangeScore); + CopyToBuf(buf, ShootingRank); + CopyToBuf(buf, LongestWheelie); + CopyToBuf(buf, LongestStoppie); + CopyToBuf(buf, Longest2Wheel); + CopyToBuf(buf, LongestWheelieDist); + CopyToBuf(buf, LongestStoppieDist); + CopyToBuf(buf, Longest2WheelDist); + CopyToBuf(buf, PropertyBudget); + CopyToBuf(buf, AutoPaintingBudget); + CopyToBuf(buf, PropertyDestroyed); + CopyToBuf(buf, NumPropertyOwned); + CopyToBuf(buf, BloodRingKills); + CopyToBuf(buf, BloodRingTime); + CopyToBuf(buf, PropertyOwned); + CopyToBuf(buf, HighestChaseValue); CopyToBuf(buf, FastestTimes); CopyToBuf(buf, HighestScores); CopyToBuf(buf, BestPositions); CopyToBuf(buf, KillsSinceLastCheckpoint); CopyToBuf(buf, TotalLegitimateKills); CopyToBuf(buf, LastMissionPassedName); + CopyToBuf(buf, CheatedCount); + // TODO(Miami): Set favourite radio stations!! + CopyToBuf(buf, FavoriteRadioStationList); assert(buf - buf_start == *size); #undef CopyToBuf @@ -391,18 +642,23 @@ void CStats::LoadStats(uint8 *buf, uint32 size) CopyFromBuf(buf, PeopleKilledByPlayer); CopyFromBuf(buf, PeopleKilledByOthers); CopyFromBuf(buf, CarsExploded); + CopyFromBuf(buf, BoatsExploded); + CopyFromBuf(buf, TyresPopped); CopyFromBuf(buf, RoundsFiredByPlayer); CopyFromBuf(buf, PedsKilledOfThisType); CopyFromBuf(buf, HelisDestroyed); CopyFromBuf(buf, ProgressMade); CopyFromBuf(buf, TotalProgressInGame); CopyFromBuf(buf, KgsOfExplosivesUsed); - CopyFromBuf(buf, InstantHitsFiredByPlayer); - CopyFromBuf(buf, InstantHitsHitByPlayer); + CopyFromBuf(buf, BulletsThatHit); CopyFromBuf(buf, HeadsPopped); + CopyFromBuf(buf, WantedStarsAttained); + CopyFromBuf(buf, WantedStarsEvaded); CopyFromBuf(buf, TimesArrested); CopyFromBuf(buf, TimesDied); CopyFromBuf(buf, DaysPassed); + CopyFromBuf(buf, SafeHouseVisits); + CopyFromBuf(buf, Sprayings); CopyFromBuf(buf, MaximumJumpDistance); CopyFromBuf(buf, MaximumJumpHeight); CopyFromBuf(buf, MaximumJumpFlips); @@ -411,33 +667,66 @@ void CStats::LoadStats(uint8 *buf, uint32 size) CopyFromBuf(buf, NumberOfUniqueJumpsFound); CopyFromBuf(buf, TotalNumberOfUniqueJumps); CopyFromBuf(buf, MissionsGiven); - CopyFromBuf(buf, MissionsPassed); CopyFromBuf(buf, PassengersDroppedOffWithTaxi); CopyFromBuf(buf, MoneyMadeWithTaxi); CopyFromBuf(buf, IndustrialPassed); CopyFromBuf(buf, CommercialPassed); CopyFromBuf(buf, SuburbanPassed); - CopyFromBuf(buf, ElBurroTime); + CopyFromBuf(buf, PamphletMissionPassed); + CopyFromBuf(buf, NoMoreHurricanes); CopyFromBuf(buf, DistanceTravelledOnFoot); - CopyFromBuf(buf, DistanceTravelledInVehicle); - CopyFromBuf(buf, Record4x4One); - CopyFromBuf(buf, Record4x4Two); - CopyFromBuf(buf, Record4x4Three); - CopyFromBuf(buf, Record4x4Mayhem); + CopyFromBuf(buf, DistanceTravelledByCar); + CopyFromBuf(buf, DistanceTravelledByBike); + CopyFromBuf(buf, DistanceTravelledByBoat); + CopyFromBuf(buf, DistanceTravelledByGolfCart); + CopyFromBuf(buf, DistanceTravelledByHelicoptor); + CopyFromBuf(buf, DistanceTravelledByPlane); CopyFromBuf(buf, LivesSavedWithAmbulance); CopyFromBuf(buf, CriminalsCaught); - CopyFromBuf(buf, HighestLevelAmbulanceMission); CopyFromBuf(buf, FiresExtinguished); - CopyFromBuf(buf, TimeTakenDefuseMission); + CopyFromBuf(buf, HighestLevelVigilanteMission); + CopyFromBuf(buf, HighestLevelAmbulanceMission); + CopyFromBuf(buf, HighestLevelFireMission); + CopyFromBuf(buf, PhotosTaken); CopyFromBuf(buf, NumberKillFrenziesPassed); CopyFromBuf(buf, TotalNumberKillFrenzies); CopyFromBuf(buf, TotalNumberMissions); + CopyFromBuf(buf, FlightTime); + CopyFromBuf(buf, TimesDrowned); + CopyFromBuf(buf, SeagullsKilled); + CopyFromBuf(buf, WeaponBudget); + CopyFromBuf(buf, FashionBudget); + CopyFromBuf(buf, LoanSharks); + CopyFromBuf(buf, StoresKnockedOff); + CopyFromBuf(buf, MovieStunts); + CopyFromBuf(buf, Assassinations); + CopyFromBuf(buf, PizzasDelivered); + CopyFromBuf(buf, GarbagePickups); + CopyFromBuf(buf, IceCreamSold); + CopyFromBuf(buf, TopShootingRangeScore); + CopyFromBuf(buf, ShootingRank); + CopyFromBuf(buf, LongestWheelie); + CopyFromBuf(buf, LongestStoppie); + CopyFromBuf(buf, Longest2Wheel); + CopyFromBuf(buf, LongestWheelieDist); + CopyFromBuf(buf, LongestStoppieDist); + CopyFromBuf(buf, Longest2WheelDist); + CopyFromBuf(buf, PropertyBudget); + CopyFromBuf(buf, AutoPaintingBudget); + CopyFromBuf(buf, PropertyDestroyed); + CopyFromBuf(buf, NumPropertyOwned); + CopyFromBuf(buf, BloodRingKills); + CopyFromBuf(buf, BloodRingTime); + CopyFromBuf(buf, PropertyOwned); + CopyFromBuf(buf, HighestChaseValue); CopyFromBuf(buf, FastestTimes); CopyFromBuf(buf, HighestScores); CopyFromBuf(buf, BestPositions); CopyFromBuf(buf, KillsSinceLastCheckpoint); CopyFromBuf(buf, TotalLegitimateKills); CopyFromBuf(buf, LastMissionPassedName); + CopyFromBuf(buf, CheatedCount); + CopyFromBuf(buf, FavoriteRadioStationList); assert(buf - buf_start == size); #undef CopyFromBuf diff --git a/src/core/Stats.h b/src/core/Stats.h index e6b8df6a..f9ad4174 100644 --- a/src/core/Stats.h +++ b/src/core/Stats.h @@ -1,6 +1,7 @@ #pragma once #include "PedType.h" +#include "audio_enums.h" class CStats { @@ -8,11 +9,10 @@ public: enum { TOTAL_FASTEST_TIMES = 23, TOTAL_HIGHEST_SCORES = 5, - TOTAL_BEST_POSITIONS = 1 + TOTAL_BEST_POSITIONS = 1, + TOTAL_PROPERTIES = 15 }; - //TODO static int32 SeagullsKilled; - static int32 DaysPassed; static int32 HeadsPopped; static int32 CommercialPassed; @@ -25,9 +25,29 @@ public: static int32 TimesDied; static int32 TimesArrested; static int32 KillsSinceLastCheckpoint; - static float DistanceTravelledInVehicle; + static float DistanceTravelledByCar; + static float DistanceTravelledByHelicoptor; + static float DistanceTravelledByBike; + static float DistanceTravelledByBoat; + static float DistanceTravelledByPlane; + static float DistanceTravelledByGolfCart; static float DistanceTravelledOnFoot; + static int32 FlightTime; + static int32 TimesDrowned; + static int32 PhotosTaken; + static float LoanSharks; + static float StoresKnockedOff; + static float MovieStunts; + static float Assassinations; + static float PizzasDelivered; + static float GarbagePickups; + static float IceCreamSold; + static float TopShootingRangeScore; + static float ShootingRank; static int32 CarsExploded; + static int32 BoatsExploded; + static int32 WantedStarsAttained; + static int32 WantedStarsEvaded; static int32 PeopleKilledByPlayer; static int32 ProgressMade; static int32 TotalProgressInGame; @@ -44,51 +64,60 @@ public: static int32 MissionsPassed; static char LastMissionPassedName[8]; static int32 TotalLegitimateKills; - static int32 ElBurroTime; - static int32 Record4x4One; - static int32 Record4x4Two; - static int32 Record4x4Three; - static int32 Record4x4Mayhem; static int32 LivesSavedWithAmbulance; static int32 CriminalsCaught; static int32 HighestLevelAmbulanceMission; + static int32 HighestLevelVigilanteMission; + static int32 HighestLevelFireMission; static int32 FiresExtinguished; - static int32 TimeTakenDefuseMission; static int32 TotalNumberKillFrenzies; static int32 TotalNumberMissions; static int32 RoundsFiredByPlayer; static int32 KgsOfExplosivesUsed; - static int32 InstantHitsFiredByPlayer; - static int32 InstantHitsHitByPlayer; + static int32 BulletsThatHit; static int32 BestTimeBombDefusal; static int32 FastestTimes[TOTAL_FASTEST_TIMES]; static int32 HighestScores[TOTAL_HIGHEST_SCORES]; static int32 BestPositions[TOTAL_BEST_POSITIONS]; + static bool PropertyOwned[TOTAL_PROPERTIES]; + static int32 NumPropertyOwned; static int32 PropertyDestroyed; + static float HighestChaseValue; + static int32 CheatedCount; + static int32 ShowChaseStatOnScreen; static int32 PamphletMissionPassed; + static bool abSonyCDs[1]; + static int32 BloodRingKills; + static int32 BloodRingTime; + static float FavoriteRadioStationList[NUM_RADIOS]; static int32 Sprayings; static float AutoPaintingBudget; static int32 NoMoreHurricanes; static float FashionBudget; + static float PropertyBudget; + static float WeaponBudget; static int32 SafeHouseVisits; static int32 TyresPopped; + static int32 LongestWheelie; + static int32 LongestStoppie; + static int32 Longest2Wheel; + static float LongestWheelieDist; + static float LongestStoppieDist; + static float Longest2WheelDist; + public: static void Init(void); static void RegisterFastestTime(int32, int32); static void RegisterHighestScore(int32, int32); static void RegisterBestPosition(int32, int32); - static void RegisterElBurroTime(int32); - static void Register4x4OneTime(int32); - static void Register4x4TwoTime(int32); - static void Register4x4ThreeTime(int32); - static void Register4x4MayhemTime(int32); static void AnotherLifeSavedWithAmbulance(); static void AnotherCriminalCaught(); static void RegisterLevelAmbulanceMission(int32); + static void RegisterLevelVigilanteMission(int32); + static void RegisterLevelFireMission(int32); static void AnotherFireExtinguished(); static wchar *FindCriminalRatingString(); - static void RegisterTimeTakenDefuseMission(int32); static void AnotherKillFrenzyPassed(); static void SetTotalNumberKillFrenzies(int32); static void SetTotalNumberMissions(int32); @@ -99,5 +128,20 @@ public: static void LoadStats(uint8 *buf, uint32 size); static float GetPercentageProgress(); + static void MoneySpentOnWeapons(int32); + static void MoneySpentOnProperty(int32); + static void MoneySpentOnAutoPainting(int32); static void MoneySpentOnFashion(int32); + + static void NumOfVisitsFromLoanSharks(int32); + static void NumOfStoresKnockedOff(int32); + static void NumOfMovieStunts(int32); + static void NumOfAssassinations(int32); + static void NumOfPizzasDelivered(int32); + static void NumOfGarbagePickups(int32); + static void NumOfIceCreamSold(int32); + static void AddNumBloodRingKills(int32); + + static void LongestTimeInBloodRing(int32); + static void AddPropertyAsOwned(int32); }; diff --git a/src/core/Wanted.cpp b/src/core/Wanted.cpp index c70a3ab5..f5ea6e53 100644 --- a/src/core/Wanted.cpp +++ b/src/core/Wanted.cpp @@ -10,6 +10,7 @@ #include "CopPed.h" #include "Wanted.h" #include "General.h" +#include "Stats.h" int32 CWanted::MaximumWantedLevel = 6; int32 CWanted::nMaximumWantedLevel = 9600; @@ -308,7 +309,6 @@ CWanted::ReportCrimeNow(eCrimeType type, const CVector &coors, bool policeDoesnt UpdateWantedLevel(); } -// TODO(Miami): Stats void CWanted::UpdateWantedLevel() { @@ -318,36 +318,44 @@ CWanted::UpdateWantedLevel() m_nChaos = nMaximumWantedLevel; if (m_nChaos >= 0 && m_nChaos < 50) { + if (m_nWantedLevel == 1) + ++CStats::WantedStarsEvaded; m_nWantedLevel = 0; m_MaximumLawEnforcerVehicles = 0; m_MaxCops = 0; m_RoadblockDensity = 0; } else if (m_nChaos >= 50 && m_nChaos < 180) { + CStats::WantedStarsAttained += 1 - m_nWantedLevel; m_nWantedLevel = 1; m_MaximumLawEnforcerVehicles = 1; m_MaxCops = 1; m_RoadblockDensity = 0; } else if (m_nChaos >= 180 && m_nChaos < 550) { + CStats::WantedStarsAttained += 2 - m_nWantedLevel; m_nWantedLevel = 2; m_MaximumLawEnforcerVehicles = 2; m_MaxCops = 3; m_RoadblockDensity = 0; } else if (m_nChaos >= 550 && m_nChaos < 1200) { + CStats::WantedStarsAttained += 3 - m_nWantedLevel; m_nWantedLevel = 3; m_MaximumLawEnforcerVehicles = 2; m_MaxCops = 4; m_RoadblockDensity = 12; } else if (m_nChaos >= 1200 && m_nChaos < 2400) { + CStats::WantedStarsAttained += 4 - m_nWantedLevel; m_nWantedLevel = 4; m_MaximumLawEnforcerVehicles = 2; m_MaxCops = 6; m_RoadblockDensity = 18; } else if (m_nChaos >= 2400 && m_nChaos < 4800) { + CStats::WantedStarsAttained += 5 - m_nWantedLevel; m_nWantedLevel = 5; m_MaximumLawEnforcerVehicles = 3; m_MaxCops = 8; m_RoadblockDensity = 24; } else if (m_nChaos >= 4800) { + CStats::WantedStarsAttained += 6 - m_nWantedLevel; m_nWantedLevel = 6; m_MaximumLawEnforcerVehicles = 3; m_MaxCops = 10; @@ -494,8 +502,7 @@ CWanted::UpdateCrimesQ(void) void CWanted::Suspend(void) { - // TODO(Miami): Stats - // dwStarsEvaded += m_nWantedLevel; + CStats::WantedStarsEvaded += m_nWantedLevel; m_nMinChaos = m_nChaos; m_nMinWantedLevel = m_nWantedLevel; m_nLastTimeSuspended = CTimer::GetTimeInMilliseconds(); diff --git a/src/core/re3.cpp b/src/core/re3.cpp index 34fbb428..51995cf5 100644 --- a/src/core/re3.cpp +++ b/src/core/re3.cpp @@ -439,7 +439,7 @@ DebugMenuPopulate(void) DebugMenuEntrySetWrap(e, true); e = DebugMenuAddVar("Time & Weather", "New Weather", (int16*)&CWeather::NewWeatherType, nil, 1, 0, 5, weathers); DebugMenuEntrySetWrap(e, true); - DebugMenuAddVarBool8("Time & Weather", "Extracolours On", &CTimeCycle::m_bExtraColourOn, nil); + DebugMenuAddVarBool32("Time & Weather", "Extracolours On", &CTimeCycle::m_bExtraColourOn, nil); DebugMenuAddVar("Time & Weather", "Extracolour", &CTimeCycle::m_ExtraColour, nil, 1, 0, 23, extracols); DebugMenuAddVar("Time & Weather", "Time scale", (float*)&CTimer::GetTimeScale(), nil, 0.1f, 0.0f, 10.0f); diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp index 26c91abb..be8b28e3 100644 --- a/src/peds/Ped.cpp +++ b/src/peds/Ped.cpp @@ -4730,9 +4730,11 @@ CPed::InflictDamage(CEntity *damagedBy, eWeaponType method, float damage, ePedPi } else { CDarkel::RegisterKillNotByPlayer(this, method); } - if (method == WEAPONTYPE_DROWNING) + if (method == WEAPONTYPE_DROWNING) { bIsInTheAir = false; - // TODO(Miami): timesDrowned + if (FindPlayerPed() == this) + CStats::TimesDrowned++; + } return true; } diff --git a/src/render/SpecialFX.cpp b/src/render/SpecialFX.cpp index 4133e2fb..e9079bef 100644 --- a/src/render/SpecialFX.cpp +++ b/src/render/SpecialFX.cpp @@ -21,6 +21,9 @@ #include "Camera.h" #include "Shadows.h" #include "main.h" +#include "ColStore.h" +#include "Coronas.h" +#include "Script.h" RwIm3DVertex StreakVertices[4]; RwImVertexIndex StreakIndexList[12]; @@ -370,6 +373,8 @@ MarkerAtomicCB(RpAtomic *atomic, void *data) return atomic; } +// --MIAMI: C3dMarker and C3dMarkers done + bool C3dMarker::AddMarker(uint32 identifier, uint16 type, float fSize, uint8 r, uint8 g, uint8 b, uint8 a, uint16 pulsePeriod, float pulseFraction, int16 rotateRate) { @@ -414,6 +419,7 @@ C3dMarker::DeleteMarkerObject() m_nIdentifier = 0; m_nStartTime = 0; m_bIsUsed = false; + m_bFindZOnNextPlacement = false; m_nType = MARKERTYPE_INVALID; frame = RpAtomicGetFrame(m_pAtomic); @@ -457,6 +463,7 @@ C3dMarkers::Init() m_aMarkerArray[i].m_pAtomic = nil; m_aMarkerArray[i].m_nType = MARKERTYPE_INVALID; m_aMarkerArray[i].m_bIsUsed = false; + m_aMarkerArray[i].m_bFindZOnNextPlacement = false; m_aMarkerArray[i].m_nIdentifier = 0; m_aMarkerArray[i].m_Color.red = 255; m_aMarkerArray[i].m_Color.green = 255; @@ -502,8 +509,15 @@ C3dMarkers::Render() ActivateDirectional(); for (int i = 0; i < NUM3DMARKERS; i++) { if (m_aMarkerArray[i].m_bIsUsed) { - if (m_aMarkerArray[i].m_fCameraRange < 120.0f) + if (m_aMarkerArray[i].m_fCameraRange < 150.0f) { m_aMarkerArray[i].Render(); + if (m_aMarkerArray[i].m_nType == MARKERTYPE_ARROW) { + CCoronas::RegisterCorona((uintptr)&m_aMarkerArray[i], + SPHERE_MARKER_R, SPHERE_MARKER_G, SPHERE_MARKER_B, 192, + m_aMarkerArray[i].m_Matrix.GetPosition(), 1.2f * m_aMarkerArray[i].m_fSize, 50.0f * TheCamera.LODDistMultiplier, + CCoronas::TYPE_STAR, CCoronas::FLARE_NONE, CCoronas::REFLECTION_OFF, CCoronas::LOSCHECK_OFF, CCoronas::STREAK_ON, 0.0f, false); + } + } NumActiveMarkers++; m_aMarkerArray[i].m_bIsUsed = false; } else if (m_aMarkerArray[i].m_pAtomic != nil) { @@ -516,9 +530,9 @@ C3dMarker * C3dMarkers::PlaceMarker(uint32 identifier, uint16 type, CVector &pos, float size, uint8 r, uint8 g, uint8 b, uint8 a, uint16 pulsePeriod, float pulseFraction, int16 rotateRate) { C3dMarker *pMarker; - + CVector2D playerPos = FindPlayerCentreOfWorld(0); pMarker = nil; - float dist = Sqrt((pos.x - FindPlayerCentreOfWorld(0).x) * (pos.x - FindPlayerCentreOfWorld(0).x) + (pos.y - FindPlayerCentreOfWorld(0).y) * (pos.y - FindPlayerCentreOfWorld(0).y)); + float dist = ((CVector2D)pos - playerPos).Magnitude(); if (type != MARKERTYPE_ARROW && type != MARKERTYPE_CYLINDER) return nil; @@ -591,6 +605,15 @@ C3dMarkers::PlaceMarker(uint32 identifier, uint16 type, CVector &pos, float size } if (type == MARKERTYPE_ARROW) pMarker->m_Matrix.GetPosition() = pos; + + if (pMarker->m_bFindZOnNextPlacement) { + if ((playerPos - pos).MagnitudeSqr() < sq(100.f) && CColStore::HasCollisionLoaded(CVector2D(pos))) { + float z = CWorld::FindGroundZFor3DCoord(pos.x, pos.y, pos.z + 1.0f, nil); + if (z != 0.0f) + pMarker->m_Matrix.GetPosition().z = z - 0.05f * size; + pMarker->m_bFindZOnNextPlacement = false; + } + } pMarker->m_bIsUsed = true; return pMarker; } @@ -600,9 +623,14 @@ C3dMarkers::PlaceMarker(uint32 identifier, uint16 type, CVector &pos, float size pMarker->AddMarker(identifier, type, size, r, g, b, a, pulsePeriod, pulseFraction, rotateRate); if (type == MARKERTYPE_CYLINDER || type == MARKERTYPE_0 || type == MARKERTYPE_2) { - float z = CWorld::FindGroundZFor3DCoord(pos.x, pos.y, pos.z + 1.0f, nil); - if (z != 0.0f) - pos.z = z - 0.05f * size; + if ((playerPos - pos).MagnitudeSqr() < sq(100.f) && CColStore::HasCollisionLoaded(CVector2D(pos))) { + float z = CWorld::FindGroundZFor3DCoord(pos.x, pos.y, pos.z + 1.0f, nil); + if (z != 0.0f) + pos.z = z - 0.05f * size; + pMarker->m_bFindZOnNextPlacement = false; + } else { + pMarker->m_bFindZOnNextPlacement = true; + } } pMarker->m_Matrix.SetTranslate(pos.x, pos.y, pos.z); if (type == MARKERTYPE_2) { diff --git a/src/render/SpecialFX.h b/src/render/SpecialFX.h index 7bc3750a..8c79856b 100644 --- a/src/render/SpecialFX.h +++ b/src/render/SpecialFX.h @@ -79,6 +79,7 @@ public: RpMaterial *m_pMaterial; uint16 m_nType; bool m_bIsUsed; + bool m_bFindZOnNextPlacement; uint32 m_nIdentifier; RwRGBA m_Color; uint16 m_nPulsePeriod; diff --git a/src/render/Timecycle.cpp b/src/render/Timecycle.cpp index 7e8ad5e5..b20a2443 100644 --- a/src/render/Timecycle.cpp +++ b/src/render/Timecycle.cpp @@ -123,7 +123,7 @@ int32 CTimeCycle::m_nCurrentFogColourGreen; int32 CTimeCycle::m_nCurrentFogColourBlue; int32 CTimeCycle::m_FogReduction; -bool CTimeCycle::m_bExtraColourOn; +int32 CTimeCycle::m_bExtraColourOn; int32 CTimeCycle::m_ExtraColour; float CTimeCycle::m_ExtraColourInter; diff --git a/src/render/Timecycle.h b/src/render/Timecycle.h index ad079a95..da911b75 100644 --- a/src/render/Timecycle.h +++ b/src/render/Timecycle.h @@ -114,7 +114,7 @@ class CTimeCycle static int32 m_FogReduction; public: - static bool m_bExtraColourOn; + static int32 m_bExtraColourOn; static int32 m_ExtraColour; static float m_ExtraColourInter; static int32 m_CurrentStoredValue; diff --git a/src/save/GenericGameStorage.cpp b/src/save/GenericGameStorage.cpp index 52c1aef7..61a32a8d 100644 --- a/src/save/GenericGameStorage.cpp +++ b/src/save/GenericGameStorage.cpp @@ -37,9 +37,10 @@ #include "Weather.h" #include "World.h" #include "Zones.h" +#include "Timecycle.h" #define BLOCK_COUNT 20 -#define SIZE_OF_SIMPLEVARS 0xBC +#define SIZE_OF_SIMPLEVARS 0xD4 const uint32 SIZE_OF_ONE_GAME_IN_BYTES = 201729; @@ -187,6 +188,14 @@ GenericSave(int file) WriteDataToBufferPointer(buf, TheCamera.CarZoomIndicator); WriteDataToBufferPointer(buf, TheCamera.PedZoomIndicator); #endif + WriteDataToBufferPointer(buf, CGame::currArea); + WriteDataToBufferPointer(buf, CVehicle::bAllTaxisHaveNitro); + // TODO(Miami): Pad invert Y + bool invertY = 0; + WriteDataToBufferPointer(buf, invertY); + WriteDataToBufferPointer(buf, CTimeCycle::m_ExtraColour); + WriteDataToBufferPointer(buf, CTimeCycle::m_bExtraColourOn); + WriteDataToBufferPointer(buf, CTimeCycle::m_ExtraColourInter); assert(buf - work_buff == SIZE_OF_SIMPLEVARS); // Save scripts, block is nested within the same block as simple vars for some reason @@ -315,6 +324,14 @@ GenericLoad() ReadDataFromBufferPointer(buf, TheCamera.CarZoomIndicator); ReadDataFromBufferPointer(buf, TheCamera.PedZoomIndicator); #endif + ReadDataFromBufferPointer(buf, CGame::currArea); + ReadDataFromBufferPointer(buf, CVehicle::bAllTaxisHaveNitro); + // TODO(Miami): Pad invert Y + bool invertY = 0; + ReadDataFromBufferPointer(buf, invertY); + ReadDataFromBufferPointer(buf, CTimeCycle::m_ExtraColour); + ReadDataFromBufferPointer(buf, CTimeCycle::m_bExtraColourOn); + ReadDataFromBufferPointer(buf, CTimeCycle::m_ExtraColourInter); assert(buf - work_buff == SIZE_OF_SIMPLEVARS); #ifdef MISSION_REPLAY WaitForSave = 0; diff --git a/src/skel/glfw/glfw.cpp b/src/skel/glfw/glfw.cpp index 0d8361b8..d94f2e80 100644 --- a/src/skel/glfw/glfw.cpp +++ b/src/skel/glfw/glfw.cpp @@ -1390,7 +1390,7 @@ WinMain(HINSTANCE instance, RwChar** argv; SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, nil, SPIF_SENDCHANGE); -#if 0 +#if 1 // TODO: make this an option somewhere AllocConsole(); freopen("CONIN$", "r", stdin); diff --git a/src/weapons/BulletInfo.cpp b/src/weapons/BulletInfo.cpp index 41d9c730..0efe6688 100644 --- a/src/weapons/BulletInfo.cpp +++ b/src/weapons/BulletInfo.cpp @@ -113,7 +113,7 @@ void CBulletInfo::Update(void) CEntity* pHitEntity; if (CWorld::ProcessLineOfSight(vecOldPos, vecNewPos, point, pHitEntity, true, true, true, true, true, false, false, true)) { if (pBullet->m_pSource && (pHitEntity->IsPed() || pHitEntity->IsVehicle())) - CStats::InstantHitsHitByPlayer++; + CStats::BulletsThatHit++; CWeapon::CheckForShootingVehicleOccupant(&pHitEntity, &point, pBullet->m_eWeaponType, vecOldPos, vecNewPos); if (pHitEntity->IsPed()) { diff --git a/src/weapons/Weapon.cpp b/src/weapons/Weapon.cpp index 8e7e4265..0cd439c2 100644 --- a/src/weapons/Weapon.cpp +++ b/src/weapons/Weapon.cpp @@ -1466,20 +1466,20 @@ CWeapon::DoBulletImpact(CEntity *shooter, CEntity *victim, } case ENTITY_TYPE_VEHICLE: { - CStats::InstantHitsHitByPlayer++; + CStats::BulletsThatHit++; DMAudio.PlayOneShot(((CPhysical*)victim)->m_audioEntityId, SOUND_WEAPON_HIT_VEHICLE, 1.0f); break; } case ENTITY_TYPE_PED: { - CStats::InstantHitsHitByPlayer++; + CStats::BulletsThatHit++; DMAudio.PlayOneShot(((CPhysical*)victim)->m_audioEntityId, SOUND_WEAPON_HIT_PED, 1.0f); ((CPed*)victim)->Say(SOUND_PED_BULLET_HIT); break; } case ENTITY_TYPE_OBJECT: { - CStats::InstantHitsHitByPlayer++; + CStats::BulletsThatHit++; PlayOneShotScriptObject(SCRIPT_SOUND_BULLET_HIT_GROUND_2, point->point); break; } @@ -1862,7 +1862,7 @@ CWeapon::FireShotgun(CEntity *shooter, CVector *fireSource) case ENTITY_TYPE_VEHICLE: { if (!statUpdated) { - CStats::InstantHitsHitByPlayer++; + CStats::BulletsThatHit++; statUpdated = true; } DMAudio.PlayOneShot(((CPhysical*)victim)->m_audioEntityId, SOUND_WEAPON_HIT_VEHICLE, 1.0f); @@ -1871,7 +1871,7 @@ CWeapon::FireShotgun(CEntity *shooter, CVector *fireSource) case ENTITY_TYPE_PED: { if (!statUpdated) { - CStats::InstantHitsHitByPlayer++; + CStats::BulletsThatHit++; statUpdated = true; } DMAudio.PlayOneShot(((CPhysical*)victim)->m_audioEntityId, SOUND_WEAPON_HIT_PED, 1.0f); @@ -1881,7 +1881,7 @@ CWeapon::FireShotgun(CEntity *shooter, CVector *fireSource) case ENTITY_TYPE_OBJECT: { if (!statUpdated) { - CStats::InstantHitsHitByPlayer++; + CStats::BulletsThatHit++; statUpdated = true; } PlayOneShotScriptObject(SCRIPT_SOUND_BULLET_HIT_GROUND_2, point.point); @@ -2070,9 +2070,6 @@ CWeapon::FireSniper(CEntity *shooter) CBulletInfo::AddBullet(shooter, m_eWeaponType, source, dir); - if ( shooter == FindPlayerPed() ) - CStats::InstantHitsFiredByPlayer++; - if ( shooter == FindPlayerPed() ) { CPad::GetPad(0)->StartShake_Distance(240, 128, From 80a83d48f3177c401c2a173f4aacb55794ac2fb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?eray=20or=C3=A7unus?= Date: Fri, 14 Aug 2020 02:41:18 +0300 Subject: [PATCH 047/112] Guardian Angels fix --- src/peds/Ped.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp index be8b28e3..d009579c 100644 --- a/src/peds/Ped.cpp +++ b/src/peds/Ped.cpp @@ -3160,6 +3160,8 @@ CPed::SetStoredObjective(void) case OBJECTIVE_GOTO_CHAR_ON_FOOT: case OBJECTIVE_GOTO_CHAR_ON_FOOT_WALKING: case OBJECTIVE_HASSLE_CHAR: + case OBJECTIVE_FOLLOW_CHAR_IN_FORMATION: + case OBJECTIVE_LEAVE_CAR: case OBJECTIVE_ENTER_CAR_AS_PASSENGER: case OBJECTIVE_ENTER_CAR_AS_DRIVER: case OBJECTIVE_GOTO_AREA_ON_FOOT: From 2a0a508a10ca3154e8bdc60ffc466ad6797a4394 Mon Sep 17 00:00:00 2001 From: aap Date: Fri, 14 Aug 2020 09:27:30 +0200 Subject: [PATCH 048/112] fixed clouds render --- src/render/Clouds.cpp | 84 ++++++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 41 deletions(-) diff --git a/src/render/Clouds.cpp b/src/render/Clouds.cpp index 60450213..05ddbcdc 100644 --- a/src/render/Clouds.cpp +++ b/src/render/Clouds.cpp @@ -78,6 +78,43 @@ CClouds::Update(void) #endif } +float StarCoorsX[9] = { 0.0f, 0.05f, 0.12f, 0.5f, 0.8f, 0.6f, 0.27f, 0.55f, 0.75f }; +float StarCoorsY[9] = { 0.0f, 0.45f, 0.9f, 1.0f, 0.85f, 0.52f, 0.48f, 0.35f, 0.2f }; +float StarSizes[9] = { 1.0f, 1.4f, 0.9f, 1.0f, 0.6f, 1.5f, 1.3f, 1.0f, 0.8f }; + +float LowCloudsX[12] = { 1.0f, 0.7f, 0.0f, -0.7f, -1.0f, -0.7f, 0.0f, 0.7f, 0.8f, -0.8f, 0.4f, -0.4f }; +float LowCloudsY[12] = { 0.0f, -0.7f, -1.0f, -0.7f, 0.0f, 0.7f, 1.0f, 0.7f, 0.4f, 0.4f, -0.8f, -0.8f }; +float LowCloudsZ[12] = { 0.0f, 1.0f, 0.5f, 0.0f, 1.0f, 0.3f, 0.9f, 0.4f, 1.3f, 1.4f, 1.2f, 1.7f }; + +float CoorsOffsetX[37] = { + 0.0f, 60.0f, 72.0f, 48.0f, 21.0f, 12.0f, + 9.0f, -3.0f, -8.4f, -18.0f, -15.0f, -36.0f, + -40.0f, -48.0f, -60.0f, -24.0f, 100.0f, 100.0f, + 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, + 100.0f, 100.0f, -30.0f, -20.0f, 10.0f, 30.0f, + 0.0f, -100.0f, -100.0f, -100.0f, -100.0f, -100.0f, -100.0f +}; +float CoorsOffsetY[37] = { + 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, + 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, + 100.0f, 100.0f, 100.0f, 100.0f, -30.0f, 10.0f, + -25.0f, -5.0f, 28.0f, -10.0f, 10.0f, 0.0f, + 15.0f, 40.0f, -100.0f, -100.0f, -100.0f, -100.0f, + -100.0f, -40.0f, -20.0f, 0.0f, 10.0f, 30.0f, 35.0f +}; +float CoorsOffsetZ[37] = { + 2.0f, 1.0f, 0.0f, 0.3f, 0.7f, 1.4f, + 1.7f, 0.24f, 0.7f, 1.3f, 1.6f, 1.0f, + 1.2f, 0.3f, 0.7f, 1.4f, 0.0f, 0.1f, + 0.5f, 0.4f, 0.55f, 0.75f, 1.0f, 1.4f, + 1.7f, 2.0f, 2.0f, 2.3f, 1.9f, 2.4f, + 2.0f, 2.0f, 1.5f, 1.2f, 1.7f, 1.5f, 2.1f +}; + +uint8 BowRed[6] = { 30, 30, 30, 10, 0, 15 }; +uint8 BowGreen[6] = { 0, 15, 30, 30, 0, 0 }; +uint8 BowBlue[6] = { 0, 0, 0, 10, 30, 30 }; + void CClouds::Render(void) { @@ -98,11 +135,10 @@ CClouds::Render(void) int minute = CClock::GetHours()*60 + CClock::GetMinutes(); RwV3d campos = *(RwV3d*)&TheCamera.GetPosition(); - float coverage = Max(CWeather::Foggyness, CWeather::Foggyness); - // Moon int moonfadeout = Abs(minute - 180); // fully visible at 3AM if(moonfadeout < 180){ // fade in/out 3 hours + float coverage = Max(CWeather::Foggyness, CWeather::CloudCoverage); int brightness = (1.0f - coverage) * (180 - moonfadeout); RwV3d pos = { 0.0f, -100.0f, 15.0f }; RwV3dAdd(&worldpos, &campos, &pos); @@ -131,11 +167,10 @@ CClouds::Render(void) else if(CClock::GetHours() == 5) starintens = 255 * (60 - CClock::GetMinutes())/60.0f; if(starintens != 0){ - // R - static float StarCoorsX[9] = { 0.0f, 0.05f, 0.12f, 0.5f, 0.8f, 0.6f, 0.27f, 0.55f, 0.75f }; - static float StarCoorsY[9] = { 0.0f, 0.45f, 0.9f, 1.0f, 0.85f, 0.52f, 0.48f, 0.35f, 0.2f }; - static float StarSizes[9] = { 1.0f, 1.4f, 0.9f, 1.0f, 0.6f, 1.5f, 1.3f, 1.0f, 0.8f }; + float coverage = Max(CWeather::Foggyness, CWeather::CloudCoverage); int brightness = (1.0f - coverage) * starintens; + + // R RwRenderStateSet(rwRENDERSTATETEXTURERASTER, RwTextureGetRaster(gpCoronaTexture[0])); for(i = 0; i < 11; i++){ RwV3d pos = { 100.0f, 0.0f, 10.0f }; @@ -164,13 +199,7 @@ CClouds::Render(void) } // Low clouds - static float LowCloudsX[12] = { 1.0f, 0.7f, 0.0f, -0.7f, -1.0f, -0.7f, - 0.0f, 0.7f, 0.8f, -0.8f, 0.4f, -0.4f }; - static float LowCloudsY[12] = { 0.0f, -0.7f, -1.0f, -0.7f, 0.0f, 0.7f, - 1.0f, 0.7f, 0.4f, 0.4f, -0.8f, -0.8f }; - static float LowCloudsZ[12] = { 0.0f, 1.0f, 0.5f, 0.0f, 1.0f, 0.3f, - 0.9f, 0.4f, 1.3f, 1.4f, 1.2f, 1.7f }; - float lowcloudintensity = 1.0f - coverage; + float lowcloudintensity = 1.0f - Max(CWeather::Foggyness, CWeather::CloudCoverage); int r = CTimeCycle::GetLowCloudsRed() * lowcloudintensity; int g = CTimeCycle::GetLowCloudsGreen() * lowcloudintensity; int b = CTimeCycle::GetLowCloudsBlue() * lowcloudintensity; @@ -193,30 +222,6 @@ CClouds::Render(void) float rot_cos = Cos(CloudRotation); int fluffyalpha = 160 * (1.0f - CWeather::Foggyness); if(fluffyalpha != 0){ - static float CoorsOffsetX[37] = { - 0.0f, 60.0f, 72.0f, 48.0f, 21.0f, 12.0f, - 9.0f, -3.0f, -8.4f, -18.0f, -15.0f, -36.0f, - -40.0f, -48.0f, -60.0f, -24.0f, 100.0f, 100.0f, - 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, - 100.0f, 100.0f, -30.0f, -20.0f, 10.0f, 30.0f, - 0.0f, -100.0f, -100.0f, -100.0f, -100.0f, -100.0f, -100.0f - }; - static float CoorsOffsetY[37] = { - 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, - 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, - 100.0f, 100.0f, 100.0f, 100.0f, -30.0f, 10.0f, - -25.0f, -5.0f, 28.0f, -10.0f, 10.0f, 0.0f, - 15.0f, 40.0f, -100.0f, -100.0f, -100.0f, -100.0f, - -100.0f, -40.0f, -20.0f, 0.0f, 10.0f, 30.0f, 35.0f - }; - static float CoorsOffsetZ[37] = { - 2.0f, 1.0f, 0.0f, 0.3f, 0.7f, 1.4f, - 1.7f, 0.24f, 0.7f, 1.3f, 1.6f, 1.0f, - 1.2f, 0.3f, 0.7f, 1.4f, 0.0f, 0.1f, - 0.5f, 0.4f, 0.55f, 0.75f, 1.0f, 1.4f, - 1.7f, 2.0f, 2.0f, 2.3f, 1.9f, 2.4f, - 2.0f, 2.0f, 1.5f, 1.2f, 1.7f, 1.5f, 2.1f - }; static bool bCloudOnScreen[37]; float hilight; @@ -238,7 +243,7 @@ CClouds::Render(void) int bg = CTimeCycle::GetFluffyCloudsBottomGreen(); int bb = CTimeCycle::GetFluffyCloudsBottomBlue(); if(sundist < SCREEN_WIDTH/2){ - hilight = (1.0f - coverage) * (1.0f - sundist/(SCREEN_WIDTH/2)); + hilight = (1.0f - Max(CWeather::Foggyness, CWeather::CloudCoverage)) * (1.0f - sundist/(SCREEN_WIDTH/2)); tr = tr*(1.0f-hilight) + 255*hilight; tg = tg*(1.0f-hilight) + 190*hilight; tb = tb*(1.0f-hilight) + 190*hilight; @@ -286,9 +291,6 @@ CClouds::Render(void) // Rainbow if(CWeather::Rainbow != 0.0f){ - static uint8 BowRed[6] = { 30, 30, 30, 10, 0, 15 }; - static uint8 BowGreen[6] = { 0, 15, 30, 30, 0, 0 }; - static uint8 BowBlue[6] = { 0, 0, 0, 10, 30, 30 }; RwRenderStateSet(rwRENDERSTATETEXTURERASTER, RwTextureGetRaster(gpCoronaTexture[0])); for(i = 0; i < 6; i++){ RwV3d pos = { i*1.5f, 100.0f, 5.0f }; From 85d76dc1718a1399a08693cba2cc299f90f21a15 Mon Sep 17 00:00:00 2001 From: aap Date: Fri, 14 Aug 2020 09:28:17 +0200 Subject: [PATCH 049/112] fixed clouds render --- src/render/Clouds.cpp | 84 ++++++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 41 deletions(-) diff --git a/src/render/Clouds.cpp b/src/render/Clouds.cpp index c6ba0f10..15bae90b 100644 --- a/src/render/Clouds.cpp +++ b/src/render/Clouds.cpp @@ -71,6 +71,43 @@ CClouds::Update(void) #endif } +float StarCoorsX[9] = { 0.0f, 0.05f, 0.13f, 0.4f, 0.7f, 0.6f, 0.27f, 0.55f, 0.75f }; +float StarCoorsY[9] = { 0.0f, 0.45f, 0.9f, 1.0f, 0.85f, 0.52f, 0.48f, 0.35f, 0.2f }; +float StarSizes[9] = { 1.0f, 1.4f, 0.9f, 1.0f, 0.6f, 1.5f, 1.3f, 1.0f, 0.8f }; + +float LowCloudsX[12] = { 1.0f, 0.7f, 0.0f, -0.7f, -1.0f, -0.7f, 0.0f, 0.7f, 0.8f, -0.8f, 0.4f, -0.4f }; +float LowCloudsY[12] = { 0.0f, -0.7f, -1.0f, -0.7f, 0.0f, 0.7f, 1.0f, 0.7f, 0.4f, 0.4f, -0.8f, -0.8f }; +float LowCloudsZ[12] = { 0.0f, 1.0f, 0.5f, 0.0f, 1.0f, 0.3f, 0.9f, 0.4f, 1.3f, 1.4f, 1.2f, 1.7f }; + +float CoorsOffsetX[37] = { + 0.0f, 60.0f, 72.0f, 48.0f, 21.0f, 12.0f, + 9.0f, -3.0f, -8.4f, -18.0f, -15.0f, -36.0f, + -40.0f, -48.0f, -60.0f, -24.0f, 100.0f, 100.0f, + 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, + 100.0f, 100.0f, -30.0f, -20.0f, 10.0f, 30.0f, + 0.0f, -100.0f, -100.0f, -100.0f, -100.0f, -100.0f, -100.0f +}; +float CoorsOffsetY[37] = { + 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, + 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, + 100.0f, 100.0f, 100.0f, 100.0f, -30.0f, 10.0f, + -25.0f, -5.0f, 28.0f, -10.0f, 10.0f, 0.0f, + 15.0f, 40.0f, -100.0f, -100.0f, -100.0f, -100.0f, + -100.0f, -40.0f, -20.0f, 0.0f, 10.0f, 30.0f, 35.0f +}; +float CoorsOffsetZ[37] = { + 2.0f, 1.0f, 0.0f, 0.3f, 0.7f, 1.4f, + 1.7f, 0.24f, 0.7f, 1.3f, 1.6f, 1.0f, + 1.2f, 0.3f, 0.7f, 1.4f, 0.0f, 0.1f, + 0.5f, 0.4f, 0.55f, 0.75f, 1.0f, 1.4f, + 1.7f, 2.0f, 2.0f, 2.3f, 1.9f, 2.4f, + 2.0f, 2.0f, 1.5f, 1.2f, 1.7f, 1.5f, 2.1f +}; + +uint8 BowRed[6] = { 30, 30, 30, 10, 0, 15 }; +uint8 BowGreen[6] = { 0, 15, 30, 30, 0, 0 }; +uint8 BowBlue[6] = { 0, 0, 0, 10, 30, 30 }; + void CClouds::Render(void) { @@ -94,11 +131,10 @@ CClouds::Render(void) float minute = CClock::GetHours()*60 + CClock::GetMinutes() + CClock::GetSeconds()/60.0f; RwV3d campos = *(RwV3d*)&TheCamera.GetPosition(); - float coverage = Max(CWeather::Foggyness, CWeather::Foggyness); - // Moon float moonfadeout = Abs(minute - 180.0f); // fully visible at 3AM if((int)moonfadeout < 180){ // fade in/out 3 hours + float coverage = Max(CWeather::Foggyness, CWeather::CloudCoverage); int brightness = (1.0f - coverage) * (180 - (int)moonfadeout); RwV3d pos = { 0.0f, -100.0f, 15.0f }; RwV3dAdd(&worldpos, &campos, &pos); @@ -122,11 +158,10 @@ CClouds::Render(void) else if(CClock::GetHours() == 5) starintens = 255 * (60 - CClock::GetMinutes())/60.0f; if(starintens != 0){ - // R - static float StarCoorsX[9] = { 0.0f, 0.05f, 0.13f, 0.4f, 0.7f, 0.6f, 0.27f, 0.55f, 0.75f }; - static float StarCoorsY[9] = { 0.0f, 0.45f, 0.9f, 1.0f, 0.85f, 0.52f, 0.48f, 0.35f, 0.2f }; - static float StarSizes[9] = { 1.0f, 1.4f, 0.9f, 1.0f, 0.6f, 1.5f, 1.3f, 1.0f, 0.8f }; + float coverage = Max(CWeather::Foggyness, CWeather::CloudCoverage); int brightness = (1.0f - coverage) * starintens; + + // R RwRenderStateSet(rwRENDERSTATETEXTURERASTER, RwTextureGetRaster(gpCoronaTexture[0])); for(i = 0; i < 11; i++){ RwV3d pos = { 100.0f, 0.0f, 10.0f }; @@ -155,13 +190,7 @@ CClouds::Render(void) } // Low clouds - static float LowCloudsX[12] = { 1.0f, 0.7f, 0.0f, -0.7f, -1.0f, -0.7f, - 0.0f, 0.7f, 0.8f, -0.8f, 0.4f, -0.4f }; - static float LowCloudsY[12] = { 0.0f, -0.7f, -1.0f, -0.7f, 0.0f, 0.7f, - 1.0f, 0.7f, 0.4f, 0.4f, -0.8f, -0.8f }; - static float LowCloudsZ[12] = { 0.0f, 1.0f, 0.5f, 0.0f, 1.0f, 0.3f, - 0.9f, 0.4f, 1.3f, 1.4f, 1.2f, 1.7f }; - float lowcloudintensity = 1.0f - Max(coverage, CWeather::ExtraSunnyness); + float lowcloudintensity = 1.0f - Max(Max(CWeather::Foggyness, CWeather::CloudCoverage), CWeather::ExtraSunnyness); int r = CTimeCycle::GetLowCloudsRed() * lowcloudintensity; int g = CTimeCycle::GetLowCloudsGreen() * lowcloudintensity; int b = CTimeCycle::GetLowCloudsBlue() * lowcloudintensity; @@ -184,30 +213,6 @@ CClouds::Render(void) float rot_cos = Cos(CloudRotation); int fluffyalpha = 160 * (1.0f - Max(CWeather::Foggyness, CWeather::ExtraSunnyness)); if(fluffyalpha != 0){ - static float CoorsOffsetX[37] = { - 0.0f, 60.0f, 72.0f, 48.0f, 21.0f, 12.0f, - 9.0f, -3.0f, -8.4f, -18.0f, -15.0f, -36.0f, - -40.0f, -48.0f, -60.0f, -24.0f, 100.0f, 100.0f, - 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, - 100.0f, 100.0f, -30.0f, -20.0f, 10.0f, 30.0f, - 0.0f, -100.0f, -100.0f, -100.0f, -100.0f, -100.0f, -100.0f - }; - static float CoorsOffsetY[37] = { - 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, - 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, - 100.0f, 100.0f, 100.0f, 100.0f, -30.0f, 10.0f, - -25.0f, -5.0f, 28.0f, -10.0f, 10.0f, 0.0f, - 15.0f, 40.0f, -100.0f, -100.0f, -100.0f, -100.0f, - -100.0f, -40.0f, -20.0f, 0.0f, 10.0f, 30.0f, 35.0f - }; - static float CoorsOffsetZ[37] = { - 2.0f, 1.0f, 0.0f, 0.3f, 0.7f, 1.4f, - 1.7f, 0.24f, 0.7f, 1.3f, 1.6f, 1.0f, - 1.2f, 0.3f, 0.7f, 1.4f, 0.0f, 0.1f, - 0.5f, 0.4f, 0.55f, 0.75f, 1.0f, 1.4f, - 1.7f, 2.0f, 2.0f, 2.3f, 1.9f, 2.4f, - 2.0f, 2.0f, 1.5f, 1.2f, 1.7f, 1.5f, 2.1f - }; static bool bCloudOnScreen[37]; float sundist, hilight; @@ -230,7 +235,7 @@ CClouds::Render(void) int bb = CTimeCycle::GetFluffyCloudsBottomBlue(); int distLimit = (3*SCREEN_WIDTH)/4; if(sundist < distLimit){ - hilight = (1.0f - coverage) * (1.0f - sundist/(float)distLimit); + hilight = (1.0f - Max(CWeather::Foggyness, CWeather::CloudCoverage)) * (1.0f - sundist/(float)distLimit); tr = tr*(1.0f-hilight) + 255*hilight; tg = tg*(1.0f-hilight) + 190*hilight; tb = tb*(1.0f-hilight) + 190*hilight; @@ -277,9 +282,6 @@ CClouds::Render(void) // Rainbow if(CWeather::Rainbow != 0.0f){ - static uint8 BowRed[6] = { 30, 30, 30, 10, 0, 15 }; - static uint8 BowGreen[6] = { 0, 15, 30, 30, 0, 0 }; - static uint8 BowBlue[6] = { 0, 0, 0, 10, 30, 30 }; RwRenderStateSet(rwRENDERSTATETEXTURERASTER, RwTextureGetRaster(gpCoronaTexture[0])); for(i = 0; i < 6; i++){ RwV3d pos = { i*1.5f, 100.0f, 5.0f }; From e1ca6c6b79ceddaed6fa4dc757ae25c17b356611 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Fri, 14 Aug 2020 14:21:16 +0300 Subject: [PATCH 050/112] Move stuff to vendor --- .gitignore | 4 + .gitmodules | 27 +- librw | 1 - libsndfile.64/ChangeLog | 9764 ----------------- libsndfile.64/NEWS | 199 - libsndfile.64/include/sndfile.h | 857 -- libsndfile.64/include/sndfile.hh | 446 - mpg123.64/include/fmt123.h | 159 - mpg123.64/include/mpg123.h | 1697 --- ogg | 1 - opus | 1 - opusfile | 1 - premake5.lua | 49 +- vendor/librw | 1 + .../libsndfile}/ChangeLog | 0 {libsndfile.32 => vendor/libsndfile}/NEWS | 0 .../libsndfile/dist/Win32}/libsndfile-1.dll | Bin .../libsndfile/dist/Win64}/libsndfile-1.dll | Bin .../libsndfile}/include/sndfile.h | 0 .../libsndfile}/include/sndfile.hh | 0 .../libsndfile/lib/Win32}/libsndfile-1.def | 0 .../libsndfile/lib/Win32}/libsndfile-1.lib | Bin .../lib/Win32}/pkgconfig/sndfile.pc | 0 .../libsndfile/lib/Win64}/libsndfile-1.def | 0 .../libsndfile/lib/Win64}/libsndfile-1.lib | Bin .../lib/Win64}/pkgconfig/sndfile.pc | 0 .../mpg123/dist/Win32}/libmpg123-0.dll | Bin .../mpg123/dist/Win64}/libmpg123-0.dll | Bin {mpg123.32 => vendor/mpg123}/include/fmt123.h | 0 {mpg123.32 => vendor/mpg123}/include/mpg123.h | 0 .../mpg123/lib/Win32}/libmpg123-0.lib | Bin .../mpg123/lib/Win64}/libmpg123-0.lib | Bin vendor/ogg | 1 + {openal-soft => vendor/openal-soft}/COPYING | 0 .../openal-soft}/dist/Win32/OpenAL32.dll | Bin .../openal-soft}/dist/Win64/OpenAL32.dll | Bin .../openal-soft}/include/AL/al.h | 0 .../openal-soft}/include/AL/alc.h | 0 .../openal-soft}/include/AL/alext.h | 0 .../openal-soft}/include/AL/efx-creative.h | 0 .../openal-soft}/include/AL/efx-presets.h | 0 .../openal-soft}/include/AL/efx.h | 0 .../openal-soft}/libs/Win32/OpenAL32.def | 0 .../openal-soft}/libs/Win32/OpenAL32.lib | Bin .../openal-soft}/libs/Win32/libOpenAL32.dll.a | Bin .../openal-soft}/libs/Win64/OpenAL32.def | 0 .../openal-soft}/libs/Win64/OpenAL32.lib | Bin .../openal-soft}/libs/Win64/libOpenAL32.dll.a | Bin .../openal-soft}/readme.txt | 0 vendor/opus | 1 + vendor/opusfile | 1 + 51 files changed, 46 insertions(+), 13164 deletions(-) delete mode 160000 librw delete mode 100644 libsndfile.64/ChangeLog delete mode 100644 libsndfile.64/NEWS delete mode 100644 libsndfile.64/include/sndfile.h delete mode 100644 libsndfile.64/include/sndfile.hh delete mode 100644 mpg123.64/include/fmt123.h delete mode 100644 mpg123.64/include/mpg123.h delete mode 160000 ogg delete mode 160000 opus delete mode 160000 opusfile create mode 160000 vendor/librw rename {libsndfile.32 => vendor/libsndfile}/ChangeLog (100%) rename {libsndfile.32 => vendor/libsndfile}/NEWS (100%) rename {libsndfile.32/dist => vendor/libsndfile/dist/Win32}/libsndfile-1.dll (100%) rename {libsndfile.64/dist => vendor/libsndfile/dist/Win64}/libsndfile-1.dll (100%) rename {libsndfile.32 => vendor/libsndfile}/include/sndfile.h (100%) rename {libsndfile.32 => vendor/libsndfile}/include/sndfile.hh (100%) rename {libsndfile.32/lib => vendor/libsndfile/lib/Win32}/libsndfile-1.def (100%) rename {libsndfile.32/lib => vendor/libsndfile/lib/Win32}/libsndfile-1.lib (100%) rename {libsndfile.32/lib => vendor/libsndfile/lib/Win32}/pkgconfig/sndfile.pc (100%) rename {libsndfile.64/lib => vendor/libsndfile/lib/Win64}/libsndfile-1.def (100%) rename {libsndfile.64/lib => vendor/libsndfile/lib/Win64}/libsndfile-1.lib (100%) rename {libsndfile.64/lib => vendor/libsndfile/lib/Win64}/pkgconfig/sndfile.pc (100%) rename {mpg123.32/dist => vendor/mpg123/dist/Win32}/libmpg123-0.dll (100%) rename {mpg123.64/dist => vendor/mpg123/dist/Win64}/libmpg123-0.dll (100%) rename {mpg123.32 => vendor/mpg123}/include/fmt123.h (100%) rename {mpg123.32 => vendor/mpg123}/include/mpg123.h (100%) rename {mpg123.32/lib => vendor/mpg123/lib/Win32}/libmpg123-0.lib (100%) rename {mpg123.64/lib => vendor/mpg123/lib/Win64}/libmpg123-0.lib (100%) create mode 160000 vendor/ogg rename {openal-soft => vendor/openal-soft}/COPYING (100%) rename {openal-soft => vendor/openal-soft}/dist/Win32/OpenAL32.dll (100%) rename {openal-soft => vendor/openal-soft}/dist/Win64/OpenAL32.dll (100%) rename {openal-soft => vendor/openal-soft}/include/AL/al.h (100%) rename {openal-soft => vendor/openal-soft}/include/AL/alc.h (100%) rename {openal-soft => vendor/openal-soft}/include/AL/alext.h (100%) rename {openal-soft => vendor/openal-soft}/include/AL/efx-creative.h (100%) rename {openal-soft => vendor/openal-soft}/include/AL/efx-presets.h (100%) rename {openal-soft => vendor/openal-soft}/include/AL/efx.h (100%) rename {openal-soft => vendor/openal-soft}/libs/Win32/OpenAL32.def (100%) rename {openal-soft => vendor/openal-soft}/libs/Win32/OpenAL32.lib (100%) rename {openal-soft => vendor/openal-soft}/libs/Win32/libOpenAL32.dll.a (100%) rename {openal-soft => vendor/openal-soft}/libs/Win64/OpenAL32.def (100%) rename {openal-soft => vendor/openal-soft}/libs/Win64/OpenAL32.lib (100%) rename {openal-soft => vendor/openal-soft}/libs/Win64/libOpenAL32.dll.a (100%) rename {openal-soft => vendor/openal-soft}/readme.txt (100%) create mode 160000 vendor/opus create mode 160000 vendor/opusfile diff --git a/.gitignore b/.gitignore index 61ed7035..c7ebb3d1 100644 --- a/.gitignore +++ b/.gitignore @@ -348,3 +348,7 @@ healthchecksdb # Backup folder for Package Reference Convert tool in Visual Studio 2017 MigrationBackup/ + +vendor/glew-2.1.0/ +vendor/glfw-3.3.2.bin.WIN32/ +vendor/glfw-3.3.2.bin.WIN64/ \ No newline at end of file diff --git a/.gitmodules b/.gitmodules index bf1e33a5..c9a30c95 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,15 +1,16 @@ -[submodule "librw"] - path = librw - url = https://github.com/aap/librw -[submodule "opus"] - path = opus - url = https://github.com/xiph/opus.git - branch = master -[submodule "opusfile"] - path = opusfile - url = https://github.com/xiph/opusfile.git - branch = master -[submodule "ogg"] - path = ogg +[submodule "vendor/ogg"] + path = vendor/ogg url = https://github.com/xiph/ogg.git branch = master +[submodule "vendor/opus"] + path = vendor/opus + url = https://github.com/xiph/opus.git + branch = master +[submodule "vendor/opusfile"] + path = vendor/opusfile + url = https://github.com/xiph/opusfile.git + branch = master +[submodule "vendor/librw"] + path = vendor/librw + url = https://github.com/aap/librw.git + branch = master diff --git a/librw b/librw deleted file mode 160000 index 113d76cf..00000000 --- a/librw +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 113d76cfaaf064447ac936f79d91ea04788fca24 diff --git a/libsndfile.64/ChangeLog b/libsndfile.64/ChangeLog deleted file mode 100644 index 62576177..00000000 --- a/libsndfile.64/ChangeLog +++ /dev/null @@ -1,9764 +0,0 @@ -2013-04-05 Erik de Castro Lopo - - * Makefile.am - Make sure checkprograms are built as part of 'make test-tarball'. - Closes: https://github.com/erikd/libsndfile/issues/37 - -2013-03-29 Erik de Castro Lopo - - * tests/dft_cmp.c - Fix a buffer overflow detected using GCC 4.8's -fsantiize=address runtime - error checking functionality. This was a buffer overflow in libsndfile's - test suite, not in the actual library code. - -2013-03-09 Erik de Castro Lopo - - * M4/gcc_version.m4 - Fix to work with OpenBSD's sed. - -2013-03-07 Erik de Castro Lopo - - * src/ALAC/alac_encoder.c - Patch from Michael Pruett (author of libaudiofile) to add correct byte - swapping for the mChannelLayoutTag field. - -2013-03-02 Erik de Castro Lopo - - * doc/bugs.html - Bugs should bt reported on the github issue tracker. - -2013-02-22 Erik de Castro Lopo - - * configure.ac - Improve sanitization of FLAC_CFLAGS value. - -2013-02-21 Erik de Castro Lopo - - * src/Makefile.am - Call python interpreter instead of using '#!' in script. Thanks to Jan - Stary for reporting this. - - * doc/index.html doc/FAQ.html - Make internal links relative. Patch from Jan Stary. - -2013-02-13 Erik de Castro Lopo - - * src/test_endswap.def src/test_endswap.tpl - Add tests for psf_put_be32() and psf_put_be64(). - - * src/sfendian.h src/test_endswap.(def|tpl) - Add functions psf_get_be(16|32|64) with tests. - These are needed for platforms where un-aligned accesses cause bus faults. - - * src/ALAC/ag_enc.c src/ALAC/alac_decoder.c - Replace all un-aligned accesses with safe alternatives. - Closes: https://github.com/erikd/libsndfile/issues/19 - -2013-02-12 Erik de Castro Lopo - - * src/sfendian.h - Add big endian versions of H2BE_16 and H2BE_32. - -2013-02-11 Erik de Castro Lopo - - * src/ALAC/ - Replace Apple endswap routines with ones from libsndfile. - - * merge from libsndfile-cart repo - Add ability to set and get a cart chunk with WAV and RF64. - Orignal patch by Chris Roberts required a number of - tweaks. - -2013-02-10 Erik de Castro Lopo - - * src/common.h - Bump SF_HEADER_LEN from 8192 to 12292, the value it was in the 1.0.25 - release. - -2013-02-09 Erik de Castro Lopo - - * src/alac.c - Fix segfault when encoding 8 channel files. - Closes: https://github.com/erikd/libsndfile/issues/30 - -2013-02-07 Erik de Castro Lopo - - * src/ALAC/EndianPortable.c - Fall back to compiler's __BYTE_ORDER__ for endian-ness detection. - -2013-02-06 Erik de Castro Lopo - - * configure.ac src/common.h src/ima_adpcm.c src/ms_adpcm.c src/paf.c - Drop tests for and #ifdef hackery for C99 struct flexible array feature. - libsndfile assumes the compiler supports most of the ISO C99 standard. - - * src/alac.c - Fix valgrind invalid realloc. Reported by nu774. - Closes: https://github.com/erikd/libsndfile/issues/31 - -2013-02-05 Erik de Castro Lopo - - * src/alac.c - The 'pakt' chunk header should now be written correctly. - Closes: https://github.com/erikd/libsndfile/issues/24 - - * configure.ac Makefile.am - Use PKG_INSTALLDIR when it exists. Suggestion from Christoph Thompson. - Closes: https://github.com/erikd/libsndfile/pull/28 - -2013-02-03 Erik de Castro Lopo - - * src/common.h src/caf.c - Read the ALAC 'pakt' header and stash the values. - - * src/sfendian.h - Add functions psf_put_be64() and psf_put_be32(). - - * src/alac.c - Start work on filling on the 'pakt' chunk header. - -2013-02-02 Erik de Castro Lopo - - * doc/FAQ.html - Add missing opening

tag. - - * src/alac.c - Increase ALAC_BYTE_BUFFER_SIZE to 82000. - -2013-01-27 Erik de Castro Lopo - - * doc/FAQ.html - Improve question #8. - -2013-01-02 Erik de Castro Lopo - - * src/ogg_opus.c - Add skeleton implementation so someone else can run with it. - -2012-12-12 Erik de Castro Lopo - - * src/common.h src/dwd.c src/rx2.c src/txw.c - Fix for compiling when configured with --enable-experimental. Thanks to - Eric Wong for reporting this. - -2012-12-01 Erik de Castro Lopo - - * configure.ac programs/sndfile-play.c - OS X 10.8 uses a different audio API to previous versions. - Fix compile failure on by disabling sndfile-play on this version. - Someone needs to supply code for the new API. - -2012-11-30 Erik de Castro Lopo - - * Octave/Makefile.am Octave/octave_test.sh - Fix 'make distcheck'. - -2012-10-13 Erik de Castro Lopo - - * M4/octave.m4 - Relax constraints on Octave version. - -2012-10-11 Erik de Castro Lopo - - * tests/utils.tpl - Improve compare_*_or_die() functions. - - * src/command.c - Fix bug reported by Keiler Florian. When reading short or int data from a - file containing float data, and setting SFC_SET_SCALE_FLOAT_INT_READ to - SF_TRUE would fail 3, 5, 7 and other channels counts. Problem was that - psf_calc_signal_max() was not calculating the signal max correctly. - Calculation of the signal max was failing because it was trying to read - a sample count that was not an integer multiple of the channel count. - - * tests/channel_test.c tests/Makefile.am tests/test_wrapper.sh.in - Add test for the above. - -2012-09-25 Erik de Castro Lopo - - * src/sndfile.hh - Added a constructor to allow the use of SF_VIRTUAL_IO. Patch from - DannyDaemonic : https://github.com/erikd/libsndfile/pull/20 - -2012-08-23 Erik de Castro Lopo - - * doc/octave.html - Fix link to octave.sourceforge.net. Thanks to IOhannes m zmoelnig. - - * src/mat5.c - Allow reading of mat5 files without a specified sample rate (default to - 44.1kHz). Thanks to IOhannes m zmoelnig. - -2012-08-19 Erik de Castro Lopo - - * src/paf.c - Error out if channel count is zero. Bug report from William ELla via - launchpad: - https://bugs.launchpad.net/ubuntu/+source/libsndfile/+bug/1036831 - -2012-08-04 Erik de Castro Lopo - - * configure.ac programs/sndfile-play.c - Patch from Ricci Adams to use OSX's AudioQueues on OSX 10.7 and greater. - -2012-07-09 Erik de Castro Lopo - - * programs/common.c - Accept "ogg" as a file extention for Ogg/Vorbis files. - -2012-06-22 Erik de Castro Lopo - - * src/flac.c - Make sure any previously allocated FLAC stream encoder and stream decoder - objects are deleted before a new one is allocated. - -2012-06-20 Erik de Castro Lopo - - * tests/utils.tpl - Rename gen_lowpass_noise_float() to gen_lowpass_signal_float() and add a - sine wave component so that different FLAC compression levels can be - tested. - - * src/sndfile.h.in doc/command.html - Add SFC_SET_COMPRESSION_LEVEL and document it. - - * src/sndfile.c - Catch SFC_SET_VBR_ENCODING_QUALITY command and implement it as the inverse - of SFC_SET_COMPRESSION_LEVEL. - - * src/ogg_vorbis.c src/flac.c - Implement SFC_SET_COMPRESSION_LEVEL command. - - * tests/test_wrapper.sh.in tests/compression_size_test.c - Use the compression_size_test on FLAC as well. - -2012-06-19 Erik de Castro Lopo - - * tests/ - Rename vorbis_test.c -> compression_size_test.c so it can be extended to - test FLAC as well. - -2012-06-18 Erik de Castro Lopo - - * src/broadcast.c - Fix a bug where a file with a 'bext' chunk with a zero length coding - history field would get corrupted when the file was closed. - Reported by Paul Davis of the Ardour project. - - * src/test_broadcast_var.c - Add a test for the above. - -2012-05-19 Erik de Castro Lopo - - * src/sndfile.c - sf_format_check: For SF_FORMAT_AIFF, reject endian-ness setttings for - non-PCM formats. - -2012-04-12 Erik de Castro Lopo - - * src/aiff.c - Fix regression in handling of odd length SSND chunks. - Thanks Olivier Tristan for the example file. - - * src/aiff.c src/wav.c - Exit parser loop when marker == 0. - -2012-04-04 Erik de Castro Lopo - - * doc/FAQ.html - Fix text. Thanks to Richard Collins. - -2012-03-24 Erik de Castro Lopo - - * src/caf.c - Exit parse loop if the marker is zero. Pass jump offsets as size_t instead - of int. - -2012-03-20 Erik de Castro Lopo - - * src/alac.c - Fix segfault when decoding CAF/ALAC file with more than 4 channels. - Fixes github issue #8 reported by Charles Van Winkle. - -2012-03-20 Erik de Castro Lopo - - * src/common.h - Change 'typedef SF_CHUNK_ITERATOR { ... } SF_CHUNK_ITERATOR' into 'struct - SF_CHUNK_ITERATOR { ... }' to prevent older compilers from complaining of - re-typedef-ing of SF_CHUNK_ITERATOR. - - * configure.ac - Fix if test for empty $prefix. - -2012-03-18 Erik de Castro Lopo - - * src/*.c tests/chunk_test.c - Reworking of custom chunk handling code. - - Memory for the iterator is now attached to the SF_PRIVATE struct and - freed one sf_close(). - - Rename sf_create_chunk_iterator() -> sf_get_chunk_iterator(). - - Each SNDFILE handle never has more than one SF_CHUNK_ITERATOR handle. - - * tests/string_test.c - Fix un-initialised char buffer. - -2012-03-17 Erik de Castro Lopo - - * src/*.c tests/chunk_test.c - Add improved handling of custom chunk getting and settings. Set of patches - from IOhannes m zmoelnig submitted via github pull request #6. - - * src/alac.c - Fix calculated frame count for files with zero block length. - -2012-03-13 Erik de Castro Lopo - - * src/avr.c - Remove double assignment to psf->endian. Thanks Kao Dome. - - * src/gsm610.c - Fix clearing of buffers. Thanks Kao Dome. - - * src/paf.c - Remove duplicate code. Thanks Kao Dome. - - * src/test_strncpy_crlf.c - Fix minor error in test. Thanks Kao Dome. - - * src/common.h src/*.c - Fix a bunch of valgrind errors. - -2012-03-13 Erik de Castro Lopo - - * src/sndfile.c - Fix typo in error string 'Uknown' -> 'Unknown'. - - * tests/fix_this.c - Fix potential int overflow. - -2012-03-10 Erik de Castro Lopo - - * src/alac.c - Fix decoding of last block so that the decode length is not a multiple of - the block length. Fixes github issue #4 reported by Charles Van Winkle. - - * src/sfconfig.h src/sfendian.h - Fix for MinGW cross compiling. Use '#if (defined __*66__)' instead of - '#if __*86__' because the MinGW header use '#ifdef __x86_64__'. - -2012-03-10 Erik de Castro Lopo - - * src/ALAC/ src/alac.c - Unify the interface between libsndfile and Apple ALAC codec. Regardless of - file bit width samples are now passed between the two as int32_t that are - justified towards the most significant bit. Without this modification, 16 - conversion functions would have been needed between the libsndfile (short, - int, float, double) types and the ALAC types (16, 20, 24 and 32 bit). With - this mod, only 4 are needed. - - * tests/floating_point_test.tpl tests/write_read_test.(def|tpl) - Add tests for 20 and 24 bit ALAC/CAF files. - - * src/command.c - Add ALAC/CAF to the SFC_GET_FORMAT_* commands. Fixes github issue #5. - - * configure.ac - Only use automake AM_SLIENT_RULES where supported. Thanks Dave Yeo. - - * tests/pipe_test.tpl - Disable tests on OS/2. Thanks Dave Yeo. - -2012-03-09 Erik de Castro Lopo - - * configure.ac src/sfconfig.h src/sfendian.h - For GCC, use inline assembler for endian swapping. This should work with - older versions of GCC like the one currently used in OS/2. - -2012-03-06 Erik de Castro Lopo - - * src/alac.c - Make sure temp file gets opened in binary mode. - - * src/alac.c src/common.c src/common.h - Fix function alac_write16_d(). - - * tests/floating_point_test.tpl - Add tests for 16 bit ALAC/CAF. - - * src/alac.c src/common.c src/common.h - Add support for 32 bit ALAC/CAF files. - - * tests/floating_point_test.tpl tests/write_read_test.tpl - Add tests for 32 bit ALAC/CAF files. - -2012-03-05 Erik de Castro Lopo - - * src/ - Refactor chunk storage so it work on big as well as little endian CPUs. - - * tests/chunk_test.c - Clean up error messages. - - * src/sfendian.h src/*.c - Rename endian swapping macros and add ENDSWAP_64 and BE2H_64. - - * configure.ac - Detect presence of header file. - - * src/sfendian.h - Use intrinsics (ie for MinGW) when is not - present. - Make ENDSWAP_64() work with i686-w64-mingw32 compiler. - - * src/ALAC/EndianPortable.c - Add support for __powerpc__. - - * src/sfconfig.h - Make sure HAVE_X86INTRIN_H is either 1 or 0. - -2012-03-03 Erik de Castro Lopo - - * src/ALAC/* - Big dump of code for Apple's ALAC file format. The copyyright to this code - is owned by Apple who have released it under an Apache style license. A few - small modifications were made to allow this to be integrated into libsndfile - but unfortunately the history of those changes were lost because they were - developed in a Bzr tree and during that time libsndfile moved to Git. - - * src/alac.c src/caf.c src/common.[ch] src/Makefile.am src/sndfile.h.in - src/sndfile.c - Hook new ALAC codec in. - - * programs/sndfile-convert.c - Add support for alac codec. - - * tests/write_read_test.tpl - Expand tests to cover ALAC. - -2012-03-02 Erik de Castro Lopo - - * src/aiff.c src/wav.c - Fix a couple of regressions from version 1.0.25. - -2012-03-01 Erik de Castro Lopo - - * src/strings.c - Minor refactoring. Make sure that the memory allocation size if always > 0 - to avoid undefined behaviour. - -2012-02-29 Erik de Castro Lopo - - * src/chunk.c - Fix buffer overrun introduced in recently added chunk logging. This chunk - logging has not yet made it to a libsndfile release version. Thanks to - Olivier Tristan for providing an example file. - - * src/wav.c - Fix handling of odd sized chunks which was causing the parser to lose some - chunks. Thanks to Olivier Tristan for providing an example file. - -2012-02-26 Erik de Castro Lopo - - * tests/util.tpl - Used gnu_printf format checking with mingw-w64 compiler. - - * tests/header_test.tpl - Printf format fixes. - -2012-02-25 Erik de Castro Lopo - - * M4/extra_pkg.m4 - Update PKG_CHECK_MOD_VERSION macro to add an AC_TRY_LINK step. This fix - allows the configure process to catch attempts to link incompatible - libraries. For example, linking 32 bit version of eg libFLAC to a 64 bit - version of libsndfile will now fail. Similarly, when cross compiling - libsndfile from Linux to Windows linking the Linux versions of a library - to the Windows version of libsndfile will now also fail. - - * src/sndfile.h.in src/sndfile.c src/common.h src/create_symbols_file.py - Add API function sf_current_byterate(). - - * src/dwvw.c src/flac.c src/ogg_vorbis.c src/sds.c - Add codec specific handlers for current byterate. - - * tests/floating_point_test.tpl - Add initial test for sf_current_byterate(). - -2012-02-24 Erik de Castro Lopo - - * src/common.[ch] - Add function psf_decode_frame_count(). - - * src/dwvw.c - Fix a termnation bug that caused the decoder to go into an infinite loop. - -2012-02-24 Erik de Castro Lopo - - * src/wav.c - Fix a regression in the WAV header parser. Thanks to Olivier Tristan for - bug report and the example file. - -2012-02-21 Erik de Castro Lopo - - * src/sndfile.c - Return error when SF_BROADCAST_INFO struct has bad coding_history_size. - Thanks to Alex Weiss for the report. - -2012-02-20 Erik de Castro Lopo - - * src/au.c src/flac.c src/g72x.c src/ogg_vorbis.c src/wav_w64.c - Don't fake psf->bytewidth values. - -2012-02-19 Erik de Castro Lopo - - * tests/string_test.c - Fix valgrind warnings. - - * src/common.h src/sndfile.c src/strings.c - Make string storage dynamically allocated. - - * src/sndfile.c - Add extra validation for custom chunk handling. - -2012-02-18 Erik de Castro Lopo - - * src/wav.c - Improve handlling unknown chunk types. Thanks to Olivier Tristan for sending - example files. - - * src/utils.tpl - Add GCC specific testing for format string parameters for exit_if_true(). - - * tests/*.c tests/*.tpl - Fix all printf format warnings. - - * programs/sndfile-play.c - Remove un-needed OSX include . Thanks jamesfmilne for github - issue #3. - - * tests/chunk_test.c - Extend custom chunk test. - -2012-02-12 Erik de Castro Lopo - - * src/wav.c - Jump over some more chunk types while parsing. - -2012-02-04 Erik de Castro Lopo - - * src/common.h src/strings.c - Change way strings are stored in SF_PRIVATE in preparation for dynamically - allocating the storage. - -2012-02-02 Erik de Castro Lopo - - * src/common.h src*.c - Improve encapsulation of string data in SF_PRIVATE. - -2012-02-01 Erik de Castro Lopo - - * src/common.h src*.c - Remove the buffer union from SF_PRIVATE. Most uses of this have been - replaced with a BUF_UNION that is allocated on the stack. - -2012-01-31 Erik de Castro Lopo - - * src/common.h src*.c - Rename logbuffer field of SF_PRIVATE to parselog and reduce its size. - Put the parselog buffer and the index inside a struct within SF_PRIVATE. - -2012-01-26 Erik de Castro Lopo - - * configure.ac - Fix typo, FLAC_CLFAGS -> FLAC_CFLAGS. Thanks to Jeremy Friesner. - -2012-01-21 Erik de Castro Lopo - - * src/sndfile.c src/ogg.c - Fix misleading error message when trying to create an SF_FORMAT_OGG file - with anything other than SF_FORMAT_FILE. Thanks to Charles Van Winkle for - the bug report. Github issue #1. - -2012-01-20 Erik de Castro Lopo - - * src/sndfile.c src/wav.c - Allow files opened in RDWR mode with string data in the tailer to be - extended. Thanks to Bodo for the patch. - - * tests/string_test.c - Add tests for the above changes (patch from Bodo). - -2012-01-09 Erik de Castro Lopo - - * src/aiff.c - Refactor reading of chunk size and use of psf_store_read_chunk(). - - * src/(caf|wav).c - Correct storing of chunk offset. - -2012-01-05 Erik de Castro Lopo - - * src/aiff.c src/wav.c src/common.h - Refactor common code into src/common.h. - - * src/caf.c - Make custom chunks work for CAF files. - - * tests/chunk_test.c tests/test_wrapper.sh.in - Test CAF files with custom chunks. - - * src/sndfile.c - Prevent psf->codec_close() being called more than once. - -2012-01-04 Erik de Castro Lopo - - * programs/sndfile-cmp.c - Catch the case where the second file has more frames than the first. - -2012-01-02 Erik de Castro Lopo - - * src/create_symbols_file.py - Add sf_set_chunk/sf_get_chunk_size/sf_get_chunk_data. - -2011-12-31 Erik de Castro Lopo - - * tests/chunk_test.c tests/Makefile.am - New test for custom chunks. - - * src/aiff.c src/chunk.c src/common.h src/sndfile.c - Make custom chunks work on AIFF files. - - * src/wav.c - Make custom chunks work on WAV files (includes refactoring). - -2011-11-12 Erik de Castro Lopo - - * src/sndfile.h.in src/common.h src/sndfile.c - Start working on setting/getting chunks. - -2011-11-24 Erik de Castro Lopo - - * src/binheader_writef_check.py src/create_symbols_file.py - Make it work for Python 2 and 3. Thanks Michael. - -2011-11-19 Erik de Castro Lopo - - * libsndfile.spec.in - Change field name 'URL' to 'Url'. - - * src/sndfile.h.in - Add SF_SEEK_SET/CUR/END. - -2011-11-05 Erik de Castro Lopo - - * src/id3.c - Fix a stack overflow that can occur when parsing a file with multiple - ID3 headers which would cause libsndfile to go into an infinite recursion - until it blew the stack. Thanks to Anders Svensson for supplying an example - file. - -2011-10-30 Erik de Castro Lopo - - * src/double64.c src/float32.c src/common.h - Make (float32|double_64)_(be|le)_read() functions const correct. - -2011-10-28 Erik de Castro Lopo - - * src/sfendian.h - Minor tweaking of types. Cast to ptr to correct final type rather void*. - - * programs/sndfile-play.c tests/utils.tpl - Fix compiler warnings with latest MinGW cross compiler. - -2011-10-13 Erik de Castro Lopo - - * src/file_io.c - Use the non-deprecated resource fork name on OSX. Thanks to Olivier Tristan. - -2011-10-12 Erik de Castro Lopo - - * src/wav.c - Jump over the 'olym' chunks when parsing. - -2011-10-06 Erik de Castro Lopo - - * tests/write_read_test.tpl - Remove windows only truncate() implementation. - -2011-09-04 Erik de Castro Lopo - - * src/sd2.c src/sndfile.c - Make sure 23 bit PCM SD2 files are readable/writeable. - - * tests/write_read_test.tpl - Add tests for 32 bit PCM SD2 files. - -2011-08-23 Erik de Castro Lopo - - * configure.ac - Use AC_SYS_LARGEFILE instead of AC_SYS_EXTRA_LARGEFILE as suggested by - Jan Willies. - -2011-08-07 Erik de Castro Lopo - - * configure.ac Makefile.am - Move ACLOCAL_AMFLAGS setup to Makefile.am. - -2011-07-15 Erik de Castro Lopo - - * doc/command.html - Merge two separate blocks of SFC_SET_VBR_ENCODING_QUALITY documentation. - - * src/paf.c - Replace ppaf24->samplesperblock with a compile time constant. - -2011-07-13 Erik de Castro Lopo - - * src/ogg_vorbis.c - Fix return value of SFC_SET_VBR_ENCODING_QUALITY command. - - * doc/command.html - Document SFC_SET_VBR_ENCODING_QUALITY, SFC_GET/SET_LOOP_INFO and - SFC_GET_INSTRUMENT. - - * NEWS README configure.ac doc/*.html - Updates for 1.0.25. - -2011-07-07 Erik de Castro Lopo - - * src/sfconfig.h - Add handling for HAVE_SYS_WAIT_H. - - * Makefile.am src/Makefile.am tests/Makefile.am - Add 'checkprograms' target. - -2011-07-05 Erik de Castro Lopo - - * src/common.h src/sndfile.c - Purge SF_ASSERT macro. Use standard C assert instead. - - * src/paf.c src/common.h src/sndfile.c - Fix for Secunia Advisory SA45125, heap overflow (heap gets overwritten with - byte value of 0) due to integer overflow if PAF file handler. - - * src/ima_adpcm.c src/ms_adpcm.c src/paf.c - Use calloc instead of malloc followed by memset. - - * tests/utils.tpl - Clean up use of memset. - -2011-07-05 Erik de Castro Lopo - - * src/ogg.c - Fix log message. - - * tests/format_check_test.c - Fix compiler warnings. - -2011-07-04 Erik de Castro Lopo - - * src/sndfile.c - Fix error message for erro code SFE_ZERO_MINOR_FORMAT. - - * tests/format_check_test.c - Add a test to for SF_FINFO format field validation. - - * src/ogg.c src/ogg_vorbis.c src/ogg.h src/ogg_pcm.c src/ogg_speex.c - src/common.h src/Makefile.am - Move vorbis specific code to ogg_vorbis.c, add new files for handling PCM - and Speex codecs in an Ogg container. The later two are only enabled with - ENABLE_EXPERIMENTAL_CODE config variable. - -2011-06-28 Erik de Castro Lopo - - * src/strings.c - Clean up and refactor storage of SF_STR_SOFTWARE. - -2011-06-23 Erik de Castro Lopo - - * src/sndfile.h.in doc/api.html - Fix definition of SF_STR_LAST and update SF_STR_* related docs. Thanks to - Tim van der Molen for the patch. - -2011-06-21 Erik de Castro Lopo - - * programs/sndfile-interleave.c - Fix handling of argc. Thanks to Marius Hennecke. - - * src/wav_w64.c - Accept broken WAV files with blockalign == 0. Thanks to Olivier Tristan for - providing example files. - - * src/wav.c - Jump over 'FLLR' chunks. - -2011-06-14 Erik de Castro Lopo - - * src/sndfile.h.in - Fix -Wundef warning due to ENABLE_SNDFILE_WINDOWS_PROTOTYPES. - - * configure.ac - Add -Wundef to CFLAGS. - - * src/ogg.c - Fix -Wunder warning. - -2011-05-18 Erik de Castro Lopo - - * configure.ac - Use int64_t instead of off_t when they are the same size. - - * src/Makefile.am tests/Makefile.am - Use check_PROGRAMS instead of noinst_PROGRAMS where appropriate. - -2011-05-08 Erik de Castro Lopo - - * src/wav.c - Don't allow unknown and/or un-editable chunks to prevent the file from being - opened in SFM_RDWR mode. - -2011-04-25 Erik de Castro Lopo - - * tests/format_check_test.c - Fix segfault in test program. - -2011-04-25 Erik de Castro Lopo - - * tests/format_check_test.c - New test program to check to make sure that sf_open() and sf_check_format() - agree as to what is a valid program. - - * tests/Makefile.am tests/test_wrapper.sh.in - Hook into build and test runner. - - * src/sndfile.c - Fix some sf_format_check() problems. Thanks to Charles Van Winkle for the - notification. - -2011-04-06 Erik de Castro Lopo - - * src/caf.c - Add validation to size of 'data' chunk and fix size of written 'data' - chunk. Thanks to Michael Pruett for reporting this. - -2011-03-28 Erik de Castro Lopo - - * src/* tests/* programs/* - Fix a bunch of compiler warnings with gcc-4.6. - -2011-03-25 Erik de Castro Lopo - - * tests/util.tpl - Add NOT macro to util.h. - - * src/strings.c - Fix handling of SF_STR_SOFTWARE that resulted in a segfault due to calling - strlen() on an unterminated string. Thanks to Francois Thibaud for reporting - this problem. - - * tests/string_test.c - Add test for SF_STR_SOFTWARE segfault bug. - - * configure.ac - Sanitize FLAC_CFLAGS value supplied by pkg-config which returns a value of - '-I${includedir}/FLAC'. However FLAC also provides an include file - which clashes with the Standard C header of the same name. The - solution is strip the 'FLAC' part off the end and include all FLAC headers - as . - - * configure.ac src/Makefile.am - Use non-recursive make in src/ directory. - -2011-03-23 Erik de Castro Lopo - - * NEWS README docs/*.html - Updates for 1.0.24 release. - -2011-03-22 Erik de Castro Lopo - - * configure.ac - Fix up usage of sed (should not assume GNU sed). - - * M4/add_(c|cxx)flags.m4 - Test flags in isolation. - - * tests/cpp_test.cc - Fix a broken test (test segfaults). Report by Dave Flogeras. - -2011-03-21 Erik de Castro Lopo - - * programs/common.[ch] - Add function program_name() which returns the program name minus the path - from argv [0]. - - * programs/*.c programs/Makefile.am - Use program_name() where appropriate. Fix build. - -2011-03-20 Erik de Castro Lopo - - * src/wav.c - For u-law and A-law files, write an 18 byte 'fmt ' chunk instead of a 16 - byte one. Win98 accepts files with a 16 but not 18 byte 'fmt' chunk. Later - version accept 18 byte but not 16 byte. - -2011-03-15 Erik de Castro Lopo - - * doc/FAQ.html - Add examples for question 12. - - * doc/libsndfile.css.in - Add tweaks for h4 element. - - * doc/api.html - Add documentation for virtual I/O functionality. Thanks to Uli Franke. - - * tests/util.tpl - Add static inline functions sf_info_clear() and sf_info_setup(). - - * tests/(alaw|dwvw|ulaw)_test.c - Use functions sf_info_clear() and sf_info_setup(). - -2011-03-08 Erik de Castro Lopo - - * configure.ac - Fail more gracefully if pkg-config is missing. Suggestion from Brian - Willoughby. - -2011-02-27 Erik de Castro Lopo - - * src/common.c - Use size_t instead of int for size params with varargs. - -2011-02-09 Erik de Castro Lopo - - * doc/index.html - Update supported platforms with more Debian platforms and Android. - -2011-01-27 Erik de Castro Lopo - - * src/sndfile.hh - Add an LPCWSTR version of the SndfileHandle constructor to the SndfileHandle - class definition. Thanks to Eric Eizenman for pointing out this was missing. - - * tests/cpp_test.cc - Add test for LPCWSTR version of the SndfileHandle constructor. - -2011-01-19 Erik de Castro Lopo - - * programs/sndfile-play.c - Remove cruft. - -2010-12-01 Erik de Castro Lopo - - * src/sndfile.hh - Add methods rawHandle() and takeOwnership(). Thanks to Tim Blechmann for - the patch. - - * tests/cpp_test.cc - Add tests for above two methods. Also supplied by Tim Blechmann. - -2010-11-11 Erik de Castro Lopo - - * doc/api.html - Add mention of use of sf_strerror() when sf_open() fails. - -2010-11-01 Erik de Castro Lopo - - * configure.ac - Make TYPEOF_SF_COUNT_T int64_t where possible. This may fix problems where - people are compiling on a 64 bit system with the GCC -m32 flag. - - * src/sndfile.h.in - Fix comments on sf_count_t. - -2010-10-26 Erik de Castro Lopo - - * src/aiff.c - Handle non-zero offset field in SSND chunk. Thanks to Michael Chinen. - -2010-10-20 Erik de Castro Lopo - - * configure.ac - Sed fix for FreeBSD. Thanks Tony Theodore. - -2010-10-14 Erik de Castro Lopo - - * shave.in M4/shave.m4 - Fix shave invocation of windres compiler. Thanks Damien Lespiau (upstream - shave author). - - * configure.ac M4/shave.m4 shave-libtool.in shave.in - Switch from shave to automake-1.11's AM_SILENT_RULES. - -2010-10-13 Erik de Castro Lopo - - * shave-libtool.in shave.in - Sync to upstream version. - - * src/rf64.c - More work to make the parser more robust and accepting of mal-formed files. - -2010-10-12 Erik de Castro Lopo - - * src/common.h - Add functions psf_strlcpy() and psf_strlcat(). - - * src/broadcast.c src/sndfile.c src/strings.c src/test_main.c - src/test_main.h src/test_strncpy_crlf.c - Use functions psf_strlcpy() and psf_strlcat() as appropriate. - - * tests/string_test.c - Add tests for SF_STR_GENRE and SF_STR_TRACKNUMBER. - - * src/rf64.c - Fix size of 'ds64' chunk when writing RF64. - -2010-10-10 Erik de Castro Lopo - - * programs/*.c - Add the libsndfile version to the usage message of all programs. - -2010-10-10 Erik de Castro Lopo - - * configure.ac src/version-metadata.rc.in src/Makefile.am - Add version string resources to the windows DLL. - - * doc/api.html - Update to add missing SF_FORMAT_* values. Closed Debian bug #545257. - - * NEWS README configure.ac doc/*.html - Updates for 1.0.23 release. - -2010-10-09 Erik de Castro Lopo - - * tests/pedantic-header-test.sh.in - Handle unusual values of CC environment variable. - - * src/rf64.c - Minor tweaks and additional sanity checking. - - * src/Makefile.am src/binheader_writef_check.py - Use python 2.6. - -2010-10-08 Erik de Castro Lopo - - * src/sndfile.hh - Add a missing 'inline' before a constructor defintion. - -2010-10-06 Erik de Castro Lopo - - * src/common.h - Add macro NOT. - - * src/rf64.c - Minor tweaks. - - * Makefile.am */Makefile.am - Add *~ to CLEANFILES. - -2010-10-05 Erik de Castro Lopo - - * src/sndfile.c - Fix a typo in the error string for SFE_OPEN_PIPE_RDWR. Thanks to Charles - Van Winkle for the report. - -2010-10-04 Erik de Castro Lopo - - * src/flac.c src/ogg.c src/sndfile.h.in src/strings.c src/wav.c - Add ability to read/write tracknumber and genre to flac/ogg/wav files. - Thanks to Matti Nykyri for the patch. - - * src/common.h src/broadcast.c src/strings.c - Add function psf_safe_strncpy() and use where appropriate. - -2010-10-04 Erik de Castro Lopo - - * NEWS README configure.ac doc/*.html - Updates for 1.0.22 release. - -2010-10-03 Erik de Castro Lopo - - * src/common.h src/broadcast.c src/rf64.c src/sndfile.c src/wav.c - Rewrite of SF_BROADCAST_INFO handling. - - * src/test_broadcast_var.c tests/command_test.c - Tweak SF_BROADCAST_INFO tests. - - * src/test_broadcast_var.c - Fix OSX stack check error. - -2010-09-30 Erik de Castro Lopo - - * src/sds.c - Set sustain_loop_end to 0 as suggested by Brian Lewis. - -2010-09-29 Erik de Castro Lopo - - * src/sds.c - Make sure the correct frame count gets written into the header. - - * tests/write_read_test.tpl - Don't allow SDS files to have a long frame count. - -2010-09-17 Erik de Castro Lopo - - * src/sds.c - Apply a pair of patches from Brian Lewis to fix the packet number location - and the checksum. - -2010-09-10 Erik de Castro Lopo - - * src/aiff.c src/file_io.c src/ogg.c src/rf64.c src/sndfile.c - src/strings.c src/test_audio_detect.c src/test_strncpy_crlf.c - src/wav.c tests/pcm_test.tpl - Fix a bunch of minor issues found using static analysis. - -2010-08-23 Erik de Castro Lopo - - * src/test_broadcast_var.c - New file containing tests for broadcast_set_var(). - - * src/Makefile.am src/test_main.[ch] - Hook test_broadcast_var.c into tests. - -2010-08-22 Erik de Castro Lopo - - * src/broadcast.c src/common.(c|h) - Move function strncpy_crlf() to src/common.c so the function can be tested - in isolation. - - * src/test_strncpy_crlf.c - New file. - - * src/Makefile.am src/test_main.[ch] - Hook test_strncpy_crlf.c into tests. - -2010-08-18 Erik de Castro Lopo - - * src/common.h - Move code around to make comments make sense. - - * src/broadcast.c - Add debugging code that is disabled by default. - -2010-08-02 Erik de Castro Lopo - - * src/flac.c - When the file meta data says the file has zero frames set psf->sf.frames - to SF_COUNT_MAX. Fixes Debian bug #590752. - - * programs/sndfile-info.c - Print 'unknown' if frame count == SF_COUNT_MAX. - -2010-06-27 Erik de Castro Lopo - - * src/sndfile.c - Only support writing mono SVX files. Multichannel SVX files are not - interleaved and there is no support infrastructure to cache and write - multiple channels to create a non-interleaved file. - - * src/file_io.c - Don't call close() on a file descriptor of -1. Thanks to Jeremy Friesner - for the bug report. - -2010-06-09 Erik de Castro Lopo - - * src/common.h - Add macro SF_ASSERT. - - * src/sndfile.c - Use SF_ASSERT to ensure sizeof (sf_count_t) == 8. - - * src/svx.c - Add support for reading and writing stereo SVX files. - -2010-05-07 Erik de Castro Lopo - - * configure.ac - When compiling with x86_64-w64-mingw32-gcc link with -static-libgcc flags. - - * programs/common.c programs/sndfile-metadata-set.c - Update metadata after the audio data is copied. Other minor fixes. Patch - from Marius Hennecke. - -2010-05-04 Erik de Castro Lopo - - * src/nist.c - Fix a regression reported by Hugh Secker-Walker. - - * src/api.html - Add comment about sf_open_fd() not working on Windows if the application - and the libsndfile DLL are linked to different versions of the Microsoft - C runtime DLL. - -2010-04-23 Erik de Castro Lopo - - * tests/pedantic-header-test.sh.in - Fix 'make distcheck'. - -2010-04-21 Erik de Castro Lopo - - * tests/pedantic-header-test.sh.in - New file to test whether sndfile.h can be compiled with gcc's -pedantic - flag. - - * configure.ac tests/test_wrapper.sh.in - Hook pedantic-header-test into test suite. - - * src/sndfile.h.in - Fix -pedantic warning. - -2010-04-19 Erik de Castro Lopo - - * programs/sndfile-salvage.c programs/Makefile.am - New program to salvage the audio data from WAV/WAVEX/AIFF files which are - greater than 4Gig in size. - -2010-04-09 Erik de Castro Lopo - - * programs/sndfile-convert.c - Fix valgrind warning. - -2010-04-06 Erik de Castro Lopo - - * programs/sndfile-cmp.c - When files differ in the PCM data, also print the difference offset. - Minor cleanup. - -2010-03-19 Erik de Castro Lopo - - * src/aiff.c - Don't use the 'twos' marker for 24 and 32 bit PCM, use 'in24' and 'in32' - instead. Thanks to Paul Davis (Ardour) for this suggestion. - -2010-02-28 Erik de Castro Lopo - - * configure.ac - Clean up configure report. - - * tests/utils.tpl - Add functions test_read_raw_or_die and test_write_raw_or_die. - - * tests/rdwr_test.(def|tpl) tests/Makefile.am - Add new test program and hook into build. - - * src/sndfile.c - Fix minor issues with sf_read/write_raw(). Bug reported by Milan Křápek. - - * tests/test_wrapper.sh.in - Add rdwr_test to the test wrapper script. - -2010-02-22 Erik de Castro Lopo - - * configure.ac - Remove -fpascal-strings from OSX's OS_SPECIFIC_CFLAGS. - - * programs/common.[ch] programs/sndfile-metadata-set.c - Apply a patch from Robin Gareus allowing the setting of the time reference - field of the BEXT chunk. - -2010-02-06 Erik de Castro Lopo - - * src/ima_adpcm.c - Add a fix from Jonatan Liljedahl to handle predictor overflow when decoding - IMA4. - -2010-01-26 Erik de Castro Lopo - - * src/sndfile.hh - Add a constructor which takes an existing file descriptor and then calls - sf_open_fd(). Patch from Sakari Bergen. - -2010-01-10 Erik de Castro Lopo - - * programs/sndfile-deinterleave.c programs/sndfile-interleave.c - Improve usage messages. - -2010-01-09 Erik de Castro Lopo - - * src/id3.c src/Makefile.am - Add new file src/id3.c and hook into build. - - * src/sndfile.c src/common.h - Detect and skip and ID3 header at the start of the file. - -2010-01-07 Erik de Castro Lopo - - * programs/common.c - Fix update_strings() copyright, comment, album and license are correctly - written. Thanks to Todd Allen for reporting this. - - * man/Makefile.am - Change GNU makeism to something more widely supported. Thanks to Christian - Weisgerber for reporting this. - - * configure.ac programs/Makefile.am programs/sndfile-play.c - Apply patch from Christian Weisgerber and Jacob Meuserto add support for - OpenBSD's sndio. - -2010-01-05 Erik de Castro Lopo - - * doc/api.html - Discourage the use of sf_read/write_raw(). - -2009-12-28 Erik de Castro Lopo - - * configure.ac - Test for Unix pipe() and waitpid() functions. - - * src/sfconfig.h tests/pipe_test.tpl - Disable pipe_test if pipe() and waitpid() aren't available. - -2009-12-16 Erik de Castro Lopo - - * configure.ac src/Makefile.am src/create_symbols_file.py - src/make-static-lib-hidden-privates.sh - Change name of generated file src/Symbols.linux to Symbols.gnu-binutils and - and use the same symbols file for other systems which use GNU binutils like - Debian's kfreebsd. - - * M4/shave.m4 shave.in - Update shave files from upstream. - -2009-12-15 Erik de Castro Lopo - - * man/sndfile-metadata-get.1 - Fix typo. - - * man/sndfile-interleave.1 man/Makefile.am - New man page. - -2009-12-13 Erik de Castro Lopo - - * src/ogg.c - When decoding to short or int, clip the decoded signal to [-1.0, 1.0] if - its too hot. Thanks to Dmitry Baikov for suggesting this. - - * NEWS README doc/*.html - Updates for 1.0.21. - -2009-12-09 Erik de Castro Lopo - - * programs/sndfile-jackplay.c man/sndfile-jackplay.1 - Remove these which will now be in found in the sndfile-tools package. - - * programs/Makefile.am man/Makefile.am - Remove build rules for sndfile-jackplay. - - * configure.ac - Remove detection of JACK Audio Connect Kit. - - * programs/sndfile-concat.c man/sndfile-concat.1 - Add new program with man page. - - * man/Makefile.am programs/Makefile.am - Hook sndfile-concat into build system. - -2009-12-08 Erik de Castro Lopo - - * tests/error_test.c - Don't terminate when sf_close() returns zero in error_close_test(). - It seems that Windows 7 behaves differently from earlier versions of - Windows. - -2009-12-03 Erik de Castro Lopo - - * configure.ac M4/*.m4 - Rename all custom macros from AC_* to MN_*. - - * programs/sndfile-interleave.c - Make it actually work. - -2009-12-02 Erik de Castro Lopo - - * doc/*.html configure.ac - Corrections and clarifications courtesy of Robin Forder. - - * programs/sndfile-convert.c programs/common.[ch] - Move some code from convert to common for reuse. - - * programs/sndfile-interleave.c programs/sndfile-interleave.c - Add new programs sndfile-interleave and sndfile-deinterleave. - - * programs/Makefile.am - Hook new programs into build. - -2009-12-01 Erik de Castro Lopo - - * src/create_symbols_file.py tests/stdio_test.c tests/win32_test.c - Minor OS/2 tweaks as suggested by David Yeo. - - * tests/multi_file_test.c - Fix file creation flags on windows. Thanks to Bruce Sharpe. - - * src/sf_unistd.h - Set all group and other file create permssions to zero. - - * tests/win32_test.c - Add a new test. - -2009-11-30 Erik de Castro Lopo - - * doc/print.css doc/*.html - Add a print stylesheet and update all HTML documents to reference it. - Thanks to Aditya Bhargava for suggesting this. - - * doc/index.html - Minor corrections. - -2009-11-29 Erik de Castro Lopo - - * sndfile.pc.in - Add a Libs.private entry to assist with static linking. - -2009-11-28 Erik de Castro Lopo - - * src/make-static-lib-hidden-privates.sh src/Makefile.am - Add a script to hide all non-public symbols in the libsndfile.a static - library. - -2009-11-22 Erik de Castro Lopo - - * tests/locale_test.c - Correct usage of ENABLE_SNDFILE_WINDOWS_PROTOTYPES. - -2009-11-20 Erik de Castro Lopo - - * src/windows.c - Correct usage of ENABLE_SNDFILE_WINDOWS_PROTOTYPES. - -2009-11-16 Erik de Castro Lopo - - * programs/sndfile-convert.c - Allow the program to read from stdin by specifying '-' on the command line - as the input file. - - * src/sndfile.h.in - Hash define ENABLE_SNDFILE_WINDOWS_PROTOTYPES to 1 for greater safety. - - * tests/virtual_io_test.c - Add a PAF/PCM_24 test and verify the file length is not negative - immediately after openning the file for write. - -2009-10-18 Erik de Castro Lopo - - * src/wav.c - When writing loop lengths, adjust the end position by one to make up for - Microsoft's screwed up spec. Thanks to Olivier Tristan for the patch. - -2009-10-14 Erik de Castro Lopo - - * src/flac.c - Apply patch from Uli Franke allowing FLAC files to be encoded at any sample - rate. - -2009-10-09 Erik de Castro Lopo - - * src/nist.c - Fix parsing of odd ulaw encoded file provided by Jan Silovsky. - - * configure.ac - Insist on libvorbis >= 1.2.3. Earlier verions have bugs that cause the - libsndfile test suite to fail on MIPS, PowerPC and others. - See: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=549899 - -2009-10-06 Erik de Castro Lopo - - * man/sndfile-convert.1 - Fix warning from Debian's lintian checks. - - * man/sndfile-cmp.1 man/sndfile-jackplay.1 man/sndfile-metadata-get.1 - man/Makefile.am - Add three new minimal manpages and hook into build. - -2009-10-05 Erik de Castro Lopo - - * tests/test_wrapper.sh.in - Don't run cpp_test on x86_64-w64-mingw32. - -2009-09-28 Erik de Castro Lopo - - * tests/utils.tpl - On windows, make sure the open() function doesn't get called with a third - parameter of 0 which fails for no good reason. Also make sure this third - parameter doesn't get called with S_IRGRP when compiling for windows because - Wine complains. - - * src/sndfile.hh - Add a SndfileHandle constructor for windows that takes a 'const wchar_t *' - string. - - * doc/FAQ.html - Add Q/A : I'm cross compiling libsndfile for another platform. How can I - run the test suite? - - * src/create_symbols_file.py src/Makefile.am - Add Symbols.static target, a list of symbols, one per line. - -2009-09-27 Erik de Castro Lopo - - * tests/test_wrapper.sh.in - Update to allow all tests to be gathered up into a testsuite tarball and - then be run using this script. - - * build-test-tarball.mk.in - Add a Make script to build a tarball of all the test binaries and the test - wrapper script. This is useful for cross compiling; you can build the - binaries, build test test tarball and transfer the test tarball to the - target machine for testing. - -2009-09-26 Erik de Castro Lopo - - * src/common.h src/*.c - Modify SF_FILE struct to allow it to carry either 8-bit or 16-bit strings - for the file path, directory and name. Fixes for this change throughout. - - * src/windows.c src/Makefile.am - New file defining new windows only public function sf_wchar_open() which - takes a 'const wchar_t *' string (LPCWSTR) for the file name parameter. - - * src/sndfile.h.in - Add SF_CHANNEL_MAP_ABISONIC_* entries. - Add windows only defintion for sf_wchar_open(). - - * src/create_symbols_file.py - Add sf_wchar_open() to the list of public symbols (windows only). - - * tests/locale_test.c - Add a wchar_test() to test sf_wchar_open(). - -2009-09-25 Erik de Castro Lopo - - * src/common.h src/*.c - Split file stuff into PSF_FILE struct within the SF_PRIVATE struct. - -2009-09-23 Erik de Castro Lopo - - * src/aiff.c src/voc.c - When a byte is needed, use unsigned char. - - * src/ima_oki_adpcm.c src/broadcast.c src/test_ima_oki_adpcm.c - Include sfconfig.h to prevent compile errors with MinGW compilers. - - * configure.ac - Remove AM_CONFIG_HEADER due to warnings from autoconf 2.64. - - * tests/locale_test.c - Update to work with xx_XX.UTF-8 style locales. Refactoring. - -2009-09-22 Erik de Castro Lopo - - * configure.ac - Set __USE_MINGW_ANSI_STDIO to 1 when compiling using MinGW compilers. - Remove unneeded AC_SUBST. - Report Host CPU/OS/vendor. - -2009-09-19 Erik de Castro Lopo - - * src/sndfile.c - Fix error message string. - - * src/flac.c - Add 88200 to the list of supported sample rates. - - * src/ogg.c - Fix compiler warning when using gcc-4.5.0. - - * programs/sndfile-info.c tests/utils.tpl - Remove WIN32 snprintf #define. - - * src/ima_adpcm.c - Fix minor bug in aiff_ima_encode_block. Thanks to Denis Fileev for finding - this. - -2009-09-16 Erik de Castro Lopo - - * src/caf.c - Use the correct C99 format specifier for int64_t. - - * M4/endian.m4 - Fix detection of CPU endian-ness when cross compiling. Thanks to Pierre - Ossman for the bug report. - - * src/caf.c src/sndfile.c - Fix reading and writing of PEAK chunks in CAF files. - - * tests/peak_chunk_test.c tests/test_wrapper.sh.in - Run peak_chunk_test on CAF files. - -2009-09-15 Erik de Castro Lopo - - * src/aiff.c src/wav.c - Use the correct C99 format specifier for int64_t. - -2009-08-30 Erik de Castro Lopo - - * src/rf64.c src/sndfile.c src/wav.c src/wav_w64.h - Apply a patch (massaged slightly) from Uli Franke adding handling of the - BEXT chunk in RF64 files. - - * tests/command_test.c - Update channel_map_test() function so WAV test passes. - - * src/rf64.c - Add channel mapping and ambisonic support. - - * src/sndfile.h - Add comments showing correspondance between libsndfile channel map - defintiions and those used by Apple and MS. - - Add handling of reading/writing channel map info. - - * tests/command_test.c tests/test_wrapper.sh.in - Update channel map tests. - -2009-07-29 Erik de Castro Lopo - - * src/common.h - Add function psf_isprint() a replacement for the standard C isprint() - function which ignores any locale settings and treats all input as ASCII. - - * src/(aiff|common|rf64|sd2|strings|svx|wav).c - Use psf_isprint() instead of isprint(). - -2009-07-13 Erik de Castro Lopo - - * src/command.c - Add string descriptions for SF_FORMAT_RF64 and SF_FORMAT_MPC2K. - -2009-06-30 Erik de Castro Lopo - - * programs/sndfile-play.c - Allow use of Open Sound System audio output under FreeBSD. - -2009-06-24 Erik de Castro Lopo - - * configure.ac - Add patch from Conrad Parker to add --disable-jack. - -2009-05-28 Erik de Castro Lopo - - * src/alaw.c src/float32.c src/htk.c src/pcm.c src/sds.c src/ulaw.c - Fix bugs where invalid files can cause a divide by zero error (SIGFPE). - Thanks to Sami Liedes for reporting this a Debian bug #530831. - -2009-05-26 Erik de Castro Lopo - - * src/chanmap.[ch] - New files for channel map decoding/encoding. - -2009-05-25 Erik de Castro Lopo - - * configure.ac src/sndfile.h.in - Fix MSVC definition of sf_count_t. - -2009-05-24 Erik de Castro Lopo - - * src/wav_w64.[ch] - Add wavex_channelmask to WAV_PRIVATE struct and add a function to convert - an array of SF_CHANNEL_MASK_* values into a bit mask for use in WAV files. - - * src/wav.c - Add ability to write the channel mask. - -2009-05-23 Erik de Castro Lopo - - * programs/sndfile-info.c - Add -c command line option to dump the channel map information. - - * src/wav_w64.c - Don't bail from parser if channel map bitmask is faulty. - - * src/common.h src/sndfile.c - Remove error code SFE_W64_BAD_CHANNEL_MAP which is not needed any more. - - * src/sndfile.c - On SFC_SET_CHANNEL_MAP_INFO pass the channel map command down to container's - command handler. - -2009-05-22 Erik de Castro Lopo - - * src/sndfile.h.in src/common.h src/sndfile.c src/wav_w64.c - Apply a patch from Lennart Poettering (PulseAudio) to allow reading of - channel data in WAV and W64 files. - Add a test for the above. - -2009-05-20 Erik de Castro Lopo - - * src/FAQ.html - Update the section about pre-compiled binaries for Win64. - -2009-05-14 Erik de Castro Lopo - - * src/common.h src/test_conversions.c - Be more careful when including so compiling on pre-C99 platforms - (hello Slowlaris) might actually work. - - * NEWS README doc/*.html - Updates for 1.0.20. - -2009-04-21 Erik de Castro Lopo - - * src/voc.c - Fix a bug whereby opening a specially crafted VOC file could result in a - heap overflow. Thanks to Tobias Klein (http://www.trapkit.de) for reporting - this issue. - - * src/aiff.c - Fix potential (heap) buffer overflow when parsing 'MARK' chunk. - -2009-04-12 Erik de Castro Lopo - - * tests/stdin_test.c - Check psf->error after opening file. - - * src/file_io.c - Fix obscure seeking bug reported by Hugh Secker-Walker. - - * tests/utils.tpl - Add check of sf_error to test_open_file_or_die(). - - * src/sndfile.c - Clear error if opening resource fork fails. - -2009-04-11 Erik de Castro Lopo - - * tests/alaw_test.c tests/locale_test.c tests/ulaw_test.c - Cleanup output. - -2009-03-25 Erik de Castro Lopo - - * src/float32.c - Fix f2s_clip_array. - -2009-03-24 Erik de Castro Lopo - - * src/float32.c - In host_read_f2s call convert instead of f2s_array. - - * src/ima_adpcm.c - Remove dead code. - - * src/test_ima_oki_adpcm.c examples/generate.c tests/dither_test.c - tests/dwvw_test.c tests/fix_this.c tests/generate.c - tests/multi_file_test.c - Minor fixes. - -2009-03-23 Erik de Castro Lopo - - * M4/shave.m4 shave.in - Pulled update from upstream. - -2009-03-19 Erik de Castro Lopo - - * doc/api.html - Add pointers to example programs in source code tarball. - -2009-03-17 Erik de Castro Lopo - - * src/common.h - Define SF_PLATFORM_S64 for non-gcc compilers with 'long long' type. - - * configure.ac - Add documentation for --disable-external-libs and improve error handling - for that option. - - * src/sndfile.c src/sndfile.h.in src/create_symbols_file.py - Add public function sf_version_string. - - * tests/sfversion.c - Test function sf_version_string. - - * M4/shave.m4 shave-libtool.in shave.in - Add new files from 'git clone git://git.lespiau.name/shave'. - - * configure.ac - Enable shave. - - * src/Makefile.am src/binheader_writef_check.py Octave/* - Shave related tweaks. - -2009-03-15 Erik de Castro Lopo - - * src/common.h src/caf.c src/sndfile.c - Add SF_MAX_CHANNELS (set to 256) and use it. - - * src/sndfile.h.in - Check for either _MSCVER or _MSC_VER being defined. - -2009-03-04 Erik de Castro Lopo - - * tests/vorbis_test.c - Relax test slighly to allow test to pass on more CPUs etc. - -2009-03-03 Erik de Castro Lopo - - * configure.ac - Detect vorbis_version_string() correctly. - -2009-03-02 Erik de Castro Lopo - - * doc/index.html - Add a 'See Also' section with a link to sndfile-tools. - - * NEWS README doc/*.html - Updates for 1.0.19 release. - - * configure.ac - Fix --enable-external-libs logic. - -2009-03-01 Erik de Castro Lopo - - * src/aiff.c - Fix resource leak and potential read beyond end of buffer. - - * src/nist.c - Fix reading of header value sample_n_bytes. - - * src/sd2.c src/wav.c - Fix potential read beyond end of buffer. - - * src/sndfile.c src/svx.c - Check return values of file_io functions. - - * tests/win32_test.c - Fix resource leak. - - * configure.ac - Detect the presence/absence of vorbis_version_string() in libvorbis. - - * src/ogg.c - Only call vorbis_version_string() from libvorbis if present. - -2009-02-24 Erik de Castro Lopo - - * tests/win32_test.c - Don't use sprintf, even on windows. - - * src/aiff.c src/rf64.c src/wav.c - Eliminate dead code, more validation of data read from file. - -2009-02-22 Erik de Castro Lopo - - * src/ima_adpcm.c - Clamp values to a valid range before indexing ima_step_size array. - - * src/GSM610/*.c tests/*c programs/*.c src/audio_detect.c - Don't include un-needed headers. - - * programs/sndfile-info.c - Remove dead code. - - * tests/test_wrapper.sh.in - Add 'set -e' so the script exits on error. - - * src/test_ima_oki_adpcm.c - Fix read beyond end of array. - - * tests/win32_test.c - Add missing close on file descriptor. - - * src/nist.c programs/sndfile-metadata-set.c - Fix 'unused variable' warnings. - - * src/aiff.c - Fix potential memory leak in handling of 'MARK' chunk. - Remove un-needed test (unsigned > 0). - - * src/sd2.c - Improve handling of heap allocated buffer. - - * src/sndfile.c - Remove un-needed test (always true). - - * src/wav.c src/rf64.c - Ifdef out dead code that will be resurected some time in the future. - - * src/wav.c src/w64.c src/xi.c - Handle error return values from psf_ftell. - - * src/wav_w64.c - Fix handling and error checking of MSADPCM coefficient arrays. - - * regtest/*.c - Bunch of fixes. - - * src/test_file_io.c - Use snprintf instead of strncpy in test program. - -2009-02-21 Erik de Castro Lopo - - * src/sd2.c - Validate data before using. - - * src/caf.c - Validate channels per frame value before using, fixing a possible integer - overflow bug, leading to a possible heap overflow. Found by Alin Rad Pop of - Secunia Research (CVE-2009-0186). - -2009-02-20 Erik de Castro Lopo - - * Octave/octave_test.sh - Unset TERM environment variable and export LD_LIBRARY_PATH. - -2009-02-16 Erik de Castro Lopo - - * src/file_io.c - In windows code, cast LPVOID to 'char*' in printf. - -2009-02-15 Erik de Castro Lopo - - * M4/octave.m4 - Clear the TERM environment before evaluating anything in Octave. This works - around problems that might occur if a users TERM settings are incorrect. - Thanks to Rob Til Freedmen for helping to debug this. - - * src/wav.c - Handle four zero bytes as a marker within a LIST or INFO chunk. - Thanks to Rogério Brito for supplying an example file. - -2009-02-14 Erik de Castro Lopo - - * src/common.h src/*.c - Use C99 snprintf everywhere. - -2009-02-11 Erik de Castro Lopo - - * tests/test_wrapper.sh.in - New file to act as the template for the test wrapper script. - - * configure.ac - Generate tests/test_wrapper.sh from the template. - - * tests/Makefile.am - Replace all tests with a single invocation of the test wrapper script. - -2009-02-09 Erik de Castro Lopo - - * src/ogg.c - Record vorbis library version string. - - * configure.ac - Require libvorbis >= 1.2.2. - - * M4/endian.m4 - Fix bracketing of function for autoconf 2.63. Thanks to Richard Ash. - - * M4/octave.m4 M4/mkoctfile_version.m4 - Clean up AC_WITH_ARG usage using AC_HELP_STRING. - -2009-02-08 Erik de Castro Lopo - - * Octave/Makefile.am - Use $(top_buildir) instead of $(builddir) which may not be defined. - - * M4/octave.m4 - Improve logic and status reporting. - -2009-02-07 Erik de Castro Lopo - - * configure.ac AUTHORS NEWS README doc/*.html - Final tweaks for 1.0.18 release. - -2009-02-03 Erik de Castro Lopo - - * programs/sndfile-convert.c - Add 'htk' to the list of convert formats. - - * programs/sndfile-info.c - Simplify get_signal_max using SFC_CALC_SIGNAL_MAX command. - Increase size of files for which signal max will be calculated. - -2009-01-14 Erik de Castro Lopo - - * doc/index.html - Fix links for SoX and WavPlay. Thanks to Daniel Griscom. - -2009-01-11 Erik de Castro Lopo - - * programs/sndfile-metadata-get.c - Make valgrind clean. - Clean up temp string array usage. - Error out if trying to update coding history in RDWR mode. - -2009-01-10 Erik de Castro Lopo - - * doc/index.html - Fix links to versions of the LGPL. - -2008-12-14 Erik de Castro Lopo - - * tests/string_test.c - Add test for RDWR mode where the file ends up shorter than when it was - opened. - - * src/wav.c - Truncate the file on close for RDWR mode where the file ends up shorter - than when it was opened. - -2008-11-30 Erik de Castro Lopo - - * M4/add_cflags.m4 - Fix problem with quoting of '#include'. - - * M4/add_cxxflags.m4 configure.ac - Add new file M4/add_cxxflags.m4 and use it in configure.ac. - -2008-11-19 Erik de Castro Lopo - - * programs/sndfile-info.c - Apply patch from Conrad Parker to calculate and display total duration when - more than one file is dumped. - -2008-11-10 Erik de Castro Lopo - - * configure.ac src/Makefile.am - Tweaks to generation of Symbols files. - - * tests/win32_ordinal_test.c - Update tests for above changes. - -2008-11-06 Erik de Castro Lopo - - * programs/common.c - When merging broadcast info, make sure to clear the destination field - before copying in the new data. - - * programs/test-sndfile-metadata-set.py - Add test for the above. - - * src/broadcast.c - Fix checking of required coding_history_size. - -2008-10-28 Erik de Castro Lopo - - * tests/command_test.c - Add test to detect if coding history is truncated. - - * src/broadcast.c - Fix truncation of coding history. - -2008-10-27 Erik de Castro Lopo - - * tests/command_test.c - Add broadcast_coding_history_size test. - - * programs/*.[ch] - Use SF_BROADCAST_INFO_VAR to manipulate larger 'bext' chunks. - - * src/rf64.c - Add code to prevent infinite loop on malformed file. - - * src/common.h src/sndfile.c src/w64.c src/wav_w64.c - Rationalize and improve error handling when parsing 'fmt ' chunk. - - * M4/octave.m4 - Simplify and remove cruft. - Check for correct Octave version. - - * Octave/* - Reduce 3 C++ files to one, fix build for octave 3.0, fix build. - - * Octave/sndfile.cc Octave/PKG_ADD - Add Octave function sfversion which returns the libsndfile version that the - module is linked against. - - * Octave/Makefile.am - Bunch of build and 'make distcheck' fixes. - -2008-10-26 Erik de Castro Lopo - - * programs/common.c - Return 1 if SFC_SET_BROADCAST_INFO fails. - - * programs/test-sndfile-metadata-set.py - Update for new programs directory, exit on any error. - - * tests/error_test.c - Fix failure behaviour in error_number_test. - - * src/common.h src/sndfile.c - Add error number SFE_BAD_BROADCAST_INFO_SIZE. - - * src/* - Reimplement handling of broadcast extentioon chunk in WAV/WAVEX files. - - * src/broadcast.c - Fix generation of added coding history. - -2008-10-25 Erik de Castro Lopo - - * programs/sndfile-metadata-get.c programs/sndfile-info.c - Exit with non-zero on errors. - -2008-10-21 Erik de Castro Lopo - - * examples/sndfile-to-text.c examples/Makefile.am - Add a new example program and hook it into the build. - - * examples/ programs/ - Add a new directory programs and move sndfile-info, sndfile-play and other - real programs to the new directory, leaving example programs where they - were. - -2008-10-20 Erik de Castro Lopo - - * tests/Makefile.am - Automake 1.10 MinGW cross compiling fixes. - -2008-10-19 Erik de Castro Lopo - - * examples/sndfile-play.c - Remove call to deprecated function snd_pcm_sw_params_get_xfer_align. - Fix gcc-4.3 compiler warnings. - - * tests/command_test.c - Fix a valgrind warning. - - * tests/error_test.c tests/multi_file_test.c tests/peak_chunk_test.c - tests/pipe_test.tpl tests/stdio_test.c tests/win32_test.c - Fix gcc-4.3 compiler warnings. - -2008-10-17 Erik de Castro Lopo - - * src/broadcast.c - Fix termination of desitination string in strncpy_crlf. - When copying BROADCAST_INFO chunk, make sure destination gets correct line - endings. - - * examples/common.c - Fix copying of BROADCAST_INFO coding_history field. - -2008-10-13 Erik de Castro Lopo - - * tests/command_test.c - Add test function instrument_rw_test, but don't hook it into the testing - yet. - - * src/common.h src/command.c src/sndfile.c src/flac.c - Error code rationalization. - - * src/common.h src/sndfile.c - Set psf->error to SFE_CMD_HAS_DATA when adding metadata via sf_command() - fails due to psf->have_written being true. - - * doc/command.html - Document the SFC_GET/SET_BROADCAST_INFO comamnds. - -2008-10-10 Erik de Castro Lopo - - * tests/command_test.c - Improve error reporting when '\0' is found in coding history. - Fix false failure. - -2008-10-09 Erik de Castro Lopo - - * src/broadcast.c - Convert all coding history line endings to \r\n. - - * tests/command_test.c - Add test to make sure all line endings are converted to \r\n. - -2008-10-08 Erik de Castro Lopo - - * src/broadcast.c - Changed the order of coding history fields. - - * tests/command_test.c - Update bextch test to cope with previous change. - - * examples/common.c - Add extra length check when copying broadcast info data. - -2008-10-05 Erik de Castro Lopo - - * tests/utils.tpl tests/pcm_test.tpl - Update check_file_hash_or_die to use 64 bit hash. - - * tests/checksum_test.c tests/Makefile.am - Add new checksum_test specifically for lossy compression of headerless - files. - -2008-10-04 Erik de Castro Lopo - - * src/gsm610.c - Seek to psf->dataoffset before decoding first block. - - * src/sndfile.c - Fix detection of mpc2k files on big endian systems. - -2008-10-03 Erik de Castro Lopo - - * src/broadcast.c - Use '\r\n' newlines in Coding History as required by spec. - -2008-10-02 Erik de Castro Lopo - - * src/test_conversions.c - Use int64_t instead of 'long long'. - -2008-10-01 Erik de Castro Lopo - - * examples/sndfile-metadata-set.c - Remove --bext-coding-history-append command line option because it didn't - really make sense. - - * examples/sndfile-metadata-(get|set).c - Add usage messages. - - * examples/test-sndfile-metadata-set.py - Start work on test coding history. - -2008-09-30 Erik de Castro Lopo - - * README doc/win32.html - Bring these up to date. - - * src/aiff.c - Fix parsing of REX files. - -2008-09-29 Erik de Castro Lopo - - * src/file_io.c - Use intptr_t instead of long for return value of _get_osfhandle. - - * src/test_conversions.c src/test_endswap.tpl - Fix printing of int64_t values. - - * examples/sndfile-play.c - Fix win64 issues. - - * tests/win32_ordinal_test.c - Fix calling of GetProcAddress with ordinal under win64. - - * tests/utils.tpl - Fix win64 issues. - -2008-09-25 Erik de Castro Lopo - - * examples/* - Rename copy_data.[ch] to common.[ch]. Fix build. - Move code from sndfile-metadata-set.c to common.c. - - * examples/Makefile.am tests/Makefile.am regtest/Makefile.am - Clean paths. - -2008-09-19 Erik de Castro Lopo - - * doc/tutorial.html doc/Makefile.am - Add file doc/tutorial.html and hook into build/dist system. - -2008-09-14 Erik de Castro Lopo - - * examples/sndfile-metadata-set.c - Clean up handling of bext command line params. - -2008-09-13 Erik de Castro Lopo - - * src/w64.c - Add handling/skipping of a couple of new chunk types. - -2008-09-09 Erik de Castro Lopo - - * configure.ac - Add -funsigned-char to CFLAGS if the compiler supports it. - - * examples/sndfile-metadata-(get|set).c - Add handling for more metadata types. - -2008-09-04 Erik de Castro Lopo - - * src/common.h - Add macros SF_CONTAINER, SF_CODEC and SF_ENDIAN useful for splitting format - field of SF_INFO into component parts. - - * src/*.c - Use new macros everywhere it is appropriate. - -2008-09-02 Erik de Castro Lopo - - * examples/sndfile-bwf-set.c - Massive reworking. - -2008-08-24 Erik de Castro Lopo - - * examples/sndfile-bwf-set.c - Add --info-auto-create-date command line option. - - * examples/sndfile-metadata-set.c examples/sndfile-metadata-get.c - examples/Makefile.am examples/test-sndfile-bwf-set.py - Rename sndfile-bwf-(set|get).c to sndfile-metadata-(set|get).c. - Change command line args. - -2008-08-23 Erik de Castro Lopo - - * src/wav.c - Allow 'PAD ' chunk to be modified in RDWR mode. - - * src/sndfile.h.in src/sndfile.c - Add handling (incomplete) for SFC_SET_ADD_HEADER_PAD_CHUNK. - - * tests/Makefile.am tests/write_read_test.tpl tests/header_test.tpl - tests/misc_test.c - Add tests for RF64. - - * src/rf64.c - Fixes to make sure all tests pass. - - * tests/Makefile.am tests/string_test.c - Add string tests (not yet passing). - -2008-08-22 Erik de Castro Lopo - - * src/rf64.c - First pass at writing RF64 now working. - -2008-08-21 Erik de Castro Lopo - - * examples/sndfile-convert.c - Add SF_FORMAT_RF64 to format_map. - - * src/common.h src/sndfile.c - More RF64 support code. - - * examples/sndfile-bwf-set.c - Fix the month number in autogenerated date string and use hypen in date - instead of slash. - - * examples/test-sndfile-bwf-set.py - Update tests. - - * examples/sndfile-info.c - When called with -i or -b option, operate on all files on command line, not - just the first. - -2008-08-19 Erik de Castro Lopo - - * src/rf64.c - New file to handle RF64 (WAV like format supportting > 4Gig files). - - * src/sndfile.h.in src/common.h src/sndfile.c src/Makefile.am - Hook the above into build so hacking can begin. - - * src/pcm.c - Improve log message when pcm_init fails. - - * src/sndfile-info.c - Only calculate and print 'Signal Max' if file is less than 10 megabytes in - length. - -2008-08-18 Erik de Castro Lopo - - * tests/string_test.c - Polish string_multi_set_test. - - * src/wav.c - In RDWR mode, pad the header if necessary (ie LIST chunk has moved or - length has changed). - Minor fixes in wav_write_strings. - Write PAD chunk with default endian-ness, not a specific endian-ness. - - * examples/test-sndfile-bwf-set.py - Add Python script to test sndfile-bwf-set/get. - - * examples/sndfile-bwf-set.c - Clean up and fixes. - - * src/wav.c - Merge function wavex_write_header into wav_write_header, deleting about 70 - lines of code. - - * src/common.h - Double value of SF_MAX_STRINGS. - - * tests/string_test.c - Add string tests for WAVEX and RIFX files. - - * tests/command_test.c - Add broadcast test for WAVEX files. - -2008-08-17 Erik de Castro Lopo - - * tests/string_test.c - Add a new string_rdwr_test (currently failing for WAV). - Add a new string_multi_set_test (currently failing). - - * tests/command_test.c - Add new broadcast_rdwr_test (currently failing). - - * src/wav.c - Fix to WAV parser to allow 'bext' chunk to be updated in place. - In wav_write_tailer, seek to psf->dataend if its greater than zero. - - * src/sndfile.c - Make sure psf->have_written gets set correctly in mode SFM_RDWR. - - * configure.ac - Test for and gettimeofday. - - * src/common.c - Use gettimeofday() to initialize psf_rand_int32. - - * src/common.h src/sndfile.c - Add unique_id field to SF_PRIVATE struct. - - * src/common.h src/sndfile.c src/wav.c src/wav_w64.[ch] - Move wavex_ambisonic field from SF_PRIVATE struct to WAV_PRIVATE struct. - - * src/common.h src/strings.c - Add function psf_location_string_count. - -2008-08-16 Erik de Castro Lopo - - * configure.ac - Test for localtime and localtime_r. - - * examples/sndfile-convert.c - In function copy_metadata(), copy broadcast info if present. - - * examples/copy_data.[ch] examples/Makefile.am - Break some functionality out of sndfile-convert.c so it can be used in - examples/sndfile-bwf-set.c. - - * tests/utils.tpl - Add new function create_short_sndfile(). - - * examples/sndfile-bwf-set.c examples/sndfile-bwf-get.c - examples/Makefile.am - Add new files and hook into build. - -2008-08-11 Erik de Castro Lopo - - * src/sndfile.h.in - Fix comments. Patch from Mark Glines. - -2008-07-30 Erik de Castro Lopo - - * tests/misc_test.c - Use zero_data_test on Ogg/Vorbis files. - - * src/ogg.c - Fix segfault when closing an Ogg/Vorbis file that has been opened for write - but had no actual data written to it. Bug reported by Chinoy Gupta. - - * tests/Makefile.am - Make sure to run mist_test on Ogg/Vorbis files. - -2008-07-19 Erik de Castro Lopo - - * regtest/Makefile.am - Use SQLITE3_CFLAGS to locate sqlite headers. - -2008-07-10 Erik de Castro Lopo - - * doc/index.html doc/FAQ.html - Add notes about which versions of windows libsndfile works on. - -2008-07-03 Erik de Castro Lopo - - * tests/misc_test.c - Add a test for correct handling of Ambisonic files. Thanks to Fons - Adriaensen for the test. - - * src/wav.c src/wav_w64.c - Fix handling of Ambisonic files. Thanks to Fons Adriaensen for the patch. - -2008-06-29 Erik de Castro Lopo - - * configure.ac - Fix detection/enabling of external libs. - - * M4/extra_pkg.m4 M4/Makefile.am - Add m4 macro PKG_CHECK_MOD_VERSION which is a hacked version - PKG_CHECK_MODULES. The new macro prints the version number of the package - it is searching for. - -2008-06-14 Erik de Castro Lopo - - * src/aiff.c - Apply a fix from Axel Röbel where if the second loop in the instrument - chunk is none, the loop mode is written into the first loop. - -2008-05-31 Erik de Castro Lopo - - * src/test_float.c src/test_main.(c|h) src/Makefile.am - Add new file to test functions float32_(le|be)_(read|write) and - double64_(le|be)_(read|write). Hook into build and testsuite. - - * src/double64.c src/float32.c - Fix bugs in functions found by test added above. Thanks to Nicolas Castagne - for reporting this bug. - - * src/sndfile.h.in - Change time_reference_(low|high) entries of SF_BROADCAST_INFO struct to - unsigned. - - * examples/sndfile-info.c - Print out the BEXT time reference in a sensible format. - -2008-05-21 Erik de Castro Lopo - - * src/*.c - Fuzz fixes. - - * src/ogg.c - Add call to ogg_stream_clear to fix valgrind warning. - - * src/aiff.c - Fix x86_64 compile issue. - - * configure.ac src/Makefile.am src/flac.c src/ogg.c - Link to external versions of FLAC, Ogg and Vorbis. - - * tests/lossy_comp_test.c tests/ogg_test.c tests/string_test.c - tests/vorbis_test.c tests/write_read_test.tpl - Fix tests when configured with --disable-external-libs. - - * tests/external_libs_test.c tests/Makefile.am - Add new test and hook into build and test suite. - - * src/command.c - Use HAVE_EXTERNAL_LIBS to ensure that the SFC_GET_FORMAT_* commands return - the right data when external libs are disabled. - -2008-05-11 Erik de Castro Lopo - - * tests/write_read_test.tpl - Add a test for extending a file during write by seeking past the current - end of file. - - * src/sndfile.c - Allow seeking past end of file during write. - -2008-05-10 Erik de Castro Lopo - - * doc/api.html doc/command.html - Move all information about the sf_command function to command.html and add - a link from documentation of the sf_read/write_raw function to the - SFC_RAW_NEEDS_ENDSWAP command. - - * doc/index.html doc/FAQ.html doc/libsndfile.css - Minor documentation tweaks. - -2008-05-09 Erik de Castro Lopo - - * configure.ac - Add AM_PROG_CC_C_O. - -2008-04-27 Erik de Castro Lopo - - * tests/error_test.c - Add a test to make sure if file opened with sf_open_fd, and then the file - descriptor is closed, then sf_close will return an error code. Thanks to - Dave Flogeras for the bug report. - - * src/sndfile.c - Make sf_close return an error is the file descriptor is already closed. - -2008-04-19 Erik de Castro Lopo - - * configure.ac - Set object format to aout for OS/2. Thanks to David Yeo. - - * src/mpc2k.c src/sndfile.c src/sndfile.h.in src/common.h src/Makefile.am - Add ability to read MPC 2000 file. - - * tests/write_read_test.tpl tests/misc_test.c tests/header_test.tpl - tests/Makefile.am - Add tests for MPC 2000 file format. - - * examples/sndfile-convert.c - Allow conversion to MPC 2000 file format. - -2008-04-17 Erik de Castro Lopo - - * src/VORBIS/lib/codebook.c - Sync from upstream SVN. - - * autogen.sh configure.ac - Minor tweaks. - -2008-04-13 Erik de Castro Lopo - - * src/ogg.c - Add a patch that fixes finding the length in samples of an Ogg/Vorbis file. - The patch as supplied segfaulted and required many hours of debugging. - - * src/OGG/bitwise.c - Sync from upstream SVN. - -2008-04-09 Erik de Castro Lopo - - * src/aiff.c - Fix up handling of 'APPL' chunk. Thanks to Axel Röbel for bringing up - this issue. - -2008-04-06 Erik de Castro Lopo - - * tests/*.c - Add calls to sf_close() where needed. - - * tests/utils.tpl tests/multi_file_test.c - Always pass 0 as the third argument to open when OS_IS_WIN32. - -2008-04-03 Erik de Castro Lopo - - * src/test_* - Add files test_main.[ch]. - Collapse all tests into a single executable. - -2008-03-30 Erik de Castro Lopo - - * src/FLAC - Sync to upstream CVS. - -2008-03-25 Erik de Castro Lopo - - * src/common.h - Make SF_MIN and SF_MAX macros MinGW friendly. - - * examples/sndfile-(info|play).c - Use Sleep function from instead of _sleep. - - * tests/locale_test.c - Disable some tests when OS_IS_WIN32. - - * src/FLAC/src/share/replaygain_anal/replaygain_analysis.c - src/FLAC/src/share/utf8/utf8.c - MinGW fixes. - -2008-03-11 Erik de Castro Lopo - - * doc/FAQ.html - Tweaks to pcm16 <-> float conversion answer. - -2008-02-10 Erik de Castro Lopo - - * src/OGG - Sync to SVN upstream. - - * Makefile.am - Add 'DISTCHECK_CONFIGURE_FLAGS = --enable-gcc-werror'. - -2008-02-05 Erik de Castro Lopo - - * examples/sndfile-jackplay.c - Minor tweaks to warning message printed when compiled without libjack. - -2008-01-27 Erik de Castro Lopo - - * tests/peak_chunk_test.c - Improve read_write_peak_test to find more errors. Inspired by example - provided by Nicolas Castagne. - - * src/aiff.c - Another SFM_RDWR fix shown up by above test. - -2008-01-24 Erik de Castro Lopo - - * src/aiff.c - Fix reading of COMM encoding string. - - * src/chunk.c src/common.h src/Makefile.am - New file for storing and retrieving info about header chunks. Hook into - build. - - * src/aiff.c - Use new chunk logging to fix problem with AIFF in RDWR mode. - -2008-01-22 Erik de Castro Lopo - - * src/command.c - Add WVE to the list of major formats. - - * tests/aiff_rw_test.c - Fix error reporting. - -2008-01-21 Erik de Castro Lopo - - * src/common.[ch] - Add internal functions str_of_major_format, str_of_minor_format, - str_of_open_mode and str_of_endianness. - - * tests/write_read_test.tpl - Fix reporting of errors in new_rdwr_XXXX_test. - -2008-01-20 Erik de Castro Lopo - - * examples/sndfile-play.c - Apply patch from Yair K. to fix compiles with OSS v4. - - * src/common.h src/float32.c src/double64.c - Rename psf->float_enswap to psf->data_endswap. - - * src/sndfile.h.in src/sndfile.c src/pcm.c - Add command SFC_RAW_NEEDS_ENDSWAP. - - * tests/command.c - Add test for SFC_RAW_NEEDS_ENDSWAP. - - * doc/command.html - Document SFC_RAW_NEEDS_ENDSWAP. - - * tests/peak_chunk_test.c - Add test function read_write_peak_test. Thanks to Nicolas Castagne for the - bug report. - -2008-01-09 Erik de Castro Lopo - - * examples/sndfile-cmp.c - Add new example program contributed by Conrad Parker. - - * examples/Makefile.am - Hook into build. - - * doc/development.html - Change use or reconfigure.mk to autogen.sh. - -2008-01-08 Erik de Castro Lopo - - * tests/win32_test.c - Add another win32 test. - - * tests/util.tpl - Add function file_length_fd which wraps fstat. - - * tests/Makefile.am - Run the multi_file_test on AU files. - - * tests/multi_file_test.c - Use function file_length_fd() instead of file_length() to overcome stupid - win32 bug. Fscking hell Microsoft sucks so much. - -2008-01-05 Erik de Castro Lopo - - * src/sd2.c - Fix a rsrc parsing bug. Example file supplied by Uli Franke. - -2007-12-28 Erik de Castro Lopo - - * doc/index.html - Allow use of either LGPL v2.1 or LGPL v3. - - * tests/header_test.tpl - Add header_shrink_test from Axel Röbel. - - * src/wav.c - Add fix from Axel Röbel for writing files with float data but no peak - chunk (ie peak chunk gets removed after the file is opened). - - * src/aiff.c tests/header_test.tpl - Apply similar fix to above for AIFF files. - - * src/wav.c tests/header_test.tpl - Apply similar fix to above for WAVEX files. - - * src/command.c - Add Ogg/Vorbis to 'get format' commands. - -2007-12-16 Erik de Castro Lopo - - * src/ogg.c - Fix seeking on multichannel Ogg Vorbis files. Reported by Bodo. - Set the default encoding quality to 0.4 instead of 4.0 (Bodo again). - - * tests/ogg_test.c - Add stereo seek tests. - -2007-12-14 Erik de Castro Lopo - - * tests/ogg_test.c - Add a test (currently failing) for stereo seeking on Ogg Vorbis files. Test - case supplied by Bodo. - - * tests/utils.(def|tpl) - Add compare_XXX_or_die functions. - -2007-12-05 Erik de Castro Lopo - - * src/aiff.c - Fix a bug where ignoring ssnd_fmt.offset and ssnd_fmt.blocksize caused - misaligned reading of 24 bit data. Thanks to Uli Franke for reporting this. - -2007-12-03 Erik de Castro Lopo - - * src/vox_adpcm.c src/ima_oki_adpcm.[ch] src/Makefile.am - Merge in code from the vox-patch branch. Thanks to Robs for the patch - which fixes a long standing bug in the VOX codec. - -2007-12-01 Erik de Castro Lopo - - * examples/sndfile-convert.c - Fix handling of -override-sample-rate=X option. - -2007-11-25 Erik de Castro Lopo - - * src/ogg.c src/VORBIS - Merge in Ogg Vorbis support from John ffitch of the Csound project. - -2007-11-24 Erik de Castro Lopo - - * src/sndfile.c - Recognise files with 'vox6' extension as 6kHz OKI VOX ADPCM files. Also - recognise 'vox8' as and 'vox' as 8kHz files. - - * configure.ac - Detect libjack (JACK Audio Connect Kit). - - * examples/sndfile-jackplay.c examples/Makefile.am - Add new example program to play sound files using the JACK audio server. - Thanks to Jonatan Liljedahl for allowing this to be included. - -2007-11-21 Erik de Castro Lopo - - * doc/index.html - Update support table with SD2 and FLAC. - -2007-11-17 Erik de Castro Lopo - - * src/sndfile.c - Fix calculation of internal value psf->read_current when attempting to read - past end of audio data. - Remove redundant code. - - * tests/lossy_comp_test.c - Add read_raw_test to check that raw reads do not go past the end of the - audio data section. - Clean up error output messages. - - * src/sndfile.c - Add code to prevent sf_read_raw from reading past the end of the audio data. - - * tests/Makefile.am - Add the wav_pcm lossy_comp_test. - -2007-11-16 Erik de Castro Lopo - - * configure.ac src/Makefile.am src/create_symbols_file.py - More OS/2 fixes from David Yeo. - -2007-11-12 Erik de Castro Lopo - - * src/file_io.c tests/utils.tpl tests/benchmark.tpl - Improve handling of requirements for O_BINARY as suggested by Ed Schouten. - -2007-11-11 Erik de Castro Lopo - - * src/common.h - Fix symbol class when SF_MIN is nested inside SF_MAX or vice versa. - - * src/create_symbols_file.py - Add support for OS/2 contributed by David Yeo. - -2007-11-05 Erik de Castro Lopo - - * M4/gcc_version.m4 - Add macro AC_GCC_VERSION to detect GCC_MAJOR_VERSION and GCC_MINOR_VERSION. - - * configure.ac - Use AC_GCC_VERSION to work around gcc-4.2 inline warning stupidity. - See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33995 - Use -fgnu-inline to prevent stupid warnings. - -2007-11-03 Erik de Castro Lopo - - * tests/util.tpl - Increase the printing width for print_test_name(). - - * tests/command_test.c tests/Makefile.am - Add tests for correct updating of broadcast WAV coding history. - - * examples/sndfilehandle.cc examples/Makefile.am - Add example program using the C++ SndfileHandle class. - -2007-10-29 Erik de Castro Lopo - - * src/common.h src/sndfile.c - Add error codes SFE_ZERO_MAJOR_FORMAT and SFE_ZERO_MINOR_FORMAT. - -2007-10-26 Erik de Castro Lopo - - * src/sd2.c - Identify sample-rate/sample-size/channels by resource id. - -2007-10-25 Erik de Castro Lopo - - * src/broadcast.c src/common.h src/sndfile.c - Improvements to handling of broadcast info in WAV files. Thanks to Frederic - Cornu and other for their input. - -2007-10-24 Erik de Castro Lopo - - * src/FLAC/include/share/alloc.h - Mingw fix for SIZE_T_MAX from Uli Franke. - -2007-10-23 Erik de Castro Lopo - - * tests/open_fail_test.c tests/error_test.c tests/Makefile.am - Move tests from open_fail_test.c to error_test.c and remove the former. - -2007-10-22 Erik de Castro Lopo - - * tests/scale_clip_test.(def|tpl) - Add tests for SFC_SET_INT_FLOAT_WRITE command. - - * doc/command.html - Add docs for SFC_SET_INT_FLOAT_WRITE command. - - * examples/sndfile-play.c tests/dft_cmp.c - Fix gcc-4.2 warning messages. - -2007-10-21 Erik de Castro Lopo - - * src/sndfile.h.in src/sndfile.c - Add command SFC_GET_CURRENT_SF_INFO. - - * src/sndfile.h.in src/sndfile.c src/create_symbols_file.py - Remove function sf_get_info (only ever in pre-release code). - - * tests/command_test.c - Add test for SFC_GET_CURRENT_SF_INFO. - -2007-10-15 Erik de Castro Lopo - - * src/wav.c - Add parsing of 'exif' chunks. Originally coded by Trent Apted. - - * configure.ac - Put config stuff in Cfg directory. - Remove check for inttypes.h. - -2007-10-10 Erik de Castro Lopo - - * src/w64.c - Fix writing of 'riff' chunk length and check for correct value in parser. - -2007-09-20 Erik de Castro Lopo - - * doc/index.html - Link to MP3 FAQ entry. - -2007-09-18 Erik de Castro Lopo - - * src/flac.c - Move the blocksize check to an earlier stage of flac_buffer_copy. - -2007-09-12 Erik de Castro Lopo - - * src/FLAC - Huge merge from FLAC upstream. - -2007-09-10 Erik de Castro Lopo - - * examples/*.c - Change license to all example programs to BSD. - -2007-09-08 Erik de Castro Lopo - - * src/FLAC/include/FLAC/metadata.h - Include to prevent compile error on OSX. - - * Octave/octave_test.sh - Disable test on OSX. Can't get it to work. - - * src/flac.c - Check the blocksize returned from the FLAC decoder to prevent buffer - overruns. Reported by Jeremy Friesner. Thanks. - -2007-09-07 Erik de Castro Lopo - - * Makefile.am M4/octave.m4 - Fix build when Octave headers are not present. - -2007-08-27 Erik de Castro Lopo - - * doc/development.html - Add note about bzr repository directory looking empty. - -2007-08-26 Erik de Castro Lopo - - * configure.ac Octave/* M4/octave_* - Bunch of changes to add ability to build GNU Octave modules to read/write - sound files using libsndfile from Octave. - -2007-08-23 Erik de Castro Lopo - - * acinclude.m4 configure.ac ... - Get rid of acinclude.m4 and replace it with an M4 directory. - -2007-08-21 Erik de Castro Lopo - - * src/sndfile.h.in - Remove crufty Metrowerks compiler support. Allow header file to be compiled - on windows with both GCC and microsoft compiler. - -2007-08-19 Erik de Castro Lopo - - * tests/dft_cmp.[ch] tests/floating_point_test.tpl - Clean up floating point tests. - -2007-08-14 Erik de Castro Lopo - - * src/aiff.c - Fix segfault when COMM chunk length is byte swapped. - -2007-08-09 Erik de Castro Lopo - - * src/common.h src/mat4.c src/mat5.c src/sndfile.c - Add a generic SFE_CHANNEL_COUNT_ZERO error, remove format specific errors. - - * src/au.c - Fix crash on AU files with zero channel count. Reported by Ben Alison. - -2007-08-08 Erik de Castro Lopo - - * src/voc.c - Fix bug in handling file supplied by Matt Olenik. - -2007-07-31 Erik de Castro Lopo - - * src/OGG - Merge from OGG upstream sources. - -2007-07-25 Erik de Castro Lopo - - * src/FLAC - Merge from FLAC upstream sources. - -2007-07-15 Erik de Castro Lopo - - * src/flac.c - Fix memory leak; set copy parameter to FALSE in call to - FLAC__metadata_object_vorbiscomment_append_comment. - - * src/common.[ch] - Add function psf_rand_int32(). - -2007-07-14 Erik de Castro Lopo - - * src/FLAC - Merge from FLAC upstream sources. - - * src/strings.c tests/string_test.c tests/Makefile.am - Make sure string tests for SF_STR_LICENSE actually works. - -2007-07-13 Erik de Castro Lopo - - * tests/string_test.c - Add ability to test strings stored in metadata secion of FLAC files. - - * src/string.c - Fix logic for testing if audio data has been written and string is added. - Make sure SF_STR_ALBUM actually works. - - * src/flac.c - Finalize reading/writing string metadata. Tests pass. - - * src/sndfile.h.in tests/string_test.c src/flac.c - Add string type SF_STR_LICENSE, update test and use for FLAC files. - - * src/sndfile.h.in - Add definition for SFC_SET_SCALE_FLOAT_INT_WRITE command. - - * src/common.h src/double64.c src/float32.c src/sndfile.c - Add support for SFC_SET_SCALE_FLOAT_INT_WRITE (still needs testing). - -2007-07-12 Erik de Castro Lopo - - * src/flac.c - Apply patch from Ed Schouten to read artist and title metadata from FLAC - files. - Improve reporting of FLAC metadata. - - * src/sndfile.h.in tests/string_test.c src/flac.c - Add string type SF_STR_ALBUM, update test and use for FLAC files. - -2007-06-28 Erik de Castro Lopo - - * src/FLAC/* - Merge from upstream CVS. - -2007-06-16 Erik de Castro Lopo - - * src/FLAC/* - Update from upstream CVS. - -2007-06-14 Erik de Castro Lopo - - * tests/cpp_test.cc - Add extra tests for when the SndfileHandle constructor fails. - - * src/sndfile.hh - Make sure failure to open the file in the constructor does not allow later - calls to other methods to fail. - -2007-06-10 Erik de Castro Lopo - - * tests/util.tpl - Add function write_mono_file. - - * tests/generate.[ch] tests/Makefile.am - Add files generate.[ch] and hook into build. - - * tests/write_read_test.tpl - Add multi_seek_test. - - * src/flac.c - Fix buffer overflow bug. Test provided by Jeremy Friesner and fix provided - by David Viens. - -2007-06-07 Erik de Castro Lopo - - * doc/FAQ.html - Minor update. - - * configure.ac src/FLAC/src/libFLAC/ia32/Makefile.am src/Makefile.am - Apply patch from Trent Apted make it compile on Intel MacOSX. Thanks Trent. - -2007-05-28 Erik de Castro Lopo - - * src/wav.c - Fix writing of MSGUID subtypes. Thanks to Bruce Sharpe. - -2007-05-22 Erik de Castro Lopo - - * src/wav.c - Fix array indexing bug raised by Bruce Sharpe. - -2007-05-12 Erik de Castro Lopo - - * src/FLAC/src/share/getopt/getopt.c - Fix Mac OSX / PowerPC compile warnings. - - * configure.ac - Make sure WORDS_BIGENDIAN gets correctly defined for FLAC code. - -2007-05-04 Erik de Castro Lopo - - * doc/FAQ.html - Add Q/A about MP3 support. - -2007-05-03 Erik de Castro Lopo - - * doc/new_file_type.HOWTO - Minor updates. - -2007-05-02 Erik de Castro Lopo - - * src/wve.c - Fix a couple bad parameters with psf_log_printf. - - * src/pcm.c - Improve error reporting. - - * src/common.h src/common.c - Constify psf_hexdump. - -2007-04-30 Erik de Castro Lopo - - * src/FLAC - Ditch and re-import required FLAC code. - - * configure.ac - Force FLAC__HAS_OGG variable to 1. - - * src/FLAC/src/libFLAC/stream_encoder.c - Fix compiler warnings. - -2007-04-23 Erik de Castro Lopo - - * configure.ac tests/win32_ordinal_test.c - Detect if win32 DLL is beging generated and only run win32_ordinal_test if - true. - - * src/G72x/Makefile.am src/Makefile.am - Use $(EXEEXT) where possible. - -2007-04-18 Erik de Castro Lopo - - * src/wve.c src/common.h src/sndfile.c - Complete definition of SfE_WVE_NO_WVE error message. - - * src/wve.c - Fix error in files generated on big endian systems. Robustify parsing. - -2007-04-16 Erik de Castro Lopo - - * src/double64.c - Fix clipping of double to short conversions on 64 bit systems. - - * src/flac.c regtest/database.c tests/cpp_test.cc - Fix compile warnings for 64 bit systems. - -2007-04-15 Erik de Castro Lopo - - * src/wav.c src/wav_w64.c - Use audio detect function when 'fmt ' chunk data is suspicious. - - * configure.ac - Add ugly hack to remove -Werror from some Makefiles. - -2007-04-14 Erik de Castro Lopo - - * src/GSM610/long_term.c src/macbinary3.c tests/cpp_test.cc - Add patch from André Pang to clean up compiles on OSX. - - * src/wve.c src/common.h src/sndfile.c src/sndfile.h.in - examples/sndfile-convert.c - Merge changes from Reuben Thomas to improve WVE support. - - * tests/lossy_comp_test.c tests/Makefile.am - Add tests for WVE files. - -2007-04-11 Erik de Castro Lopo - - * src/sndfile.hh - Add a static SndfileHandle::formatCheck method as suggested by Jorge - Jiménez. - -2007-04-09 Erik de Castro Lopo - - * src/sndfile.c - Fixed a bug in sf_error() where the function itself was being compared - against zero. Add a check for a NULL return from peak_info_calloc. Fix a - possible NULL dereference. - -2007-04-07 Erik de Castro Lopo - - * src/flac.c - Turn off seekable flag when writing, return SFE_BAD_RDWR_FORMAT when - opening file for RDWR. - - * src/sndfile.c - Improve error message for SFE_BAD_RDWR_FORMAT. - - * src/mat4.c - Fix array indexing issue. Thanks to Ben Allison (Nullsoft) for alerting me. - -2007-03-05 Erik de Castro Lopo - - * doc/FAQ.html - Add Q/A 19 on project files. - -2007-03-01 Erik de Castro Lopo - - * src/sndfile.c - Guard agains MacOSX universal binary compiles. - - * doc/FAQ.html - Add Q/A 18 and clean up Q3. - -2007-02-22 Erik de Castro Lopo - - * src/aiff.c - Add support for 'in24' files. - -2007-02-13 Erik de Castro Lopo - - * src/wav.c src/wav_w64.c src/wav_w64.h - Start work towards detecting ausio codec type from the actual audio data. - - * src/audio_detect.c src/test_audio_detect.c - Add new file and its unit test. - -2007-02-07 Erik de Castro Lopo - - * examples/cooledit-fixer.c examples/Makefile.am - Remove old broken example program. - -2007-02-06 Erik de Castro Lopo - - * src/sndfile.c src/sndfile.h.in src/create_symbols_file.py - Add function sf_get_info. - -2007-01-25 Erik de Castro Lopo - - * examples/sndfile-play.c - For ALSA, use the 'default' device instead of 'plughw:0'. - -2007-01-22 Erik de Castro Lopo - - * src/sndfile.c - Allow writing of WAV/WAVEX 'BEXT' chunks in SFM_RDWR mode. - -2007-01-21 Erik de Castro Lopo - - * doc/development.html doc/embedded_files.html man/sndfile-play.1 - Minor documentation fixes. Thanks Reuben Thomas. - -2006-12-16 Erik de Castro Lopo - - * examples/sndfile-convert.c - Add -override-sample-rate command line option. - -2006-11-19 Erik de Castro Lopo - - * tests/misc_test.c - Force errno to zero at start of some tests. - - * src/sndfile.c - Minor clean up of error handling. - - * configure.ac - Remove an assembler test which was failing on OSX. - -2006-11-15 Erik de Castro Lopo - - * src/common.h - Fix the definition of SF_PLATFORM_S64 for MinGW. - - * src/FLAC/Makefile.am src/FLAC/share/grabbag/Makefile.am - Fix path problems for MinGW. - -2006-11-13 Erik de Castro Lopo - - * src/sfendian.h - Add include guard. - - * src/Makefile.am src/flac.c - Clean up include paths. - - * src/test_conversions.c - New file to test psf_binheader_readf/writef functions. - - * src/Makefile.am src/test_file_io.c src/test_log_printf.c src/common.c - Clean up unit testing. - - * src/common.c - Fix a bug reading/writing 64 bit header fields. Thanks to Jonathan Woithe - for reporting this. - - * src/test_conversions.c - Complete unit test for above fix. - -2006-11-11 Erik de Castro Lopo - - * src/sndfile.c - More refactoring to clean up psf_open_file() and vairous sf_open() - functions. - -2006-11-09 Erik de Castro Lopo - - * src/wav.c - Apply a patch from Jonathan Woithe to allow opening of (malformed) WAV - files of over 4 gigabytes. - -2006-11-05 Erik de Castro Lopo - - * src/sndfile.c - Refactor function psf_open_file() to provide a single return point. - - * tests/misc_test.c - Fix permission_test to ensure that read only file can be created. - -2006-11-03 Erik de Castro Lopo - - * src/common.h - Add SF_PLATFORM_S64 macro as a platform independant way of doing signed 64 - bit integers. - - * src/aiff.c src/svx.c src/wav.c - Add warning in log if files are larger than 4 gigabytes in size. - -2006-11-01 Erik de Castro Lopo - - * src/FLAC src/OGG confgure.ac src/Makefile.am - Pull in all required FLAC and OGG code so external libraries are not - needed. This makes compiling on stupid fscking Windoze easier. - -2006-10-27 Erik de Castro Lopo - - * src/sd2.c - Add workaround for switched sample rate and sample size. - - * src/wav.c - Add workaround for excessively long coding history in the 'bext' chunk. - -2006-10-23 Erik de Castro Lopo - - * src/sndfile.h.in src/sndfile.c src/wav.c doc/command.html - Use SF_AMBISONIC_* instead of SF_TRUE/SF_FALSE. - -2006-10-22 Erik de Castro Lopo - - * src/sndfile.h.in src/wav.c src/wav_w64.c src/common.h doc/command.html - Apply a patch from Fons Adriaensen to allow writing on WAVEX Ambisonic - files. Still needs a little tweaking before its ready for release. - - * src/*.c - Use the UNUSED macro to prevent compiler warnings. - -2006-10-19 Erik de Castro Lopo - - * src/aiff.c - Fix a bug in parsing AIFF files with a slightly unusual 'basc' chunk. Thanks - to David Viens for providing two example files. - - * src/common.(c|h) src/aiff.c - Add a function psf_sanitize_string and use it in aiff.c. - -2006-10-18 Erik de Castro Lopo - - * src/wav_w64.c - Apply a patch from Fons Adriaensen which fixes a minor WAVEX GUID issue. - -2006-10-17 Erik de Castro Lopo - - * src/Makefile.am - Fix problem related to recent test coverage changes. - -2006-10-15 Erik de Castro Lopo - - * configure.ac tests/Makefile.am - Add --enable-test-coverage configure option. - -2006-10-05 Erik de Castro Lopo - - * src/sndfile.hh - Add an std::string SndfileHandle constructor. - - * tests/scale_clip_test.tpl - Fix the 'make distcheck' target. - -2006-10-03 Erik de Castro Lopo - - * src/double64.c src/float32.c - Add optional clipping on float file data to int read data conversions. - - * tests/tests/scale_clip_test.(def|tpl) - Add test for above new code. - -2006-09-06 Erik de Castro Lopo - - * tests/aiff_rw_test.c - Add 'MARK' chunks to make sure they are parsed correctly. - -2006-09-05 Erik de Castro Lopo - - * src/aiff.c - Fix parsing of MARK chunks. Many thanks to Sciss for generating files to - help debug the problem. - -2006-09-02 Erik de Castro Lopo - - * src/common.h - Make the SF_MIN and SF_MAX macros at least partially type safe. - - * tests/lossy_comp_test.c - Fix overflow problems when ensuring that signalis not zero. - -2006-08-31 Erik de Castro Lopo - - * configure.ac docs/*.html - Changes for release 1.0.17. - -2006-08-08 Erik de Castro Lopo - - * src/flac.c - Remove inline from functions called by pointer. Thanks to Sampo Savolainen - for notifying me of this. - -2006-07-31 Erik de Castro Lopo - - * src/sndfile.hh - Add writeSync method. - Add copy constructor and assignment operator (thanks Daniel Schmitt). - Add methods readRaw and writeRaw. - Make read/write/readf/writef simple overlaods instead of templates (thanks - to Trent Apted for suggesting this). - - * tests/cpp_test.cc - Cleanup. Add tests. - -2006-07-30 Erik de Castro Lopo - - * src/sndfile.hh - Templatize the read/write/readf/writef methods as suggested by Lars Luthman. - Prevent the potential leak of SNDFILE* pointers in the openRead/openWrite/ - openReadWrite methods. - Add const to SF_INFO pointer in Sndfile constructor. - Make the destrictor call the close() method. - - * tests/cpp_test.cc - Add more tests. - -2006-07-29 Erik de Castro Lopo - - * tests/cpp_test.cc - Remove the generated file so "make distcheck" passes. - - * src/Makefile.am - Add sndfile.hh to distributed header files. - - * src/sndfile.hh - Change the license for the C++ wrapper to modified BSD. - -2006-07-28 Erik de Castro Lopo - - * src/sndfile.hh - Complete it. - - * tests/cpp_test.cc - Add more tests. - -2006-07-27 Erik de Castro Lopo - - * tests/utils.tpl - Add extern C to generated header file. - - * src/sndfile.hh - Work towards completing this. - - * tests/cpp_test.cc tests/Makefile.am - Add a C++ test and hook into build. - - * configure.ac - Add appropriate CXXFLAGS. - -2006-07-26 Erik de Castro Lopo - - * configure.ac - Test if compiler supports -Wpointer-arith. - - * src/common.c - Fix a warning resulting from -Wpointer-arith. - -2006-07-15 Erik de Castro Lopo - - * examples/sndfile-play.c - Explicitly set endian-ness as well as setting 16 bit output. - - * examples/sndfile-info.c - Make sure to parse info if file fails to open. - - * src/sndfile.c - Handle parse error a little better. - - * src/wav_w64.[ch] - Minor clean up, add detection of IPP ITU G723.1. - -2006-06-23 Erik de Castro Lopo - - * src/sndfile.c - Make sure psf->dataoffset gets reset to zero when openning headersless - files based on the file name extension. - -2006-06-21 Erik de Castro Lopo - - * tests/(command|lossy_comp|pcm|scale_clip)_test.c tests/fix_this.c - tests/write_read_test.(tpl|def) - Fix gcc-4.1 compiler warnings about "dereferencing type-punned pointer will - break strict-aliasing rules". - - * examples/cooledit-fixer.c - More fixes like above. - -2006-06-20 Erik de Castro Lopo - - * src/file_io.c - Fix a windows bug where the syserr string of SF_PRIVATE was not being set - correctly. - - * src/sndfile.c - Fixed a logic bug in sf_seek(). Thanks to Paul Davis for finding this. - -2006-06-04 Erik de Castro Lopo - - * configure.ac - Fixed detection of S_IRGRP. - -2006-05-30 Erik de Castro Lopo - - * sndfile-convert.c - Add conversion SF_INSTRUMENT data when present. - -2006-05-22 Erik de Castro Lopo - - * doc/development.html - Removed references to tla on windows. - - * src/common.h src/sndfile.c - Add separate void pointers for file containter and file codec data to - SF_PRIVATE struct. Still need to move all existing fdata pointers. - - * tests/write_read_test.tpl - Change the order of some tests. - - * src/aiff.c - When writing 'AIFC' files, make sure get an 'FVER' gets added. - - * src/common.h src/(dwvw|flac|g72x|gsm610|ima_adpcm|ms_adpcm|paf|sds).c - src/(sndfile|voc|vox_adpcm|xi).c - Remove fdata field from SF_PRIVATE struct and replace it with codec_data. - -2006-05-10 Erik de Castro Lopo - - * Win32/testprog.c Win32/Makefile.am - Add a minimal win32 test program. - - * Win32/README-precompiled-dll.txt Mingw-make-dist.sh - Update readme and Mingw build script. - -2006-05-09 Erik de Castro Lopo - - * configure.ac acinclude.m4 - Minor fixes for Solaris. - -2006-05-05 Erik de Castro Lopo - - * src/test_endswap.(def|tpl) - Fix printf formatting for int64_t on 64 bit machines. - -2006-05-04 Erik de Castro Lopo - - * src/binhead_check.py - New file to check for bad parameters passed to psf_binheader_writef(). - - * src/Makefile.am - Hook into test suite. - - * src/voc.c src/caf.c src/wav.c src/mat5.c src/mat4.c - Fix bugs found by new test program. - - * src/double64.c - Clean up double64_get_capability(). - -2006-05-03 Erik de Castro Lopo - - * src/wav_w64.c - Fix a bug on x86_64 where an int was being passed via stdargs and being - read using size_t which is 64 bits. Thenks to John ffitch for giving me a - login on his box. - -2006-05-02 Erik de Castro Lopo - - * src/caf.c src/double64.c examples/sndfile-info.c tests/virtual_io_test.c - tests/utils.tpl - Fix a couple of signed/unsigned problems. - -2006-05-01 Erik de Castro Lopo - - * tests/command_test.c - Add channel map tests. - - * src/common.h src/sndfile.c - Add a pointer to the SF_PRIVATE struct and make sure it gets freed in - sf_close(). - -2006-04-30 Erik de Castro Lopo - - * configure.ac doc/(command|index|api).html NEWS README - Updates for 1.0.16 release. - - * src/sndfile.h.in - Define enums for channel mapping. - - * examples/sndfile-info.c - Clean up usage of SF_INFO struct. - -2006-04-29 Erik de Castro Lopo - - * tests/util.tpl - Add function testing function exit_if_true(). - - * tests/floating_point_test.tpl - Fix a problem where the test program was not exiting when the test failed. - -2006-04-15 Erik de Castro Lopo - - * src/sndfile.h.in src/sndfile.c src/common.h src/command.c - Implement new commands SFC_GET_SIGNAL_MAX and SFC_GET_MAX_ALL_CHANNELS. - - * doc/commands.html - Document new commands. Other minor updates. - - * tests/peak_chunk_test.c - Update tests for new commands. - -2006-04-02 Erik de Castro Lopo - - * tests/peak_chunk_test.c - Add test for RIFX and WAVEX files. - Try and confuse the PEAK chunk writing by enabling and disabling it. - - * src/sndfile.c - Fix a bug where enabling and disabling PEAK chunk was screwing up. - -2006-03-31 Erik de Castro Lopo - - * src/sndfile.h.in - Add the block of 190 reserved bytes into this struct to allow for - future expansion. - - * src/wav.c src/sndfile.c src/broadcast.c - Significant cleanup of broadcast wave stuff. - - * examples/sndfile-info.c - Fix print message. - - * tests/command_test.c tests/Makefile.am - Complete bext tests, hook test in test suite. - -2006-03-30 Erik de Castro Lopo - - * src/sndfile.h.in - Make coding_history field of SF_BROADCAST_INFO struct a char array instead - of a char pointer. - - * src/sndfile.c src/common.h src/wav.c - Clean up knock on effects of above chnage. - - * examples/sndfile-info.c - Add -b command line option to usage message. - Clean up output of broadcast wave info. - - * src/wav.c - Ignore and skip the 'levl' chunk. - -2006-03-26 Erik de Castro Lopo - - * configure.ac - Fix handling of --enable and --disable configure args. Thanks to Diego - 'Flameeyes' Pettenò who sent the patch. - -2006-03-22 Erik de Castro Lopo - - * doc/win32.html - Make it really clear that although the MSVC++ cannot compile libsndfile, - the precompiled DLL can be used in C++ programs compiled with MSVC++. - -2006-03-18 Erik de Castro Lopo - - * src/aiff.c - Fix bug in writing of INST chunk in AIFF files. - Fix potential bug in writing MARK chunks. - - * src/sndfile.c - Make sure the instrument chunk can only be written at the start of the file. - - * tests/command_test.c - Add check of log buffer. - - * tests/utils.tpl - Add usage of space character to psf_binheader_writef. - -2006-03-17 Erik de Castro Lopo - - * src/Makefile.am tests/Makefile.am - Remove --source-time argument from autogen command lines. - - * src/broadcast.c - New file for EBU Broadcast chunk in WAV files. - - * src/sndfile.c src/sndfile.h.in src/wav.c src/common.h - Add patch from Paul Davis implementing read/write of the BEXT chunk. - -2006-03-16 Erik de Castro Lopo - - * Win32/README-precompiled-dll.txt - New file descibing how to use the precompiled DLL. - - * Win32/Makefile.am - Add Win32/README-precompiled-dll.txt to EXTRA_DIST files. - - * configure.ac - Bump version to 1.0.15. - -2006-03-11 Erik de Castro Lopo - - * src/wav.c - On read, only add the endian flag if the file is big endian. - - * src/ms_adpcm.c - Fixed writing of APDCM coeffs in RIFX files. - - * tests/write_read_test.tpl tests/lossy_comp_test.c - Add tests for RIFX files. - -2006-03-10 Erik de Castro Lopo - - * Mingw-make-dist.sh - Bunch of improvements. - - * doc/win32.html - Update MinGW program versions. - -2006-03-09 Erik de Castro Lopo - - * src/create_symbols_file.py - Fix the library name in created win32 DEF file. Add correct DLL name for - Cygwin DLL. - - * Win32/Makefile.am tests/Makefile.am - Remove redundant files, add win32_ordinal_test to test suite. - - * tests/win32_ordinal_test.c - Update to do test in cygsndfile-1.dll as well. - - * doc/win32.html - Fix typo, mention that -mno-cygwin with the Cygwin compiler does not work. - - * src/wav.c src/wav_w64.c src/sndfile.c src/sndfile.h.in - Apply large patch from Jesse Chappell which adds support for RIFX files. - -2006-03-08 Erik de Castro Lopo - - * Makefile.am - Add Mingw-make-dist.sh to the extra dist files. - - * configure.ac - Fix setting SHLIB_VERSION_ARG for MinGW. - - * tests/win32_ordinal_test.c - New test program to test that the win32 DLL ordinals agree with the DEF - file. - -2006-03-04 Erik de Castro Lopo - - * src/common.h - Add a static inline function to convert an int to a size_t. This will be - a compile to nothing on 32 bit CPUs and a sign extension on 64 bit CPUs. - - * src/aiff.c src/avr.c src/common.c src/xi.c src/gsm610.c - Fix an ia64 problem where a varargs function was being passed an int in - some places and a size_t in other places. - - * src/sd2.c - Add a workaround for situations where OSX seems to add an extra 0x52 bytes - to the start of the resource fork. - -2006-02-19 Erik de Castro Lopo - - * Mingw-make-dist.sh - Add a shell script to build the windows binary/source ZIP file. - - * doc/index.html - Add download link for windows binary/source ZIP file. Add links for GPG - signatures. - - * doc/win32.html - Remove info about building using microsoft compiler. - - * configure.ac - Bump version to 1.0.14. - -2006-02-11 Erik de Castro Lopo - - * src/sd2.c - Improve logging of errors in resource fork parser. - -2006-01-31 Erik de Castro Lopo - - * Win32/Makefile.msvc - Replace au_g72x.* with g72x.*. Thanks to ussell Borogove. - -2006-01-29 Erik de Castro Lopo - - * src/common.c - Make sure return values are initialised header buffer is full. - - * src/wav.c - Add workarounds for messed up WAV files. - -2006-01-21 Erik de Castro Lopo - - * Win32/config.h - Undef HAVE_INTTYPES_H for win32. - - * tests/command_test.c - Don't exit on error in instrument test for XI files. - - * configure.ac - Bump version to 1.0.13. - - * doc/*.html NEWS README - Update version numbers. - -2006-01-19 Erik de Castro Lopo - - * src/xi.c - Start work on add read/write of instrument chunks. - - * src/command_test.c - Add tests for XI instrument chunk. - - * tests/largefile_test.c tests/Makefile.am - Add new test and hook it into the build system. This test will not be run - automatically because it requires 3 Gig of disk space and takes 3 minutes - to run. - -2006-01-10 Erik de Castro Lopo - - * examples/sndfile-play.c - Fix calculation of samples remaining in win32 code. Thanks Axel Röbel. - - * src/common.h - Make sure length of header buffer can hold header plus strings. Thanks Axel - Röbel. - -2006-01-09 Erik de Castro Lopo - - * src/sndfile.h.in src/aiff.c src/wav.c - Apply a patch from John ffitch (Csound project). - Add detune field to SF_INSTRUMENT struct. - Add reading/writing instrument chunks to WAV files. - - * tests/command_test.c - Update SF_INSTRUMENT tests. - - * tests/Makefile.am - Hook instrument tests into test suite. - -2006-01-05 Erik de Castro Lopo - - * configure.ac - Check for because some broken systems (like Solaris) don't have - which is the 1999 ISO C standard file containing int64_t. - - * src/sfendian.h src/common.h - Use if is not available. - -2005-12-30 Erik de Castro Lopo - - * tests/peak_chunk_test.c - Extend and clean up tests. - - * src/sndfile.c - Fix a bug that prevented the turning off of PEAK chunks. - -2005-12-29 Erik de Castro Lopo - - * tests/error_test.c - Make the test distclean correct. - - * src/file_io.c - Fix an SD2 MacOSX bug (reported by vince schwarzinger). - -2005-12-28 Erik de Castro Lopo - - * src/aiff.c tests/command_test.c - Apply a big patch from John ffitch (Csound project) to add reading and - writing of instrument chunks to AIFF files. Also update the test. - -2005-12-10 Erik de Castro Lopo - - * tests/aiff_rw_test.c tests/virtual_io_test.c tests/utils.tpl - Move test function dump_data_to_file() to utils.tpl. - - * tests/error_test.c tests/Makefile.am - Updates, including a new test to test that sf_error() returns a valid error - number. - -2005-12-07 Erik de Castro Lopo - - * examples/list_formats.c - Make sure the SF_INFO struct is memset to all zero before being used. - Thanks to Stephen F. Booth. - - * src/sndfile.c - Make the return value of sf_error() match the API documentation. - -2005-11-19 Erik de Castro Lopo - - * examples/sndfile-convert.c - Allow conversion to raw gsm610. - - * src/common.h src/sndfile.c src/au.c - Remove au_nh_open() and all references to it (wasn't working anyway). - - * tests/headerless_test.c - Add new test for file extension based detection. - - * src/sndfile.c - Rejig file extension based file type detection. - -2005-11-16 Erik de Castro Lopo - - * src/sndfile.c - Add "gsm" as a recognised file extension when no magic number can be found. - - * tests/lossy_comp_test.c tests/Makefile.am - Test headerless GSM610. - -2005-11-13 Erik de Castro Lopo - - * doc/api.html - Fix a minor typo and a minor error. Thanks Christoph Kobe and John Pavel. - -2005-10-30 Erik de Castro Lopo - - * src/wav_w64.c - Add more reporting of 'fmt ' chunk for G721 encoded files. - - * src/wav.c - Gernerate a more correct 20 byte 'fmt ' chunk rather than a 16 byte one. - -2005-10-29 Erik de Castro Lopo - - * src/G72x/g72x.[ch] - Minor cleanup of interface. - -2005-10-28 Erik de Castro Lopo - - * src/ogg.c - Removed the horribly broken and non-functional OGG implementation when - --enable-experimental was enabled. When OGG does finally work it will be - merged. - - * src/caf.c - Fix a memory leak. - -2005-10-27 Erik de Castro Lopo - - * src/g72x.c src/G72x/*.(c|h) src/common.h src/sndfile.c src/wav.c src/au.c - Add support for G721 encoded WAV files. - - * doc/index.html - Update support matrix. - - * tests/lossy_comp_test.c - For file formats that support it, add string data after the audio data and - make sure it isn't treated as audio data on read. - - * src/gsm610.c - Add code to ensure that the container close function (ie for WAV files) gets - called after the codec's close function. This allows GSM610 encoded WAV files - to have string data following the audio data. - Add an AIFF specific check on psf->datalength. - - * src/wav.c - Simplify wav_close function. - - * src/aiff.c - Make sure the tailer data gets written at an even file offset. Pad if - necessary. - - * src/common.h - Replace the close function pointer in SF_PRIVATE with separate functions - codec_close and container_close. The former is always called first. - - * src/*.c - Fix knock on effects of above. - -2005-10-26 Erik de Castro Lopo - - * examples/sndfile-info.c - Complete dumping SF_INSTRUMENT data. - - * src/dwvw.c src/ima_adpcm.c src/gsm610.c src/ms_adpcm.c - Add extra checks in *_init function. - - * tests/lossy_comp_test.c - Add a string comment to the end of the files to make sure that the decoder - doesn't decode beyond the end of the audio data section. - -2005-10-25 Erik de Castro Lopo - - * examples/sndfile-info.c - Minor code cleanup. - Start work on dumping SF_INSTRUMENT data. - -2005-10-23 Erik de Castro Lopo - - * src/sndfile.h.in src/common.h src/common.c - Update definition of SF_INSTRUMENT struct and create a function to allocate - and initialize the struct (input from David Viens). - Clean up definition of SF_INSTRUMENT struct. - - * src/wav.c src/wav_w64.c - Add support for Ambisoncs B WAVEX files (David Viens). - - * src/aiff.c src/wav.c src/wav_w64.c - Start work on reading/writing the SF_INSTRUMENT data. - - * src/sndfile.c - Add code to get and set SF_INSTRUMENT data. - - * tests/command_test.* tests/Makefile.am - Add test for set and getof SF_INSTRUMENT data. - The file command_test.c is no longer autogen generated. - -2005-10-15 Erik de Castro Lopo - - * src/gsm610.c - Minor cleanup. - -2005-10-14 Erik de Castro Lopo - - * tests/lossy_comp_test.c - Minor cleanup. - -2005-10-13 Erik de Castro Lopo - - * src/*.c - Ensure sfconfig.h is included before any other header file. - - * src/file_io.c - Add comments documenting the three sections of the file. - - * src/gsm610.c - Make sure SF_FORMAT_WAVEX are handled correctly. - -2005-10-07 Erik de Castro Lopo - - * configure.ac - Add options to allow disabling of FLAC and ALSA. Suggested by Ben Greear. - -2005-09-30 Erik de Castro Lopo - - * tests/locale_test.c - Modify the way the unicode strings were encoded so that older compilers - do not complain. Thanks Axel Röbel. - - * configure.ac - Bump the version to 1.0.12 for release. - - * NEWS README Win32/config.h doc/(FAQ|index.html|command|api).html - Update version numbers. - -2005-09-26 Erik de Castro Lopo - - * src/flac.c - Fix valgrind error and minor cleanup. - -2005-09-25 Erik de Castro Lopo - - * src/(au|paf|aiff|w64|wav|svx).c - Make sure structs are initialised. - -2005-09-24 Erik de Castro Lopo - - * configure.ac - Make -Wdeclaration-after-statement work with --enable-gcc-werror configure - option. - Add -std=gnu99 (C99 plus posix style stuff like gmtime_r) to CFLAGS if the - compiler supports it. - -2005-09-23 Erik de Castro Lopo - - * configure.ac acinclude.m4 - Add -Wdeclaration-after-statement to CFLAGS if the compilers supports it. - -2005-09-22 Erik de Castro Lopo - - * tests/util.(tpl|def) - Make the test_write_*_or_die() functions const safe. - -2005-09-21 Erik de Castro Lopo - - * src/nist.c - Make sure the data offset is read from the file header. Thanks to - David A. van Leeuwen for a patch. - -2005-09-20 Erik de Castro Lopo - - * configure.ac src/sfconfig.h - Check for and the function setlocale(). - Set config variables to zero if not found. - - * tests/locale_test.c tests/Makefile.am - Add new test program and hook into build/test system. - -2005-09-18 Erik de Castro Lopo - - * src/common.h src/file_io.c - On windows, use windows specific types for file handles. - Add functions psf_init_files() and psf_use_rsrc(). - - * src/sd2.c - Make resource fork handling independant of file desciptor/handles. - - * src/sndfile.c src/test_file_io.c - Fix knock on effects. - -2005-09-06 Erik de Castro Lopo - - * src/float_cast.h - The lrint and lrintf implementations in Cygwin are both buggy and slow. - Add replacements which were pulled from the Public Domain MinGW math.h - header file. - -2005-09-05 Erik de Castro Lopo - - * tests/(lossy_comp_test|virtual_io_test).c - More Valgrind fixups. - - * configure.ac - Simplify and correct configuring for Cygwin. - - * Win32/config.h Win32/sndfile.h Win32/Makefile.msvc - Update build for MSVC. - -2005-09-04 Erik de Castro Lopo - - * tests/lossy_comp_test.c - Make sure to close SNDFILE when exiting test when file format is not seekable. - - * tests/(aiff_rw_test|virtual_io_test).c - Do a few valgrind fix ups. - -2005-09-03 Erik de Castro Lopo - - * src/float32.c src/double64.c - Replace floating point equality comparisons with greater/less comparisons. - Found by John Pavel using the Intel compiler. - - * src/sfconfig.h - New file to clean up issues surrounding autoconf generated preprocessor - symbols. - - * src/*.(c|h) tests/*.(c|tpl) examples/*.c - Fixed a bunch of other stuff found by John Pavel using the Intel compiler. - - * src/file_io.c - Remove Mac OS9 Metrowerks compiler specific hacks. - -2005-08-31 Erik de Castro Lopo - - * src/w64.c - Cast integer literal to sf_count_t in call to psf_binheader_writef() to - prevent Valgrind error. - -2005-08-30 Erik de Castro Lopo - - * doc/command.html - Improve documentation of SF_GET_FORMAT_SUBTYPE. - -2005-08-26 Erik de Castro Lopo - - * examples/sndfile-convert.c - Allow files to be converted to SD2 format. - - * src/sd2.c - Fix a bug in reading and writing of SD2 files on little endian CPUs. - Thanks to Matthew Willis for finding this. - -2005-08-25 Erik de Castro Lopo - - * doc/api.html - Update Note2 to point to SFC_SET_SCALE_FLOAT_INT_READ. - -2005-08-16 Erik de Castro Lopo - - * configure.ac - Use $host_os instead of $target_os (thanks to Mo De Jong). - -2005-08-15 Erik de Castro Lopo - - * src/Makefile.am - Apply a patch from Mo DeJong to allow building outside of the source dir. - - * src/file_io.c - Fix psf_fsync() for win32. - - * src/wav.c src/wav_w64.(c|h) - Move some code from wav.c to wav_w64.c to improve the log output of files of - type WAVE_FORMAT_EXTENSIBLE. - -2005-08-10 Erik de Castro Lopo - - * src/create_symbols_file.py - Make sure sf_write_fsync is an exported symbol. - - * examples/sndfile-convert.c - Add support for writing VOX adpcm files. - -2005-07-31 Erik de Castro Lopo - - * doc/api.html - Document the new function sf_write_sync(). - - * doc/FAQ.html - Do you plan to support XYZ codec. - -2005-07-28 Erik de Castro Lopo - - * src/sndfile.h.in src/sndfile.c - Add function sf_write_sync() to the API. - - * src/common.h src/file_io.c - Low level implementation (win32 not done yet). - - * tests/write_read_test.tpl - Use the new function in the tests. - -2005-07-24 Erik de Castro Lopo - - * src/common.h src/double64.c src/float32.c src/sndfile.c - Change the way PEAK chunk info is stored. Peaks now stored as an sf_count_t - for position and a double as the value. - - * src/aiff.c src/caf.c src/wav.c - Fix knock on effects of above changes. - - * src/caf.c - Implement 'peak' chunk for file wuth data in SF_FORMAT_FLOAT or - SF_FORMAT_DOUBLE format. - -2005-07-23 Erik de Castro Lopo - - * src/nist.c - Fix a bug where a variable was being used without being initialized. - - * src/flac.c - Add extra debug in sf_flac_meta_callback. - Make a bunch of private functions static. - - * src/aiff.c src/wav.c - Fix allocation for PEAK_CHUNK (bug found using valgrind). - -2005-07-21 Erik de Castro Lopo - - * src/common.h - Move the peak_loc field of SF_PRIVATE to the PEAK_CHUNK struct. - Remove had_peak field of SF_PRIVATE, use pchunk != NULL instead. - Rename PEAK_CHUNK and PEAK_POS to PEAK_CHUNK_32 and PEAK_POS_32. - - * src/aiff.c src/caf.c src/wav.c src/float32.c src/double64.c - Fix knock on effects from above. - -2005-07-19 Erik de Castro Lopo - - * src/wav.c - Prevent files with unknown chunks from being opened read/write. - -2005-07-14 Erik de Castro Lopo - - * src/flac.c - Do not use psf->end_of_file because it never gets set to anything. - - * src/common.h - Remove unused SF_PRIVATE field end_of_file. - -2005-07-12 Erik de Castro Lopo - - * src/common.c - Change the 'S' format specifier of psf_binheader_writef() to write AIFF - style strings (no terminating character). - - * src/aiff.c - Move to new (correct) AIFF string style. Thanks to Axel Röbel for being - so persistent on this issue. - -2005-07-11 Erik de Castro Lopo - - * src/sndfile.c - Allow SFE_UNSUPPORTED_FORMAT as an error from sf_open(). - - * doc/api.html doc/command.html - Documentation updates (thanks to Kyroz for promoting these updates). - - * src/mat5.c - Modify the way the header is written. - -2005-07-10 Erik de Castro Lopo - - * src/caf.c - Add a 'free' chunk to the written file so that the audio data starts at - an offset of 0x1000. - - * src/sndfile.c - Allow SFE_UNSUPPORTED_FORMAT as an error from sf_open(). - -2005-07-09 Erik de Castro Lopo - - * src/caf.c src/sndfile.c - Add support for signed 8 bit integers. - - * tests/write_read_test.tpl - Add test for signed 8 bit integers in CAF files. - - * doc/index.html - Update matrix for signed 8 bit integers in CAF files. - -2005-07-08 Erik de Castro Lopo - - * src/sndfile.c - Update sf_check_format() to support CAF. - - * examples/sndfile-convert.c - Add support for ".caf" file extension. - - * doc/index.html - Add Apple CAF to the support matrix. - - * src/caf.c - Add file write support. - - * src/common.c - Fix printing of Frames. - - * tests/Makefile.am tests/write_read_test.tpl tests/lossy_comp_test.c - tests/header_test.tpl misc_test.c - Add tests for CAF files. - -2005-07-07 Erik de Castro Lopo - - * doc/FAQ.html - Fix Q/A about reading/writing memory buffers. - - * src/caf.c - Bunch of work to support reading of CAF files. - -2005-07-04 Erik de Castro Lopo - - * src/(aiff|ima_adpcm|mat4|mat5|ms_adpcm).c examples/sndfile-play.c - Fix sign conversion errors reported by gcc-4.0. - - * src/caf.c - New file for Apple's Core Audio File format. - - * src/sndfile.c src/common.h src/sndfile.h.in src/Makefile.am - Hook new file into build system. - -2005-06-21 Erik de Castro Lopo - - * src_wav_w64.c - Fix handling of stupidly large 'fmt ' chunks. Thanks to Vadim Berezniker - for supplying an example file. - - * src/common.h src/sndfile.c - Remove redundant error code SFE_WAV_FMT_TOO_BIG. - -2005-06-20 Erik de Castro Lopo - - * src/sndfile.h.in src/common.h src/sndfile.c - Add public error value SF_ERR_MALFORMED_FILE. - - * src/sndfile.c - When parsing a file header fails and we don't have a system error, then set - the error number to SF_ERR_MALFORMED_FILE (suggested by Kyroz). - - * configure.ac - Allow sqlite support to be disabled in configure script. - - * regtest/database.c regtest/sndfile-regtest.c - Fix compiling when sqlite is missing. - -2005-06-11 Erik de Castro Lopo - - * src/file_io.c - Fix psf_is_pipe() and return value of psf_fread() when using virtual i/o. - - * src/sndfile.c - Fix VALIDATE_AND_ASSIGN_PSF macro for virtual i/o. - - * tests/virtual_io_test.c - Fill in skeleton test program. - - * tests/Makefile.am - Move virtual i/o tests to end of tests with stdio/pipe tests. - - * src/(sndfile.h.in|file_io.c|common.h|sndfile.c) tests/virtual_io_test.c - Rename some of the virtual i/o functions and data types. - -2005-06-10 Erik de Castro Lopo - - * src/sndfile.c - Fix the return values of sf_commands : SFC_SET_NORM_DOUBLE, - SFC_SET_NORM_FLOAT, SFC_GET_LIB_VERSION and SFC_GET_LOG_INFO. Thanks to - Kyroz for pointing out these errors. - - * doc/command.html - Correct documented return values for SFC_SET_NORM_DOUBLE and - SFC_SET_NORM_FLOAT. Thanks to Kyroz again. - -2005-05-17 Erik de Castro Lopo - - * regtest/* - Add new files for sndfile-regtest program. - - * configure.ac Makefile.am - Hook regetest into build. - - * src/wav.c src/common.c - Fix a regression where long ICMT chunks were causing the WAV parser - to exit. - -2005-05-15 Erik de Castro Lopo - - * libsndfile.spec.in - Add html docs to the files section as suggested by Karsten Jeppesen. - - * src/aiff.c - Fix parsing of odd length ANNO chunks. - -2005-05-13 Erik de Castro Lopo - - * src/common.h - Change the include guard to prevent clashes with other code. - -2005-05-12 Erik de Castro Lopo - - * examples/sndfile-play.c - Improve error handling in code for playback under Linux/ALSA. - -2005-05-10 Erik de Castro Lopo - - * src/ircam.c - Fix writing of IRCAM files on big endian systems (thanks to Axel Röbel). - - * src/wav.c - Add workaround for files created by the Peak audio editor on Mac which can - produce files with very short LIST chunks (thanks to Jonathan Segel who - supplied the file). - -2005-04-30 Erik de Castro Lopo - - * src/aiff.c - Apply a patch From David Viens to make the parsing of basc chunks more - robust. - - * src/wav.c - Another patch from David Viens to write correct wavex channel masks for - the most common channel configurations. - -2005-04-08 Erik de Castro Lopo - - * src/command.c - Only allow FLAC in the format arrays if FLAC is enabled. Thanks to - Leigh Smith. - -2005-03-09 Erik de Castro Lopo - - * src/common.h - Add a directory field for storing the file directory to the SF_PRIVATE - struct. - - * src/sndfile.c - Grab the directory name when copying the file path. - - * src/file_io.c - Cleanup psf_open_rsrc() and also check for resource fork in - .AppleDouble/filename. - -2005-03-01 Erik de Castro Lopo - - * src/svx.c - Fix a bug in the printing of the channel count. Bug reported by Michael - Schwendt. Thanks. - -2005-01-26 Erik de Castro Lopo - - * src/paf.c - Fix a seek bug for 24 bit PAF files. - - * tests/write_read_test.tpl - Update write_read_test to trigger the previously hidden PAF seek bug. - -2005-01-25 Erik de Castro Lopo - - * src/aiff.c src/w64.c src/wav.c - Do not return a header parse error when the log buffer overflows. - Continuing parsing works even on files where the log buffer does overflow. - This avoids a bug on some weirdo WAV (and other) files. - - * src/common.h src/sndfile.c - Remove SFE_LOG_OVERRIN error and its associated error message. - - * src/file_io.c - Fix a rsrc fork problem on MacOSX. - -2004-12-31 Erik de Castro Lopo - - * src/sndfile-play.c - In the ALSA output code, added call to snd_pcm_drain() just before - snd_pcm_close() as suggested by Thomas Kaeding. - In the OSS output code, added two ioctls (SNDCTL_DSP_POST and - SNDCTL_DSP_SYNC) just before the close of the audio device. - - * tests/virtual_io_test.c tests/Makefile.am - Add a new test program (currently empty) and add it to the build. - -2004-12-29 Erik de Castro Lopo - - * src/sndfile.h.in src/sndfile.h src/common.h src/file_io.c - src/create_symbols_file.py - Apply patch from Steve Baker which is the beginnings of a virtual - I/O interface. - -2004-12-23 Erik de Castro Lopo - - * src/*.c src/sndfile.h.in - Const-ify the write path throughout the library. - -2004-12-14 Erik de Castro Lopo - - * doc/development.html - Minor improvements. - -2004-11-29 Erik de Castro Lopo - - * doc/bugs.html - Minor improvements. - -2004-11-18 Erik de Castro Lopo - - * src/aiff.c - Add workaround for Logic Platinum AIFF files with broken COMT chunks. - -2004-11-16 Erik de Castro Lopo - - * doc/FAQ.html - Remove some ambiguities in the SD2 FAQ answer. - -2004-11-15 Erik de Castro Lopo - - * Win32/sndfile.h Win32/config.h MacOS9/sndfile.h MacOS9/config.h - Updates from autoconfig versions. - -2004-11-13 Erik de Castro Lopo - - * src/aiff.c - Fix parsing of COMT chunks. Store SF_STR_COMMENT data in ANNO chunks - instead of COMT chunk. - -2004-11-07 Erik de Castro Lopo - - * src/file_io.c src/common.h - Change the ptr argument to psf_write() from "void*" to a "const void*". - Thanks to Tobias Gehrig for suggesting this. - -2004-10-31 Erik de Castro Lopo - - * src/file_io.c src/common.h - Add functions psf_close_rsrc() and read length of resourse fork into - rsrclength field of SF_PRIVATE. - - * src/sd2.c - Make sure resource fork gets closed. - - * tests/util.tpl - Add functions to check for file descriptor leakage. - - * src/write_read_test.tpl - Use the file descriptor leak checks. - - * src/sndfile.h.in - Add SFC_GET_LOOP_INFO and SF_LOOP_INFO struct. - - * src/common.h - Add SF_LOOP_INFO pointer to SF_PRIVATE. - - * src/wav.c src/aiff.c - Improve and add parsing of 'ACID' and 'basc' chunks, filling in - SF_LOOP_INFO data in SF_PRIVATE. - -2004-10-30 Erik de Castro Lopo - - * src/sd2.c - Further cleanup: remove printfs, change snprintf to LSF_SNPRINTF. - - * Win32/config.h Win32/sndfile.h - Updates. - - * tests/util.tpl - Add win32 macro for snprintf. - -2004-10-29 Erik de Castro Lopo - - * src/sfendian.h - Add macros : H2BE_SHORT, H2BE_INT, H2LE_SHORT and H2LE_INT. - - * src/sd2.c - Use macros to make sure writing SD2 files on little endian machines works - correctly. - - * tests/util.tpl - Add a delete_file() function which also deletes the resource fork of SD2 - files. - - * tests/write_read_test.tpl - Use delete_file() so that "make distcheck" works. - -2004-10-28 Erik de Castro Lopo - - * src/sndfile.c src/file_io.c - Move resource filename construction and testing to psf_open_rsrc(). - - * src/common.h src/sndfile.c - Add error SFE_SD2_FD_DISALLOWED. - - * tests/util.tpl tests/*.(c|tpl) - Add and allow_fd parameter to test_open_file_or_die() so that use of - sf_open_fd() can be avoided when opening SD2 files. - -2004-10-27 Erik de Castro Lopo - - * src/wav.c - Update ACID chunk parsing. - - * src/sd2.c - More fixes for files with large resource forks. - -2004-10-23 Erik de Castro Lopo - - * src/common.h src/sndfile.c - Add error numbers and messages for sd2 files. - - * src/sd2.c - Reading of sd2 (resource fork version) now seems to be working. - -2004-10-17 Erik de Castro Lopo - - * src/file_io.h - Update file_io.c to include win32 psf_rsrc_open(). - - * tests/floating_point_test.tpl - Remove use of __func__ in test programs (MSVC++ doesn't grok this). - - * Win32/(config|sndfile).h MacOS9/(config|sndfile).h - Updates. - -2004-10-13 Erik de Castro Lopo - - * src/sfendian.h - Fix endswap_int64_t_(array|copy). - - * src/test_endswap.(tpl|def) - Add tests for above and inprove all tests. - -2004-10-12 Erik de Castro Lopo - - * src/sfendian.h - Improve type safety, add endswap_double_array(). - - * src/double64.c - Use endswap_double_array() instead of endswap_long_array(). - - * src/test_endswap.(tpl|def) src/Makefile.am - Add preliminary endswap tests and hook into build system. - -2004-10-06 Erik de Castro Lopo - - * src/configure.ac src/makefile.am - Finally fix the bulding of DLLs on Win32/MinGW. - - * tests/makefile.am - Fix running of tests on Win32/MinGW. - -2004-10-01 Erik de Castro Lopo - - * src/sndfile.h.in src/sndfile.c tests/floating_point_test.tpl - Rename SFC_SET_FLOAT_INT_MULTIPLIER to SFC_SET_SCALE_FLOAT_INT_READ. - - * doc/command.html - Document SFC_SET_SCALE_FLOAT_INT_READ. - -2004-09-30 Erik de Castro Lopo - - * tests/floating_point_test.(tpl|def) - Derived from floating_point_test.c. - Add (float|double)_(short|int)_test functions. - - * tests/util.(tpl|def) - Make separate float and double versions of gen_windowed_sine(). - - * tests/write_read_test.tpl - Fix after changes to gen_windowed_sine(). - - * src/(float32|double64).c - Implement SFC_SET_FLOAT_INT_MULTIPPLIER. - -2004-09-29 Erik de Castro Lopo - - * acinclude.m4 - Fix warnings from automake 1.8 and later. - - * examples/sndfile-info.c - Add a "fflush (stdout)" after printing Win32 message. - -2004-09-28 Erik de Castro Lopo - - * Win32/Makefile.mingw.in - Add a "make install" target. - -2004-09-24 Erik de Castro Lopo - - * src/sndfile.h.in src/common.h src/sndfile.c src/command.c - Start work on adding command SFC_SET_FLOAT_INT_MULTIPLIER. - -2004-09-22 Erik de Castro Lopo - - * examples/sndfile-convert.c - Fix a bug converting stereo integer PCM files to float. - -2004-09-22 Erik de Castro Lopo - - * examples/sndfile-play.c - Appy patch from Conrad Parker to make Mac OSX error messages more - consistent and informative. - - * doc/api.html - Fix a HTML HREF which was wrong. - - * doc/win32.html - Add information about when nmake fails. - -2004-09-05 Erik de Castro Lopo - - * examples/sndfile-play.c - Another patch from Denis Cote to prevent race conditions. - -2004-09-02 Erik de Castro Lopo - - * src/common.h src/ms_adpcm.c src/ima_adpcm.c - Fix alternative to ISO standard flexible struct array feature for broken - compilers. - -2004-08-31 Erik de Castro Lopo - - * src/common.h src/string.c src/sndfile.c - Make sf_set_string() return an error if trying to set a string when in - read mode. - -2004-08-29 Erik de Castro Lopo - - * src/common.h - Change the unnamed union into a named union so gcc-2.95 will compile it. - - * src/*.c - Fixes to allow for the above change. - -2004-08-20 Erik de Castro Lopo - - * examples/sndfile-play.c - Fixes for Win32. Thanks to Denis Cote. - - * Win32/Win32/Makefile.(msvc|mingw.in) - Fix build system after removal of sfendian.h. - Build sndfile-convert. - - * src/Makefile.am - Remove sfendian.c from dependancies. - -2004-08-10 Erik de Castro Lopo - - * src/sndfile.h.in - Fix typo in comments (thanks Tommi Sakari Uimonen). - -2004-07-31 Erik de Castro Lopo - - * tests/(a|u)law_test.c - Minor cleanup. - -2004-07-29 Erik de Castro Lopo - - * src/(pcm|float|double64|ulaw|alaw|xi).c - Optimise read/write loops by removing a redundant variable. - -2004-07-24 Erik de Castro Lopo - - * src/file_io.c - Remove call to fsync() in psf_close(). - -2004-07-19 Erik de Castro Lopo - - * src/pcm.c - Inline x2y_array() functions where possible. - - * configure.ac - Detect presence of type int64_t. - - * src/sfendian.c src/sfendian.h - Move functions in the first file to the sfendian.h as static inline - functions. - Improve endswap_long_*() where possible. - -2004-07-17 Erik de Castro Lopo - - * src/pcm.c - When converting from unsigned char to float or double, subtract 128 before - converting to float/double rather than after to save a floating point - operation as suggested by Stefan Briesenick. - - * src/(pcm|sfendian|alaw|ulaw|double64|float32).c - Optimize inner loops by changing the loop counting slightly as suggested - by Stefan Briesenick. - - * configure.ac - Detect presence of . - - * src/sfendian.h - Use if present as suggested by Stefan Briesenick. - - * src/pcm.c - Update bytewapping. - -2004-07-02 Erik de Castro Lopo - - * src/common.h src/*.c - Change the psf->buffer field of SF_PRIVATE into a more type safe union with - double, float, int etc elements. - -2004-06-28 Erik de Castro Lopo - - * examples/sndfile-play.c - Merge slightly modifed patch from Stanko Juzbasic which allows playback of - mono files on MacOSX. - -2004-06-25 Erik de Castro Lopo - - * examples/sndfile-convert.c - Move copy_metadata() after the second sf_open(). - -2004-06-21 Erik de Castro Lopo - - * examples/sndfile-convert.c - Fix a bug which caused the program to go into an infinite loop if the source - file has no meta-data. Thanks to Ron Parker for reporting this. - - * src/sndfile.h.in - Add SF_STR_FIRST and SF_STR_LAST to allow enumeration of string types. - - * Win32/sndfile.h MacOS9/sndfile.h - Update these as per the above file. - -2004-06-17 Erik de Castro Lopo - - * configure.ac src/common.h src/ogg.c src/sndfile.c src/sndfile.h.in - src/Makefile.am - Apply large patch from Conrad Parker implementing Ogg Vorbis, Ogg Speex and - Annodex support via liboggz and libfishsound. Thanks Conrad. - -2004-06-15 Erik de Castro Lopo - - * src/avr.c src/ircam.c src/nist.c src/paf.c src/xi.c - Add cast to size_t for some parameters passed to psf_binheader_writef. This - is Debian bug number 253490. Thanks to Anand Kumria and Andreas Jochens. - - * src/w64.c - Found and fixed a bug resulting from use of size_t when writing W64 'fmt ' - chunk. - -2004-06-14 Erik de Castro Lopo - - * configure.ac - Bump version to 1.0.10 ready for release. - - * Makefile.am - Remove redundant files (check_libsndfile.py libsndfile_version_convert.py) - from distribution tarball. - - * tests/header_test.tpl - Fix uninitialised variable. - - * src/GSM610/short_term.c - Fix compiler warning on MSVC++. - -2004-05-23 Erik de Castro Lopo - - * src/wav.c - Improve record keeping of chunks seen and return an error if a file with - unusual chunks is opened in mode SFM_RDWR. - - * src/mmreg.h - This file not needed so remove it. - -2004-05-22 Erik de Castro Lopo - - * tests/header_test.tpl - Add extra_header_test(). - - * src/common.h src/sndfile.c - Add SFE_RDWR_BAD_HEADER error number and string. - -2004-05-21 Erik de Castro Lopo - - * tests/utils.tpl tests/*.c tests/*.tpl - Add a line number argument to check_log_buffer_or_die() and update all - files that use that function. - - * tests/header_test.tpl - Modify/update tests for files opened SFM_RDWR and SFC_UPDATE_HEADER_AUTO. - - * src/aiff.c src/wav.c - Fix another bug in AIFF and WAV files opened in SFM_RDWR and using - SFC_UPDATE_HEADER_AUTO. - - * src/test_file_io.c - Add a test for psf_ftruncate() function. - -2004-05-19 Erik de Castro Lopo - - * src/sndfile.c - Fix another weird corner case bug found by Martin Rumori. Thanks. - - * tests/header_test.(tpl|def) - Two new files to test for the absence of the above bug and include tests - moved from tests/misc_test.c. - - * tests/Makefile.am - Hook new tests into build/test system. - - * tests/misc_test.c - Remove update_header_test() which has been moved to the new files above. - -2004-05-16 Erik de Castro Lopo - - * src/aiff.c - Fixed a bug reported by Martin Rumori on the LAD list. If a file created - with a format of SF_FORMAT_FLOAT and then closed before any data is written - to it, the header can get screwed up (PEAK chunk gets overwritten). - - * tests/write_read_test.tpl - Add a test (empty_file_test) for the above bug. - -2004-05-13 Erik de Castro Lopo - - * Win32/Makefile.mingw.in - Added a Makefile for MinGW (needs to be processed by configure). - - * src/mmsystem.h src/mmreg.h - Add files from the Wine project (under the LGPL) to allow build of - sndfile-play.exe under MinGW. - -2004-05-12 Erik de Castro Lopo - - * src/GSM610/gsm610_priv.h - Replace ugly macros with inline functions. - - * src/GSM610/*.c - Remove temporary variables used by macros and other minor fixes required by - above change. - -2004-05-10 Erik de Castro Lopo - - * tests/pipe_test.tpl tests/stdio_test.c Win32/Makefile.msvc - Make sure these programs compile (even though they do nothing) on Win32 - and add them to the "make check" target. - - * src/sfendian.h - Fix warning on Sparc CPU and code cleanup. - -2004-05-09 Erik de Castro Lopo - - * src/file_io.c - Fix warning messages when compiling under MinGW. - -2004-05-01 Erik de Castro Lopo - - * configure.ac - Set HAVE_FLEXIBLE_ARRAY in src/config.h depending on whether the compiler - accepts the flexible array struct member as per 1999 ISO C standard. - - * src/common.h src/ima_adpcm.c src/paf.c src/ms_adpcm.c - Added ugly #if HAVE_FLEXIBLE_ARRAY and provided a non-standards compliant - hack for non 1999 ISO C compliant compilers. - -2004-04-26 Erik de Castro Lopo - - * src/strings.c - If adding an SF_STR_SOFTWARE string, only append libsndfile-X.Y.Z if the - string does not already have libsndfile in the string. Thanks to Conrad - Parker. - - * tests/string_test.c - Add test to verify the above. - - * examples/sndfile-convert.c - Add ability to transcode meta data as well (Conrad Parker). - -2004-04-25 Erik de Castro Lopo - - * doc/command.html - Fix minor error. Thanks to Simon Burton. - - * doc/win32.html - Started adding instructions for compiling libsndfile under MinGW. - - * configure.ac - Add --enable-bow-docs to enable black text on a white background HTML docs. - - * doc/libsndfile.css.in - This is now a template file for configure which sets the foreground and - background colours. - -2004-04-20 Erik de Castro Lopo - - * configure.ac - Do some MinGW fixes. - - * configure.ac doc/Makefile.am - Install HTML docs when doing make install. - -2004-04-19 Erik de Castro Lopo - - * examples/sndfile-info.c - Print out the dB level with the signal max. - -2004-04-15 Erik de Castro Lopo - - * src/file_io.c - Define S_ISSOCK in src/file_io.c if required. - -2004-04-03 Erik de Castro Lopo - - * configure.ac - Improve printout configuration summary (as suggested by Axel Röbel). - - * doc/index.html - Add link to pre-release location. - - * src/sndfile.h.in - Remove comma after last element of enum. - - * src/float32.c src/double64.c - Fix read/write of float/double encoded raw files to/from pipes. - - * tests/pipe_test.c tests/pipe_test.tpl tests/pipe_test.def - Turn pipe_test.c into an autogenerated file and add tests for reading/ - writing floats and doubles. - - * tests/Makefile.am - Hook tests/pipe_test.* into build system. - -2004-04-02 Erik de Castro Lopo - - * configure.ac acinclude.m4 - Rename AC_C_STRUCT_HACK macro to AC_C99_FLEXIBLE_ARRAY. - -2004-03-31 Erik de Castro Lopo - - * tests/misc_test.c - Perform update_header_test in RDWR mode as well. - - * src/aiff.c - Fix problems when updating header in RDWR mode. - -2004-03-30 Erik de Castro Lopo - - * src/wav.c src/w64.c src/wav_w64.c - Integrate code supplied by David Viens for supporting microsoft's - WAVEFORMATEXTENSIBLE stuff. Thanks David for supplying this. - - * configure.ac doc/*.html - Bump version to 1.0.9. - -2004-03-28 Erik de Castro Lopo - - * src/command.c src/sndfile.c src/sndfile.h.in src/wav.c - Started work on supporting microsoft's WAVEFORMATEXTENSIBLE gunk. - -2004-03-26 Erik de Castro Lopo - - * src/avr.c - New file to handle Audio Visual Resaerch files. - - * src/sndfile.h.in src/common.h src/sndfile.c src/command.c - Hook AVR into everything else. - - * tests/Makefile.am tests/write_read_test.tpl tests/misc_test.c - Add testing for AVR files. - -2004-03-22 Erik de Castro Lopo - - * src/file_io.c - Fix psf_set_file() for win32. Thanks to Vincent Trussart (Plogue Art et - Technologie) for coming up with the solution. - -2004-03-21 Erik de Castro Lopo - - * tests/write_read_test.tpl - Fixed a bug that was causing valgrind to report a memory leak. The bug was - in the test code itself, not the library. - -2004-03-20 Erik de Castro Lopo - - * examples/generate.cs - An example showing how to use libsndfile from C#. Thanks to James Robson - for providing this. - -2004-03-19 Erik de Castro Lopo - - * src/common.c - Fix problems with WAV files containing large chunks after the 'data' - chunk. Thanks to Koen Tanghe for providing a sample file. - -2004-03-17 Erik de Castro Lopo - - * configure.ac - Detect presense of ALSA (Advanced Linux Sound Architecture). - - * examples/sndfile-play.c - Add ALSA output support. - - * examples/Makefile.am - Add ALSA_LIBS to link line of sndfile-play.c. - -2004-03-15 Erik de Castro Lopo - - * acinclude.m4 - Add new macro (AC_C_STRUCT_HACK) to detect whether the C compiler allows - the use of the what is known as the struct hack introduced by the 1999 ISO - C Standard. - - * configure.ac - The last release would not compile with gcc-2.95 due to the use of features - (ie struct hack) introduced by the 1999 ISO C Standard. - Add check to make sure compiler handles this and bomb out if it doesn't. - -2004-03-14 Erik de Castro Lopo - - * tests/write_read_test.tpl - Fix compiler warning on Win32. - - * src/file_io.c - Fix use of an un-initialised variable in Win32 stuff. - - * Win32/config.h examples/sndfile-play.c - Win32 fixes. - -2004-03-10 Erik de Castro Lopo - - * configure.ac - Fix bug which occurres when configuring for MinGW. - If compiler is gcc and cross compiling use -nostdinc. - -2004-03-09 Erik de Castro Lopo - - * src/common.h src/aiff.c src/wav.c src/float32.c src/double64.c - src/sndfile.c - Fix a bug with PEAK chunk handling for files with more than 16 channels. - Thanks to Remy Bruno for finding this. - -2004-03-08 Erik de Castro Lopo - - * src/common.c - Fix a bug which was preventing WAV files being openned correctly if the - file had a very large header. Thanks to Eldad Zack for finding this. - -2004-03-04 Erik de Castro Lopo - - * configure.ac src/file_io.c - Fix cross-compiling from Linux to Win32 using the MinGW tools. - -2004-03-01 Erik de Castro Lopo - - * src/create_symbols_file.sh - Christian Weisgerber pointed out that the shell script did not run on a - real Bourne shell although it did run under Bash in Bourne shell mode. - - * src/create_symbols_file.py - Rewrite of above in Python. Also add support for writing Win32 .def files. - The Python script generates Symbols.linux, Symbols.darwin and - libsndfile.def (Win32 version). These files get shipped with the tarball - so there should not be necessary to run the Python script when building - the code from the tarball. - - * configure.ac src/Makefile.am Win32/Makefile.am - Hook new Python script into the build system. - -2004-02-25 Erik de Castro Lopo - - * src/configure.ac - Add --enable-gcc-werror option and move GCC specific stuff down. - -2004-02-24 Erik de Castro Lopo - - * acinclude.m4 configure.ac - Fix clip mode detection (tested in one of HP's testdrive Itanium II boxes). - - * src/file_io.c - Added check for sizeof (off_t) != sizeof (sf_count_t) to prevent recurrence - of missing large file support on Linux and Solaris. - -2004-02-19 Erik de Castro Lopo - - * examples/sndfile-play.c - Fix a MacOSX specific bug which was caused by a space being inserted in - the middle of a file name. - - * configure.ac src/Makefile.am examples/Makefile.am - Fix a couple of MacOSX build issues. - -2004-02-17 Erik de Castro Lopo - - * doc/command.html - Document SFC_SET_CLIPPING and SFC_GET_CLIPPING. - -2004-02-14 Erik de Castro Lopo - - * doc/*.html - Applied patch from Frank Neumann (author of lakai) which fixes many minor - typos in documentation. Thanks Frank. - -2004-02-13 Erik de Castro Lopo - - * ChangeLog - Changed my email address throughout source and docs. - -2004-02-08 Erik de Castro Lopo - - * src/file_io.c - Make sure config.h is included before stdio.h to make sure large file - support is enabled on Linux (and Solaris). - - * tests/misc_test.c - Disable update_header test on Win32. This should work but doesn't and - I'm not sure why. - - * Make.bat Win32/Makefile.msvc - Updates. - -2004-01-07 Erik de Castro Lopo - - * src/common.h - Changed logindex, headindex and headend files of SF_PRIVATE from unsigned - int to int to prevent weird arithmetic bugs. - - * src/common.c src/aiff.c src/wav.c src/w64.c - Fixed compiler warnings resulting from above change. - -2004-01-06 Erik de Castro Lopo - - * src/common.c - Fixed a bug in header reader for some files with data after the sample data. - -2003-12-29 Erik de Castro Lopo - - * tests/lossy_comp_test.c tests/Makefile.am - Add tests for AIFF/IMA files. - -2003-12-26 Erik de Castro Lopo - - * src/macbinary3.c src/macos.c - Two new files required for handling SD2 files. - - * src/common.h - Add prototypes for functions in above two files. - - * src/Makefile.am - Hook new files into build system. - -2003-12-21 Erik de Castro Lopo - - * configure.ac - Add checks for mmap() and getpagesize() which might be used at some time - for faster file reads. - Add detection of MacOSX. - -2003-12-13 Erik de Castro Lopo - - * doc/FAQ.html - Minor mods to pkg-config section. - -2003-12-12 Erik de Castro Lopo - - * src/create_symbols_file.sh - Andre Pang (also known as Ozone) pointed out that on MacOSX, all non - static symbols are exported causing troubles when trying to link - libsndfile with another library which has any of the same symbols. - He fixed this by supplying the MacOSX linker with a file containing - all the public symbols so that only they would be exported and then - supplied a patch for libsndfile. - This wasn't quite ideal, because I would have to maintain two (3 if - you include Win32) separate files containing the exported symbols. - A better solution was to create this script which can generate a - Symbols file for Linux, MacoSX and any other OS that supports - minimising the number of exported symbols. - - * configure.ac src/Makefile.am - Hook the new script into the build process. - -2003-12-10 Erik de Castro Lopo - - * doc/index.html - Added comments about Steve Dekorte's SoundConverter scam. - -2003-12-07 Erik de Castro Lopo - - * src/file_io.c - Axel Röbel pointed out that on Mac OSX a pipe is not considered a fifo - (S_ISFIFO (st.st_mode) is false) but a socket (S_ISSOCK (st.st_mode) is - true). The test has therefore been changed to is S_ISREG and anything - which which does not return true for S_ISREG is considered a pipe. - -2003-11-25 Erik de Castro Lopo - - * tests/misc_test.c - Fix update_header_test to pass SDS. - - * src/sds.c - More minor fixes. - - * tests/floating_point_test.c - Add test for SDS files. - - * src/command.c - Add SDS to major_formats array. - -2003-11-24 Erik de Castro Lopo - - * tests/write_read_test.tpl tests/misc_test.c - Add tests for SDS files. - - * src/sds.c - Fix a bug in header update code. - -2003-11-23 Erik de Castro Lopo - - * src/sds.c - Get file write working. - - * src/paf.c - Fix a potential bug in paf24_seek(). - -2003-11-04 Erik de Castro Lopo - - * doc/FAQ.html - Add Q/A about u-law encoded WAV files. - - * Win32/*.h - Updated so it compiles on Win32. - -2003-11-03 Erik de Castro Lopo - - * examples/sndfile-convert.c - Add -alaw and -ulaw command line arguments. - - * configure.ac - Add library versioning comments. - Add arguments to AC_INIT. - -2003-10-28 Erik de Castro Lopo - - * src/file_io.c - Ross Bencina has contributed code to replace all of the (mostly broken) - Win32 POSIX emulation calls with calls the native Win32 file I/O API. - This code still needs testing but is likely to be a huge improvemnt - of support for Win32. Thanks Ross. - -2003-10-27 Erik de Castro Lopo - - * src/dwvw.c - Removed filedes field from the DWVW_PRIVATE struct. - - * src/file_io.c - Change psf_fopen() so it returns psf->error instead of the file descriptor. - Add new functions psf_set_stdio() and psf_set_file(). - - * src/sndfile.c - Change these to work with changed psf_fopen() return value. - Remove all uses of psf->filedes from sndfile, making it easier to slot native - Win32 API file handling functions. - - * src/test_file_io.c - Minor changes to make it compile with new file_io.c stuff. - -2003-10-26 Erik de Castro Lopo - - * src/gsm610.h - Rename a variable from true to true_flag. As Ross Bencina points out, - true is defined in the C99 header . - - * src/file_io.c - If fstat() fails, return SF_TRUE instead of -1 (Ross Bencina). - -2003-10-09 Erik de Castro Lopo - - * src/common.h - Increase the size of SF_BUFFER_LEN and SF_HEADER_LEN. - - * src/sndfile.c - Fix sf_read/write_raw which were dividing by psf->bytwidth and - psf->blockwidth which can both be zero. - - * examples/sndfile-info.c - Increase size of BUFFER_LEN. - -2003-09-21 Erik de Castro Lopo - - * configure.ac - Add checks for and ssize_t. - Other Win32/MinGW checks. - - * src/aiff.c src/au_g72x.c src/file_io.c src/gsm610.c src/interleave.c - src/paf.c src/sds.c src/svx.c src/voc.c src/w64.c src/wav.c src/xi.c - Fix compiler warnings. - -2003-09-20 Erik de Castro Lopo - - * tests/scale_clip_test.tpl - Add definition of M_PI if needed. - -2003-09-19 Erik de Castro Lopo - - * configure.ac - Detect if S_IRGRP is declared in . - - * src/file_io.c tests/*.tpl tests/*.c - More fixes for Win32/MSVC++ and MinGW. MinGW does have but that - file doesn't declare S_IRGRP. - -2003-10-18 Erik de Castro Lopo - - * src/config.h.in - Add comment stating that the sf_count_t typedef is determined when - libsndfile is being compiled. - - * tests/utils.tpl - Modified so that utils.c gets one copy of the GPL and not two. - - -2003-09-17 Erik de Castro Lopo - - * Win32/unistd.h src/sf_unistd.h - Move first file to the second. This will help for Win32/MSVC++ and MinGW. - - * Win32/Makefile.am src/Makefile.am - Changed in line with above. - - * Win32/Makefile.msvc - Removed "/I Win32" which is no longer required. - - * src/file_io.c src/test_file_io.c tests/*.tpl tests/*.c - If HAVE_UNISTD_H include else include . This should - work for Win32, MinGW and other fakes Unix-like OSes. - - * src/*.c - Removed #include from files which didn't need it. - -2003-09-16 Erik de Castro Lopo - - * libsndfile.spec.in - Apply fix from Andrew Schultz. - -2003-09-07 Erik de Castro Lopo - - * src/vox_adpcm.c - Only set psf->sf.samplerate if the existing value is invalid. - -2003-09-06 Erik de Castro Lopo - - * examples/sndfile-play.c - Started adding support for ALSA output. - -2003-09-04 Erik de Castro Lopo - - * src/sndfile.h.in - Removed from sndfile.h. - - * src/*.c examples/*.c tests/*.c tests/*.tpl - Added where needed. - -2003-09-02 Erik de Castro Lopo - - * src/common.h - Added ARRAY_LEN, SF_MAX and SF_MIN macros. - -2003-08-19 Erik de Castro Lopo - - * doc/index.html - Remove statements about alternative licensing arrangements. - -2003-08-17 Erik de Castro Lopo - - * MacOS MacOS9 Makefile.am configure.ac - Change directory name from MacOS to MacOS9 - - * MacOS9/MacOS9-readme.txt - Change name to make it really obvious, add text to top of file to make it - still more obvious again. - -2003-08-16 Erik de Castro Lopo - - * src/test_log_printf.c - Add tests for %u conversions. - - * src/common.c - Fix psf_log_printf() %u conversions. - -2003-08-15 Erik de Castro Lopo - - * src/aiff.c - Fixed a bug where opening a file with a non-trival header in SFM_RDWR mode - would over-write part of the header. Thanks to Axel Röbel for pointing - this out. Axel also provided a patch to fix this but I came up with a - neater and more general solution. - Return error when openning an AIFF file with data after the SSND chunk - (Thanks Axel Röbel). - - * tests/aiff_rw_test.c - Improvements to test program which will later allow it to be generalised to - test WAV, SVX and others as required. - -2003-08-14 Erik de Castro Lopo - - * tests/pipe_test.c - Add useek_pipe_rw_test() submitted by Russell Francis. - - * src/sndfile.c - In sf_open_fd(), check if input file descriptor is a pipe. - - * src/sndfile.[ch] - Fix typo in variable name do_not_close_descriptor. - -2003-08-13 Erik de Castro Lopo - - * src/test_log_printf.c - Improve the tests for %d and %s conversions. - - * src/common.c - Fixed a few problems in psf_log_printf() found using new tests. - -2003-08-06 Erik de Castro Lopo - - * configure.ac - Add -Wwrite-strings warning to CFLAGS if the compiler is GCC. Thanks to - Peter Miller (Aegis author) for suggesting this and supplying a patch. - - * src/*.c examples/*.c tests/*.c - Fix all compiler warnings arising from the above. - -2003-08-02 Erik de Castro Lopo - - * tests/aiff_rw_test.c tests/Makefile.am - New test program to check for errors re-writing the headers of AIFC files - opened in mode SFM_RDWR. - -2003-07-21 Erik de Castro Lopo - - * examples/sndfile-play.c - Applied a patch from Tero Pelander to allow this program to run on systems - using devfs which used /dev/sound/dsp instead of /dev/dsp. - -2003-07-11 Erik de Castro Lopo - - * doc/new_file_type.HOWTO - Updated document. Still incomplete. - -2003-06-29 Erik de Castro Lopo - - * src/sndfile.c - Fix VALIDATE_SNDFILE_AND_ASSIGN_PSF which was returning an error rather - than saving it and returning zero. - -2003-06-25 Erik de Castro Lopo - - * src/file_io.c - Two fixes for Mac OS9. - Fix all casts from sf_count_t to ssize_t (not size_t). - -2003-06-22 Erik de Castro Lopo - - * src/wav.c - Fix for reading files with RIFF length of 8 and data length of 0. - -2003-06-14 Erik de Castro Lopo - - * src/*.c tests/*.c tests/*.tpl - Added comments to mark code for removal when make Lite version of - libsndfile. - -2003-06-09 Erik de Castro Lopo - - * examples/sndfile-convert.c - Add extra error checking for unrecognised arguments. - -2003-06-08 Erik de Castro Lopo - - * src/ima_adpcm.c - Started adding code to write IMA ADPCM encoded AIFF files. - - * src/test_log_printf.c src/Makefile.am - New file to test psf_log_printf() function and add hooks into build system. - - * src/common.c - Move psf_log_printf() function to top of the file and only compile the rest - of the file if if PSF_LOG_PRINTF_ONLY is not defined. - -2003-06-03 Erik de Castro Lopo - - * Win32/config.h Win32/sndfile.h - Updated with new config variables. - - * Win32/unistd.h src/file_io.c - Added implementation of S_ISFIFO macro which Win32 seems to lack and is - used in src/file_io.c. - - * tests/utils.tpl - Added #include to pull in Win32/unistd.h so it compiles for - Win32. - - * src/Makefile.msvc - Added src\test_file_io.exe build target and run this as the very first - test. - - * tests/win32_test.c - Add support for testing Cygwin32. - - * configure.ac - Detect POSIX fsync() and fdatasync() functions. - - * src/file_io.c - If compiling for Cygwin, call fsync() before calling fstat() to retrieve - file length. - - * tests/pcm_test.tpl - Add a test for lrintf() function. This was required to detect a really - broken lrint() and lrintf() on Cygwin. - - * tests/misc_test.c - Don't run permission test when compiling under Cygwin. - - * src/float_cast.h - Fix fallback macro for lrint() and lrintf() to cast to long instead of int - to match official function prototypes. - -2003-06-02 Erik de Castro Lopo - - * examples/sndfile-convert.c - Modifications to improve accuracy of conversions; use double data for - floating point and int for everything else. - - * src/ima_apdcm.c - Completed work on decoding IMA ADPCM encoded AIFF files. Still need to - get encoding working. - -2003-05-28 Erik de Castro Lopo - - * src/aiff.c src/ima_adpcm.c - Start working on getting IMA ADPCM encoded AIFF files working. - -2003-05-27 Erik de Castro Lopo - - * configure.ac - Fixed the touch command for when the autogen program is not found (Matt - Flax). - - * src/ulaw.c src/alaw.c - Made these pipe-able. - -2003-05-24 Erik de Castro Lopo - - * src/paf.c src/ircam.c - Fixed writing to pipe. - - * src/wav.c src/aiff.c src/nist.c src/mat*.c src/svx.c src/w64.c - Return SFE_NO_PIPE_WRITE if an attempt is made to write to a pipe. - -2003-05-23 Erik de Castro Lopo - - * examples/sndfile-info.c - Modified to detect unknown file lengths. - - * src/mat4.c - Fix reading from a pipe. - -2003-05-22 Erik de Castro Lopo - - * tests/pipe_test.c - Add more file types to tests. - - * src/mat4.c - Removed explicit setting of psf->sf.seekable to SF_TRUE. - - * tests/utils.tpl - Add macro for generating and check data in the stdio and pipe tests. - - * tests/stdout_test.c tests/stdin_test.c - Use the above macro to generate known data on output and check data on - input. - - * src/voc.c src/htk.c common.h sndfile.c - Disallow reading/writing VOC and HTK files from/to pipes be returning new - error values. - - * src/w64.c - Fixes to allow reading from a pipe. - -2003-05-21 Erik de Castro Lopo - - * configure.ac src/sndfile.h.in - When the configure script determines the sizeof (sf_count_t), also set the - value of SF_COUNT_MAX in sndfile.h. - - * configure.ac - Remove -pedantic flag from default GCC compiler flags. - - * tests/pipe_test.c - Add a pipe_read_test() before doing pipe_write_test(). - - * tests/scale_clip_test.c - Add test to make sure non-normalized values also clip in the right way. - -2003-05-18 Erik de Castro Lopo - - * configure.ac - Add test to detect processor clipping capabilities. - - * tests/stdin_test.c tests/stdout_test.c - Fix a pair of compiler warnings. - - * src/common.h - Add new pipeoffset field to SF_PRIVATE. This will contain the current file - offset when operating on a pipe. - - * src/common.c - Removed direct calls to psf_fread()/psf_fseek()/psf_fgets() etc from - psf_binheader_readf and redirect them to new buffered versions - header_read(), header_seek() and header_gets(). - Add "G" format specifier to emulate fgets() functionality with buffering. - This will allow reading some file types from pipes. - - * src/file_io.c - When the file descriptor is a pipe, manintain psf->pipeoffset. - - * src/pvf.c - Change use of psf_fgets() to psf_binheader_readf() as required but changes to header re - - * src/au.c - Fix reading from a pipe. - -2003-05-17 Erik de Castro Lopo - - * src/pcm.c - Add clipping versions of the f2XXX_array() functions to allow option of - clipping data that would otherwise overflow. - - * tests/scale_clip_test.tpl tests/scale_clip_test.def - New files test that clipping option does actually work. - -2003-05-14 Erik de Castro Lopo - - * doc/index.html - Fixed a typo ("OS(" instead of "OS9"). - -2003-05-13 Erik de Castro Lopo - - * tests/open_fail_test.c - Include to prevent warning message of missing declaration of - memset(). - -2003-05-12 Erik de Castro Lopo - - * src/common.h - Add new "add_clipping" field to SF_PRIVATE. - - * src/sndfile.h.in src/sndfile.c - Add command SFC_SET_CLIPPING which sets/resets add_clipping field. - -2003-05-11 Erik de Castro Lopo - - * doc/api.html - Add docs for sf_set_string() and sf_get_string(). - - * src/common.h src/sndfile.c - Add new SFE_STR_BAD_STRING error. - - * tests/stdin_test.c tests/stdout_test.c - Removed all non-error print statements. - - * tests/stdio_test.c tests/pipe_test.c tests/Makefile.am - Add print statements removed from two files above. - -2003-05-10 Erik de Castro Lopo - - * libsndfile.spec.in - Fixed a coulpe of minor errors discovered by someone calling themselves - Agent Smith. - - * src/common.c src/common.h src/file_io.h - Added is_pipe field to SF_PRIVATE and declaration of psf_is_pipe() - function. (Axel Röbel) - - * src/sndfile.c - Fixed determination of whether the file is a pipe. (Axel Röbel) - - * src/paf.c - Force paf24 to start with undefined mode. (Axel Röbel) - - * tests/pipe_test.c - Mods to make this test work and actually do the test on RAW files. (Axel - Röbel). - -2003-05-05 Erik de Castro Lopo - - * src/sndfile.c - Fixed a potential bug where psf->sf.seekable was being set to FALSE when - operating on stdin or stdout but then the default initialiser was reseting - it to TRUE. Thanks to Axel Röbel. - - * src/aiff.c - Fixed a bug in the header parser where it was not handling an odd length - COMM chunk correctly. Thanks to Axel Röbel. - - * src/test_file_io.c - Add more tests. - - * tests/win32_test.c - New file for showing the bugs in the Win32 implementation of the POSIX API. - It also runs on Linux for sanity checking. - - * tests/Makefile.am Win32/Makefile.msvc - Hook the new test program into the build system. - -2003-05-04 Erik de Castro Lopo - - * src/test_file_io.c - New test program to test operation of functions defined in file_io.c. This - should make supporting win32 significantly easier. - - * src/Makefile.am - Hook new test program into the build system. - - * src/file_io.c - Add compile/run time check that sizeof statbuf.st_size and sf_count_t are - the same. - - * src/common.h src/sndfile.c - Added new error code and error message for new check. - - * tests/benchmark.tpl - Fix to use frames instead of samples in SF_INFO. - -2003-05-03 Erik de Castro Lopo - - * src/file_io.c - More stuffing about working around PLAIN OLD-FASHIONED **BUGS** in Win32. - - * examples/sndfile-info.c - Applied patch from Conrad Parker to add "--help" and "-h" options as - well as an improved usage message. - -2003-05-02 Erik de Castro Lopo - - * src/au.c - Added embedded file support. - - * tests/multi_file_test.c - Added tests for embedded AU files. - Added verbose testing mode. - - * src/common.h src/sndfile.c - Added an embedded AU specific error code and message. - - * src/wav.c - Added patch from Conrad Parker which filled in a little more information - about ACIDized WAV files. - -2003-04-30 Erik de Castro Lopo - - * src/file_io.c - Fixed Win32 version of psf_fseek() which was calling psf_get_filelen() - which was in turn calling psf_fseek() which in the end blew the stack. - Now of course this would have been easy to find on Linux, but this blow - up was happening in kernel32.dll and the fscking MSVC++ debugger couldn't - figure out what call caused this (it couldn't even tell me the stack had - overflowed) and was absolutley useless for this debugging exercise. - On top of that, the reason I got into this mess was that windoze doesn't - have a working fstat() function which can return file lengths > 2 Gig. It - HAS a fscking _fstati64() but the file length value is only updated AFTER - the bloody file is closed. That makes it completely useless. - How the hell do people stand working on this crap excuse of an OS? - -2003-04-29 Erik de Castro Lopo - - * Win32/unistd.h src/file_io.c - Moved definitions of S_IGRP etc from file_io.c to unistd.h so that these - can be used in the test programs. - - * Win32/libsndfile.def - Added sf_open_fd. - - * Win32/sndfile.h - Updated to match src/sndfile.h.in. - - * Win32/Makefile.msvc - Added dither.c and htk.c to libsndfile.dll target. - -2003-04-28 Erik de Castro Lopo - - * src/file_io.c - First attempt at getting the Win32 versions of the these functions working. - They still need to be tested. - -2003-04-27 Erik de Castro Lopo - - * src/strings.c - Found and fixed a bug which was causing psf_store_string() to fail on - Motorola 68k processors. Many thanks to Joshua Haberman (Debian maintainer - of libsndfile) for compiling and running debug code to help me debug the - problem. - -2003-04-26 Erik de Castro Lopo - - * src/sndfile.c src/file_io.c src/wav.c src/aiff.c - Much hacking to get reading and writing of embedded files working (ie sound - files at a non-zero files offset). - - * doc/embedded_files.html - First pass atempt at documenting reading/writing embedded files. - -2003-04-21 Erik de Castro Lopo - - * doc/FAQ.html - Updated answer to "Why doesn't libsndfile do interleaving/de-interleaving?" - -2003-04-19 Erik de Castro Lopo - - * src/wav.c src/aiff.c - Fix retrieving and storing of string data from files. Need to be careful - about using psf->buffer for strings. - -2003-04-18 Erik de Castro Lopo - - * src/file_io.c - Fix psf_fseek() for seeks withing embedded files. - -2003-04-15 Erik de Castro Lopo - - * src/sndfile.h.in - Changed the definition of SNDFILE slightly to produce warnings when it isn't - used correctly. This should have zero affect in code which uses the SNDFILE - type correctly. - - * src/sndfile.c - Fixed a few compiler warnings cause by the changes to the SNDFILE type. - -2003-04-12 Erik de Castro Lopo - - * doc/FAQ.html - Added question and answer to the question "How about adding the ability - to write/read sound files to/from memory buffers?". - -2003-04-08 Erik de Castro Lopo - - * tests/write_read_test.tpl - Removed un-needed enums declaring TRUE and FALSE and replaced usage of - these with SF_TRUE and SF_FALSE. - - * tests/multi_file_test.c - New test program to test sf_open_fd() on files containing data other than - a single sound file. - -2003-04-06 Erik de Castro Lopo - - * src/file_io.c - When creating files, set the readable by others flag. This still allows - further restrictions to be enforced by use of the user's umask. Fix - suggested by Eric Lyon. - -2003-04-05 Erik de Castro Lopo - - * src/sndfile.h.in src/sndfile.c - Changed sf_open_fd(). Dropped offset parameter and added a close_desc - parameter. If close desc is TRUE, the file descritpor passed into the - library will be closed when sf_close() is called. - - * tests/utils.tpl - Modified call to sf_open_fd() to set close_desc parameter to SF_TRUE. - -2003-04-04 Erik de Castro Lopo - - * tests/write_read_test.tpl - Add a string (using sf_set_string() function) before and after data section - of all files. This will make sure that if string data can be added, it - doesn't overwrite real audio data. - -2003-04-02 Erik de Castro Lopo - - * src/sndfile.c - Started work on supporting a non-zero offset parameter for sf_open_fd (). - - * src/.c - Removed many uses of psf_fseek (SEEK_END) which to allow for future use of - sf_open_fd() with non-zero offset. - Associated refactoring. - - * src/aiff.c - Implemented functionality required to get sf_get_string() and - sf_set_string() working for AIFF files. - -2003-04-01 Erik de Castro Lopo - - * tests/utils.tpl - Modified test_open_file_or_die() to alternately use sf_open() and - sf_open_fd(). - - * src/svx.c - Fixed a bug which occurred when openning an existing file for read/write - using sf_open_fd(). In this case, the existing NAME chunk needs to be - read into psf->filename. - Fixed printing of sf_count_t types to logbuffer. - -2003-03-31 Erik de Castro Lopo - - * src/sndfile.h.in - Added prototype for new function sf_open_fd(). - - * src/sndfile.c - Moved most of the code in sf_open() to a new function psf_open_file(). - Created new function sf_open_fd() which also uses psf_open_file() but - does not currently support the offset parameter. - - * doc/api.html - Document sf_open_fd(). - -2003-03-09 Erik de Castro Lopo - - * src/sndfile.c - Fixed a memory leak reported by Evgeny Karpov. Memory leak only occurred - when an attempt was made to read and the open() call fails. - -2003-03-08 Erik de Castro Lopo - - * tests/open_fail_test.c - New test program to check for memory leaks when sf_open fails on a valid - file. Currently this must be run manually under valgrid. - - * tests/Makefile.am - Hook new test program into build. - -2003-03-03 Erik de Castro Lopo - - * Octave/sndfile_save.m Octave/sndfile_play.m - Added a -mat-binary option to the octave save command to force the output - to binary mode even if the user has set ascii data as the default. Found - by Christopher Moore. - -2003-02-27 Erik de Castro Lopo - - * doc/dither.html - New file which will document the interface which allows the addition of - audio dither when sample word sizes are being reduced. - - * src/dither.c - More work. - -2003-02-26 Erik de Castro Lopo - - * tests/misc_test.c - In update_header_test(), make HTK files a special case. - - * doc/index.html - Added HTK to the feature matrix. - -2003-02-25 Erik de Castro Lopo - - * src/htk.c - New file for reading/writing HMM Tool Kit files. - - * src/sndfile.h.in src/sndfile.c src/command.c src/Makefile.am - Hook in htk.c - - * tests/write_read_test.tpl tests/misc_test.c tests/Makefile.am - Add tests for HTK files. - -2003-02-22 Erik de Castro Lopo - - * src/wav.c - Fixed a bug where the LIST chunk length was being written incorrectly. - - * tests/string_test.c - Added call to check_log_buffer(). - Minor cleanups. - -2003-02-10 Erik de Castro Lopo - - * src/wav_w64.h - Applied patch from Antoine Mathys to add extra WAV format definitions and - a G72x_ADPCM_WAV_FMT struct definition. - - * src/wav_w64.c - Applied patch from Antoine Mathys which converts wav_w64_format_str() from - one huge inefficient switch statement to a binary search. - - * tests/string_test.c - Dump log buffer if tests fail. - -2003-02-07 Erik de Castro Lopo - - * tests/string_test.c - David Viens supplied some modifications to this file which showed up a bug - when using sf_set_string() and the sf_writef_float() functions. - - * src/sndfile.c - Fixed the above bug. - -2003-02-06 Erik de Castro Lopo - - * doc/FAQ.html - Added Q and A on how to detect libsndfile in configure.in (at the suggestion - of Davy Durham). - -2003-02-05 Erik de Castro Lopo - - * src/sndfile.h.in - Add enums and typedefs for dither. - Deprecate SFC_SET_ADD_DITHER_ON_WRITE and SFC_SET_ADD_DITHER_ON_READ, to be - replaced with SFC_SET_DITHER_ON_WRITE and SFC_SET_DITHER_ON_READ which will - allow different dither algorithms to be enabled. - Added SFC_GET_DITHER_INFO_COUNT and SFC_GET_DITHER_INFO. - - * src/sndfile.h.in src/Version_script.in Win32/libsndfile.def. - Added public sf_dither_*() functions. - - * src/sndfile.c - Implement commands above. - - * src/dither.c - More work. Framework and external hooks into dither algorithms complete. - -2003-02-03 Erik de Castro Lopo - - * doc/version-1.html libsndfile_version_convert.py - Remove redundant files. - - * doc/index.html doc/api.html - Remove links to version-1.html. - - * src/dither.c - New file to allow the addition of audio dither on input and output. - - * src/common.h - Add prototype for dither_init() function. - - * Makefile.am doc/Makefile.am - Changes for added and removed files. - -2003-02-02 Erik de Castro Lopo - - * Win32/Makefile.msvc - Changes to force example binaries to be placed in the top level directory - instead of the examples/ directory. - Add src/strings.c and src/xi.c to the build. - Add string_test to build and to tests on WAV files. - - * doc/index.html - Added XI to support matrix. - -2003-01-27 Erik de Castro Lopo - - * src/sndfile.h.in - Added prototypes for sf_get_string() and sf_set_string() and SF_STR_* - enum values. - - * src/sndfile.c - Added public interface to sf_get_string() and sf_set_string(). - - * src/wav.c - Added code for setting and getting strings in WAV files. - - * tests/string_test.c - New test program for sf_get_string() and sf_set_string() functionality. - - * tests/Makefile.am - Hook new test program into build and test framework. - -2003-01-26 Erik de Castro Lopo - - * src/common.h - Added fields to SF_PRIVATE for string data needed to implement - sf_get_string() and sf_set_string(). - - * src/strings.c - New file for storing and retrieving strings to/from files. - - * src/Makefile.am - Added strings.c to build. - -2003-01-25 Erik de Castro Lopo - - * src/xi.c - Read seems to be working so looking at write. - - * src/sndfile.h.in - Added SF_FORMAT_XI, SF_FORMAT_DPCM_8 and SF_FORMAT_DPCM_16 enum values. - - * tests/floating_point_test.c tests/lossy_comp_test.c tests/Makefile.am - Added test for 8 and 16 bit XI format files. - -2003-01-24 Erik de Castro Lopo - - * doc/index.html - Added a non-lawyer readable summary of the licensing provisions as - suggested by Steve Dekorte. - -2003-01-23 Erik de Castro Lopo - - * src/wav.c - Fixed a compiler warning found by Alexander Lerch. - -2003-01-18 Erik de Castro Lopo - - * configure.ac - Fixed the multiple linking of libm. - -2003-01-17 Erik de Castro Lopo - - * Win32/Makefile.mcvs - Added comments on the correct way to set up the MSVCDir environment - variable. - - * doc/win32.html - Add on how to set up the MSVCDir environment variable. - -2003-01-15 Erik de Castro Lopo - - * examples/sndfile-play.c examples/sndfile-info.c - When run on Win32 without any command line parameters print a message and - then sleep for 5 seconds. This means the when somebody double clicks on - these programs in explorer the user will actually see the message. - -2003-01-14 Erik de Castro Lopo - - * tests/misc_test.c - Bypass permission test if running as root because root is allowed to open - a readonly file for write. - -2003-01-08 Erik de Castro Lopo - - * Win32/Makefile.msvc - Added pvf.c and xi.c source files to project. - - * src/sndfile.h - Updated for PVF files. - -2003-01-07 Erik de Castro Lopo - - * src/sndfile.c - Modified validate_sfinfo() to force samplerate, channels and sections - to be >= 1. - In format_from_extension() replaced calls to does_extension_match() - with strcmp(). - - * src/xi.c - More work. - -2003-01-06 Erik de Castro Lopo - - * doc/Makefile.am - Added octave.html which had been left out. Found by Jan Weil. - -2003-01-05 Erik de Castro Lopo - - * src/pvf.c src/common.h src/sndfile.c - Fixed error handling for PVF files. - - * src/xi.c - New file for handling Fasttracker 2 Extended Instrument files. Not working - yet and included when configured with --enable-experimental. - - * src/sndfile.c src/common.h - Hooked in new file xi.c. - -2002-12-30 Erik de Castro Lopo - - * src/rx2.c - Added a patch from Marek Peteraj which sheds a little more light on the - slices within an RX2 file. Still need to find out data encoding. - -2002-12-20 Erik de Castro Lopo - - * src/wav.c - Started work on decoding 'acid' and 'strc' chunks. - -2002-12-14 Erik de Castro Lopo - - * tests/peak_check_test.c - Minor cleanup. - -2002-12-12 Erik de Castro Lopo - - * tests/write_read_test.tpl - Added check to make sure no error was generated when an attempt was made to - read past the end of the file. - -2002-12-11 Erik de Castro Lopo - - * doc/lists.html - Added "mailto" links for all three lists. - - * src/pvf.c - New file for Portable Voice Format files. - - * src/sndfile.h.in src/sndfile.c src/common.h src/command.c src/Makefile.am - Added hooks for SF_FORMAT_PVF format files. - - * tests/write_read_test.tpl tests/std*.c - Add tests for SF_FORMAT_PVF. - - * doc/index.html - Add PVF to the compatibility matrix. - - * src/pcm.c src/alaw.c src/ulaw.c src/float32.c src/double64.c - Previously, attempts to read beyond the end of a file would set psf->error - to SFE_SHORT_ERROR. This behaviour diverged from the behaviour of the POSIX - read() call but has now been fixed. - Attempts to read beyond the end of the file will return a short read count - but will not longer set any error. - -2002-12-09 Erik de Castro Lopo - - * src/sndfile.c - Add more sanity checking when opening a RAW file for read. When format is - not RAW, zero out all members of the SF_INFO struct. - - * tests/raw_test.c - Add bad_raw_test() to check for above problem. - - * tests/stdin_test.c examples/sndfile-info.c - Set the format field of the SF_INFO struct to zero before calling - sf_open(). - - * doc/api.html - Add information about the need to set the format field of the SF_INFO struct - to zero when opening non-RAW files for read. - - * configure.ac - Removed use of conversion script on Solaris. Not all Solaris versions - support it. - - * doc/lists.html - New file containg details of the mailing lists. - - * doc/index.html - Add a link to the above new file. - -2002-12-04 Erik de Castro Lopo - - * tests/dft_cmp.c - Fixed a SIGFPE on Alpha caused by a log10 (0.0). Thanks to Joshua Haberman - for providing the gdb traceback. - -2002-11-28 Erik de Castro Lopo - - * src/wav.c - Added more capabilities to 'smpl' chunk parser. - - * src/sndfile.c - Fixed some (not all) possible problems found with Flawfinder. - -2002-11-24 Erik de Castro Lopo - - * src/sndfile.c - Fixed a bug in sf_seek(). This bug could only occur when an attempt was - made to read beyond the end and then sf_seek() was called with a whence - parameter of SEEK_CUR. - - * src/file_io.c - Win32's _fstati64() does not work, it returns BS. Re-implemented - psf_get_filelen() in terms of psf_fseek(). - - * tests/write_read_test.tpl - Add a test to detect above bug. - - * src/float_cast.h - Modification to prevent compiler warnings on Mac OS X. - - * src/file_io.c - Fixes for windows (what a f**ked OS). - -2002-11-08 Erik de Castro Lopo - - * configure.ac - Disable use of native lrint()/lrintf() on Mac OSX. These functions exist on - Mac OSX 10.2 but not on 10.1. Forcing the use of the versions in - src/float_cast.h means that a library compiled on 10.2 will still work on - 10.1. - -2002-11-06 Erik de Castro Lopo - - * configure.in configure.ac - Renamed configure.in to configure.ac as expected by later versions of - autoconf. - Slight hacking of configure.ac to work with version 2.54 of autoconf. - Changed to using -dumpversion instead of --version for determining GCC - version numer as suggested by Anand Kumria. - - * src/G72x/Makefile.am - Slight hacking required for operation with automake 1.6.3. - -2002-11-05 Erik de Castro Lopo - - * src/common.c - In psf_binheader_readf() changed type parameter type "b" type from size_t - to int to prevent errors on IA64 CPU where sizeof (size_t) != sizeof (int). - Thanks to Enrique Robledo Arnuncio for debugging this. - -2002-11-04 Erik de Castro Lopo - - * test/command_test.tpl - Changed test value so test would pass on Solaris. - - * src/Version_script.in - Modified version numbering so that later versions of 1.0.X can replace - earlier versions without recompilation. - - * src/vox_adpcm.c - Fixed bug causing short reads. - -2002-11-03 Erik de Castro Lopo - - * test/floating_point_test.c - Code cleanup using functions from util.c. - Add test for IEEE replacement floats and doubles. - -2002-11-01 Erik de Castro Lopo - - * src/wav.c - Fixed a possible divide by zero error when read the 'smpl' chunk. Thanks to - Serg Repalov for the example file. - - * tests/pcm_test.tpl - Used sf_command (SFC_TEST_IEEE_FLOAT_REPLACE) to test IEEE replacement code. - Clean up pcm_double_test(). - - * src/float32.c src/double64.c - Force use of IEEE replacement code using psf->ieee_replace is TRUE, - Print message to log_buffer as well. - Rename all broken_read_* and broken_write* functions to replace_read_* and - replace_write_*. - - * tests/util.tpl - Added string_in_log_buffer(). - - * tests/pcm_test.tpl - Use string_in_log_buffer() to ensure that IEEE replacement code has been - used. - - * configure.in - Removed --enable-force-broken-float option. IEEE replacement code is now - always tested. - -2002-10-31 Erik de Castro Lopo - - * src/double64.c - Implement code for read/writing IEEE doubles on platforms where the native - double format is not IEEE. - - * src/float32.c src/common.h - Remove float32_read() and float32_write(). Replace with float32_le_read(), - float32_be_read(), float32_le_write() and float32_be_write() to match stuff - in src/double64.c. - - * src/common.c - Fix all usage of float32_write(). - - * src/sndfile.h.in - Added SFC_TEST_IEEE_FLOAT_REPLACE command (testing only). - - * src/common.h - Added SF_PRIVATE field ieee_replace. - - * src/sndfile.c - In sf_command() set/reset psf->ieee_replace. - -2002-10-26 Erik de Castro Lopo - - * tests/pcm_test.tpl - Fixed a problem when testing with --enable-force-broken-float. The test was - generating a value of negative zero and the broken float code is not able - to write negative zero. Removing the negative zero fixed the test. - -2002-10-25 Erik de Castro Lopo - - * src/file_io.c - Added fix for Cygwin (suggested by Maros Michalik). - -2002-10-23 Erik de Castro Lopo - - * src/file_io.c - Improved error detection and handling. - - * src/file_io.c src/common.h - Removed functions psf_ferror() and psf_clearerr() which were redundant - after above improvements. - - * src/aiff.c src/svx.c src/w64.c src/wav.c - Removed all use of psf_ferror() and psf_clearerr(). - - * src/sndfile.c - Removed #include of , , and which - are no longer needed. - - * tests/misc_test.c - Added test to make sure the correct error message is returned with an - existing read-only file is openned for write. - -2002-10-21 Erik de Castro Lopo - - * doc/index.html doc/api.html - Updated for OKI Dialogic ADPCM files. - - * src/command.c - Added VOX ADPCM to sub_fomats. - -2002-10-20 Erik de Castro Lopo - - * src/vox_adpcm.c src/Makefile.am - New file for handling OKI Dialogic ADPCM files. - - * src/sndfile.h - Add new subtype SF_FORMAT_VOX_ADPCM. - - * src/sndfile.c - Renamed function is_au_snd_file () to format_from_extenstion () and expanded - its functionality to detect headerless VOX files. - - * src/raw.c - Added hooks for SF_FORMAT_VOX_ADPCM. - - * examples/sndfile-info.c - Print out file duration (suggested by Conrad Parker). - - * libsndfile.spec.in - Force installation of sndfile.pc file (found by John Thompson). - - * tests/Makefile.am tests/lossy_comp_test.c tests/floating_point_test.c - Add tests for SF_FORMAT_VOX_ADPCM. - -2002-10-18 Erik de Castro Lopo - - * tests/misc_test.c - Add test which attempts to write to /dev/full (on Linux anyway) to check - for correct handling of writing to a full filesystem. - - * src/sndfile.c - Return correct error message if the header cannot be written because the - filesystem is full. - - * tests/util.tpl - Corrected printing of file mode in error reporting. - - * src/mat5.c - Fixed a bug where a MAT5 file written by libsndfile could not be opened by - Octave 2.1.36. - -2002-10-13 Erik de Castro Lopo - - * src/common.h src/file_io.c - All low level file I/O have been modified to be better able to report - system errors resulting from calling system level open/read/write etc. - - * src/*.c - Updated for compatibility with above changes. - - * examples/cooledit-fixer.c - New example program which fixes badly broken file created by Syntrillium's - Cooledit which are marked as containing PCM samples but actually contain - floating point data. - - * examples/Makefile.am - Hooked cooledit-fixer into the build system. - -2002-10-10 Erik de Castro Lopo - - * doc/command.html - Document SFC_GET_FORMAT_INFO. - -2002-10-09 Erik de Castro Lopo - - * examples/wav32_aiff24.c examples/sndfile2oct.c examples/sfhexdump.c - examples/sfdump.c - Removed these files because they weren't interesting. - - * examples/sfconvert.c examples/sndfile-convert.c - Renamed the first to the latter. - - * examples/Makefile.am - Added sndfile-convert to the bin_PROGRAMS, so it is installed when the lib - is installed. - Removed old programs wav32_aiff24 and sndfile2oct. - - * man/sndfile-convert.1 - New man page. - - * examples/sndfile-convert.c - Added some gloss now that sndfile-convert.c is an installed program. - - * src/sndfile.h.in src/sndfile.c src/common.h src/command.h - Added command SFC_GET_FORMAT_INFO. - - * tests/command_test.c - Added tests form SFC_GET_FORMAT_INFO. - -2002-10-08 Erik de Castro Lopo - - * src/sndfile.c - In sf_format_check() return error if samplerate < 0. - -2002-10-07 Erik de Castro Lopo - - * src/aiff.c - Fixed bug in handling of COMM chunks with a 4 byte encoding byte but no - encoding string. - -2002-10-06 Erik de Castro Lopo - - * src/sndfile.c - Fixed repeated word in an error message. - -2002-10-05 Erik de Castro Lopo - - * doc/index.html - Improved advertising in Features section. - -2002-10-04 Erik de Castro Lopo - - * src/wav.c - Added decoding of 'labl' chunks within 'LIST' chunks. - - * src/common.h - Added (experimental only) SF_FORMAT_OGG and SF_FORMAT_VORBIS and definition - of ogg_open(). This is nowhere near working yet. - - * src/sndfile.c - Added detection of 'OggS' file marker and added call to ogg_open() to - switch statement. - - * src/ogg.c - New file. Very early start of Ogg Vorbis support. - - * src/wav.c - Added handling of brain-damaged and broken Cooledit "32 bit 24.0 float - type 1" files. These files are marked as being 24 bit WAVE_FORMAT_PCM with - a block alignment of 4 times the numbers of channels but are in fact 32 bit - floating point. - -2002-10-02 Erik de Castro Lopo - - * configure.in - Modified option --enable-experimental to set ENABLE_EXPERIMENTAL_CODE in - config.h to either 0 or 1. - - * src/sndfile.c - Modify sf_command (SFC_GET_LIB_VERSION) to append "-exp" to the version - string if experimental code has been enabled. - -2002-10-01 Erik de Castro Lopo - - * src/Makefile.am - Added -lm to libsndfile_la_LIBADD. This means that -lm is not longer needed - in the link line when linking something to libsndfile. - - * tests/Makefile.am examples/Makefile.am - Removed -lm from all link lines. - - * sndfile.pc.in - Removed -lm from Libs line. - -2002-09-24 Erik de Castro Lopo - - * src/file_io.c - Removed all perror() calls. - - * src/nist.c - Removed calls to exit() function. - Added check to detect NIST files dammaged from Unix CR -> Win32 CRLF - conversion process. - -2002-09-24 Erik de Castro Lopo - - * src/sndfile.h.in src/sndfile.c - New function sf_strerror() which will eventually replace functions - sf_perror() and sf_error_str(). - Function sf_error_number() has also been changed, but this was documented - as being for testing only. - - * doc/api.html - Documented above changes. - - * tests/*.c examples/*.c - Changed to new error functions. - -2002-09-22 Erik de Castro Lopo - - * configure.in - Detect GCC version, and print a warning message about writeable strings - it GCC major version number is less than 3. - -2002-09-21 Erik de Castro Lopo - - * src/sndfile.h.in doc/api.html - Documentation fixes. - -2002-09-19 Erik de Castro Lopo - - * src/Version_script.in src/Makefile.am configure.in - Use the version script to prevent the exporting of all non public symbols. - This currently only works with Linux. Will test on Solaris as well. - - * src/float_cast.h - Added #ifndef to prevent the #warning directives killing the SGI MIPSpro - compiler. - - * src/au_g72x.c src/double64.c src/float32.c src/gsm610.c src/ima_adpcm.c - src/ms_adpcm.c - Fix benign compiler warnings arising from previously added compiler - flags. - -2002-09-18 Erik de Castro Lopo - - * src/sndfile.c - Fixed a bug in sf_error_str() where errnum was used as the index instead - of k. Found by Tim Hockin. - - * examples/sndfile-play.c - Fixed a compiler warning resulting from a variable shadowing a previously - defined local. - -2002-09-17 Erik de Castro Lopo - - * src/sndfile.h.in src/sndfile.c - Added command SFC_SET_RAW_START_OFFSET. - - * doc/command.html - Document SFC_SET_RAW_START_OFFSET. - - * tests/raw_test.c tests/Makefile.am - Add new file for testing SF_FORMAT_RAW specific functionality. - - * tests/dwvw_test.c - Updates. - -2002-09-16 Erik de Castro Lopo - - * src/wav.c - Modified reading of 'smpl' chunk to take account of the sampler data field. - - * tests/utils.tpl tests/utils.h - Added function print_test_name(). - - * tests/misc_test.c tests/write_read_test.tpl tests/lossy_comp_test.c - tests/pcm_test.tpl tests/command_test.tpl tests/floating_point_test.c - Convert to use function print_test_name(). - -2002-09-15 Erik de Castro Lopo - - * doc/octave.html - Added a link to some other Octave scripts for reading and writing sound - files. - - * src/paf.c - Change type of dummy data field to int. This should fix a benign compiler - warning on some CPUs. - Removed superfluous casts resulting from the above change. - - * src/rx2.c - More hacking. - -2002-09-14 Erik de Castro Lopo - - * src/mat5.c src/common.c - Changed usage of snprintf() to LSF_SNPRINTF(). - - * Win32/Makefile.msvc - Updated to include new files and add new tests. - - * Win32/config.h Win32/sndfile.h - Updated. - - * doc/api.html - Added note about the possibility of "missing" features actually being - implemented as an sf_command(). - -2002-09-13 Erik de Castro Lopo - - * tests/misc_test.c - Added previously missing update_header_test and zero_data_tests for PAF, - MAT4 and MAT5 formats. - - * src/paf.c src/mat4.c src/mat5.c - Fixed bugs uncovered by new tests above. - - * src/mat5.c - Generalised parsing of name fields of MAT5 files. - - * src/mat5.c src/sndfile.c - Added support for unsigned 8 bit PCM MAT5 files. - - * tests/write_read_test.tpl - Added test for unsigned 8 bit PCM MAT5 files. - - * doc/index.html - Added unsigned 8 bit PCM MAT5 to capabilities matrix. - -2002-09-12 Erik de Castro Lopo - - * test/update_header_test.c tests/misc_test.c - Renamed update_header_test.c to misc_test.c. - Added zero_data_test() to check for case where file is opened for write and - closed immediately. The resulting file can be left in a state where - libsndfile cannot open it. Problem reported by Werner Schweer, the author - of Muse. - - * src/aiff.c - Removed superfluous cast. - - * src/wav.c src/svx.c - Fixed case of file generated with no data. - Removed superfluous cast. - - * src/sndfile.c - Fixed error on IA64 platform caused by incorrect termination of - SndfileErrors struct array. This problem was found in the Debian buildd - logs (http://buildd.debian.org/). - - * configure.in - Added Octave directory. - - * Octave/Makefile.ma - New Makfile.am for Octave directory. - - * Octave/sndfile_load.m Octave/sndfile_save.m Octave/sndfile_play.m - New files for working with Octave. - - * doc/octave.html - Document explaining the use of the above three Octave scripts. - -2002-09-10 Erik de Castro Lopo - - * src/sndfile.c - Fixed bug in RDWR mode. - -2002-09-09 Erik de Castro Lopo - - * src/common.c - Fixed psf_get_date_str() for systems which don't have gmtime_r() or - gmtime(). - - * src/file_io.c - Added #include for Win32. Reported by Koen Tanghe. - -2002-09-08 Erik de Castro Lopo - - * src/common.c - Added 'S' format specifier for psf_binheader_writef() which writes a C - string, including single null terminator to the header. - Added 'j' format specifier to allow jumping forwards or backwards in the - header. - Added function psf_get_date_str(). - - * src/mat5.c - Complete read and write support. - - * doc/index.html - Added entries for MAT4 and MAT5 in capabilities matrix. - -2002-09-06 Erik de Castro Lopo - - * src/mat4.c - Completed read and write support. - - * src/common.h src/sndfile.c - Added MAT4 and MAT5 specific error messages. - - * tests/write_read_test.tpl tests/Makefile.am - Added tests for MAT4 and MAT5 files. - - * tests/stdio_test.c tests/stdout_test.c tests/stdin_test.c - Added tests for MAT4 and MAT5 files. - -2002-09-05 Erik de Castro Lopo - - * src/command.c - Added elements for SF_FORMAT_MAT4 and SF_FORMAT_MAT5 to major_formats - array. - - * examples/sfconvert.c - Added mat4 and mat5 output targets. - -2002-09-04 Erik de Castro Lopo - - * src/sndfile.c - Added check to prevent errors openning read only formats for read/write. - - * src/interleave.c - New file for interleaving non-interleaved data. Non-interleaved data is - only supported on read. - - * src/Makefile.am - Added src/interleave.c to build. - -2002-09-03 Erik de Castro Lopo - - * src/double64.c src/common.h - Added double64_be_read(), double64_le_read(), double64_be_write() and - double64_le_write() which replace double64_read() and double64_write(). - - * src/common.c - Cleanup of psf_binheader_readf() and add ability to read big and little - endian doubles (required by mat4.c and mat5.c). - Add ability for psf_binheader_writef() to write doubles to sound file - headers. - -2002-09-01 Erik de Castro Lopo - - * src/mat5.c - New file for reading Matlab (tm) version 5 data files. This is also the - native binary file format for version 2.1.X of GNU Octave which will be - used for testing. - Not complete yet. - - * src/mat4.c - New file for reading Matlab (tm) version 4.2 data files. This is also the - native binary file format for version 2.0.X of GNU Octave which will be - used for testing. - Not complete yet. - - * src/sndfile.h.in src/sndfile.c src/common.h src/command.c src/Makefile.am - Mods to add Matlab files. - - * src/common.[ch] - Added readf_endian field to SF_PRIVATE struct allowing endianness to - remembered across calls to sf_binheader_readf(). - Fixed bug in width_specifier behaviour for printing hex values. - -2002-08-31 Erik de Castro Lopo - - * src/file_io.c - Check return value of close() call in psf_fclose(). - -2002-08-24 Erik de Castro Lopo - - * src/ms_adpcm.c - Commented out some code where 0x10000 was being subtracted from a short - and the result assigned to a short again. Andrew Zaja found this. - -2002-08-23 Erik de Castro Lopo - - * doc/command.html - Fixed typo found by Tommi Ilmonen. - - * src/ima_adpcm.c - Changed type of diff from short to int to prevent errors which can occur - during very rare circumstances. Thanks to FUWAFUWA. - -2002-08-16 Erik de Castro Lopo - - * tests/floating_point_test.c - Disable testing on machines without lrintf(). - - * Win32/Makefile.msvc - Added dwd.c and wve.c to build. - - * configure.in - Bumped version to 1.0.0. - -2002-08-15 Erik de Castro Lopo - - * src/file_io.c - Add a #include for Mac OS 9. Thanks to Stephane Letz. - - * src/wav.c - Changed an snprintf to LSF_SNPRINTF. - - * doc/Makefile.am - Added version-1.html. - -2002-08-14 Erik de Castro Lopo - - * configure.in - Bumped version to 1.0.rc6. - - * src/*.c - Modified scaling of normalised floats and doubles to integers. Until now - this has been done by multiplying by 0x8000 for short output, 0x80000000 - for 32 bit ints and so on. Unfortunately this can cause an overflow and - wrap around in the target value. All thes values have therefore been - reduced to 0x7FFF, 0x7FFFFFFF and so on. The conversion from ints to - normalised floats and doubles remains unchanged. This does mean that for - repeated conversions normalised float -> pcm16 -> normalised float would - result in a decrease in amplitude of 0x7FFF/0x8000 on every round trip. - This is undesirable but less undesireable than the wrap around I am trying - to avoid. - - * tests/floating_point_test.c - Removed file hash checking because new float scaling procedure introduced - above prevented the ability to crate a has on both x86 and PowerPC systems. - -2002-08-13 Erik de Castro Lopo - - * src/txw.c - Completed reading of TXW files. Seek doesn't work yet. - - * src/file_io.c - Added a MacOS 9 replacement for ftruncate(). - - * MacOS/sndfile.h - Added MacOS 9 header file. This should be copied into src/ to compile - libsndfile for MacOS9. - -2002-08-12 Erik de Castro Lopo - - * src/sndfile.c - Fixed commands SF_SET_NORM_DOUBLE and SFC_SET_NORM_FLOAT to return their - values after being set. Reported by Jussi Laako. - - * configure.in - If autogen is not found, touch all .c and .h files in tests/. - - * src/common.c - Added format width specifier to psf_log_printf() for %u, %d, %D and %X. - - * src/dwd.c - Completed implementation of read only access to these files. - - * src/common.h src/*.c src/pcm.c - Removed redundant field chars from SF_PRIVATE struct and modified - pcm_init() to do without it. - -2002-08-11 Erik de Castro Lopo - - * src/wve.c - New file implementing read of Psion Alaw files. This will be a read only - format. Implementation complete. - - * src/dwd/c - Started implementation of DiamondWare Digitized files. Also read only, not - complete. - - * src/wav.c - Add parsing of 'smpl' chunk. - - * src/paf.c - Fixed reading on un-normalized doubles and floats from 24 bit PAF files. - This brings it into line with the reading of 8 bit files into - un-normalized doubles which returns values in the range [-128, 127]. - - * src/common.c - Modified psf_log_printf() to accept the %% conversion specifier to allow - printing of a single '%'. - - * src/sds.c - Read only of 16 bit samples is working. Need to build a test harness for - this and other read only formats. - -2002-08-10 Erik de Castro Lopo - - * configure.in - Added --enable-experimental configure option. - Removed pkg-config message at the end of the configure process. - - * src/sds.c src/txw.c src/rx2.c src/sd2.c - Moved all the code in these files inside #if ENABLE_EXPERIMENTAL_CODE - blocks and added new *_open() function for the case where experimental is - not enabled. These new functions just return SFE_UNIMPLMENTED. - - * Win32/sndfile.h src/sndfile.h.in src/common.h - Removed un-necessary #pragma pack commands. - - * src/file_io.c - Implemented psf_ftruncate() and much other hacking for Win32. - - * Win32/Makefile.msvc - Updated. - - * doc/win32.html - Updated to include the copying of the sndfile.h file from the Win32/ - directory to the src/ directory. - - * Make.bat - Batch file to make compiling on Wi32 a little easier. Implements "make" and - "make check". - -2002-08-09 Erik de Castro Lopo - - * src/file_io.c - Add place holder for ftruncate() on Win32 which doesn't have ftruncate(). - This will need to be fixed later. - - * src/sndfile.h.in - New file (copy of sndfile.h) with sets up @TYPEOF_SF_COUNT_T@ which will be - replaced by the correct type during configure. - - * configure.in - Modified to find a good type for TYPEOF_SF_COUNT_T. - - * src/aiff.c - Fixed a bug when reading malformed headers. - - * src/common.c - Set read values to zero before performing read. - -2002-08-08 Erik de Castro Lopo - - * doc/command.html - Fixed some HTML tags which were not allowing jumps to links within the - page. - - * src/sds.c - Massive hacking on this. - - * src/wav.c - Added recognition of 'clm ' tag. - -2002-08-07 Erik de Castro Lopo - - * doc/index.html - Added beginning of a capabilities list beyond simple file formats which - can be read/written. - - * src/aiff.c - Added parsing of INST and MARK chunks of AIFF files. At the moment this - data is simply recorded in the log buffer. Later it will be possible to - read this data from an application using sf_command(). - - * src/wav.c - Added parsing of 'cue ' chunk which contains loop information in WAV files. - - * exampes/sndfile-info.c - Changed reporting of Samples to Frames. - - * src/wav.c src/w64.c src/aiff.c src/wav_w64.h - Moved from a samples to a frames nomenclature to avoid confusion. - - * doc/FAQ.html - What's the best format for storing temporary files? - - * src/sds.c - New file for reading/writing Midi Sample Dump Standard files. - - * src/Makefile.am src/sndfile.c src/common.[ch] - Added hooks for sds.c. - - * examples/sndfile-info.c - Changed from using sf_perror() to using sf_error_str(). - -2002-08-06 Erik de Castro Lopo - - * doc/api.html - Added explanation of mode parameter for sf_open(). - Added explanation of usage of SFM_* values in sf_seek(). - - * src/sndfile.[ch] src/command.c src/file_io.c src/common.h - Implemented SFC_FILE_TRUNCATE to allow a file to be truncated. File - truncation was suggested by James McCartney. - - * src/command.html - Documented SFC_FILE_TRUNCATE. - - * tests/command_test.c - Add tests for SFC_FILE_TRUNCATE. - - * src/sndfile.c - Added a thrid parameter to the VALIDATE_SNDFILE_AND_ASSIGN_PSF macro to - make resetting the error number optional. All uses of the macro other than - in error reporting functions were changed to reset the error number. - - * src/pcm.c - Fixed a bug were sf_read_* was logging an SFE_SHORT_READ even when no error - occurred. - - * tests/write_read_test.tpl - Added tests of internal error state. - -2002-08-05 Erik de Castro Lopo - - * src/GSM610/private.h src/GSM610/*.c src/GSM610/Makefile.am - Renamed private.h to gsm610_priv.h to prevent clash with other headers - named private.h in other directories. (Probably only a problem on MacOS 9). - - * src/G72x/private.h src/G72x/*.c src/G72x/Makefile.am - Renamed private.h to g72x_priv.h to prevent clash with other headers - named private.h in other directories. (Probably only a problem on MacOS 9). - - * MacOS/config.h - Changed values of HAVE_LRINT and HAVE_LRINTF to force use of code in - float_cash.h. - - * src/sndfile.h - Changes the name of samples field of the SF_INFO to frames. The old name - had caused too much confusion and it simply had to be changed. There will - be at least one more pre-release. - -2002-08-04 Erik de Castro Lopo - - * doc/index.html - Updated formats matrix to include RAW (header-less) GSM 6.10. - Fix specificaltion of table and spelling mistakes. - - * src/sndfile.c src/command.c - Fixed bug in SFC_CALC_MAX_SIGNAL family and psf_calc_signal_max (). - - * tests/command.c - Removed cruft. - Added test for SFC_CALC_MAX_SIGNAL and SFC_CALC_NORM_MAX_SIGNAL. - - * configure.in - Update version to 1.0.0rc5. - - * sfendian.h - Removed inclusion of un-necessary header. - -2002-08-03 Erik de Castro Lopo - - * src/aiff.c - Minor fixes of info written to log buffer. - - * src/float_cast.h - Add definition of HAVE_LRINT_REPLACEMENT. - - * tests/floating_point_test.c - Fix file hash check on systems without lrint/lrintf. - - * tests/dft_cmp.c - Limit SNR to less than -500.0dB. - - * examples/sndfile2oct.c - Fixed compiler warnings. - - * doc/api.html - Fixed error where last parameter of sf_error_str() was sf_count_t instead - of size_t. - -2002-08-02 Erik de Castro Lopo - - * doc/FAQ.html - Why doesn't libsndfile do interleaving/de-interleaving. - - * tests/pcm_test.tpl - On Win32 do not perform hash check on files containing doubles. - -2002-08-01 Erik de Castro Lopo - - * src/common.h - Defined SF_COUNT_MAX_POSITIVE() macro, a portable way of setting variables - of type sf_count_t to their maximum positive value. - - * src/dwvw.c src/w64.c - Used SF_COUNT_MAX_POSITIVE(). - -2002-07-31 Erik de Castro Lopo - - * src/paf.c - Fixed bug in reading/writing of 24 bit PCM PAF files on big endian systems. - - * tests/floating_point_tests.c - Fixed hash values for 24 bit PCM PAF files. - Disabled file has check if lrintf() function is not available and added - warning. - Decreased level of signal from a peak of 1.0 to a value of 0.95 to prevent - problems on platforms without lrintf() ie Solaris. - -2002-07-30 Erik de Castro Lopo - - * src/wav.c - Fixed a problem with two different kinds of mal-formed WAV file header. The - first had the 'fact' chunk before the 'fmt ' chunk, the other had an - incomplete 'INFO' chunk at the end of the file. - - * src/w64.c - Added fix to allow differentiation between W64 files and ACID files. - - * src/au_g72x.c src/common.h src/sndfile.c - Added error for G72x encoded files with more than one channel. - - * tests/pcm_test.tpl tests/utils.tpl - Moved function check_file_hash_or_die() to utils.tpl. Function was then - modified to calculate the has of the whole file. - - * src/wav.c - Fixed problem writing the 'fact' chunk on big endian systems. - - * tests/sfconvert.c - Fixed bug where .paf files were being written as Sphere NIST. - -2002-07-29 Erik de Castro Lopo - - * src/voc.c - Fix for reading headers generated using SFC_UPDATE_HEADER_NOW. - - * doc/command.html - Add docs for SFC_UPDATE_HEADER_NOW and SFC_SET_UPDATE_HEADER_AUTO. - -2002-07-28 Erik de Castro Lopo - - * man/sndfile-info.1 man/sndfile-play.1 - Added manpages supplied by Joshua Haberman the Debian maintainer for - libsndfile. Additional tweaks by me. - - * configure.in man/Makefile.am - Hooked manpages into autoconf/automake system. - - * src/sndfile.c - Added hooks for SFC_SET_UPDATE_HEADER_AUTO. - - * tests/update_header_test.c - Improved rigor of testing. - - * src/*.c - Fixed problem with *_write_header() functions. - -2002-07-27 Erik de Castro Lopo - - * doc/*.html - Updates to documentation to fix problems found by wdg-html-validator. - - * src/common.h src/command.c - Added normalize parameter to calls to psf_calc_signal_max() and - psf_calc_max_all_channels(). - - * src/sndfile.c - Added handling for commands SFC_CALC_NORM_SIGNAL_MAX and - SFC_CALC_NORM_MAX_ALL_CHANNELS. - - * doc/command.html - Added entry for SFC_CALC_NORM_SIGNAL_MAX and SFC_CALC_NORM_MAX_ALL_CHANNELS. - -2002-07-26 Erik de Castro Lopo - - * examples/sndfile-play.c Win32/Makefile.msvc - Get sndfile-play program working on Win32. The Win32 PCM sample I/O API - sucks. The sndfile-play program now works on Linux, MacOSX, Solaris and - Win32. - -2002-07-25 Erik de Castro Lopo - - * doc/FAQ.html - New file for frequently asked questsions. - -2002-07-22 Erik de Castro Lopo - - * doc/api.html - Documentation fixes. - - * src/au.[ch] src/au_g72x.c src/G72x/g72x.h - Add support of 40kbps G723 ADPCM encoding. - - * tests/lossy_comp_test.c tests/floating_point_test.c - Add tests for 40kbps G723 ADPCM encoding. - - * doc/index.html - Update support matrix. - -2002-07-21 Erik de Castro Lopo - - * doc/command.html - Documented SFC_GET_SIMPLE_FORMAT_COUNT, SFC_GET_SIMPLE_FORMAT, - SFC_GET_FORMAT_* and SFC_SET_ADD_PEAK_CHUNK. - - * src/sndfile.c src/pcm.c - Add ability to turn on and off the addition of a PEAK chunk for floating - point WAV and AIFF files. - - * src/sndfile.[ch] src/common.h src/command.c - Added sf_command SFC_CALC_MAX_ALL_CHANNELS. Implemented by Maurizio Umberto - Puxeddu. - - * doc/command.html - Docs for SFC_CALC_MAX_ALL_CHANNELS (assisted by Maurizio Umberto Puxeddu). - -2002-07-18 Erik de Castro Lopo - - * src/sndfile.c src/gsm610.c - Finalised support for GSM 6.10 AIFF files and added support for GSM 6.10 - encoded RAW (header-less) files. - - * src/wav.c - Add support for IBM_FORMAT_MULAW and IBM_FORMAT_ALAW encodings. - - * src/api.html - Fixed more documentation bugs. - -2002-07-17 Erik de Castro Lopo - - * src/sndfile.h src/common.h - Moved some yet-to-be-implelmented values for SF_FORMAT_* from the public - header file sndfile.h to the private header file common.h to avoid - confusion about the actual capabilities of libsndfile. - -2002-07-16 Erik de Castro Lopo - - * src/aiff.c src/wav.c - Fixed file parsing for WAV and AIFF files containing non-audio data after - the data chunk. - - * src/aiff.c src/sndfile.c - Add support for GSM 6.10 encoded AIFF files. - - * tests/lossy_comp_test.c tests/Makefile.am - Add tests for GSM 6.10 encoded AIFF files. - - * src/*.c - Fix compiler warnings. - -2002-07-15 Erik de Castro Lopo - - * tests/command_test.c - For SFC_SET_NORM_* tests, change the file format from SF_FORMAT_WAV to - SF_FORMAT_RAW. - - * src/sndfile.c - Added sf_command(SFC_TEST_ADD_TRAILING_DATA) to allow testing of reading - from AIFF and WAV files with non-audio data after the audio chunk. - - * src/common.h - Add test commands SFC_TEST_WAV_ADD_INFO_CHUNK and - SFC_TEST_AIFF_ADD_INST_CHUNK. When these commands are working, they will be - moved to src/sndfile.h - - * src/aiff.c src/wav.c - Begin implementation of XXXX_command() hook for sf_command(). - - * tests/write_read_test.tpl - Added sf_command (SFC_TEST_ADD_TRAILING_DATA) to ensure above new code was - working. - -2002-07-13 Erik de Castro Lopo - - * tests/update_header_test.c - Allow read sample count == write sample count - 1 to fix problems with VOC - files. - - * tests/write_read_test.tpl tests/pcm_test.tpl - Fixed some problems in the test suite discovered by using Valgrind. - -2002-07-12 Erik de Castro Lopo - - * tests/utils.[ch] tests/*.c - Renamed check_log_buffer() to check_log_buffer_or_die(). - - * src/sndfile.c - SFC_UPDATE_HEADER_NOW and SFC_SETUPDATE_HEADER_AUTO almost finished. Works - for all file formats other than VOC. - -2002-07-11 Erik de Castro Lopo - - * src/sndfile.[ch] src/common.h - Started adding functionality to allow the file header to be updated before - the file is closed on files open for SFM_WRITE. This was requested by - Maurizio Umberto Puxeddu who is using libsndfile for file I/O in iCSound. - - * tests/update_header_test.c - New test program to test that the above functionality is working correctly. - - * tests/peak_chunk_test.c tests/floating_point_test.c - Cleanups. - -2002-07-10 Erik de Castro Lopo - - * src/sfendian.[ch] - Changed length count parameters for all endswap_XXX() functions from - sf_count_t (which can be 64 bit even on 32 bit architectures) to int. These - functions are only called frin inside the library, are always called with - integer parameters and doing the actual calculation on 64 bit values is - slow in comparision to doing it on ints. - - * examples/sndfile-play.c - More playback hacking for Win32. - -2002-07-09 Erik de Castro Lopo - - * src/common.c - In psf_log_printf(), changed %D format conversion specifier to %M (marker) and - added %D specifier for printing the sf_count_t type. - - * src/*.c - Changed all usage of psf_log_printf() with %D format conversion specifiers - to use %M conversion instead. - - * tests/pcm_test.tpl tests/pcm_test.def - New files to autogen pcm_test.c. - - * src/pcm.c - Fixed bug in scaling floats and doubles to 24 bit PCM and vice versa. - -2002-07-08 Erik de Castro Lopo - - * configure.in - Fix setup of $ac_cv_sys_largefile_CFLAGS so that sndfile.pc gets valid - values for CFLAGS. - - * examples/sndfile-play.c - Start adding playback support for Win32. - -2002-07-07 Erik de Castro Lopo - - * src/*.c - Worked to removed compiler warnings. - Extensive refactoring. - - * src/common.[ch] - Added function psf_memset() which works like the standard C function memset - but takes and sf_count_t as the length parameter. - - * src/sndfile.c - Replaced calls to memset(0 with calls to psf_memset() as required. - -2002-07-06 Erik de Castro Lopo - - * src/sndfile.c - Added "libsndfile : " to the start of all error messages. This was suggested - by Conrad Parker author of Sweep ( http://sweep.sourceforge.net/ ). - - * src/sfendian.[ch] - Added endswap_XXXX_copy() functions. - - * src/pcm.c src/float32.c src/double64.c - Use endswap_XXXX_copy() functions and removed dead code. - Cleanups and optimisations. - -2002-07-05 Erik de Castro Lopo - - * src/sndfile.c src/sndfile.h - Gave values to all the SFC_* enum values to allow better control of the - interface as commands are added and removed. - Added new command SFC_SET_ADD_PEAK_CHUNK. - - * src/wav.c src/aiff.c - Modified wav_write_header and aiff_write_header to make addition of a PEAK - chunk optional, even on floating point files. - - * tests/benchmark.tpl - Added call to sf_command(SFC_SET_ADD_PEAK_CHUNK) to turn off addition of a - PEAK chunk for the benchmark where we are trying to miximize speed. - - * src.pcm.c - Changed tribyte typedef to something more sensible. - Further conversion speed ups. - -2002-07-03 Erik de Castro Lopo - - * src/command.c - In major_formats rename "Sphere NIST" to "NIST Sphere". - - * src/common.c src/sfendian.c - Moved all endswap_XXX_array() functions to sfendian.c. These functions will - be tweaked to provide maximum performance. Since maximum performance on one - platform does not guarantee maximum performance on another, a small set of - functions will be written and the optimal one chosen at compile time. - - * src/common.h src/sfendian.h - Declarations of all endswap_XXX_array() functions moved to sfendian.h. - - * src/Makefile.am - Add sfendian.c to build targets. - -2002-07-01 Erik de Castro Lopo - - * src/pcm.c src/sfendian.h - Re-coded PCM encoders and decoders to match or better the speed of - libsndfile version 0.0.28. - -2002-06-30 Erik de Castro Lopo - - * src/wav.c - Add checking for WAVPACK data in standard PCM WAV file. Return error if - found. This WAVPACK is *WAY* broken. It uses the same PCM WAV file header - and then stores non-PCM data. - - * tests/benchmark.tpl - Added more tests. - -2002-06-29 Erik de Castro Lopo - - * tests/benchmark.tpl - Added conditional definition of M_PI. - For Win32, set WRITE_PERMS to 0777. - - * Win32/Makefile.msvc - Added target to make generate program on Win32. - - * src/samplitude.c - Removed handler for Samplitude RAP file format. This file type seems rarer - than hens teeth and is completely undocumented. - - * src/common.h src/sndfile.c src/Makefile.am Win32/Makefile.msvc - Removed references to sampltiude RAP format. - - * tests/benchmark.tpl - Benchmark program now prints the libsndfile version number when run. This - program was also backported to version 0 to compare results. Version - 1.0.0rc2 is faster than version 0.0.28 on most conversions but slower on - some. The slow ones need to be fixed before final release. - -2002-06-28 Erik de Castro Lopo - - * tests/benchmark.def tests/benchmark.tpl - New files which generate tests/benchmark.c using Autogen. Added int -> - SF_FORMAT_PCM_24 test. - - * tests/benchmark.c - Now and Autogen output file. - - * tests/Makefile.am - Updated for above changes. - -2002-06-27 Erik de Castro Lopo - - * tests/benchmark.c - Basic benchmark program complete. Need to convert it to Autogen. - - * Win32/Makefile.msvc - Added benchmark.exe target. - -2002-06-26 Erik de Castro Lopo - - * examples/generate.c - New program to generate a number of different output file formats from a - single input file. This allows testing of the created files. - - * tests/benchmark.c - New test program to benchmark libsndfile. Nowhere near complete yet. - - * examples/Makefile.am tests/Makefile.am - New make rules for the two new programs. - -2002-06-25 Erik de Castro Lopo - - * Win32/libsndfile.def - Removed definition for sf_signal_max(). - - * src/sndfile.c - Removed cruft. - - * doc/index.html - A number of documentation bugs were fixed. Thanks to Anand Kumria. - - * doc/version-1.html - Minor doc updates. - - * configure.in - Bumped version to 1.0.0rc2. - - * src/sf_command.h src/Makefile.am - Removed the header file as it was no longer being used. Thanks to Anand - Kunria for spotting this. - - * doc/index.html - A number of documentation bugs were fixed. Thanks to Anand Kumria. - -2002-06-24 Erik de Castro Lopo - - * src/common.h - Test for Win32 before testing SIZEOF_OFF_T so that it works correctly - on Win32.. - - * src/file_io.c - Win32 fixes to ensure O_BINARY is used for file open. - - * doc/win32.html - New file documenting the building libsndfile on Win32. - - * doc/*.html - Updating of documentation. - -2002-06-23 Erik de Castro Lopo - - * tests/pcm_test.c - Minor changes to allow easier determination of test file name. - - * src/sndfile.[ch] - Removed function sf_signal_max(). - - * examples/sndfile-play.c - Changed call to sf_signal_max() to a call to sf_command(). - -2002-06-22 Erik de Castro Lopo - - * src/format.c src/command.c - Renamed format.c to command.c which will now include code for sf_command() - calls to perform operations other than format commands. - - * src/sndfile.c src/sndfile.h - Removed function sf_get_signal_max() which is replaced by commands passed - to sf_command(). - - * src/command.c - Implement commands SFC_CALC_SIGNAL_MAX. - - * doc/command.html - Documented SFC_CALC_SIGNAL_MAX. - -2002-06-21 Erik de Castro Lopo - - * examples/sndfile-play.c - Mods to make sndfile-play work on Solaris. The program sndfile-play now - runs on Linux, MaxOSX and Solaris. Win32 to come. - - * src/format.c - Added SF_FORMAT_DWVW_* to subtype_formats array. - - * src/nist.c - Added support for 8 bit NIST Sphere files. Example file supplied by Anand - Kumria. - -2002-06-20 Erik de Castro Lopo - - * examples/sndfile-info.c - Tidy up of output format. - - * examnples/sndfile-play.c - Mods to make sndfile-play work on MacOSX using Apple's CoreAudio API. - - * configure.in - Add new variables OS_SPECIFIC_INCLUDES and OS_SPECIFIC_LINKS which were - required to supply extra include paths and link parameters to get - sndfile-play working on MacOSX. - - * examples/Makefile.am - Use OS_SPOECIFIC_INCLUDES and OS_SPECIFIC_LINKS to build commands for - sndfile-play. - -2002-06-19 Erik de Castro Lopo - - * src/nist.c - Added ability to read/write new NIST Sphere file types (A-law, u-law). - Header parser was re-written from scratch. Example files supplied by Anand - Kumria. - - * src/sndfile.c - Support for A-law and u-law NIST files. - - * tests/Makefile.am tests/lossy_comp_test.c - Tests for A-law and u-law NIST files. - -2002-06-18 Erik de Castro Lopo - - * tests/utils.c - Fixed an error in error string. - -2002-06-17 Erik de Castro Lopo - - * acinclude.m4 - Removed exit command to allow cross-compiling. - - * Win32/unistd.h src/file_io.c - Moved contents of first file into the second file (enclosed in #ifdef). - Win32/unistd.h is now an empty file but still must be there for libsndfile - to compile on Win32. - - * src/sd2.c, src/sndfile.c: - Fixes for Sound Designer II files on big endian systems. - -2002-06-16 Erik de Castro Lopo - - * configure.in - Modified to work around problems with crappy MacOSX version of sed. - Added sanity check for proper values for CFLAGS. - -2002-06-14 Erik de Castro Lopo - - * src/sndfile.c - Code clean up in sf_open (). - - * Win32/Makefile.msvc - Michael Fink's contributed MSVC++ makefile was hacked to bits and put back - together in a new improved form. - - * src/file_io.c - Fixes for Win32; _lseeki64() returns an invalid argument for calls like - _lseeki64(fd, 0, SEEK_CUR) so need to use _telli64 (fd) instead. - - * src/common.h src/sndfile.c src/wav.c src/aiff.c - Added SFE_LOG_OVERRUN error. - Added termination for potential infinite loop when parsing file headers. - - * src/wav.c src/w64.c - Fixed bug casuing incorrect header generation when opening file read/write. - -2002-06-12 Erik de Castro Lopo - - * doc/api.html - Improved the documentation to make it clearer that the file read method - and the underlying file format are completely disconnected. Suggested - by Josh Green. - - * doc/command.html - Started correcting docs to take into account changes made to the - operations of the sf_command () function. Not complete yet. - - * src/sndfile.c - Reverted some changes which had broken the partially working SDII header - parsing. Now have access to an iBook with OS X so reading and writing SDII - files on all platforms should be a reality in the near future. On Mac this - will involve reading the resource fork via the standard MacOS API. To move - a file from Mac to another OS, the resource and data forks will need to be - combined before transfer. The combined file will be read on both Mac and - other OSes like any other file. - -2002-06-08 Erik de Castro Lopo - - * ltmain.sh - Applied a patch from http://fink.sourceforge.net/doc/porting/libtool.php - which allows libsndfile to compile on MacOSX 10.1. This patch should not - interfere with compiling on other OSes. - - * src/GSM610/private.h - Changes to fix compile problems on MacOSX (see src/GSM610/ChangeLog). - - * src/float_cast.h - Added MacOSX replacements for lrint() and lrintf(). - -2002-06-05 Erik de Castro Lopo - - * src/sndfile.c - Replaced the code to print the filename to the log buffer when a file is - opened. This code seems to have been left out during the merge of - sf_open_read() and sf_open_write() to make a single functions sf_open(). - -2002-06-01 Erik de Castro Lopo - - * src/wav.c - Fixed a bug where the WAV header parser was going into an infinite loop - on a badly formed LIST chunk. File supplied by David Viens. - -2002-05-25 Erik de Castro Lopo - - * configure.in - Added a message at the end of the configuration process to warn about the - need for the use of pkg-config when linking programs against version 1 of - libsndfile. - - * doc/pkg-config.html - New documentation file containing details of how to use pkg-config to - retrieve settings for CFLAGS and library locations for linking files - against version 1 of libsndfile. - -2002-05-17 Erik de Castro Lopo - - * src/wav.c - Fixed minor bug in handling of so-called ACIDized WAV files. - -2002-05-16 Erik de Castro Lopo - - * Win32/libsndfile.def Win32/Makefile.msvc - Two new files contributed by Michael Fink (from the winLAME project) - which allows libsndfile to be built on windows in a MSDOS box by doing - "nmake -f Makefile.msvc". Way cool! - -2002-05-15 Erik de Castro Lopo - - * configure.in - MacOSX is SSSOOOOOOO screwed up!!! I can't believe how hard it is to - generate a tarball which will configure and compile on that platform. - Joined the libtool mailing list to try and get some answers. - -2002-05-13 Erik de Castro Lopo - - * configure.in - Changed to autoconf version 2.50. MacOSX uses autoconf version 2.53 which - is incompatible with with version 2.13 which had been using until now. - The AC_SYS_LARGE_FILE macro distributed withe autoconf 2.50 is missing a - few features so AC_SYS_EXTRA_LARGE file was defined to replace it. - - * configure.in - Changed to automake version 1.5 to try and make a tarball which will - work on MacOSX. - -2002-05-12 Erik de Castro Lopo - - * src/wav_gsm610.c - Changed name to gsm610.c. Added reading/writing of headerless files. - - * src/sndfile.c src/raw.c - Added ability to read/write headerless (SF_FORMAT_RAW) GSM 6.10 files. - -2002-05-11 Erik de Castro Lopo - - * tests/lossy_comp_test.c - Clean up in preparation for Autogen-ing this file. - - * src/GSM610/*.[ch] - Code cleanup and prepartion forgetting file seek working. Details in - src/GSM610/ChangeLog. - - * sndfile.pc.in - Testing complete. Is sndfile.m4 still needed? - -2002-05-09 Erik de Castro Lopo - - * tests/write_read_test.tpl tests/rdwr_test.tpl - Merged tests from these two programs into write_read_test.tpl and deleted - rdwr_test.tpl. - -2002-05-08 Erik de Castro Lopo - - * src/w64.c src/svx.c src/paf.c - Fixed bugs in read/write mode. - -2002-05-07 Erik de Castro Lopo - - * examples/Makefile.am - Renamed sfplay.c to sndfile-play.c and sndfile_info.c to sndfile-info.c for - consistency when these programs become part of the Debian package - sndfile-programs. - - * sndfile.pc.in - New file to replace sndfile-config.in. Libsndfile now uses the pkg-config - model for providing installation parameters to dependant programs. - - * src/sndfile.c - Cleanup of code in sf_open(). - -2002-05-06 Erik de Castro Lopo - - * tests/utils.tpl tests/write_read_test.tpl - More conversion to Autogen fixes and enchancements. - - * src/*.c - Read/write mode is now working for 16, 24 and 32 bit PCM as well as 32 - bit float and 64 bit double data. More tests still required. - - * src/Makefile.am - Added DISTCLEANFILES target to remove config.status and config.last. - - * Win32/Makefile.am MacOS/Makefile.am - Added DISTCLEANFILES target to remove Makefile. - -2002-05-05 Erik de Castro Lopo - - * src/*.[ch] tests/rdwr_test.c - More verifying workings of read/write mode. Fixing bugs found. - - * tests/utils.[ch] - Made these files Autogen generated files. - - * tests/util.tpl tests/util.def - New Autogen files to generate utils.[ch]. Moved some generic test functions - into this file. Autogen is such a great tool! - -2002-05-03 Erik de Castro Lopo - - * src/pcm.c src/float_cast.h Win32/config.h - Fixed a couple of Win32 specific bugs pointed out by Michael Fink - (maintainer of WinLAME) and David Viens. - - * tests/check_log_buffer.[ch] tests/utils.[ch] - Moved check_log_buffer() to utils.[ch] and deleted old file. - -2002-05-02 Erik de Castro Lopo - - * src/common.[ch] src/sndfile.c - New function psf_default_seek() which will be the default seek function - for things like PCM and floating point data. This default is set for - both read and write in sf_open() but can be over-ridden by any codec - during it's initialisation. - -2002-05-01 Erik de Castro Lopo - - * src/au.c - AU files use a data size value of -1 to mean unknown. Fixed au_open_read() - to allow opening files like this. - - * tests/rdwr_test .c - Added more tests. - - * src/sndfile.c - Fixed bugs in read/write mode found due to improvements in the test - program. - -2002-04-30 Erik de Castro Lopo - - * tests/rdwr_test .c - New file for testing read/write mode. - -2002-04-29 Erik de Castro Lopo - - * m4/* - Removed all m4 macros from this directory as they get concatenated to form - the file aclocal.m4 anyway. - - * sndfile.m4 - Moved this from the m4 directory to the root directory asn this is part of - the distribution and is installed during "make install". - -2002-04-29 Erik de Castro Lopo - - * src/float32.c - Removed logging of peaks for all file formats other than AIFF and WAV. - - * tests/write_read_test.tpl tests/write_read_test.def - New files which autogen uses to generate write_read_test.c. Doing it this - way makes write_read_test.c far easier to maintain. Other test programs - will be converted to autogen in the near future. - - * src/*.c - Fixed a few bugs found when testing on Sparc (bug endian) Solaris. - -2002-04-28 Erik de Castro Lopo - - * doc/*.html - Fixed documention versioning. - - * configure.in - Fixed a bug in the routines which search for Large File Support on systems - which have large file support by defualt. - -2002-04-27 Erik de Castro Lopo - - * src/*.[ch] - Found and fixed an issue which can cause a bug in other software (I was - porting Conrad Parker's Sweep program from version 0 of the library to - version 1). When opening a file for write, the libsndfile code would - set the sfinfo.samples field to a maximum value. - - * tests/write_read_test.c - Added tests to detect the above problem. - -2002-04-25 Erik de Castro Lopo - - * src/*.[ch] - Finished base implementation of read/write mode. Much more testing still - needed. - - * m4/largefile.m4 - Macro for detecting Large File Standard capabilities. This macro was ripped - out of the aclocal.m4 file of GNU tar-1.13. - - * configure.in - Added detection of large file support. Files larger than 2 Gigabytes should - now be supported on 64 bit platforms and many 32 bit platforms including - Linux (2.4 kernel, glibc-2.2), *BSD, MacOS, Win32. - - * libsndfile_convert_version.py - A Python script which attempts to autoconvert code written to use version 0 - to version 1. - -2002-04-24 Erik de Castro Lopo - - * src/*.[ch] - Finished base implementation of read/write mode. Much more testing still - needed. - - * tests/write_read_test.c - Preliminary tests for read/write mode added. More needed. - -2002-04-20 Erik de Castro Lopo - - * src/sndfile.[ch] - Removed sf_open_read() and sf_open_write() functions,replacting them with - sf_open() which takes an extra mode parameter (SF_OPEN_READ, SF_OPEN_WRITE, - or SF_OPEN_RDWR). This new function sf_open can now be modified to allow - opening a file formodification (RDWR). - -2002-04-19 Erik de Castro Lopo - - * src/*.c - Completed merging of separate xxx_open_read() and xxx_open_write() - functions. All tests pass. - -2002-04-18 Erik de Castro Lopo - - * src/au.c - Massive refactoring required to merge au_open_read() with au_open_write() - to create au_open(). - -2002-04-17 Erik de Castro Lopo - - * src/*.c - Started changes required to allow a sound file to be opened in read/write - mode, with separate file pointers for read and write. This involves merging - of encoder/decoder functions like pcm_read_init() and pcm_write_init() - int a new function pcm_init() as well as doing something similar for all - the file type specific functions ie aiff_open_read() and aiff_open_write() - were merged to make the function aiff_open(). - -2002-04-15 Erik de Castro Lopo - - * src/file_io.c - New file containing psf_fopen(), psf_fread(), psf_fwrite(), psf_fseek() and - psf_ftell() functions. These function will replace use of fopen/fread/fwrite - etc and allow access to files larger than 2 gigabytes on a number of 32 bit - OSes (Linux on x86, 32 bit Solaris user space apps, Win32 and MacOS). - - * src/*.c - Replaced all instances of fopen with psf_open, fread with psd_read, fwrite - with psf_write and so on. - -2002-03-11 Erik de Castro Lopo - - * src/dwvw.c - Finally fixed all known problems with 12, 16 and 24 bit DWVW encoding. - - * tests/floating_point_test.c - Added tests for 12, 16 and 24 bit DWVW encoding. - -2002-03-03 Erik de Castro Lopo - - * m4/endian.m4 - Defines a new m4 macro AC_C_FIND_ENDIAN, for determining the endian-ness of - the target CPU. It first checks for the definition of BYTE_ORDER in - , then in and . If none of these work - and the C compiler is not a cross compiler it compiles and runs a program - to test for endian-ness. If the compiler is a cross compiler it makes a - guess based on $target_cpu. - - * configure.in - Modified to use AC_C_FIND_ENDIAN. - - * src/sfendian.h - Simplified. - -2002-02-23 Erik de Castro Lopo - - * tests/floating_point_test.c - Tests completely rewritten using the dft_cmp function. Now able to - calculate a quick guesstimate of the Signal to Noise Ratio of the encoder. - -2002-02-15 Erik de Castro Lopo - - * tests/dft_cmp.[ch] - New files containing functions for comparing pre and post lossily - compressed data using a quickly hacked DFT. - - * tests/utils.[ch] - New files containing functions for saving pre and post encoded data in a - file readable by the GNU Octave package. - -2002-02-13 Erik de Castro Lopo - - * m4/lrint.m4 m4/lrintf.m4 - Fixed m4 macros to define HAVE_LRINT and HAVE_LRINTF even when the test - is cached. - -2002-02-12 Erik de Castro Lopo - - * tests/floating_point_test.c - Fixed improper use of strncat (). - -2002-02-11 Erik de Castro Lopo - - * tests/headerless_test.c - New test program to test the ability to open and read a known file type as a - RAW header-less file. - -2002-02-07 Erik de Castro Lopo - - * tests/losy_comp_test.c - Added a test to ensure that the data read from a file is not all zeros. - - * examples/sfconvert.c - Added "-gsm610" encoding types. - -2002-01-29 Erik de Castro Lopo - - * examples/sfconvert.c - Added "-dwvw12", "-dwvw16" and "-dwvw24" encoding types. - - * tests/dwvw_test.c - New file for testing DWVW encoder/decoder. - -2002-01-28 Erik de Castro Lopo - - * src/dwvw.c - Implemented writing of DWVW. 12 bit seems to work, 16 and 24 bit still broken. - - * src/aiff.c - Improved reporting of encoding types. - - * src/voc.c - Clean up. - -2002-01-27 Erik de Castro Lopo - - * src/dwvw.c - New file implementing lossless Delta Word Variable Width (DWVW) encoding. - Reading 12 bit DWVW is now working. - - * src/aiff.c common.h sndfile.c - Added hooks for DWVW encoded AIFF and RAW files. - -2002-01-15 Erik de Castro Lopo - - * src/w64.c - Robustify header parsing. - - * src/wav_w64.h - Header file wav.h was renamed to wav_w64.h to signify sharing of - definitions across the two file types. - - * src/wav.c src/w64.c src/wav_w64.c - Refactoring. - Modified and moved functions with a high degree of similarity between - wav.c and w64.c to wav_w64.c. - -2002-01-14 Erik de Castro Lopo - - * src/w64.c - Completed work on getting read and write working. - - * examples/sfplay.c - Added code to scale floating point data so it plays at a reasonable volume. - - * tests/Makefile.am tests/write_read_test.c - Added tests for W64 files. - -2002-01-13 Erik de Castro Lopo - - * src/*.c - Modded all code in file header writing routines to use - psf_new_binheader_writef(). - Removed psf_binheader_writef() from src/common.c. - Globally replaced psf_new_binheader_writef with psf_binheader_writef. - -2002-01-12 Erik de Castro Lopo - - * src/*.c - Modded all code in file parsing routines to use psf_new_binheader_readf(). - Removed psf_binheader_readf() from src/common.c. - Globally replaced psf_new_binheader_readf with psf_binheader_readf. - - * src/common.[ch] - Added new function psf_new_binheader_writef () which will soon replace - psf_binheader_writef (). The new function has basically the same function - as the original but has a more flexible and capable interface. It also - allows the writing of 64 bit integer values for files contains 64 bit file - offsets. - -2002-01-11 Erik de Castro Lopo - - * src/formats.c src/sndfile.c src/sndfile.h - Added code allowing full enumeration of supported file formats via the - sf_command () interface. - This feature will allow applications to avoid needing recompilation when - support for new file formats are added to libsndfile. - - * tests/command_test.c - Added test code for the above feature. - - * examples/list_formats.c - New file. An example of the use of the supported file enumeration - interface. This program lists all the major formats and for each major - format the supported subformats. - -2002-01-10 Erik de Castro Lopo - - * src/*.[ch] tests/*.c - Changed command parameter of sf_command () function from a test string to - an int. The valid values for the command parameter begin with SFC_ and are - listed in src/sndfile.h. - -2001-12-20 Erik de Castro Lopo - - * src/formats.c src/sndfile.c - Added an way of enumerating a set of common file formats using the - sf_command () interface. This interface was suggested by Dominic Mazzoni, - one of the main authors of Audacity (http://audacity.sourceforge.net/). - -2001-12-26 Erik de Castro Lopo - - * src/sndfile.c - Added checking of filename parameter in sf_open_read (). Previousy, if a - NULL pointer was passed the library would segfault. - -2001-12-18 Erik de Castro Lopo - - * src/common.c src/common.h - Changed the len parameter of the endswap_*_array () functions from type - int to type long. - - * src/pcm.c - Fixed a problem which - -2001-12-15 Erik de Castro Lopo - - * src/sndfile.c - Added conditional #include for EMX/gcc on OS/2. Thanks to - Paul Hartman for pointing this out. - - * tests/lossy_comp_test.c tests/floating_point_test.c - Added definitions for M_PI for when it isn't defined in . - -2001-11-30 Erik de Castro Lopo - - * src/ircam.c - Re-implemented the header reader. Old version was making incorrect - assumptions about the endian-ness of the file from the magic number at the - start of the file. The new code looks at the integer which holds the - number of channels and determines the endian-ness from that. - -2001-11-30 Erik de Castro Lopo - - * src/aiff.c - Added support for other AIFC types ('raw ', 'in32', '23ni'). - Further work on IMA ADPCM encoding. - -2001-11-29 Erik de Castro Lopo - - * src/ima_adpcm.c - Renamed from wav_ima_adpcm.c. This file will soon handle IMA ADPCM - encodings for both WAV and AIFF files. - - * src/aiff.c - Started adding IMA ADPCM support. - -2001-11-28 Erik de Castro Lopo - - * src/double.c - New file for handling double precision floating point (SF_FORMAT_DOUBLE) - data. - - * src/wav.c src/aiff.c src/au.c src/raw.c - Added support for SF_FORMAT_DOUBLE data. - - * src/common.[ch] - Addition of endswap_long_array () for endian swapping 64 bit integers. This - function will work correctly on processors with 32 bit and 64 bit longs. - Optimised endswap_short_array () and endswap_int_array (). - - * tests/pcm_test.c - Added and extra check. After the first file of each type is written to disk - a checksum is performed of the first 64 bytes and checked against a pre- - calculated value. This will work whatever the endian-ness of the host - machine. - -2001-11-27 Erik de Castro Lopo - - * src/aiff.c - Added handling of u-law, A-law encoded AIFF files. Thanks to Tom Erbe for - supplying example files. - - * tests/lossy_comp_test.c - Added tests for above. - - * src/common.h src/*.c - Removed function typedefs from common.h and function pointer casting in all - the other files. This allows the compiler to perform proper type checking. - Hopefully this will prevernt problems like the sf_seek bug for OpenBSD, - BeOS etc. - - * src/common.[ch] - Added new function psf_new_binheader_readf () which will eventually replace - psf_binheader_readf (). The new function has basically the same function as - the original but has a more flexible and capable interface. It also allows - the reading of 64 bit integer values for files contains 64 bit file - offsets. - -2001-11-26 Erik de Castro Lopo - - * src/voc.c - Completed implementation of VOC file handling. Can now handle 8 and 16 bit - PCM, u-law and A-law files with one or two channels. - - * src/write_read_test.c tests/lossy_comp_test.c - Added tests for VOC files. - -2001-11-22 Erik de Castro Lopo - - * src/float_cast.h - Added inline asm version of lrint/lrintf for MacOS. Solution provided by - Stephane Letz. - - * src/voc.c - More work on this braindamaged format. The VOC files produced by SoX also - have a number of inconsistencies. - -2001-11-19 Erik de Castro Lopo - - * src/paf.c - Added support for 8 bit PCM PAF files. - - * tests/write_read_test.c - Added tests for 8 bit PAF files. - -2001-11-18 Erik de Castro Lopo - - * tests/pcm_test.c - New test program to test for correct scaling of integer values between - different sized integer containers (ie short -> int). - The new specs for libsndfile state that when the source and destination - containers are of a different size, the most significant bit of the source - value becomes the most significant bit of the destination container. - - * src/pcm.c src/paf.c - Modified to pass the above test program. - - * tests/write_read_test.c tests/lossy_comp_test.c - Modified to work with the new scaling rules. - -2001-11-17 Erik de Castro Lopo - - * src/raw.c tests/write_read_test.c tests/write_read_test.c - Added ability to do raw reads/writes of float, u-law and A-law files. - - * src/*.[ch] examples/*.[ch] tests/*.[ch] - Removed dependance on pcmbitwidth field of SF_INFO struct and moved to new - SF_FORMAT_* types and use of SF_ENDIAN_BIG/LITTLE/CPU. - -2001-11-12 Erik de Castro Lopo - - * src/*.[ch] - Started implmentation of major changes documented in doc/version1.html. - - Removed all usage of off_t which is not part of the ISO C standard. All - places which were using it are now using type long which is the type of - the offset parameter for the fseek function. - This should fix problems on BeOS, MacOS and *BSD like systems which were - failing "make check" because sizeof (long) != sizeof (off_t). - --------------------------------------------------------------------------------- -This is the boundary between version 1 of the library above and version 0 below. --------------------------------------------------------------------------------- - -2001-11-11 Erik de Castro Lopo - - * examples/sfplay_beos.cpp - Added BeOS version of sfplay.c. This needs to be compiled using a C++ - compiler so is therefore not built by default. Thanks to Marcus Overhagen - for providing this. - -2001-11-10 Erik de Castro Lopo - - * examples/sfplay.c - New example file showing how libsndfile can be used to read and play a - sound file. - At the moment on Linux is supported. Others will follow in the near future. - -2001-11-09 Erik de Castro Lopo - - * src/pcm.c - Fixed problem with normalisation code where a value of 1.0 could map to - a value greater than MAX_SHORT or MAX_INT. Thanks to Roger Dannenberg for - pointing this out. - -2001-11-08 Erik de Castro Lopo - - * src/pcm.c - Fixed scaling issue when reading/writing 8 bit files using - sf_read/sf_write_short (). - On read, values are scaled so that the most significant bit in the char - ends up in the most significant bit of the short. On write, values are - scaled so that most significant bit in the short ends up as the most - significant bit in the char. - -2001-11-07 Erik de Castro Lopo - - * src/au.c src/sndfile.c - Added support for 32 bit float data in big and little endian AU files. - - * tests/write_read_test.c - Added tests for 32 bit float data in AU files. - -2001-11-06 Erik de Castro Lopo - - * tests/lossy_comp_test.c - Finalised testing of stereo files where possible. - -2001-11-05 Erik de Castro Lopo - - * src/wav_ms_adpcm.c - Fixed bug in writing stereo MS ADPCM WAV files. Thanks to Xu Xin for - pointing out this problem. - -2001-10-24 Erik de Castro Lopo - - * src/wav_ms_adpcm.c - Modified function srate2blocksize () to handle 44k1Hz stereo files. - -2001-10-21 Erik de Castro Lopo - - * src/w64.c - Added support for Sonic Foundry 64 bit WAV format. As Linux (my main - development platform) does not yet support 64 bit file offsets by default, - current handling of this file format treats everything as 32 bit and fails - openning the file, if it finds anything that goes beyond 32 bit values. - - * src/sndfile.[hc] src/common.h src/Makefile.am - Added hooks for W64 support. - -2001-10-21 Erik de Castro Lopo - - * configure.in - Added more warnings options to CFLAGS when the gcc compiler is detected. - - * src/*.[ch] tests/*.c examples/*.c - Started fixing the warning messages due to the new CFLASG. - - * src/voc.c - More work on VOC file read/writing. - - * src/paf.c - Found that PAF files were not checking the normalisation flag when reading - or writing floats and doubles. Fixed it. - - * tests/floating_point_test.c - Added specific test for the above problem. - - * src/float_cast.h src/pcm.c - Added a section for Win32 to define lrint () and lrintf () in the header - and implement it in the pcm.c - -2001-10-20 Erik de Castro Lopo - - * sndfile-config.in m4/sndfile.m4 - These files were donated by Conrad Parker who also provided instructions - on how to install them using autoconf/automake. - - * src/float_cast.h - Fiddled around with this file some more. On Linux and other gcc supported - OSes use the C99 functions lrintf() and lrint() for casting from floating - point to int without incurring the huge perfromance penalty (particularly - on the i386 family) caused by the regular C cast from float to int. - These new C99 functions replace the FLOAT_TO_* and DOUBLE_TO_* macros which - I had been playing with. - - * configure.in m4/lrint.m4 m4/lrintf.m4 - Add detection of these functions. - -2001-10-17 Erik de Castro Lopo - - * src/voc.c - Completed code for reading VOC files containing a single audio data - segment. - Started implementing code to handle files with multiple VOC_SOUND_DATA - segments but couldn't be bothered finishing it. Multiple segment files can - have different sample rates for different sections and other nasties like - silence and repeat segments. - -2001-10-16 Erik de Castro Lopo - - * src/common.h src/*.c - Removed SF_PRIVATE struct field fdata and replaced it with extra_data. - - * src/voc.c - Further development of the read part of this woefult file format. - -2001-10-04 Erik de Castro Lopo - - * src/float_cast.h - Implemented gcc and i386 floating point to int cast macros. Standard cast - will be used when not on gcc for i385. - - * src/pcm.c - Modified all uses of FLOAT/DOUBLE_TO_INT and FLOAT/DOUBLE_TO_SHORT casts to - comply with macros in float_cast.h. - -2001-10-04 Erik de Castro Lopo - - * src/voc.c - Changed the TYPE_xxx enum names to VOC_TYPE_xxx to prevent name clashes - on MacOS with CodeWarrior 6.0. - - * MacOS/MacOS-readme.txt - Updated the compile instructions. Probably still need work as I don't have - access to a Mac. - -2001-10-01 Erik de Castro Lopo - - * src/wav.c src/aiff.c common.c - Changed all references to snprintf to LSF_SNPRINTF and all vsnprintf to - LSF_VSNPRINTF. LSF_VSNPRINTF and LSF_VSNPRINTF are defined in common.h. - - * src/common.h - Added checking of HAVE_SNPRINTF and HAVE_VSNPRINTF and defining - LSF_VSNPRINTF and LSF_VSNPRINTF to appropriate values. - - * src/missing.c - New file containing a minimal implementation of snprintf and vsnprintf - functions named missing_snprintf and missing_vsnprintf respectively. These - are only compliled into the binary if snprintf and/or vsnprintf are not - available. - -2001-09-29 Erik de Castro Lopo - - * src/ircam.c - New file to handle Berkeley/IRCAM/CARL files. - - * src/sndfile.c src/common.h - Modified for IRCAM handling. - - * tests/*.c - Added tests for IRCAM files. - -2001-09-27 Erik de Castro Lopo - - * src/wav.c - Apparently microsoft windows (tm) doesn't like ulaw and Alaw WAV files with - 20 byte format chunks (contrary to ms's own documentation). Fixed the WAV - header writing code to generate smaller ms compliant ulaw and Alaw WAV - files. - -2001-09-17 Erik de Castro Lopo - - * tests/stdio_test.sh tests/stdio_test.c - Shell script was rewritten as a C program due to incompatibilities of the - sh shell on Linux and Solaris. - -2001-09-16 Erik de Castro Lopo - - * tests/stdio_test.sh tests/stdout_test.c tests/stdin_test.c - New test programs to verify the correct operation of reading from stdin and - writing to stdout. - - * src/sndfile.c wav.c au.c nist.c paf.c - Fixed a bugs uncovered by the new test programs above. - -2001-09-15 Erik de Castro Lopo - - * src/sndfile.c wav.c - Fixed a bug preventing reading a file from stdin. Found by T. Narita. - -2001-09-12 Erik de Castro Lopo - - * src/common.h - Fixed a problem on OpenBSD 2.9 which was causing sf_seek() to fail on IMA - WAV files. Root cause was the declaration of the func_seek typedef not - matching the functions it was actually being used to point to. In OpenBSD - sizeof (off_t) != sizeof (int). Thanks to Heikki Korpela for allowing me - to log into his OpenBSD machine to debug this problem. - -2001-09-03 Erik de Castro Lopo - - * src/sndfile.c - Implemented sf_command ("norm float"). - - * src/*.c - Implemented handling of sf_command ("set-norm-float"). Float normalization - can now be turned on and off. - - * tests/double_test.c - Renamed to floating_point_test.c. Modified to include tests for all scaled - reads and writes of floats and doubles. - - * src/au_g72x.c - Fixed bug in normalization code found with improved floating_point_test - program. - - * src/wav.c - Added code for parsing 'INFO' and 'LIST' chunks. Will be used for extract - text annotations from WAV files. - - * src/aiff.c - Added code for parsing '(c) ' and 'ANNO' chunks. Will be used for extract - text annotations from WAV files. - -2001-09-02 Erik de Castro Lopo - - * examples/sf_info.c example/Makefile.am - Renamed to sndfile_info.c. The program sndfile_info will now be installed - when the library is installed. - - * src/float_cast.h - New file defining floating point to short and int casts. These casts will - eventually replace all flot and double casts to short and int. See comments - at the top of the file for the reasoning. - - * src/*.c - Changed all default float and double casts to short or int with macros - defined in floatcast.h. At the moment these casts do nothing. They will be - replaced with faster float to int cast operations in the near future. - -2001-08-31 Erik de Castro Lopo - - * tests/command_test.c - New file for testing sf_command () functionality. - - * src/sndfile.c - Revisiting of error return values of some functions. - Started implementing sf_command () a new function will allow on-the-fly - modification of library behaviour, or instance, sample value scaling. - - * src/common.h - Added hook for format specific sf_command () calls to SNDFILE struct. - - * doc/api.html - Updated and errors corrected. - - * doc/command.html - New documentation file explaining new sf_command () function. - -2001-08-11 Erik de Castro Lopo - - * src/sndfile.c - Fixed error return values from sf_read*() and sf_write*(). There were - numerous instances of -1 being returned through size_t. These now all set - error int the SF_PRIVATE struct and return 0. Thanks to David Viens for - spotting this. - -2001-08-01 Erik de Castro Lopo - - * src/common.c - Fixed use of va_arg() calls that were causing warning messages with the - latest version of gcc (thanks Maurizio Umberto Puxeddu). - -2001-07-25 Erik de Castro Lopo - - * src/*.c src/sfendian.h - Moved definition of MAKE_MARKER macro to sfendian.h - -2001-07-23 Erik de Castro Lopo - - * src/sndfile.c - Modified sf_get_lib_version () so that version string will be visible using - the Unix strings command. - - * examples/Makefile.am examples/sfinfo.c - Renamed sfinfo program and source code to sf_info. This prevents a name - clash with the program included with libaudiofile. - -2001-07-22 Erik de Castro Lopo - - * tests/read_seek_test.c tests/lossy_comp_test.c - Added tests for sf_read_float () and sf_readf_float (). - - * src/voc.c - New files for handling Creative Voice files (not complete). - - * src/samplitude.c - New files for handling Samplitude files (not complete). - -2001-07-21 Erik de Castro Lopo - - * src/aiff.c src/au.c src/paf.c src/svx.c src/wav.c - Converted these files to using psf_binheader_readf() function. Will soon be - ready to attempt to make reading writing from pipes work reliably. - - * src/*.[ch] - Added code for sf_read_float () and sf_readf_float () methods of accessing - file data. - -2001-07-20 Erik de Castro Lopo - - * src/paf.c src/wav_gsm610.c - Removed two printf()s which had escaped notice for some time (thanks - Sigbjørn Skjæret). - -2001-07-19 Erik de Castro Lopo - - * src/wav_gsm610.c - Fixed a bug which prevented GSM 6.10 encoded WAV files generated by - libsndfile from being played in Windoze (thanks klay). - -2001-07-18 Erik de Castro Lopo - - * src/common.[ch] - Implemented psf_binheader_readf() which will do for file header reading what - psf_binheader_writef() did for writing headers. Will eventually allow - libsndfile to read and write from pipes, including named pipes. - -2001-07-16 Erik de Castro Lopo - - * MacOS/config.h Win32/config.h - Attempted to bring these two files uptodate with src/config.h. As I don't - have access to either of these systems support for them may be completely - broken. - -2001-06-18 Erik de Castro Lopo - - * src/float32.c - Fixed bug for big endian processors that can't read 32 bit IEEE floats. Now - tested on Intel x86 and UltraSparc processors. - -2001-06-13 Erik de Castro Lopo - - * src/aiff.c - Modified to allow REX files (from Propellorhead's Recycle and Reason - programs) to be read. - REX files are basically an AIFF file with slightly unusual sequence of - chunks (AIFF files are supposed to allow any sequence) and some extra - application specific information. - Not yet able to write a REX file as the details of the application specific - data is unknown. - -2001-06-12 Erik de Castro Lopo - - * src/wav.c - Fixed endian bug when reading PEAK chunk on big endian machines. - - * src/common.c - Fixed endian bug when reading PEAK chunk on big endian machines with - --enable-force-broken-float configure option. - Fix psf_binheader_writef for (FORCE_BROKEN_FLOAT ||______) - -2001-06-07 Erik de Castro Lopo - - * configure.in src/config.h.in - Removed old CAN_READ_WRITE_x86_IEEE configure variable now that float - capabilities are detected at run time. - Added FORCE_BROKEN_FLOAT to allow testing of broken float code on machines - where the processor can in fact handle floats correctly. - - * src/float32.c - Rejigged code reading and writing of floats on broken processors. - - * m4/ - Removed this directory and all its files as they are no longer needed. - -2001-06-05 Erik de Castro Lopo - - * tests/peak_chunk_test.c - New test to validate reading and writing of peak chunk. - - * examples/sfconvert - Added -float32 option. - - * src/*.c - Changed all error return values to negative values (ie the negative of what - they were). - - * src/sndfile.c tests/error_test.c - Modified to take account of the previous change. - -2001-06-04 Erik de Castro Lopo - - * src/float32.c - File renamed from wav_float.c and renamed function to something more - general. - Added runtime detection of floating point capabilities. - Added recording of peaks during write for generation of PEAK chunk. - - * src/wav.c src/aiff.c - Added handing for PEAK chunk for floating point files. PEAK is read when the - file headers are read and generated when the file is closed. Logic is in - place for adding PEAK chunk to end of file when writing to a pipe (reading - and writing from/to pipe to be implemented soon). - - * src/sndfile.c - Modified sf_signal_max () to use PEAK values if present. - -2001-06-03 Erik de Castro Lopo - - * src/*.c - Added pcm_read_init () and pcm_write_init () to src/pcm.c and removed all - other calls to functions in this file from the filetype specific files. - - * src/*.c - Added alaw_read_init (), alaw_write_int (), ulaw_read_init () and - ulaw_write_init () and removed all other calls to functions in alaw.c and - ulaw.c from the filetype specific files. - - * tests/write_read_test.c - Added tests to validate sf_seek () on all file types. - - * src/raw.c - Implemented raw_seek () function to fix a bug where - sf_seek (file, 0, SEEK_SET) on a RAW file failed. - - * src/paf.c - Fixed a bug in paf24_seek () found due to added seeks tests in - tests/write_read_test.c - -2001-06-01 Erik de Castro Lopo - - * tests/read_seek_test.c - Fixed a couple of broken binary files. - - * src/aiff.c src/wav.c - Added handling of PEAK chunks on file read. - -2001-05-31 Erik de Castro Lopo - - * check_libsndfile.py - New file for the regression testing of libsndfile. - check_libsndfile.py is a Python script which reads in a file containing - filenames of audio files. Each file is checked by running the examples/sfinfo - program on them and checking for error or warning messages in the libsndfile - log buffer. - - * check_libsndfile.list - This is an example list of audio files for use with check_libsndfile.py - - * tests/lossy_comp_test.c - Changed the defined value of M_PI for math header files which don't have it. - This fixed validation test failures on MetroWerks compilers. Thanks to Lord - Praetor Satanus of Acheron for bringing this to my attention. - -2001-05-30 Erik de Castro Lopo - - * src/common.[ch] - Removed psf_header_setf () which was no longer required after refactoring - and simplification of header writing. - Added 'z' format specifier to psf_binheader_writef () for zero filling header - with N bytes. Used by paf.c and nist.c - - * tests/check_log_buffer.c - New file implementing check_log_buffer () which reads the log buffer of a - SNDFILE* object and searches for error and warning messages. Calls exit () - if any are found. - - * tests/*.c - Added calls to check_log_buffer () after each call to sf_open_XXX (). - -2001-05-29 Erik de Castro Lopo - - * src/wav.c src/wav_ms_adpcm.c src/wav_gsm610.c - Major rehack of header writing using psf_binheader_writef (). - -2001-05-28 Erik de Castro Lopo - - * src/wav.c src/wav_ima_adpcm.c - Major rehack of header writing using psf_binheader_writef (). - -2001-05-27 Erik de Castro Lopo - - * src/wav.c - Changed return type of get_encoding_str () to prevent compiler warnings on - Mac OSX. - - * src/aiff.c src/au.c - Major rehack of header writing using psf_binheader_writef (). - -2001-05-25 Erik de Castro Lopo - - * src/common.h src/common.c - Added comments. - Name of log buffer changed from strbuffer to logbuffer. - Name of log buffer index variable changed from strindex to logindex. - - * src/*.[ch] - Changed name of internal logging function from psf_sprintf () to - psf_log_printf (). - Changed name of internal header generation functions from - psf_[ab]h_printf () to psf_asciiheader_printf () and - psf_binheader_writef (). - Changed name of internal header manipulation function psf_hsetf () to - psf_header_setf (). - -2001-05-24 Erik de Castro Lopo - - * src/nist.c - Fixed reading and writing of sample_byte_format header. "01" means little - endian and "10" means big endian regardless of bit width. - - * configure.in - Detect Mac OSX and disable -Wall and -pedantic gcc options. Mac OSX is - way screwed up and spews out buckets of warning messages from the system - headers. - Added --disable-gcc-opt configure option (sets gcc optimisation to -O0 ) for - easier debugging. - Made decision to harmonise source code version number and .so library - version number. Future releases will stick to this rule. - - * doc/new_file_type.HOWTO - New file to document the addition of new file types to libsndfile. - -2001-05-23 Erik de Castro Lopo - - * src/nist.c - New file for reading/writing Sphere NIST audio file format. - Originally requested by Elis Pomales in 1999. - Retrieved from unstable (and untouched for 18 months) branch of libsndfile. - Some vital information gleaned from the source code to Bill Schottstaedt's - sndlib library : ftp://ccrma-ftp.stanford.edu/pub/Lisp/sndlib.tar.gz - Currently reading and writing 16, 24 and 32 bit, big-endian and little - endian, stereo and mono files. - - * src/common.h src/common.c - Added psf_ah_printf () function to help construction of ASCII headers (ie NIST). - - * configure.in - Added test for vsnprintf () required by psf_ah_printf (). - - * tests/write_read_test.c - Added tests for supported NIST files. - -2001-05-22 Erik de Castro Lopo - - * tests/write_read_test.c - Added tests for little endian AIFC files. - - * src/aiff.c - Minor re-working of aiff_open_write (). - Added write support for little endian PCM encoded AIFC files. - -2001-05-13 Erik de Castro Lopo - - * src/aiff.c - Minor re-working of aiff_open_read (). - Added read support for little endian PCM encoded AIFC files from the Mac - OSX CD ripper program. Guillaume Lessard provided a couple of sample files - and a working patch. - The patch was not used as is but gave a good guide as to what to do. - -2001-05-11 Erik de Castro Lopo - - * src/sndfile.h - Fixed comments about endian-ness of WAV and AIFF files. Guillaume Lessard - pointed out the error. - -2001-04-23 Erik de Castro Lopo - - * examples/make_sine.c - Re-write of this example using sample rate and required frequency in Hz. - -2001-02-11 Erik de Castro Lopo - - * src/sndfile.c - Fixed bug that prevented known file types from being read as RAW PCM data. - -2000-12-16 Erik de Castro Lopo - - * src/aiff.c - Added handing of COMT chunk. - -2000-11-16 Erik de Castro Lopo - - * examples/sfconvert.c - Fixed bug in normalisatio code. Pointed out by Johnny Wu. - -2000-11-08 Erik de Castro Lopo - - * Win32/config.h - Fixed the incorrect setting of HAVE_ENDIAN_H parameter. Win32 only issue. - -2000-10-27 Erik de Castro Lopo - - * tests/Makefile.am - Added -lm for write_read_test_LDADD. - -2000-10-16 Erik de Castro Lopo - - * src/sndfile.c src/au.c - Fixed bug which prevented writing of G723 24kbps AU files. - - * tests/lossy_comp_test.c - Corrrection to options for G723 tests. - - * configure.in - Added --disable-gcc-pipe option for DJGPP compiler (gcc on MS-DOS) which - doesn't allow gcc -pipe option. - -2000-09-03 Erik de Castro Lopo - - * src/ulaw.c src/alaw.c src/wav_imaadpcm.c src/msadpcm.c src/wav_gsm610.c - Fixed normailsation bugs shown up by new double_test program. - -2000-08-31 Erik de Castro Lopo - - * src/pcm.c - Fixed bug in normalisation code (spotted by Steve Lhomme). - - * tests/double_test.c - New file to test scaled and unscaled sf_read_double() and sf_write_double() - functions. - -2000-08-28 Erik de Castro Lopo - - * COPYING - Changed to the LGPL COPYING file (spotted by H. S. Teoh). - -2000-08-21 Erik de Castro Lopo - - * src/sndfile.h - Removed prototype of unimplemented function sf_get_info(). Added prototype - for sf_error_number() Thanks to Sigbjørn Skjæret for spotting these. - -2000-08-18 Erik de Castro Lopo - - * src/newpcm.h - New file to contain a complete rewrite of the PCM data handling. - -2000-08-15 Erik de Castro Lopo - - * src/sndfile.c - Fixed a leak of FILE* pointers in sf_open_write(). Thanks to Sigbjørn - Skjæret for spotting this one. - -2000-08-13 Erik de Castro Lopo - - * src/au_g72x.c src/G72x/g72x.c - Added G723 encoded AU file support. - - * tests/lossy_comp_test.c - Added tests for G721 and G723 encoded AU files. - -2000-08-06 Erik de Castro Lopo - - * all files - Changed the license to LGPL. Albert Faber who had copyright on - Win32/unistd.h gave his permission to change the license on that file. All - other files were either copyright erikd AT mega-nerd DOT com or copyright - under a GPL/LGPL compatible license. - -2000-08-06 Erik de Castro Lopo - - * tests/lossy_comp_test.c - Fixed incorrect error message. - - * src/au_g72x.c src/G72x/* - G721 encoded AU files now working. - - * Win32/README-Win32.txt - Replaced this file with a new one which gives a full explanation - of how to build libsndfile under Win32. Thanks to Mike Ricos. - -2000-08-05 Erik de Castro Lopo - - * src/*.[ch] - Removed double leading underscores from the start of all variable and - function names. Identifiers with a leading underscores are reserved - for use by the compiler. - - * src/au_g72x.c src/G72x/* - Continued work on G721 encoded AU files. - -2000-07-12 Erik de Castro Lopo - - * src/G72x/* - New files for reading/writing G721 and G723 ADPCM audio. These files - are from a Sun Microsystems reference implementation released under a - free software licence. - Extensive changes to this code to make it fit in with libsndfile. - See the ChangeLog in this directory for details. - - * src/au_g72x.c - New file for G721 encoded AU files. - -2000-07-08 Erik de Castro Lopo - - * libsndfile.spec.in - Added a spec file for making RPMs. Thanks to Josh Green for supplying this. - -2000-06-28 Erik de Castro Lopo - - * src/sndfile.c src/sndfile.h - Add checking for and handling of header-less u-law encoded AU/SND files. - Any file with a ".au" or ".snd" file extension and without the normal - AU file header is treated as an 8kHz, u-law encoded file. - - * src/au.h - New function for opening a headerless u-law encoded file for read. - -2000-06-04 Erik de Castro Lopo - - * src/paf.c - Add checking for files shorter than minimal PAF file header length. - -2000-06-02 Erik de Castro Lopo - - * tests/write_read_test.c - Added extra sf_perror() calls when sf_write_XXXX fails. - -2000-05-29 Erik de Castro Lopo - - * src/common.c - Modified usage of va_arg() macro to work correctly on PowerPC - Linux. Thanks to Kyle Wheeler for giving me ssh access to his - machine while I was trying to track this down. - - * configure.in src/*.[ch] - Sorted out some endian-ness issues brought up by PowerPC Linux. - - * tests/read_seek_test.c - Added extra debugging for when tests fail. - -2000-05-18 Erik de Castro Lopo - - * src/wav.c - Fixed bug in GSM 6.10 handling for big-endian machines. Thanks - to Sigbjørn Skjæret for reporting this. - -2000-04-25 Erik de Castro Lopo - - * src/sndfile.c src/wav.c src/wav_gsm610.c - Finallised writing of GSM 6.10 WAV files. - - * tests/lossy_comp_test.c - Wrote new test code for GSM 6.10 files. - - * examples/sfinfo.c - Fixed incorrect format in printf() statement. - -2000-04-06 Erik de Castro Lopo - - * src/sndfile.h.in - Fixed comments about sf_perror () and sf_error_str (). - -2000-03-14 Erik de Castro Lopo - - * configure.in - Fixed --enable-justsrc option. - -2000-03-07 Erik de Castro Lopo - - * wav.c - Fixed checking of bytespersec field of header. Still some weirdness - with some files. - -2000-03-05 Erik de Castro Lopo - - * tests/lossy_comp_test.c - Added option to test PCM WAV files (sanity check). - Fixed bug in sf_seek() tests. - -2000-02-29 Erik de Castro Lopo - - * src/sndfile.c src/wav.c - Minor changes to allow writing of GSM 6.10 WAV files. - -2000-02-28 Erik de Castro Lopo - - * configure.in Makefile.am src/Makefile.am - Finally got around to figuring out how to build a single library from - multiple source directories. - Reading GSM 6.10 files now seems to work. - -2000-01-03 Erik de Castro Lopo - - * src/wav.c - Added more error reporting in read_fmt_chunk(). - -1999-12-21 Erik de Castro Lopo - - * examples/sfinfo.c - Modified program to accept multiple filenames from the command line. - -1999-11-27 Erik de Castro Lopo - - * src/wav_ima_adpcm.c - Moved code around in preparation to adding ability to read/write IMA ADPCM - encoded AIFF files. - -1999-11-16 Erik de Castro Lopo - - * src/common.c - Fixed put_int() and put_short() macros used by _psf_hprintf() which were - causing seg. faults on Sparc Solaris. - -1999-11-15 Erik de Castro Lopo - - * src/common.c - Added string.h to includes. Thanks to Sigbjxrn Skjfret. - - * src/svx.c - Fixed __svx_close() function to ensure FORM and BODY chunks are correctly - set. - -1999-10-01 Erik de Castro Lopo - - * src/au.c - Fixed handling of incorrect size field in AU header on read. Thanks to - Christoph Lauer for finding this problem. - -1999-09-28 Erik de Castro Lopo - - * src/aiff.c - Fixed a bug with incorrect SSND chunk length being written. This also lead - to finding an minor error in AIFF header parsing. Thanks to Dan Timis for - pointing this out. - -1999-09-24 Erik de Castro Lopo - - * src/paf.c - Fixed a bug with reading and writing 24 bit stereo PAF files. This problem - came to light when implementing tests for the new functions which operate - in terms of frames rather than items. - -1999-09-23 Erik de Castro Lopo - - * src/sndfile.c - Modified file type detection to use first 12 bytes of file rather than - file name extension. Required this because NIST files use the same - filename extension as Microsoft WAV files. - - * src/sndfile.c src/sndfile.h - Added short, int and double read/write functions which work in frames - rather than items. This was originally suggested by Maurizio Umberto - Puxeddu. - -1999-09-22 Erik de Castro Lopo - - * src/svx.c - Finished off implementation of write using __psf_hprintf(). - -1999-09-21 Erik de Castro Lopo - - * src/common.h - Added a buffer to SF_PRIVATE for writing the header. This is required - to make generating headers for IFF/SVX files easier as well as making - it easier to do re-write the headers which will be required when - sf_rewrite_header() is implemented. - - * src/common.c - Implemented __psf_hprintf() function. This is an internal function - which is documented briefly just above the code. - -1999-09-05 Erik de Castro Lopo - - * src/sndfile.c - Fixed a bug in sf_write_raw() where it was returning incorrect values - (thanks to Richard Dobson for finding this one). Must put in a test - routine for sf_read_raw and sf_write_raw. - - * src/aiff.c - Fixed default FORMsize in __aiff_open_write (). - - * src/sndfile.c - Added copy of filename to internal data structure. IFF/SVX files - contain a NAME header chunk. Both sf_open_read() and sf_open_write() - copy the file name (less the leading path information) to the - filename field. - - * src/svx.c - Started implementing writing of files. - -1999-08-04 Erik de Castro Lopo - - * src/svx.c - New file for reading/writing 8SVX and 16SVX files. - - * src/sndfile.[ch] src/common.h - Changes for SVX files. - - * src/aiff.c - Fixed header parsing when unknown chunk is found. - -1999-08-01 Erik de Castro Lopo - - * src/paf.c - New file for reading/writing Ensoniq PARIS audio file format. - - * src/sndfile.[ch] src/common.h - Changes for PAF files. - - * src/sndfile.[ch] - Added stuff for sf_get_lib_version() function. - - -1999-07-31 Erik de Castro Lopo - - * src/sndfile.h MacOS/config.h - Fixed minor MacOS configuration issues. - -1999-07-30 Erik de Castro Lopo - - * MacOS/ - Added a new directory for the MacOS config.h file and the - readme file. - - * src/aiff.c - Fixed calculation of datalength when reading SSND chunk. Thanks to - Sigbjørn Skjæret for pointing out this error. - -1999-07-29 Erik de Castro Lopo - - * src/sndfile.c src/sndfile.h src/raw.c - Further fixing of #includes for MacOS. - -1999-07-25 Erik de Castro Lopo - - * src/wav.c src/aiff.c - Added call to ferror () in main header parsing loop of __XXX_open_read - functions. This should fix problems on platforms (MacOS, AmigaOS) where - fseek()ing or fread()ing beyond the end of the file puts the FILE* - stream in an error state until clearerr() is called. - - * tests/write_read_test.c - Added tests for RAW header-less PCM files. - - * src/common.h - Moved definition of struct tribyte to pcm.c which is the only place - which needs it. - - * src/pcm.c - Modified all code which assumed sizeof (struct tribyte) == 3. This code - did not work on MacOS. Thanks to Ben "Jacobs" for pointing this out. - - * src/au.c - Removed from list of #includes (not being used). - - * src/sndfile.c - Added MacOS specific #ifdef to replace . - - * src/sndfile.h - Added MacOS specific #ifdef to replace . - - * src/sndfile.h - Added MacOS specific typedef for off_t. - - * MacOS-readme.txt - New file with instructions for building libsndfile under MacOS. Thanks - to Ben "Jacobs" for supplying these instructions. - -1999-07-24 Erik de Castro Lopo - - * configure.in - Removed sndfile.h from generated file list as there were no longer - any autoconf substitutions being made. - - * src/raw.c - New file for handling raw header-less PCM files. In order to open these - for read, the user must specify format, pcmbitwidth and channels in the - SF_INFO struct when calling sf_open_read (). - - * src/sndfile.c - Added support for raw header-less PCM files. - -1999-07-22 Erik de Castro Lopo - - * examples/sfinfo.c - Removed options so the sfinfo program always prints out all the information. - -1999-07-19 Erik de Castro Lopo - - * src/alaw.c - New file for A-law encoding (similar to u-law). - - * tests/alaw_test.c - New test program to test the A-law encode/decode lookup tables. - - * tests/lossy_comp_test.c - Added tests for a-law encoded WAV, AU and AULE files. - -1999-07-18 Erik de Castro Lopo - - * src/sndfile.c src/au.c - Removed second "#include ". Thanks to Ben "Jacobs" for pointing - this out. - -1999-07-18 Erik de Castro Lopo - - * tests/ulaw_test.c - New test program to test the u-law encode/decode lookup tables. - -1999-07-16 Erik de Castro Lopo - - * src/sndfile.h - Made corrections to comments on the return values from sf_seek (). - - * src/sndfile.c - Fixed boundary condition checking bug and accounting bug in sf_read_raw (). - -1999-07-15 Erik de Castro Lopo - - * src/au.c src/ulaw.c - Finished implementation of u-law encoded AU files. - - * src/wav.c - Implemented reading and writing of u-law encoded WAV files. - - * tests/ - Changed name of adpcm_test.c to lossy_comp_test.c. This test program - will now be used to test Ulaw and Alaw encoding as well as APDCM. - Added tests for Ulaw encoded WAV files. - -1999-07-14 Erik de Castro Lopo - - * tests/adpcm_test.c - Initialised amp variable in gen_signal() to remove compiler warning. - -1999-07-12 Erik de Castro Lopo - - * src/aiff.c - In __aiff_open_read () prevented fseek()ing beyond end of file which - was causing trouble on MacOS with the MetroWerks compiler. Thanks to - Ben "Jacobs" for pointing this out. - - *src/wav.c - Fixed as above in __wav_open_read (). - -1999-07-01 Erik de Castro Lopo - - * src/wav_ms_adpcm.c - Implemented MS ADPCM encoding. Code cleanup of decoder. - - * tests/adpcm_test.c - Added tests for MS ADPCM WAV files. - - * src/wav_ima_adpcm.c - Fixed incorrect parameter in call to srate2blocksize () from - __ima_writer_init (). - -1999-06-23 Erik de Castro Lopo - - * tests/read_seek_test.c - Added test for 8 bit AIFF files. - -1999-06-18 Erik de Castro Lopo - - * tests/write_read_test.c - Removed test for IMA ADPCM WAV files which is now done in adpcm_test.c - - * configure.in - Added -Wconversion to CFLAGS. - - * src/*.c tests/*.c examples/*.c - Fixed all warnings resulting from use of -Wconversion. - -1999-06-17 Erik de Castro Lopo - - * src/wav.c - Added fact chunk handling on read and write for all non WAVE_FORMAT_PCM - WAV files. - - * src/wav_ima.c - Changed block alignment to be dependant on sample rate. This should make - WAV files created with libsndfile compatible with the MS Windows media - players. - - * tests/adpcm_test.c - Reimplemented adpcm_test_short and implemented adpcm_test_int and - adpcm_test_double. - Now have full testing of IMA ADPCM WAV file read, write and seek. - -1999-06-15 Erik de Castro Lopo - - * src/wav_float.c - Fixed function prototype for x86f2d_array () which was causing ocassional - seg. faults on Sparc Solaris machines. - -1999-06-14 Erik de Castro Lopo - - * src/aiff.c - Fixed bug in __aiff_close where the length fields in the header were - not being correctly calculated before writing. - - * tests/write_read_test.c - Modified to detect the above bug in WAV, AIFF and AU files. - -1999-06-12 Erik de Castro Lopo - - * Win32/* - Added a contribution from Albert Faber to allow libsndfile to compile - under Win32 systems. libsndfile will now be used as part of LAME the - the MPEG 1 Layer 3 encoder (http://internet.roadrunner.com/~mt/mp3/). - -1999-06-11 Erik de Castro Lopo - - * configure.in - Changed to reflect previous changes. - - * src/wav_ima_adpcm.c - Fixed incorrect calculation of bytespersec header field (IMA ADPCM only). - - Fixed bug when writing from int or double data to IMA ADPCM file. Will need - to write test code for this. - - Fixed bug in __ima_write () whereby the length of the current block was - calculated incorrectly. Thanks to Jongcheon Park for pointing this out. - -1999-03-27 Erik de Castro Lopo - - * src/*.c - Changed all read/write/lseek function calls to fread/fwrite/ - fseek/ftell and added error checking of return values from - fread and fwrite in critical areas of the code. - - * src/au.c - Fixed incorrect datasize element in AU header on write. - - * tests/error_test.c - Add new test to check all error values have an associated error - string. This will avoid embarrassing real world core dumps. - -1999-03-23 Erik de Castro Lopo - - * src/wav.c src/aiff.c - Added handling for unknown chunk markers in the file. - -1999-03-22 Erik de Castro Lopo - - * src/sndfile.c - Filled in missing error strings in SndfileErrors array. Missing entries - can cause core dumps when calling sf_error-str (). Thanks to Sam - for finding this problem. - -1999-03-21 Erik de Castro Lopo - - * src/wav_ima_adpcm.c - Work on wav_ms_adpcm.c uncovered a bug in __ima_read () when reading - stereo files. Caused by not adjusting offset into buffer of decoded - samples for 2 channels. A similar bug existed in __ima_write (). - Need a test for stereo ADPCM files. - - * src/wav_ms_adpcm.c - Decoder working correctly. - -1999-03-18 Erik de Castro Lopo - - * configure.in Makefile.am - Added --enable-justsrc configuration variable sent by Sam - . - - * src/wav_ima_adpcm.c - Fixed bug when reading beyond end of data section due to not - checking pima->blockcount. - This uncovered __ima_seek () bug due to pima->blockcount being set - before calling __ima_init_block (). - -1999-03-17 Erik de Castro Lopo - - * src/wav.c - Started implementing MS ADPCM decoder. - If file is WAVE_FORMAT_ADPCM and length of data chunk is odd, this - encoder seems to add an extra byte. Why not just give an even data - length? - -1999-03-16 Erik de Castro Lopo - - * src/wav.c - Split code out of wav.c to create wav_float.c and wav_ima_adpcm.c. - This will make it easier to add and debug other kinds of WAV files - in future. - -1999-03-14 Erik de Castro Lopo - - * tests/ - Added adpcm_test.c which implements test functions for - IMA ADPCM reading/writing/seeking etc. - - * src/wav.c - Fixed many bugs in IMA ADPCM encoder and decoder. - -1999-03-11 Erik de Castro Lopo - - * src/wav.c - Finished implementing IMA ADPCM encoder and decoder (what a bitch!). - -1999-03-03 Erik de Castro Lopo - - * src/wav.c - Started implementing IMA ADPCM decoder. - -1999-03-02 Erik de Castro Lopo - - * src/sndfile.c - Fixed bug where the sf_read_XXX functions were returning a - incorrect read count when reading past end of file. - Fixed bug in sf_seek () when seeking backwards from end of file. - - * tests/read_seek_test.c - Added multiple read test to short_test(), int_test () and - double_test (). - Added extra chunk to all test WAV files to test that reading - stops at end of 'data' chunk. - -1999-02-21 Erik de Castro Lopo - - * tests/write_read_test.c - Added tests for little DEC endian AU files. - - * src/au.c - Add handling for DEC format little endian AU files. - -1999-02-20 Erik de Castro Lopo - - * src/aiff.c src/au.c src/wav.c - Add __psf_sprintf calls during header parsing. - - * src/sndfile.c src/common.c - Implement sf_header_info (sndfile.c) function and __psf_sprintf (common.c). - - * tests/write_read_test.c - Added tests for 8 bit PCM files (WAV, AIFF and AU). - - * src/au.c src/aiff.c - Add handling of 8 bit PCM data format. - - * src/aiff.c - On write, set blocksize in SSND chunk to zero like everybody else. - -1999-02-16 Erik de Castro Lopo - - * src/pcm.c: - Fixed bug in let2s_array (cptr was not being initialised). - - * src/sndfile.c: - Fixed bug in sf_read_raw and sf_write_raw. sf_seek should - now work when using these functions. - -1999-02-15 Erik de Castro Lopo - - * tests/write_read_test.c: - Force test_buffer array to be double aligned. Sparc Solaris - requires this. - -1999-02-14 Erik de Castro Lopo - - * src/pcm.c: - Fixed a bug which was causing errors in the reading - and writing of 24 bit PCM files. - - * doc/api.html - Finished of preliminary documentaion. - -1999-02-13 Erik de Castro Lopo - - * src/aiff.c: - Changed reading of 'COMM' chunk to avoid reading an int - which overlaps an int (4 byte) boundary. diff --git a/libsndfile.64/NEWS b/libsndfile.64/NEWS deleted file mode 100644 index d8f549f4..00000000 --- a/libsndfile.64/NEWS +++ /dev/null @@ -1,199 +0,0 @@ -Version 1.0.28 (2017-04-02) - * Fix buffer overruns in FLAC and ID3 handling code. - * Move to variable length header storage. - * Fix detection of Large File Support for 32 bit systems. - * Remove large stack allocations in ALAC handling code. - * Remove all use of Variable Length Arrays. - * Minor bug fixes and improvements. - -Version 1.0.27 (2016-06-19) - * Fix an SF_INFO seekable flag regression introduced in 1.0.26. - * Fix potential infinite loops on malformed input files. - * Add string metadata read/write for CAF and RF64. - * Add handling of CUE chunks. - * Fix endian-ness issues in PAF files. - * Minor bug fixes and improvements. - -Version 1.0.26 (2015-11-22) - * Fix for CVE-2014-9496, SD2 buffer read overflow. - * Fix for CVE-2014-9756, file_io.c divide by zero. - * Fix for CVE-2015-7805, AIFF heap write overflow. - * Add support for ALAC encoder in a CAF container. - * Add support for Cart chunks in WAV files. - * Minor bug fixes and improvements. - -Version 1.0.25 (2011-07-13) - * Fix for Secunia Advisory SA45125, heap overflow in PAF file handler. - * Accept broken WAV files with blockalign == 0. - * Minor bug fixes and improvements. - -Version 1.0.24 (2011-03-23) - * WAV files now have an 18 byte u-law and A-law fmt chunk. - * Document virtual I/O functionality. - * Two new methods rawHandle() and takeOwnership() in sndfile.hh. - * AIFF fix for non-zero offset value in SSND chunk. - * Minor bug fixes and improvements. - -Version 1.0.23 (2010-10-10) - * Add version metadata to Windows DLL. - * Add a missing 'inline' to sndfile.hh. - * Update docs. - * Minor bug fixes and improvements. - -Version 1.0.22 (2010-10-04) - * Couple of fixes for SDS file writer. - * Fixes arising from static analysis. - * Handle FLAC files with ID3 meta data at start of file. - * Handle FLAC files which report zero length. - * Other minor bug fixes and improvements. - -Version 1.0.21 (2009-12-13) - * Add a couple of new binary programs to programs/ dir. - * Remove sndfile-jackplay (now in sndfile-tools package). - * Add windows only function sf_wchar_open(). - * Bunch of minor bug fixes. - -Version 1.0.20 (2009-05-14) - * Fix potential heap overflow in VOC file parser (Tobias Klein, http://www.trapkit.de/). - -Version 1.0.19 (2009-03-02) - * Fix for CVE-2009-0186 (Alin Rad Pop, Secunia Research). - * Huge number of minor bug fixes as a result of static analysis. - -Version 1.0.18 (2009-02-07) - * Add Ogg/Vorbis support (thanks to John ffitch). - * Remove captive FLAC library. - * Many new features and bug fixes. - * Generate Win32 and Win64 pre-compiled binaries. - -Version 1.0.17 (2006-08-31) - * Add sndfile.hh C++ wrapper. - * Update Win32 MinGW build instructions. - * Minor bug fixes and cleanups. - -Version 1.0.16 (2006-04-30) - * Add support for Broadcast (BEXT) chunks in WAV files. - * Implement new commands SFC_GET_SIGNAL_MAX and SFC_GET_MAX_ALL_CHANNELS. - * Add support for RIFX (big endian WAV variant). - * Fix configure script bugs. - * Fix bug in INST and MARK chunk writing for AIFF files. - -Version 1.0.15 (2006-03-16) - * Fix some ia64 issues. - * Fix precompiled DLL. - * Minor bug fixes. - -Version 1.0.14 (2006-02-19) - * Really fix MinGW compile problems. - * Minor bug fixes. - -Version 1.0.13 (2006-01-21) - * Fix for MinGW compiler problems. - * Allow readin/write of instrument chunks from WAV and AIFF files. - * Compile problem fix for Solaris compiler. - * Minor cleanups and bug fixes. - -Version 1.0.12 (2005-09-30) - * Add support for FLAC and Apple's Core Audio Format (CAF). - * Add virtual I/O interface (still needs docs). - * Cygwin and other Win32 fixes. - * Minor bug fixes and cleanups. - -Version 1.0.11 (2004-11-15) - * Add support for SD2 files. - * Add read support for loop info in WAV and AIFF files. - * Add more tests. - * Improve type safety. - * Minor optimisations and bug fixes. - -Version 1.0.10 (2004-06-15) - * Fix AIFF read/write mode bugs. - * Add support for compiling Win32 DLLS using MinGW. - * Fix problems resulting in failed compiles with gcc-2.95. - * Improve test suite. - * Minor bug fixes. - -Version 1.0.9 (2004-03-30) - * Add handling of AVR (Audio Visual Research) files. - * Improve handling of WAVEFORMATEXTENSIBLE WAV files. - * Fix for using pipes on Win32. - -Version 1.0.8 (2004-03-14) - * Correct peak chunk handing for files with > 16 tracks. - * Fix for WAV files with huge number of CUE chunks. - -Version 1.0.7 (2004-02-25) - * Fix clip mode detection on ia64, MIPS and other CPUs. - * Fix two MacOSX build problems. - -Version 1.0.6 (2004-02-08) - * Added support for native Win32 file access API (Ross Bencina). - * New mode to add clippling then a converting from float/double to integer - would otherwise wrap around. - * Fixed a bug in reading/writing files > 2Gig on Linux, Solaris and others. - * Many minor bug fixes. - * Other random fixes for Win32. - -Version 1.0.5 (2003-05-03) - * Added support for HTK files. - * Added new function sf_open_fd() to allow for secure opening of temporary - files as well as reading/writing sound files embedded within larger - container files. - * Added string support for AIFF files. - * Minor bug fixes and code cleanups. - -Version 1.0.4 (2003-02-02) - * Added suport of PVF and XI files. - * Added functionality for setting and retreiving strings from sound files. - * Minor code cleanups and bug fixes. - -Version 1.0.3 (2002-12-09) - * Minor bug fixes. - -Version 1.0.2 (2002-11-24) - * Added support for VOX ADPCM. - * Improved error reporting. - * Added version scripting on Linux and Solaris. - * Minor bug fixes. - -Version 1.0.1 (2002-09-14) - * Added MAT and MAT5 file formats. - * Minor bug fixes. - -Version 1.0.0 (2002-08-16) - * Final release for 1.0.0. - -Version 1.0.0rc6 (2002-08-14) - * Release candidate 6 for the 1.0.0 series. - * MacOS9 fixes. - -Version 1.0.0rc5 (2002-08-10) - * Release candidate 5 for the 1.0.0 series. - * Changed the definition of sf_count_t which was causing problems when - libsndfile was compiled with other libraries (ie WxWindows). - * Minor bug fixes. - * Documentation cleanup. - -Version 1.0.0rc4 (2002-08-03) - * Release candidate 4 for the 1.0.0 series. - * Minor bug fixes. - * Fix broken Win32 "make check". - -Version 1.0.0rc3 (2002-08-02) - * Release candidate 3 for the 1.0.0 series. - * Fix bug where libsndfile was reading beyond the end of the data chunk. - * Added on-the-fly header updates on write. - * Fix a couple of documentation issues. - -Version 1.0.0rc2 (2002-06-24) - * Release candidate 2 for the 1.0.0 series. - * Fix compile problem for Win32. - -Version 1.0.0rc1 (2002-06-24) - * Release candidate 1 for the 1.0.0 series. - -Version 0.0.28 (2002-04-27) - * Last offical release of 0.0.X series of the library. - -Version 0.0.8 (1999-02-16) - * First offical release. diff --git a/libsndfile.64/include/sndfile.h b/libsndfile.64/include/sndfile.h deleted file mode 100644 index 8a60fb09..00000000 --- a/libsndfile.64/include/sndfile.h +++ /dev/null @@ -1,857 +0,0 @@ -/* -** Copyright (C) 1999-2016 Erik de Castro Lopo -** -** This program is free software; you can redistribute it and/or modify -** it under the terms of the GNU Lesser General Public License as published by -** the Free Software Foundation; either version 2.1 of the License, or -** (at your option) any later version. -** -** This program is distributed in the hope that it will be useful, -** but WITHOUT ANY WARRANTY; without even the implied warranty of -** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -** GNU Lesser General Public License for more details. -** -** You should have received a copy of the GNU Lesser General Public License -** along with this program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -/* -** sndfile.h -- system-wide definitions -** -** API documentation is in the doc/ directory of the source code tarball -** and at http://www.mega-nerd.com/libsndfile/api.html. -*/ - -#ifndef SNDFILE_H -#define SNDFILE_H - -/* This is the version 1.0.X header file. */ -#define SNDFILE_1 - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* The following file types can be read and written. -** A file type would consist of a major type (ie SF_FORMAT_WAV) bitwise -** ORed with a minor type (ie SF_FORMAT_PCM). SF_FORMAT_TYPEMASK and -** SF_FORMAT_SUBMASK can be used to separate the major and minor file -** types. -*/ - -enum -{ /* Major formats. */ - SF_FORMAT_WAV = 0x010000, /* Microsoft WAV format (little endian default). */ - SF_FORMAT_AIFF = 0x020000, /* Apple/SGI AIFF format (big endian). */ - SF_FORMAT_AU = 0x030000, /* Sun/NeXT AU format (big endian). */ - SF_FORMAT_RAW = 0x040000, /* RAW PCM data. */ - SF_FORMAT_PAF = 0x050000, /* Ensoniq PARIS file format. */ - SF_FORMAT_SVX = 0x060000, /* Amiga IFF / SVX8 / SV16 format. */ - SF_FORMAT_NIST = 0x070000, /* Sphere NIST format. */ - SF_FORMAT_VOC = 0x080000, /* VOC files. */ - SF_FORMAT_IRCAM = 0x0A0000, /* Berkeley/IRCAM/CARL */ - SF_FORMAT_W64 = 0x0B0000, /* Sonic Foundry's 64 bit RIFF/WAV */ - SF_FORMAT_MAT4 = 0x0C0000, /* Matlab (tm) V4.2 / GNU Octave 2.0 */ - SF_FORMAT_MAT5 = 0x0D0000, /* Matlab (tm) V5.0 / GNU Octave 2.1 */ - SF_FORMAT_PVF = 0x0E0000, /* Portable Voice Format */ - SF_FORMAT_XI = 0x0F0000, /* Fasttracker 2 Extended Instrument */ - SF_FORMAT_HTK = 0x100000, /* HMM Tool Kit format */ - SF_FORMAT_SDS = 0x110000, /* Midi Sample Dump Standard */ - SF_FORMAT_AVR = 0x120000, /* Audio Visual Research */ - SF_FORMAT_WAVEX = 0x130000, /* MS WAVE with WAVEFORMATEX */ - SF_FORMAT_SD2 = 0x160000, /* Sound Designer 2 */ - SF_FORMAT_FLAC = 0x170000, /* FLAC lossless file format */ - SF_FORMAT_CAF = 0x180000, /* Core Audio File format */ - SF_FORMAT_WVE = 0x190000, /* Psion WVE format */ - SF_FORMAT_OGG = 0x200000, /* Xiph OGG container */ - SF_FORMAT_MPC2K = 0x210000, /* Akai MPC 2000 sampler */ - SF_FORMAT_RF64 = 0x220000, /* RF64 WAV file */ - - /* Subtypes from here on. */ - - SF_FORMAT_PCM_S8 = 0x0001, /* Signed 8 bit data */ - SF_FORMAT_PCM_16 = 0x0002, /* Signed 16 bit data */ - SF_FORMAT_PCM_24 = 0x0003, /* Signed 24 bit data */ - SF_FORMAT_PCM_32 = 0x0004, /* Signed 32 bit data */ - - SF_FORMAT_PCM_U8 = 0x0005, /* Unsigned 8 bit data (WAV and RAW only) */ - - SF_FORMAT_FLOAT = 0x0006, /* 32 bit float data */ - SF_FORMAT_DOUBLE = 0x0007, /* 64 bit float data */ - - SF_FORMAT_ULAW = 0x0010, /* U-Law encoded. */ - SF_FORMAT_ALAW = 0x0011, /* A-Law encoded. */ - SF_FORMAT_IMA_ADPCM = 0x0012, /* IMA ADPCM. */ - SF_FORMAT_MS_ADPCM = 0x0013, /* Microsoft ADPCM. */ - - SF_FORMAT_GSM610 = 0x0020, /* GSM 6.10 encoding. */ - SF_FORMAT_VOX_ADPCM = 0x0021, /* OKI / Dialogix ADPCM */ - - SF_FORMAT_G721_32 = 0x0030, /* 32kbs G721 ADPCM encoding. */ - SF_FORMAT_G723_24 = 0x0031, /* 24kbs G723 ADPCM encoding. */ - SF_FORMAT_G723_40 = 0x0032, /* 40kbs G723 ADPCM encoding. */ - - SF_FORMAT_DWVW_12 = 0x0040, /* 12 bit Delta Width Variable Word encoding. */ - SF_FORMAT_DWVW_16 = 0x0041, /* 16 bit Delta Width Variable Word encoding. */ - SF_FORMAT_DWVW_24 = 0x0042, /* 24 bit Delta Width Variable Word encoding. */ - SF_FORMAT_DWVW_N = 0x0043, /* N bit Delta Width Variable Word encoding. */ - - SF_FORMAT_DPCM_8 = 0x0050, /* 8 bit differential PCM (XI only) */ - SF_FORMAT_DPCM_16 = 0x0051, /* 16 bit differential PCM (XI only) */ - - SF_FORMAT_VORBIS = 0x0060, /* Xiph Vorbis encoding. */ - - SF_FORMAT_ALAC_16 = 0x0070, /* Apple Lossless Audio Codec (16 bit). */ - SF_FORMAT_ALAC_20 = 0x0071, /* Apple Lossless Audio Codec (20 bit). */ - SF_FORMAT_ALAC_24 = 0x0072, /* Apple Lossless Audio Codec (24 bit). */ - SF_FORMAT_ALAC_32 = 0x0073, /* Apple Lossless Audio Codec (32 bit). */ - - /* Endian-ness options. */ - - SF_ENDIAN_FILE = 0x00000000, /* Default file endian-ness. */ - SF_ENDIAN_LITTLE = 0x10000000, /* Force little endian-ness. */ - SF_ENDIAN_BIG = 0x20000000, /* Force big endian-ness. */ - SF_ENDIAN_CPU = 0x30000000, /* Force CPU endian-ness. */ - - SF_FORMAT_SUBMASK = 0x0000FFFF, - SF_FORMAT_TYPEMASK = 0x0FFF0000, - SF_FORMAT_ENDMASK = 0x30000000 -} ; - -/* -** The following are the valid command numbers for the sf_command() -** interface. The use of these commands is documented in the file -** command.html in the doc directory of the source code distribution. -*/ - -enum -{ SFC_GET_LIB_VERSION = 0x1000, - SFC_GET_LOG_INFO = 0x1001, - SFC_GET_CURRENT_SF_INFO = 0x1002, - - - SFC_GET_NORM_DOUBLE = 0x1010, - SFC_GET_NORM_FLOAT = 0x1011, - SFC_SET_NORM_DOUBLE = 0x1012, - SFC_SET_NORM_FLOAT = 0x1013, - SFC_SET_SCALE_FLOAT_INT_READ = 0x1014, - SFC_SET_SCALE_INT_FLOAT_WRITE = 0x1015, - - SFC_GET_SIMPLE_FORMAT_COUNT = 0x1020, - SFC_GET_SIMPLE_FORMAT = 0x1021, - - SFC_GET_FORMAT_INFO = 0x1028, - - SFC_GET_FORMAT_MAJOR_COUNT = 0x1030, - SFC_GET_FORMAT_MAJOR = 0x1031, - SFC_GET_FORMAT_SUBTYPE_COUNT = 0x1032, - SFC_GET_FORMAT_SUBTYPE = 0x1033, - - SFC_CALC_SIGNAL_MAX = 0x1040, - SFC_CALC_NORM_SIGNAL_MAX = 0x1041, - SFC_CALC_MAX_ALL_CHANNELS = 0x1042, - SFC_CALC_NORM_MAX_ALL_CHANNELS = 0x1043, - SFC_GET_SIGNAL_MAX = 0x1044, - SFC_GET_MAX_ALL_CHANNELS = 0x1045, - - SFC_SET_ADD_PEAK_CHUNK = 0x1050, - SFC_SET_ADD_HEADER_PAD_CHUNK = 0x1051, - - SFC_UPDATE_HEADER_NOW = 0x1060, - SFC_SET_UPDATE_HEADER_AUTO = 0x1061, - - SFC_FILE_TRUNCATE = 0x1080, - - SFC_SET_RAW_START_OFFSET = 0x1090, - - SFC_SET_DITHER_ON_WRITE = 0x10A0, - SFC_SET_DITHER_ON_READ = 0x10A1, - - SFC_GET_DITHER_INFO_COUNT = 0x10A2, - SFC_GET_DITHER_INFO = 0x10A3, - - SFC_GET_EMBED_FILE_INFO = 0x10B0, - - SFC_SET_CLIPPING = 0x10C0, - SFC_GET_CLIPPING = 0x10C1, - - SFC_GET_CUE_COUNT = 0x10CD, - SFC_GET_CUE = 0x10CE, - SFC_SET_CUE = 0x10CF, - - SFC_GET_INSTRUMENT = 0x10D0, - SFC_SET_INSTRUMENT = 0x10D1, - - SFC_GET_LOOP_INFO = 0x10E0, - - SFC_GET_BROADCAST_INFO = 0x10F0, - SFC_SET_BROADCAST_INFO = 0x10F1, - - SFC_GET_CHANNEL_MAP_INFO = 0x1100, - SFC_SET_CHANNEL_MAP_INFO = 0x1101, - - SFC_RAW_DATA_NEEDS_ENDSWAP = 0x1110, - - /* Support for Wavex Ambisonics Format */ - SFC_WAVEX_SET_AMBISONIC = 0x1200, - SFC_WAVEX_GET_AMBISONIC = 0x1201, - - /* - ** RF64 files can be set so that on-close, writable files that have less - ** than 4GB of data in them are converted to RIFF/WAV, as per EBU - ** recommendations. - */ - SFC_RF64_AUTO_DOWNGRADE = 0x1210, - - SFC_SET_VBR_ENCODING_QUALITY = 0x1300, - SFC_SET_COMPRESSION_LEVEL = 0x1301, - - /* Cart Chunk support */ - SFC_SET_CART_INFO = 0x1400, - SFC_GET_CART_INFO = 0x1401, - - /* Following commands for testing only. */ - SFC_TEST_IEEE_FLOAT_REPLACE = 0x6001, - - /* - ** SFC_SET_ADD_* values are deprecated and will disappear at some - ** time in the future. They are guaranteed to be here up to and - ** including version 1.0.8 to avoid breakage of existing software. - ** They currently do nothing and will continue to do nothing. - */ - SFC_SET_ADD_DITHER_ON_WRITE = 0x1070, - SFC_SET_ADD_DITHER_ON_READ = 0x1071 -} ; - - -/* -** String types that can be set and read from files. Not all file types -** support this and even the file types which support one, may not support -** all string types. -*/ - -enum -{ SF_STR_TITLE = 0x01, - SF_STR_COPYRIGHT = 0x02, - SF_STR_SOFTWARE = 0x03, - SF_STR_ARTIST = 0x04, - SF_STR_COMMENT = 0x05, - SF_STR_DATE = 0x06, - SF_STR_ALBUM = 0x07, - SF_STR_LICENSE = 0x08, - SF_STR_TRACKNUMBER = 0x09, - SF_STR_GENRE = 0x10 -} ; - -/* -** Use the following as the start and end index when doing metadata -** transcoding. -*/ - -#define SF_STR_FIRST SF_STR_TITLE -#define SF_STR_LAST SF_STR_GENRE - -enum -{ /* True and false */ - SF_FALSE = 0, - SF_TRUE = 1, - - /* Modes for opening files. */ - SFM_READ = 0x10, - SFM_WRITE = 0x20, - SFM_RDWR = 0x30, - - SF_AMBISONIC_NONE = 0x40, - SF_AMBISONIC_B_FORMAT = 0x41 -} ; - -/* Public error values. These are guaranteed to remain unchanged for the duration -** of the library major version number. -** There are also a large number of private error numbers which are internal to -** the library which can change at any time. -*/ - -enum -{ SF_ERR_NO_ERROR = 0, - SF_ERR_UNRECOGNISED_FORMAT = 1, - SF_ERR_SYSTEM = 2, - SF_ERR_MALFORMED_FILE = 3, - SF_ERR_UNSUPPORTED_ENCODING = 4 -} ; - - -/* Channel map values (used with SFC_SET/GET_CHANNEL_MAP). -*/ - -enum -{ SF_CHANNEL_MAP_INVALID = 0, - SF_CHANNEL_MAP_MONO = 1, - SF_CHANNEL_MAP_LEFT, /* Apple calls this 'Left' */ - SF_CHANNEL_MAP_RIGHT, /* Apple calls this 'Right' */ - SF_CHANNEL_MAP_CENTER, /* Apple calls this 'Center' */ - SF_CHANNEL_MAP_FRONT_LEFT, - SF_CHANNEL_MAP_FRONT_RIGHT, - SF_CHANNEL_MAP_FRONT_CENTER, - SF_CHANNEL_MAP_REAR_CENTER, /* Apple calls this 'Center Surround', Msft calls this 'Back Center' */ - SF_CHANNEL_MAP_REAR_LEFT, /* Apple calls this 'Left Surround', Msft calls this 'Back Left' */ - SF_CHANNEL_MAP_REAR_RIGHT, /* Apple calls this 'Right Surround', Msft calls this 'Back Right' */ - SF_CHANNEL_MAP_LFE, /* Apple calls this 'LFEScreen', Msft calls this 'Low Frequency' */ - SF_CHANNEL_MAP_FRONT_LEFT_OF_CENTER, /* Apple calls this 'Left Center' */ - SF_CHANNEL_MAP_FRONT_RIGHT_OF_CENTER, /* Apple calls this 'Right Center */ - SF_CHANNEL_MAP_SIDE_LEFT, /* Apple calls this 'Left Surround Direct' */ - SF_CHANNEL_MAP_SIDE_RIGHT, /* Apple calls this 'Right Surround Direct' */ - SF_CHANNEL_MAP_TOP_CENTER, /* Apple calls this 'Top Center Surround' */ - SF_CHANNEL_MAP_TOP_FRONT_LEFT, /* Apple calls this 'Vertical Height Left' */ - SF_CHANNEL_MAP_TOP_FRONT_RIGHT, /* Apple calls this 'Vertical Height Right' */ - SF_CHANNEL_MAP_TOP_FRONT_CENTER, /* Apple calls this 'Vertical Height Center' */ - SF_CHANNEL_MAP_TOP_REAR_LEFT, /* Apple and MS call this 'Top Back Left' */ - SF_CHANNEL_MAP_TOP_REAR_RIGHT, /* Apple and MS call this 'Top Back Right' */ - SF_CHANNEL_MAP_TOP_REAR_CENTER, /* Apple and MS call this 'Top Back Center' */ - - SF_CHANNEL_MAP_AMBISONIC_B_W, - SF_CHANNEL_MAP_AMBISONIC_B_X, - SF_CHANNEL_MAP_AMBISONIC_B_Y, - SF_CHANNEL_MAP_AMBISONIC_B_Z, - - SF_CHANNEL_MAP_MAX -} ; - - -/* A SNDFILE* pointer can be passed around much like stdio.h's FILE* pointer. */ - -typedef struct SNDFILE_tag SNDFILE ; - -/* The following typedef is system specific and is defined when libsndfile is -** compiled. sf_count_t will be a 64 bit value when the underlying OS allows -** 64 bit file offsets. -** On windows, we need to allow the same header file to be compiler by both GCC -** and the Microsoft compiler. -*/ - -#if (defined (_MSCVER) || defined (_MSC_VER) && (_MSC_VER < 1310)) -typedef __int64 sf_count_t ; -#define SF_COUNT_MAX 0x7fffffffffffffffi64 -#else -typedef __int64 sf_count_t ; -#define SF_COUNT_MAX 0x7FFFFFFFFFFFFFFFLL -#endif - - -/* A pointer to a SF_INFO structure is passed to sf_open () and filled in. -** On write, the SF_INFO structure is filled in by the user and passed into -** sf_open (). -*/ - -struct SF_INFO -{ sf_count_t frames ; /* Used to be called samples. Changed to avoid confusion. */ - int samplerate ; - int channels ; - int format ; - int sections ; - int seekable ; -} ; - -typedef struct SF_INFO SF_INFO ; - -/* The SF_FORMAT_INFO struct is used to retrieve information about the sound -** file formats libsndfile supports using the sf_command () interface. -** -** Using this interface will allow applications to support new file formats -** and encoding types when libsndfile is upgraded, without requiring -** re-compilation of the application. -** -** Please consult the libsndfile documentation (particularly the information -** on the sf_command () interface) for examples of its use. -*/ - -typedef struct -{ int format ; - const char *name ; - const char *extension ; -} SF_FORMAT_INFO ; - -/* -** Enums and typedefs for adding dither on read and write. -** See the html documentation for sf_command(), SFC_SET_DITHER_ON_WRITE -** and SFC_SET_DITHER_ON_READ. -*/ - -enum -{ SFD_DEFAULT_LEVEL = 0, - SFD_CUSTOM_LEVEL = 0x40000000, - - SFD_NO_DITHER = 500, - SFD_WHITE = 501, - SFD_TRIANGULAR_PDF = 502 -} ; - -typedef struct -{ int type ; - double level ; - const char *name ; -} SF_DITHER_INFO ; - -/* Struct used to retrieve information about a file embedded within a -** larger file. See SFC_GET_EMBED_FILE_INFO. -*/ - -typedef struct -{ sf_count_t offset ; - sf_count_t length ; -} SF_EMBED_FILE_INFO ; - -/* -** Struct used to retrieve cue marker information from a file -*/ - -typedef struct -{ int32_t indx ; - uint32_t position ; - int32_t fcc_chunk ; - int32_t chunk_start ; - int32_t block_start ; - uint32_t sample_offset ; - char name [256] ; -} SF_CUE_POINT ; - -#define SF_CUES_VAR(count) \ - struct \ - { uint32_t cue_count ; \ - SF_CUE_POINT cue_points [count] ; \ - } - -typedef SF_CUES_VAR (100) SF_CUES ; - -/* -** Structs used to retrieve music sample information from a file. -*/ - -enum -{ /* - ** The loop mode field in SF_INSTRUMENT will be one of the following. - */ - SF_LOOP_NONE = 800, - SF_LOOP_FORWARD, - SF_LOOP_BACKWARD, - SF_LOOP_ALTERNATING -} ; - -typedef struct -{ int gain ; - char basenote, detune ; - char velocity_lo, velocity_hi ; - char key_lo, key_hi ; - int loop_count ; - - struct - { int mode ; - uint32_t start ; - uint32_t end ; - uint32_t count ; - } loops [16] ; /* make variable in a sensible way */ -} SF_INSTRUMENT ; - - - -/* Struct used to retrieve loop information from a file.*/ -typedef struct -{ - short time_sig_num ; /* any positive integer > 0 */ - short time_sig_den ; /* any positive power of 2 > 0 */ - int loop_mode ; /* see SF_LOOP enum */ - - int num_beats ; /* this is NOT the amount of quarter notes !!!*/ - /* a full bar of 4/4 is 4 beats */ - /* a full bar of 7/8 is 7 beats */ - - float bpm ; /* suggestion, as it can be calculated using other fields:*/ - /* file's length, file's sampleRate and our time_sig_den*/ - /* -> bpms are always the amount of _quarter notes_ per minute */ - - int root_key ; /* MIDI note, or -1 for None */ - int future [6] ; -} SF_LOOP_INFO ; - - -/* Struct used to retrieve broadcast (EBU) information from a file. -** Strongly (!) based on EBU "bext" chunk format used in Broadcast WAVE. -*/ -#define SF_BROADCAST_INFO_VAR(coding_hist_size) \ - struct \ - { char description [256] ; \ - char originator [32] ; \ - char originator_reference [32] ; \ - char origination_date [10] ; \ - char origination_time [8] ; \ - uint32_t time_reference_low ; \ - uint32_t time_reference_high ; \ - short version ; \ - char umid [64] ; \ - char reserved [190] ; \ - uint32_t coding_history_size ; \ - char coding_history [coding_hist_size] ; \ - } - -/* SF_BROADCAST_INFO is the above struct with coding_history field of 256 bytes. */ -typedef SF_BROADCAST_INFO_VAR (256) SF_BROADCAST_INFO ; - -struct SF_CART_TIMER -{ char usage [4] ; - int32_t value ; -} ; - -typedef struct SF_CART_TIMER SF_CART_TIMER ; - -#define SF_CART_INFO_VAR(p_tag_text_size) \ - struct \ - { char version [4] ; \ - char title [64] ; \ - char artist [64] ; \ - char cut_id [64] ; \ - char client_id [64] ; \ - char category [64] ; \ - char classification [64] ; \ - char out_cue [64] ; \ - char start_date [10] ; \ - char start_time [8] ; \ - char end_date [10] ; \ - char end_time [8] ; \ - char producer_app_id [64] ; \ - char producer_app_version [64] ; \ - char user_def [64] ; \ - int32_t level_reference ; \ - SF_CART_TIMER post_timers [8] ; \ - char reserved [276] ; \ - char url [1024] ; \ - uint32_t tag_text_size ; \ - char tag_text [p_tag_text_size] ; \ - } - -typedef SF_CART_INFO_VAR (256) SF_CART_INFO ; - -/* Virtual I/O functionality. */ - -typedef sf_count_t (*sf_vio_get_filelen) (void *user_data) ; -typedef sf_count_t (*sf_vio_seek) (sf_count_t offset, int whence, void *user_data) ; -typedef sf_count_t (*sf_vio_read) (void *ptr, sf_count_t count, void *user_data) ; -typedef sf_count_t (*sf_vio_write) (const void *ptr, sf_count_t count, void *user_data) ; -typedef sf_count_t (*sf_vio_tell) (void *user_data) ; - -struct SF_VIRTUAL_IO -{ sf_vio_get_filelen get_filelen ; - sf_vio_seek seek ; - sf_vio_read read ; - sf_vio_write write ; - sf_vio_tell tell ; -} ; - -typedef struct SF_VIRTUAL_IO SF_VIRTUAL_IO ; - - -/* Open the specified file for read, write or both. On error, this will -** return a NULL pointer. To find the error number, pass a NULL SNDFILE -** to sf_strerror (). -** All calls to sf_open() should be matched with a call to sf_close(). -*/ - -SNDFILE* sf_open (const char *path, int mode, SF_INFO *sfinfo) ; - - -/* Use the existing file descriptor to create a SNDFILE object. If close_desc -** is TRUE, the file descriptor will be closed when sf_close() is called. If -** it is FALSE, the descriptor will not be closed. -** When passed a descriptor like this, the library will assume that the start -** of file header is at the current file offset. This allows sound files within -** larger container files to be read and/or written. -** On error, this will return a NULL pointer. To find the error number, pass a -** NULL SNDFILE to sf_strerror (). -** All calls to sf_open_fd() should be matched with a call to sf_close(). - -*/ - -SNDFILE* sf_open_fd (int fd, int mode, SF_INFO *sfinfo, int close_desc) ; - -SNDFILE* sf_open_virtual (SF_VIRTUAL_IO *sfvirtual, int mode, SF_INFO *sfinfo, void *user_data) ; - - -/* sf_error () returns a error number which can be translated to a text -** string using sf_error_number(). -*/ - -int sf_error (SNDFILE *sndfile) ; - - -/* sf_strerror () returns to the caller a pointer to the current error message for -** the given SNDFILE. -*/ - -const char* sf_strerror (SNDFILE *sndfile) ; - - -/* sf_error_number () allows the retrieval of the error string for each internal -** error number. -** -*/ - -const char* sf_error_number (int errnum) ; - - -/* The following two error functions are deprecated but they will remain in the -** library for the foreseeable future. The function sf_strerror() should be used -** in their place. -*/ - -int sf_perror (SNDFILE *sndfile) ; -int sf_error_str (SNDFILE *sndfile, char* str, size_t len) ; - - -/* Return TRUE if fields of the SF_INFO struct are a valid combination of values. */ - -int sf_command (SNDFILE *sndfile, int command, void *data, int datasize) ; - - -/* Return TRUE if fields of the SF_INFO struct are a valid combination of values. */ - -int sf_format_check (const SF_INFO *info) ; - - -/* Seek within the waveform data chunk of the SNDFILE. sf_seek () uses -** the same values for whence (SEEK_SET, SEEK_CUR and SEEK_END) as -** stdio.h function fseek (). -** An offset of zero with whence set to SEEK_SET will position the -** read / write pointer to the first data sample. -** On success sf_seek returns the current position in (multi-channel) -** samples from the start of the file. -** Please see the libsndfile documentation for moving the read pointer -** separately from the write pointer on files open in mode SFM_RDWR. -** On error all of these functions return -1. -*/ - -enum -{ SF_SEEK_SET = SEEK_SET, - SF_SEEK_CUR = SEEK_CUR, - SF_SEEK_END = SEEK_END -} ; - -sf_count_t sf_seek (SNDFILE *sndfile, sf_count_t frames, int whence) ; - - -/* Functions for retrieving and setting string data within sound files. -** Not all file types support this features; AIFF and WAV do. For both -** functions, the str_type parameter must be one of the SF_STR_* values -** defined above. -** On error, sf_set_string() returns non-zero while sf_get_string() -** returns NULL. -*/ - -int sf_set_string (SNDFILE *sndfile, int str_type, const char* str) ; - -const char* sf_get_string (SNDFILE *sndfile, int str_type) ; - - -/* Return the library version string. */ - -const char * sf_version_string (void) ; - -/* Return the current byterate at this point in the file. The byte rate in this -** case is the number of bytes per second of audio data. For instance, for a -** stereo, 18 bit PCM encoded file with an 16kHz sample rate, the byte rate -** would be 2 (stereo) * 2 (two bytes per sample) * 16000 => 64000 bytes/sec. -** For some file formats the returned value will be accurate and exact, for some -** it will be a close approximation, for some it will be the average bitrate for -** the whole file and for some it will be a time varying value that was accurate -** when the file was most recently read or written. -** To get the bitrate, multiple this value by 8. -** Returns -1 for unknown. -*/ -int sf_current_byterate (SNDFILE *sndfile) ; - -/* Functions for reading/writing the waveform data of a sound file. -*/ - -sf_count_t sf_read_raw (SNDFILE *sndfile, void *ptr, sf_count_t bytes) ; -sf_count_t sf_write_raw (SNDFILE *sndfile, const void *ptr, sf_count_t bytes) ; - - -/* Functions for reading and writing the data chunk in terms of frames. -** The number of items actually read/written = frames * number of channels. -** sf_xxxx_raw read/writes the raw data bytes from/to the file -** sf_xxxx_short passes data in the native short format -** sf_xxxx_int passes data in the native int format -** sf_xxxx_float passes data in the native float format -** sf_xxxx_double passes data in the native double format -** All of these read/write function return number of frames read/written. -*/ - -sf_count_t sf_readf_short (SNDFILE *sndfile, short *ptr, sf_count_t frames) ; -sf_count_t sf_writef_short (SNDFILE *sndfile, const short *ptr, sf_count_t frames) ; - -sf_count_t sf_readf_int (SNDFILE *sndfile, int *ptr, sf_count_t frames) ; -sf_count_t sf_writef_int (SNDFILE *sndfile, const int *ptr, sf_count_t frames) ; - -sf_count_t sf_readf_float (SNDFILE *sndfile, float *ptr, sf_count_t frames) ; -sf_count_t sf_writef_float (SNDFILE *sndfile, const float *ptr, sf_count_t frames) ; - -sf_count_t sf_readf_double (SNDFILE *sndfile, double *ptr, sf_count_t frames) ; -sf_count_t sf_writef_double (SNDFILE *sndfile, const double *ptr, sf_count_t frames) ; - - -/* Functions for reading and writing the data chunk in terms of items. -** Otherwise similar to above. -** All of these read/write function return number of items read/written. -*/ - -sf_count_t sf_read_short (SNDFILE *sndfile, short *ptr, sf_count_t items) ; -sf_count_t sf_write_short (SNDFILE *sndfile, const short *ptr, sf_count_t items) ; - -sf_count_t sf_read_int (SNDFILE *sndfile, int *ptr, sf_count_t items) ; -sf_count_t sf_write_int (SNDFILE *sndfile, const int *ptr, sf_count_t items) ; - -sf_count_t sf_read_float (SNDFILE *sndfile, float *ptr, sf_count_t items) ; -sf_count_t sf_write_float (SNDFILE *sndfile, const float *ptr, sf_count_t items) ; - -sf_count_t sf_read_double (SNDFILE *sndfile, double *ptr, sf_count_t items) ; -sf_count_t sf_write_double (SNDFILE *sndfile, const double *ptr, sf_count_t items) ; - - -/* Close the SNDFILE and clean up all memory allocations associated with this -** file. -** Returns 0 on success, or an error number. -*/ - -int sf_close (SNDFILE *sndfile) ; - - -/* If the file is opened SFM_WRITE or SFM_RDWR, call fsync() on the file -** to force the writing of data to disk. If the file is opened SFM_READ -** no action is taken. -*/ - -void sf_write_sync (SNDFILE *sndfile) ; - - - -/* The function sf_wchar_open() is Windows Only! -** Open a file passing in a Windows Unicode filename. Otherwise, this is -** the same as sf_open(). -** -** In order for this to work, you need to do the following: -** -** #include -** #define ENABLE_SNDFILE_WINDOWS_PROTOTYPES 1 -** #including -*/ - -#if (defined (ENABLE_SNDFILE_WINDOWS_PROTOTYPES) && ENABLE_SNDFILE_WINDOWS_PROTOTYPES) -SNDFILE* sf_wchar_open (LPCWSTR wpath, int mode, SF_INFO *sfinfo) ; -#endif - - - - -/* Getting and setting of chunks from within a sound file. -** -** These functions allow the getting and setting of chunks within a sound file -** (for those formats which allow it). -** -** These functions fail safely. Specifically, they will not allow you to overwrite -** existing chunks or add extra versions of format specific reserved chunks but -** should allow you to retrieve any and all chunks (may not be implemented for -** all chunks or all file formats). -*/ - -struct SF_CHUNK_INFO -{ char id [64] ; /* The chunk identifier. */ - unsigned id_size ; /* The size of the chunk identifier. */ - unsigned datalen ; /* The size of that data. */ - void *data ; /* Pointer to the data. */ -} ; - -typedef struct SF_CHUNK_INFO SF_CHUNK_INFO ; - -/* Set the specified chunk info (must be done before any audio data is written -** to the file). This will fail for format specific reserved chunks. -** The chunk_info->data pointer must be valid until the file is closed. -** Returns SF_ERR_NO_ERROR on success or non-zero on failure. -*/ -int sf_set_chunk (SNDFILE * sndfile, const SF_CHUNK_INFO * chunk_info) ; - -/* -** An opaque structure to an iterator over the all chunks of a given id -*/ -typedef struct SF_CHUNK_ITERATOR SF_CHUNK_ITERATOR ; - -/* Get an iterator for all chunks matching chunk_info. -** The iterator will point to the first chunk matching chunk_info. -** Chunks are matching, if (chunk_info->id) matches the first -** (chunk_info->id_size) bytes of a chunk found in the SNDFILE* handle. -** If chunk_info is NULL, an iterator to all chunks in the SNDFILE* handle -** is returned. -** The values of chunk_info->datalen and chunk_info->data are ignored. -** If no matching chunks are found in the sndfile, NULL is returned. -** The returned iterator will stay valid until one of the following occurs: -** a) The sndfile is closed. -** b) A new chunk is added using sf_set_chunk(). -** c) Another chunk iterator function is called on the same SNDFILE* handle -** that causes the iterator to be modified. -** The memory for the iterator belongs to the SNDFILE* handle and is freed when -** sf_close() is called. -*/ -SF_CHUNK_ITERATOR * -sf_get_chunk_iterator (SNDFILE * sndfile, const SF_CHUNK_INFO * chunk_info) ; - -/* Iterate through chunks by incrementing the iterator. -** Increments the iterator and returns a handle to the new one. -** After this call, iterator will no longer be valid, and you must use the -** newly returned handle from now on. -** The returned handle can be used to access the next chunk matching -** the criteria as defined in sf_get_chunk_iterator(). -** If iterator points to the last chunk, this will free all resources -** associated with iterator and return NULL. -** The returned iterator will stay valid until sf_get_chunk_iterator_next -** is called again, the sndfile is closed or a new chunk us added. -*/ -SF_CHUNK_ITERATOR * -sf_next_chunk_iterator (SF_CHUNK_ITERATOR * iterator) ; - - -/* Get the size of the specified chunk. -** If the specified chunk exists, the size will be returned in the -** datalen field of the SF_CHUNK_INFO struct. -** Additionally, the id of the chunk will be copied to the id -** field of the SF_CHUNK_INFO struct and it's id_size field will -** be updated accordingly. -** If the chunk doesn't exist chunk_info->datalen will be zero, and the -** id and id_size fields will be undefined. -** The function will return SF_ERR_NO_ERROR on success or non-zero on -** failure. -*/ -int -sf_get_chunk_size (const SF_CHUNK_ITERATOR * it, SF_CHUNK_INFO * chunk_info) ; - -/* Get the specified chunk data. -** If the specified chunk exists, up to chunk_info->datalen bytes of -** the chunk data will be copied into the chunk_info->data buffer -** (allocated by the caller) and the chunk_info->datalen field -** updated to reflect the size of the data. The id and id_size -** field will be updated according to the retrieved chunk -** If the chunk doesn't exist chunk_info->datalen will be zero, and the -** id and id_size fields will be undefined. -** The function will return SF_ERR_NO_ERROR on success or non-zero on -** failure. -*/ -int -sf_get_chunk_data (const SF_CHUNK_ITERATOR * it, SF_CHUNK_INFO * chunk_info) ; - - -#ifdef __cplusplus -} /* extern "C" */ -#endif /* __cplusplus */ - -#endif /* SNDFILE_H */ - diff --git a/libsndfile.64/include/sndfile.hh b/libsndfile.64/include/sndfile.hh deleted file mode 100644 index 0e1c1c20..00000000 --- a/libsndfile.64/include/sndfile.hh +++ /dev/null @@ -1,446 +0,0 @@ -/* -** Copyright (C) 2005-2012 Erik de Castro Lopo -** -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the author nor the names of any contributors may be used -** to endorse or promote products derived from this software without -** specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/* -** The above modified BSD style license (GPL and LGPL compatible) applies to -** this file. It does not apply to libsndfile itself which is released under -** the GNU LGPL or the libsndfile test suite which is released under the GNU -** GPL. -** This means that this header file can be used under this modified BSD style -** license, but the LGPL still holds for the libsndfile library itself. -*/ - -/* -** sndfile.hh -- A lightweight C++ wrapper for the libsndfile API. -** -** All the methods are inlines and all functionality is contained in this -** file. There is no separate implementation file. -** -** API documentation is in the doc/ directory of the source code tarball -** and at http://www.mega-nerd.com/libsndfile/api.html. -*/ - -#ifndef SNDFILE_HH -#define SNDFILE_HH - -#include - -#include -#include // for std::nothrow - -class SndfileHandle -{ private : - struct SNDFILE_ref - { SNDFILE_ref (void) ; - ~SNDFILE_ref (void) ; - - SNDFILE *sf ; - SF_INFO sfinfo ; - int ref ; - } ; - - SNDFILE_ref *p ; - - public : - /* Default constructor */ - SndfileHandle (void) : p (NULL) {} ; - SndfileHandle (const char *path, int mode = SFM_READ, - int format = 0, int channels = 0, int samplerate = 0) ; - SndfileHandle (std::string const & path, int mode = SFM_READ, - int format = 0, int channels = 0, int samplerate = 0) ; - SndfileHandle (int fd, bool close_desc, int mode = SFM_READ, - int format = 0, int channels = 0, int samplerate = 0) ; - SndfileHandle (SF_VIRTUAL_IO &sfvirtual, void *user_data, int mode = SFM_READ, - int format = 0, int channels = 0, int samplerate = 0) ; - -#ifdef ENABLE_SNDFILE_WINDOWS_PROTOTYPES - SndfileHandle (LPCWSTR wpath, int mode = SFM_READ, - int format = 0, int channels = 0, int samplerate = 0) ; -#endif - - ~SndfileHandle (void) ; - - SndfileHandle (const SndfileHandle &orig) ; - SndfileHandle & operator = (const SndfileHandle &rhs) ; - - /* Mainly for debugging/testing. */ - int refCount (void) const { return (p == NULL) ? 0 : p->ref ; } - - operator bool () const { return (p != NULL) ; } - - bool operator == (const SndfileHandle &rhs) const { return (p == rhs.p) ; } - - sf_count_t frames (void) const { return p ? p->sfinfo.frames : 0 ; } - int format (void) const { return p ? p->sfinfo.format : 0 ; } - int channels (void) const { return p ? p->sfinfo.channels : 0 ; } - int samplerate (void) const { return p ? p->sfinfo.samplerate : 0 ; } - - int error (void) const ; - const char * strError (void) const ; - - int command (int cmd, void *data, int datasize) ; - - sf_count_t seek (sf_count_t frames, int whence) ; - - void writeSync (void) ; - - int setString (int str_type, const char* str) ; - - const char* getString (int str_type) const ; - - static int formatCheck (int format, int channels, int samplerate) ; - - sf_count_t read (short *ptr, sf_count_t items) ; - sf_count_t read (int *ptr, sf_count_t items) ; - sf_count_t read (float *ptr, sf_count_t items) ; - sf_count_t read (double *ptr, sf_count_t items) ; - - sf_count_t write (const short *ptr, sf_count_t items) ; - sf_count_t write (const int *ptr, sf_count_t items) ; - sf_count_t write (const float *ptr, sf_count_t items) ; - sf_count_t write (const double *ptr, sf_count_t items) ; - - sf_count_t readf (short *ptr, sf_count_t frames) ; - sf_count_t readf (int *ptr, sf_count_t frames) ; - sf_count_t readf (float *ptr, sf_count_t frames) ; - sf_count_t readf (double *ptr, sf_count_t frames) ; - - sf_count_t writef (const short *ptr, sf_count_t frames) ; - sf_count_t writef (const int *ptr, sf_count_t frames) ; - sf_count_t writef (const float *ptr, sf_count_t frames) ; - sf_count_t writef (const double *ptr, sf_count_t frames) ; - - sf_count_t readRaw (void *ptr, sf_count_t bytes) ; - sf_count_t writeRaw (const void *ptr, sf_count_t bytes) ; - - /**< Raw access to the handle. SndfileHandle keeps ownership. */ - SNDFILE * rawHandle (void) ; - - /**< Take ownership of handle, if reference count is 1. */ - SNDFILE * takeOwnership (void) ; -} ; - -/*============================================================================== -** Nothing but implementation below. -*/ - -inline -SndfileHandle::SNDFILE_ref::SNDFILE_ref (void) -: sf (NULL), sfinfo (), ref (1) -{} - -inline -SndfileHandle::SNDFILE_ref::~SNDFILE_ref (void) -{ if (sf != NULL) sf_close (sf) ; } - -inline -SndfileHandle::SndfileHandle (const char *path, int mode, int fmt, int chans, int srate) -: p (NULL) -{ - p = new (std::nothrow) SNDFILE_ref () ; - - if (p != NULL) - { p->ref = 1 ; - - p->sfinfo.frames = 0 ; - p->sfinfo.channels = chans ; - p->sfinfo.format = fmt ; - p->sfinfo.samplerate = srate ; - p->sfinfo.sections = 0 ; - p->sfinfo.seekable = 0 ; - - p->sf = sf_open (path, mode, &p->sfinfo) ; - } ; - - return ; -} /* SndfileHandle const char * constructor */ - -inline -SndfileHandle::SndfileHandle (std::string const & path, int mode, int fmt, int chans, int srate) -: p (NULL) -{ - p = new (std::nothrow) SNDFILE_ref () ; - - if (p != NULL) - { p->ref = 1 ; - - p->sfinfo.frames = 0 ; - p->sfinfo.channels = chans ; - p->sfinfo.format = fmt ; - p->sfinfo.samplerate = srate ; - p->sfinfo.sections = 0 ; - p->sfinfo.seekable = 0 ; - - p->sf = sf_open (path.c_str (), mode, &p->sfinfo) ; - } ; - - return ; -} /* SndfileHandle std::string constructor */ - -inline -SndfileHandle::SndfileHandle (int fd, bool close_desc, int mode, int fmt, int chans, int srate) -: p (NULL) -{ - if (fd < 0) - return ; - - p = new (std::nothrow) SNDFILE_ref () ; - - if (p != NULL) - { p->ref = 1 ; - - p->sfinfo.frames = 0 ; - p->sfinfo.channels = chans ; - p->sfinfo.format = fmt ; - p->sfinfo.samplerate = srate ; - p->sfinfo.sections = 0 ; - p->sfinfo.seekable = 0 ; - - p->sf = sf_open_fd (fd, mode, &p->sfinfo, close_desc) ; - } ; - - return ; -} /* SndfileHandle fd constructor */ - -inline -SndfileHandle::SndfileHandle (SF_VIRTUAL_IO &sfvirtual, void *user_data, int mode, int fmt, int chans, int srate) -: p (NULL) -{ - p = new (std::nothrow) SNDFILE_ref () ; - - if (p != NULL) - { p->ref = 1 ; - - p->sfinfo.frames = 0 ; - p->sfinfo.channels = chans ; - p->sfinfo.format = fmt ; - p->sfinfo.samplerate = srate ; - p->sfinfo.sections = 0 ; - p->sfinfo.seekable = 0 ; - - p->sf = sf_open_virtual (&sfvirtual, mode, &p->sfinfo, user_data) ; - } ; - - return ; -} /* SndfileHandle std::string constructor */ - -inline -SndfileHandle::~SndfileHandle (void) -{ if (p != NULL && --p->ref == 0) - delete p ; -} /* SndfileHandle destructor */ - - -inline -SndfileHandle::SndfileHandle (const SndfileHandle &orig) -: p (orig.p) -{ if (p != NULL) - ++p->ref ; -} /* SndfileHandle copy constructor */ - -inline SndfileHandle & -SndfileHandle::operator = (const SndfileHandle &rhs) -{ - if (&rhs == this) - return *this ; - if (p != NULL && --p->ref == 0) - delete p ; - - p = rhs.p ; - if (p != NULL) - ++p->ref ; - - return *this ; -} /* SndfileHandle assignment operator */ - -inline int -SndfileHandle::error (void) const -{ return sf_error (p->sf) ; } - -inline const char * -SndfileHandle::strError (void) const -{ return sf_strerror (p->sf) ; } - -inline int -SndfileHandle::command (int cmd, void *data, int datasize) -{ return sf_command (p->sf, cmd, data, datasize) ; } - -inline sf_count_t -SndfileHandle::seek (sf_count_t frame_count, int whence) -{ return sf_seek (p->sf, frame_count, whence) ; } - -inline void -SndfileHandle::writeSync (void) -{ sf_write_sync (p->sf) ; } - -inline int -SndfileHandle::setString (int str_type, const char* str) -{ return sf_set_string (p->sf, str_type, str) ; } - -inline const char* -SndfileHandle::getString (int str_type) const -{ return sf_get_string (p->sf, str_type) ; } - -inline int -SndfileHandle::formatCheck (int fmt, int chans, int srate) -{ - SF_INFO sfinfo ; - - sfinfo.frames = 0 ; - sfinfo.channels = chans ; - sfinfo.format = fmt ; - sfinfo.samplerate = srate ; - sfinfo.sections = 0 ; - sfinfo.seekable = 0 ; - - return sf_format_check (&sfinfo) ; -} - -/*---------------------------------------------------------------------*/ - -inline sf_count_t -SndfileHandle::read (short *ptr, sf_count_t items) -{ return sf_read_short (p->sf, ptr, items) ; } - -inline sf_count_t -SndfileHandle::read (int *ptr, sf_count_t items) -{ return sf_read_int (p->sf, ptr, items) ; } - -inline sf_count_t -SndfileHandle::read (float *ptr, sf_count_t items) -{ return sf_read_float (p->sf, ptr, items) ; } - -inline sf_count_t -SndfileHandle::read (double *ptr, sf_count_t items) -{ return sf_read_double (p->sf, ptr, items) ; } - -inline sf_count_t -SndfileHandle::write (const short *ptr, sf_count_t items) -{ return sf_write_short (p->sf, ptr, items) ; } - -inline sf_count_t -SndfileHandle::write (const int *ptr, sf_count_t items) -{ return sf_write_int (p->sf, ptr, items) ; } - -inline sf_count_t -SndfileHandle::write (const float *ptr, sf_count_t items) -{ return sf_write_float (p->sf, ptr, items) ; } - -inline sf_count_t -SndfileHandle::write (const double *ptr, sf_count_t items) -{ return sf_write_double (p->sf, ptr, items) ; } - -inline sf_count_t -SndfileHandle::readf (short *ptr, sf_count_t frame_count) -{ return sf_readf_short (p->sf, ptr, frame_count) ; } - -inline sf_count_t -SndfileHandle::readf (int *ptr, sf_count_t frame_count) -{ return sf_readf_int (p->sf, ptr, frame_count) ; } - -inline sf_count_t -SndfileHandle::readf (float *ptr, sf_count_t frame_count) -{ return sf_readf_float (p->sf, ptr, frame_count) ; } - -inline sf_count_t -SndfileHandle::readf (double *ptr, sf_count_t frame_count) -{ return sf_readf_double (p->sf, ptr, frame_count) ; } - -inline sf_count_t -SndfileHandle::writef (const short *ptr, sf_count_t frame_count) -{ return sf_writef_short (p->sf, ptr, frame_count) ; } - -inline sf_count_t -SndfileHandle::writef (const int *ptr, sf_count_t frame_count) -{ return sf_writef_int (p->sf, ptr, frame_count) ; } - -inline sf_count_t -SndfileHandle::writef (const float *ptr, sf_count_t frame_count) -{ return sf_writef_float (p->sf, ptr, frame_count) ; } - -inline sf_count_t -SndfileHandle::writef (const double *ptr, sf_count_t frame_count) -{ return sf_writef_double (p->sf, ptr, frame_count) ; } - -inline sf_count_t -SndfileHandle::readRaw (void *ptr, sf_count_t bytes) -{ return sf_read_raw (p->sf, ptr, bytes) ; } - -inline sf_count_t -SndfileHandle::writeRaw (const void *ptr, sf_count_t bytes) -{ return sf_write_raw (p->sf, ptr, bytes) ; } - -inline SNDFILE * -SndfileHandle::rawHandle (void) -{ return (p ? p->sf : NULL) ; } - -inline SNDFILE * -SndfileHandle::takeOwnership (void) -{ - if (p == NULL || (p->ref != 1)) - return NULL ; - - SNDFILE * sf = p->sf ; - p->sf = NULL ; - delete p ; - p = NULL ; - return sf ; -} - -#ifdef ENABLE_SNDFILE_WINDOWS_PROTOTYPES - -inline -SndfileHandle::SndfileHandle (LPCWSTR wpath, int mode, int fmt, int chans, int srate) -: p (NULL) -{ - p = new (std::nothrow) SNDFILE_ref () ; - - if (p != NULL) - { p->ref = 1 ; - - p->sfinfo.frames = 0 ; - p->sfinfo.channels = chans ; - p->sfinfo.format = fmt ; - p->sfinfo.samplerate = srate ; - p->sfinfo.sections = 0 ; - p->sfinfo.seekable = 0 ; - - p->sf = sf_wchar_open (wpath, mode, &p->sfinfo) ; - } ; - - return ; -} /* SndfileHandle const wchar_t * constructor */ - -#endif - -#endif /* SNDFILE_HH */ - diff --git a/mpg123.64/include/fmt123.h b/mpg123.64/include/fmt123.h deleted file mode 100644 index dcabf5e0..00000000 --- a/mpg123.64/include/fmt123.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - libmpg123: MPEG Audio Decoder library - - separate header just for audio format definitions not tied to - library code - - copyright 1995-2020 by the mpg123 project - free software under the terms of the LGPL 2.1 - see COPYING and AUTHORS files in distribution or http://mpg123.org -*/ - -#ifndef MPG123_ENC_H -#define MPG123_ENC_H - -/** \file fmt123.h Audio format definitions. */ - -/** \defgroup mpg123_enc mpg123 PCM sample encodings - * These are definitions for audio formats used by libmpg123 and - * libout123. - * - * @{ - */ - -/** An enum over all sample types possibly known to mpg123. - * The values are designed as bit flags to allow bitmasking for encoding - * families. - * This is also why the enum is not used as type for actual encoding variables, - * plain integers (at least 16 bit, 15 bit being used) cover the possible - * combinations of these flags. - * - * Note that (your build of) libmpg123 does not necessarily support all these. - * Usually, you can expect the 8bit encodings and signed 16 bit. - * Also 32bit float will be usual beginning with mpg123-1.7.0 . - * What you should bear in mind is that (SSE, etc) optimized routines may be - * absent for some formats. We do have SSE for 16, 32 bit and float, though. - * 24 bit integer is done via postprocessing of 32 bit output -- just cutting - * the last byte, no rounding, even. If you want better, do it yourself. - * - * All formats are in native byte order. If you need different endinaness, you - * can simply postprocess the output buffers (libmpg123 wouldn't do anything - * else). The macro MPG123_SAMPLESIZE() can be helpful there. - */ -enum mpg123_enc_enum -{ -/* 0000 0000 0000 1111 Some 8 bit integer encoding. */ - MPG123_ENC_8 = 0x00f -/* 0000 0000 0100 0000 Some 16 bit integer encoding. */ -, MPG123_ENC_16 = 0x040 -/* 0100 0000 0000 0000 Some 24 bit integer encoding. */ -, MPG123_ENC_24 = 0x4000 -/* 0000 0001 0000 0000 Some 32 bit integer encoding. */ -, MPG123_ENC_32 = 0x100 -/* 0000 0000 1000 0000 Some signed integer encoding. */ -, MPG123_ENC_SIGNED = 0x080 -/* 0000 1110 0000 0000 Some float encoding. */ -, MPG123_ENC_FLOAT = 0xe00 -/* 0000 0000 1101 0000 signed 16 bit */ -, MPG123_ENC_SIGNED_16 = (MPG123_ENC_16|MPG123_ENC_SIGNED|0x10) -/* 0000 0000 0110 0000 unsigned 16 bit */ -, MPG123_ENC_UNSIGNED_16 = (MPG123_ENC_16|0x20) -/* 0000 0000 0000 0001 unsigned 8 bit */ -, MPG123_ENC_UNSIGNED_8 = 0x01 -/* 0000 0000 1000 0010 signed 8 bit */ -, MPG123_ENC_SIGNED_8 = (MPG123_ENC_SIGNED|0x02) -/* 0000 0000 0000 0100 ulaw 8 bit */ -, MPG123_ENC_ULAW_8 = 0x04 -/* 0000 0000 0000 1000 alaw 8 bit */ -, MPG123_ENC_ALAW_8 = 0x08 -/* 0001 0001 1000 0000 signed 32 bit */ -, MPG123_ENC_SIGNED_32 = MPG123_ENC_32|MPG123_ENC_SIGNED|0x1000 -/* 0010 0001 0000 0000 unsigned 32 bit */ -, MPG123_ENC_UNSIGNED_32 = MPG123_ENC_32|0x2000 -/* 0101 0000 1000 0000 signed 24 bit */ -, MPG123_ENC_SIGNED_24 = MPG123_ENC_24|MPG123_ENC_SIGNED|0x1000 -/* 0110 0000 0000 0000 unsigned 24 bit */ -, MPG123_ENC_UNSIGNED_24 = MPG123_ENC_24|0x2000 -/* 0000 0010 0000 0000 32bit float */ -, MPG123_ENC_FLOAT_32 = 0x200 -/* 0000 0100 0000 0000 64bit float */ -, MPG123_ENC_FLOAT_64 = 0x400 -/* Any possibly known encoding from the list above. */ -, MPG123_ENC_ANY = ( MPG123_ENC_SIGNED_16 | MPG123_ENC_UNSIGNED_16 - | MPG123_ENC_UNSIGNED_8 | MPG123_ENC_SIGNED_8 - | MPG123_ENC_ULAW_8 | MPG123_ENC_ALAW_8 - | MPG123_ENC_SIGNED_32 | MPG123_ENC_UNSIGNED_32 - | MPG123_ENC_SIGNED_24 | MPG123_ENC_UNSIGNED_24 - | MPG123_ENC_FLOAT_32 | MPG123_ENC_FLOAT_64 ) -}; - -/** Get size of one PCM sample with given encoding. - * This is included both in libmpg123 and libout123. Both offer - * an API function to provide the macro results from library - * compile-time, not that of you application. This most likely - * does not matter as I do not expect any fresh PCM sample - * encoding to appear. But who knows? Perhaps the encoding type - * will be abused for funny things in future, not even plain PCM. - * And, by the way: Thomas really likes the ?: operator. - * \param enc the encoding (mpg123_enc_enum value) - * \return size of one sample in bytes - */ -#define MPG123_SAMPLESIZE(enc) ( \ - (enc) < 1 \ - ? 0 \ - : ( (enc) & MPG123_ENC_8 \ - ? 1 \ - : ( (enc) & MPG123_ENC_16 \ - ? 2 \ - : ( (enc) & MPG123_ENC_24 \ - ? 3 \ - : ( ( (enc) & MPG123_ENC_32 \ - || (enc) == MPG123_ENC_FLOAT_32 ) \ - ? 4 \ - : ( (enc) == MPG123_ENC_FLOAT_64 \ - ? 8 \ - : 0 \ -) ) ) ) ) ) - -/** Representation of zero in differing encodings. - * This exists to define proper silence in various encodings without - * having to link to libsyn123 to do actual conversions at runtime. - * You have to handle big/little endian order yourself, though. - * This takes the shortcut that any signed encoding has a zero with - * all-zero bits. Unsigned linear encodings just have the highest bit set - * (2^(n-1) for n bits), while the nonlinear 8-bit ones are special. - * \param enc the encoding (mpg123_enc_enum value) - * \param siz bytes per sample (return value of MPG123_SAMPLESIZE(enc)) - * \param off byte (octet) offset counted from LSB - * \return unsigned byte value for the designated octet - */ -#define MPG123_ZEROSAMPLE(enc, siz, off) ( \ - (enc) == MPG123_ENC_ULAW_8 \ - ? (off == 0 ? 0xff : 0x00) \ - : ( (enc) == MPG123_ENC_ALAW_8 \ - ? (off == 0 ? 0xd5 : 0x00) \ - : ( (((enc) & (MPG123_ENC_SIGNED|MPG123_ENC_FLOAT)) || (siz) != ((off)+1)) \ - ? 0x00 \ - : 0x80 \ - ) ) ) - -/** Structure defining an audio format. - * Providing the members as individual function arguments to define a certain - * output format is easy enough. This struct makes is more comfortable to deal - * with a list of formats. - * Negative values for the members might be used to communicate use of default - * values. - */ -struct mpg123_fmt -{ - long rate; /**< sampling rate in Hz */ - int channels; /**< channel count */ - /** encoding code, can be single value or bitwise or of members of - * mpg123_enc_enum */ - int encoding; -}; - -/* @} */ - -#endif - diff --git a/mpg123.64/include/mpg123.h b/mpg123.64/include/mpg123.h deleted file mode 100644 index 7b0a8495..00000000 --- a/mpg123.64/include/mpg123.h +++ /dev/null @@ -1,1697 +0,0 @@ -/* - libmpg123: MPEG Audio Decoder library (version 1.26.3) - - copyright 1995-2015 by the mpg123 project - free software under the terms of the LGPL 2.1 - see COPYING and AUTHORS files in distribution or http://mpg123.org -*/ - -#ifndef MPG123_LIB_H -#define MPG123_LIB_H - -#include - -/** \file mpg123.h The header file for the libmpg123 MPEG Audio decoder */ - -/** A macro to check at compile time which set of API functions to expect. - * This should be incremented at least each time a new symbol is added - * to the header. - */ -#define MPG123_API_VERSION 45 - -#ifndef MPG123_EXPORT -/** Defines needed for MS Visual Studio(tm) DLL builds. - * Every public function must be prefixed with MPG123_EXPORT. When building - * the DLL ensure to define BUILD_MPG123_DLL. This makes the function accessible - * for clients and includes it in the import library which is created together - * with the DLL. When consuming the DLL ensure to define LINK_MPG123_DLL which - * imports the functions from the DLL. - */ -#ifdef BUILD_MPG123_DLL -/* The dll exports. */ -#define MPG123_EXPORT __declspec(dllexport) -#else -#ifdef LINK_MPG123_DLL -/* The exe imports. */ -#define MPG123_EXPORT __declspec(dllimport) -#else -/* Nothing on normal/UNIX builds */ -#define MPG123_EXPORT -#endif -#endif -#endif - -/* This is for Visual Studio, so this header works as distributed in the binary downloads */ -#if defined(_MSC_VER) && !defined(MPG123_DEF_SSIZE_T) -#define MPG123_DEF_SSIZE_T -#include -typedef ptrdiff_t ssize_t; -#endif - -#ifndef MPG123_NO_CONFIGURE /* Enable use of this file without configure. */ -#include -#include - -/* Simplified large file handling. - I used to have a check here that prevents building for a library with conflicting large file setup - (application that uses 32 bit offsets with library that uses 64 bits). - While that was perfectly fine in an environment where there is one incarnation of the library, - it hurt GNU/Linux and Solaris systems with multilib where the distribution fails to provide the - correct header matching the 32 bit library (where large files need explicit support) or - the 64 bit library (where there is no distinction). - - New approach: When the app defines _FILE_OFFSET_BITS, it wants non-default large file support, - and thus functions with added suffix (mpg123_open_64). - Any mismatch will be caught at link time because of the _FILE_OFFSET_BITS setting used when - building libmpg123. Plus, there's dual mode large file support in mpg123 since 1.12 now. - Link failure is not the expected outcome of any half-sane usage anymore. - - More complication: What about client code defining _LARGEFILE64_SOURCE? It might want direct access to the _64 functions, along with the ones without suffix. Well, that's possible now via defining MPG123_NO_LARGENAME and MPG123_LARGESUFFIX, respectively, for disabling or enforcing the suffix names. -*/ - -/* - Now, the renaming of large file aware functions. - By default, it appends underscore _FILE_OFFSET_BITS (so, mpg123_seek_64 for mpg123_seek), if _FILE_OFFSET_BITS is defined. You can force a different suffix via MPG123_LARGESUFFIX (that must include the underscore), or you can just disable the whole mess by defining MPG123_NO_LARGENAME. -*/ -#if (!defined MPG123_NO_LARGENAME) && ((defined _FILE_OFFSET_BITS) || (defined MPG123_LARGESUFFIX)) - -/* Need some trickery to concatenate the value(s) of the given macro(s). */ -#define MPG123_MACROCAT_REALLY(a, b) a ## b -#define MPG123_MACROCAT(a, b) MPG123_MACROCAT_REALLY(a, b) -#ifndef MPG123_LARGESUFFIX -#define MPG123_LARGESUFFIX MPG123_MACROCAT(_, _FILE_OFFSET_BITS) -#endif -#define MPG123_LARGENAME(func) MPG123_MACROCAT(func, MPG123_LARGESUFFIX) - -#define mpg123_open_fixed MPG123_LARGENAME(mpg123_open_fixed) -#define mpg123_open MPG123_LARGENAME(mpg123_open) -#define mpg123_open_fd MPG123_LARGENAME(mpg123_open_fd) -#define mpg123_open_handle MPG123_LARGENAME(mpg123_open_handle) -#define mpg123_framebyframe_decode MPG123_LARGENAME(mpg123_framebyframe_decode) -#define mpg123_decode_frame MPG123_LARGENAME(mpg123_decode_frame) -#define mpg123_tell MPG123_LARGENAME(mpg123_tell) -#define mpg123_tellframe MPG123_LARGENAME(mpg123_tellframe) -#define mpg123_tell_stream MPG123_LARGENAME(mpg123_tell_stream) -#define mpg123_seek MPG123_LARGENAME(mpg123_seek) -#define mpg123_feedseek MPG123_LARGENAME(mpg123_feedseek) -#define mpg123_seek_frame MPG123_LARGENAME(mpg123_seek_frame) -#define mpg123_timeframe MPG123_LARGENAME(mpg123_timeframe) -#define mpg123_index MPG123_LARGENAME(mpg123_index) -#define mpg123_set_index MPG123_LARGENAME(mpg123_set_index) -#define mpg123_position MPG123_LARGENAME(mpg123_position) -#define mpg123_length MPG123_LARGENAME(mpg123_length) -#define mpg123_framelength MPG123_LARGENAME(mpg123_framelength) -#define mpg123_set_filesize MPG123_LARGENAME(mpg123_set_filesize) -#define mpg123_replace_reader MPG123_LARGENAME(mpg123_replace_reader) -#define mpg123_replace_reader_handle MPG123_LARGENAME(mpg123_replace_reader_handle) -#define mpg123_framepos MPG123_LARGENAME(mpg123_framepos) - -#endif /* largefile hackery */ - -#endif /* MPG123_NO_CONFIGURE */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** \defgroup mpg123_init mpg123 library and handle setup - * - * Functions to initialise and shutdown the mpg123 library and handles. - * The parameters of handles have workable defaults, you only have to tune them when you want to tune something;-) - * Tip: Use a RVA setting... - * - * @{ - */ - -/** Opaque structure for the libmpg123 decoder handle. */ -struct mpg123_handle_struct; - -/** Opaque structure for the libmpg123 decoder handle. - * Most functions take a pointer to a mpg123_handle as first argument and operate on its data in an object-oriented manner. - */ -typedef struct mpg123_handle_struct mpg123_handle; - -/** Function to initialise the mpg123 library. - * This should be called once in a non-parallel context. It is not explicitly - * thread-safe, but repeated/concurrent calls still _should_ be safe as static - * tables are filled with the same values anyway. - * - * \return MPG123_OK if successful, otherwise an error number. - */ -MPG123_EXPORT int mpg123_init(void); - -/** Superfluous Function to close down the mpg123 library. - * This was created with the thought that there sometime will be cleanup code - * to be run after library use. This never materialized. You can forget about - * this function and it is only here for old programs that do call it. - */ -MPG123_EXPORT void mpg123_exit(void); - -/** Create a handle with optional choice of decoder (named by a string, see mpg123_decoders() or mpg123_supported_decoders()). - * and optional retrieval of an error code to feed to mpg123_plain_strerror(). - * Optional means: Any of or both the parameters may be NULL. - * - * \param decoder optional choice of decoder variant (NULL for default) - * \param error optional address to store error codes - * \return Non-NULL pointer to fresh handle when successful. - */ -MPG123_EXPORT mpg123_handle *mpg123_new(const char* decoder, int *error); - -/** Delete handle, mh is either a valid mpg123 handle or NULL. - * \param mh handle - */ -MPG123_EXPORT void mpg123_delete(mpg123_handle *mh); - -/** Free plain memory allocated within libmpg123. - * This is for library users that are not sure to use the same underlying - * memory allocator as libmpg123. It is just a wrapper over free() in - * the underlying C library. - */ -MPG123_EXPORT void mpg123_free(void *ptr); - -/** Enumeration of the parameters types that it is possible to set/get. */ -enum mpg123_parms -{ - MPG123_VERBOSE = 0, /**< set verbosity value for enabling messages to stderr, >= 0 makes sense (integer) */ - MPG123_FLAGS, /**< set all flags, p.ex val = MPG123_GAPLESS|MPG123_MONO_MIX (integer) */ - MPG123_ADD_FLAGS, /**< add some flags (integer) */ - MPG123_FORCE_RATE, /**< when value > 0, force output rate to that value (integer) */ - MPG123_DOWN_SAMPLE, /**< 0=native rate, 1=half rate, 2=quarter rate (integer) */ - MPG123_RVA, /**< one of the RVA choices above (integer) */ - MPG123_DOWNSPEED, /**< play a frame N times (integer) */ - MPG123_UPSPEED, /**< play every Nth frame (integer) */ - MPG123_START_FRAME, /**< start with this frame (skip frames before that, integer) */ - MPG123_DECODE_FRAMES, /**< decode only this number of frames (integer) */ - MPG123_ICY_INTERVAL, /**< Stream contains ICY metadata with this interval (integer). - Make sure to set this _before_ opening a stream.*/ - MPG123_OUTSCALE, /**< the scale for output samples (amplitude - integer or float according to mpg123 output format, normally integer) */ - MPG123_TIMEOUT, /**< timeout for reading from a stream (not supported on win32, integer) */ - MPG123_REMOVE_FLAGS, /**< remove some flags (inverse of MPG123_ADD_FLAGS, integer) */ - MPG123_RESYNC_LIMIT, /**< Try resync on frame parsing for that many bytes or until end of stream (<0 ... integer). This can enlarge the limit for skipping junk on beginning, too (but not reduce it). */ - MPG123_INDEX_SIZE /**< Set the frame index size (if supported). Values <0 mean that the index is allowed to grow dynamically in these steps (in positive direction, of course) -- Use this when you really want a full index with every individual frame. */ - ,MPG123_PREFRAMES /**< Decode/ignore that many frames in advance for layer 3. This is needed to fill bit reservoir after seeking, for example (but also at least one frame in advance is needed to have all "normal" data for layer 3). Give a positive integer value, please.*/ - ,MPG123_FEEDPOOL /**< For feeder mode, keep that many buffers in a pool to avoid frequent malloc/free. The pool is allocated on mpg123_open_feed(). If you change this parameter afterwards, you can trigger growth and shrinkage during decoding. The default value could change any time. If you care about this, then set it. (integer) */ - ,MPG123_FEEDBUFFER /**< Minimal size of one internal feeder buffer, again, the default value is subject to change. (integer) */ - ,MPG123_FREEFORMAT_SIZE /**< Tell the parser a free-format frame size to - * avoid read-ahead to get it. A value of -1 (default) means that the parser - * will determine it. The parameter value is applied during decoder setup - * for a freshly opened stream only. - */ -}; - -/** Flag bits for MPG123_FLAGS, use the usual binary or to combine. */ -enum mpg123_param_flags -{ - MPG123_FORCE_MONO = 0x7 /**< 0111 Force some mono mode: This is a test bitmask for seeing if any mono forcing is active. */ - ,MPG123_MONO_LEFT = 0x1 /**< 0001 Force playback of left channel only. */ - ,MPG123_MONO_RIGHT = 0x2 /**< 0010 Force playback of right channel only. */ - ,MPG123_MONO_MIX = 0x4 /**< 0100 Force playback of mixed mono. */ - ,MPG123_FORCE_STEREO = 0x8 /**< 1000 Force stereo output. */ - ,MPG123_FORCE_8BIT = 0x10 /**< 00010000 Force 8bit formats. */ - ,MPG123_QUIET = 0x20 /**< 00100000 Suppress any printouts (overrules verbose). */ - ,MPG123_GAPLESS = 0x40 /**< 01000000 Enable gapless decoding (default on if libmpg123 has support). */ - ,MPG123_NO_RESYNC = 0x80 /**< 10000000 Disable resync stream after error. */ - ,MPG123_SEEKBUFFER = 0x100 /**< 000100000000 Enable small buffer on non-seekable streams to allow some peek-ahead (for better MPEG sync). */ - ,MPG123_FUZZY = 0x200 /**< 001000000000 Enable fuzzy seeks (guessing byte offsets or using approximate seek points from Xing TOC) */ - ,MPG123_FORCE_FLOAT = 0x400 /**< 010000000000 Force floating point output (32 or 64 bits depends on mpg123 internal precision). */ - ,MPG123_PLAIN_ID3TEXT = 0x800 /**< 100000000000 Do not translate ID3 text data to UTF-8. ID3 strings will contain the raw text data, with the first byte containing the ID3 encoding code. */ - ,MPG123_IGNORE_STREAMLENGTH = 0x1000 /**< 1000000000000 Ignore any stream length information contained in the stream, which can be contained in a 'TLEN' frame of an ID3v2 tag or a Xing tag */ - ,MPG123_SKIP_ID3V2 = 0x2000 /**< 10 0000 0000 0000 Do not parse ID3v2 tags, just skip them. */ - ,MPG123_IGNORE_INFOFRAME = 0x4000 /**< 100 0000 0000 0000 Do not parse the LAME/Xing info frame, treat it as normal MPEG data. */ - ,MPG123_AUTO_RESAMPLE = 0x8000 /**< 1000 0000 0000 0000 Allow automatic internal resampling of any kind (default on if supported). Especially when going lowlevel with replacing output buffer, you might want to unset this flag. Setting MPG123_DOWNSAMPLE or MPG123_FORCE_RATE will override this. */ - ,MPG123_PICTURE = 0x10000 /**< 17th bit: Enable storage of pictures from tags (ID3v2 APIC). */ - ,MPG123_NO_PEEK_END = 0x20000 /**< 18th bit: Do not seek to the end of - * the stream in order to probe - * the stream length and search for the id3v1 field. This also means - * the file size is unknown unless set using mpg123_set_filesize() and - * the stream is assumed as non-seekable unless overridden. - */ - ,MPG123_FORCE_SEEKABLE = 0x40000 /**< 19th bit: Force the stream to be seekable. */ - ,MPG123_STORE_RAW_ID3 = 0x80000 /**< store raw ID3 data (even if skipping) */ - ,MPG123_FORCE_ENDIAN = 0x100000 /**< Enforce endianess of output samples. - * This is not reflected in the format codes. If this flag is set along with - * MPG123_BIG_ENDIAN, MPG123_ENC_SIGNED16 means s16be, without - * MPG123_BIG_ENDIAN, it means s16le. Normal operation without - * MPG123_FORCE_ENDIAN produces output in native byte order. - */ - ,MPG123_BIG_ENDIAN = 0x200000 /**< Choose big endian instead of little. */ - ,MPG123_NO_READAHEAD = 0x400000 /**< Disable read-ahead in parser. If - * you know you provide full frames to the feeder API, this enables - * decoder output from the first one on, instead of having to wait for - * the next frame to confirm that the stream is healthy. It also disables - * free format support unless you provide a frame size using - * MPG123_FREEFORMAT_SIZE. - */ - ,MPG123_FLOAT_FALLBACK = 0x800000 /**< Consider floating point output encoding only after - * trying other (possibly downsampled) rates and encodings first. This is to - * support efficient playback where floating point output is only configured for - * an external resampler, bypassing that resampler when the desired rate can - * be produced directly. This is enabled by default to be closer to older versions - * of libmpg123 which did not enable float automatically at all. If disabled, - * float is considered after the 16 bit default and higher-bit integer encodings - * for any rate. */ - ,MPG123_NO_FRANKENSTEIN = 0x1000000 /**< Disable support for Frankenstein streams - * (different MPEG streams stiched together). Do not accept serious change of MPEG - * header inside a single stream. With this flag, the audio output format cannot - * change during decoding unless you open a new stream. This also stops decoding - * after an announced end of stream (Info header contained a number of frames - * and this number has been reached). This makes your MP3 files behave more like - * ordinary media files with defined structure, rather than stream dumps with - * some sugar. */ -}; - -/** choices for MPG123_RVA */ -enum mpg123_param_rva -{ - MPG123_RVA_OFF = 0 /**< RVA disabled (default). */ - ,MPG123_RVA_MIX = 1 /**< Use mix/track/radio gain. */ - ,MPG123_RVA_ALBUM = 2 /**< Use album/audiophile gain */ - ,MPG123_RVA_MAX = MPG123_RVA_ALBUM /**< The maximum RVA code, may increase in future. */ -}; - -/** Set a specific parameter, for a specific mpg123_handle, using a parameter - * type key chosen from the mpg123_parms enumeration, to the specified value. - * \param mh handle - * \param type parameter choice - * \param value integer value - * \param fvalue floating point value - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_param( mpg123_handle *mh -, enum mpg123_parms type, long value, double fvalue ); - -/** Get a specific parameter, for a specific mpg123_handle. - * See the mpg123_parms enumeration for a list of available parameters. - * \param mh handle - * \param type parameter choice - * \param value integer value return address - * \param fvalue floating point value return address - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_getparam( mpg123_handle *mh -, enum mpg123_parms type, long *value, double *fvalue ); - -/** Feature set available for query with mpg123_feature. */ -enum mpg123_feature_set -{ - MPG123_FEATURE_ABI_UTF8OPEN = 0 /**< mpg123 expects path names to be given in UTF-8 encoding instead of plain native. */ - ,MPG123_FEATURE_OUTPUT_8BIT /**< 8bit output */ - ,MPG123_FEATURE_OUTPUT_16BIT /**< 16bit output */ - ,MPG123_FEATURE_OUTPUT_32BIT /**< 32bit output */ - ,MPG123_FEATURE_INDEX /**< support for building a frame index for accurate seeking */ - ,MPG123_FEATURE_PARSE_ID3V2 /**< id3v2 parsing */ - ,MPG123_FEATURE_DECODE_LAYER1 /**< mpeg layer-1 decoder enabled */ - ,MPG123_FEATURE_DECODE_LAYER2 /**< mpeg layer-2 decoder enabled */ - ,MPG123_FEATURE_DECODE_LAYER3 /**< mpeg layer-3 decoder enabled */ - ,MPG123_FEATURE_DECODE_ACCURATE /**< accurate decoder rounding */ - ,MPG123_FEATURE_DECODE_DOWNSAMPLE /**< downsample (sample omit) */ - ,MPG123_FEATURE_DECODE_NTOM /**< flexible rate decoding */ - ,MPG123_FEATURE_PARSE_ICY /**< ICY support */ - ,MPG123_FEATURE_TIMEOUT_READ /**< Reader with timeout (network). */ - ,MPG123_FEATURE_EQUALIZER /**< tunable equalizer */ - ,MPG123_FEATURE_MOREINFO /**< more info extraction (for frame analyzer) */ - ,MPG123_FEATURE_OUTPUT_FLOAT32 /**< 32 bit float output */ - ,MPG123_FEATURE_OUTPUT_FLOAT64 /**< 64 bit float output (usually never) */ -}; - -/** Query libmpg123 features. - * \param key feature selection - * \return 1 for success, 0 for unimplemented functions - */ -MPG123_EXPORT int mpg123_feature(const enum mpg123_feature_set key); - -/** Query libmpg123 features with better ABI compatibility - * - * This is the same as mpg123_feature(), but this time not using - * the enum as argument. Compilers don't have to agree on the size of - * enums and hence they are not safe in public API. - * - * \param key feature selection - * \return 1 for success, 0 for unimplemented functions - */ -MPG123_EXPORT int mpg123_feature2(int key); - -/* @} */ - - -/** \defgroup mpg123_error mpg123 error handling - * - * Functions to get text version of the error numbers and an enumeration - * of the error codes returned by libmpg123. - * - * Most functions operating on a mpg123_handle simply return MPG123_OK (0) - * on success and MPG123_ERR (-1) on failure, setting the internal error - * variable of the handle to the specific error code. If there was not a valid - * (non-NULL) handle provided to a function operating on one, MPG123_BAD_HANDLE - * may be returned if this can not be confused with a valid positive return - * value. - * Meaning: A function expected to return positive integers on success will - * always indicate error or a special condition by returning a negative one. - * - * Decoding/seek functions may also return message codes MPG123_DONE, - * MPG123_NEW_FORMAT and MPG123_NEED_MORE (all negative, see below on how to - * react). Note that calls to those can be nested, so generally watch out - * for these codes after initial handle setup. - * Especially any function that needs information about the current stream - * to work will try to at least parse the beginning if that did not happen - * yet. - * - * On a function that is supposed to return MPG123_OK on success and - * MPG123_ERR on failure, make sure you check for != MPG123_OK, not - * == MPG123_ERR, as the error code could get more specific in future, - * or there is just a special message from a decoding routine as indicated - * above. - * - * @{ - */ - -/** Enumeration of the message and error codes and returned by libmpg123 functions. */ -enum mpg123_errors -{ - MPG123_DONE=-12, /**< Message: Track ended. Stop decoding. */ - MPG123_NEW_FORMAT=-11, /**< Message: Output format will be different on next call. Note that some libmpg123 versions between 1.4.3 and 1.8.0 insist on you calling mpg123_getformat() after getting this message code. Newer verisons behave like advertised: You have the chance to call mpg123_getformat(), but you can also just continue decoding and get your data. */ - MPG123_NEED_MORE=-10, /**< Message: For feed reader: "Feed me more!" (call mpg123_feed() or mpg123_decode() with some new input data). */ - MPG123_ERR=-1, /**< Generic Error */ - MPG123_OK=0, /**< Success */ - MPG123_BAD_OUTFORMAT, /**< Unable to set up output format! */ - MPG123_BAD_CHANNEL, /**< Invalid channel number specified. */ - MPG123_BAD_RATE, /**< Invalid sample rate specified. */ - MPG123_ERR_16TO8TABLE, /**< Unable to allocate memory for 16 to 8 converter table! */ - MPG123_BAD_PARAM, /**< Bad parameter id! */ - MPG123_BAD_BUFFER, /**< Bad buffer given -- invalid pointer or too small size. */ - MPG123_OUT_OF_MEM, /**< Out of memory -- some malloc() failed. */ - MPG123_NOT_INITIALIZED, /**< You didn't initialize the library! */ - MPG123_BAD_DECODER, /**< Invalid decoder choice. */ - MPG123_BAD_HANDLE, /**< Invalid mpg123 handle. */ - MPG123_NO_BUFFERS, /**< Unable to initialize frame buffers (out of memory?). */ - MPG123_BAD_RVA, /**< Invalid RVA mode. */ - MPG123_NO_GAPLESS, /**< This build doesn't support gapless decoding. */ - MPG123_NO_SPACE, /**< Not enough buffer space. */ - MPG123_BAD_TYPES, /**< Incompatible numeric data types. */ - MPG123_BAD_BAND, /**< Bad equalizer band. */ - MPG123_ERR_NULL, /**< Null pointer given where valid storage address needed. */ - MPG123_ERR_READER, /**< Error reading the stream. */ - MPG123_NO_SEEK_FROM_END,/**< Cannot seek from end (end is not known). */ - MPG123_BAD_WHENCE, /**< Invalid 'whence' for seek function.*/ - MPG123_NO_TIMEOUT, /**< Build does not support stream timeouts. */ - MPG123_BAD_FILE, /**< File access error. */ - MPG123_NO_SEEK, /**< Seek not supported by stream. */ - MPG123_NO_READER, /**< No stream opened. */ - MPG123_BAD_PARS, /**< Bad parameter handle. */ - MPG123_BAD_INDEX_PAR, /**< Bad parameters to mpg123_index() and mpg123_set_index() */ - MPG123_OUT_OF_SYNC, /**< Lost track in bytestream and did not try to resync. */ - MPG123_RESYNC_FAIL, /**< Resync failed to find valid MPEG data. */ - MPG123_NO_8BIT, /**< No 8bit encoding possible. */ - MPG123_BAD_ALIGN, /**< Stack aligmnent error */ - MPG123_NULL_BUFFER, /**< NULL input buffer with non-zero size... */ - MPG123_NO_RELSEEK, /**< Relative seek not possible (screwed up file offset) */ - MPG123_NULL_POINTER, /**< You gave a null pointer somewhere where you shouldn't have. */ - MPG123_BAD_KEY, /**< Bad key value given. */ - MPG123_NO_INDEX, /**< No frame index in this build. */ - MPG123_INDEX_FAIL, /**< Something with frame index went wrong. */ - MPG123_BAD_DECODER_SETUP, /**< Something prevents a proper decoder setup */ - MPG123_MISSING_FEATURE /**< This feature has not been built into libmpg123. */ - ,MPG123_BAD_VALUE /**< A bad value has been given, somewhere. */ - ,MPG123_LSEEK_FAILED /**< Low-level seek failed. */ - ,MPG123_BAD_CUSTOM_IO /**< Custom I/O not prepared. */ - ,MPG123_LFS_OVERFLOW /**< Offset value overflow during translation of large file API calls -- your client program cannot handle that large file. */ - ,MPG123_INT_OVERFLOW /**< Some integer overflow. */ -}; - -/** Look up error strings given integer code. - * \param errcode integer error code - * \return string describing what that error error code means - */ -MPG123_EXPORT const char* mpg123_plain_strerror(int errcode); - -/** Give string describing what error has occured in the context of handle mh. - * When a function operating on an mpg123 handle returns MPG123_ERR, you should check for the actual reason via - * char *errmsg = mpg123_strerror(mh) - * This function will catch mh == NULL and return the message for MPG123_BAD_HANDLE. - * \param mh handle - * \return error message - */ -MPG123_EXPORT const char* mpg123_strerror(mpg123_handle *mh); - -/** Return the plain errcode intead of a string. - * \param mh handle - * \return error code recorded in handle or MPG123_BAD_HANDLE - */ -MPG123_EXPORT int mpg123_errcode(mpg123_handle *mh); - -/*@}*/ - - -/** \defgroup mpg123_decoder mpg123 decoder selection - * - * Functions to list and select the available decoders. - * Perhaps the most prominent feature of mpg123: You have several (optimized) decoders to choose from (on x86 and PPC (MacOS) systems, that is). - * - * @{ - */ - -/** Get available decoder list. - * \return NULL-terminated array of generally available decoder names (plain 8bit ASCII) - */ -MPG123_EXPORT const char **mpg123_decoders(void); - -/** Get supported decoder list. - * \return NULL-terminated array of the decoders supported by the CPU (plain 8bit ASCII) - */ -MPG123_EXPORT const char **mpg123_supported_decoders(void); - -/** Set the active decoder. - * \param mh handle - * \param decoder_name name of decoder - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_decoder(mpg123_handle *mh, const char* decoder_name); - -/** Get the currently active decoder name. - * The active decoder engine can vary depening on output constraints, - * mostly non-resampling, integer output is accelerated via 3DNow & Co. but for - * other modes a fallback engine kicks in. - * Note that this can return a decoder that is only active in the hidden and not - * available as decoder choice from the outside. - * \param mh handle - * \return The decoder name or NULL on error. - */ -MPG123_EXPORT const char* mpg123_current_decoder(mpg123_handle *mh); - -/*@}*/ - - -/** \defgroup mpg123_output mpg123 output audio format - * - * Functions to get and select the format of the decoded audio. - * - * Before you dive in, please be warned that you might get confused by this. - * This seems to happen a lot, therefore I am trying to explain in advance. - * If you do feel confused and just want to decode your normal MPEG audio files that - * don't alter properties in the middle, just use mpg123_open_fixed() with a fixed encoding - * and channel count and forget about a matrix of audio formats. If you want to get funky, - * read ahead ... - * - * The mpg123 library decides what output format to use when encountering the first frame in a stream, or actually any frame that is still valid but differs from the frames before in the prompted output format. At such a deciding point, an internal table of allowed encodings, sampling rates and channel setups is consulted. According to this table, an output format is chosen and the decoding engine set up accordingly (including optimized routines for different output formats). This might seem unusual but it just follows from the non-existence of "MPEG audio files" with defined overall properties. There are streams, streams are concatenations of (semi) independent frames. We store streams on disk and call them "MPEG audio files", but that does not change their nature as the decoder is concerned (the LAME/Xing header for gapless decoding makes things interesting again). - * - * To get to the point: What you do with mpg123_format() and friends is to fill the internal table of allowed formats before it is used. That includes removing support for some formats or adding your forced sample rate (see MPG123_FORCE_RATE) that will be used with the crude internal resampler. Also keep in mind that the sample encoding is just a question of choice -- the MPEG frames do only indicate their native sampling rate and channel count. If you want to decode to integer or float samples, 8 or 16 bit ... that is your decision. In a "clean" world, libmpg123 would always decode to 32 bit float and let you handle any sample conversion. But there are optimized routines that work faster by directly decoding to the desired encoding / accuracy. We prefer efficiency over conceptual tidyness. - * - * People often start out thinking that mpg123_format() should change the actual decoding format on the fly. That is wrong. It only has effect on the next natural change of output format, when libmpg123 will consult its format table again. To make life easier, you might want to call mpg123_format_none() before any thing else and then just allow one desired encoding and a limited set of sample rates / channel choices that you actually intend to deal with. You can force libmpg123 to decode everything to 44100 KHz, stereo, 16 bit integer ... it will duplicate mono channels and even do resampling if needed (unless that feature is disabled in the build, same with some encodings). But I have to stress that the resampling of libmpg123 is very crude and doesn't even contain any kind of "proper" interpolation. - * - * In any case, watch out for MPG123_NEW_FORMAT as return message from decoding routines and call mpg123_getformat() to get the currently active output format. - * - * @{ - */ - -/** They can be combined into one number (3) to indicate mono and stereo... */ -enum mpg123_channelcount -{ - MPG123_MONO = 1 /**< mono */ - ,MPG123_STEREO = 2 /**< stereo */ -}; - -/** An array of supported standard sample rates - * These are possible native sample rates of MPEG audio files. - * You can still force mpg123 to resample to a different one, but by - * default you will only get audio in one of these samplings. - * This list is in ascending order. - * \param list Store a pointer to the sample rates array there. - * \param number Store the number of sample rates there. */ -MPG123_EXPORT void mpg123_rates(const long **list, size_t *number); - -/** An array of supported audio encodings. - * An audio encoding is one of the fully qualified members of mpg123_enc_enum (MPG123_ENC_SIGNED_16, not MPG123_SIGNED). - * \param list Store a pointer to the encodings array there. - * \param number Store the number of encodings there. */ -MPG123_EXPORT void mpg123_encodings(const int **list, size_t *number); - -/** Return the size (in bytes) of one mono sample of the named encoding. - * \param encoding The encoding value to analyze. - * \return positive size of encoding in bytes, 0 on invalid encoding. */ -MPG123_EXPORT int mpg123_encsize(int encoding); - -/** Configure a mpg123 handle to accept no output format at all, - * use before specifying supported formats with mpg123_format - * \param mh handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_format_none(mpg123_handle *mh); - -/** Configure mpg123 handle to accept all formats - * (also any custom rate you may set) -- this is default. - * \param mh handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_format_all(mpg123_handle *mh); - -/** Set the audio format support of a mpg123_handle in detail: - * \param mh handle - * \param rate The sample rate value (in Hertz). - * \param channels A combination of MPG123_STEREO and MPG123_MONO. - * \param encodings A combination of accepted encodings for rate and channels, p.ex MPG123_ENC_SIGNED16 | MPG123_ENC_ULAW_8 (or 0 for no support). Please note that some encodings may not be supported in the library build and thus will be ignored here. - * \return MPG123_OK on success, MPG123_ERR if there was an error. */ -MPG123_EXPORT int mpg123_format( mpg123_handle *mh -, long rate, int channels, int encodings ); - -/** Set the audio format support of a mpg123_handle in detail: - * \param mh handle - * \param rate The sample rate value (in Hertz). Special value 0 means - * all rates (the reason for this variant of mpg123_format()). - * \param channels A combination of MPG123_STEREO and MPG123_MONO. - * \param encodings A combination of accepted encodings for rate and channels, - * p.ex MPG123_ENC_SIGNED16 | MPG123_ENC_ULAW_8 (or 0 for no support). - * Please note that some encodings may not be supported in the library build - * and thus will be ignored here. - * \return MPG123_OK on success, MPG123_ERR if there was an error. */ -MPG123_EXPORT int mpg123_format2( mpg123_handle *mh -, long rate, int channels, int encodings ); - -/** Check to see if a specific format at a specific rate is supported - * by mpg123_handle. - * \param mh handle - * \param rate sampling rate - * \param encoding encoding - * \return 0 for no support (that includes invalid parameters), MPG123_STEREO, - * MPG123_MONO or MPG123_STEREO|MPG123_MONO. */ -MPG123_EXPORT int mpg123_format_support( mpg123_handle *mh -, long rate, int encoding ); - -/** Get the current output format written to the addresses given. - * If the stream is freshly loaded, this will try to parse enough - * of it to give you the format to come. This clears the flag that - * would otherwise make the first decoding call return - * MPG123_NEW_FORMAT. - * \param mh handle - * \param rate sampling rate return address - * \param channels channel count return address - * \param encoding encoding return address - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_getformat( mpg123_handle *mh -, long *rate, int *channels, int *encoding ); - -/** Get the current output format written to the addresses given. - * This differs from plain mpg123_getformat() in that you can choose - * _not_ to clear the flag that would trigger the next decoding call - * to return MPG123_NEW_FORMAT in case of a new format arriving. - * \param mh handle - * \param rate sampling rate return address - * \param channels channel count return address - * \param encoding encoding return address - * \param clear_flag if true, clear internal format flag - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_getformat2( mpg123_handle *mh -, long *rate, int *channels, int *encoding, int clear_flag ); - -/*@}*/ - - -/** \defgroup mpg123_input mpg123 file input and decoding - * - * Functions for input bitstream and decoding operations. - * Decoding/seek functions may also return message codes MPG123_DONE, MPG123_NEW_FORMAT and MPG123_NEED_MORE (please read up on these on how to react!). - * @{ - */ - -/** Open a simple MPEG file with fixed properties. - * - * This function shall simplify the common use case of a plain MPEG - * file on disk that you want to decode, with one fixed sample - * rate and channel count, and usually a length defined by a Lame/Info/Xing - * tag. It will: - * - * - set the MPG123_NO_FRANKENSTEIN flag - * - set up format support according to given parameters, - * - open the file, - * - query audio format, - * - fix the audio format support table to ensure the format stays the same, - * - call mpg123_scan() if there is no header frame to tell the track length. - * - * From that on, you can call mpg123_getformat() for querying the sample - * rate (and channel count in case you allowed both) and mpg123_length() - * to get a pretty safe number for the duration. - * Only the sample rate is left open as that indeed is a fixed property of - * MPEG files. You could set MPG123_FORCE_RATE beforehand, but that may trigger - * low-quality resampling in the decoder, only do so if in dire need. - * The library will convert mono files to stereo for you, and vice versa. - * If any constraint cannot be satisified (most likely because of a non-default - * build of libmpg123), you get MPG123_ERR returned and can query the detailed - * cause from the handle. Only on MPG123_OK there will an open file that you - * then close using mpg123_close(), or implicitly on mpg123_delete() or the next - * call to open another file. - * - * So, for your usual CD rip collection, you could use - * - * mpg123_open_fixed(mh, path, MPG123_STEREO, MPG123_ENC_SIGNED_16) - * - * and be happy calling mpg123_getformat() to verify 44100 Hz rate, then just - * playing away with mpg123_read(). The occasional mono file, or MP2 file, - * will also be decoded without you really noticing. Just the speed could be - * wrong if you do not care about sample rate at all. - * \param mh handle - * \param path filesystem path - * \param channels allowed channel count, either 1 (MPG123_MONO) or - * 2 (MPG123_STEREO), or bitwise or of them, but then you're halfway back to - * calling mpg123_format() again;-) - * \param encoding a definite encoding from enum mpg123_enc_enum - * or a bitmask like for mpg123_format(), defeating the purpose somewhat - */ -MPG123_EXPORT int mpg123_open_fixed(mpg123_handle *mh, const char *path -, int channels, int encoding); - -/** Open and prepare to decode the specified file by filesystem path. - * This does not open HTTP urls; libmpg123 contains no networking code. - * If you want to decode internet streams, use mpg123_open_fd() or mpg123_open_feed(). - * \param mh handle - * \param path filesystem path - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_open(mpg123_handle *mh, const char *path); - -/** Use an already opened file descriptor as the bitstream input - * mpg123_close() will _not_ close the file descriptor. - * \param mh handle - * \param fd file descriptor - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_open_fd(mpg123_handle *mh, int fd); - -/** Use an opaque handle as bitstream input. This works only with the - * replaced I/O from mpg123_replace_reader_handle()! - * mpg123_close() will call the cleanup callback for your handle (if you gave one). - * \param mh handle - * \param iohandle your handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_open_handle(mpg123_handle *mh, void *iohandle); - -/** Open a new bitstream and prepare for direct feeding - * This works together with mpg123_decode(); you are responsible for reading and feeding the input bitstream. - * Also, you are expected to handle ICY metadata extraction yourself. This - * input method does not handle MPG123_ICY_INTERVAL. It does parse ID3 frames, though. - * \param mh handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_open_feed(mpg123_handle *mh); - -/** Closes the source, if libmpg123 opened it. - * \param mh handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_close(mpg123_handle *mh); - -/** Read from stream and decode up to outmemsize bytes. - * - * Note: The type of outmemory changed to a void pointer in mpg123 1.26.0 - * (API version 45). - * - * \param mh handle - * \param outmemory address of output buffer to write to - * \param outmemsize maximum number of bytes to write - * \param done address to store the number of actually decoded bytes to - * \return MPG123_OK or error/message code - */ -MPG123_EXPORT int mpg123_read(mpg123_handle *mh -, void *outmemory, size_t outmemsize, size_t *done ); - -/** Feed data for a stream that has been opened with mpg123_open_feed(). - * It's give and take: You provide the bytestream, mpg123 gives you the decoded samples. - * \param mh handle - * \param in input buffer - * \param size number of input bytes - * \return MPG123_OK or error/message code. - */ -MPG123_EXPORT int mpg123_feed( mpg123_handle *mh -, const unsigned char *in, size_t size ); - -/** Decode MPEG Audio from inmemory to outmemory. - * This is very close to a drop-in replacement for old mpglib. - * When you give zero-sized output buffer the input will be parsed until - * decoded data is available. This enables you to get MPG123_NEW_FORMAT (and query it) - * without taking decoded data. - * Think of this function being the union of mpg123_read() and mpg123_feed() (which it actually is, sort of;-). - * You can actually always decide if you want those specialized functions in separate steps or one call this one here. - * - * Note: The type of outmemory changed to a void pointer in mpg123 1.26.0 - * (API version 45). - * - * \param mh handle - * \param inmemory input buffer - * \param inmemsize number of input bytes - * \param outmemory output buffer - * \param outmemsize maximum number of output bytes - * \param done address to store the number of actually decoded bytes to - * \return error/message code (watch out especially for MPG123_NEED_MORE) - */ -MPG123_EXPORT int mpg123_decode( mpg123_handle *mh -, const unsigned char *inmemory, size_t inmemsize -, void *outmemory, size_t outmemsize, size_t *done ); - -/** Decode next MPEG frame to internal buffer - * or read a frame and return after setting a new format. - * \param mh handle - * \param num current frame offset gets stored there - * \param audio This pointer is set to the internal buffer to read the decoded audio from. - * \param bytes number of output bytes ready in the buffer - * \return MPG123_OK or error/message code - */ -MPG123_EXPORT int mpg123_decode_frame( mpg123_handle *mh -, off_t *num, unsigned char **audio, size_t *bytes ); - -/** Decode current MPEG frame to internal buffer. - * Warning: This is experimental API that might change in future releases! - * Please watch mpg123 development closely when using it. - * \param mh handle - * \param num last frame offset gets stored there - * \param audio this pointer is set to the internal buffer to read the decoded audio from. - * \param bytes number of output bytes ready in the buffer - * \return MPG123_OK or error/message code - */ -MPG123_EXPORT int mpg123_framebyframe_decode( mpg123_handle *mh -, off_t *num, unsigned char **audio, size_t *bytes ); - -/** Find, read and parse the next mp3 frame - * Warning: This is experimental API that might change in future releases! - * Please watch mpg123 development closely when using it. - * \param mh handle - * \return MPG123_OK or error/message code - */ -MPG123_EXPORT int mpg123_framebyframe_next(mpg123_handle *mh); - -/** Get access to the raw input data for the last parsed frame. - * This gives you a direct look (and write access) to the frame body data. - * Together with the raw header, you can reconstruct the whole raw MPEG stream without junk and meta data, or play games by actually modifying the frame body data before decoding this frame (mpg123_framebyframe_decode()). - * A more sane use would be to use this for CRC checking (see mpg123_info() and MPG123_CRC), the first two bytes of the body make up the CRC16 checksum, if present. - * You can provide NULL for a parameter pointer when you are not interested in the value. - * - * \param mh handle - * \param header the 4-byte MPEG header - * \param bodydata pointer to the frame body stored in the handle (without the header) - * \param bodybytes size of frame body in bytes (without the header) - * \return MPG123_OK if there was a yet un-decoded frame to get the - * data from, MPG123_BAD_HANDLE or MPG123_ERR otherwise (without further - * explanation, the error state of the mpg123_handle is not modified by - * this function). - */ -MPG123_EXPORT int mpg123_framedata( mpg123_handle *mh -, unsigned long *header, unsigned char **bodydata, size_t *bodybytes ); - -/** Get the input position (byte offset in stream) of the last parsed frame. - * This can be used for external seek index building, for example. - * It just returns the internally stored offset, regardless of validity -- - * you ensure that a valid frame has been parsed before! - * \param mh handle - * \return byte offset in stream - */ -MPG123_EXPORT off_t mpg123_framepos(mpg123_handle *mh); - -/*@}*/ - - -/** \defgroup mpg123_seek mpg123 position and seeking - * - * Functions querying and manipulating position in the decoded audio bitstream. - * The position is measured in decoded audio samples, or MPEG frame offset for the specific functions. - * If gapless code is in effect, the positions are adjusted to compensate the skipped padding/delay - meaning, you should not care about that at all and just use the position defined for the samples you get out of the decoder;-) - * The general usage is modelled after stdlib's ftell() and fseek(). - * Especially, the whence parameter for the seek functions has the same meaning as the one for fseek() and needs the same constants from stdlib.h: - * - SEEK_SET: set position to (or near to) specified offset - * - SEEK_CUR: change position by offset from now - * - SEEK_END: set position to offset from end - * - * Note that sample-accurate seek only works when gapless support has been enabled at compile time; seek is frame-accurate otherwise. - * Also, really sample-accurate seeking (meaning that you get the identical sample value after seeking compared to plain decoding up to the position) is only guaranteed when you do not mess with the position code by using MPG123_UPSPEED, MPG123_DOWNSPEED or MPG123_START_FRAME. The first two mainly should cause trouble with NtoM resampling, but in any case with these options in effect, you have to keep in mind that the sample offset is not the same as counting the samples you get from decoding since mpg123 counts the skipped samples, too (or the samples played twice only once)! - * Short: When you care about the sample position, don't mess with those parameters;-) - * Also, seeking is not guaranteed to work for all streams (underlying stream may not support it). - * And yet another caveat: If the stream is concatenated out of differing pieces (Frankenstein stream), seeking may suffer, too. - * - * @{ - */ - -/** Returns the current position in samples. - * On the next successful read, you'd get that sample. - * \param mh handle - * \return sample offset or MPG123_ERR (null handle) - */ -MPG123_EXPORT off_t mpg123_tell(mpg123_handle *mh); - -/** Returns the frame number that the next read will give you data from. - * \param mh handle - * \return frame offset or MPG123_ERR (null handle) - */ -MPG123_EXPORT off_t mpg123_tellframe(mpg123_handle *mh); - -/** Returns the current byte offset in the input stream. - * \param mh handle - * \return byte offset or MPG123_ERR (null handle) - */ -MPG123_EXPORT off_t mpg123_tell_stream(mpg123_handle *mh); - -/** Seek to a desired sample offset. - * Usage is modelled afer the standard lseek(). - * \param mh handle - * \param sampleoff offset in PCM samples - * \param whence one of SEEK_SET, SEEK_CUR or SEEK_END - * \return The resulting offset >= 0 or error/message code - */ -MPG123_EXPORT off_t mpg123_seek( mpg123_handle *mh -, off_t sampleoff, int whence ); - -/** Seek to a desired sample offset in data feeding mode. - * This just prepares things to be right only if you ensure that the next chunk of input data will be from input_offset byte position. - * \param mh handle - * \param sampleoff offset in PCM samples - * \param whence one of SEEK_SET, SEEK_CUR or SEEK_END - * \param input_offset The position it expects to be at the - * next time data is fed to mpg123_decode(). - * \return The resulting offset >= 0 or error/message code */ -MPG123_EXPORT off_t mpg123_feedseek( mpg123_handle *mh -, off_t sampleoff, int whence, off_t *input_offset ); - -/** Seek to a desired MPEG frame offset. - * Usage is modelled afer the standard lseek(). - * \param mh handle - * \param frameoff offset in MPEG frames - * \param whence one of SEEK_SET, SEEK_CUR or SEEK_END - * \return The resulting offset >= 0 or error/message code */ -MPG123_EXPORT off_t mpg123_seek_frame( mpg123_handle *mh -, off_t frameoff, int whence ); - -/** Return a MPEG frame offset corresponding to an offset in seconds. - * This assumes that the samples per frame do not change in the file/stream, which is a good assumption for any sane file/stream only. - * \return frame offset >= 0 or error/message code */ -MPG123_EXPORT off_t mpg123_timeframe(mpg123_handle *mh, double sec); - -/** Give access to the frame index table that is managed for seeking. - * You are asked not to modify the values... Use mpg123_set_index to set the - * seek index - * \param mh handle - * \param offsets pointer to the index array - * \param step one index byte offset advances this many MPEG frames - * \param fill number of recorded index offsets; size of the array - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_index( mpg123_handle *mh -, off_t **offsets, off_t *step, size_t *fill ); - -/** Set the frame index table - * Setting offsets to NULL and fill > 0 will allocate fill entries. Setting offsets - * to NULL and fill to 0 will clear the index and free the allocated memory used by the index. - * \param mh handle - * \param offsets pointer to the index array - * \param step one index byte offset advances this many MPEG frames - * \param fill number of recorded index offsets; size of the array - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_set_index( mpg123_handle *mh -, off_t *offsets, off_t step, size_t fill ); - -/** An old crutch to keep old mpg123 binaries happy. - * WARNING: This function is there only to avoid runtime linking errors with - * standalone mpg123 before version 1.23.0 (if you strangely update the - * library but not the end-user program) and actually is broken - * for various cases (p.ex. 24 bit output). Do never use. It might eventually - * be purged from the library. - */ -MPG123_EXPORT int mpg123_position( mpg123_handle *mh, off_t frame_offset, off_t buffered_bytes, off_t *current_frame, off_t *frames_left, double *current_seconds, double *seconds_left); - -/*@}*/ - - -/** \defgroup mpg123_voleq mpg123 volume and equalizer - * - * @{ - */ - -/** another channel enumeration, for left/right choice */ -enum mpg123_channels -{ - MPG123_LEFT=0x1 /**< The Left Channel. */ - ,MPG123_RIGHT=0x2 /**< The Right Channel. */ - ,MPG123_LR=0x3 /**< Both left and right channel; same as MPG123_LEFT|MPG123_RIGHT */ -}; - -/** Set the 32 Band Audio Equalizer settings. - * \param mh handle - * \param channel Can be MPG123_LEFT, MPG123_RIGHT or MPG123_LEFT|MPG123_RIGHT for both. - * \param band The equaliser band to change (from 0 to 31) - * \param val The (linear) adjustment factor. - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_eq( mpg123_handle *mh -, enum mpg123_channels channel, int band, double val ); - -/** Get the 32 Band Audio Equalizer settings. - * \param mh handle - * \param channel Can be MPG123_LEFT, MPG123_RIGHT or MPG123_LEFT|MPG123_RIGHT for (arithmetic mean of) both. - * \param band The equaliser band to change (from 0 to 31) - * \return The (linear) adjustment factor (zero for pad parameters) */ -MPG123_EXPORT double mpg123_geteq(mpg123_handle *mh - , enum mpg123_channels channel, int band); - -/** Reset the 32 Band Audio Equalizer settings to flat - * \param mh handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_reset_eq(mpg123_handle *mh); - -/** Set the absolute output volume including the RVA setting, - * vol<0 just applies (a possibly changed) RVA setting. - * \param mh handle - * \param vol volume value (linear factor) - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_volume(mpg123_handle *mh, double vol); - -/** Adjust output volume including the RVA setting by chosen amount - * \param mh handle - * \param change volume value (linear factor increment) - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_volume_change(mpg123_handle *mh, double change); - -/** Return current volume setting, the actual value due to RVA, and the RVA - * adjustment itself. It's all as double float value to abstract the sample - * format. The volume values are linear factors / amplitudes (not percent) - * and the RVA value is in decibels. - * \param mh handle - * \param base return address for base volume (linear factor) - * \param really return address for actual volume (linear factor) - * \param rva_db return address for RVA value (decibels) - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_getvolume(mpg123_handle *mh, double *base, double *really, double *rva_db); - -/* TODO: Set some preamp in addition / to replace internal RVA handling? */ - -/*@}*/ - - -/** \defgroup mpg123_status mpg123 status and information - * - * @{ - */ - -/** Enumeration of the mode types of Variable Bitrate */ -enum mpg123_vbr { - MPG123_CBR=0, /**< Constant Bitrate Mode (default) */ - MPG123_VBR, /**< Variable Bitrate Mode */ - MPG123_ABR /**< Average Bitrate Mode */ -}; - -/** Enumeration of the MPEG Versions */ -enum mpg123_version { - MPG123_1_0=0, /**< MPEG Version 1.0 */ - MPG123_2_0, /**< MPEG Version 2.0 */ - MPG123_2_5 /**< MPEG Version 2.5 */ -}; - - -/** Enumeration of the MPEG Audio mode. - * Only the mono mode has 1 channel, the others have 2 channels. */ -enum mpg123_mode { - MPG123_M_STEREO=0, /**< Standard Stereo. */ - MPG123_M_JOINT, /**< Joint Stereo. */ - MPG123_M_DUAL, /**< Dual Channel. */ - MPG123_M_MONO /**< Single Channel. */ -}; - - -/** Enumeration of the MPEG Audio flag bits */ -enum mpg123_flags { - MPG123_CRC=0x1, /**< The bitstream is error protected using 16-bit CRC. */ - MPG123_COPYRIGHT=0x2, /**< The bitstream is copyrighted. */ - MPG123_PRIVATE=0x4, /**< The private bit has been set. */ - MPG123_ORIGINAL=0x8 /**< The bitstream is an original, not a copy. */ -}; - -/** Data structure for storing information about a frame of MPEG Audio */ -struct mpg123_frameinfo -{ - enum mpg123_version version; /**< The MPEG version (1.0/2.0/2.5). */ - int layer; /**< The MPEG Audio Layer (MP1/MP2/MP3). */ - long rate; /**< The sampling rate in Hz. */ - enum mpg123_mode mode; /**< The audio mode (Mono, Stereo, Joint-stero, Dual Channel). */ - int mode_ext; /**< The mode extension bit flag. */ - int framesize; /**< The size of the frame (in bytes, including header). */ - enum mpg123_flags flags; /**< MPEG Audio flag bits. Just now I realize that it should be declared as int, not enum. It's a bitwise combination of the enum values. */ - int emphasis; /**< The emphasis type. */ - int bitrate; /**< Bitrate of the frame (kbps). */ - int abr_rate; /**< The target average bitrate. */ - enum mpg123_vbr vbr; /**< The VBR mode. */ -}; - -/** Data structure for even more detailed information out of the decoder, - * for MPEG layer III only. - * This was added to support the frame analyzer by the Lame project and - * just follows what was used there before. You know what the fields mean - * if you want use this structure. */ -struct mpg123_moreinfo -{ - double xr[2][2][576]; - double sfb[2][2][22]; /* [2][2][SBMAX_l] */ - double sfb_s[2][2][3*13]; /* [2][2][3*SBMAX_s] */ - int qss[2][2]; - int big_values[2][2]; - int sub_gain[2][2][3]; - int scalefac_scale[2][2]; - int preflag[2][2]; - int blocktype[2][2]; - int mixed[2][2]; - int mainbits[2][2]; - int sfbits[2][2]; - int scfsi[2]; - int maindata; - int padding; -}; - -/** Get frame information about the MPEG audio bitstream and store it in a mpg123_frameinfo structure. - * \param mh handle - * \param mi address of existing frameinfo structure to write to - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_info(mpg123_handle *mh, struct mpg123_frameinfo *mi); - -/** Trigger collection of additional decoder information while decoding. - * \param mh handle - * \param mi pointer to data storage (NULL to disable collection) - * \return MPG123_OK if the collection was enabled/disabled as desired, MPG123_ERR - * otherwise (e.g. if the feature is disabled) - */ -MPG123_EXPORT int mpg123_set_moreinfo( mpg123_handle *mh -, struct mpg123_moreinfo *mi ); - -/** Get the safe output buffer size for all cases - * (when you want to replace the internal buffer) - * \return safe buffer size - */ -MPG123_EXPORT size_t mpg123_safe_buffer(void); - -/** Make a full parsing scan of each frame in the file. ID3 tags are found. An - * accurate length value is stored. Seek index will be filled. A seek back to - * current position is performed. At all, this function refuses work when - * stream is not seekable. - * \param mh handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_scan(mpg123_handle *mh); - -/** Return, if possible, the full (expected) length of current track in - * MPEG frames. - * \param mh handle - * \return length >= 0 or MPG123_ERR if there is no length guess possible. - */ -MPG123_EXPORT off_t mpg123_framelength(mpg123_handle *mh); - -/** Return, if possible, the full (expected) length of current - * track in samples (PCM frames). - * - * This relies either on an Info frame at the beginning or a previous - * call to mpg123_scan() to get the real number of MPEG frames in a - * file. It will guess based on file size if neither Info frame nor - * scan data are present. In any case, there is no guarantee that the - * decoder will not give you more data, for example in case the open - * file gets appended to during decoding. - * \param mh handle - * \return length >= 0 or MPG123_ERR if there is no length guess possible. - */ -MPG123_EXPORT off_t mpg123_length(mpg123_handle *mh); - -/** Override the value for file size in bytes. - * Useful for getting sensible track length values in feed mode or for HTTP streams. - * \param mh handle - * \param size file size in bytes - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_set_filesize(mpg123_handle *mh, off_t size); - -/** Get MPEG frame duration in seconds. - * \param mh handle - * \return frame duration in seconds, <0 on error - */ -MPG123_EXPORT double mpg123_tpf(mpg123_handle *mh); - -/** Get MPEG frame duration in samples. - * \param mh handle - * \return samples per frame for the most recently parsed frame; <0 on errors - */ -MPG123_EXPORT int mpg123_spf(mpg123_handle *mh); - -/** Get and reset the clip count. - * \param mh handle - * \return count of clipped samples - */ -MPG123_EXPORT long mpg123_clip(mpg123_handle *mh); - - -/** The key values for state information from mpg123_getstate(). */ -enum mpg123_state -{ - MPG123_ACCURATE = 1 /**< Query if positons are currently accurate (integer value, 0 if false, 1 if true). */ - ,MPG123_BUFFERFILL /**< Get fill of internal (feed) input buffer as integer byte count returned as long and as double. An error is returned on integer overflow while converting to (signed) long, but the returned floating point value shold still be fine. */ - ,MPG123_FRANKENSTEIN /**< Stream consists of carelessly stitched together files. Seeking may yield unexpected results (also with MPG123_ACCURATE, it may be confused). */ - ,MPG123_FRESH_DECODER /**< Decoder structure has been updated, possibly indicating changed stream (integer value, 0 if false, 1 if true). Flag is cleared after retrieval. */ - ,MPG123_ENC_DELAY /** Encoder delay read from Info tag (layer III, -1 if unknown). */ - ,MPG123_ENC_PADDING /** Encoder padding read from Info tag (layer III, -1 if unknown). */ - ,MPG123_DEC_DELAY /** Decoder delay (for layer III only, -1 otherwise). */ -}; - -/** Get various current decoder/stream state information. - * \param mh handle - * \param key the key to identify the information to give. - * \param val the address to return (long) integer values to - * \param fval the address to return floating point values to - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_getstate( mpg123_handle *mh -, enum mpg123_state key, long *val, double *fval ); - -/*@}*/ - - -/** \defgroup mpg123_metadata mpg123 metadata handling - * - * Functions to retrieve the metadata from MPEG Audio files and streams. - * Also includes string handling functions. - * - * @{ - */ - -/** Data structure for storing strings in a safer way than a standard C-String. - * Can also hold a number of null-terminated strings. */ -typedef struct -{ - char* p; /**< pointer to the string data */ - size_t size; /**< raw number of bytes allocated */ - size_t fill; /**< number of used bytes (including closing zero byte) */ -} mpg123_string; - -/** Allocate and intialize a new string. - * \param val optional initial string value (can be NULL) - */ -MPG123_EXPORT mpg123_string* mpg123_new_string(const char* val); - -/** Free memory of contents and the string structure itself. - * \param sb string handle - */ -MPG123_EXPORT void mpg123_delete_string(mpg123_string* sb); - -/** Initialize an existing mpg123_string structure to {NULL, 0, 0}. - * If you hand in a NULL pointer here, your program should crash. The other - * string functions are more forgiving, but this one here is too basic. - * \param sb string handle (address of existing structure on your side) - */ -MPG123_EXPORT void mpg123_init_string(mpg123_string* sb); - -/** Free-up memory of the contents of an mpg123_string (not the struct itself). - * This also calls mpg123_init_string() and hence is safe to be called - * repeatedly. - * \param sb string handle - */ -MPG123_EXPORT void mpg123_free_string(mpg123_string* sb); - -/** Change the size of a mpg123_string - * \param sb string handle - * \param news new size in bytes - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_resize_string(mpg123_string* sb, size_t news); - -/** Increase size of a mpg123_string if necessary (it may stay larger). - * Note that the functions for adding and setting in current libmpg123 - * use this instead of mpg123_resize_string(). - * That way, you can preallocate memory and safely work afterwards with - * pieces. - * \param sb string handle - * \param news new minimum size - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_grow_string(mpg123_string* sb, size_t news); - -/** Copy the contents of one mpg123_string string to another. - * Yes the order of arguments is reversed compated to memcpy(). - * \param from string handle - * \param to string handle - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_copy_string(mpg123_string* from, mpg123_string* to); - -/** Move the contents of one mpg123_string string to another. - * This frees any memory associated with the target and moves over the - * pointers from the source, leaving the source without content after - * that. The only possible error is that you hand in NULL pointers. - * If you handed in a valid source, its contents will be gone, even if - * there was no target to move to. If you hand in a valid target, its - * original contents will also always be gone, to be replaced with the - * source's contents if there was some. - * \param from source string handle - * \param to target string handle - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_move_string(mpg123_string* from, mpg123_string* to); - -/** Append a C-String to an mpg123_string - * \param sb string handle - * \param stuff to append - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_add_string(mpg123_string* sb, const char* stuff); - -/** Append a C-substring to an mpg123 string - * \param sb string handle - * \param stuff content to copy - * \param from offset to copy from - * \param count number of characters to copy (a null-byte is always appended) - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_add_substring( mpg123_string *sb -, const char *stuff, size_t from, size_t count ); - -/** Set the content of a mpg123_string to a C-string - * \param sb string handle - * \param stuff content to copy - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_set_string(mpg123_string* sb, const char* stuff); - -/** Set the content of a mpg123_string to a C-substring - * \param sb string handle - * \param stuff the future content - * \param from offset to copy from - * \param count number of characters to copy (a null-byte is always appended) - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_set_substring( mpg123_string *sb -, const char *stuff, size_t from, size_t count ); - -/** Count characters in a mpg123 string (non-null bytes or Unicode points). - * This function is of limited use, as it does just count code points - * encoded in an UTF-8 string, only loosely related to the count of visible - * characters. Get your full Unicode handling support elsewhere. - * \param sb string handle - * \param utf8 a flag to tell if the string is in utf8 encoding - * \return character count -*/ -MPG123_EXPORT size_t mpg123_strlen(mpg123_string *sb, int utf8); - -/** Remove trailing \\r and \\n, if present. - * \param sb string handle - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_chomp_string(mpg123_string *sb); - -/** Determine if two strings contain the same data. - * This only returns 1 if both given handles are non-NULL and - * if they are filled with the same bytes. - * \param a first string handle - * \param b second string handle - * \return 0 for different strings, 1 for identical - */ -MPG123_EXPORT int mpg123_same_string(mpg123_string *a, mpg123_string *b); - -/** The mpg123 text encodings. This contains encodings we encounter in ID3 tags or ICY meta info. */ -enum mpg123_text_encoding -{ - mpg123_text_unknown = 0 /**< Unkown encoding... mpg123_id3_encoding can return that on invalid codes. */ - ,mpg123_text_utf8 = 1 /**< UTF-8 */ - ,mpg123_text_latin1 = 2 /**< ISO-8859-1. Note that sometimes latin1 in ID3 is abused for totally different encodings. */ - ,mpg123_text_icy = 3 /**< ICY metadata encoding, usually CP-1252 but we take it as UTF-8 if it qualifies as such. */ - ,mpg123_text_cp1252 = 4 /**< Really CP-1252 without any guessing. */ - ,mpg123_text_utf16 = 5 /**< Some UTF-16 encoding. The last of a set of leading BOMs (byte order mark) rules. - * When there is no BOM, big endian ordering is used. Note that UCS-2 qualifies as UTF-8 when - * you don't mess with the reserved code points. If you want to decode little endian data - * without BOM you need to prepend 0xff 0xfe yourself. */ - ,mpg123_text_utf16bom = 6 /**< Just an alias for UTF-16, ID3v2 has this as distinct code. */ - ,mpg123_text_utf16be = 7 /**< Another alias for UTF16 from ID3v2. Note, that, because of the mess that is reality, - * BOMs are used if encountered. There really is not much distinction between the UTF16 types for mpg123 - * One exception: Since this is seen in ID3v2 tags, leading null bytes are skipped for all other UTF16 - * types (we expect a BOM before real data there), not so for utf16be!*/ - ,mpg123_text_max = 7 /**< Placeholder for the maximum encoding value. */ -}; - -/** The encoding byte values from ID3v2. */ -enum mpg123_id3_enc -{ - mpg123_id3_latin1 = 0 /**< Note: This sometimes can mean anything in practice... */ - ,mpg123_id3_utf16bom = 1 /**< UTF16, UCS-2 ... it's all the same for practical purposes. */ - ,mpg123_id3_utf16be = 2 /**< Big-endian UTF-16, BOM see note for mpg123_text_utf16be. */ - ,mpg123_id3_utf8 = 3 /**< Our lovely overly ASCII-compatible 8 byte encoding for the world. */ - ,mpg123_id3_enc_max = 3 /**< Placeholder to check valid range of encoding byte. */ -}; - -/** Convert ID3 encoding byte to mpg123 encoding index. - * \param id3_enc_byte the ID3 encoding code - * \return the mpg123 encoding index - */ - -MPG123_EXPORT enum mpg123_text_encoding mpg123_enc_from_id3(unsigned char id3_enc_byte); - -/** Store text data in string, after converting to UTF-8 from indicated encoding - * A prominent error can be that you provided an unknown encoding value, or this build of libmpg123 lacks support for certain encodings (ID3 or ICY stuff missing). - * Also, you might want to take a bit of care with preparing the data; for example, strip leading zeroes (I have seen that). - * \param sb target string - * \param enc mpg123 text encoding value - * \param source source buffer with plain unsigned bytes (you might need to cast from signed char) - * \param source_size number of bytes in the source buffer - * \return 0 on error, 1 on success (on error, mpg123_free_string is called on sb) - */ -MPG123_EXPORT int mpg123_store_utf8(mpg123_string *sb, enum mpg123_text_encoding enc, const unsigned char *source, size_t source_size); - -/** Sub data structure for ID3v2, for storing various text fields (including comments). - * This is for ID3v2 COMM, TXXX and all the other text fields. - * Only COMM, TXXX and USLT may have a description, only COMM and USLT - * have a language. - * You should consult the ID3v2 specification for the use of the various text fields - * ("frames" in ID3v2 documentation, I use "fields" here to separate from MPEG frames). */ -typedef struct -{ - char lang[3]; /**< Three-letter language code (not terminated). */ - char id[4]; /**< The ID3v2 text field id, like TALB, TPE2, ... (4 characters, no string termination). */ - mpg123_string description; /**< Empty for the generic comment... */ - mpg123_string text; /**< ... */ -} mpg123_text; - -/** The picture type values from ID3v2. */ -enum mpg123_id3_pic_type -{ - mpg123_id3_pic_other = 0 /**< see ID3v2 docs */ - ,mpg123_id3_pic_icon = 1 /**< see ID3v2 docs */ - ,mpg123_id3_pic_other_icon = 2 /**< see ID3v2 docs */ - ,mpg123_id3_pic_front_cover = 3 /**< see ID3v2 docs */ - ,mpg123_id3_pic_back_cover = 4 /**< see ID3v2 docs */ - ,mpg123_id3_pic_leaflet = 5 /**< see ID3v2 docs */ - ,mpg123_id3_pic_media = 6 /**< see ID3v2 docs */ - ,mpg123_id3_pic_lead = 7 /**< see ID3v2 docs */ - ,mpg123_id3_pic_artist = 8 /**< see ID3v2 docs */ - ,mpg123_id3_pic_conductor = 9 /**< see ID3v2 docs */ - ,mpg123_id3_pic_orchestra = 10 /**< see ID3v2 docs */ - ,mpg123_id3_pic_composer = 11 /**< see ID3v2 docs */ - ,mpg123_id3_pic_lyricist = 12 /**< see ID3v2 docs */ - ,mpg123_id3_pic_location = 13 /**< see ID3v2 docs */ - ,mpg123_id3_pic_recording = 14 /**< see ID3v2 docs */ - ,mpg123_id3_pic_performance = 15 /**< see ID3v2 docs */ - ,mpg123_id3_pic_video = 16 /**< see ID3v2 docs */ - ,mpg123_id3_pic_fish = 17 /**< see ID3v2 docs */ - ,mpg123_id3_pic_illustration = 18 /**< see ID3v2 docs */ - ,mpg123_id3_pic_artist_logo = 19 /**< see ID3v2 docs */ - ,mpg123_id3_pic_publisher_logo = 20 /**< see ID3v2 docs */ -}; - -/** Sub data structure for ID3v2, for storing picture data including comment. - * This is for the ID3v2 APIC field. You should consult the ID3v2 specification - * for the use of the APIC field ("frames" in ID3v2 documentation, I use "fields" - * here to separate from MPEG frames). */ -typedef struct -{ - char type; /**< mpg123_id3_pic_type value */ - mpg123_string description; /**< description string */ - mpg123_string mime_type; /**< MIME type */ - size_t size; /**< size in bytes */ - unsigned char* data; /**< pointer to the image data */ -} mpg123_picture; - -/** Data structure for storing IDV3v2 tags. - * This structure is not a direct binary mapping with the file contents. - * The ID3v2 text frames are allowed to contain multiple strings. - * So check for null bytes until you reach the mpg123_string fill. - * All text is encoded in UTF-8. */ -typedef struct -{ - unsigned char version; /**< 3 or 4 for ID3v2.3 or ID3v2.4. */ - mpg123_string *title; /**< Title string (pointer into text_list). */ - mpg123_string *artist; /**< Artist string (pointer into text_list). */ - mpg123_string *album; /**< Album string (pointer into text_list). */ - mpg123_string *year; /**< The year as a string (pointer into text_list). */ - mpg123_string *genre; /**< Genre String (pointer into text_list). The genre string(s) may very well need postprocessing, esp. for ID3v2.3. */ - mpg123_string *comment; /**< Pointer to last encountered comment text with empty description. */ - /* Encountered ID3v2 fields are appended to these lists. - There can be multiple occurences, the pointers above always point to the last encountered data. */ - mpg123_text *comment_list; /**< Array of comments. */ - size_t comments; /**< Number of comments. */ - mpg123_text *text; /**< Array of ID3v2 text fields (including USLT) */ - size_t texts; /**< Numer of text fields. */ - mpg123_text *extra; /**< The array of extra (TXXX) fields. */ - size_t extras; /**< Number of extra text (TXXX) fields. */ - mpg123_picture *picture; /**< Array of ID3v2 pictures fields (APIC). - Only populated if MPG123_PICTURE flag is set! */ - size_t pictures; /**< Number of picture (APIC) fields. */ -} mpg123_id3v2; - -/** Data structure for ID3v1 tags (the last 128 bytes of a file). - * Don't take anything for granted (like string termination)! - * Also note the change ID3v1.1 did: comment[28] = 0; comment[29] = track_number - * It is your task to support ID3v1 only or ID3v1.1 ...*/ -typedef struct -{ - char tag[3]; /**< Always the string "TAG", the classic intro. */ - char title[30]; /**< Title string. */ - char artist[30]; /**< Artist string. */ - char album[30]; /**< Album string. */ - char year[4]; /**< Year string. */ - char comment[30]; /**< Comment string. */ - unsigned char genre; /**< Genre index. */ -} mpg123_id3v1; - -#define MPG123_ID3 0x3 /**< 0011 There is some ID3 info. Also matches 0010 or NEW_ID3. */ -#define MPG123_NEW_ID3 0x1 /**< 0001 There is ID3 info that changed since last call to mpg123_id3. */ -#define MPG123_ICY 0xc /**< 1100 There is some ICY info. Also matches 0100 or NEW_ICY.*/ -#define MPG123_NEW_ICY 0x4 /**< 0100 There is ICY info that changed since last call to mpg123_icy. */ - -/** Query if there is (new) meta info, be it ID3 or ICY (or something new in future). - * \param mh handle - * \return combination of flags, 0 on error (same as "nothing new") - */ -MPG123_EXPORT int mpg123_meta_check(mpg123_handle *mh); - -/** Clean up meta data storage (ID3v2 and ICY), freeing memory. - * \param mh handle - */ -MPG123_EXPORT void mpg123_meta_free(mpg123_handle *mh); - -/** Point v1 and v2 to existing data structures wich may change on any next read/decode function call. - * v1 and/or v2 can be set to NULL when there is no corresponding data. - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_id3( mpg123_handle *mh -, mpg123_id3v1 **v1, mpg123_id3v2 **v2 ); - -/** Return pointers to and size of stored raw ID3 data if storage has - * been configured with MPG123_RAW_ID3 and stream parsing passed the - * metadata already. Null value with zero size is a possibility! - * The storage can change at any next API call. - * \param v1 address to store pointer to v1 tag - * \param v1_size size of v1 data in bytes - * \param v2 address to store pointer to v2 tag - * \param v2_size size of v2 data in bytes - * \return MPG123_OK or MPG123_ERR. Only on MPG123_OK the output - * values are set. - */ -MPG123_EXPORT int mpg123_id3_raw( mpg123_handle *mh -, unsigned char **v1, size_t *v1_size -, unsigned char **v2, size_t *v2_size ); - -/** Point icy_meta to existing data structure wich may change on any next read/decode function call. - * \param mh handle - * \param icy_meta return address for ICY meta string (set to NULL if nothing there) - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_icy(mpg123_handle *mh, char **icy_meta); - -/** Decode from windows-1252 (the encoding ICY metainfo used) to UTF-8. - * Note that this is very similar to mpg123_store_utf8(&sb, mpg123_text_icy, icy_text, strlen(icy_text+1)) . - * \param icy_text The input data in ICY encoding - * \return pointer to newly allocated buffer with UTF-8 data (You free() it!) */ -MPG123_EXPORT char* mpg123_icy2utf8(const char* icy_text); - - -/* @} */ - - -/** \defgroup mpg123_advpar mpg123 advanced parameter API - * - * Direct access to a parameter set without full handle around it. - * Possible uses: - * - Influence behaviour of library _during_ initialization of handle (MPG123_VERBOSE). - * - Use one set of parameters for multiple handles. - * - * The functions for handling mpg123_pars (mpg123_par() and mpg123_fmt() - * family) directly return a fully qualified mpg123 error code, the ones - * operating on full handles normally MPG123_OK or MPG123_ERR, storing the - * specific error code itseld inside the handle. - * - * @{ - */ - -/** Opaque structure for the libmpg123 decoder parameters. */ -struct mpg123_pars_struct; - -/** Opaque structure for the libmpg123 decoder parameters. */ -typedef struct mpg123_pars_struct mpg123_pars; - -/** Create a handle with preset parameters. - * \param mp parameter handle - * \param decoder decoder choice - * \param error error code return address - * \return mpg123 handle - */ -MPG123_EXPORT mpg123_handle *mpg123_parnew( mpg123_pars *mp -, const char* decoder, int *error ); - -/** Allocate memory for and return a pointer to a new mpg123_pars - * \param error error code return address - * \return new parameter handle - */ -MPG123_EXPORT mpg123_pars *mpg123_new_pars(int *error); - -/** Delete and free up memory used by a mpg123_pars data structure - * \param mp parameter handle - */ -MPG123_EXPORT void mpg123_delete_pars(mpg123_pars* mp); - -/** Configure mpg123 parameters to accept no output format at all, - * use before specifying supported formats with mpg123_format - * \param mp parameter handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_fmt_none(mpg123_pars *mp); - -/** Configure mpg123 parameters to accept all formats - * (also any custom rate you may set) -- this is default. - * \param mp parameter handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_fmt_all(mpg123_pars *mp); - -/** Set the audio format support of a mpg123_pars in detail: - * \param mp parameter handle - * \param rate The sample rate value (in Hertz). - * \param channels A combination of MPG123_STEREO and MPG123_MONO. - * \param encodings A combination of accepted encodings for rate and channels, - * p.ex MPG123_ENC_SIGNED16|MPG123_ENC_ULAW_8 (or 0 for no - * support). - * \return MPG123_OK on success -*/ -MPG123_EXPORT int mpg123_fmt(mpg123_pars *mp -, long rate, int channels, int encodings); - -/** Set the audio format support of a mpg123_pars in detail: - * \param mp parameter handle - * \param rate The sample rate value (in Hertz). Special value 0 means - * all rates (reason for this variant of mpg123_fmt). - * \param channels A combination of MPG123_STEREO and MPG123_MONO. - * \param encodings A combination of accepted encodings for rate and channels, - * p.ex MPG123_ENC_SIGNED16|MPG123_ENC_ULAW_8 (or 0 for no - * support). - * \return MPG123_OK on success -*/ -MPG123_EXPORT int mpg123_fmt2(mpg123_pars *mp -, long rate, int channels, int encodings); - -/** Check to see if a specific format at a specific rate is supported - * by mpg123_pars. - * \param mp parameter handle - * \param rate sampling rate - * \param encoding encoding - * \return 0 for no support (that includes invalid parameters), MPG123_STEREO, - * MPG123_MONO or MPG123_STEREO|MPG123_MONO. */ -MPG123_EXPORT int mpg123_fmt_support(mpg123_pars *mp, long rate, int encoding); - -/** Set a specific parameter, for a specific mpg123_pars, using a parameter - * type key chosen from the mpg123_parms enumeration, to the specified value. - * \param mp parameter handle - * \param type parameter choice - * \param value integer value - * \param fvalue floating point value - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_par( mpg123_pars *mp -, enum mpg123_parms type, long value, double fvalue ); - -/** Get a specific parameter, for a specific mpg123_pars. - * See the mpg123_parms enumeration for a list of available parameters. - * \param mp parameter handle - * \param type parameter choice - * \param value integer value return address - * \param fvalue floating point value return address - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_getpar( mpg123_pars *mp -, enum mpg123_parms type, long *value, double *fvalue); - -/* @} */ - - -/** \defgroup mpg123_lowio mpg123 low level I/O - * You may want to do tricky stuff with I/O that does not work with mpg123's default file access or you want to make it decode into your own pocket... - * - * @{ */ - -/** Replace default internal buffer with user-supplied buffer. - * Instead of working on it's own private buffer, mpg123 will directly use the one you provide for storing decoded audio. - * Note that the required buffer size could be bigger than expected from output - * encoding if libmpg123 has to convert from primary decoder output (p.ex. 32 bit - * storage for 24 bit output). - * - * Note: The type of data changed to a void pointer in mpg123 1.26.0 - * (API version 45). - * - * \param mh handle - * \param data pointer to user buffer - * \param size of buffer in bytes - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_replace_buffer(mpg123_handle *mh -, void *data, size_t size); - -/** The max size of one frame's decoded output with current settings. - * Use that to determine an appropriate minimum buffer size for decoding one frame. - * \param mh handle - * \return maximum decoded data size in bytes - */ -MPG123_EXPORT size_t mpg123_outblock(mpg123_handle *mh); - -/** Replace low-level stream access functions; read and lseek as known in POSIX. - * You can use this to make any fancy file opening/closing yourself, - * using mpg123_open_fd() to set the file descriptor for your read/lseek - * (doesn't need to be a "real" file descriptor...). - * Setting a function to NULL means that the default internal read is - * used (active from next mpg123_open call on). - * Note: As it would be troublesome to mess with this while having a file open, - * this implies mpg123_close(). - * \param mh handle - * \param r_read callback for reading (behaviour like POSIX read) - * \param r_lseek callback for seeking (like POSIX lseek) - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_replace_reader( mpg123_handle *mh -, ssize_t (*r_read) (int, void *, size_t) -, off_t (*r_lseek)(int, off_t, int) -); - -/** Replace I/O functions with your own ones operating on some kind of - * handle instead of integer descriptors. - * The handle is a void pointer, so you can pass any data you want... - * mpg123_open_handle() is the call you make to use the I/O defined here. - * There is no fallback to internal read/seek here. - * Note: As it would be troublesome to mess with this while having a file open, - * this mpg123_close() is implied here. - * \param mh handle - * \param r_read callback for reading (behaviour like POSIX read) - * \param r_lseek callback for seeking (like POSIX lseek) - * \param cleanup A callback to clean up an I/O handle on mpg123_close, - * can be NULL for none (you take care of cleaning your handles). - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_replace_reader_handle( mpg123_handle *mh -, ssize_t (*r_read) (void *, void *, size_t) -, off_t (*r_lseek)(void *, off_t, int) -, void (*cleanup)(void*) ); - -/* @} */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ogg b/ogg deleted file mode 160000 index 1e8d7cce..00000000 --- a/ogg +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 1e8d7cce266df61afc9d35db0283bbacc0237aba diff --git a/opus b/opus deleted file mode 160000 index 8aa77672..00000000 --- a/opus +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8aa7767207b1e3633004c26aecbb67d1c5118485 diff --git a/opusfile b/opusfile deleted file mode 160000 index eb252537..00000000 --- a/opusfile +++ /dev/null @@ -1 +0,0 @@ -Subproject commit eb252537f374e30f7b68b84223c5a2303c05eca2 diff --git a/premake5.lua b/premake5.lua index a84d8ff4..4ebb735c 100644 --- a/premake5.lua +++ b/premake5.lua @@ -2,21 +2,21 @@ newoption { trigger = "glewdir", value = "PATH", description = "Directory of GLEW", - default = "glew-2.1.0" + default = "vendor/glew-2.1.0" } newoption { trigger = "glfwdir64", value = "PATH", description = "Directory of glfw", - default = "glfw-3.3.2.bin.WIN64", + default = "vendor/glfw-3.3.2.bin.WIN64", } newoption { trigger = "glfwdir32", value = "PATH", description = "Directory of glfw", - default = "glfw-3.3.2.bin.WIN32", + default = "vendor/glfw-3.3.2.bin.WIN32", } newoption { @@ -30,9 +30,9 @@ newoption { } if(_OPTIONS["with-librw"]) then - Librw = "librw" + Librw = "vendor/librw" else - Librw = os.getenv("LIBRW") or "librw" + Librw = os.getenv("LIBRW") or "vendor/librw" end function getsys(a) @@ -152,7 +152,7 @@ if(_OPTIONS["with-librw"]) then project "librw" kind "StaticLib" targetname "rw" - targetdir "lib/%{cfg.platform}/%{cfg.buildcfg}" + targetdir(path.join(Librw, "lib/%{cfg.platform}/%{cfg.buildcfg}")) files { path.join(Librw, "src/*.*") } files { path.join(Librw, "src/*/*.*") } @@ -219,9 +219,9 @@ project "re3" includedirs { "src/extras" } if _OPTIONS["with-opus"] then - includedirs { "ogg/include" } - includedirs { "opus/include" } - includedirs { "opusfile/include" } + includedirs { "vendor/ogg/include" } + includedirs { "vendor/opus/include" } + includedirs { "vendor/opusfile/include" } end filter "platforms:*mss" @@ -231,9 +231,9 @@ project "re3" if _OPTIONS["with-opus"] then filter "platforms:win*" - libdirs { "ogg/win32/VS2015/Win32/%{cfg.buildcfg}" } - libdirs { "opus/win32/VS2015/Win32/%{cfg.buildcfg}" } - libdirs { "opusfile/win32/VS2015/Win32/Release-NoHTTP" } + libdirs { "vendor/ogg/win32/VS2015/Win32/%{cfg.buildcfg}" } + libdirs { "vendor/opus/win32/VS2015/Win32/%{cfg.buildcfg}" } + libdirs { "vendor/opusfile/win32/VS2015/Win32/Release-NoHTTP" } filter {} defines { "AUDIO_OPUS" } end @@ -253,21 +253,20 @@ project "re3" characterset ("MBCS") targetextension ".exe" + filter "platforms:win*oal" + includedirs { "vendor/openal-soft/include" } + includedirs { "vendor/libsndfile/include" } + includedirs { "vendor/mpg123/include" } + filter "platforms:win-x86*oal" - includedirs { "openal-soft/include" } - includedirs { "libsndfile.32/include" } - includedirs { "mpg123.32/include" } - libdirs { "mpg123.32/lib" } - libdirs { "libsndfile.32/lib" } - libdirs { "openal-soft/libs/Win32" } + libdirs { "vendor/mpg123/lib/Win32" } + libdirs { "vendor/libsndfile/lib/Win32" } + libdirs { "vendor/openal-soft/libs/Win32" } filter "platforms:win-amd64*oal" - includedirs { "openal-soft/include" } - includedirs { "libsndfile.64/include" } - includedirs { "mpg123.64/include" } - libdirs { "mpg123.64/lib" } - libdirs { "libsndfile.64/lib" } - libdirs { "openal-soft/libs/Win64" } + libdirs { "vendor/mpg123/lib/Win64" } + libdirs { "vendor/libsndfile/lib/Win64" } + libdirs { "vendor/openal-soft/libs/Win64" } filter "platforms:linux*oal" links { "openal", "mpg123", "sndfile", "pthread" } @@ -296,7 +295,7 @@ project "re3" includedirs { "src/fakerw" } includedirs { Librw } if(_OPTIONS["with-librw"]) then - libdirs { "lib/%{cfg.platform}/%{cfg.buildcfg}" } + libdirs { "vendor/librw/lib/%{cfg.platform}/%{cfg.buildcfg}" } end links { "rw" } diff --git a/vendor/librw b/vendor/librw new file mode 160000 index 00000000..5e299fb1 --- /dev/null +++ b/vendor/librw @@ -0,0 +1 @@ +Subproject commit 5e299fb12e0ab85b5a32032544f58480a93a4a32 diff --git a/libsndfile.32/ChangeLog b/vendor/libsndfile/ChangeLog similarity index 100% rename from libsndfile.32/ChangeLog rename to vendor/libsndfile/ChangeLog diff --git a/libsndfile.32/NEWS b/vendor/libsndfile/NEWS similarity index 100% rename from libsndfile.32/NEWS rename to vendor/libsndfile/NEWS diff --git a/libsndfile.32/dist/libsndfile-1.dll b/vendor/libsndfile/dist/Win32/libsndfile-1.dll similarity index 100% rename from libsndfile.32/dist/libsndfile-1.dll rename to vendor/libsndfile/dist/Win32/libsndfile-1.dll diff --git a/libsndfile.64/dist/libsndfile-1.dll b/vendor/libsndfile/dist/Win64/libsndfile-1.dll similarity index 100% rename from libsndfile.64/dist/libsndfile-1.dll rename to vendor/libsndfile/dist/Win64/libsndfile-1.dll diff --git a/libsndfile.32/include/sndfile.h b/vendor/libsndfile/include/sndfile.h similarity index 100% rename from libsndfile.32/include/sndfile.h rename to vendor/libsndfile/include/sndfile.h diff --git a/libsndfile.32/include/sndfile.hh b/vendor/libsndfile/include/sndfile.hh similarity index 100% rename from libsndfile.32/include/sndfile.hh rename to vendor/libsndfile/include/sndfile.hh diff --git a/libsndfile.32/lib/libsndfile-1.def b/vendor/libsndfile/lib/Win32/libsndfile-1.def similarity index 100% rename from libsndfile.32/lib/libsndfile-1.def rename to vendor/libsndfile/lib/Win32/libsndfile-1.def diff --git a/libsndfile.32/lib/libsndfile-1.lib b/vendor/libsndfile/lib/Win32/libsndfile-1.lib similarity index 100% rename from libsndfile.32/lib/libsndfile-1.lib rename to vendor/libsndfile/lib/Win32/libsndfile-1.lib diff --git a/libsndfile.32/lib/pkgconfig/sndfile.pc b/vendor/libsndfile/lib/Win32/pkgconfig/sndfile.pc similarity index 100% rename from libsndfile.32/lib/pkgconfig/sndfile.pc rename to vendor/libsndfile/lib/Win32/pkgconfig/sndfile.pc diff --git a/libsndfile.64/lib/libsndfile-1.def b/vendor/libsndfile/lib/Win64/libsndfile-1.def similarity index 100% rename from libsndfile.64/lib/libsndfile-1.def rename to vendor/libsndfile/lib/Win64/libsndfile-1.def diff --git a/libsndfile.64/lib/libsndfile-1.lib b/vendor/libsndfile/lib/Win64/libsndfile-1.lib similarity index 100% rename from libsndfile.64/lib/libsndfile-1.lib rename to vendor/libsndfile/lib/Win64/libsndfile-1.lib diff --git a/libsndfile.64/lib/pkgconfig/sndfile.pc b/vendor/libsndfile/lib/Win64/pkgconfig/sndfile.pc similarity index 100% rename from libsndfile.64/lib/pkgconfig/sndfile.pc rename to vendor/libsndfile/lib/Win64/pkgconfig/sndfile.pc diff --git a/mpg123.32/dist/libmpg123-0.dll b/vendor/mpg123/dist/Win32/libmpg123-0.dll similarity index 100% rename from mpg123.32/dist/libmpg123-0.dll rename to vendor/mpg123/dist/Win32/libmpg123-0.dll diff --git a/mpg123.64/dist/libmpg123-0.dll b/vendor/mpg123/dist/Win64/libmpg123-0.dll similarity index 100% rename from mpg123.64/dist/libmpg123-0.dll rename to vendor/mpg123/dist/Win64/libmpg123-0.dll diff --git a/mpg123.32/include/fmt123.h b/vendor/mpg123/include/fmt123.h similarity index 100% rename from mpg123.32/include/fmt123.h rename to vendor/mpg123/include/fmt123.h diff --git a/mpg123.32/include/mpg123.h b/vendor/mpg123/include/mpg123.h similarity index 100% rename from mpg123.32/include/mpg123.h rename to vendor/mpg123/include/mpg123.h diff --git a/mpg123.32/lib/libmpg123-0.lib b/vendor/mpg123/lib/Win32/libmpg123-0.lib similarity index 100% rename from mpg123.32/lib/libmpg123-0.lib rename to vendor/mpg123/lib/Win32/libmpg123-0.lib diff --git a/mpg123.64/lib/libmpg123-0.lib b/vendor/mpg123/lib/Win64/libmpg123-0.lib similarity index 100% rename from mpg123.64/lib/libmpg123-0.lib rename to vendor/mpg123/lib/Win64/libmpg123-0.lib diff --git a/vendor/ogg b/vendor/ogg new file mode 160000 index 00000000..684c7377 --- /dev/null +++ b/vendor/ogg @@ -0,0 +1 @@ +Subproject commit 684c73773e7e2683245ffd6aa75f04115b51123a diff --git a/openal-soft/COPYING b/vendor/openal-soft/COPYING similarity index 100% rename from openal-soft/COPYING rename to vendor/openal-soft/COPYING diff --git a/openal-soft/dist/Win32/OpenAL32.dll b/vendor/openal-soft/dist/Win32/OpenAL32.dll similarity index 100% rename from openal-soft/dist/Win32/OpenAL32.dll rename to vendor/openal-soft/dist/Win32/OpenAL32.dll diff --git a/openal-soft/dist/Win64/OpenAL32.dll b/vendor/openal-soft/dist/Win64/OpenAL32.dll similarity index 100% rename from openal-soft/dist/Win64/OpenAL32.dll rename to vendor/openal-soft/dist/Win64/OpenAL32.dll diff --git a/openal-soft/include/AL/al.h b/vendor/openal-soft/include/AL/al.h similarity index 100% rename from openal-soft/include/AL/al.h rename to vendor/openal-soft/include/AL/al.h diff --git a/openal-soft/include/AL/alc.h b/vendor/openal-soft/include/AL/alc.h similarity index 100% rename from openal-soft/include/AL/alc.h rename to vendor/openal-soft/include/AL/alc.h diff --git a/openal-soft/include/AL/alext.h b/vendor/openal-soft/include/AL/alext.h similarity index 100% rename from openal-soft/include/AL/alext.h rename to vendor/openal-soft/include/AL/alext.h diff --git a/openal-soft/include/AL/efx-creative.h b/vendor/openal-soft/include/AL/efx-creative.h similarity index 100% rename from openal-soft/include/AL/efx-creative.h rename to vendor/openal-soft/include/AL/efx-creative.h diff --git a/openal-soft/include/AL/efx-presets.h b/vendor/openal-soft/include/AL/efx-presets.h similarity index 100% rename from openal-soft/include/AL/efx-presets.h rename to vendor/openal-soft/include/AL/efx-presets.h diff --git a/openal-soft/include/AL/efx.h b/vendor/openal-soft/include/AL/efx.h similarity index 100% rename from openal-soft/include/AL/efx.h rename to vendor/openal-soft/include/AL/efx.h diff --git a/openal-soft/libs/Win32/OpenAL32.def b/vendor/openal-soft/libs/Win32/OpenAL32.def similarity index 100% rename from openal-soft/libs/Win32/OpenAL32.def rename to vendor/openal-soft/libs/Win32/OpenAL32.def diff --git a/openal-soft/libs/Win32/OpenAL32.lib b/vendor/openal-soft/libs/Win32/OpenAL32.lib similarity index 100% rename from openal-soft/libs/Win32/OpenAL32.lib rename to vendor/openal-soft/libs/Win32/OpenAL32.lib diff --git a/openal-soft/libs/Win32/libOpenAL32.dll.a b/vendor/openal-soft/libs/Win32/libOpenAL32.dll.a similarity index 100% rename from openal-soft/libs/Win32/libOpenAL32.dll.a rename to vendor/openal-soft/libs/Win32/libOpenAL32.dll.a diff --git a/openal-soft/libs/Win64/OpenAL32.def b/vendor/openal-soft/libs/Win64/OpenAL32.def similarity index 100% rename from openal-soft/libs/Win64/OpenAL32.def rename to vendor/openal-soft/libs/Win64/OpenAL32.def diff --git a/openal-soft/libs/Win64/OpenAL32.lib b/vendor/openal-soft/libs/Win64/OpenAL32.lib similarity index 100% rename from openal-soft/libs/Win64/OpenAL32.lib rename to vendor/openal-soft/libs/Win64/OpenAL32.lib diff --git a/openal-soft/libs/Win64/libOpenAL32.dll.a b/vendor/openal-soft/libs/Win64/libOpenAL32.dll.a similarity index 100% rename from openal-soft/libs/Win64/libOpenAL32.dll.a rename to vendor/openal-soft/libs/Win64/libOpenAL32.dll.a diff --git a/openal-soft/readme.txt b/vendor/openal-soft/readme.txt similarity index 100% rename from openal-soft/readme.txt rename to vendor/openal-soft/readme.txt diff --git a/vendor/opus b/vendor/opus new file mode 160000 index 00000000..6bae366f --- /dev/null +++ b/vendor/opus @@ -0,0 +1 @@ +Subproject commit 6bae366f9fef25191fc812c430e8abd40a13a233 diff --git a/vendor/opusfile b/vendor/opusfile new file mode 160000 index 00000000..6452e838 --- /dev/null +++ b/vendor/opusfile @@ -0,0 +1 @@ +Subproject commit 6452e838e68e8f4fc0b3599523c760ac6276ce89 From 56388472cb5ccfbbd47408b6c54aaa5c82b0d7db Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Fri, 14 Aug 2020 15:25:02 +0300 Subject: [PATCH 051/112] Remove III files --- gamefiles/TEXT/JAPANESE.gxt | Bin 122022 -> 0 bytes gamefiles/TEXT/american.gxt | Bin 218862 -> 0 bytes gamefiles/TEXT/french.gxt | Bin 244494 -> 0 bytes gamefiles/TEXT/german.gxt | Bin 240448 -> 0 bytes gamefiles/TEXT/italian.gxt | Bin 239912 -> 0 bytes gamefiles/TEXT/polish.gxt | Bin 239930 -> 0 bytes gamefiles/TEXT/russian.gxt | Bin 220670 -> 0 bytes gamefiles/TEXT/spanish.gxt | Bin 246088 -> 0 bytes gamefiles/models/fonts_j.txd | Bin 1052072 -> 0 bytes gamefiles/models/fonts_p.txd | Bin 1379752 -> 0 bytes gamefiles/models/fonts_r.txd | Bin 1379752 -> 0 bytes gamefiles/models/menu.txd | Bin 8475176 -> 0 bytes utils/gxt/american.txt | 7979 --------------------------------- utils/gxt/english.txt | 7026 ----------------------------- utils/gxt/french.txt | 8211 ---------------------------------- utils/gxt/german.txt | 8028 --------------------------------- utils/gxt/italian.txt | 8040 --------------------------------- utils/gxt/russian.txt | 7979 --------------------------------- utils/gxt/spanish.txt | 8031 --------------------------------- 19 files changed, 55294 deletions(-) delete mode 100644 gamefiles/TEXT/JAPANESE.gxt delete mode 100644 gamefiles/TEXT/american.gxt delete mode 100644 gamefiles/TEXT/french.gxt delete mode 100644 gamefiles/TEXT/german.gxt delete mode 100644 gamefiles/TEXT/italian.gxt delete mode 100644 gamefiles/TEXT/polish.gxt delete mode 100644 gamefiles/TEXT/russian.gxt delete mode 100644 gamefiles/TEXT/spanish.gxt delete mode 100644 gamefiles/models/fonts_j.txd delete mode 100644 gamefiles/models/fonts_p.txd delete mode 100644 gamefiles/models/fonts_r.txd delete mode 100644 gamefiles/models/menu.txd delete mode 100644 utils/gxt/american.txt delete mode 100644 utils/gxt/english.txt delete mode 100644 utils/gxt/french.txt delete mode 100644 utils/gxt/german.txt delete mode 100644 utils/gxt/italian.txt delete mode 100644 utils/gxt/russian.txt delete mode 100644 utils/gxt/spanish.txt diff --git a/gamefiles/TEXT/JAPANESE.gxt b/gamefiles/TEXT/JAPANESE.gxt deleted file mode 100644 index d4b5438388b4c17680b769fa84ce099d8587bb3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122022 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 GnFIhX1K3vp diff --git a/gamefiles/TEXT/american.gxt b/gamefiles/TEXT/american.gxt deleted file mode 100644 index 6d74c7aac80771fd31ea82bf5af5133058663e22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 218862 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 diff --git a/gamefiles/TEXT/german.gxt b/gamefiles/TEXT/german.gxt deleted file mode 100644 index d5a986cfd75f37802ba852c3b6b8537dc8cb7609..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 240448 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

|Z^YQccUydWbF5PyMU78Jvf@gGFa2BiW}tquw+ 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�>IzW&g5nF* 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 {Q(MlMC$?6RsppPAt3=OjUYWe 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 r^Mi6XNCwmr0Qm-#N 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�Lb5< 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 fPO=#fuM=4T_frC>s;ah7#={_V86$l2B|Rt z`+XLS4H`FwvO)ghI0I1w^4BRS8)Q<*S%^5uUtgeXkiTrsLBv7+%7d~&{+a`2gZ!m- z9-;>1uPsnE$X_NGAmSi@oddH$rZX_Sg0R7E=DP?|11ZP!plp!a%AjnJ+m1llAl+)0 zAnHMG>wvOBZhHr1gWQmH8KMT{hFdVUAp=9&6^J;I@8t+e^JlIxGWa<9xdexJGdzK?K}*pY{y^EGjtmTJ*FkDPBS#Dj z1|YVpJ9x8M9+({x;u>Vg&~<~6!N=3jH7L}NVIG(b+6BtMunEi#2?6aBIRa;UGTZ>M zq2s4$_B+t(0zy+P`pfn zvO#fi4$20_#XBe)6c<$wAnHMJaRSN)l|Nz+LE<2r7#QpzY;c-Sg0T%57%suspgF8Z zVD+FaeGFocp={9D3zQA=@hd1Bh=bB+4wwz{2?N742piniGI<43V*+mP6+qb_yO>^s#6iAgV9R@C>!K=f%gz` zkb5$qY>?mYLD?X``+Q(z0FBIoHh|3mv;Dn69^?1~5)T6xd>s%rNIAnQC>zwjI|O6L z8#1i<3|8+7>H$1}vyB-{zQDvy7#6|VrVL(RVd7>C+u&?-29s|vaYu#|aJCae!*`gt zGs8PL+l67(516FFm@noojvO#gN491Q(WRUv}Q3I-J zx4_xP3~GO1;wB6saJDJKD>&PXLE|q>jX6UcoNd9d0M2$~aQX*Rb~5P#T^FW5*jZ9D=ir z7);n8>P_N}8FJuk6NW8twkZPxJ4}rkgA<%>&TtLRwqQ`=fT^)$@Po4*8E(MYP7EHL zFg4B$yWngWh5#;@xGTdOINOaujTcVx(dvz-_o!P(9XWkN7DE)3t`Y*&U^!Z2|+1`ZJj8&u}#K-r)+{4x+b zD9{;HkbQu$jTjhAM41?TK;p&>3@tFW2?GO%7*yPpfguXU2A!n|VuyOVgUsX+XJYUP z^>hdI7qnpPU+B9@7s-IwppuV)Aw(9$4h{jG`M@LxV#oWq zxcM+>LD+ubL9Ps8Ahs*$gk=VX94H$U4ohHcBL;>KFt#xRgMvI0gRiTjA!u|h55{(4 zV3-AG8#BCsvrQNh6rk#zOc{FMY%>NoMX0zl1H&~K+l7H4NC_(L%D}J*#&%<1@KT0~ zyE8B>gRwmr7z9+n;-I3AK>^AJxjzfWHez6CgRzYn7|y`hCJYS!U~ESQh6GiJIiL#f z2Aploz@-KgH(^MFvrQQ$!P#aEA7E@}&^$O)y$b`wE_EmyG_ML{yD>1BX+Xu@85qvN z*d7cFPMTnGP*KMa0A+*xQUGHcF)(a^u|e}SFt#HDLzfmrFUb8S+Ay{;Lm8ZH!XT#u z6E|h>g0syS=E2y`3=B_TY!?QG99^(_P_f6*1Z9KVvjoOAVqmxcV;eItaOgqQgX&oa z7~6?~VGW#Z% zFt!^51CtR{jXMKF9)ukN8skkd28p|X=UW@VY~K)2i+c@-?H(NF?8m_H0LliPQ!Qh{ z#Ng{091>~Bz>orB`vy6B`Y|vp1G7P)z`$?{$_DxOo+%T9uWvl~tlBRywlf36KQkr< zUw^+4#|Q=nBXbbj-_OaHfx!dB4hr}8a}Q>S01`G@>U^Zx70RzJpFdMRd;G88BgP&`7JjeqLR!j_jo}ig&28IbBwy$Tf zzaIm`IxySU6I2#m0*?P}7XTz?zA{&)?bKFNA?X!3M^5We~6hv0eQA zgMu0Az-)J4(3wA{z-(WCKi5bGCOeRt;E+&f28IAIJJb(!UQH8}?ditAum{Wrt*l~T zI09zJ2RMdCF?iU6^u`A`JG(HjIWRH!1-Ux=2e~llf!LwGPOd==3}y~Y4F1lbRXz+1 zb|7|us~^bK>p<+#5Xb>Nj!X>xp&_6_b_O*N8yap|U^XP&);TgU1US08f)2QO0cRU9 zs5!yJ4H@F#Y$JwsaJDhS8#vp9LBkoU9(0~FjBU)oFbT#sVPH4|W1BKCu(?3hn=vqi zz}V&t3>`4G1p~t!7#no9gDXURynz9O3Y=}okOpTPF|2~KjTv6S*(MAIZZN&33}tY( z8N)6(+nj;T9j3;DAq390WS9nH8yYa&g0l@7q&%SN4UHIb;A~@tRdBWm!w)#yl)=Fh zrrwO91V&&XD?g1(+S=8XOeD@B+kkft-0Ix1F=0J>rB3Z*go;#326yGCWZiiAMgPg z24J=yxM5)hW(S4DyD~6Dz}TJ)3>h$XFatvmj2+Ivunfcw38obAj|5d;%= zVGs)jv3)_=mO%^329@VwFt!^5Lluk-G9Szi@dMqtunx{PU^oJ28#3I3vyB+uz}dzO zEFmDfKzdCWMBr>w200kph=IWX#x`bPaDcH*Kt4{y}Lr)mU91z=)K`$J{hSZOnAZ)Oq1`%L!u%R0uY_Op^kzjF9 z7ldIGgbnHxX@-ay%)aI?q&tB(gIh#n{#)OR}oWrN0xenHuw zu#L!ss0W4ZFDM%n4t7}(aZot4LD?X`>t#d4LH=C_WrO_4l>-q6`LPeo2DyxZVG)E4 zcJn7F8x%8HxghnRo<9S_EGQe~o@-Dx$USm-5H%q8tbwvY?$OGJh=bfS1kpI-3Pp_qkX}kJGoU^eIm2nL2QC>zu`sDQ9R&SB_) zvO(gjAZ$>QVb}#_gT(JZ*x=xQ17(B6`D&RMg54s(eGLN;+rvM=)6bp32h0xe0o~nD z2V;ZU{~)#}$ny*ghal`=Q2XQ-m^ za56Z6*a6_K8$$q??ds~{8pMzQX8VAa<}u`f+5RCRt}YA#13(E@eK84xCCMQc!KtqLD+sS!3+#6?Mw{8A&%g4NOkyJr*M$P3*c-ch68Z6F~d7J+k}CqgNY$H)G6N6 z&xJt&%8v3kVz7dApp*HWH6Zo6L(@Lm<(e( zGql0jZVU{!Ky1ed(6AiCGbkIBm${}eF@!iqc!DyI6_gFiFjY`CD3dILvO#6kF(?~U zMty;@LFJOyRERmCySHqnLD--@UvVI|s~h;M{&0t~(@dXb#Ff>5fpt9}}lnpB1nr1@OfXX7C zSr9g;zMBDMgX+5@P&TN(Q=1J@0}7xiP&R0d5YrrxI4E=&7z7|}aM^ALWrJjLplndM zErYT_W%3Ic+mV5xY%bUwa9iaClnruo-aLpn$j!f?Y>=Dt=7YpRCNeNAgRsH&-h#40 z_6jTjs{zk9*+JQ$_?iS|gW_u+lnru^z(R<6(5R;sjBUigPyu5bGcfFdvO)ET%OZ$+ zkUNh+*&uh?Ery7L+&Kx#28HbnC>s>EY)c?&Kw%pKWrMq6XB~>VdJ17#Q|J*`WGMUyi~>Isw$8gW^(3ZfpgmyKsNhz$yT1_nC_ z8=O|_U~D4>hBr_)C~P~{fYpQVG!$D4VS~ap1Ih-4t;9NrI4Epeplnds@~nr5yE}$3 z?@|dowVc0I^*iLp)rK7@on|K@2~@Y#(QTUsndH z!%Pg}9{&CTuC5F^AhxGpyrn4vLkE=Y62ZXm1Ii8xj$&{)!o(2n=@%ao;=_;yWrw-= zGQ0w@gCOIpUdNai!oh4;hE>NwY*%Mc!{`E-?eFLA?80Dl0wnJ5=N@9n&<1B4G2DW) zjT!V#GBJSnq%trt7@cHdh&1%_aSRS&*al|D8-m7a6i$J}aKN?Hm(Bq+^f^=x#v;5ZeWmdKefIAZ$=pV<>^J!SzK8lnqK(lb~!+x>^8bgX)Dd zFg9q+|2z{zqzj~O6}kXr`};8{LD``4WCo1w7s9X($_ABP4i_QnK~8!GWrNBYflCl^ zP&tzZWrNC@b6_^eWeg0jAZ$>wWk|XVQV+huj$s9q4JtEDu0X^=LaNe5H+CsC=JR6 z)inpeY*1)2Fx-K#!S2_)2~uwy52|M;LD?YpAA_+C85mx`*hUNtZnq%nL4H{TV}sVD zLD?X`{D87SezCg^Q4jJ<9h40U&jV04$o;>dY*0b0cL$;#RO+Na*`PXi2b2x+;|C}k zj9VzsudU*3LY>qfX)O0Z3i!Vz{C&*Vu0?#c5w_zddS2uiD5Q_0z*GTA43;IA44ZY zFGB}I7Xt&$#TytVFtjpEWSGRz$I!&kz|hOUz(8%WI));KI)+IMix}21>}OD5*u=1a zVLQVrh6M}?4C@(|GHhU2%CHDbuVvWGu$o~3!$yWZ3=9mzUEd^zr3?!hmNFsAFJYP-mFP(7@2i(8tgVP9F^nIt&V6 zv2KPr;FJSOL7=px4vx8WhB}6c3`-eSGHeIOCrIrAhSdyv7#1-sVA#a44jk(W42u|c zGi+s8$FPK91=zJK7?y*>V>QEOhK1l1(#^1$VFkkyhGh&Zz+q6w05KbzX`2~VGAsdy zgaX4luzAS3LAEI{7%)KmWCf)W=?oMbp!B&M?Bb;is~A?p?S!P@-3$ugc-jmO{}l|Y z!C`>u5>Q-0Qg0X7pPLv~FsucK*d_*$8A}-!gJXIl!+M6z42u~c>0XgRfuW0G0XTkE zg7XPT?J5QZhV9_ov58?bIBY=ng5rAvgFQT~`xrJctY-kl>LP~K4Eq^YGHe9L?;@}c zP?&>K1IVS2)CS69Yr$c!z_5j39m86N1z?wg>|Md2z_1J)BcM12rMAW3G=VP;5#f#= zgL-f`wlZu4hbX870Qqbo!)9=7?O@o$pun&YoQgqZ11M!fT)z$+7NGPGay9le0dgZK zJ%LPx#o%U!Mc_08NmFYW7BFmKSi!I#ntniW3CcH^sc{LzItGwxNJ;_a&E?>{1PLuj zt^D0qp^f0UTnF|cD17%bYy{_Ykjr;~ z;~Nw&kTgSn+6Kk`3Whb{lmaP7Kyi;ftz-B7MsPW_n_)Fd+JS^RsFXs^OCZ@4$kAC@*PwfL3|8~jXmI80CMY6a2kWCUCOWqT<(GD1yJb+%$i(H~ z{Id`2H<-^MIUQsw$c>^Z&l}q7vgG%Ye;1U2- zK0`tSl-@w8Q~{jxA@+dE2vE#}YyyP`$Zw$1b}_V62bFHy7*;T>0EZDM)Ijb5sRotQ zpb&@UBv6=vVhU9Hf>JpoPlECYC}cq9fLsAe#i)J;nFTTvQZs?#5>zIGN-R)%0J#Me zpPt$xOUmZuz>*-Yast_WLN-B z2^!Ga09Gq#GB7aoL+e>k$+!Soq9S~|5FGoUk`t5zKw$+6nT6n(faM^NhynwM1o;wF zs)EXl-3)8MKJ5j^Ca4v(25c56GJfWjK&XHZ=MDxE+zGbl_!_OE8x z4K868fy-`?e?egnO09k1wAjF~kzq5qr3G>~C}luW45*d^#XKlyfb0ReZX*LIEI_#p z)V2VbF&CPLLHR`iTrOg&p-pUo(l7Q{La)6+@uUuJH@7e-fZHZ54DAek3=1(_R62oD-&$}j2T7Ux88(4S43Ik@@c^k?_JH#w#2uja3#k3EodHx&gX~_# z04l*&gG+c&{n7(%DXs;lxkU^hQz3a2RN8=4gHq)h22km|f&s)wj#W^30x}hnVnHp% zE^z4yN&z5slNl5kVCe^xTb6*^704mD6x<2|)!oRY94I6~eu9li?FCa7dz3~qz(0OuA+{_J4@$tp0cX4nUA z4S~#slwhEEfs~=3at>6p?*zvUs7wX5)*$T>P_EhnZg+rGf#MD1Uyv(6z66;DN`Gs> zWf3Uf?f|<564pz>{UC@O$k(9uBB&+>m877$4HCnk(1e83dWPNLe$_sPP4L25|lbr2|lD35#=G zXo(3bSJyJ^W7vw+Mg-Z}gQJ`Wm9U^Rz7E#T1AJg*+%_f=VAyzK4h@Fo4<{pn4vZLO?y6$zZ>McpzIr zCBh1ZZQ%AYsMWQC0aO-&YzC#$4dAwx0)slZ+y&((P})#uP+$P%YLI(CDmO6f0hfiF z!R>l=h8BiahF*p_49yH33 z7NpDor8`J#3l#24z@;asmj+4eptJ=lzd&wX3vLa9Vi(cBfwhM~B^o5QAT30M-Jo;` zDV;$rR**|TF|?8al$t?iwJ?D45NK=!6hELc7L*=9u>vX?mcsjNka7%Eo~#G=+(C6b zB=$l44dBvDfuWHBqzlyd2Gt;-o<0Ku@iu_UpUL1p=t6KSA5=nsQV%HBK_LTaqY`f( zs8-#_00~{<+zRSRf!YI0!J`SF);Xlc0J#iQ>VW!Bpcd*9mq4W=h_?Xj3sC6~N*$oFAV`W@05%cQ)&$k^pqvYeOGubN zViTel)XoIejw`_JN|0_)TVowKkAl+LT891L`UzH&gZhZepyM@*z@r(E*aC$+EXP7( z1=N083T_d@$_7x{2jxOguNgGf04dXS89?@c(mNOqma9NIK=A;|eH*|o0kyFg zF>Geo3hhNgVi;7`fJ|HjE!jXZf*5Opq##&4L+U?`REhr>GaR;i|LFR&59H3mY1DsMo zwjkVr>{^gb+rd2{P#F*EgTV3~Xha3%Vo<(-uY>ySp!k8*0h>`$C#YTo zg#pMsP;VO4mw>gML1|GPE*G0N2Koz~d1hvq7~zsNMp(a3MIIg2G9GVJo-o(GlTpj-~B89+H36f%(V57r_9jf{Ze zZymS>hP3NJF$2pZpu7(9Hz-6v?MskbK`nPs*#l}uLtfRuD*h33zS<6bqoa0Z`i>G$ybH91ftiJE*(@nFGpUpjZXvSx^lKa}}hI z1qmNeIRKh(f%Hy5rbBWrsC5nsD^RF{QVpn&2%3ul*Edfm+v~@&Yv1)x*%oFq2^pI6X`U zr!`0^0xE++t^nm}P#*`BzLtTkepDkP*#QRI`Bk3Lr5MhNL-AN?gkT3R{q0K(2+PeMC4R(ho!jsKkSf zNPyf7vJDjXpil?3H9_N{AX7ml48$HteFqtH1*wFD3n*`aatx?V2NDI9bC41jG;0nT zodu;H&}P(J`N|Az<F63RK1-&pv?cQ3tOWn8MHs9sg8dXkwVn(96)rFp)tKnnOUd zN=@MP1)z4sCUA=kGFk$15hzR{X#r9ag6acE8i$m6Tfn_^&?qFx=b$zXsOJqDMFZIn znUC#aSjT`{9jH`-^j1LW8MF!j)QSeBSv5Mmc1JV5?}GC1tcU>RLr|Uog$t-oUIosvp!kQBkf3r5l8QkkoC1Rd1E?kkwM#&$8dUm# z@*n0L8>lP-g*Rk80MgD~2p&fP#R#a>0IkIUxfe330`V7UrVms;f?^MMY)~sLfl}%W z22e@`^#(xoJSa_r%0y6G8a32FJpoWyl9FCQ`4~MMAfW~7XTw;a(hrogLH-5h*+mT7 zz$-E!B^PL91(HS(aZYX?!0lI1N+d2P(9RWaRK|kR9H^xT%Jrby9W>{> zfC1FE0;PtD;1TLx@H!Dltpu?Px%C4oJ3xJHQ27I@UqPh-sAU4GAwls0%Eh2E7*x8! z${0`&8l(r*R{_;!pjs5OY0r_kzxHbXRW(fDpXV?I3^@932 zpmyN~@Oa-oaES`4MG*dg^o&4l15kYj8r6XGOAuu;sMG_Q1L?JZ$~jQ!1*(5QCT(N@ z_5MISg#GBb8`KH`t%w1&?>B?{+n`o4$e)lIVMuQY)T;-zMbqA z@&l;13kpk6j|J3^0pR$sGC5p1;zdb@Qf13HL$W36#gLpfLsG=r9%3Y z2-iTyG(c_vtu;e#p@HiD_24mdQ2tP7Xk?hp(9O`t04moT7-lfEf@?R>D#Qk;IH;Wu z5=YG7g8T}q3qUS_w5>pC8dMu@V1U$8AR8fR2$Y{7V`1yS^){#t1*^wFwdQ`P4v=dg zdO__pNX-lKF{qaY%2A+pC8Yfc$~%yD07(Bn6#byqK?``r5vUIeN@t+j8KeWG7Bt=m zsWTus8&s!(@(pNS7c!y>O8X!eg3>-{rlgLc61;j2lovsx5};H8s#`&=Gh~xMqe>t- z$mj^fAE0s&WIAM|1{B92(?KBx(h15hFh0mMSUQ2&2yz*yWGl zUf@;@iUH7=2&i?n3Y^bCDR3LZZlw0uMDVx@Xk-}_x}dfYC{2Uf`-s>;ZOwu9gVr&G zGt@DF<{&|N22`Se{03@0Z(@MV?!xi`XsjL7egT!CAish}wm^ObsRz~Rp!5SuXF zv_95FVB=(d}ExFQ_jK8Vi7=YmmP|Aq{dDs3rrAkb%k#kSa*XgT^R9{a#RhgN-kP%tJ4M z5#ayuxjLH2=0L?Ph-D*Iuj6=K;aH@52yqHg(`As zfv_D^2Z72RP&p4u383^2axI&fDLK751pil$FCTKl0C|x5$0=XvI2%aGWjroGYav^wRX$`o}0ksk# zqc5Nm5tJ7|c@`8Bpix~=j~J9@AY~pXJ%YxxAvqD`Mo`VM1iE4fG!hL8FHnyNG_nQ? zb5J=9il;T;nzN4qRNAgY$>pGVKTxcLOj^mH3!MoDwU$8RwxCiJQX0a_A9e7!K^Mbh zhJNs2IRB=3OP_*gGPlwaRcd7g7P7#)BxoZ z*f=mGg+Xiug%)TfJ7`@9Xg&BI=&BV^p9)e_fkFqw0*w+u(ncLa216Y~9YZ#l3}NtR zaA$C5@L_Oeh-V092xV|$@MZ912xbUo@MQ33@M8!Ds{@5CB6@p?3ltw|VZBWk=lsZ812*RL}5Hv>#^3^tm&EQpopxgqgX(1!SkT_b+unIie z3@TwkYC$0YnwbQZG@v{JNnw!jC{S!bbb;zH&7Ex!yk^I z8U<9#fP4cAM^Gw+w6QxFmNOvc;z79tG!6qP@j>lRPz?@hgMd~;fJ#eHKN3{tg2E3p zQVfcJNNJ6luRv~s*wD`a>D@x|8#cWNwXl)|QnN$a>yWjXtHCR!K;g3+B*QM6F|Kf(B2G?A3$X?D7`E}8cPI~_A9`1 zvY_4*D20Gp>!6T;%;|w#(#SM5C0QE>9yKA(etB*mxUkV;s z2904bFf@YaNI`8U2zvu~rRORJ&>W~g188p>q}AWVu#N#yheGOh$oL(oJqhZ2gU0tk zsSK1-Ks6d@bu%cPfJz@oJq$`=kP;ab`>1nDpxn6*T))D`Eg)-VAT=mxeLScZ0qs@; zrD9ME9FlG!;Q?wN!O}8h{sfU{%+LmopI!!-{h+mDAa`|u^?_Uf+SLS;2c-kh9w-F{kWR#ydq2ZuhDqRc zXQ1}pB!+nm6By<&^e{|@+SCgkod>B0&3U#lv@%QruTcZJs(}IIBGBq(klmnO@pOh( zh8_k``w!&b9NL3tI_8Um$NP+kR<@Sw3hQ0WB9 zQ;py?jG&aefPn$LV+~Y(?FR3o0@Wp;yp7zB1c`y{S_W-nqP8Q#7+e`V7(5xAp)Cnl z20w-n23Lk4hIj^7h6n~vh7fo=0@P{(wFy8aEhMjkTmkAgfNC4iJRoS~2C}{mu^JFG zBLtG$4_@~KDw#p~7vVzC2pA|`flLPF6I?AGQd|l$54rse3KLKX2WeG-N=AswLAelA zH;jfLdR&tdf)l_sFKEvya@!5oMgY~QkU9mFQXr`h)S6tw0IJy`y=ln022c$HiWg9S z45Sv+!T^o3fqI&t7zFj{L4BZQ;8JBGcoqyah5)H~K{{aOg34jgm?^|I6$V2F12BZx z28#7&@Jfx;V-Qy}9bpk6+t ztpy4dQ0oDt59CKsUIy6$;)CiiP{@G7VgUnaZV2R-wcybV&>E2K44~Q*)K+X{Xk}<; z0F}3}k{;Ca-N&$s!HR(aJX;E>Pe8T89I)6#@cN}m;Q7@iun4G?3o;)RZ=k)jm^-CG zjUWSEe{VGr>fa*z53k&3HP`snBY6bNeK&=Q+ zzX(*GKuXHp43Jm`g(xVju$Ozz42}%G;BwB9A)djR!Gpn(!H>Zm+?xtx@MLgh2xo|A zaAfdd@B#O)K;>X4gCj!-*4`Czx*u9D2h}v7Gy)p!0FBG+2Jidb2VGAIYTJPJT`vHq zBbXY{o*`5fjtsfrx-^F&ks*&EnIV;d0X#>L$N;KE85rCcKr$r^NernBDGUq@p!znC zA(f$sp_Czy0m5Qn2w^Bgn@yjzC^SI+0nL+ubU;+6gMH4x;K`5&o6odT(3I~wc zAa{V=4{`}4RJ|EW!J!5UA&7|(KS07c0BkbIU3m!0o4WaOk>% zeUr~n1de}@4NeS+3`O8L1%+-gIDA3vuRL%#x-mF0c!FaCq!tvK$zZ=_!o_?UK=GRg zPBn=Px!@B3U?~yQq5zGaKwA5tavPD7LFpJV4hE`!Kx?N!>p~FYJBafbmVkQ|pq2q- ztrw`w0JXb7=E2%vpc)8Nx`5W0fp!BSS~s9p1!%1%WX&q5#0Hf+$ZZeMs5xjC6=+5a z(!T}ul|XCgL8FnN(j76X3$h#3yM*i*hKv|(0oPPJz|JsMH0u*+Bgr(3k>f9V*CIupOC@J?H8SeGHA@mU=IEY^?*l zf(6v$2JN8(#SbXVAhjRFhoIIwXte{V)L#Pbd4cL3P#l3&B8M)hP5|vs2eqg{y#dfn z$_nt#Vvx^4VFVh90?l54R))aF*&sDFB=kV@7NFJcppgX7Tq>we2F=Sr`gow-c%ZW> zAboDoeo|121Tuy*l>rp%ptJ$%OM_A)WGoM)8?-VE6e=K_5UUqKE3+WBg494(!+_if zN&%p8e8@}+NDibQlnNo?0jcXjBMp%H5EKfaa08_z&_S`~7ZXj_98i4_g{(}0}kWdA=Qvtj?0Fs(OVEW~l;%L;0#Of2 zX`q}3S-lF0eNZle$bv{v>uWi9?KC8|A)y3v6=c2#HT)p)0&1gyQVl2!Kq^7A`=B)g zp#BJ`Z3gPygTfdTexNZfP*{N61Zu;9!UzHe*0Vszq0{4MIHiGgm$PQ2}fL7o_ z_QZhFFv$I&o*BqiPzr*iE|86oQ#L^B86fLyLB4{dc2KSY^~gZ}L8M`b37}pQC$i9kj&Kz$2P9|Y7U2h|rKH-qMKAal{6H4Tup?~w7X z$?&;o)N&az<^@rM+#&_}46?TlR0Dv@C{X%_td@hsE+`&BDGPLh3}glaR9}EfXwdvI zXzeAawgAN{#B|X37-*gfwqF6H7gDN#Ob3;UAYX$_0+m^ic04E-fc9;GX0jk<4k&a% zr4VNA1u9uU<9wjGageQj;Pxk|tO4apP;5fX1f^S0{Qyb3pwI?|DQMma2$0aS;8 zVh1$hgKQ(nub@>ckX`~PW(cbV^%g)Xn;Af3)u8%$3Ah~zYAb`SJOWflfm{hn{hPt{1!x3+3A9#()Ci!`8M5zlGI&n`q!xkX zB~Z!%jiiHeKB#V71J(&DMM0?oWCJL-f%u@kDWG}{(((h9lgq(tIzVd!AZrXzM+!h^ z)qqACKw}0I!EHg%I5cQ%7c}+&TD1;3<7zp0H#2B10hC4{;S5Uipb=%zIt|e14`?3- zXjB*E3Q*Y%IvorY-Vhgo>J3obfa(fJs{(Y!3@B}b#!o?`9FRH!l8VvCOc)rZfLGmu z>H|zU&?q4+96%*Js7(l}Z9wNuLBbE@R&1pssC@v58`!!YP;CX8QwPm*fN~hf-JqHq z6!M@n1ezrP=>WBkKw^;kYBd97UInzm3ZxsfIu8^skly=daEyb>bkHe6AQytd2-(HR zwJ-Y2At-->P6X%!kNHdk&p%8A=ZQ{miyhK-1l35Oov$D_f&2hkn+Iu=fWj3NBA`?P zYVm^hoPx>;kUgN32WriN+ys(Cw1#1IUmpV~C4)i$qz2S-0?p@xVi8n^!a@zy&IOJ3 zK<11s%a0i-LK!Ii;@!3jJ*1UjQJhykChJ9rM> z6+CX_%AmmD1)hs{WdNN#91I>=4`A>Bo1nnp0yYz5yAN1Ch{2!12|Okh0-lF}j5RSZ zc!AaXF+?(eYBZ24&@4YF&YT&77#tZq8Qj6;3uxBg53C~nIgqPB?gp`)7(y99=PrY07(ioge&Cr0&?p-yG&~t#`XMVA z7{K8H3K0bc(CB{BRKSY!F9AhLpXT$0%T_kcn<{VtUl0Lj>zHT#^A{S z3TM!42PhuH!F-UfKqG+);MEhL(LRu$KyCx2kYEN#*o827FoZKeVigo0ARVAM1YR|5lneE|%h^yULjrJ>*$2xkap@CK(+NIHR} z>`(?!dIb5j8N8RY54B-=WG-j#5pvHhboIx>wE%$(8 z9+ZlG!KpZe!JWY$90x%Rpu2ZKE(YZ@keQ&+0Hs4vp2O!CP$~eWYf$YgCT)?R;9Gt`a8T=W7862U$0i}gtaJmAy2oksc44|`2LAJYq za|6iDpwI%D1X>3TN(lkrJOOew$aatqy%|8U1ybV!4mprd{1`wsM=`iEcrk!t3X+1o z7@QfR7$O-!r?!I31;qkLAH+6D>I02RgJRqr?0Z*m41in*O3xrSgWLe}A1LgD89;6Y zx`_C?A4C4rCH2^s$u=AX7paKrTg%Q%K4Ir6rI~(Ci?rtOU8)2b%iA z!KE-LMnQIfQU|C^@Mi$U0jLCmxZf9?(?DbGpwb8w_P*dS0+qF()D0>fLHa>u1jsf> zSb@rMSU4c(YEWoHN)-5ODbdO1Gf!RREW`AX7kYhQuAncc4@QD&au+8j{jL zd6sR-?nTgH6pp*h~u`jqb2ZetCxU>eP5zxv#XK=iSGJr&bz%3V0 zo`mIxAO=v$3(A|I-0aT~2F`h)d<3!=xmHJZKPcWn>LIxSR9b*W^g$tw-87IJ{TM*0 z#SL8Mfx-&3-UgIbL174L|F|;1H<04ke6=DIO} z;s;b-gK{M(I81rflLLJkD$^Wl>QO*Q6z&axITpBHJA%Pbr>jZfzo0SxU~f`0n| z$^no|Kt2c6^9&4u44|+C*$q+;D*+K92~i0;s~b_~flLCG%aPz#9&!kRLK0Fc!Qupz zszLLh3gDE4tP7OqLGA~|1gLEGUF@V}dp!5ex zDWEbLSvG`C>B8aK;;oAjzM)k%nToJ3I+AR zK>ZC+TL6@rK&?PfngP|Js4YWKu5tmlr$MQ}kpbimknNxx3o3&=89=2d#1>F*5xuqr z`3dA6P$>>djWBmW+zJX=WFLT9bfA8uC$#k!1#Z8>^nly~igi#<_GX9#*YS{+4`^kU zBY1@ZB!|FsK*|bGjs?XBsHOw;ksx&eEPp64fW$%T#6iA*=>)kOkWvHGjs=xU$mtFedZ3mZsC@_W1t`oRB@rn7fZFviGeK%Y z8N3-Fsvvn2j5WsQm&m z85A-K3?S1%JpfQT0i`jRdQe<~{0d4PsC5she-10Z0>EhkkTd{FABdC+Q{@Bhy@2M@A>je)=Yq;PP;P;^9F)HyH5aHv1i1-h5-7Ff@+&Ad zKrR5K5|DaOE(EnM7#N80GpGdsauuk20gY%dK+AGajflVE~n= zpw=g0`#^4UWzYqu3Q$c3$_+4oF@Sr}ptb`ju7jYa!eR%M20-N#$R1G21;ri6G>|(S z89?PP$S0r}0i|P5p8(RL0oed5|3EEyP)`xm$_4oiAr2}xKs`su7z#ohlxjh3fFK4? zX#f%jnFz|~Al0CB1d3l!>kkq`ptKBX;ecETN-v<&I2b(A2dX6|!7V0GZvs>Ufnp34=b#h=atU(H2%3`u zmGz+V8{~3t@JJhCG!4>6L@pD;!7XG^X#+}`xIzmQ+8{NU{Zx>R*jxgNKTt0YRJu7b zM1jjV&`n*~LmkwI2KfzA6XL6-aHlnp+aV!{93r5y7N5zGTm%YnkRL%kCSPz55)wn8 zb_1j}42mO=>7dvH#U!Xz4&sA!f!cSV^a+Yfh+UvK0;Lp?=^)i08WO`G_2{;MNL1i_hZ31dPgHlEi*epoe z1CH?51P+1lXU26x*S0Fi1o&ebeDjz|<1dZ%~{0DLsD4l`S z1T%ozfS~>kNEax)Tp2)l9282B-W(#FKxH4KGy%c3sgEF#vLL42G#PQ9vP^F1dS$v@*~JB28Kum zP^}6or$Bar>Pk>tfKnA|3k;+hGy>rYzJ~|oGY|_@yMc1AGXtp9f#?F&s-Qd%3I&iK zKs|haaD9VlC4+J($PJ*D6e!(*#u7m4K|Op>n;TY_g4)!eGz4-tNDN{g$Ocd@0L2L? zWI*u&b3LeS1u9oT`2}J!L=`BVgZLmD0vJH<1@R!YI4DFxtu9dQ1{ntdwG=_UK#-e2 zEf+|9fYKABCjv@$pne9ZmjZGlsKo$s8z^1*fctx(@d#IV%?%nk0oe(;n0V*Fr?gphBNZSxp zzJgk6pq?tIP6fFUq7&p}P(Fv$_MrR-5&^Z;K6%{gX&>WN&}@7P?`Xxdr<6w z+zQGSpin~Xr-OV8OEr-A1eG$N7C$IGfO;K}d<6;zP_74+2p|(dX&YoCs2l^0Sb_2a zs9g?fKZE=X8Vv-sjzRew)OG^t0fh=AWr12?khBIW7eKxa0=L^iz67-kK&1m{R02|Z zf@%(keV`T^$V5<%0i`-n-xw6@zR)rilsiDR14IroDhY~XkgGsp0xBgzH8v=9fJ_AS zra*Rr;tl2=Y;_38Ox)u-AismsKd62Ig(WDhg8T)lmqD=zDvLoiEGTt>M!I0(0ZPH3 zFah~0gdqxCYJy@E)G`3&98kD`%m$4%g4BV^Kv?X9dR3s&PLS^*^A^G2HX6umP>KfS zKhXFwq}2^_5vWxPauq0EL8gIBLX?movq2#R(gR5~ptJ;vbx=M5#U98Ph_N=1`#?1Z zVx$qI4l=R_DbGRa5MmOjeYkd14M)3 z5tMt7N6SHO1f>8_nF6Y@LAeg(4p2D_D$5`t3@SrFr4Oi`2x?ckfM+ZqGoTQ^Kw1i* zumsgMj?fYVR8L}SPvUAlfpRUZ?gfP^sLcv0SwSuVjlO_tR!|8FiW5*+f?N#pH>f=i zatC5;2BZU04ui@_NJ#|BJ)kx-DAYmu6%=0}e?w$pB^W4ufchSwo((AVgIW$A44|+B zrHgO|Q0ay!YlFd~F`zJqga&90HzYhkZUp5LP<;k!-Gjmql#f9zc2GP)+Uua)0V)kZ zyU9Rp1yK0{QUwYLP>uzaL7?&$R35>?7~y76dlOWqfN~V5J%{NlNF4~OFG2o-#4N}~ zpk6A-cc8irRCBOd{}8u=Oab`-k_SO0 z5-2nwu?322(6}tbR#4draV@BZ1*KbvEg&;NJ^+O*hz-&OvKLa%f$DuwpC43GgHj}@ zRsw|~s67XXD^T2k${wj<3KYkn zbOmWyf$EPC21qJ_)F3|KIW^F12gpC5_yN@opcIRkIS19XAfJHp0>~$zvIZ#wF0sYRD**;-Wy!bqP8DFv5W|7Na%pfa)QpQf#!ZeZi1vFPz?r|mj{(gp!5!E zPk~YbsJ#OUB~V;};vCsrP^>_53@ElhW_U87*0`Yb398*dHiv`vCW7)hC_F(S1WK`> zvJq4(LHgjRz5=a^!1OuDHK3FP%5NYOKzC}wR$MuQcPRuhx1Xayi>l^|6n<0qwT{?QJ2>H=s3S&fr}y5W7LX2JNYF0h**WPc(koI&EC zwak$H>L9Z~zJ!jGZWo5-L6-De0|M+;gv2wD#aId=iHrV+H(5VYDDwALAP@(w8UK&gE<`2H2d*$SW) z%*gAiK`XUU)q&Q^?g5X_fmVEjR@Q^o@`2Vxg4Q{MR!YLwVT0lqbjmsCGy>51E})fj zpjC9BbO1^N8yG;Vc_C|XK`Y`wYkWa@XAQWIfQVI)+d;J;Xx2!90k(ewlnOwrQ$aiS zKJ{W7(E4^zdI7D&1D#I++9LzXm5@CMkd=xcmx5NnLeAF$xe25i3O&%SB#;jRY*@I#mWD+R0L92>kCPH#HNG0fWC(s@X(0R0w_5YCk4~k95$swRKzd@&NgKqZ3 zwn7x59wY-=%?mjb3KXxPm9Y>LKqrb}+5@>c1r#5kwat*b{6Kn$wGUVB0hs~X{R_Eo z8FbDPL3cucc7B0E z2$X6;YkooXC1}?NsQv_*09p$SayKmhg7#m4dLxis7r_k4;QhM=3?&T3450Gcg&~O{ z9l9?VbTWrO_&ib4bbwkjppz#-c7a+}Ah&^bEG-A$7X)$@NCZ^7gI1q|`WT>=T@rYg zFsPjh+AW+0UO@`l79c2WL8Tw)<`hsUE@c3<06}|rK(z&=JOt%XQ0a)ehMIu^Sry1c$PG=9wj}7x zH)MHG3IW}@#=xM6>{0VusMfvN?`6ULx*@}ON3p#7Pkwi+nJ zK&b#!GBq)@Gk{jUg4XPVPH_R99n%hOC#!?clL4LF3%j=fbjpG;_%s(IFlh)TL8qL9 zP9m7VFbN!>8w#h(P;?K(Pbb_pt;m6+3)*=Es)a!IfK-Cooshke zpcU@>!8fjeN&-+j4CFG{luTK5i$dr)ryw5A{AGSEJa z&ER$fs3i@`Z=k*fVoxrpBm%hsq!v`uLBbvs+C2>O!Qnj@eA_ta?laJBeW2C@VwW>3C^Gv5Gcoi_Je}b0HmY?g$k%` z0;*9#?Hy2?NP%H0c)t%Qv_QLWA$(BlXCv5Opti+P=5eq zE+l7wN*ho*gWP!uyR!(JA0fRC(Ec&d?g~&j*21udVL$lZ5s+U&I}<>yVoG?1TaN1e*&nLmp%| zC=5Vu0;O)EJ%t0 z*$;6i$aYXm5tOSyz5vB2D4l}xAE;Lb$`>FLK=yz_9^`6J`3%`z2s--_WCEm@1W^at z-3hV}l=DD49U=Q+K{f7LaP9=%zXFj5?QH{@3kyY%`H(yWDH}lk0-c2d*|`piD@6JO z)vloQ401DMXDOtYi|`esCIsEX3AtqwWF}}A=W?(s)EOp%_qKydEYO}bNPP@C=L&Sf z38-BH+UW#3@dR<2GiaX`;>0pgsRcS&4AlMw?Vp6i>{Rf+f6(0*ptuFa2xi%_g#nbi zA#nimKcp873RzI>f@(lee*xAqh3tif^d>+%h(MuFj0v#x1WLJ}`xrr?3u?iFZpek* zrU7a@uL6e$#Fe0Y1B!i6*#c@)gY1Hw%K|&W5;WQd8XE+yZ2_HO2^v)etT}=$2njIA4pq2`#?Tu^# zD5Zf?2dD%B z5QT&Ss8tCHWsoVTB_^nbgq$A+vJVzUAisjn0|DKN2`ZyNEkRJv8?___?cWEv2Nc?% zd<$YDmjR%d##W9Z+XTwzAR9pbfz)fD5&}|hfZPtcNd@F;nBQTih=9(52h|>+aX?V$ zgIXD|(iM~rK`kZFSz#bIfMOZcwu7Vt&}nL*Iudk-F33-y)CNkI5E@p_p_Ye`aZ*_9 zf#MZ(gB{3Dh?^nd4azT&9t)`a1gRoi#;Y@cc3}52%w_cA%5k6`9Oydpl4Z1TLH1Y*1 zn?ZgCr2xn-dr*%blxjdNK2Z7vwFy9Z0~D8_J`E`6g7zVUM)W|vFpzFU2?5FeGN)*PFrTRf5VwT?Pj5U8$h_xsG8!!%has zNCm_-Aa{XeK=mKUd{B#MDZ?u8{V1Tc3@V)Otdl zAXPB`f%cYzQZXn$f?Btr76N3HS%G0X_$(k$%z$)&`bVJh3Y6a<=>2<;&Xoo2--n#)1K9^X0er41 z=+seAibb^CK(*u&q`SOPOAe54AhSQ9vK~?kflj{%wFW?G0W>QFIwuHJ27*Em6yA_L z4{LRUY6*}mC?$i+R7mR>R1@uh-Z%*wl>?RdpjII$oLO5S4YCD! zF*jNNUn*%fg z3<_i9QXZ5uK{*6e(u2fzgU{~=g$F2|Ldrs9*Md?m6noooD;31_GD2_nw8&KYX`4D6(D4l?E z38?=CDxW~TJJ9$EsPqB#Q$VNIfZPMhW1!Q|Ah{S6mY^^~q*<5qXtW-55(jL21a#sh zC`Le~0Z1jNHUOP00!jg(dKTg~P$~hL2};eNk^wfe13J?Ibb=?WUkF+S(-a}3&J3i;^A$n!5}?sr z&@(=-BLJXvsi3tU*v_5?rASCSAJpE0r5RAFhP8)4B^V@) zg32e53eepbu=EEx2^dsXg2o_MK+lK;rA5#f03z)}X7Yxjn<3*akbV;A{KW;}wj-=w z29*s6Uqa@iK)n-C9)*Mrs00R;Mxgt|Kp_Xp-Jre$s1*h3S3}0wK(!SpCxcGw0o7!% zdHHUy|F z0rh@BGiM9nF$J;#RBnLUm5>?=R5yaoy#losLG>jl_CaMf#EqbK0H_BE8aW4zCxY?~ z*sg#hh{ciBt)sVghNFS(2ybxSMLc$Y$j1koSg^VnM>UoG7P_9@4K9dbn0zzg= zK{Y2x4d`4x$hmc(-U!HFpcD%VcZiQbZ8y;PBxo!hNH7<6hBC~QD&Ylz=LB{QfF2i35k z`~xx@i1Pf!aI zls-W91SobuBf6lrE-1x;PT~ZG0;oO*=?0CvLt=ap1E^*KmGqz*3#1=Z?|^&(8Mgqn zPC=rev1zke!Iu3@AhvFo1e5pb!SN z*+F>^l)peL3_xar#8E>Y*#+t!Ls}rnW`e>5)H(*we?`vXUn8*MME6`XEC{$o)j)GDM$VZ^m1!;vs!U2>MK;Z+q&jHjg1?3Zv zPEcP86ndcE7^qYNnF=cVL9Jj=9tDk#fJz!j41wGV@-=9j0W|IeG95L2gW?!lL4H}IB=?7uZNE)bp3d+O#z%6W0+=KcL zp!5s!HzfUnd<#0s5#&}-ng^ZIya0T64k*20`Vds=flBmA44^S9P%1-&{RRe5UI*C- zDoH`E0QEdTaRiA8kRL%I3TiijPB#OYgMNxM$hV-f4^$Q+_oZO5yAGW9A$B6l1Bm&M zRt;zb78Eid9U%KbwJ|7tgTfC|-hg5h6eFN~2e~T>6wZ*Cg4qqCSAxq*P|60C?~suU zP-;eKY_Jg6>&xB<5A2;?$I`vYV* zs7?i$2}-jdJ)n35m9wx`6(~eOAqXm&HiE}gLE!-^n?Sh$RQrHxYfv8_k{>~F2XZGQ z&p=EBjkm(aqCxGQec-#bK; zWkIQS6V#`WkycQD5R?x=;RP9|gtR?Degw7TR)bZ;(hw*eKwJpY14>gM3`$p zsO*B3YpcQQUO?k;pw=vC3PJ_WTqL8%7P)&PyYg2Dk5-XN7A({_W)Kgjx2P{|2e zi2xdlfVKKSxgKOX$QIbBBq+r|e6)fAbn5}A7Dk?BMt41=ZUu!isC@ux-)v-9$N)(J zpppra_CTY%ps)wEVIU@eayuv<5d9;NUtsAP;-cx`8=@iVLE!|7YtYRFpi|vJ?gHH| z0J=*T;s!`R2oyu0zAUJ%1}eco?Ka3NbVz-&gaNeL2b2;)IS*1&GC)_cLrPRo%!5jL zkZnuBVE{27R3|S1*I%Hp1jRh4Zd}Cxxs4K1lY_zlRIY$*h0NJNQt~>6EesITK_x4w ze1O$RpfOfZtq1WX$km`W7sw5u`3TS$C8(DM3L8-B1ckyHa8DJMTVXB*m2;5%3d*0L zbOP#Yf>Ic0#vRn-+RgytfkGCPvOqBg3VYBTF{teV$uppqKjZ{-P~8m*o&DhX?GEt0 zkswn+X$KTC5L>o``%R!S4N?+;@&>3C1-hvXl-5Bh5|pPQZ3<9)!*&mVQZ2~Opl}44 z2};qR)iE(2)p9V7=zIiR=%tzQMLNe11T3tD#!87*lA_d-Ci1j@~jH9_hOpcVqCeg=gn zXl@5otAk<@)FTGvn^g>;xeka4Abnln+z*OJP?`h98K_JEjsAeb8`LWSxfYZjK>2+o zIG!Q8vD@Fx0BZSz<|`m69CV61sAT{ui9xAn1)BYsGoqmJE!avcgdHFkfX2B%BWj@3 z0Ll#@b3v&Olv5zH{g4t6G}pTXeE%g#2WSlx$fqEGfcy#aBl@}2pmc@qD`Xo%Ga{Q9 zKxr0KUw}del!ig>0Og+*43KdIhzSsVpu5OHt1>_}6KLHxHXA^$g2WqWJ^cm-P&`5Q zi$P2R$v1*qzYw>BN?}lo8I;2yD@q{h5TOLp0WlHO1_SloKxrR26ecl%#t}hn*|iLd z!8gBwN+WEp1C_lHvp}O7ptJ}oRY9dDsO$mdN>Cbx!~v+SgKP_^R0EBtfNTe)P*Cmz z#TY17u*WaL<)9P~xoZ?u*Mq_t6fSERKyeF8(GY)w^nftvMpj4*8WgvnPzQx2sMP=p zJy48+>M#(E&7U9>ApQik!$9M)AUhE@^n%x_!AcA4uE!Nt>I@AGkbAsQa~<)qfN-5U z186*CH3O(*X@ss<1eFq~CWCyu1X{w7l3qZoFZY4_?4Y>^P%XR&DW^ixG$`$XauBGz z1hrW}CzFF#i{KAcSbQL-50EQC@d1e!>|u)VIiVZwA#sJx6^M8Nr5;d=2b6a}sRYzo z0hM$hpRQ#f#spAn7L+zYZ75J%5Y+C5`3ckmL%o+1**;KP3{+o&`kjzcbS;5$6j9QE z+5@0=BE*HDFah0kypjRrGtj6usMmna=OC4kRE;hCXMjrqkWWDEAy7Pm!eKR5SAlGT zm;{=0faLpi(A%6rW`kB}K-T<$>bo7_-J+m8k8m+$9ucy7x(Phb1u8Wly+DX6LrSK)nypND|0C(3}s%?;y94Gj9&j zjR-lAIWRxM?u`JAZo%5wpuP*FCkkpkfnosNub}t^-K?X_0J*abdA%=odqCwFD5Zni zOdA<=!8c8V+HOtYogV0QJ#~Ev@)szLfKmwT#xhV%0ZSi{_#@R%u#f}g4M;ABnFk7A zQ0#$5^*}WsWG6Oqc?e0-pmpn@eRl2Oo2Ehg@Q`nQ1l3AY7(h2ngH|Ab)PYhK=)MTh zebAs59%y_SwC40MOYZh|^v`d%HkqvN(ay-vRCI0`1BM zoht=8PX)BQ3v@ye=v)tEJ)kodKW+U*Rp!S{54 zLJD%LHY}t;t1SD#_lSc+9ke?EbWa9o1Yr{c=vJHE(7k@3mbo1R=++<5YLyPC`Jh!R zpuL3i85kI_*^O)q=;redhJFUnegM!7iy&WjKwSlDv4U#*r3@fnSTlfjkAcR(KsP0T z=6FDDP*BQQ#{gPW2I`Z8(kSRI73??EfM(`lxd&96fYK#s*BofH1GF;?G>!pUzXj@# zfa*z5`;UQPJ_Bf;7_{#WGz$P46#>}-Doa7VCs4Vvn*p?D7i2%E)CP^0g2p95Enrai zfOLUY7j6cZxuE_S$jzYEBd8w+au29J1DzKDx>tBPIEF!{f=XV{xDF`)fyOsMJtC0p zpt1%siU2CzkXNvP`gx#v4Olr0@e9b;ApM}5lR#w`Xx}nurK19aJ_9Ikfm-t*AA#Hs z>B)oA7_tjMEdZDz1r-y=0 zV}YE?4hp%2;IS4^xM5GNP2f@jlyh3aI}$-VDVrHUrA7+_s4NBDZ3S9cqrjjI=C?B- z%Yyb*H-Jl9NX`be!$4^a6sMqC8@3_?H8eUHK)cmIIR=D5Gx4DIAhxss@*%Qb(EJi; zoC=hBL9Gl>e;ZW4fcj^k90y8mkezmu7*;T>X8`rSKsgN*`=GWED6Q@X?^EoDuc8B` zc!>Q=7(k^0B(u*HI3q?ivgx4O612y>g`tlDw7;_t zT$lBL>&|%$uzU{lD=6MUc?6U`Kw%CVdj<6|K`mg=={TVC&Oj#hgIltoQ~=t`*$u8Q zL9q{7Vc!lewL!Czu=7$txkjG>6pP5ByBR=bALuL#P^$^l?gRB!AR`-~wgqHP0W`J+ zD#t*he~_^V(3%F2dqAtOK<6cb*1IF}H*UK?Efr8)fpRoznXnnWz8}>EuoE00c^#A< zU}N8)@B#I$K<)swG5WwYN)tF$w~*j>(5gs~dq6#w)eNAMFCl9nK{*39vJEOnK`nYv zPZQL;0*(2AYAI0sfcpHP`4UhM22@h^F@RDKtkeUIMS)65P=5lHBS0|?OBcwoO~_P8 zY=g>gP)Q9+r=WYgK%?WJ`~%60AoF2m7s!R6+y&XiyM$p6c)by*)SJKn8npnWCQ#`Q z%6YJI9#p5}l0#21pxt+%v*kc_IVdNBTHv6140MwnXf;2mCIj8yzKQ{4(|YKsMm`M2 z;F(@zRiK&?RDOff8YuihI~q{a5@@wH=yWO2*-)UnfI(piYL9}}B!k8r5g`ET#enJ; zkncew#GtqVg#u`;4X6$PxoQQt9O+=_WdOBGLG7Fl22kq?bP5D0-+*?e^f1h3n8DD& z0BZa8fy+1E_BWYB#iiS)kQ)pc)?}f+`Ow zpY^~ekb_RP>SI7%+W{I|1?4r+>VHse4N8s6p=v;>5foaGJOQdL2 zON3pZ@&uGpL1`V-+5qukDHyW98dTeY)>eViFen$n$_a$qVZH_3Bmg>n43dU1^?=rF zfyTlK%Qu0???G+?rJqUQb1M+#AH=>sa4i6ug9D{b&6lk^xGUErTwLrNFaz7+wB@;z9L&3xgg5x(uvkhbaT< z34&Y->TiR_5g>MeaxSItE2dMz9f&kU~puO~< z`V}+^4$5bsk{?v_z{+}1yAo8^!t90ga223C4p(3%ub zUug{kXmtiiFQ_LE8rK8ONkHl#(3mW!PYZGzG8~)J6jB$OV~++RlQNCW!C` z_2B~;+!W44~6SL3=?Q!T02$+6)>` z0^L^(X-6_JgfbK}fKFBPVaR6y-7g#hKHo8&0o2!1U?^wEWGG?CU;v$Xo63;LPyoJ* z7j&*CL?#(5=fjZ70JgIW%tzBz2n0kq;s0erp+tZo9; zx=R>f^4L-`=(HkG?f~_`kn0y@aZqjmmGle@$fC$~2zqG-O3k1(T%bA@)Juo-3_vYD zP+tPH&I6PJKy{rx0|+uOXfOmZ7&9m^B!O?#2HmNh2W}C9ay6tM2a53t42YHys6^9a zK(rh{r6j2IL)7*l6^Py}vU`c`ErMFAptdQdyNERb=4#|R4$&6@%>#jIAW*)9sRW&4 z4LV5{SqG>U2Fm}SRtRjg3R}4l%#Z^<_fvr(6MXI{=tR&Wh9dAt1?Wcd6!7>2=p<** zneCv{vJs_nFhc?OEW}I(&}oPY450l##SFy^nb4G70zP>wodJ{siWop4gFVJT^&+TT z1dWs-T1=qTO^|jUs8$7~Pf*WcH+at{s0|BRhX^XULG$*Ybhr&ViUVoGgUSFD**MML8~p+gInl`(K*n#0BCFuR=-2q z6rj-tkWNs~6SPhXl#3^VcbBY$w#6Vb`k?+2D0P8)dZ3gJ8e0L?BA`-;kV;Tn0JI~| ziGhIuH0}fn8PEtAERTR%B%t;)$PJ*`W6-D;=)|xthHh{f&Us1FF*Wdiaa zC^v)r3+j0xt3V!ILKO$OA5@!yMm&&Z^cj%N1l7TiR#*r_J_9H%fX+Sxoiz+P^A>a` zMj}HlLn?zl17c?wC?r572&_IuEu}#54Uz?=6v8TDt_0OHp!fpC4#=Ox#Ve#_hm=5& zej;eKF{q9Otr7v9{{d>7f?^FK?bUyU~U49 zT41ik0bVnahyRPzG+HfZ8FTmWnS!Dg#Kghyip4G~_&L(8`UA4}8)Oft6;#5YzyLZST7jV$+VX+4Z}P#X zEh>OpLLe7_>YF@oT}8faca9`$0i=BWgd;*b(RiZ(9b?-HD)cm_fI6 zf=<8%o&FBG(*ULdWGA{WK%-oso(%&7$W`dFp!q=1+##ra0`sF1TKfj#3(!gSkbV(p z4hFgX1Cd8INr8cKGe9S-gJL&`!4M;65PtGuz@-M+Jushv&Q1rNst&qo64M8u7B}c7 z8j$Ir-d6(yXx0ca7P}j~s%!%TXl`u+1E{A7Dl6tdM`)HXY=ZXuL2W=#%K?;AA-M?D ziwE__ASEfJ=3c=78ubFL;02Yfp!LY0HYccd0F8fwN@~!o3UOzNg35Q$3e`OfptEv7 zeK|xu3^5r}lYz=+NKXjV;{>&9mok9*rl2#%KyC!pRiJh=Xp9Nd^`O<}pcWIT6^J|z z0UMtH)#jicCZrV&TSW;fIY8kI+MP|zzH3O!9pVB|Ul4ixggh5?FhIHg4P#FX| zb05;v0>vRUPV)whYlG4vsMi2mLjW4@0FCm_Wq_R50@{fVx+^0UTq;6ZIG*4e_b^34 zH!?6Vq%$NjAWqN+m4Z3omN=v?3ILajl?=t;R(J+OK0`SJsMJej0JWzvxSD(z9t0i9F}x`P1JwgR1`1RARbjf#Ti@Mkc9 z#(g>&rZB)x{{^j~=wN7Ln9MMfp@U&6_%vFOTqDCQhE|3yhDi*d)c_3OF>uh>IB2~F z=wv2Dh=JxwKs5#Ewt*4`M9oIsx(SqKX;D9davkM$9<2TcwWs$mKuRr8x(BVv292bE zS`?5y#Gnxf(D_ZExd@0lPzw}P)`9X2Xk7qg-V(G&2h{Qh?bQPHq(D6-P`d~;I=KbB znhUfm22{3!@*QN136$F*=TyR0!Gp$#K&2I^^aqRW-NH6S77e(hdgIQ=mQsXpJ!_&4KD4 zP`UukFM-Si_25AmRPTY}4YD^I7FVEsagY_*pc807>w-XQjzHxlXovbl@K`FS4hOB+ z1-S~;dxq2$p#C1nt)O%Y3Q1620HqJmj4vpjK|2#*`&vOgJW##?jVyxP0va0x>0ieH zI(GmxG60GNNE-kWzMy^?NEJvIXmqIyyuusgf6#ghP}%|2O`w$tpil(Ozk*h|tOV~1 zn+Q&Cp#C=~kAn1oc5Hyc2bAkT^_T(!C`W^K--7mnfO_c-44`?!1_n?ZLRL3{N<`2| z4rm^+nE_Plg5nj@+X2mqg4Q>IT40b{Vlo*(dmlhIv4HMT8BXnf>X!GQeoHZf0z)Z7 z9zzuq~ ztLy-uKnP03^BH=PR6@=t1euO7)tMm!JW`g;0J<>))CYs~xC|Jw8JrkQ7(l&@L~!2> z6#t-kDNyMLDltK+9#W2jPH+SDB9}vFz(FJXpjA(x8GKOt22=}y(gdtmRRHeO;l9@g zl!h>G^Fh9&2Xxy}KD7S`yQc@S`UI4RL3MW~Lk>d@_$+&nX~hhno}U{7NEGA}$k;Y$ z)Z3k*6x{a%wYNbj9~43z44|{xVXY`oTOPD)2P6h+(}U*GL2ENXV+5eK1L)i;(3}%! zv<`XQB5XAyXqE*ur#=UKf*!~O&>R?K6mSA~_6F1zf#kPt22eQM$kYz;6SMXW;$qn1?cQ0NI4Cv2S9EFl`Ww19yFhZ zy)O^SS9uJj3J5NQodzB&0qu{1*b0&Z#S?%GR~uJF6fvsHTF-a8OGXv~CpC_5+>50GZ+03f{*F^7|GB zP#*`hQW{kHgIeLB^*f+a8C3g%+RC6&f6zz~s9Xlk0fEW~Pf%Z6nV!n?7 zH0L!FydD&E`Xgv098?E_<~2dRcTl=*1+UbEjah(7I>>5%P|5_A(4g6{ZiY7SsuJ}0 z1)aML8WRB3uaH%2pwb)E@&$zm=*|UD>l`#X16n@^s{KH7OP~+{x!WGR1`ZSwu#+bs zvY?hWs5KAj>wr?*M(|!;P`rTp7@)Q{s6Pj)FOk`xv;vAzkd2@oC2A`l)DuA+H3IcK zL7@*i`3SV)476qi)aL}{Qqb89uznDzEe{#71DTA=FQ6O+T8jmX2as;i>@#TnJ}4|e zwt(_GsCNYFfr9$qpdK}-rwf@w0L3_HRuj}}fbFx>U|0j50U^yK(1;jh#}}vv2s5J* ze8wE8uM9e=7UV0?T2D~R0y0tz3eUyhGZsK8eF+07IZU}x|^dcu&^P@wV% zl9xdJLr{!@`ca^^4Jg(?ITp0@9h3`@ZwLbU9<<{Lv^ID>1E^gK>M?m4~1d2AU-V?GFWws({Kz$i9A1c?ilwYr%CPq}>QBA3(Z5 zVF+4_3Njbe3k8)}pb-~P+5@$KKx;)?z~wQdFAN&5Kt3xLG-C`Z)j)HM8yG<2#-MPA zjGsVKC1^(lsD}(Gtw1eNQ12ULALz7LP`p9fprCPFkY7RLqoDaikU5~1EU0V)*$RqN zkWP?|AU}g>h|Qo>1S)Moeuen~{QZ zS%G?dkk|y}9!M<+8vOw6Ohi@-s;OYBrxh6>;RjlQ0rDs0j4V{sK&}I=vjWvgp!0Dz zgZDBcn>djHR%3!%2@n$@v-_}=4r()Q0-x0a3Kvk{5HYR`+Q*g%?G>glfLw&!Cx*1- zL8_@S52?VA$dCsf*)9OjD#B(&LF-XK<|i_MZnXuCq=3c&sBJf79SyE=2hi#-&!D$SL^<_2@M|sI&p)3Q*YuI>~w|xZDKgMbPLTVoVU!Vnj~4ptZjY4F2F1e*WN5 zm?DO9@Y*HBY{c-JX9tZVfLa8&+Bu++Z_pSfs7?a)^+2T*X#5uxdYC;xP)s_4?{`*U zfTikUhEg;U&}b0o%ofo6KV~|oT^fU&H#m4&ocO{W6uz+Z3JZJmlny#c0W!k_Q3(ot zNPL3YQJ^*hsLcc^qakqxTQvk}tAgSYR7Qhpc}TkqRL?bHQ-Cj*5fs8`<)9xp`i z-zvaE05l5#+C2jajm_YGG$3R93eP%9ZUBZ69@!QvJcBM_TGX90nF z?4TS6kpZ=(VdEBqw-ya%aAW|Tst%fK2JLVKjT1vg4ncDr5ch*>T+sT1;a8S|#=Ic) zK5?xH(98sA%`9ZhJ_S4ihg|1_MmSTzEB8Qaz(BKJpj-tS-v;%9LA?u5FACD91Kq3y zYOR8LMxdSTp4eHZ@(kpBx5RxWA?O@Oi2_AI{>Y10Ig_;#ikp>;B41HZa_thctBPgLh^Mh18AxNU8Pu)<&2)fPilo5T z)e#qu#IB4}U_fn&g4V);ZjlGg2f^B^*juNdk#^L(ltHcRNemOgBjunm7|`h!pmBK6 z*bS&>2I|LwZtF!aUqGb~q}~CIXdy~|$hoedQzJoR0HB@jSYj=h9I}I(CtRdUk=_94B7plbPwt&fqgVrR0<}yG%Q^;r| zq>KiQ*7_~pm}}Jm?X%}9pL@xpj$a$ZU&vi(ZJBj&<#F8qJaUDCn57lgv~~@ z{|WaOK;eg2Nr!03>;bPs0rh!7xdn5z9LW8kyagHy1do z=7Z+$Kr}z1?VSvnLgJ%63!1I@&n|MKS0a_z~{e&7& zo!ZL)@*gDhXM^(!y4|3hfmxeD=3GD}FS>eAY6a!Q28Jo%edZwjeGCg3b~Aulxu9~Z zmH|=ggL=P747m&i;2WMm=YA+K%muI81Kk`98Yu(SmY`6Cq$UOMDt(Zj+QGg=jv-Lo zgVInx1L!m!NLkSdPT!!M0CE$kbeIA@#}>5C4K#m3jO$@>h43>du3_r{P-iG6gXft+ zsTwrf4@!Bx;8GLh1CS^&p$!_t1?`;yop=q~2LW2=1RA@Y4NmzJ7!<(saG*1gK=}|9 z3K0LbgLe_Z{0oX7&}=v;w}AA3$_G$fql@=5fK~>9QW2=E1?45sTpwuNC1_VKNEax5 zfyxn(k3eM!C|@-(!14iT{TJwz0mvGPRtC^aC5YX_fY_l6nqvgH5tKea?Fx_$AlpFc zV*>o1L8gJi1=QLAxfxU{LDYisHFBt;)-L#EU@Hz_{(|@z zB7W3i2(ehXzVxpmYt27i3+abOwqcP%0t5oC4)$#Jn&hElg%W zZ5?0>Yb$WOrjcPb{7f5Aozn;Ig?GW*7O>Uqpxh6dg$MZ%R?;KqI8;|a(hR8NK^4dD zI#61|T=xL75tMIXCwzc%B+N#Ht3crdDyu-@2%8%P)y@!K5mWDgP9*{D3S7Ye8G8e@ zSwOREpt(%Y3>%0K8S{ay1B3Jq_rXu@hm>8QU1OkC!Jrl%s1*dN2|#5wD7HZ{3Tbm8 z`vNk@1DdH{03J8(2cJQ`7|aIECV=K|K&xFrJyB3U5#$Qch%2Zj0p$tMS+Jm1(L@H= z`ZbWw>#f#L)bGN6+fL2(bd?E}<<0gZ`+=GQ>uf}oK@P7RD#aU z1C3;DVt~1@h@p-F-CrOb2zPlqELB2t_5fV1YcOZa9IY6V398@{lG3rHShGiV(S zBql&P3DW9E_+cMXe1Jw>Kr;lOc}-*$sPPFpc@>*4L2JAr;X56CM+Imc5H#-x+N}xd zO@d+{bbA75h7dAJ3bG5-Hd_at8N+Wo$P~~T2GF_(h)tmQft)`I8s&lX>_Pb$6!M^O z!RAKLJ^)axfP4gsEl^)*EqJaNv}<$|10)VWB^xM*foy=p11R1>X%ZA)pfn0fXP^`W zibq69LG~&@!T@w<5ok>Us80>T`x#(&oPf^i1C3UJR@XpAAwZ)Kh|~-76KL!h6n-E# zg2D`BAE?&~Nh6^1&3nK%rGVlXlmkF>si3pvL2F6&Gk|gt$d{nAI6&nTNCo8d4NyJ; zsfEM=D3(AgAV8+;Fo1jwG8xn_1MRW`-9-coC(s=HX7G+n(8w`J&prlFZU^N6&`2=o zP7ly(5>OaIYy-J`IRj`_6vEA*U9=!opmJd;cr_wu^ad1CpmGy5MhDUhav#VBNQ}Tl zK<6ESM)X0lpjd|Z02DW%*awv%pu7dr2lC@~@H%zaN%SCJ%?0;>Ks`KAA9OxA)qz@s zE#O`gNF20BXCn9nG*I0QX)A$RfS`5JkW>dT2Q(H5nl}c85ojkCD6Sy(f?^2dUdV{$ zItI{c7+Cm&+zlET2c;gE&plZ+27c^c9n$t)44RlKe zBsM^0GpPLs;(@{#RJw!A1FcR1#XG3hgSZ!z9zd=E-3GlMx=tHXs)JHB=p;9gogjUX zcmnwe6k4Dg_(1g;B6UFSoB_EAR8oLa9>`CSGuS|DJ3zZOKz4Dt_b6%#0L!152IOorX%3o1E4DHAlN2(lAYzODt2#XwR9EbKtx0xI7?c@k77 zfmZ*3)-Zx%8zcw9pcsR#_X6pL$brHHl-nTp?;v6Z)Hed<8qgXGPNR++M#U>uyzp0PEa`sYFU6*Zz?cgo^B2r-2kOU(47|Or3uWvnEnRc8VX8d zpc)>O??7o45ptlFSdcK;1ddx+Jq5bm71Tclxd-GEkc&b250vUbav*nrN=?xHISWMv#sv%@6`-|SppXOQ?}-eceqApE zXy*YU<)gb6=4+4{pcSSNKS0VxP`Uw~RshNskoE||*P#2;Aa@Od!V9#54U{7{flm)Y zsDh;`ke^}hf|O#QGz>dk5OhKmC}cpTF(~zedaD6KuTWW(3&>2^~;cg^U?M zcJx9wY51q@1|pfU|qLqOP|JG4M^FAEqz?I(~r5JqjWVe>mER3YI4 zib04gA-9u(T7-~P2TDg9!FS1l%0keX1?X1R%?yy6xFO-&4nCs@k}E+j2Duj0UIx{M z5IaDn55&K)G7*#;K(Pr*`-s*CNH-`PK)DAwZb7LIRAWPOJIMEtat2h#fcmhI+tfg1 z5@=Tgs1*%LHIO_7s(V0nFvvzw{)4##)XoK^RM1T%TB0HhjJvx3T2ke|B1cQkBZ z*v|m!r+{J{v|AN+XE&%U!BhcC|DaU2pJ6pL-+*c&(0U|D?gf)(IY8eCMwpdJ4A@+je9F+Dz=@%3>pf&}lY=rEyh1@a@xknvRpMh#t5DOIYAU{F+ z8L*lO_X7qHjs}%AqHAU0J>!y zH0l5{36dirxepW$p!x@t13=|9#8l9D5NMq@Co zK&FBG2Pzvur7LKc04S}1?1k*koXpV707?U(vAG8D2p1&Ak^KP*O-QK1!U42{1yt{V z`Z}N$+aQ;K$~aJ87(|0o1SqT^eG^a)1lb5N8MRLj2?vnrpuQ7ik1(hY0BSve%6wQ^ z4$6C=6b^|?OxJ;Y2ucN@n{+_+48%lGo>~sREf5q&pgaspYoJ~Fuzooxt}#sm)hVDp z9H=b?$&aA6EGPwm%z)Sh3T06L7h)U8*C0DV^v=bfF*96sBpm}i6m>jI#1d0t%4uZ8zK{YO@J_O}3kT_^u05qZx@;AsIpmYbS zyFsZ8(klY>zd*MtK-Q{GVgQwnpfVrQN(PmapnL%;`8R-X$%3U|Na%v%3v`p$X7D%| zWNsCdYeBUP$gQ9h2MTM@+1emJC~csZQXsd1&J6&yPC#WiWVJSEE*0bkkZw@efl@!{ zlmk%Ta4oo|1@-ViB`c^+0x6#nX&KaC1GP3mB@<*M1mqIrz9*<(2s%*$R3bq90&zDe z*Mn+Nh&ZT+2#P(>*fywa-vi!z0?9W^89-qNN>?CXfl3BYIi?35*@3iCL7@%O4XTSk zdO-Go@;PW-I;0&4so`3{cR;{OR#5DN&LRM{h(WzkkPcAFf%p;8W(N5Pw0aNJ$65t$ z3xIS&#+5;4fy#VPDGeGygw(N+`neB$ha)HtgH(Y+ACxjcsS6Y)TfruQL_w(>R1QLV zG@!JIISK{xImmY)UxG#*Kt2SuH9-0ywIHPD1ad2=420EApk5WEt^nmv(8vm??F~`| ziG_XOJJ3LJ07{FXHVP=GLE1^6(hcM`(5S#-2FUpzu=_bdwE!edfN}vOKY>bR&{=Pw z(PfAzVy_m+jUYdO?iUA@f1uP28sh<#(U83gkXVPLY}8T!6r+&*4RSZgN01Q-NWT}< zx&y@=C`W?IUQlTR+B2rW07{dv+7e_psJsHX8B_{_;u53_WCo}N0QnU(e!74GBm#+L zP+tS&e^BZI=>eGzYQ2EkRj||uY9oVM?jScpTn5S|koj~_s4isym2;pR2?{h+=S zXlDzkO#@nWhsaH^kkbL5j|=iGs2v5$W1#Q?g%zlb0Et1u5L9}DN_o((8ORtHD5pS5 z8Bi-9WCJLVtpJbntz`h!M=(1;Ap)8=1-Tb=O41r|dIXuc3fxZtwWroF>;d2J+|2;G zD+iM1Kq+e&0Yfzp7a z1t8TRcR|uSDD*+&DIj-EVF0-TRLX<=1`2IZ?;DiEAngZGs6c9VkV`>2K&}C`At8AZ zw88+S29&ZuvXGtOp!yax8UP9>Q0PMVpxOy!8z?LwHvnQE*$25C)boY75f&ey8*xD+ zf}k=E6dIsV0;PA5zaS}R4R}l&l7B$=--7l*fm(8)8G$A68+t*lDUeG+`2`dnpp*iN zUy$EHZFfl80*!2gRDseZs67O755#7WD8$#0Q9)3ggJK#~u7L6#hz|;Hkj;>I1?4bU zE(MMEfLfKHS`Ac_gK`L{T>-M4w01snOCMH-gTeyjTS)!|jhlm90dg^@B?gM4Zt#vu zQ0WPh0o4hhUM+IF3Z?=SHlVT_lxsn=RiLzltga7!CJiWtSAo+YDAj|)7t~t-*$V1& zf=>Pc)fA}xHBiY6%7>uP2Zb1h1C%R~%VAL7LAVv-KGabTkR2fRf?^GE2RUR%07xe&rXcpfW^IsbMHL3nO=SiQ zIt&J22=W_pI|CF#p!~O+0TlBPmu-aJC$<}WgEPczP)vei5mbwU>OxRVfXXpM9~WXO zWYiqgM+W5uP^|z;zo1??C`}^gV^C`e)Xv+06jFT*puKmHo;fImfJ#VEDgmW>Q0@b@ zv_NSXl;0qs2`WcHrNtibhz_Xr3UM!Jq!cvj1}Y^%V{4$fY)~r+GEWCeYam~*V*vHS zHiOG>hz}v*0V)?^bvDR8Q2PNC2Oxcr8As5_9cYvU)J6f7A)pih+M5ir4-|@^Gr~ak zO(J3k(pCb6Kg{Kz(tR1j9tP0)`JjF$qzwbA7eOHms%JrE8z_f@%65=DKqV0<9Yfe4 zJ)l|`L_^9l&^3Lq)vmx3FPi^P)-A_rv{Z? zpcV&cCK?u!ppb#=)dl$pvkwB=jSK44L&`glnnf6C6l4Y{{y^@5oQ41jJ@lFpBnB!$ zKsPsoau%qs2I?*B1h1t7=?A55&=?vhHbMQt-AL&a)Mo+JOQ2a{kS{?Y2P%_5xfzrq zkn=3)K3~x2HKy+L0Vs+^a^qpq(=er3#eoO-JJy*k%F8G z1`2CP2!P~4sT>rNpt1nrCeW%Cn`2E{ZeeM5Swp!J!cd6$}tRgHka>7bs7HN)*seQc!+h0lga?l&(Pj z2ic5>K~VgIM!k_^5joW(QYWZ=1Je(R5zss_q(%bO3!t?SppqMumOy?1xdN2FK)AiYL&m0-%#D z5G5oit*v7Kl`gQ91hNO@B2c)1Vjoghf_R|P9aKI++zHB8pb>rs2GBYw(5gbvNfO>zh8G(Hapnf;xBnwbF1gQa;4k{HvyX`@BAE=EA3NKL3 z1=Spz!RPowYIp3Z6Euzkavvyfz-E*|F$ijPfZE5fUKl8JKzk@bDHqf}0F^|bTm#A( zpz<0N+92COJwi|#1BEk43>3Pcas$+Q0hLvtdIZ$F1C6SH${$c01y-g*$~sv32hDOo z#>_$P0EHMRb%XT5@(ReOpjHPY_CR3*nwURDX4`6Sq}os0g&<^|EcA&5Y zr7cLC0u=h7nhs(o$Sz1|fMOCNhH5t`6hY|)R?BjHG)4*v8OV8epb=_F9D!?DeK;yBno-wFBxfs4~6&B77 z3>z6Btx=F4VR}KOEhrq9GHeC=6=DM@e}G&9%G)4Ufl@0dZG!4IP+A3r1SocPFo046 z$UM+kA*h4`g*eEMpdK+KXM#i_aRAZd{U9wL$hZ+C%s^!y$ZSwu2r?0rVnF#2 zl#W303K<86lmLI+gh!2AJ`ggWAZTQ4dhw2hG)kLLcITUIvg(keQ%xT+Of++`@zP zb3ipZC@+BW1SoBTYE961GH9j;6c?Z|B~Y0P>g9l32r8K%`&>bx4awsmy`Zuhlm|ib zpfUy2{|1e}gTfqSFR0}SD(4aIn!o^RUxUhLP#l7C2q<(xp##!`JRS*>2ZbCYwLx4A z$_b$G1Em2_T0oc!x^)6nD}YACKqVJwY!2cRQ0fJl1F{R0+ZKW64iGvaJr%?qdyw=7 z%IhHCfLsd7DUcB#(3$oie?!`8pwbys4uV1&lu{6eoJgt(UhN5*u>z$E(A)qh z<$_W)==3?r{2liCA5{85^ng+rvL8UYL9q|12|(ilkopXi9~U!#dUv3b4b&b3g(9fO z4{B#3${>(lkSb7G0HtJ5-2p0pAuBOK`yN1NyMbDqkP}ZqJ8nQ{t%FXc2kox}nF=}y z9JICzH0lEK38+k42JKy=-UL&}kik&LP{)uBCPDXFxHGteZ?unR0Numj#Nf-|$q>vC z%mBH+AsDOo#&2Afb z=h$rUEH=71pt=H7lI&&xnFuODL8T<<_E$(ERQ;2GAHa$PQ4M0-E20l;e=t0-dG>%CV604>TJBJCh0& z=OA;JFzjLgjSs`@0rhHEfLBU`ay-b_pdJmV)d2D{DE)v&5aR6#rfy@JiJ}AsU zZ3ftCTu?ZH=Al4+Lr^ONqzBaJLzoMy2|*zMs&PRj8^k0?&5f`N)IJBDDY+F~ZiC7> z&?*5?n*oyAAbtg@2lY1Af_v;s89;RcXwDgQduA(mmn%pF)J_AHpCC3Q)qz$%fcoR0 z*ar0iA)}CxmLI4lR$zeK0Sf9nfa)R8nj%p9733m_uR;AHkiS9s2$Cv5p$BSdfm&&x zv;bm*#`Zxz0l5h@E&v)|0qFqM$e>yrW&*@dpfN~D8x!P8&@3frtpTVe2e|>%jsmrh zAvH57&4JDX0M&$`dKi2f!qX| zy9ebJSltX!2}$Q5_kvOrXlx49`UIH-DI-B^j6k|Urh$A58gT)Q|A2OSf@%s-tYL;O zsQiZX0wARXsH6p%i`d}+=|6%@2Du4+&j?H}sE@G?d@2rT79X^i4^*dudK92gfb^k2 zaR`c`_2AwhYWRptJ>wYmggYF$0QA&@M($s|GaB zw*cI7fUG0}l{Fy!uyI9L4-68HptdKZcLwt3T4;ZSfdMoc0c)c{>LpP53#z|CbDyBr zE2w0H#5O1|fyydmKSD}Nkh?(j_)_Tof1tDoa?5(~jxR`9g3=@;oq=j=P>h1+20B?GxCy8{1*Hm53kg*If^1V@ zfXy2jfM*jXL)T=0N|8m-eHb9~LAe%G%7N@dxDHgFg4_=AIkH)xlW{>~{-9npD1KqN z6O`LQr5nf`n7JTRKzvXQ$Or2tS!gJvc{EdQE-45z|fLfKP;SS1OkQ5K{D`>?! zXbuh%2B3B!sC5nsKT!DwI+p{Kt3V|Pq!$Cq8?bsB(tZHV>Vis9h#JtD%b+?Pw61L_ z_{IZw@cHndJ38{9_Y8sbfl3$9DYlR?W89}w!|v7v)n1U%N>Dt4R#byVPe5ni^fBPu zFOFz?f$l~Fod}i6z`)?n;K%^Ffevjp}!T?WwYw~h=h47v<~45193;2Y?XPdeTX z-d_wUcR*z`sD1#Q69?%$zbCz%fPd>pwgK1JOj#mpc)Ed1E^;JYb8N! z0L3+^L0LYXWNZfO;RGwg#x~1Mxw1 z4yX?S>L(+w^#_GNXnp`RdJSr4f=V+`{D9^wK(PxMv4GX-kQ@mr^+5BA3=E)D4C%jv z`U#+14^shZfq?7+%_SprgHkf69RO>mg2n(qwtz}Xm?{t-;jEQf>goQ z-GcV}LFSqvZQ1GIeVicIgK`Y0jRW!(sD%VN5er0vYJ8C0AlD;WeUO<(kk3J_UC<6D zNDTrCPi!KP`W|EssI9k*0aA~{=20OfBq;YmW*tGbJ*dur_y?pGGO7wH(Lm)RC{KV| zETDGc9tOz%a?rX~P}vIVC4oY3KXex!!ljU!3bdjSQhtC!6;uv_#9`xnkdZ;;5o3@n zq%{u;VUQlsI4npXWR4eNFQh#Mau=xW0qTu{@-|2{X#E4ItOAAn8gL5%x$OyRje%P9 zpq?S9ZU&hPvIpWj*gPDl{SCXF6O`gWZ7PsmkXcGd>l>sCQhLB*5fnP0HWsMo4_a{s zTG<7PQBVs7RJwqAS0G)mG!8KhlAb`R0n{r5m3yFA0JWq+vj?Dd7i3-tT^A@7gX%2M z3=<@tK`RXl0lN9$i6Av7mM{s0{(?7enG4 zG#{}IoX?Qmz8~DKg6RdVbX^S|B?8TLLE5z-7wlmG`4QAB0p$nKJOao?8^LX7kefjv z4QlU!>;UyRAu|t<76_={4st7K+yayiAZ-Q6{wq*?fMN{R+X96wC{95A15kc}Iu-O zA0$73`~`|ZkUK#+24n|FH>_m~^C!rD$Q(FqUplDA1{${o`3_XVf^rEcZ6Zo85Dye~ zkaiwO9<+uPRKkJA20?BBxd{}SAXO{DVF$^NkaPvAZ#IB?_#hvHTnE~l1e)E4%oKul zAi!$G76#Bb#$*Q2P98-D5Cr9DP$}2|-XFYz0d#`S0tOJ=$^e0&_=c@*1kEmhTm)*j zf^t5nO$Hgs1eM{S&;hw&Im2cKQ0~Xxc5-HjWB}db?aC0(fZPL%X9!~OWN>HjUIcOOs8tC{&A7t`U(Xa|DzZC3wF)SGgX&yR z$pFeXpxPOf;vn@Ts1yRF0Z_UFr6G_TKxqop@&v`=euk~^ahuUlqDLsfT5OO~Z=g~V zsw=3Qjv#GLi2q=v1tfncfYCe}pt>GZ2ZCCJpuPsEupogF+S*!l1AR#TBTX0&4GqMyWut3=#*~3+ds4Sdd*@5Ep{xe?aX( z&~6P-&ub^rnQtHyK(#Zdbq=x-bPgZ`!&C;)>>p^2Bxvl(g8_23Ip~yg(4B~&yX6@e zrZIp{76q-uoCH2K60!pxaxNdJj|&O|P}u>ZSAzGHKtc}`UZ9y|NZ$<9uLZdp)Q*Jc z0;L|%s$Ee34&)+GYZH`fZA=K{tGBJKy?~qY!5U` z2TH{tSAkL`$fc0JCCGHpTrI?AP>KijQ$V2(vI!KTppb#Ip+P)Qng^u_$c|u8ID*^& zswF||e?a;`z5~S(s8j-_4p6@Y7l6zLwE;kJ1)9kN`4p7SKy6(}ix{?l2GkFRg&Qa(fl?MEC4q7YC>|gy zGPi?wT0{H_stuMiK=v?$W*Q+i24r3hG6_y7;X%&=n5vde(nky)FK%y{rg5nnBPSDz2ko!RS z7&N8>I`tD0Vjx>U|`rF&5Q2NDPQ6cpbeK4{zpH1+^92Q)4X zSziFUM;o-K1(ISBX&5pl0m+%jHbG1SsRqs5gI0?|${3J~FGI%g}GWapL!29SR6Hwa*5Hmn=0NR@Y%88&Dg2Wie zE=Y_+%3zR-k;53G7gY9vX4oL>o?yBmIzaY;$~s6}5!OaWU74p3FX2I{3=~eF_=J>r zpwIxd`am}KFo5b$nE9Zz21*I2z5(R{NLdJqdypE?YHCOd+5jGn0mUaMEx}?1l+!@t zIG~gU(h0H&(~lrsAd^5NhoF=MT89eCpP+SJ*nNuXM@UG4{0~`w2)aiI6gRN36-NeV z24@CWaPKCF!I2?^!4)27AQuHNlrq3>70X~qWq_Gi#E{95&X57Vksfr*3h2h2dj@F9D`P$DllX+q=DlN6z>Y)yZbU2Krsut zMO=X)1AGd!0s|<%^BD>l3K&uuAonVf8;c$cj^HwbaBPC|E2PZm0}WeB$V1NR6kY7BwWF=qaT)cvrYBCN!QqKF9%4I8rxX7FS1WB~Dk7~&bC82lOh8GISy z!F4%k4Lhh@z#j6D*$_}Ih?t#04tG$`090RtdUudE94J0O>Or{-lv_bGB)5U=2d%)u z7}t?B@^^Fb*Aq8ij11eMaDvK!JLgQOW4AC`7N)6HmD!@?Gwre9c-GGhXXFVL6(tXBp~rN}9WHtAv1ji9<1e|bC+e)1lu zwGL7bYIT8nq#$|`e6JB?MFwJ>J*dwD8tVe>p8)N)0<97Sl^dXbA}EK0=1oC8z%}6e z%0c-aG-?K#(}b)ogO~>@zd)lBpxHdo%qyrD2inJlFbO0Aav7-X0i~X$;ME=wGY}(u zAXT6dAJF_hY`g| z`xzj8Jh2Tx{nUjJBOS+2kV=F+E*<3= z4-oEv%>;v5(2(&=i2p!7TFC&~`46)Rwr3P}1{wMeL{QBP3a{1RF&5C+?nLl@2hct! zkQ}H*4>1cgjtbj70~w73jemhgNN|ndf@*otUK!Bn9cVNUG$sm44NDk6vY<8m zpq@Tx^b=$kB+fuRI?yR4pb;X_cr0lB`wH+Hcu=VTt5FcX2aSM$&a?o{Er8mTpt=K; zK0z&hP#Fjs2Lg?AKt^alVGU}Tg2n+rDj*|dAls3{8ss`qpA=GO5lS@(w}5snf%esa z`W=w?2aUCZMgn2uK_EL77}UZ32dM;&fJ6KRx~&8>?gZ+igLE`7fX;{k^+Xpis3WCp z&^f=LaNYqO!2`9RK%+09H3bkqKvFR%9zZ>8km-C{`$6XtgIf2X z5CrMm1KnF>2;N%+Spf?gy#npK0j)a$`4DvCEJQ{Rx|ao{0=9w`6w;t^bWmI@LNX1s zh9Bf+P%J>w1jtPYv*N+Gw?W2nvAHG<+zZC;4u~ABU4ZOc?CwBTLAh%{Cmn-Uq9E@m z0`-9*Z7I+xH^?KIgklpCM%djAksAmXgVsfZZjFT8Z3|i{1G)>W6Fi>-y1}E7p_QSX zVKPGx1LQU(&`y*I4D%Sez$r@wn*KoJ{u3CG%^_D`2Louo0c1xi%*Gb*Eh3b=37gr} zbmw#i&|P><;9E~YH-k|Ue%Ra!I+MDOf%0&mraQ@X6Qs2OTA{fD<;+PV1_K6ANwt|_ z0|RIsK4^t6WUW7Fyk!yitRv9MNJtH(z+l7xn%@SsctG<)pb<-BunC~qB~XpGmSG8a z-T-1Bq|O435rb-WP+7ViJQ4ybxj|(fq>hD{4O+JW>K{Q?nL&Etpxzv)ca0eF0@(-} zZGr6VgVceb(jPS13#tJ?Gf$v3MxdG*(xRRWu3tc<1;kD23<#frdgSU1AU*pSK(m*i z`WtjE2FRr#(;)Q;sGSGeO%58H2d!Cb0`HIn)o_q`n@$GEEl{BO8&Hkb!mxs&fdRCp z2j>1R@LVHki~th0P2juYK(!gDh5)$@bc#L5c2Ii}ROUhE;Xrc&pcWTs1QFy{km-{7&1Ep3MtUJ081Dk_JV4}wcz*%ooWVKivtONkZB;b zpcWyhZvtv@f@WqwAqi?{f$F#=;4xPt|RX|Q41Fb&KPg z(lUeu?aBm&*B0=uMbI22NI%FIkUAUWZqOXve()YNkQ`*yDx@a~8j}Kvf#$9tcT+*u zEkah?f_ej>Gqgb|8j@x~=@>LF2r?BErl8g-sGS9BmqTI(6dDjWgW7DMQ~(NdkSJ(w z5OiYD67UYVHQ>+&=?As0LHz{KY!@hPg6050Z9Y((Yyt122DLsxAp>epK+chC1fP8m zian4kAfv>f@Q1V?K|K*rYY;RR1zI@@3O~@@Frf4eN;RPM&Y<)N%KMO2(TMzjNWGA` z98e5{LJ~I11<5(-pf)q8l-UDr6+*%e zlHL$&-$9`aYFB~Ahd?wWWI%0uP;LX|QBVk|Ga%dy%5m!8GHN0NXf6k|QUR1YK;a5W zVaV|au@w|5h*AR-CLni!bVK@1pxGACd^zZpBv4rZ+F_17k_=gs3W`Bcs~>bHBZv)I zYYWN=yBR=f7L+DH<4T|$3fc9E>=IBcf^>s+enIj($VN~K0ND=efq+UgP@Fa~fKJp0 z%@%`HfLgwgGznUj0vU%uA0x##N&w2G9Sp#W<*x0M$nLZ2_fB(7tk*YLE#a8$ol^pd1f!1t_I}`mmrB zxP)N^!#W1!^a$#Wf>x9f>lR2@g3iGKrC^Y2L8UDy>_B}=P}+w09#l_(`~=EvAU{Cr zV$kW5pi&ETVlJp%0xF3>Wg#TpLq>H$szEg?sN_K8K~P!;`3h35fl57)JZOXj)Q1P9 z*~tu`7y{LNpjs4EhJkVqC?|l*I?!qiQ2vGOUjogmBfA7-8VG|z2{dK_n%4uJ*91x> zARmET2`Uv}wOki`H8V&Ts80=Qw}8SMWCCcV04Od%^)Dz~K>BTNUSD?~{LN<$#Gg8T(?FKDj}C{001HOL+o zNT~)2Z_qwGNSz6B4X9KCUAA@!)f@}w^ zSA&HsNDZWX0@ccpdJi;$3(9k#z6Pk)1m#P}C@Q4o3K9d&iY^A9_Xm=N+-3y1lL(Rr z7clGv*T|qy1MPSO#qkt|4Geo3KszWwvk4$qP6VI(2#OJqPhscGfW{j@ITPZ;{S2V| z0BQ|E%1n^?pjH{kg@}|2O2;4(kbR&s52ONQ1L)*jP#p{jC0N-GvJKP*1Eowzj6>#( zK)wW(DWFgSmAIhz0`+e}CPC5)t}zZ!iU+NGieLy~P+;(5@Mll}pGDxu0NUdf!~j~` z?Fv1U0CXaV3j^#_24s6cegnk;tbPTp3j(nr?H^D|0OfN~_<+&@sLcV=4XIBNX#`Zt zf?N!1N1>Vm8f6E?2q;B>d<_ZW`at8 zNVtMZbx^qk=`Di%3M!*PF#>84B3k~S5QnsnLAOeQ+Jvy1fstJdNo|nQ7F5DO`sbip z1Y{3HB_s?$u?-q;SOOlgf{k)PTnf8u0&+qes9XkxE2xx)v=Je$1ep&i!9aUPLFp5e z9zbQnX(Gpssy!oKp_t*X+Uua zx@QIC22eQxIe8g0>H-nbW}lN++P!FKDzB zqza@H)SdzDLxJc7&0&G^6KIFTR&X5vYM+5@2gLwr{TXO(6y`5bK0(*P0KOpzBnr|2 zYN>!y1ZZv=6rUhlKsgaqT7cR~Fq1$v9!MNEV+v_8L(&Z>96)145WS#S1MOIVC&0sS?t!Pkv3Cfv} zQB_bI4&+P73BBqJp!;eY8TuF|fp4>HVdw^*sy>;aouLDKccnT*2SYP>ck~Q~R)*;e zp!+UC`^8~1Lk&<>ApO%BAopd0?(G4Y*~0)LJE1B-_rUjp^@GliYGnY;woC-`=R;M1 z+|mx#GXZQ8=rniq6G}lg^fSz3n85%#8L^L{i2-yT&sql1s3;@_f_h>L!6W&Qum-hj zKs)9^;Rs3(pcJ>C0aThpTA!fYiE9KM6z3pQA?JXD+HIhd8$crypcDWpgFtBll%GK< z1(bszH7}?QzY@HP8kEXG=?&E9S!)i&q6*9u+!(hyyz>vgH%22`p zS~;7?09uI#TImMjDS*!kDq+ZED1)w32CbZhtcZo^&tL$pr_BS81K_g-bV4rWwlFZ@ zwj+pvT6RoeSjVsmda?p&mm8@52E_;{=P)odFf0O}83StNgW?%MO#~>0^)_}?wNG}O=UkGS)ZXv@i@SU=tbPq{Spws{wuYs*x0qF(h63{4w z0=QKSI{g7s*MsUjP{{*wDX1QWv$K(!aB z=d%&KD+$!50@V$Wc0I^k(0K@;G94lUDkb-UPw#@{AW&Nv)Mf;giXfMO!VQw6L3$zk zd_cJa)Y=2N4dhoyc?lvxeGZVTL46=d2?=UbK;{@hrh;^VQaxyG1*rYi#{fD5Vm?C) zcyA(NE*s*OxeTCO32KLdS`(nU5@aK2wFh#qACx*kWdo$fh1dWJXHbp=*$y!a<}c(p zr_^7b3?&Sp{Ro*1pq&YzQ@%i<2^u4T)GVOX1{%8nwUj{V2vpyJS|^}-9#kfR+F_tR z2q+9eYCtIjRPRH2hM==!Kp_o^0Z{z{ihYoYkQ5DS@qy|Ykd2^O5lD{{)Q)0c*bct8 z95hA=y4?_TDlRBBgVHRhyaJ8F!NycTB`qkL8eWdy40v6}+27c>qA(g*7Of^s@& z%p2rhP)tDj7V8;6tw2z14?BMn)FK0olz>`>pcXU8wIDr^G6#`6KsD0_2FUHopnL&R z1Bz{sILJky5(_bY1S)SpF$D^JkS{?o4vKwH?FwphfZ`Yw0wC9dTFa1=K0rP8RScM6 z4^ah@0hI!vIY!VJ5NKy0s1648P(UdJ#0HfOAl0yt1D#g|X$gXI5$r5Sh#w)d#h}s` z6zZTbS;7E{d&oUZn;7;nKw8$D!Sxep4iVMAAbUW%Kr`^58_+=IIVcr?N<2`D6A}ZE z`WF2z7tooHpxg|Z2?MDFr7}4J=b+I7ko!UN7a$ja zW^q<9fKI6br6G_?P`(6>5P)VXK`{#oe^4p|g%3y!WFjcnfb0jw55yGE>9nBK3QA|7 zmM~<_0hH=Nr7|d&!ty;R<%8-eP|q8b@pU>IAh&AtrXy zlo}wdW6($s$akRH4AkF&*#{~oLA4cVRtHi#K~f<|Ei8;7BmX_%ktERRvXdA<_q>8) z3e*DvwHQFT3sg6QMrlFug&G5}`~*rN3=CQfpjs5+Zpi2@C=Gy0FHi{#3L%iow}3}w zK{*vP8Vs@r6!Rb-fMOfeDgmWzQ0oTNKLCwGKzb06^bc}9$P|PdLG4jQ&I0wKLA@bR zn1M=G2n`B zO6waKKy4XN*#t_tz2FnPK834*TOU81@(?#Zi1)+m2sfZ0mTX^mLR1d zXf6dgPp)AA#q(MQ(7Jf^`@%XHKx^uF!VAgFf=nv2HzP5I;jG5l5ron7Yb>k zf#v}~DG1~%P}v8&i2&4(L%pLHl(JFha6oef$Ty;ad=By#B)lN814;9s8~{q)uroGc zb+x;vDDFU|5U3pt%1y9c7L^Qj46w2VmMcNw1d4f3Z4L4psE-NagK7v! z>m8J;SAo|p)iHofXa}z~0+l$Rkb{)dAe|srfm{nJZ$RtdL8$|j2SF|XjXi_X8>qeo zse`0lP`eFO`ho0Q1Z^FFT4Rt@g6L&}{0FMXK&cNDo}e%U#VKg+5;?XYAqsLMXeMJ5 zcuWg4o&{QU0_in^d<5!R4#*J0Avzqr3)lCfqES15+N)ls1F z7Lb2IEiX_i0 zE980uWFn~T4T=NM9S5*F0;Cq?J5VkHr3r{HK{-(Y<>VzuO9E1Ug3==>$ANqRDyKmq z2kPBI%mmenpcDxjaRk*yAd^A$B}gT#l!5fvVfhYH#(+`=WW@l;J+Kr9YAJ(C0Z@#9 z;v3X20L>nQT85yS50qL#t_6*^L+<^CwBJCX1<5Ut90*CLpxOaaW`OJlg*qtzfXoE7 ze_=CRAb)}SMxYaXA?X7YzmRnVpqvhhF;MDQ#sI2eK(h@X7eo9BiZRd`vY;3P*#;{0 zL2d+v?K1FMXHX6Txfpap52&O7nGI?!Okn6^n8^UT-2i0TbOzA9SX~Sq44}PdAaXi* z%()rdP5`ZkfUJcC$%4XYI(S?c)UJfM1C+Z!{sY~r)ekib}qty+-nAa{dY2?}>ey$muJGOhw?Yl7-Y(0V;k zPaISlfckQv)*)!L8x&KZ)DK!62Fg32+FXGF6oR03Hz$J? zFn56B4^*dub^(G)uiXqgQ05vzZ4Ssf8(1uZPAr3^EKtZmQYUEk0#wT2UKtI_NuZnz z%2lA;3R*b`TK@%V(STAbs0{%c2G<&(G88uY3KE61 z2|)1(%8#HiLXbXCXn@8AK;;i8$AL-@^z88oH|s%t?fJA=#v%}|5F5R{%k z2uh`(v<*rHpb=1z`LGlPs#{@wHIO*0Jj0A{NN)iYej6Ad?Rrp%fcn3nkyelh zD3wE6NswF&s?9+449LfzvISC-fOJ7-ra>bHAUCNqfLipR`J_e$(0#$Z3?1NGqNXrR zW|+Xx49>@pnJY-!5w*R)g#lFSfXZc1OoCD_C?-HDVHtQ#38DwIdH^H_n(YIf`i-my z6f2-m1D#_73N?@mL16)MGbkm(@)JluBz1vKjDv(VEI)x_U4g-z!GJ*(Y%ApaYEa$* zmBf&=2O1p&g*T`y1+7p6g%4=G1;`Fij|!BxKz4(2C1iXK*>9kb0?iwP@-Aro8E8E! zD6fJ_ONg&P{Z&|-4iw*@vH;ZD!i-Bu-tA`qtqTH`hA>}%@(rlv3@T$FDFl@MA*l=G zVo<1nViZ(r!BPq+MS#Y9Kp_W81t9l;#yLUd7Dz29)Ij+YQjWuHg5-Zt3IK&XWUUjZ zoCTd<2nqwxSRbg|fYmWDeV{l2waXx_Hjvw4EBGO82+*y%5F0^ug4_uj=Le-gm%FM`PnJp-EW}! zuY&=yw-8jLLgtnGz$-^rf_)0{9VBi*E}94~xj^&XpwI!eqd;v&kn2Hx8c@#_)b0k= z;2`@!aRaK^KyHML0fWL4GlfFNSwMX|P`L(~`3Lz05|g0v8kBoLW$aQ0UGN^4RSb|* z=|JfZly^aGbC8=s?M+aR8kB}1{X9_n6cloxekG`953v^%gP@zxLB0W{Zjg^QfKvge zHiC=}LCQ9m??9?RAqz_Dka;VRUqN9CN`W9Bf#L*|3PC9Zls6%*mr39{1yX~6?C%Gk zVhTxRAeV#63s7zWwID%bT%dFS%B`@`7*H*bFawkuL8%+$N>IK4nSjlOpmGb+ssiO? zkc&WLq9E5n`mLa_0;LI1s)nQ*P>6x@4yd09G8NfQ5FfPLwiVo42aPJgS`nahiZBC| z0zepXUO&iYP&j~65y)qd85~e-L-IZ-96;#~QU^o)4RRMKje_DH6uzLe0BWCrVi6Rl zpj-$V*INkQiv~)gAiqKK9H?amYS}_YWah%}Az1}pi21}J@iMz}!r9;kGK^m{=iKB!g% zr4QITH<(UP*nnzuP>BsnYoM40m6M>*2Guc;_}d3gm6O1&dPv;>l0%fXpq3V>JcrbH zpcn*&8_4CL(SJw@56WereR-hx2i^C+fdO>uAgHw31U4NMXOJ`v8X*AXK~VZ#1FrA; zz%$Ve;NC7Men53ED7+wSjS4_c*9N5vP#*|XK7z`8$l5iK4?wAq*xU^A z1!x8ll%hf7pO8EU8a;u8EGUP9>IF~_3zAMiEgDd(02E%Jve~5i9%XFkXQqa zl7i;*Aw87!;9I9a{sF}@D6fNB3G2Y=6_lbtxdoIOS2Do%p@8fLrDRYK5tMg8^(iO} zk#i5ojUX2_G3YXY=6^slT5G^&g6c?6xer>44l0XKZ*~XG@PNusP;r`_ayWwOcLfI2kOa93 z)F%YR2PhT7>M&5*2yz1`j6nOCASDQBBmy#i3{nf~-$GIsC`3TJ0zfq}D1<<18P-n+ zwR}Ks1&Kk*Hc(j$b1P)60;DX5r4dLtgYK(!WEPwLHQaq_6ur{fLsJht&mYu zQ2tT}uPJP10L|!t)+d724}!`#P%jKrUV-8jWCLW}1ycKgd;%K90+|FFv4)gNkTM;V zn?PxYaLWZ$GlERgWdMy>fZCFvd=Dz|L8U2Z|2(KJhJ+m`#XwRzC=G+mZ)5w2+ZM&}v=Kh|eZ)+XRxA5oh0k%!8F~p!xt*Gl0q? zP^tj&L9GEuDF!nYwn`l2BIHwHK_eod@Pd?Hpf)-z{y-@Jly*REE>KAfTG0ebtsvim zMtVWDB`6+Xeub<*hs700Cnz*Q=@(L~gH{%R+zpx;-NXP&+n{=J5!ioS;QjfaJ~c=M zsFXnNBf4eYVScp5OUT8sJutC8X^7zg&NGopb!JqiJ&k6`3B@OP>&N-KEu|6fXoJogJxbq zJ_41`pwI`!4y2_G%Dw0-l-n8l7$!4xz)xmF?!ST3F{nodN@1XS0@mIErC3lbfqVf9 zEl^Hb!~n`CpcDe)f%10`17!3KG;al3Ujb?>_F}sM30d!hE|4Nh8FP5KWxo3vb#WO4>TSCD#<`+ zAAxcxB1}PMBYcH=+5jkpf?N)&yFmE@RJtw#ulk1V64PMlVpzhT@9+EAnWfS zr75UK1R5U%rB_HSfJ!|?n1X5sP}^fI11R($sb(>FjR~YD2nkIzT-Z zP)daK?qK~XSV_8s0W{|eN=cxc4C%o@VjDCs32_CeR7cH|u-YG#D?w!;$dq;9RurTp z0jWL> z0qF&`#6dG($Sna#`yN#HfksI|c^uTw0o4egITTQz5fTC*wvIEzbyfu z7YORXgVGJC9R_hdC}u(ag4FgPdC=GnZ1xzEHina5ASDQDngG>_pz$P7$e^bVPz?x+ zC5Sv^e-u-=A$Sx^R?uX1;f#&i-XC8psHlPw0(n?2!FDQS2>Kjn|4idkRT4Wt~ zWd*1l1>I@^ib0T0SQ`u!cc8WMpfPAriyGUU>>>t8s}?jb4+;xVz6PZl^pX-3hoF1u zAu$MweMFrEDrrDt4xsQxxEZtq5_GlzDAqvrB&f^*&3c2v3seJxdJ~{=cTme4(w+vD zeW24LD%y?J@(cYX+qvP<(=F4v-0uIE3^-Kx5;e zQVOOU)KdnPPN3Q!(*FdR52}^dFo5)fVjVK82s*I=6lb6^7F0HaayMj74Yp1f6n3Dw zoIT*R4xrnNb~Aw5$Dp18D4l_F3@9!jBO9Pp0$bMyG8Zya3{nRQCr~N@g$ro(1ax*K zD6N5JPC&T=l*&Q-ZkE7zc!Ao_>%ikCo4|b?&?#J?8_YTwKr22#D@7X^n!s%}&`81r zq;?pnrUdnfKq&^angKE%2TGHmd~8ScY@YuLTVpS zXhCX7(0npTH%Jd;JQK2?52O#F3e@ffr5(`t9%NJ+QkKH(Ucdk`4U}d^Ze~`ICP@fId5(nid(Aq{&3W1mo8d(C(bAi$lWPS*eN+B);jc|Z+ z1<1@gh608<22ctGr8!V}191t+?T}SVpjr+j4vGsUdyg31q2Z4Mfn+5-+h z(CjG42eA2CkR70~0M(J8&<5E8suMst5|l?kZU(g{Ks2bF1ep%Xlc00}Dpf&g6SUqC zlD9xT8Bn?ewXr~>X`s}<8JrS8Bb}hQ1*J<+s{|BZtHEm{KzRxz0&?$e2GDE}D6c@w z2laG8c@R|Af^>jdwV-kd)M^E_oIp7S5^|uGSD>5)o9_X|4#>Tr7zF78rDuprNF4$y zxj^X~GX4u{GeF`I<~~raK&&|fr8ZE13Zw(#pH}ec(V&zE%DJEr1GyjMchGJ^P>6v_ zD^R%#DnlVT7Zi4&kt9&B9pp#IC?O~ff&2l=`5+ab(I1dqpgITSYRGvD2)BUhAkY{m zXw-Ha_#S0Q%%jIFC^szupLPu@GxsvAVgQXnfOfxvQUs*j0i`0)NHNGBP+9@ih@e;k zmE)k;L3S5xWg#dOLG>9Zb;CjnROW(08I*@W=@Dc)WR3!qzCdf@g zZ3K}0pz;)w2S6-Png!Vl8dG3k0G)UVS~&ySSKY^eT^`t>1Kct=lsR#KLgdt;*u-+^v?SslbQ0|(~uz>;8`v#5f zL&6o5>p`_1q-+4CFHq?LibYWDf^r*Z1r^9mpj9G}HG`m3iz{3pB_^n!2btXhl^7t? zKqG3Pum|-VAY~W2uR&!tq>TbI)+>;cu} zAXn}Omo*SuCWA-hATbH@5hxdc;ucg&fcitA85%?=g2ov@<3yl#0;r!3QVk0~kZV8~ zR3?C0uAo{OR1<(^$Ur3%D7QoEJBZDox(pP4ka`o-AE1y2nFZ>5fkG3Mdq8SIZ4Xeo zhlC`k*9+?DgJJ-b0wHsXpj-)x1xR}sWD-aYl!id{38-X2gmWtcXoLlnT0lO6bNiUg$# zP)bD|X#lB&gch>fwRL9U(1XP>KM>5U7rU zq;g1m8Dc6Vt!xDEvI31yg7O9^rGjb@kbY2F1I=F}dVQdlD=36ObrQ%WAXkE145AS^ z2^1%wHY3PQp!qmZo`KaSpfUv%hM;r+DsxscfX-$CjiZCY8o4zAG67UWg4Q5`Tn3p5 z1NG`a;SMT0K{X4gH3M3w14?h8c*JxwD4&Ad3JO(FngNwXAQyqm1hp|ivx=Zt0JUmB zBMqQg!+qdW`9SFbQV)UFC_+ZOASDf`R|hh05xA^|oupt2OybAzlkfwYv7eFZ7= zKsgrDs|B?{VEGi{3Q)-eigD0-5m3JeGpW`Kx_X&=@C?KK~}(n=HejbT@wSS zY=NW;P&|TGxq?Q&K`w=~)Unlcpz;z_Q-abGDD{CUw z3o;*c0v;%YL17PSd4cj1q&xuCvXBx15}Ke^4yX+XaSLLdE67D4zku39Yrv@;5?+w; z0Z>T~%KxCc4HTOY|3JoRAoFRUk^)pdg5nL7Qb8y6gV=QpNep!ipx6b4G{j7hD?xc0 z)cOVGJ5X)}%^&P!fXrYZ#-<=OEodADRFZ+pQBdr3Gl0r=$Z2Ju@PL%?FcV?@I#9_A zX_J6T23Y$6>aYRiH~=shr98_+A!Ut4SflLOqY(en{ig8F;0%{#Wc%Z#akkAFq+CXGM`56>T zpdAjNFoNVfP>KMJWk60chu8rsTR`jOLA3x#1e8}nr?!F85vV-{N(qp-1jQ35M?=O( zKxHOmJ_@v(dL49p0#ZhUY7$Vc1Lb{C{sQGZQ2Pd!cR^tWs^uV|1F{w5S5WN@nW=`X znE=@iDpx>dDyY5!D$2Lt4^E=XPmt?CAyoC6vw zYh{?mpa9-e4VvQw#WO?=tUm{`4dfxYGY7(0F~OH)(t3agY2NSX`oTY3DCQ6 z(9aZt_#0Gmf<^~HtvpaF1C3`u(g-LvKN3E>84)6&z5}S$1nXCUdJCZR0LpWqdRQiHiD4?-2Sh|Fm0&*XybO*I1L2d+<0-$sXsx=^a71UM$ znGPzGKy4XVOhd*QK;Z`}SwU$86bqoT7i1PFuY*zuBxXTj0}5?WX}ke^`ZOpeLGb~y z2ULeb>;$DYP)-GvJBV}u8rcAu04hI0u7H%g5YzXAS4u(jfqGOR`<8)wfgmwZIRI)o zgX~5Q15mjNse3@N4e~!|4gh2`DBXbE25Gl|$|+E-528Wlfm{J%gYpfiqyxDGalQvA z1%uKGsP+K0T0s5-mGz*~6jV+_`evZD)}V8JLFF){T?|WmAk$$n4N7mI^a4s*pqK`g zE1<9ir7ch&4AMRWk)YHCI;8^?d$8IZR;q(aEs&{@SO(QnYr)|KX+y!{7ZSUm{iLAK z1*r#x7bxX}YzD<7s6Py8ae?9+GUEaXEzq7vPznU)W>EbOYH@(#091>D+zWCyD5gN` z*c8Dn=`L`O8PwZdz`(!&YU6=Men2tq&7jNR#gNF5!N9=K4L)Nr7<1BD{UccAzK`3n>Zpgti;CnyXd>wFR!k{FU1QW#Ph(!e*fXEJ0lWHaP2 zp!Nu8g&wF*UC98NxdP4FfJz@wc?BxlwlHjE z*v0_b?Yfg;7sGCbJq&vp_A%^dXkch$XkusvuL)`cpT*h9(8bUVzIm+=yq5~J#&t5o z6o#n`(-@{R%wU+wFpFU}!yJaW4D%S~gJTa=>aPXwcLv1)DCQvh;~{Cpkime#jDdl{ zhryE}gdv2%hryLWfguEZnkJ|&LS8`#85eE^uT=t_@d;YT-VI*k23b=DT4xK1Nl;Ay zYX5_L3_3>ywq6aC4ngS>G~NT+zYnU{K>K__J=A5;xj%>rpjsT%+Cz+mfpP;RPeN)C zQ2Pgzwn2SVQ2K!69ng3hsO<+b8POv~PGyL`A0%~w>JEfTNUhSx07_|~wizfNf?N;E zd!SXKpz;P(`+~}H#5z1ks|}PRLGqwkamZKzNCZ~9fJ!S+nGVSXpcUbu(iRdTpk5nj z#B4LT&jqQ|K;;go)PSrT0GR}1b5O2_)DfU^5tMfz ztBYYRdXU*5SAtvt(g`VXL88cO5g~3vZnJ|_fY#@MMz}yJ9W*+FJkkwGD#eY!*l*C@p|`DxkI|s0@bnD)xiVC5PRr0LtH>v3k&`5GehF zRy=^p2~e7XmD-?E5j3^|8VLcp8`Lfatzd_pmI2Dwuyz!vJp{V51C;(jt^%nAm2;5( z5-jzC+AyH<1=LRf^=v?`n9bmMN>D8W%FmGYH>mFi%ekPk5mfqt;uF%YgOxg<9t5am z1sVAO)kC1t473snGFu92&w^Sbh}}b=HWkPxpb&<+7SaQQl=&c&K&}S$4?yGZAfJHT z3+YvWOoyEB394y8u?DIQLA?f0%Mx@_2&nvl_!ShNuy6x~6G$bfZ4c3jJemv{r2zR3 zQLceP6Xt*9xCX880GS3FzXXlzgTez+-hsjbbi*@b{~E}TpfVWbc2N5gGByJmbpXY{ zX7K6S8yG;NN}v=2Ia{TJ0dyNG=v;A7x!emrkD-U51H4-YvL_sp20`O}pz;<}3xmQ3 zR2x9*NRU|&HHfkw6sL&!JkT0TPDbf%?s$5kXKH4e0}ed<|;lf`Qr3fSOf@yDDGkEL9PMC1t@eu{TWakpzcKhjTM1h2#T#u zV7GzFT2Pq}8rJ}geS%tCpq3n@Mu4>=LA_qcd<7zffcjyea0R6|(5we24Ay~tJ{P*b z9@KvVnGZX&0OV#+xPxMQHFzHlsGbDHAZTqDs2qW;bpnMKs3!wb2Z~QnEe+BK!l0EH zpt2L>S5V3UjaO_2+X|`gAhkEBJ_Xf3khUbmUQpc(a`PVW%@~OI0Hy7v;C=Lv{s-g^ z3P{QWrG1cYP^iMjqCu_zg#xGy1dZH)ZiIvMO+cdvptJ-^5un)ukQty|uG_(;gIo*p z3CN$I8U#{HPXw=j1BE>TytO2C^>&cJ407e$a>~D4&7KB+#lP&`1_&H7aPYJjm6c{r{l&L@jGT z^)4tqL0ksOqae3|YI#sdfX<5pg%qeC14*Btm;>c3P}qS=3glP;nFdOS$T0v?3#wf} zGZUb+wiTQBi1-1y6%v}D zGz2QyLA@wgszZ#}fx-n;u0Ym+gJKDklR%=#egc&Rp!5VPYd}3nP(KzFcOV*)J`v>~ z$PC0d7$`JBw!%gVK`lE_3R}(q8tsM5(jr#8LuQ*mxeufVGFk|#3qWf;LFo>1;u0t} zVC_MWC@BAcXi%C0mDQ-TjiC4g*$8njWMm%{6QI-rO8uY|1JVVGSx|U_(lulqHRx7( z(7Z=4cx(_fD+F2*0~)yktt>>07lBTY1Eoet$p>PA{01sIU1xA6!H+2pjCs2x*1fjL27eIyn$Q~YB54qFM#3zH0BB_ok1Z3@)u}j z0jLB7jh=zhH7H$z(mAM21{!|``4KX21)4X6wAMl88=~%p#5AOJ4XX!1r5k880G850 zbphy92#`-f}=n0<{p3SIZ%XBPdOQLI9r56ZI;cYCfWjKY0_lL*vm1OX1t=U4{s5II5EDS*4oig)7hu|L1->x{baw~?c#IabM*x)O zyBI(_J3*^y)`M3Mf!m z8K?vT)!?hZdxua{E2!@ci2+aw0>vRH96{!Sb_Ie;A5i}e;s=lqLG1=mS_h?RP+J&g z2PmdN{sZ|0(*6O362vcyz%6jdS`CmHpq3dZH9_Y7L25u_&5&_qbX(Ew1H}nQ43u*~ zwK-^{ACitiX%AGofJ8vG3CPV5J3%oF%1Iy*P{=I=uY(8q(TBmG!I8m*!IJ@WE29Df zYHt%#&nhrzFa$7wZfFc<2nOHb2)Yj`1bm;PGlL_8AA>W4D}xVo_c187Lq;z^IUbar zR)O0#>%lEWP`@?6q#S5|egBU!)^DYPz zK;ed*??GXR*+ziW)SzB3C`W--M8a$Yr4dkW0fi%?4~Xn0kP1-vgKG12(7raPMT}g3 zg4UBjT0NkC45&Q_au+D~z*+;Kx*XJMfsDT*+YUg_9nSgRFs0;+lC&Vh}$ zfpQ4wJa^C@cF@_M4Gb;dGiO2TH9+l8&~0g;bA0B2#X&PVklEdd;2r6pvGF-bBjf0! z{UFmpZUxn6pz;ZnlR%@5pb&?obWmRtbFDfk*MUM35`v&u0Oh=eVBbJm^oZ6ZBz|F~ z5ooLmv~L6yOQ022ps^=dpA`}>pqvG2=|ajT4s05X^Am1r4G%$c#51>?my2c#TzJirKpl|_|iLlWxP(KrN z78R)6289hM^g;b}P~Q{OY5~<+pxzwlbXsJ0fYgK5=YrgUuoo1|pt1Dz(I z8OS&eYT1My9-zJgs1E{ap@7^4I&Br?Q&8##o1^3KAJ#j~DrhVQ($WCM1*|6patkQjAw5!%zd)e^nx_Nh55yV>kY7M<0@d4~7zdSC zpxqqEB@`$GK&xj!ZU&`4kiS4-4LTJ8G^PbgQ4o_sCP2z{kXle%2o$@JRc)Yj1S(BH zsSe~iNPYvg&p>4hsKo^eVUP(R8q|^mg$;-gDuqF7VnHoDP+16Ca{@}Yp!N)?KLKg) zfx-{83I-$tD$hY9HlX~2drvCJpP(KFC^td+I-tH2$ep0v4G{tP6Oy+>Dz-+JH$Sak0Buf2?0>*1+{cQ@dENO#D|b` zg+TofR*9E9TeK2k_(i_KyCuXBB(3^?QjN_iJ+1fBnQfsp!GDMJOU|85cgqpGl2GE zfmA`-JD@cYAa$5w1{o^_nGZ@2pb`S&6No;D-MS2ru{zMG)@JaS6y!D@P{{UP!0n57Zl#06ay;9K&b|# z2Gsusl~thF1C>3ftpP+i3+i8iQVir?5KxGK%3M(I7!(sA+aWzZP#FTLQ$ckasC5R4 zU62|?%?2vTK)1=F?tO&Ragdq^$>2nu!33^~a4h_innt^(CGh?XE^wJ4}>42nNU z$quUxQA>DGj|$Sp0EHhYw}9#>$XEtsZ9QmjJ*YH>c~A>#BY2G_sAmsqfq=>j$k+y? zy@k4O6yy?62!Y}o(Pjn3Fv91Ml`@bq5J(Fb6o;Tv8I)H*ty@Tr1@*c>xfL`<4H_W= zl`5c-Fod5_Qvxw|fLtE^*g9v4@y^{JOy$AXoc-MaQgrh z#-K73)&>IIW&m3K4QVYwNKlCes{26c3Q`V&+Jd0^8RRyQ`$2ghWDh8YK{XAieg?Hq zK&3FG42P6?pxy|mhXomR1kDbE*7t#KU;w2lkR6b4f{ht~@(?KgL8T_h6`pi`;DKL2LU#akGs9WIiaJfbLENl`Eip4yqGD{sQGBP*|d_S_aj`kdOeC z#GpD6lGZ`41*I8KZ3&8D(7Z0l4p5vS=U7ll0cv}KVgh6n>V7*=I3TMAxd&8UflP*^ z5Rh*{H4kX-3d~oad3#U{fYJ-LvJz5uf>v^Y+Akn~g3>VvqvmMlr--G;sDD6O@3Yq-?t+@x~ZBVHK(uWwg2E{mJ+z%1UAp1c+0rlZGfm1RpKY~hm zP@4|2?jJOh3hHHnL_qB@SeSt91nqx=)S3wQfI=J;8=#a5x?>SEY6D6eu-pY{EvQ59 zGH+*4U}$0h?Op+$4F@`vz7?rv1hvQ!W&4iv*6-)(@OuK}_RlnX$8`OOTV^aLsg zL8Aho`>H@aN>C{Q$~B;xa}87N+^(Bpz#IJC=|%8pfOBPT!Q*~ zW(=UZ3eHrk|II?T&WE1FYR*)`G7=wDxpxgjy&4Eg95Dz2+ z%1IzuP)P-8af8Ab6nn5S1yC4(PMiSs_dxAN&=>$n7o-ges!?D!h(hcKwLn4TIH*hm zwL&0n1f>v28xoYmLGc8dvjyd0P$>wS#{{iT2lbjjqd$-w21+5I{`4y74Z5hI2`X=3 zIUeMD(0nl{Eo6 znj%1ILG3S4%!5ixkiDSv2nt_NDg)85nh_Mbpi&jIDtiIAL&`nODF?rYt7N8a$a`^>v3uxauC=?;(7bty!(i0?aLVN(4M*zhNBpg5^YoJmC zv_lybXP_P>s1yR_F3`F!Q2PP2&lxnD4N6Ur9yzGx2x_5&Qa{KXP+JsKCWGpz<=`F+ z%tlbj3ra$+f22f4`=^9k}Ve5;4(iJ3yfN}uHkDwF{ z3NKK42bCkBdI6L&K_fzlybh|tLFo(>S|GDQbE+UdBAtQ8Q9!LBNC^e<73lmZP$`LM z34_K^KrJ1JKS1?AD8)kB;h>ZSG96T!g6b|%KLTPFC@o@^jG(#_QWJv8$hF|GfQ?Op z_Le|eeGnC(TmVW_$Sw!906=y^YEe*5hWP~)0-(|d6rP~|8z?Rzbq%OR0xF{*XBvQ9 z2s0VvN6^eDC=@}i2F-kcY7J1y2#Ps`nIIp-asnt#gZfyomIuh+pcD;C_n?@ExD93p zsHFwc30i3ZN*$nn0?2%beV}?D6rZ3J0NTX~+BX6z-9V)>sCNt*k%9RVQeS{#ACkjB zVGp_y7}QP%g$rceA|$3T(=P)9=+q}r3meq(292kIQq?|i`vkO?5F!FfA)xXW)Sd#B zWRSW7IQ095vX#6cw-s4M}cQjl#Rw$*k^A|y;!^$d9D1!1QC>6j)5kWBxn#TmWb_>Hk@TpLs@&sZs z$e)PT1*rD~DUCt(J*ch+wa6f;2UOEQLI_mGLh>mnO@RCj>Pmo#4RX8SGJsnB zi24jPa|)`vAg%|MbdXjfC})AvH>jQjnFR?skO`n14@v#7oQ!M+q#l5!1CZN6u>>j` zKxqdQ56i%FNsyaMK&29Fgb$K8Ky5M5O@knRfWi-y4?razs73&lpdcNflm{!BKqVq< z^&zNc0@dxHelVyX4$0R`z-=8+x`OQ92Bl?CN<)kcgL?LmeTE3PfLseHtwC)!NLd9k z15!gGkFJCK3R-6ZN|&IJ0F^b6xC6N#WD6+%A-M_EUIO_5Qo4g$q@Z2^$SzO}L)LDC z?1PL+?_~hF3{*lu&dmY!c0qLkw+-a*m?LnJVuO4Q%Po+Q2bD0e_=n_F(5){k!K=}_!1p+T z_7%d`k%LYnfvhY-tRw>E62zDoX#5@2A^^Dtl%7Fh0&*>g2G#1I)+}gD0#ql0>;{Dl zsFVW9A*WqX7=rQvB>jTc27typK=}xi(?PaCS|A{MKxTt-?luNcyg*_LIi^8r5HfxP zG7(g7f^HK4iGp?lfJT2oHiKp`Kyd*Y{X_K6Ke#A z8ZQNfETmKir9Ds{gXJfXjUe|y>H&~CP`HEQ5|lSU=?8Rf>_YG^1W-JH`~Y${sMi5Y zf1r8%h(0@(*j+n~}96yKn73S=*+lm^)bie->5)`3R~L32=`^aHXR zC06>RC{F2dx%k zU_gwWgW?xdf`MvnP&j~6Bq&}$B?72K0fj0k1VCywfJ++?4`d!_d@5g<@24^p;*cC~=kgS9jCGJsY* zLQc+T1>YnLIxC|AemevxzoYigK(;|fazHFlO$Evgpjs7_?jY$I%Y3#ttvYq3Cf zgHj-9y#%OshNUD>4urH-L8}@ed!j(KD#*>CSOU!>fyUDyr2?oF0htM^VL_>NDT6Kp zq^tqOBIw>XP#Fj*yFu+!kP9I_AW+zW(haC&0kz{mEnrYsgVGg_LcePzL!96q2x%4(W-3QX(jKfX>cj0I!Y%xg6AM0L>&X zV*vRL6oVi&uz5_7X`na*#RRCm2?{er%7FFHQP*EWVg{6_KqWOOH$cioP$>wi|3RZX zATvNI5!CJgjqyNk$pD2gr0&9&%Fu7&K;ALVz|h73svkgi*MQuJ>>|)!6IlF$N_a?U zfYKMJFAYi)pmYU_DOh~~NxO*h7IdBosI~*m;DX97P`Lt%HINUG%Rfjxwuk{V77Zya zL8%UuLP5JMK=X>AQVCQxKz43{>SOF{<6Ig17(y6a8G;z%8C)46zR1P*{P+WFez# zpnM4G7lT$hZvmf7%)kI*gX&-qhVVdVCV)g&GB7ZNFk~>KG88eSGAJ-)G8BW!JceS1 zQie2!G=@xuWQI(JRE9i;5(Wi^Vuk{SM22Lr+I)sQ1_g!^ux>+kW2FzQW;Xg=VXBFDq+Y6o0G^;26iFHZ4e(NG88Zr zFyw%JlgLoQkjVgXeF_7Jmk74c1+2T0A)ld?L4lzh92Oa1A3{tm0sED zMggT!P)Y`+L_`_@siAKA1eJUsdx{xS!KoCI3W~w0ri3Ax0hDg?!TAS~Lz2O1u9zVo z>~>HIhnZSHegNeVYUd?tq-{{!3)Yhb)xwbW8mN8*wfZ5alz{p>pj|(ZdKS`a1(oTb zd(1%Vwm@xf&`GhNQ7ljhs5A61^fAl;?`Z zWJMCh1)y3DG*b#X0SMFv0O>=tx021@*@fGN3So%qt*|kb%^IT6CcL9uyOxRs}IOgG_4x+XiX< zfm&stS{XE(2pS!L_ykn9gZky5(I-&f0d$@TsJ!k4x7$GK5w}u;@(HNc0o6*Nb^)ku z4(exsT6myVD`?&q(ysuuF(Md37$9Y-0(eb6Xmj$1nL)pLJf4f0w_E|Cpv*tLsBwmeJ&{0Kt2Vv%R%i5kn2G+c%Ttx$cQVb zRSohF#2uiR0k!NvZER5NgT@>Y>u5oA zK=y!Ikf4|Z&Fw%|w1duO1NA0BaRo}R%fb6kKqUyMO$iDU&&0;O+AIDz^@piqRE0E$D%7z-!`fb_0p0L2R^%u&~1 zfZPI_IR}kXgGRkKgYzG97=UswtdxM*1?kOz%2f~_wnG|ZHYiL%aRw@5L4F7I10ZP$ z6bGQb6sW%l+Mfps2awJU;5&{$sR@y0AS0KM7zCwWkSU;^HfZb@v`!OLLV;Ffg4SKO zLC;Tyjg!H~6-g<35q<}m3^555N}yRTQ0fGgd$1B7R4U`k`Ji+O3UAQd0Ei750Ro-m z1PU|INDnBKAT|&xt3kO7R91uB1PWJ>X|NcE$brHIlmd`T6i|r>iWQI>Kr2!}=^8Zt z28u;c&khvdps-)Z0Ln!h;ky?=dSHEAhp`UoC|*J9u0c5-w9*$ex(1P71J211yFn!kXr>i3CIjku zL(Xgmg)=COKqWXRrGZAaKw%9^AE2}VTD1eJIaV-$N>~O4(0I*i_;?AZJOq{1pk6$p zEe0xwK=V-h7(o4gP?&<&5p4py1vZ`qN*l1#4!5v<*PH7ZjSHk`GkIfyzjpT?rYj0=XRI641If(5+6O zv35|M4hj!Y?gNE|Izt<{oeMc{9#RIiF@R>sK=vTYIoP}>q%8}ob3wC9pcN}1wUBxg z6xN_L1Syq4Hh|I`XqE$%uR$di#C$?!9IRdemDZrp0_jBEAqPs=F#93(A*dvQrBYDa z7&L|pN|~UX2AfX?#Xn-S6*S%raW^ETL(%~#Hb7|w;(AbN2#O<6n*vlmLB@VTbs1<} z5Ht!3Spy8ZYZeqop!PK=pTJxWnd<|&7Iu0I#4bd62MT3Sy$*6OC_h2s64WjNr6tG; z43KG{_8-V4pi&Dof(ViYjRiv5H;^(Ea_=uFReU>%u@RIOKzR_9^Fa23LJ>4F0oqpv$`7Eh0hM@= zPymHED1Ja;0P+tg1YxNhGV>1VoxoO-fO=}6z8lC)NFD=?Pl9~A3fzj>3f@l!D$78p zUVwZ`dby39%7`hGL9R!nc;wU$vL94GgTfW$TgV(ND2IS@A1H-^QX|A4ptQ7`0Wwz! zsx?8m4x|UNIs#PofyTT+K2=}K(+xLKLBv|bT%0Zyi49b6y&;yNTgUWMIiUs);)FXw|sGu-}$j6}d*`U+5K`nYnD;ks!A+ZGNe?WQ4g)8DuRd>^76V3?K-ZDFoGMh`bKkApq*r z?MI3SPX^R;kw|c{34OG^^YEMww z2c=g~X$4A&ps)nhzMwJ+lfWmn zfaYvKF$bxCAh#NTd<4K6gg8BZ(D@l>uxSXrkh%nMh7}~#5qTE0 z;|X*UI3%Zm>OxRFfkGYRPf*%e3?4%TtqKRlD=3$NN=d6L9H^- z{W_pL3<^sP2GH(f(EJN%7Yt~hC}?*mXs)!6L4g6ZOB6CvF&Sx1B5K)F#{k;dVg#=9 zA#Hb197F06P`pCYJ|yKpN;}9HCnWX2bQ^&0Yy!n6sFesRA0X$)fZPl^@g6ib1&ZB8 z&>b@%zkx8QE&%0DP+1AeQ;>C>pnf7~RRd^l7S!X0wBl-`fwh)Eu?I^3ARmB6r9i$1m2RNi2QnFS zf*Y*-2eryTWdvxA2B;MXD(OIZ9@N%@wM0PrK&2PN=cWv(u7vmnl#d~-CUE`(olXS` zUr_8%2KUb(vJkUCa~h!ea?nXgpd1eBErCjYP`wKpQv$^qs3i!p6;xw`(mklJ16oN8 zIj0dc!U$P+49Nqa7QHUR1_nI_P|p~&YZ8?6f*B$h6d2qXd>KG11ongPUfs?BQVZ%& zg7&~KV9;l1X8?`zf=X2ehGqs(sI5U-u?fmaFx4vrG|(8|!x zFd2I0elr6omw;kzH^VY;D-ASjo5oNAK3fNL(<&%OfMS9ibJl=O0ga!7%1cnY0JJ6_ zw9lSA_fT#U#6_@iBTyLw3QI`71m#9#_knUFYG{FS5hARXLT{M>o#zND$3Q8995awt zlz`S!L2e%c?Q`!2j~VoV%SUuopj+bl8TuHy89=85g4Sb!_S7M6bVx zD4&D;3Tes0PU->WV94qYL{0#WP=N9asGr@)016{ec>uzoya-Cupz;zlvH&vElmP^F z!S0&??)!lHKcKP*M1yuRbTfcfnSss$0@VPZ+y`kLgHk$Z4=Kcdpq?D4tpl! z7(uOv4Gf@E2XZHd7BS^%YA(0C;%-GSP+AUMT$`1FeSyr7KXn1&tho(hp?T z2U6pJN)}M-29%0H{RPl27f|X4rDxDeT+j#usFsJcZy{{~P-+I1S)lzJATvQNB2X_M z)UF1VU&yTqNL>$VO`z85pk5_tgbCEL2Du58GeGGXR_lS>02)UIm2IHb7^rOn(gU#@ zl*>T9BhW4zSnZBlYC`H5P^)MkxP}4UwF7E#L+T??ZNCC64rvGMW`MMqK&u2mH4>x+ z3@Z6S?F`T@z94sjYF*-Vg2wXqgKzHv^_oC^Hqbf-Q2c<*gR~PMEmF`p7pN8m)pj8N zLB{PtqXw{00p%9tu`5V<2hj~GgJ37BgH{JQGl0Sn6sDkd4`iJH@udmm9%oS91S-Ln zFhI%{nCn4f7VZoo42}%O44_y6t+{ex2x9PO@MQp{C6G@cr5UKK0?h$}(ka4)kP-{w zN>D2bWDY3oL30S85CDxgAnb#r9nc69sFr~2@@ZiJttEuiSbYqQ;1kzCX$5lo90LPr z)Mpa|sEh@z@dCLGy`)9dBA|5upcX1eGVO@`F+tD1}3O1j;p_ zGzjb4K|%+VE~%)GvjEC!|yY?U;m=DWK8@6f&Tg0@d`O*)IG#L8$}O--eva2g?7T`!a~P7gS1s z@)sziNwXDl8|Wr*X#vVzkaP>m$DsBuXzv23^-G*DKqUys-=LleMGD0>fJ>94x|&*y94#$Ks6XBY(RGgfNBj;eg~E3p!?Z~a|h^NGtljA zCJg38y8skcpmA8x9zMu81ZcJbveyk13ZQ-`$Q7WNCpNx8W}@o_t<^IG-!=v+bwJ}c zApe4Tl#u>3=IPs@a!dhy;~HqR08|HpX6!(_pFpL|WCl=Pf{ZpS1E1dtDM>-)7i@hK zqz8)63{YC-~+`z zDD{DS4+|Ag+XFOW4Qel;-aCmqY$q~+YA4WmEh3J$Gl0qvP(1-L2^628JH$Y_fKW&y z`wn3uV%~~yC?lHyYW=}{N4yyw44_&8RE~lAhX_{?8z!I@4Jc(SW1v>JG%-MKfdu6? za@_;!u|Z}GU?Bo3kwASo)YIDtg)pe)4QkP&x&<^Zww_@h185}`EapjxYw}_WyIaWf z7d1+nZU#`F1C*zb^Acs@-NyhbeU>voM%F=nYeWhlJ=8(tzM#{9L1UmZ89Erc!Q&{P z9k^>5Kr?!vdH~e(U|`TuU3J<1H3n(0Nk?x)oY;n zRnSTSP`d)ulK{=?gGO;d>l;C}4QSm7XyydeHV3I^VCVp!+SC9(uL*STCFr~+(5^bj zs1Il_9eQ5_mRCV_DySz2YM+DFK7vM8K%=9OQ+q)58mN^FYNLVrq99j*))|1p68R+T z0Pw2Xcm_8HPw-jW;S89!!GUVF!Ql$@9RY3(nc%hbh`j-z5C+8psLzeO=G>j32t3{b z+9d*6bq^Zf1hp(m!E+)C44z=fz!1!k!H~~T&JY0JR}uu>g8p4NaVbJOqP$>;+v4eVRu+>?Rxie7P162iRJOQ*e2Q)4LI==*z)(PnW zl_#L~^dj&mGAKp%GRy|wX$I=yDL~UK=)TETXvznrMUW3bqhp|y2Wp*yY6Vb;fMNuc zHbJXaKw_ZP3Xq%!Dpf(_-JqHW>HYkL97(g>7 zpnEq!{X~#ypq2KZ);DDD0Z0@w^8#uGf%<@;@eokD0L2(c3{u8`=1M`UoBAdwSfEu^5awnP~Qr~1G$R0lmpsR1|a>EO{qP&f^=7B(~jX-@i*f=1l)CA33ZDs(43aD%XjrM}dNKkzaYUhG>On~YwP(2Qs z*#h;bL9_9oI8bM3VF0x^A!`pNGJtMJn8Pq1e787g)(UhZC}^|?vgd6A18AJDk)aQI zvlnQ5q=8`yLkB}ELnnBh0%(T?HwqeAgqR7kxg9!h z29gDxDW?E-4@h?d1LR~G5DmGJ6cnmklT8okOKAXK=Xc}F(6QV zjObZ{db*&J5j6e<8~3hbfb1j3-?9Yh0>v>XOd;#SK%*UySq)H(fZ8CS)Cj6|A*=L2 z?FP_TJE%Mz{4PYDT|r-00`fg_ZGtV7L3so;XNo+>0~*5vLPEw}2EzBS(UO6%8?#?LP_6*wQczhAJ5dcZX96mtKy_9p z1E@S|g`N-B!T_l)yTC0(kUmhE3tBM;D$hYEM0(CEybbK%=pUozt*YataKfb}DF&8l)c9hx7!W8or)echGG_3Ji!<7ogcjP`L%_*DYoM*#J6&05tOrS>XdJ z*FkI4Aa@ynO6SSo*28r8PC8Ji^)Wzpbb(s)pi&Z43WH{IL8DBd`W&=A4K#BJ8kYj~ zB|tSRsKkWqZ-LZzpn4qC;{(<6pj9BCItJAHY+%^Jumybf7$}{p-mnNPP+#(*~^s1%(r+W&pVqH1`eatAKn0sx?6K zPN4oPq!a_qP=og2fM$e1t7AcZEQEbc;N1qGb_Hlh6KK2xQu~5J1UBXfVnfd3M(p|o zxeg=_>REtFQqY>^RSXEfgVvLQ+z4^?a`5fGpq1?)aZo!0bUGevg*IrtEGTV)`rW$V z+cQ9AF{myAtpEVE{6RaYKs6f3SD+98&0vG#3N*qDYWstF3ZQZy6at{u3TPb{C_X`b zN{}l+VF=-a`e2~e7pR>9(giaS6eFPdDToOm7lHb&pk5m&{y}|kQ0ou0vYLTmDtL7p z$mgKi6x5prorDD19|Q_lh?_w&pk6zu?+t2Afo5`%Z<_$kcR<1rjq;UxG$nK&cPZdWG!K0-d!EG8dF4VCe=l8V4GQ1NBTn zr*?zf0_wGa?p=qZGLX${z_Z1mHH@HMF{qx~2NnUPY>?|9bu=gifZ9hOcY{J46o;S| z6-W%`B9I(N^=bylS|!Lyi|Py$7$9W;X#Tqod?o^Dv=Y>^gPp<%F%dKd1RAXXm4~1{ zC}hM1vH}X$iUqC2*Z^Kb2+A{{bOp_Y-JD2o$HF@)(rjL1pX)@U1zZu$>FN zff+P{2}&2B`EyXXz}mi`6a*T90r?y>wg~Fig7OTgqyVK&P#OT;MgeNUfKoQ-rY2BY z0*Ql4DNxw}T4Aso9EPBn2kq$tseq+?P^f`w5zt9!pphF;T!P#Usv*{abwOHBpjZQ` zgN!bK+Uk%q2q5_j&0g8T%#w`LJ|MF7ZEpmGFumLJH~AlHIY*HQ-9O*N3S#Xm;m)}Kyz52Tm~s`L47z-h=F*p6N^E41yufkQXNPKWDPweHzQmHiYHJUfqbS8 zJ%bapmjhHTK}MTF{(+TFpwn|#FsOsi^#k?IK%)VmbOj0nklm17Ss)Qm2!d8RfyzUe z|3EtjKxH1pcc79Dl>R{O29+5gcY^X6$Q)2<44RpT_zNTo^35s+(5^L584jUAVxZD= z6F9UMG3YXYN@7sW1Ig{6v2;**333Z4)q-LT6bG80pp*t$nGM<<1ldywTHOH|FJ1-SOAKmjL0UMVk^>ZykdkXPSQb>u zfJVANIUF>q4k{HvB`u_F02*O{wDmwa599(^dj(`K#C*`48*KGIXe<^Kt013&{0Pwj zYI%T8e+H#2h&>=1Kq(iLe?V$r{({8>%oUKl1@b?rjRJ}v$Q}aF$S$a~1D#qAnumpi zIB16sC_X@84%$}(N~55>1S!Ws?g7OrXtgtFy&m#8FrbzcD2za3$a}ys2`Mi?ISW)0 zfN~pXXU7!q*>8}Ya*%cvOa!tj1k^%+^p7AWg3j64&j6~mAT13@iUh?2C_RB%O_24y zlNms*!%pz+-=Ok$F2hRjDqX~$6i{vg{s35uj6HLAHb33d%2_@(7gnKy?!+y@6^rNcjpf4>>&`QVJ;UVC5jF zqyg=70<|?jB?{#H&Pm`ABhZd)P=18?2T}%u@;9h#0P#@IxdzoEpm7#Z+C!XS3aSkt zr8}rZUI|VEpfm)s3sh5r(h|siSgHlZH)ymB)b;?SOVD~B&>H6H44{4mWG6UitOs<1 zIOL88P;C!sw}aaLppp$T`w1CGgXASp9SUlHfOcjy}w5nmYfKnGkA8HRCHmeH>XV85rAYVh)e}Qras5FN78Is08 z;Q?_2XvN?Z22f25TJ;60%eH{er30lQP@M@W1wpw0l!qZH2NsHu`VN%KL8Uw>?;_j> z+Mx+q+XIS6NEj?*0QJxya{!w1FfQi?1TrE79der%L7y=><9OAKzjlqZb!XY9;6!NVo-eqYHfn} zkkSp-g9EkmKy^PT6-)-31xdr8wi2im0Qm^iPhQ9Xnjc@lfH>m;RI4p#0EG!C96%`x zlv_dOfZ`lf9)L;=P$>dw2Y`GCN?(wY4V11BD#OEugi}pxO~+D#*u>Pz0q0kbX$I2DuZ|N(A*eL8Tk0RtJ?5 zFq=Si2&}IFvkR8{K)D&zGJ&*RKsJHWHe^Q^B(z~;ejwXHszK`^L7@psDWH&t>?8!G z2~Zw~)d-;W04Tg6Aq5Iw$m(*?E;2+Z408=~JqfZER6c^v6M>iwD)m5N1FEY)euKop zUWQfRRXd_msI&pC%7%nJ$d{<~8>kf7zyR_UXstZxrt>z24)FXV zsE+CZ@8|>FijK$)uw8Djd3aFD1f?KQsKL(efTVLsz5%69P>To@x}dfxq^$~30jfJe zWeBeN64vSkjS+&*BnRa%$O%dy|AS0j%&>xCJp-sD0M(VCb@(7RfN}yTO@jIfpmH6Q zUO;6$s0RT$%>Z<+BgjmM{h+js-7H8M4H^joxg2B)s9XlsfS^7MsLc;zgGymg`UaJw zpph(4j6wVd8x@0`QU`K9ERTW4NkFL`lBOZ83s^}7N?oAQqKyoo(+5E1A!w})C?~>d zL(~!)c||oO7eHJ9Y9)bgG6mfd1DbgRwH-jQ0V-)hsSH&9z)XbX1CXykGV8!=+8}0CNi{dEUI4`$L^UYg zZ3gew1??*YrF~d?2NVyG7B477K;a1~13;kwN@*asf?@~KzlM!qfl4G$2>@!-;Oe)6 z(m1FrM{id_N)ym6ZlIn#sHO&$e4y2XAa{dKTmgkTsFwqBKd21@+7$r`Ur^Z%DtSSp zmLQ*l(gi42fM`$~2sC;Ki33E-1ELS)3y|rMIviv^C~tt$8Yr!RN;FWe+y)&v!Mvde zlpi2%R8ZLk$_=2_!)gXdE(MhakXi@SHV4HMD7AxfASl(UGk{i5fMz`=Gt2<*cn6h? zpxOZxD~L1#Dlb536;%F0WI%Zw6!xHafYd0E)Cwx|L16<)rN$K>b=! zZi0;OPX_nsKsDzY22dITxe-zV;A^jddOe`~ctPzEP?-#J0VsYzIR)fmP%MMafC9M^ z$YY!Gqd>pb{UHRzRT%YD=l&TA$|eXWstHL;xfod5+FUGd=2seEZjl1f#M$0hJ^If zL2(93A)xV5Q2c}1{Gc!cnGIU00xGvazJ=6=pn4zHmjJ~T$Q7XTil%~Rb0DQ6NGE7z zCa5h2Dm_8Ag3>t1b-NiBGk{7Okn2G6ERfMjkbR($1CR))1OcT6P^$^ls{z$ppc)<2 z4%7voPXOt|gK{pYrwbap1m#UoSq(~$pf(=JKcF$6)ktNq0s|xkfy@WRILPIoGy)1s zP+kYc8OUCcnV>LV1|F>ht@Q@2SOxV7AU8{ZN+D2~fy!}2c?b$6P`HEq3fiRvsvAJI zfX*I**aRv4KxG7ItQ6EbMV$BmOP3%&fbtQjqyWwLLE;?bU(ie(q~3#-bf8d#wX{L? z3n&+X`ZS2 z#Sq9D2;>5gJF%^_#U}^aaRWNLavcNe zY9h!wNl+aKs>va9gdpF7;uzE}+6=!D0@POlr9V(AhNN;(KNNJ55Gb8N+RdPx5Aq)< z6d~t$fXXsZS^)VR#NkUB`*gIf5I@(q;t5woM9k`dHm0r?4(8WAo7@jzo% zp#A~KHNoIJ3bMiHfs`^NGk{pZ45{FC?x1r6AgA>pRvQE(o&2M~kOtnXp9?-IAF@UP zw7vkecC3@3ivhF>aV|p_cvTpvW(2Kv2i@-gvcru5VjJit2n7aA8zHp|@}6YSDrV3) z8K`9p31Lu6i-7^u4g$?7gTe?@8o)$Awt-H|4`nD|0PV1X_!d<}fx(p_k0FsE3GCk# z22?#p7<^EvjZcR$nhs;|O%M2Vn4sw}!KwqcP7zdpgHi~nuLzn40<{Q1ty9ptM9>;? zSlbBH%LAP(1qv4ihIED`_&x(?=t&QtH6oB(DFVPEmC&6AkoDrE=m70az)VG;ki-_( zs5ulgRs$;U5PfjaI#Ey#1C?K(^bRSjQCC}o#s@(4AE@sIS}~2h!vuZpwFmg-4?hOj z9WtO)fI6EGYmI^0ilA^Ebpfa>0o7fgQe-o@j-*8_crp-k>kH)kk7DQ^08suzJ?R8= zA_!=AR1tWcej)?vnk>*M1)%*?pnW(R3;_(m(3@dEx2=Ho5P(ia0i84gI{5^4>kH__ zDcG$qpgT1{r5xxy70`+*42jrX&h>Lw0h`Du!fnl(Q0`lEAv=0SW zh9dA8G@#RGkn0rC%{h?USg3oS3aAvIu8E+y2i*`<%8-XrD}q)Erht1ipwsM#OP!!J z4N^&53Ig4ZH-TXicvPmHp$WXQ2UPlkZcfSruU59;3 zJ9NAnR!)Q3(V+4j)WQVSPM~rIG%B|V-WCJ70Mc@UjURx@St({k>zhtdjb^8pdJ_~jzKL}&^QjLM+@r9fO_} z9XQ3~uV+DLOMu$sptCzc^$Vz94yy4%EnC>?eh?d$a)?{$4@)0}+8MOA9dsKcXg&lq z_6wRt0^QRG3PH%qrfm$M^ZFVXCNRtauTKW0D%g$+&^a!B3|1)j&VYL5pcSj2T^9We zkRB&2XVx(kFw{Z!)PwpjpjHv2^$hA$fl@fAWxN=?s+9peFAh549yB5X%Bhbfp zn;GO%5F2z7AV?P|ZniOi+zyI;P+J=@?*UPdtYQMgI)+sYu=XdW{5%FwZxk{T0x=zQ zmJ%rUf%egW`c|O%JW#JxfdTdQbQy89eV|bVNa;h*ejljx1kJ*O%68beE@*53lH)-A zMOe=kG8zhsDNvss)Z2uN41r2;P@IDDKcu`Q+|!2SZ;%d1NI*tdK(lb5`D9SIfOQl(stuS|jQZ*<>K(<5t3UNDV z{0L+sNH-|2!fXKb%VDcqK{*OC8Uwk37_`a&l)gZtk)RQ1&?+ZT?*ufK1_=dFc?H>% zgx(jycef>I{RSwEL1Q%_6F_|$(5x85O^{LzG;XmPJnjUs2~rw^#?=w>pi&v+AJB+9 zC0(CT#1tY<&NT!u*u6Bs%eKy4<_XenqN0B98z zXnY@1)}pUo0-f**IujO@Eeh72HmpnL#oAA!;> zC}o32@j+vLppj7W)fo(P;I4wqeSlImsJsN#q>$7P8T&;KDNq{)5mKP=0mUz9 zT`H)ILxc$EoIFSw11hyat^H>Kvph5#xf>>=c^#~0II2w75|`BACOr_(AWTo2MQOE zpFu0(kWW&Av{6CrFi`s(H1o9<><>^))xprt0J^~)w0?UcxF-ji`vA>>%mJ$b&5(jx zVW1fzNS=rJ9W;jn$vdE$4YZ~a6dDkpBGiCtEYLc6kV?=jH>f@Z%{_r?e^4I9KAHmZ zHDtXIDEwfnyFqqTJ@mz252-0bayK#^@1?SE_8cAv$&u*g~cbx zL{KjkRPTfIKzs$N^Fb>%7chY2K{kS12nt8oI<+Q-K869CL!Q56^_F*GoAF-&BD zoJN4S$-)h321@}tCWyI{7ok3sA&-GLJ>d*R;L~G3qj|8iwn3*!LvEOc+-3n9F@%g4 zgKjE@oNE9|9iUi(w5dSx zgt*BKwC)cSr=XS!Y#tvJ+Mrd&p!OIjm4f6z`VnyoYMX*$7u1FWwTeJ}anRiL2Jje< zI`|9-$l30YdIyyHI~XAK5Txb-ooEBve*#+N2 z8$iAUm5iWXFKBii)Vf62fVe*mw0Z%QqG2Hqnh^%&c~DOoG(xGspw0jq2?f~z%b%bX z=%AGhYZ%nQVFz;yWULc1s|G6Xc7yl)fJ!pZC<&-61C<1zav9RM0J#m>Y()5i+z0X{ zC~QG@P(u2>ptym!39{AZUD)GLLIdJ1QhR}x(zubVdtoV;u7KpP|gR%0;n9>%m6B-LGA;k3FL8q zP%jFUR}g-0VgS{Y$mYQ6c~D9P_ryzfWM)X1P1hTmse99U` zKgc%Fxi#$!pwkW@r3k2{0O}ba#zH~03up!0V(^#Nq z)H;HtAjpm#NZJO~z@SzD$lV}YK)!^OGoYClkPe6~uyHv^N`=J{qWlG|l>?Owp!Nu; zB>-|ADBeKqHQ+Q3Dz8D~rLdd=N}ZrFR#06DQVANbhm?7c^(r9s2-kqhYD7wdoJ0W{ z+XL;~1GS|; z0ok{Qhy{=xpx6TKxB=yQkUv4C38;k#(hDllLFRx~LxJYFK<)*tzy*~Po55iZie*q- zf?^us6G+|wBLnE(Wl$-Ghy%!uc2JChRDkLP*jkwV4Evz=fKm%c z1AV}L4G>^~$&H?HS6B$6KErRACK)VJ( zW8a`t#d;X#fLHNM1n+#A177=&X=Ikeo%;R zV%QFDF+g$~Xq6_U)Cc8%Q2P!P!k~Hu6ru_Y-C*6I)!C30sMvIYR3btcmJ1a^=4BEK@YGZ)z z#{ku|5Zgid8C1W3!X8wgfa*t(3~1aNRLX;Tji8hSi7`;w0_uZ-$~;hs2`Udk=>Sx6 zg8Egk(*!{M6ObQ3t2QC!BC0=OE(C=+C{2LO0=X76?*ocOke@(&NJ#{$n{~kRcOd&g z>(fB41eFqy7Aa_rE-3AR>QRtMpjm5Bj}w%SK|54IsR34pgHi;f7XVr%3FPVOaZl&K&fseRL>^xeMq2K z0ga?W_Pilt5K@nWVjEOyg6b4V+YdBn14_rB8UhqUpqK@P1}KI=F#+n+fXZ%ATM=Oz zXe1bP(;A}h3TZ7v`q-e=XrS^PG*1hPEl{omg%zk&Ujr?_AYlu-=@han9yxD8@(@Tx zAJ}i$@;=C|Am4z(3FI442*O61K_LdS9~1|$T`r*V0JO#ebdwnBJLFJ+)Q+I?3smZYavI1qSlbX*TZ6(9R2qUp2Nb5Dv;#`% zApTkgP$~tbU|8)2s)a$R8KeWW$`|AVkPkt8P;HCI6(Dm#^)w>pK`sE5VW6A=DxpB> zW+4M8ZzHP%o%RDteV}#qAoqe=)}S&BWE*O)3g&l6?1Jj*{ooh@wXQ(!0;N<$Y=K(o zn;AfDOGt`>q-I!XfYgF=1|;W#@+~C9LFE#t#R>{Vn0=ra1hqp!eMC?lj0kg3D-RUs zpfm+4iMBC-##BJD4I1%*^yNY27s$n+ofx3@45-BmO1~h#g2D{cP6w3wY8OcP@ITRqbg2sf_F@W+X$h9C05+&3Z1lfe#69m;p@3>9 zP=6j24~P&2r8!VsgH|Ph+z$#r5DoGds5}PshCw+Clruo>1;mbkeMlt{tab+JMC4jf znF2Bg6gD7?h?RB*klB!03#11W{~#BG>K9OKg7)G=+WZg~gGNO_IzXur)E@?=4G@1n zc%|}W2GE!WNIk+|pm{4$Y=goZl2$?KPLBZ*%g8kfsJ8){BLk&;klpLRxfGPDQAHv4 zgGvR^t_jdw1SGA4LJhKG1>_r$KF~UNP`M9U(F<_{C~iTu=pL}yAm4(*29#4lAqHvV zgUU-#sBK^Xl@*{o3i2f=7lBGRQ27s<<(P@4(l9#AO4QVb*qBF-EE#Tjxf4eLvR+OUv% z6;wlmY9COU1D-+=NzC=Gzx@SssJ&}bQG-4nuXu#y{+x1c`%6Vo=@(#X6`Ahm>WYk^)qgfn-53k8mBN1_15G0L|({QY$E4L48(` zN>H5+nmtBt*MV{jdjA}>9v;-Ufwe?IZ5GhTFR1Sg3L}tNkhBX)TZG3dn+{$%2MG;CsSk2LsPzv@ zKagAj^9QJOg54(%>Q6v=njk+Q=M<3dK&FA(QJ{1SqCq(blt)16e>DTBc8BFgP;VA_ zH6+8HJ=%w_mDJjx|tg z7E)G#!UN=INE;FqyP!M)>ivM?1aun;DCR&VBqCNo{VJF$P*{P&5ES;H_86#D2O6yd zt*Zo`DFIsb1L`e7;s<0WDBeNie<1Tgck+PRF`$wFw0{m1;-FR}B-9Wt2HhYFQVYvL zpmGnCGeJEgP|E=n(&#B06gH6Z9@LTrsRF46rAmljq;VSwTQRBC`~3RrH1g&8OuKyeB(5tM%*=X67ASBR}3QCO)D zs!>7ZBB&%^%>dc811f7lVF8<~MJ|0nZDLUQyAFId4=D5??gxc1s2m0L4M9E!rFDo5 zB)%Z6Pmn6)5(ZS;fx-_owgf7lKz;`890v6qV0=&xhO~rWp#w^nAXArsa|R?-LFFyz zBni++3uxvXRG%PH4M+s!D$osvpw=bGrJ#{L&`caCu0i&L`dT0{kO`o&29~x#ZNs(T zd-*^q6jVNgWI!!SP`U-B9Z)UbW2c)0IDfKJH9~cCPC}7LHah&LP@wW1qz@Fspx!R%{uRg=EaS2n)qq;O3Jg;jK(z~~=3!u%f;3+QDjgv^TtQ(Dx*q{F>H$iLOBgWMW_N*gflWjH0}*r1qo_JgU%1PVn9A&8?pNp zxef-E6reF2xV|$@MZ912xbU|-YgT0 zbN}Pe^#yD^0u;kUA+0Lp5o=IffJ_I)B&a3<5(W@1WdQBS)?@(Pvj*y~E(G_aL8S|*bp=X^p!OW79D}WU1C_hjMz%n0 zOHi*7)LsFVn~*s`#QL>9=p5i|@C`Ab_3rZ+y1?@}Aq=hz5ey*=3JiV>{tOBXKH%G` zK(|>1F(`oV@e5=Kh2H4r!oa{lYxR>DW;1~9g#(?w(Z>L}`??!EA_AJTRA4~(1T>Ec z^9f|86V$^2)$gFWB2X_7)Xo9L5U6JYX@!GIL`a(e)V=|&x`ExC3<|Xg450QRs2m5S zaZr5;>brx=aL|e>*!mYxy$>pnKxqI(gIo*h--Bk)K{HpN@&Xihix@zsqd?l1p!fu} zj6wAts2v2#ouC}Eg8?*S3~CjD)=q(Jh44XrWQclLng;d2L903;?JLNPDX5GBt@Yc= z08tBa4XDKeG9A>rLhS1Vm4Bd;1tben3+g?>+yV*{P+tR*jzPWywH81v1W*kND-S?s zf>eNNTTobm=6E5!RFLaIxbLq<(NVGJpOA-X{=1W@Y$G|mT_HG+&Dfb@b? zg3>T3eM3qQ(5&q)hW!kP`^7%%B*6oO%MOSwKDq*#`<$P@V*>3WBtwx zkf5>+&0K@~8t)Q9`gpfys10-dFTIHa27RU#n6Inq0RZt9p`Z+5YKr_cH89-yc zAm4#<0w~piX0DKXK%h}CP)-J=3Q)-l+Dix7i44jopk5QGB?w91piu^d&5+S>P&|On zo?6BLnezeVI#5~%r6y4Lf!hC|8U%Dk9ms8x}t(l#}0J`54a!VU%6*;Kw(8mDU(*YXsZ(;!5%?8?q+QXpBuz^93p@{)B-v#Qe zfo_XUWXNLxopOQiwpj&+T82^v1%`SC&<>6ghEni&ABYD!10$RPv{E^R0dyNJXkD@; zgDC?81My~qTv*Cb$j}Tm*M%XI0d#H#=oFy{1_g#9hEj$GhDL@8h6)ClOKKS^7|OtI zvS83-Fl1n0hz0YS8A`yrnu{1J7@8P*!0I9G8<6`O7z!B585$T$89EqB89-)$M0**k z7(g<$44@m5iFG$6J_OkW@>c}|C@kw3su&6w8W@_uK7fRD4cL99U=c$GBZe4;LU8yO zFw`*gGc++&fLlu$44|_`k{R+D@)%0M=V0W3&m#hzh5-@HV@PEHg(K)RCI#pX!VnpB z^#$Pd?4bArwIxBP{D96l$zxDp0G&)x%uvcuzyMPNF%6qJps_zZ19n*gr3@!|z42}#w48aVbvwEBvycrxAG#M1Y{-DGRBL+=y zj|`F{6d17i6DB$uzNE(yEPNsP613(SQBFcieo##a8Uq2f1wr@of=X%7xD{jsW(oMt zP{_)0Pz?^M2SBYLP))muL5Bg#K(zpD zt{l={0@Z4u86wb_8>qGg^-MwgS3tG10fQ-n75JPFP-|C#!HB^S%BRFkGpHF5GYuI` zpnUSp1ns*;cBcV@0o+VbIRc3XNM8cfasthDfLbt+mJz7k2UAu$07J4jm{rV?fbsLu6y5iSAsxIt~mHQ-Sg zkSr)}mVj4rz;>U3+R>mqiri=b8YCCJB^c^y(JKx~AhFipV@Hqbo92Jk(PYZ(@UPgVk*?E)Hs0QI>+^NpaJ1(0t}Wnh@k0Ls^( zR%|!;Ml6uaV0W8h&g9I8p3VYV6Vu2rn*r2r2F+VT#(5eTrbADi1kIXsGqf@^gZUs? z&^&f8!yJZY=ngK#;WgLt6PqzY0PiK|)?*0Xo4HRQJGq2RSQz6ZjrT(A+O5UO;BR(ko)M6l6^t zWPAwJw*%!5P?-$sgMnfkG>;6Lu?2}k@&KqW1L~21MiW4Ldq5>EDAz;Ea8S7p>YG4% zDUcciG-?5=fkFLVNM8rCjt4Zq1TqaWatKNv5Lr-(407>q2GBe|WMv3w+y+!zgUUb9 zsxr_x1El@~)wLkMgJeNt39uDZpgI}kcUbQiRQ`a%64dJj^;|)&0`*=&u2q4b#s#^_ z72@*AW_3=s!~3aI1t?D}@lJ4?*fFh>MVC zy&*L?s#{DKV%EQqbOs7NQ27K}>ji3YLDnsRTmzB^rA?5FK(URegFqz?$VSkp zJR~$h^Rb|N)*&@JY&|~6Kd|%;Id2Y8bcJ?kwDpcA|xW6GfW)Ddg-KrLX%oD?X1z-lyz2x68BG#Uj;m7u(h zSUCu4MZj_(sAUTo%LL8;f_4LeX7oYxte`MK4SP@t1{&K2`4tqKAeVz`0m!~R(E2V& z`U1r)$j6|17}AD^tTcnfAjlNdaY|5%1*rw4d`Lb7jWI&jKZ4AM%#^6A?3E@Z7JqsXPU~U5SSU{-^BnFw2U(Wz)bAfyZ;e%%F zK&}P(5tIj4fKMuitbGF64jSJEl|rC4?<(lpN%T9`A*BH*e}YT_#Th7!L3tUnS`U(Y zK{W`--Jp0vZs8#O0UF2K1TH;btF;jM6XG^dIDyJiNbW(_334Z>#Q-VQL3s%@8VFjK z14)Ch(M3p$0#xRJViuGFLF-09r3EB@L9PVVTp-tj(mLv?NFaTXPyxjWC|p3Js~~$J zdvy^m0_7UWEG;N!fN~nF4hPNafJ_FB`om0z-BJefC1?y7v=1F*4`?hG=;gW4k?7eLnNg6c|;>p>+TWM2y;96Z^U=`y-neVB@8r``BTA0PS%A#UE$|45ZZyvH?<7LDqJ)f$yc-2CZvBWj1KVDyY^0 zt)T#oGl2R#pt1#2(t*ke$UHQtw+m_CfKm}Gzb$0|#VW#opfx*?JOIkY=x3yWQU;_| z1?pFUT2Y{$EGSKb(mcffp!N!~t)TWPqD}zKR)X#h>t$#GucZX_(Lmu2vJ>QPh`FHn zL)7!2*npV`$?r?SWdw)SNP$>aQS)jNE z)e<24Kw$xjD^N-SwRAzVz@W6Yi~$s{ptJlyXTE_KKrK7aSwEnh2ufq>k{@Kw%B?IjF=3*$+|)X&r)M1=Q9CwFW?~9njih(8>Z(n*vnsf$CvU zx(ChUfnpIfu7YqqYPti-LDCoGtX4#-gS2WP`ao`h#2BOx02-x${YMB0Yf2QU~u7X#w|+LGuv};8F)-S0BSd@ES5unG8846I7>z%00+R&aDi{cd#{q z?^pz_@&%Pa$g9Xf^*E?51hu_D^b&^U43L&OY@7wu;sWI#P(2UY$pu=|2XY-KY(V7^ zXjU53a)7m-K=~51j&KS56j{&=7^rsv>YIUbGblBI`V*j356Ur+b}q>8p#7(yS``w? zpmqtUUjXU#g5*JI5VDeBBe?7b=>)|ZC|85>E~vZ!xea#KYYzkH1YQLOP|pOC_dsa? z08A$2`?b-tMWg$HrQ279=l^``RsDuHz4wRxn zVFp?+1KRTsT0I3yOHK@_48;uj;F}*R89?XUmolU6jo{$T^0fF`_00$VwtmjXx3Get@Y1h4e%QkQ+fOI3TeE zst-Xa2Go}Wm7k!x4HP?|bPDkis0Ig>fuQyY=!O{NF&0Ql0kwxg{RU841@$07H5sTa z3_6t`4=(<02;dj z&F1zpfKLAEVCZB3om323k2D8KWCFuvhKWf09)=Eveg<6zQ0t(d0hHc)8JfXsa+?{t z85$U1H!OnID}&~PCozELmO7fZ2v%dqo&Q_8Nli^?|U#_O?LSV0-sK*kF6VFfuS$ zK;3D?#K7R_>>L{8$iUzNV!H_|jAq*WLwvTI=s}BRi84%kSY!$-~ z2s<9c3u9(raP&2d2f64Olnru(7z;!kFkFDJ<3awi;svQO ziU+xE9*k|oz`(`_5eK=`3d#n#Q-mKP4sz!NC>!KX4*`g{s}Tc37nBWhvz8!49OULx zU^XaZ85ll5*kF6(gg|PH<3V=W2t(K)y97i)Y>+D%80;WyaC~inu?-m*Bt*e#;td@c z7&2gNCkBQ!Ft#%T!#^0?g@GYX45A+7iVILS$OZ{K zzn7qFQ2c61Lc~E~7zSm7{PGCO2Ki-<6hsXu+%%*iY*4tZfwDni^$E%bh1Db(kQ$I{ z7#May*x+>g49W)Cr6CJe0}eMOIS3nM*Dfd@W(v;k#<(uR>XL>!bhCPCStv>~Mf5eLOr2aIjVz`&;q6*ppFu!6EdX=V?U z4GI${J%}1mn9PE*L1E&e4-p5YnHn$~5M+Sxf1CV;-c#t12LD?W3 zHii&!kRNwJ*&si@fU-e;WH5rL0l9wylnrv{87Ld%PBUYO8fQZWhA1c-8#G!0ZS*K(U5eJoZc~CZ} ztlI%*gM7una0bE#hsiZCJJcKGmtPQeu)9A4Lzo2vgJVc&h<^|RgOnwVZN%^k&NgP) zXT`wa7z%PF1H&;8JKQl6l+b@c*`TnMv1VX!jCXeQb7o*jgRuR50}L6~z}ZF&SKw@8 zh5{RqdN)T;A47%>aJCVHk}XW!m>~he4)yV2V3-DG2RH@?Gcc?Jvx6M{++7(0>_F;+ z9m8CM8Op%y5KmuM28Ky?3=B?=e!(8Dt_+L7?4TfL?_h>qV0H*NbKV27U448aLjxFI zf!QHJj`5BRT=onMPOc!f6N49=?aWXDVaIzpF)%!GU|?`^^Yrs_W?=XOV!MZX`1>(1 z_&G8#IJt-WySXtiECaDU-Q!&xeHo5`*&)sz@h%LXKx`k+;1Ez`I599d`8$Sq`WZ4z zgR_koLY!gZ#tg6EY!ikRE+BCyXU7l*hHYTBFDOYeWVnLFeVsra>jJa=LW3C?7?y$A zLGFH@ehfQ6>>y7UcUMD(2sZ`>r{Iv_kWdDOc_4PEyE`aS4}saB5NBYx24;gyVPLoi zVTZW7Ffe=rvEze1LtGgc4BQzQoE@E+1{QCK`;9CZ7{p*~O9lolC>vBRS;5!_3=AGHwjl#U1dMIO zz>ouD8#6Gpz}O}X43l7NQwD~4Ft!;3!v+}JoPl8%jBUZda014*WMH@gWrIqNCr~!1 zJp2M>gUUl5ABg)wWxfWK4Jz|(plnc??+0Z&2Zb_}K-sPl0Sq(1Y)HOa17(8}N}n&t z%n)#;cn`*QW?*;$W4kage1frE85sV+*lr9AMSf7d?hFhyFt!H+LmQ0k$-poH#`a=h zm<3~dGcYWHv3(dA)?PpF9gc= zVqnOCus!|U3>jv?*+vZiAnbTwe?NwbPzDBP7uTR5{~(4-V0NgVTMz@o9}wFERDv)t zNQ5ykID0s|_<-7nV799xD3+RFY$FDSIWV>{1H%p&+k}DP7L0Amz`z#{GRM_1#EgMK z2gWvMVDNyk{oNQU;A}sJMG&@Yh@%I?CI~ys-Egq{z!L#7)6LVzm4U$q z%=QEouM7bowx^%7qb~zP378!c8RhTC&F)&<%vHchrBqA9Yoc)}G9m5zH zD!}XzA5f{*17U;3pMlu^j?SPu_Y;`yWY_^`J26~?vP}#e z8NR^TP7DIE3=GaeE`}xs&I|@{whMy?obAex1YsK)S~xP)z}Zd=Q^0Ij7f@Gp8=P&# za01RYW_Si?n=mlMf$RdQH)W85v&|Ts;B0e-7&zO4p#;vhWN3o14GkFP!P$lkyWngi zh8u9UF~b))+k}BD9%`?lDT5lEZN}gPXPYxbz}XfId2qHRLlcZ`WWcZv&NgH?24@>F zJb|-~8UDc8CJYh@P;!XS_cwb$5`!354WV+et>%^51-Yzu}KINOq89*k{bz_1O@He`4KXB#mv zB|*(MF=kMMvrQPB;A~Td7&zOEp$^VAXP5zJTQF>Zvn?5p!Puq-3=iOJLk5Oqs9mN; z3^H)GF@pu1ZNd-$XPYvl!P#aEJ#e-;!v;9pg5eaLZOQNf#x^rxU`m17WoF2r0cRUA z*umMx3;}Sq2}2s3ZOSkW&NgFM1818vT!OPL7(T(-mJAZ9P`k_x7!2TSLxvzY+lV0# z&NgOP0B4&p?18gQ8E(PZW(?opY;y*YG?@7o3`TIaC4(1?ZDGKW1ZNvEl)>3X3_WnR zF~br#+l1j5oNdbR49+%VU`mJDWns>s2WML_c);0~3~?~Fr2#_`oNdU^17{mCtbntP z84khOCJcArY*U60aJCr(Uk21(OLGPlINO534$ih@h=Q^W4Gb7M;A}&NC2+P8!!9`6 znBfwfZNl&h&NgLW%Y@ivXkf;m0%w~uSi#vA3>|Q`CBq>Y+t7f4B@3$8(2#)-&NgBQ zfU}Jmroh=I3|HW6QwE`Im|imm8#vpXp#sjfVAuv{TQXdMv5gEE7;>O`jSLyo;A|rX z4>;SHp#jb|VORran=(9tv&|R;a$)9}Gg!gd77TfCwk5+17~9x@;ToK6$iR~a)oX0T z;09+KGql0kCJgJ~Y*U6aaJCu46FA$P;SZc`!61?kGt-ix0LC^kV5oz$4H=ff*+vXP z1yJ=S#tcPpwh6-uINOwA6P#_va1PEkXLtfNgINO{d2hO%&Xo0gW8RkIQMg|59o8W9ihAVKk5yLw; z+n9l?9AcM|feC{KoNdbB0%w~sq`}$d40Uj}1;Zpb+mc}ejBRMZa172iWOxE+8!@m| zKDY*U69INOY&1kN^RSO#ZXFx-N(Eg85fp=KHxFsQ-Vh756Vwh==K zoNdg|0cV>qEP}I58TP>0W(=p`Y;y*lDwz2e3`%geC4&KsZEV000%sdC(hDBhuJ7}nh;U1Xn=?j`K z%)np*X8XDahcPhB0kebLL1TB9AZ&mC5C(>KV0LIQs6RNX0i+i^OvUg9 z#107xb`D}-;A>=HaE6YZZh^Cn7^0dO7@R|Wf?S;$7?y$9VIlF(K_Lu>ni&|J!$RU+ zgMt`twLsXu!R`!Etqcs#@lHXmo^A{Wz--7kDnlDc+%?!afPujd%m$5@GB8wt+1{Q$ zKEVttz--94=mjtvGA^3Y4$=!53%vwphk3et`Y`-xXJ7!0M}o$0Svo-M$N(Q_1_m<- zJ2)VifgumXc5(xU;RZ0<-3=5zZ@_F%zu*uC28m7v1{WuvcxN9s1~V`_z|$|7fuRJ% zc69^|fiv`g*-oMEz6=bTz--WnIRnEkFxw^GImnaY8IcYU)#lYa=>Jsna@6BKZ zX1lqBFfcHrK-hku{{B2L+b7=5&zIo}m>mLg8p9h9+tU#|{>jkIz~BO6#~U(uz}ZF& zC*W*j2BjXD8WV;&aJDJK0XW-{VNowkjT6HYINO=wLmy1sg`uw>#&%_}ngCGj?1Ho183Ja=|6K-r)%$x|?PydlF2INOmS zZYD%MX!dd*obAkDHVY>1!Y~icc4gq34HI``xCCdrGdzK^L1T{`b0BI=;td&U;A}?* zx4AHJCx#nvwljmmJear(!vi?mm7!`rOx%rO8Jz9T5VQa$?!myb5W@Cx4q}jkvHcks z96)Rz$hgx45Zm9yACzBaLD}(cAq?lh?BFm^+GbkBz~B<(8Ri=A$Y8Y?#&%*TSi->I z5**+Ink{JpvqOSFnd%jc?Z?32vy_3s)iF54$uW|l0K|53^a0s50m=rIIzG!77+jqk zec}zB7&w+g*+vWuMliN91B1Z|sJICOLjsI#%D^xM#x`SM*aKrbGBAX!gsOKmWZ+l@ zWrOC9VQd!$28q>BaTh}dwlz?;D+5CojP1_AAhs4N?!mxN0b_eIFkFDKy%-qy)f&Bql$*`V1ij;#=JP?_%r zWrOD08lY^@TpPzWh#Jsb+a@R*6k!J2A>yDhy$w({Xf27%4v07?0kuHc0id-CP<9{# z1B25}h#JuBaUYZo8lPm^1rZ08fdx=DXwv!xlpV&vz>u~Zq9z=)&H>DJ^ABP(P5~# z2?N6-7~7PAf#nEP+>C*t1Ih-KZ%jua;-K=U1j+`@eLRA)L31A=#~^Azb00^bY|z|? z-f@UHXzt?(lnsizYaq6hr?X=a1H%&#+to4NC^&%O50q`};=!PFf`P%!)iK^AIDo+e z$_AA*K2Wx+V-Q0Ul!NCmwpzL6`2nLl?5H|z|cr*CG*dYuIF;I4B00Tn;m<`I|3=A0%cD!S# z3qu){?G)t6&;eyT`};A>fw2Re87@HCE}p>*kDzSunh+>Ez}JaE=QPL-PVu1004o?f z#E~Hc%yy1(5QZI4wv(eX!vz>S$dTa}obAmZbp~XKegt1jhCa zX5hF0G2hkCg+Tz$4q)^h6ylsND#vu7&{`2;R=-P<{8BB4950zX7~VO zgBD3#gxKX4;LKnGXZtf0!P!9!Yhdi~V1`{#wtKJ-!wo3g!_kT13ykd)#GrKvVy1_$ zD}x1$?dQS}0%Q9dGgQFYK@4p$c90*#6e!!%DTHALjP2*lunNWw3Srm;V~2S#yo0mD z7}PF9?DcZ;XE1}YeFGR=U~Khg?!xA{# zm|+i`?Z|Ki&UR){x&m>7kCO*O9E|N8!cYWbyZAAzgR?^!4#3#1ZVXpoY&S=S2Qap` z4};8AsF~g&3=S~14+BFMobAT22*&nzV>kt8`!KwMvx69Tu0hQSVqh?Wv)vi8;Or2F z6)<+N8^azLJJf~Y9GvaPU~(O5PG|r_0gN5)!cYTc`+E8@bivsEVGIjk>|hUub8xl~ z!!Ep>7BXV%P#_hcMiL zvBO;%zQEaT3^I41>cf2)9N_FAh6Fe}grNt@4h(f=m;z-788a}fg0UT47`DOLJ`9Io zZ08V$YcMt_U%=R&?hGGb>|kRCySorK1O+=Yl)>3<3|%mGh#$i=7(3LDVF`>K?!vGE z$_{o5Vb}v>yL&NwgRy;_85Hh8%n$bQW-x=XeT^B~;Otg))S|*ioJgJ#e-^!yza;#Lhu7~98@7mthK=9n7!;#twC6 zxCdwZFt9v=>J1HI(1NkU{TV8t>`<>@h66CRZ!iPHV~F}tKPLt`INOCm1I7+;WH5uW z!(2TWlHlxMh8`H((}`gblpXFE#IO#=_V8iY2V)2LG2DW&gPa*&K-p2Aehf@cAa02A z4`Gl3vt4}R!-E)Do`S?(f*pg681&$5V}>v|+k~M5$_{omWY_^`8!4WrNx(axcJU#=E%rFnGY&KEVtN;OuaQJ1}-|5QD}`htJw%O*rx8OAl2RJeafZ4wB&aS}>elWI=CqosC z9pJ)n1;!3?VfX}PgVLeM7mzu=@osKz3^6cvkS{|Ul|h^5hI4SX5yLAu+n9mvJH$P~J|+xGaJDIf9h_~(5CvzOGnB#E77UYM zY(IB~T`;!4JHs;=JAi?K=LgjM5O)SWI6Ii30?H0?VPKdBW4rk>T!OKE7#Kdm*ue}8 zLO&tqgoOGs_(9oWpt>8%j&u!Xr~$M6;z4CsAC&Fx=*zGI#`be$I0I#a2Gj4r*v_5| zJikEZ`^EdYhA@ag*#SO|40dp~GeZ)b9n8=LWrG$mFN3l}A`KXhz}bcjU*K#b28G`c z^Ftzy8B*YE6NWZ8+mvAqoNdOi56(7cxB_PfFnoZrL%ls1Wd1>R&6U9o#&&mRXo9gl3>bF6*@g`F;A|rX21ck}4`T*BINO9F0M2$~maCSI@A3Ib{ zpbNtsINOcEhXW?=!|)Bx_Gbv%z@WZ>Y2st*og zxB_E`crv_#u|u61{=nGbK@2Z=!0O{2-TWEscp+?OM?Z!D7~9>Ep$Enec4T+}WxF_r zFuZ}WU0oTr@j>*uxH~djfU@0vT^ZK!L&QCUof%HR*=`IEplly!cLp^9h#DVv1_lQh z+uxOeOAspV@5Z15W&621GI+q){>}_L;A}sJS5S7aqdUVN7~9#M!9WONPOxhTgA0u9 z&cILrV|)8COoOp~{28{v*naK|_h9T`X9gi*h&iBkX#kiV67T36%uoVj2lz0wz}W!| zCt&PQ7ltQLwo{NR!#60~+0mJSMFeDKNW8PNAA=U09mL=SW4nbg_`%qo?hLD7Y+qM~ zb1=5QAHxF}JH(SgNfc^kh!2Aclnt6&t%9*#-5BP<*zODrJ78?jV1|1zcCa6Vni#|! zS5J3_HYnT8oq=HqjP2>eunEd`cZ*;+1!IRWFg$~@JwOu};t+E@f?OCJplmO91_nPU z8&tmKz}W5#3~f+0sJ%1~#`bh)V32^A;~T)hAO&LwhcG0-*dd+_%b;vOcLs(-Ft)!R z!!Ib?KOlsGM-pOAfMY0w5{wBhD1)*=VcP^{gW8{c zPu0C5~K(b2hERMg0eyLBR)zHanSt8EGQc^KffadS6LD``BI|VI>c%UHz z!#*e*G?&Mw4G{;;2kF7sh71h;c0K^8xA_GGNgbkX?W0(YCgQk=j4#C(43=FSeY(oZy zBtx*?ctaxwhG{Ui2?N6i7~7PAA;t)*#*BfX49W)Cb_B`>r41%yh#FAZh=H;}X=4wR z4N4ntplnduP%?q22c?ZwP&Oz%Jbj_Xc zD6Y9|AmX4nT?S=?;!(jCBo4|^3=A<4Hh3TUCMX*eKF^?RQ1}?wfz`)bI5IHQz}TQb zv4@H~GcZKJ*e(nVH(+d61_mhys2Vp0h7&M0sNQ#kihD9Jyn?bpVIJiK5eFIn2g(M8 zd7m>x+}W9d;T4n(%8xlN5OGj`{0C)&;-$wGA`Xg|1UCp96ffVPY*4&3xP!z&r3nMW zJO~?{CVf1>;^4iy>!55LHFT40<&EsLOlH#K7rYw^<#z% zPN5(*Ahr=h6_^cLKW4}<3(N*t?8=Z922v9o0@|G%{_)Z2piO#XQ%_SgB;ym85lmm*@g^O5g@(bsAgz_vO$MpoPx4Jg_KStL=C7s zaf7l!Y2XEv4N3z+Q4lqtc%KDjgW~-RlnshgmS~6?P@D!q*dQYrZa~=}duw9AYK%bk zK7+79Rx#Mbg2h2rF-(B4K~^!`gRntXF*L-1)tG_OiA+404N77R*Pv{W_=E(oI4HR> zynwJlPGfLNWMpu64f1vLV_*mXu|533^>_@3?d#(YT0K_=W(T=~B&LDcpgqnE44WWq z@P6$p5O$bPAOize5+j4VpL=|Ga0r73i0$tP-lg3DW;;1LdowWff!RSmu3-!eOF--( zS3gi}#3VB^xP#b63=ASEP_{7x!x<1e#L)?~$VMxbk-;6rc4A=I1!FriFx-N%T^Jai zz}T(~3>Iln^==FdeK0m?y-+$-+=GF^4#xImU?_vJy%-n{z}Vgl3^5r{^*#&?lVEIL z28L5GwjTq7Mj2*zhZ~(>*WMGiXf~pB(V3-7B2Qx5uWkbb77#J?V*r5yz z%W@bQ+(Z51L1$~s$c3J28NCTDBFdBfvE_>Hg;rSC@F@rofsINl|a}g zjtmU%N}+5g28M5C5H=`bT_|T{@Nf(Y_xE>UcmQHU*H3Z?~gNLi5Pl$&h zLlK;9#IOj?HfA^nXPYoERYKH*;%*g;?Zm*KRRtAyW?(n~W4kgigj9pXUE*CM7#OO+ zY#&fj%`geV4glqmM=-Vl14BR!NWD)0=p-A7S}5CyfngDhZOp)6RtFU~VPN2>hq6r> z7`8y!pp#cr8X)4JjJFKRHi>s+P-}#Uo5Z^?9D}k=;~g2cG(p5o<6RieHAC2D@s12_ zEikq-gIz0(?ZWT}$~KR8WH{Ca5jT%_VVKemVOzvIGTiBav7H#Sx*%-Jct?g?aJCae zUpGwLnZcz8%#L>n4q+$(vq7yc28I(5Hn^No>IJEZ1bK^L4ulOZPel5_;-F|}m<3^j z%M+n~usFC3nFL{j%MF7GU~zD{u>-{R3JwA7+;y7B$lw8HyD=Prv%?wcCPBr+-5AU! zgV^z)Aufgr2phBwtL!`Cn#>j11G4KJlnt`WX$eFeWY;z*8)TQ#QiwRnt|BNK6h4!{ zY|si?28O6*AT=i7HkHJ32peSAF(?~k7t0EWILNLfC>vzg3@969*D)v?WS7!Phv_6UQjkD%ojk}pfG1!15pEVTLzR3a@!&(8|1b} zP&UYIQEMUUL2j#pvO#WJ24#cXX0#5X2IRH`C>vC$t%9;a{Q|M|AT?koGZ;YFpd`cK z1!04n&rk2*L(ApJ5w_4Jx!57#MCq*@p3s3<(<;89e;`T|non9D}k!8wM_c z*+HQ01;Y<08&s~wYy_zf@&j3X0Llhgtg;Cr4zjof%nlClj5lJKwuzC!)5XyP)HhiK zV*3WTMg#;foY>6B;OPrG2F#FwXA2{Pr=LqaXivHvnC<2oe=fYyQrfZ6e& z<3|`)K-fY4;S3CqAZ*aoF@xMzkU8;Tt{z4VWgvElqmQQ}14GAFMg}iOPaja@Kw%q< z?ZmJQ&UR)f+71(UVYmQiyE5eMfQh>?2L5+U~28JaNHaNl69bjbe@-+nK%@0sEDBeR3 zLc~Gwz5&VxB{-%-5OGj`$%C>%6~+Z98`MwaI1Eu^;l#l34#sw7V3=_PA`Z%5@1Sf@ z{wg{O5eMb3V^B6Ie>oh3h=cOiE+`w6zZ{N3#6kJ%5|j<1J&Op?I z-17p;2Dzu>EJz#_nhXpJAZ&1$KY_AAuIM-iRs(j!3n&{DCVJ-~;vhHZU4XDbZnywt zgWQmF5h4z9gV-ey8x&g%3~mrM_zW(V%V6<%P#dWS#x`PL;JN}8H)ddngR(*Hc>`sG zT%B|kq6TE@8z>u;2IgIZh=bAq({%_Nlm;T8Y*3?N0+bDkYrPu~H6VYrLD?XGdEA7E zgZ$M2WrO^+15H{HSWl%QAe1-d9HQ;uI7nBVOpKVY!$aP{5 zAZkD+l|b2`@Hqu#gThDbAw&(xoe@wr$ek*WAmX6#>4LIB?i6|q5eK<*4v6jV3U2W2 zgR(*8ywMXz2Cq=ih!O*X6_^dl`%X_78N3~x{QZ3y7y>|SSKm;O`X^wvpBIRo^OTXn z+ttqtly@dT*x<9do`Klz!SSH;bL5^eGC+2GF)$c_*wFGM2*L)3)dU#ZfPvu;jBUuk z;PIT1!5h?0Gh$%a2V)yEF#LeBL1An20-^?#_UfQ)P}qKevO!^M@)Dv36t+cBHYjXQ zK-r-3XWA=>8VeT&hLqP3HmLD>2FeD7Io}(II4I1gLD`@%S9uE&2ZedsI|v&T<_hm2 zY*3n<17(BK7{)eY zV2JqvRRh{L0b_&qP5gw2gWT)@WrJ*Z24#cdh3gkY4JckxplndQEP%2>@p1#o2BmqY z-w^enxY!0|gZy6c2O!K22^NSNkiRxT*&u(-V1V>oIgR? zpm09H0}%&>b004ggLi09sIMaf!yFJh-pdh`=C|-NG59$8xdexJGn|32LCee;zCqcc zjtmSed>}QTQ6vTiB@o-y-4RqurGeQYA+AA&3{3n?3_hNIu0f%G3=&{AXcs60gBF+_ z5(3%-VgqM;GK7KH(DJ7V!UnftPC(h9aPtyiV({@bj0c5J36u>ApDR!{DDG+mA!F_;w1^n2F1k=C>sJ2EirgR(*4%q9;}0}5v~C>s>EvtVpT28I_fwi5#blLACND17EX*`V+_ z0%e23Cr=Tg1{6Mrplne1h$%tDLE$q6$_9mxnKDEilvX!^*&v@VFuZ`U!R@XN6_6Se zaNF+;lnt_Ljw(nTx|(MFXM+6ecI2 zY*3hpXhOt6VWI+MgZzF2$_Dv8NeiL|daJCymo;^(5o#7sw?ZFV| z01*eJr9K!t-jLx3oNdHVP42 zTX41ogP8|R+>)UJ&UR$r@PvswF{HrR&J35}Y!`+WFPIuv1{rS{+l?Us&UR;b0%vln8#B21LeOpET|f128LZQwhIHp zD;V3Afq^F*s>Y3hp$5iwXJFvSfr@)DFr0y~K}8+IBPbi>7qMKh8t@=>1B?wi=N86x zWMHVugQ{_2VDQR^v5gtJ;A|5HvjUj7DMJdJZN~5m#&%|4@G69=0iBf!VS|c2h96Ki z$UPcGU^Sp(k0AxdHfCTr0Ao8cFnocrofsH8ilOSAj2TYB*(MABqppSH;BO>kA4628JLg z8`Q2ytA>b!8ccOCwlf1mK@AgwufJc2V*~@k5-{7}&&ij8VH=1Y6z=cm9?Wn8#14)C z&(U84u|q*Edj^IFV0JKgt%5`?6N7JPaG1Xj1A`NY9pUU47IPYP@_IJiu%>AI|^=h8i&2D-^Vba1)3f4_a@)!0-Uf2CX+>VBo7~V(^WJtSfM< zXJYVk4UY$TK&OF;!Os&kW6i+e0Al-k27?ZH$pEu`JwavBBoG@k0M5X`FaykX1~ttX zgc_L`{QRB${X!TRWSU@XR|dIe5ZlGyKPZ@C0hsOX3p)Sj1DNgW@8=rHpwt3V6C46s zkC6dphx&oe_m~D{d%7_&oC34KE3p_Zf!Xl^j-gQuL9HOY@d3`xE(`)~ObmWOuFn2J zE(}f}cBrqDYY+p2R~r+9zcXl65CcOHh#lbS2Xgfz5IZykd{~b~I}?L{Xb5P)ogo9n zhKAb;FdGtXPuiIn0t`L$Q^g-2IFfgRR*p>_ov!LvF0|SP6aJC`CBRJcL!KfdiH{QUQp#;u0 zVb}#{n=<@^v&|U%CcxC2GpvHMEf_w)*_I3r6QODh4HzcC*@g^v;A|rXrAaU~#ta#7 zwh6;FINOxr51ehr;4>Mf-kf0g@7rh&u*T!V}l7{b8pAkeTnLm7k}>=D4gFbT{Kb_w!lU^oS4hXi^0 zhcMg%vqOVH=eG+?XJQBd&HBU}GOU5KjTk&;Ffjx;L+bP@FgwUKI4Fc+4~XpoIV0;6 zi0v8#TGqtCHj{}Vz%?iUbf%UAgdOkf@5_(@W`i>}!vZKf*gu5f9*FG;S);-N<-FgqwD-j#u&1jhDcU}%A{L3aVb*x?KeXF%-0Q1Cfa zLbI6|0)kwfg4`GwOdxC*$B-ZfH!vG=K3Ef&4LQ$h3z+Ti1v>Nj4wxMh1S+>>=77uz z1DB0qAa*EZ9ZnON4LW8!l3~vrCI+yzAq)&3AnXwT00st`xl9Z}jxL`5@s11+;A|&` zCG%k7&I}pzVQd!$odqDaFDQF5I6>KdJx-@L2N0A4XH!7K-geI z1D1is!G^wpu)&6QEeDH(x+x4wE5K|}H-cdwhz%*u8J>aJE_9t=DynHYjxUEM%s zy8@W)4jKkv2m-TxJY8HF7}B8Z09OWvDli*z9@Gpl8?wIc4454bu4mtX*dCssEpZG# zKy1%o@VEiTDkg>?=$M-kgbnuCBq$r?u{}^W$YXDyY>>yYR)h7%gFLne$_9;fn5}_` zJ25aYyn(VoV;wweA>yD4RcalC4RXW{FdJkO0|U!?kT_@s4+BF5jBN-y#|a`1GBa%h zgbgy&ZX<*ZGLvT$lx@hs@CeEVnIE$mA`Uuu$Y2YE4H{EA0Am|6FlcRsh=azL@}O+c z_|gI>8&n|jZG)%*jdSjSvO(*6bGAdoK{GP~J3wquNHH)NLD=B%Tm)r!Ko zo4pWmkRNA2*&sg(>;s8|T*knl24REUTn1%>V&)Q*4e}Y^ez1B_5yIdDWrN(a2+9Vz zC+q-34ahw@2O(^bdp3aCAfGcZT!65_cCj4-sWAnQzZpT?}&LD?YPR)-<# zK^ckf2!ss^H!mm~6mDHmHYnUSz}TR1@}m&-AUCregR(()VL;g+_kV)2LGD*O4p9Sg z|0FOQWGe&1HV7N+{(n$5D6Afx0I4?vb=Mf!PD0oq_t!z$AomNMf{24mvVpP9%ouh- z*&x4sfwDn<@i`4q5AsU`lnrvf!WoD-$jxmqwjl$F3Tc2h0xe0p0s>2FCVdVE6-KdxAXAz@T=S zi6Pk2IT+Md@dC3!3tkNw{=wNs44bZi)PTf|8Dg%&*d`1d*O(ZBeZa#W3?|n>Y=1wO zAO?nn8xXdeF9X9C7(0N0;T@Fi=f=QLaTB5jRG_~AvHcyrL2a;qV0I`dXc>5JF);)O zfV+JRGGMl=tBY$8g9e!G16uCKUn@CK!te{k4smqx4E1H;xyQs13|hnE@5dkqVf(oRGcY(n*x>U{&w<&VexSYW_rPp_ zaA%C^K1gqnYlyQ4gAj-v>J$#L*bL4#Vu*sXjTyS&Y!ikJ5O%z$p9{k^C_BpEh~X2Q zZOp*;fQcbE)Cs(1NejddbM^;?VFZ}%2HLXBumH?<2VHN%umjBYbp=(6W)GPdg2NsC zyn`7SB0%i;fFOTgBZd!fb^ybPM@$UC;BhcRhF6baY$FDqryzEir)xL^gUM4Sh7gko z@Zz~5INOmS<{3=fiJ=6}c4nCM94cT)*24Z`7f`$qhL_RPvfI73F(Zow2HYkD^7#My**x>re?jsXJh%flsABJU6HmGdm z`UDXNm51A)Y*2X>^%)`#svp_DK-i%A(G1E4)sG9HY)}B1eTAq2twEXwW`jb9fnfuL z4Xz8mLD?V~vu_~vM&P=j1Ih-K;Xhz(M+Sz9?+`Vh@|^7lgbi}@JSZFFW|f~1agdv5 zfZ3p!U|@IzVT0|J`vp=19%f^RfwDoWW_CE zZL@7Kwh;rvD<~UO-&rt2)PQQ69Z)uCAJ!Kr8@)eY|x0yJ185p4@-{~ zq6RdIBf$n?gZ9%kfZ5>CXV?N^gVX9S7~6<}p^hD-9x`7k!vSG~!uAl94GLR5PKY=t zY+1M%a{WcXte7*aBvQVw!>B5`+!5mx%|Y#uPNv#}EQ#gY3EkWrOVU zjx zAt1KDA4oYv8I%p`u>F9t;{zBNyo8t;Lj1#BgMt|ta=`4!D9{PsfByhiSB5_zwx?gbr6~hLk`gmR zxTjydO9TVM6DT_*j^w-|Fps4ULZvqbiiz|IZC=maXqz2?N28IF%8Lh4 z{<{fS4Y*7@0b?67Fo>B##6j-SF@v(585r`QY><02%pu|+H-tdhAUCjCK*T}gU|lda zsP2HWLFHbVB}5IVZrTQAgX$(WD~LF#-iZRUL7~aOFbBd0yZ;xAZOFioVhvIcI`N!= zVGfLK$iQ$4#s-~-Yy(jP^2;I^8`Rf>vO#`PvW2Jt`K1fW2KnV3lnn~c5Icw(ko%WF z*`R{>6O;`qb)4)WYC!ex1}Gck$7fJB$d4KhAT^MB%@4u`r==Ds8x&)wplnbZ;~tD{ z$iN`v2-X|#XvDzK0cC^Il7SOM9OTDOP&UY47S14XP_4kg5aQw(a>ALJ!IdGHA%vlk zA(%md!IvSF!IdG1A%p=`qti>qks%Cht0#jagA3SZYKhb_6fx8>gfNscC@_>Uq%veM zEMiDzC}qfD$Y)SsNM$HyC}EfZmdj_zVMu03WJqDiXJB9$?)o+`Y+&$UNMtBxP+&-7 zNMy)i$btG@fgzV6lcAU)m7$0sks*m8har_Amm!rQkD-Jil|hj~k%56BfT0x1FJf54 zkjTKm;K)$MkjaqGkjIe9Py!VJnUK#=z)%V{s{|b4nQ(o142cZMP(2{~85sN+GQn|_ z!=S*B!jQ@Ub4ez{GKM_3SOG&K*k!p4^B7VXG8vM==GHM7GSo3JFsL&GGdMCtGWaw2 zF*q^=F*q{lFereFzQ9Kq>2h{2UX9URB$40Q|}7=pq6FJnk#0J*UUY%?Nd6oX|m z!65)j8xXgF+?dRe!%)hQ1b3MaLn%WhLpnnyIE?BTK&In18{`X6$^(UQB10ZH-GRac z!ct&Bn5GVnr9_4Th9ZW1h6;vEhFox5B_hR(0z)E$0yqvqF>1g72@fkMtq1lkC?{-S z2m$*qg8^hG#4p9*9FfET@?#M=3_x)V$pMH|QUH!cP>4f90c0Ph?+`kj!0`@>H&~p5 zQcylPJ~l9b><76Nlmbh^xe$``K>h%QZ9YR1Ll!tKfzm`igCc_h!+M5D1_f{`1o;${ zUP0jiF$E-^2~RP(;51PHPRF1)1*Kt7*x7@_0TeG`;7|aiI|T+8sJbGCOt9}Ep#ri4 z(5l7`a3xx`J0v7QE(eui zkX!^x4WOC{R7U22OHPm*K(2zN4~WZ=;}?|2K)D!H)`C(xD2>2UAE-T?vjY@I>EKcf6w;7X0y3i%Tn2*dfS3jn1K9#n57P@OH$h^c zG96T2>ws(JyL3I@<9fI;zBsgV))PPcFBts%YHbW^x6*xD5M2Z>a zF(@#=Y%c-VD@hEA;Cv3U3lvYFkc62HswqLWV-7S&LHvL%&-gH;f_;$60CESYzDxy| z@SxBFmHeQ10Ht)0=@1)1VFJltdEk-+)G`6dDu8o6C?xV2GQn;~4&eZBsSMH!O1Gez z0aELN>`7%v0=IA=Y)Cjl{8$98IS@VvrB0B4K`{;qTS)2zm?&aes`laMfm=!C^Fq^tt9c2XHYVG7E7kQxS*??A2swG?4_59AMDaJ>l1 zDWKQ@*$!&ofcPMH`GQ*`pf->K11LpRf>RvG7LZC%i4CgHLFp3`{vcaGxjO~iZbFpl zpnL$*0cu61GGsx+w*+i=F1X|`2K&&TA%j5=oI^leV(@2BUHjWbk2dWbk8f zW&rgbklS^jG7@Aeq@@E2Sx}w=#Tuwa1?47KDF=!hP|QHw1qvHbivg6|LGcVKnLue( z0i0q$F$JpmL8Y({xFpF1=T}g^0jY$fH*8@C@g=C`3`*Gr;2Js^+^z(rR8Z=I#0@Ae zL3tb$vkc(;jnD~lC8(4vW&pLSKz>OD*YBWG5!6c2Wl&&%#WScR1i2ZMZ$a?{@)sz# zf?NO!mwbj?h9m}1+JvPJkUK!CAZZBH8p#0L4@w`9RO1bHZx%x)I5i^DAgC+@)eWE& z2n$6}C_(bwI&iK4#WbX~3rgRhv=1r?L16*%F{m{G(gA9xf$A4fode1{AU}f2r%GsV z1>{Ch`33Snq|FG?IfDU|0ztAMlOZi7P+1K!3zVin>Op3Kaw#ZZf=V7x&jwPGfouTv zbwDlxg@zZnv;&oYApM|_0_jEg9%Lsd4nQV=N?uURL;ME{X_&hqX(5ZD6r6HksSOkd zAeVtc86pR&{Xs5=NOy#omqP?&+-1xh23R0m2OAooMe2Bp$ch7@qy4Rk#? zsQ(920V?4@p#tjtEn@(M6C@-d;Q`7)p!5pz1E?;B`K>ZF-2?!G_0LK%E2TFS&Q$aR@ z+yU_!#0*fn0o6vJm z7RWSEeg@^yBIwuyB(y-G4@#||_|FIXZUeZqh2$wniU+mkKqUz%{et2WVlt=~2FlN% zR0;}TP+EiJA&~kEa0&s1G$fQEB?%}@Km)OXK-QYW^iNx^^9E^AgRb5 z%m<|>P+9`@hC!n&pxPGE0tNN^Kz4xADX1O*l}3=f53&K~Qjohq=^hr^i42ttkTL{T z=7HP+kp-0_AQM0(6eyKJMrc4e5i}A2l7WQ_sPtC=*NLF;2Kfe58$ePLsOA8*>_E8= z5|%08ScQZFD2_nx0i_&}&7is^6&$z7V+0^ma~S3^q=8%Ypt=B}I~?4?E@4n$aAE-U z%R%u4YH2`Pn4qu&`8}Ix^FSpGsMQWiWuUNhW&n-yfYL1_hZEzbV1|5#Qic+S45D1+ z%8&;h|Ct9KnFECYq&@+K3n+9!aR5rs`OrLwh#63tgVgNEY9W0lNR9)=6llb06?BXY zoC zh~9bN(J)Z?1F{8{Yd~#Gi22yf2xeFY9n%KcSOkwNkn4&VK)nr^Ns#z~#3IOdkh%_3 zW`fEHkewhls4N1dJVfaV329J?3@VvHAqMh2qJ;ozAA&?c%v+Q!#j43c20``3sa@Ksrmo{X|fxgVF$~1q-qt;unZIP~3y+ zM38Slu7IQqP*{S}E-2hUDnRME2xa^N6!M@LfP@CfMWAp8xqCfBAb3;* zh+Hp#$`DYfq=Ng=kWt<+@Mu#iI1hsID9FX2QV2CnU?~{pQcwvEQVA)|K;a3>gAm(c zDG0f>2#PgOj}z7hf|v&iZ%8PE(mTjj7lr@^A8`5Y2+mcDplJsZpO88fl&3%=T%fiJ zD1U?80n)pQ0W_uu8kGUr267Lm4ubT{K{*H!E}-%bG^zqJ0hH=MX#$d?U}XuU{C5S9 z{UUq?8XEwWiJ%e))S3a+Kd^KIia$_U391V~WgsYDLs~7cS_G7qKsJF?fyVzq^A8}m zgYrQLxHk?O6VGEv2bWbKQBe8@(V#v*DCdDv7^Fl3#SX~zpi&&x!UEM`Ah$wN1IQ*& zc!AO=sN4XxXFw%kGIV4Rlr|u~RA&eQ_v!t>vx1;@h(CCC(iu9Z6AW(0f@&5}-yWn7 zQjdU41kI^{TI7(PEhv3L=3|iaBgkElks46?2Du#KCWvo9F%R<-s7(hdr9im|G)fKf z9mp0?nuoPlKxqaP)}S;83sF!hj9l(R;u6&B289C1_n?*psI37i0YIq(Vk;~)gUVQh zC~CR|xfPP4Qy5CYFEA!QDz3-BNJSR776bVN z)D{5cFo;bc)u2=iN@1Yz1epLSzaV-+Aqy(^An5|+Qc#%+G9MH&AX`B+$c8lVs1>M3 z01`ojCCKfdxiOF^$OcG^fpmh>E-2rFW+NCFKrKp8z5tbxkUA6;JD|QAsO$yl2Du&- z50E?$aycZmf!dLfQ4NHxuvtcsFG1xNs4fMSv8%xSa!~39txy2P8YmUQYJZShK_fPh zd=ByzsQdxB9+DRv!F^fK47f9cD}xg>Mb|NuGt@BzfNNKXZbbZp#+g8E7*O2+idT?- zK;a4U2grY*G7VIpfa+&Zs|XaYkRBLlt_xx=s3iv~r{;m{B~S}Q0X(7z@*5}|LB0Wn zWhr;k28hz~&}6v#e^U7+v>nG529TCgBHL3%+k1qwe<_<~9qP!0#h3rHMd1H=qaYa8S< zNVof>*#fC$Krss{AwVGony*5h*#@O>ko}NY zfVcvbhCw|*P#A&gW>6a%;a5j+nZF7=_6*7cpj->`DQLb2WCO%*kiS7aWJnAnVjWcO zLhOUg`x74ykkEjb2`Wz^wHc^31jSGQLncEuc)rgWoB~oAAiZ8l{D9H{sQ&`;5hyKz zTm`EWA$|spwt(D)+$IC@LGcBOOHhjg6yhL0q&)$fSq7z1NV@^HW&zYP$Oq52flPq; z7}UN+%>RMR0kz>kW+LJn)JB4=aY2{`$-kiV1~Ls4;-FjtDRp4&Vvv6zc@b0sf=Vn< z%N3LYAmIy|5e1dOApe8X4rsOvRMNp>85DvLaZm~al{KK$2GIdB4cYAw_o*}Zf?Gq* z3?AUN5@_9&0z)W+A9w~Jf+2tbw9X|MS`L8L`+!<>pm+fJ0v0Baz7!}9K|Y7r2TG9@ z;MFFeFao70P<{f9Wq?Zl5^&1^6qgXyAibbg93&(_eIHPZ0kZl977vLGWzZ2WP$+`Z zCuR16On|s47(7Y}Dt$p^3n(r<8H(X9M7RVtPY7yDg2uEg!R-T>D?uq1HZKed8Bk3O z@f)PP289|VrK0C`P)tE;jwJB7C@9B*$^`6wtYb)GsAGV%Mp4J#LB0UZ-XMoP$OkUq zF(!~{ps@i+s6$AI`|`o{KFCH$83Jmvf?9W=5)4$XgVGsDC8Q?V0A6i4XnM0o-V2322e=_sZ~H} zALM^n&lSH5K?DY3C;7v_&2NgX$YlZUm)8P7JWqx^hBR>h0MzyZr8-b)2WoYI@+pW9 zq9OCysI4hb+6ILsqJ4)bD?uq3Ksg80ItG~lDrG?B5-g{JNhz~BL% zV*ridBU}MmPYlW}2;YEwf*i*%AEB4^pc)f2Y6)8T0;;t@afUD#(*6R~MWECLOLvfQ zF_5o7GrpkMgtW0hAq4U>sAUdP52+VHBSN4s1lbHqQ6L*2r8I2L6%+4R~Pf)19WI?_z0Ww4@kiSzIAgUmF85G{2Isz15 zkk$oA6=c>66r&*VMDRKeP)I?114`SV9KHc+k|VUt2iXTQ4;0$unh9~k1_sDz3MdbN zdUW{=#JC9L&r0yBY|vOc#O0v65E8ebkO!q9P#y-2^MU5lLFomQen9yLG&>6N6(n>( zc^J}D0Qm}pVQB-BL+ThnHi7CT$O?0aE>H~%TJHhMo1lIsC@q2XBHL92UT21|2^8<4 z;5i`J_zoz~=7HN~pgaIdgP@pzm<<~90);OqWq@)PB5f5hfW})vW8xqk5cfgcitb8C z>VdczG#d=++k@s4K%oJ0Ey#Y5ZJ<#D&^kASTkF6pOn4mg*7D3%D^LpptZpuIZ(a?jnjej zgGyFV{DD^BCW6QOA$iFKItu^`QP2n%C_X?fq$;pWLG4$NC@6$sV^$EoptO_90E3`D zcs>INLgp7hb0MHPJ<#qJNNNJP3FI?Ky#cBeP;aZgFlFFQ5J4#clxjeuc%YgGGIj=ukzlYNK_LW6^`JNe z*$eV5C}ct6pjZTjG$`aj_JDj139BOL_%6bHPS#G+RRAdL zKyCxsf(Q*zjRi`7Ab*0~15yPkX&|OUQU_?102ErFaRyLcf|N8M^`P>}4csyUrA*LT zOHeBqRKI}oAtZz#qr#9<5ELp33`Pu~*aP*YK{1SQ4XC_AwhJ^q0;_XCWilx4k;Opu zJ;+b6))m4e*m`47h=Ke7@)t-YD6N3P8q}Krg*zy{fm-;WF$#!HARl3?D?mCxB_JpT zgTfG&D?v34s4N5d2;>`(EugRhu@R*{D9%B9Wk6#*ARmD88Dzu;6#9^!HmoE>4P8XJ z2l5A~bph&Mg2EnTD=7Uy)$qS$m zgXAXA{1HeDQgVXY!LYmzvKizO(C7{<^gtz9BD@X-<=*w+{YE|vpwR|M%psQ>$n`C# zzYeOELFGQkmykFB~LI9!) zCKyd{MUC?e4P{{#WEf0xPQ0ocgW>C!tN|m6r4@!Ta@k@v}C{;qr zIau05-ctriO`yFc&fqmakhwOHUqQ1)piwqwhEN7i1{dg_MNpbVq$7}tpw=NM$Ai)f z$SzQ+2Wq*1$|y*PfNG6m@OnXz3n6=9K)D(;{tH^Uo6nHL04nPsW9kSOfbsyyL{NQ2uh=nFUMo24wcr!q4P*9&5v|a|;6hH8MBghWWtOm%hAU0@38kGJ) z{Z5e2s9_su9S33CK&?#Vwc4O?EMb6*RDyCRq>KjT15hl0+(v9zLi`7sBZu^OL8%)# zP9VE_L96sZt1Ljd3KB1%S}h$s;|EFUkh%$!7eJ*osB{DAf#f()8UckHNH-|HAbgNM zkc&Y%7vy3{IsvuvA!Bx+m`7FvDi1+98`LKOwU0oxKct6+svFyUG${N~;~LVohty%9 zQVcZb21)^--VG?7gUTex&I3@}3sgRX`~>kkq;?0TNzhm{hzClEpqU9|H)77$gW4yM zbOfq*K=s!K@c!I+43HUlP)I<+5#&!$XhGUc=p`7)zwQjK41Nrt8VS_*cVvLH(19>tyfn5*+-pvcz zwF6>-Rs;lq#X&oJf*JZ5e878rLcs0?tpkG1ZGlwzfp>I+S~!rD<`3Qz1u_FP>Hrc0 ztylJAh+=RAm%X47%t{7OO8}H>A!WD|1L!;l$XqID2N)=YfZ`mq8UwV#-U&L31WF?c z4DR511e8KSB`zedf#zjE<4K@g2s4*~0VE1a9iSEoHO&nG&#Hn<2E`j>T@A=)Q0oU) zDu7CTP-zD0L4xuED6gWHNszh-rUufM1H}fYEC^zVXK-bRVDMxJ!P=68l(!%sLDn;X+9sfp zG)R6zxB%3SgOt>e_9W$Q0M*He&;pe%pfV6r?m^m;n7tiP4FGa0sMQB@0VsEaLLM~Y z2g={0VG3Fy3yM2XFM>K@>IB~F3(Air3=9mQG9Q#5L8I=VbP5`afQ;pWc2j`*W}vtL z#Sf@e4ocae(N|C^1GOVy@d}DN&egO54 zK<8Shfa^feh(S67WVH~eRs^k*M)b!ac>ycIG+6(Kx-TzeOSnv2FU7AP^l8k08-<_ z05Z*;!5`e}fQUgx&>0v&?I>69`7)q76H?ED+6AE615`VKYCwqDpxVrd0aQmq>Qhip z88%J|V#9jPpdMNh1E|jhiUm-J6I(Wddg{L5TF#Ln9_%a7&Q(x*DIUC=)s-QfA)WzL z>-#W(dcmNwG8BAj38a;Ps}Bron}A9nP?`btvy&NSfX@kmgf=9tg2o_0aSR&Q0JS@j z+wGvaJ?uN++Q93nU*y+Vr3t1S=0g{Ym891}gc82@gox2en*5sSvXM z7gCFW(kZAe1-Ss^8&K;E)S3hN3exun)kl#01$Rs=rf2h{Tb#QXX$_t=*%{=fbFc1$k^PI;}2`#&lz~_cQN^VfR zK;~S~%VAIp8WaK`Hxx0EQb6gs1iY^nq#EQKkjp?NAE+c|U;y>oK(!VqltCh( z6?34l2CWAIjTeJ3$Tgrk3e>lP_zgC)2GRkFuSD=EK%h7V%^JW;B2bB!&X5icaewHp za8S<=5+0zu4x1eYg)XR14QfS#+z2Y^LH#9=i6AjhC_!Qd)SGf+aAE+RYX%x80p$l! ziU8HZ5O;&-Rr0_o3lyu!CcyF+$giLg70@b1P>KVEE^6wAtnvZnPf&cp)Lal}Ng0vkWb6lXkm5{iA=mNz&XruuYmmohu^g(K2 zP`HB30;M-ldV<6PDBpwTVn8GC3Jj*;wgapU0V*dH!1)+-@&RIQ3S)r94oI0jY!J2apO# z8bPcrg@gmB)B&YSh&dpif^sHk%`d1`1*&_oxrA6Tbp}@k9|q7o3#dK^omB^^RY7SK zvWg#+#~>|1NUI!Fc0ytVlzKt#2Dt}P-+*|aek~~NA^ZVK2at3Dl85vSK)roX?naEr zfZ8>n@Ia(B$mla@hCh`7R9Aq;u0WvxQk4td{Qzzb4vKfkiat=zh2;s*>U8ukWm;=+YeT^gT@{~F$qeUpd0|AAt@e`7C^oSjqiclnxMH`kQ`)O31k** zHzKG-2uiu290gJdQUwVEP)QA1PXlr($lsu}3YxctgfXb40@*1C3JXXJ0pvGO=zu~B zVk0OlT*0L+NDLIxkXA6rhamGor49r9oI6ln1*LJA4?#6BDDQ#X1e)~*ji7__BuEX& zWW>&9kj=0*D#$mG@&=SwAR~$(SAk}kVY4To)h3{J3dE<7(-$D6B_uC_%mC#JkZw?! z1uFGG^(e>(kg^x#a!{QEaVseOl!ABhKvsM}@)@XBfVc{hLO~@5q*exvWq^DI2@OyP zLh>%iXQ1*BRJVaz@1U_kPmNr6EHJhlQU zks<0p{(!|YXs!iRCPC6D$PFMrfm{kv0kRvEwm~rsvJVtzpjkXn*nq@9Gv6RHiovZC zPzWRX1t3#E?gpiAPznQu4`@9BsAK}U7POlV6qBGd1)H@4#UV&NB&UONC#W3=5&`K3 zdI`0K&*TaaDNpbF(;$8W z#R#Zm0r?g}Lux2cc>v1Ipk5XvWzz+B=|97nEZ_aSz$kQw$z` zM0OoSEyz8f91conAlo74!pa_)2*_?wXo5-?kpCg(fZ_qvwg;s+$c!V11fBET4xDgbBptwQQafu8dAArt{M2t~^`cI(U&!Dyw$P5q$iGj=k7)aaR1m9 zyxIfQs|STOs5}78t%7_53PTXzg&~Z=1-f@0Qm=zj6lnKy2zYEfjRAD>fFpRfKPWam z89)%yLM(!wp9u0dsN@6131ZJ7sB8iG9@Mi2jWmP$(m~)|LlF!L3~mgdb7?_y9iWkU zPz)+Cgn&mcKsgi?PoOji@*^l`C_q~!kTeZxF+k?oL1iAKcL8e2L&5@7r+{iAP!0s8 zI8bZQkpYrhKp_s=O90BdAURO$7Zm59UE7#)FkPTA3P`+zVjDCb1S+RMEpp5gML}&? z&{++jd<3!u)l|^Qub|T)VeyG6>&yU3p`g(WOgUd@zXTxz$)%u?Z_r4GGXrQe8*~aO zXfz#E-b4B^=;|FA&{d-MW+41zhHM5`a67Mvp_0L$A)CR8!32DoDX3r00B$FNPRIg{ z%R}~sfKEgO#keO!7<)M67U{HkSY)h`}jF1ZG%D= zR0n}#8kC=-z_aqOGzH2rpq3eA#Rn+ep^og6V*;et04b3{AFAxe990fJy;S4GU^NgUSt1SpliXA*Cd!-2v(!gZe19K5dOmnY57Zk5jiP~8F@R1_1EodCh#9C1M)VLjfcvVTmLFuM0MzpZ zl_j8D5AqqP%mVdLLGb|!eUROdkO1XaP!353uV#jn6rkBBkjp@&HpES!5*}1mmV-~X z1KA7e_u?8)1dU;U!WX0t6bGQbb|QEt9F*=LsSZ@$gUV-6{D52qDyJc>d`KyU8s4z_ z2(cm#6jyc7)sdiB2blwE<3VyUqILn*l^|O|eK$}#0EGlBenB}8RBM8I8jv;w#BNwW z6%>k~Fo3j|K&3gT76I7|Q3oqSL872C5tO$;{)OmAk5hHJ5AH0B0st%BkWlzu^R4)PZ$wm~L<>U~fO0_`FN z=>e@s0J+H@d~OV=7X!*&u#kiJ1HuE z8U+T;BZ6u>Zw3$WswGgF37SJ>VDJLZdV*#y6&SpsW4)j;4A9(?BSR>-js(qFIzeYb zL8rEZ(m2Re?6ROR1L^PquQ*ZwpC|~LWdykqbQ-!VLjZ#Zcoq~i0t_0Z1=;Sy0Fn=4 z@Q2S~f=0eUr8?-ebT6=aKk&RJ=maj%nFYb%n%)^)zJkhPQ0)jBaR%81DnCJXfkt>i zC$57|Rf6aN`3*Gc?F~Me9aIWK>;d@&G!hJQ1!#YtKZ6THC>EsDsHwLO>KrsMn(ShVZt^&0&Ky1(`IOtXuP`rWa3qSCD z9w_cWp@Gm3atkQ-K;Z$h4>U3X>XC!SxIGy_=ih_I+d(tdpf-g+LpV6JL2iZAiJ%Yx z=|>J9H}Hv$!3>}|L{L12gZUs|LCgV-+k;{afqe$bC7`?pia$_@z(O9MuRv}Gxd)U+K`!@Z zaAg3+J;bk|ITFy>o1mBh#S;oYXP*f0OV_!N>B?3w3Yz0e-+g3 z0IeASnGf2t3JDVza7qmapWyD#0LmMnQ^!DZAX|gMYwtihAn^;z4WRKy5Dg1$P-sEi z3u?FcG6aBgE+h?r!aIn;n*kJWAT^*B2cXmlVuNgsVsK^f0^f-Maj_SJGeZP^=JJ zLV!#Gwdz16CUS04U;w2Ykl#S@267o>ZVVD?ka_~-B9IS2F$!`mD0P6&!2qqjfRrl` z_xpm^V1mvQ1eHjju=fS0E|8s|bPg&ZLHa@E1jsf}Ee{G2M+R6pAm?mQdV-WJ9t?iq zxjIl814_4`@CEfSKq(VsRuH(H1)1amE=@tD94K#t$}&)G;LiXu0TOSX;4lW=9so+6 zppijP`UCZ4Tp2+58kDxE;NH5eRHAUA?iHOQx+bmayv?;x%Km0KV)L8$`dO3-X0NIfWqAh80v zp9AE3kSb7l07|hil>rO^44@JW5@H}0$WI_Yfbu-3>;siwAf1r%5R`90c@LDDK>5oD z97>RI1*vvsK-4WDpF}XYGJw{zg7kq_aDeh6NF6BTVf72BKK2FY7Jmj%?1Nkmn&m)O z2MSM6n1E_=ggQ|A0;P3Wy`#Y3&)^0w;~=xMpxhS#b|t7C1Bzu(UIE28a-EMYd>|?p!@?`eFWWl&gw*2aO-Dkuy=EhJY4m>eiqgGy0Qst2Vx&|EjD4+yFS zK=y&s2gr7aPB(D;fKnkSZ-YY46cC{93r2jv}5ID-5G z%5|Vp1eDJ}=@!(E1lbIVTadd!c0%G6QtE?hd{+pi&fM5~w7O1h@1+DHD`?K)DP=LrNY{ssgzZl&T^13A!#&o(H)fRPKOG^#HF- z2i3|TpMk;-5+k6v0oe}H56ab`kVmbVKyl>{-X{P`E3V)cEyx^@uVF10(0OPe6Cn8? zl%7Cw>H}_tqv`_H(x8+GYTbhJ0%%nW$V|{F2cU3;gek~eLhUtBXn^7!wM@a4-f*QN zP+WjYMbh&Fq-@k>0M*%$JO#=_ARZ{}0~kOpYfu{!l(s-&1FD-4r6g$8CTM*osGk9f z15la;aXQpj-zUvjT-6u5f_$3{XoGWSt<>K#%1 z&Ikgv;XvU5%F&<|E}(qm2JWkXc4UKE^Pt=VN-3Z+8RQF4jt8Y-$eLbA{DDeOP%RG1 zQ=qg0I-MOP28socK2UiCiepeI2s6V6oI*jpFi@WZvTg_DLQqJ6=9KfG=m}me>j^&Z1Y!#|{h&|=xd&8=gHj{R9T2yILKfKvp!O7~F9|XmWHV?T zDP%khO<>L%Kiyo2_5$=SP6rfxV%A25i4phT}T2!EZ6DSvf zQV&QRv;zj@2bk+Xt_HacWFyE_1~2gX0B43s@VakM&kbaj z8~A)0SggX_2`XPf>$gC*g3=?X%mbCTpga)(?%RV(6p((9?VxZ4wTeNvl7ajM3I$Nu zgIogYp~FhA0Py*M5FL=d1gND6tCv9KAt)t+!WxuAKy@FerbWaN$Xrm34ywf&eYrvrr#!fa3p4hmCZ{R&DMAQymA3CIti906+Cfo45HbuP>okTM(H&meb!Tm>p! zKxq-wF9xL`m@ag`!^U1ftx8bo2C^Acet_DZgu@u*Hdh8+aH;^+W1!psi$l;_8c<6f zR2qO>1u+#CE}+r?REvS^0i|4!KR~8|+yOe_JOrEg_*PwNTpk5NFTm`uWRCZS52`~ztw&IK1M(lpERYXCwFsyjfRqWKv=53IkSwS# z0jhsMF$RirZ1n-iR#47@v>rfhE>NurSu+nZ1JXl8E)&AR?PE}B14@~=LJJhyAT^-; z2x5a`02EI_;N8F2Tmp(eNWBNjaZ%tk{h*tCv4=XSEd}x$q#gu?C9XOOcUl9v9TI{d zKZDxopga#MYw?*3$wie zD0n*>qy{wV00~!6?-3LSpmYFAfuI}-+Sds(4b&oqxGV^47ATj4_HuZD@9Kl}Xdvbz zOb4ZRNU01;=gthEF*uMJpnL_A1LX;jU7+$2IRS-AR!NG@qpq56qcaXw;;8k@&}a8L9q#n zFGyU0N&--;4z%YJ!kF4v^iD_7_Msj zawI74fMOryHc-0qVF1;dpwS3WpAVEOLFET%Y}}Ipbf-8djY4t`sQd=?FhO-MsI&mN zNPz(q-a!nZ;G71^BOud2B^O8^sC5ErnSjb(P+9@yWl(&9#6hDtjto)YJ4->fx`M|O zL8?IE0ZP-LI0U64kUv570;p94k^_Z4WW)*-|DYPq2Yfpv$aGLlf!Z#hw66d*9U>Rb z02^@z#Up4I7L)=Y#SM z1Bp*iDFYf)fwX);xgNv<#R@2wfl36BiJ-I%vJvDm(0COnFMwL*pj-^fyP%v2Y8^vd z4{B3FbU;!TsGSCBzkC@s80nN>je28GHVeGF4sV2gHkjo|A9u2 z5iSC?4MDB~#U{u!kV%LV5@a?gq(FKgsRopmK(P+WCm`2?d;w~If?Nr@#TeuxNZtjN zCZLiA)Pe@pA)s~x`fM4f*8;K~R40P+F=*rgRAPcgWkL0nF1W=5asen_KR0}3BdtpVx@Kg2wegWeO-YgK{0n9iUMIP?-dZbC8Qc`3Y1bfYLswGy~07Kzj8Mzd%|F zps)nhHlT5NP@V?Wlh|j#u)7x3mSFIRCuHmtlpa9&59BsbzXQ@M2e}wz5-5#=+<_Pg z1i2kj4ui@_NJ#|BJ)ltuP^g3QD=5A|{)Whc>JU)B4wODXZER3|4=VjZEe8+q4JV*@ z31Lr7L;xwwt(b7J^+O*hz&|(AbTP89H`z0_4z?1 zH7G^G>Ksse4iZ3y3%< z&4ThM#MO`%5hN#sfXDGc;-K{81D;U>&2@nM1BxF|+JuB5s3ZmTt3bX1g$tse21>1< zGzV(4K;{}jGXt~O%OXkz6F)qpi&j$dgOS5 zq&QFw267!JC4uq=C>KN8IG|h!5(TwaK(;~VML_j1DCSUGkf3-*gf=96K=A@ft)TGr z2e06R_3=P;7-%#Pw6Y77Vn87c3I|ZV2pR30XuxgnbiiWf+p0kx7rW_W^kRD;Ap z;R^BvsNDfNPCn$tKX%K)YB#>uEr% zO>@Az2tlU+L+&8~t$79I6woRd(1}l=RbHOp+qFRJLP4e?s|Bq91+57J?aczM<^-+i zhOK%6iGx=1f>y49*3&>%%!5|gfL48hR{22Iwj-}o0;vJ5_6MzC#9YNjjGtky1DOvB z70~`I(7Hy*x;V&6CeS)O)OA~+I{-lb2dy23oU8>}bp%@F1_=+)>R!;QRLBY+?E7sY zYu`YsFjqo>)>J`u7(n6zv|bCe(;Bi;2^1e7GeIl2AnVjYB{L|@K&!AJr=5dB9~5?= zm0%E8fY!}{R+56&(Sc$MtI3a)j%N%O8KDMPatc|K`9KP3bYCibi*&mT;vtfkkkY^#~Q=} zo#_dxD?lgegWL=%FCZ}j%HyDv12P{b3R(LHN~xe#e~`2d;(<&8wZBprK(Pwi0|-i) zu=EXbB_t<;)PmOFf${?AtUHM9$T1A6ubja*z=P}tsfXl6(8_F3ss`=B0IiFMtcHcG z(F5gMP(A|XX3#1^NX`J+2wE2jN^u~UfNh!TmdT4K&POBPGSSG zL8FV9>lQ(I8?;^$h$P zP+9`{9MqZs&Aoxj0$7NE(i3RaKWGgqNDLG%kQJYxasae$6yi2e%%P?XP4n@$4S3)2r;?+;2Xp!Kex{W_p^${;q#@1XPvN-Ll=0@?ckN?Rb^p#4H1pFmdif?64% zy;-3Bi6FZ`p$!Tz&`NJeE&$cgkW)xN{T)!77S#HHwD~}-K~OsmG(QCDe}UE|gM11) z0|B&?AJQ@g_1Hjte^4p_wc9~029Ox2#{qH?WJd>N7a%CUKxrG~2S|Pd`5csP^1&4QdP}&9g7L-;Ydwd}7f}AA= zIkyT@2O;*aL-fGh3EGPc+OG^sk1%&YTn?)7K&y2jF#-x-*g9cQ$U@GD0-aO^Y6(JS zTtV$b$cO`|1rKVWK~9(gh1XgJe{kCebT$R3bb{Cq+BFQSk3l?0>I0=v(9Q=?*#RnL zK>YyF8fH+*3JF)x?W>^OA|O2wzk%EjDiJ{^H$iqFfm%+u+H#U2p!5%lQ;^F+tqjoWdQb5BPs9m=pfmzHGb0at z;}axQL7@fOdjLw0ps)wE6G1Kmtsw{XAwjVON@*b1gIo=X4@m92IZ91p5RL1i(hmc*_ek_L1cbQ!D|KqP_&oqqxnfrvv$kV`=>0qx^S zg{lXsA&f!&Do|?=dLEBtU5Zq!)A+ z0mOBn@&O_WN$((kL&6T!{s66g1C2F<*6o5uK0vVw%88)fC8)O!8bt(+#DH2bp!4oP zB@HO_KrJ9pXo7lQpgq~3+Y3OoFDMs+N=$_BLHlJvWh^MQgTe(=C#HaB%#cqn2kAk* z{kMQ&6?o4q$gLn7A+GmeNM$HsfVcz{vmidGHq2lsVF2YLP>Tq%%N*u9kSJ(p6o>}- z9kD|XmfJxw3)xKs3SCfI0@ZsUAA@#*!+Z>}AGG5HWD=;a2im<0;e$*7^>ZL?AdtDB zmJCQ8q-+PpA*9vu6&yMN44{)HA?y|0xIWH86Z9Z#URMPpxyqcepP3H*Z|t`4svxOTFVkr z_aN$3kY6GG0hMZ?us}Y07ZjeLdLI!QsJHuoas{X@1nRAWdchzYL8$@cS5Q6%g#zfL zR#009gdwRO7NVfA1o;Y7j)KA+RC2f1uD-$VG1%0lA1xj2DKAFyB|TN94Oa7au=+O zL$(DJ8ldqQkZaW$BEh>JL1Rv!v3Gy)x&_d99%$AHG>QjmcS7zKg_Px>(JN570ohdu zGZ)l90EKx8!y@pFeUKOd#aj_WIryA;PzeHS{eyBVs9ypKX;A+ik`^Ih1nO~s`Zu83 z4YWrRlulrw5Aq`@W+1)?xgX{xM+Q(hfyT5z@d#2wyg490fKs0$LkW1-F33foGE4z{ zLonzr_F`zC0(8nKXoM5d=K|$wP-`4=4io6)H1t!PK{MWsd1SH>qVh@xTApIdw+YodL2PCFJu?H$&KrsPH`JmbXvVRd&+k;et zOaa9wNWOw$8Td|HP;s*`3DNsJX$NYpfzJK_ z=?2k|ksnan1@S;SK_x$^+yIr8kk&D%goT_(0O~D*>IsnFL3%(tWmPeAo0sGLcJ-U|vkF9~#_KFH=& z@Xel}{u}75DNxG-az+T~3>Q#q3DWWdjYfdN31l~@<_4J!!jO;vowEdTH7IOA=OKV< z0#I&*YQP>g`~wnE$oN*y5opqBEW({w;- z5u_GWe}hsNsIMS|iJqX$R!W9Pp_w zs5``Q*GZsTZN0!N#vy$KDyBtd=$#UvKS{fcy%IDNwr^ z5nGV>29>a&FafphKF< z52Op?7f>w>iZRf6V4$=KaVzH86(IXU7?y$4CMe7x@dQe_pqN<)jw_H&pwNQEMj7~C zV^9hLsYiqZ$X_5HdKv@i28AQ2^e+PY85E14);h#bAbF5pP-=v<6hWm0$OVu#9;lrH zDv?0yAie;Vlc1J4s2vH49grV3Fo4cR0kzdZ@d>I?)WPdALF0drJ~U|60;shH8X*L& zvjF8DNc++U>?+Wl8myEAjfjHIa{+}usO|*W4Z;w2Ldq17pI~Vd)GGvy0)YGvaU*EH z2Qdo@5{I1j1{%`^)pZb?KqCT>9uj)59F%`RHiAk|M2>`n7$~hk!Uo-qAbC)Dfnpre z!vgsV6e5r?2e|`z#2v&3r6EvS1ht7FH6p~<5IIl{4a#FF42u{*Zi1)+-7N}Q9|V#G zwFf|{17s(1=?lvlpgs!7U9hkMt)&6Q3TRyt#CM<&1C!O0K<0ql2?{?@pByw70rC+j4naCV;*it^YS)2W2XY0-cc2jg$k`U4Re8uK z%Yf28sP+f-SRttlds>0iq@bD*6waWM15{>!ay`g)Sj<8~9d!OE zs742cCn(0s81fl%7*;Vr!WN>!kU&rH z-=I7VnjHnzEs%5pN-MC_dLimTwKYTz6sw@H1BE%r#h_9Fmfk?_0HsZkD?#}Ul)9^+ zce8=)hQ%GIT>v`Q3{*D5^dizKs1*##9iTJ^iZPfj&@J$w5C@&14{3peaw}*|3{o3` zY=-1lP@MuvQ=qv9P*{Up3h8fSD=9!R0!m8|zk$jVP^%9#R+G*E8eId0KB$!q$`7Di z2|5=`g8?)S21;+Bk`R>EU_Jr)9+VnDcRqt$n9l&paiCddkPeWqK&3foRVrwl7_?>y zv;qe-`U@#NLF)!Vw=RJ8XMomMfzlu-FMwL0ppqBV7J#&GK`8;^GtjCONc@4?C7{*; zuG70fDGC&mpwiKU0TizwKY+px*2={`1`H{O)cN5P5S`7;tO9rh?1??pQ%@lxcq=JlcK*}4C`Jhq}G>Z!g zOArR-Nos~0$c~W_YM`-bP;CP%EkW~HptJ)jQ9wOCP%RBgt)R34nmY&8KcEsHRQG^l z9V8B-L3tijwt!kbAic2OD?|=-LKG-{Kzfy+(PGfLG|>DTC})CFGN@z)tziR|)1Wc~ z)IWyIP?2v#0C-dlR5HWL8p!%H*k~K*^lfzp7luagNe7_X3UMC_sGkCAhk-^ou%%*9 zjSX7K1!*I})*yjeamZtCpgjYiIbK5dZ9vXEhvY_3?gNz#kntx_K7+`DM*l&f51O}z zJLm z%s?yRLcya-ISh-CdVq+M1=QaLjbMRF6=)1(^V!>A_FS@K=n1Kc8AO} zZeW1yI0l6eOf96b?S_&dn8kX0_AvjRct zKy5qFI8_z6Ed}cng2sA5Ep1Sm2DuNCb3pY7DD*&S802D*pFlM$qIH0+T>%PLP)!HY z395fVx?v~BB8LyCjRcpRvY1@kkg^$N->kk$?M_y(naP~3oA0%C(wG$_7cHi2pf zQ2P%QH=r;BtpEi18e|tFd_ge@Dvd#{t#pP=@Q7wRcSeDM4%X!aUZ=Ou#YxIi^3%sf!f0aUtx@)F1lP^kopecU=g zDj_idDjPuI267iDykYqZWCkRLA#MZt5flm#pMiAE1BWQ~6qd{YN@Gdzb8bPs2T)H8 z6bqpBWS|-xl1gB9LQ)sVO`zT`D5fEyjXd%IiZ{?a4=98ox?#FNr8`I;$X^hBpwLCX z(H-Pg$jmQD9W1SbdYX$EAmi1boDK0IsB{H|38>EpvKNFw;S7plP)>oQ81(c78My)F z8qmrhP`U)g2dGyDy0Z)7JCNO=Rx~IVfNTJ{7nH_8d{_Orn;{$oT=1 z%RnU!hy}_Kpfn4bT?X};A$Nj;ZpQ|-z9FLupcXY~1{V~Yka-4Bs~uEsfI=N)3aCE~ zTN}#202<8!xf$e6P?-eklYwea*ooXAKY+%*K&F6d0?-%%qP&8{5TwKa`5M$Gftdu# z8KAHP^$I|CgM18HVFpSmpcsXf{UC8rc?wbkiU&~s28lsN06=a-)F7ae7-R>;UQjv& z&FF&Kf}pT~#22g|3(8|Nz-xOzWh$tl8 zBaiw*+616<3i2~3C4o+&1)Z@Cnl%H3FDRx#eg%!e!TOL8F-WRMqzHr?KxrM)=7p_g z0hxd(kw7IIs1yK&0w_I#+C<2!FgAc!Z$rusNXWv%5>&^7*2IDC_yLtRAl;xG4NCK{ z^bcB3397?EC&fd20163E$bw2tP~8m*2iUv>$gLoGQ2qk75g?^AWE2Xd7UWludqFiR zD3yZ32vn{ji-S@$sQd@jp`g%4tYj%>&}RUZI-qtN$X1X~K_ja3!1qCbMioHnLE!)j zf6&U2A_mCb23YCY2faGFGsG;{YKq(P+7A&Z3 z1IlqAl^{QXOoW9XXjcTJ%?erx0kRKre+Z~d0;NijZ$PVlLFpV6b};vY`~pd_pwI@* zG=R!ONbLezPY8-BP&k3=b5N=WjV6HfKvD;Y1xb$}w}8wB<$TyE7|5Nl)-Wg@L4F05 zvkc(bLy)ULc7kFG6uaDA1@6$X1YTAa#(i z1;r1j4Fb8(9&*+H5?0=9;A!!j(pM%;n`QY1;62Z4ZKumz>0NDhJ zA5beCRJVXa0wM#d%|Jc`r7BRV1`0P&c))H*0JS(lV}6iU5^|dXWF9ELfK-6Y1K9y; zQ-ex3P0-Bs3ttSr1O7pb!9=1hNk@?*JIzz1m;c<4GSYkss-6y1a1?q2bZ~! zx+#SLaQk)Zx6%r;Qo z29U~hp8Zw6uO6#B)2Zbj{C&+go_kdD1$bFD98{%J3 z=?bc6Kzcy#0EH;TO&~KFz#}{$y|B~+8Y2hsL25y5DUf?XB^-!`w2C451!Om*T!8E= zfyEyvmO%al*$46=q~1g=Q9w3>!Vu*9V1`BD7=+c4pm+iK4H7S)ljuPu3uulClultT z1F>O!0FZk?K1YnSgUqO40F^PIG8$4pfb2q@bpXxMK+19C{0J$-arq7sbD;DBD#bx# zbRfGxr6;IH0l5@3#{@DDRDOd>7g%_}`~wMR(0nk+FCZPD*a5i(l$t@M10 zejC&Z0L3YY2Gua2^a^n$sFedrjiB-XlGgK4ZhM1-1}H~@QWz+8Lv(`jF+@FRT_z|k zKvES0+L~KfxPxjCkO`oY9Tf5)HYk6A+N+>^4ynl?CW68qvSJj}vx1}uP+uKn7Dydv zmIu^x1cer;bpxrpVW|R?`ax`vk3r*Epb-X0i33XuAm4yO8RTM+Di9mwCXnwSc^AZk zxB?^xawEtDkUo$eQ2c}1k)S>d$Tm={gZu?a4WPI|zF!HH8bK`!kUv1VAC$I1EpZSV zly^X>02Gg~vL4YU2Dt*VZXa}WIw*aBLI6~{!fXfG19$^iB5Kx^Ie7(g?ppz%Ube1Oh10QK`htJ6U(F31g9Am4#<5-4wg`e&e&3rf)- z_ki*bC?$aG0QnP=4nT1N3QJIZpunKP06I_4h(Qy4!xJJ!f>aUK1Ipj9I0Dt+pfm#+ zqlcwK(AgNE{S=^+6hNs4w4NVyMg?fk1;~$}c@~iGKsrIO1e#q3oz4R~4-9k`1ZXD* zWV9BvKL!+%pxg+G9moi%Is>TfR>}YxQvlugQUN}B7Bs#O3IUMYKz%^a{SlzmWQFYHbxWAk2q_w;KZ}osFeb0pMb&(fW{vnX&y9t zf$fclFgphI%RM&&rm!R?;v_>1$9s}h}ggAQoLbwW4hk)965dUL$8)y^& zl$Qy)5K;z#dYqsV5>)GeLJr+-NG^3|SOqReL2Wruy98o0Ob(Qzi1g6spGRR}6$KyeT1gCI)5 za0bxGCTL_BN&?%Cj)3ZRQ<$=x=ft;lVIt2}M79(gC6sU{?oeTw9 z6AU`Z3bX?lv<|Kje7-hh^&2j;Y#Bf*LFb+YG4wNl?%aT^E(X~GyYB$BV;8h~4s;?S z$ZXJwIiP*@pmq|72AwbpI#~~N|D-pAF8Jmz&?#@o`au2!ohArV2RZ`+)L&6xFk~=b zFk=9nOA9$E0;a;3A(#PiuO;YK7Emw31AJQ;==@3r21^E020gG|$Vq3QGqhmmX@PWt zOtxeIomvJu&lYsf7wGgf(76MUeF&f(%AggUHsCM-)s~>UBtf?z^>;vL07AkK zbjBAb?M-HYoNWj?kqZ=3pjZXnu>+wA#|r3nOHkhr)FTDe5}*_d8h-$_PC-2+I|fi+ z3UoRKC^kVM2#Z}18x{-L-3U7I7;;)R=#)0l$|=zP3&{ChFjGKhc7W0y$OO=th@d?d zkbVTH@0-d13IS^dP)Y=yqXU|M0fh^wrUS`%GQfJWpw=v??+R)QfZ83PIt5fKA;dr} zM$qUHDDQ&GA;=0SQ0@ZNL!kVN&!V5N*268jx+$~fQ z&}dUC1M=!fkS>s`VJ#$3`xvyE6x4HvxzP>0Ru?oD2Fg{CmJO)ZgY?5dbGD%H28|hj z`aYnMV^B&1xfayQ0;vS;vH`6a0fjE86$h%XK=Rn!11b?fCuc&+3sC9>omL0Bi4)YC zMU>Uf42T;)LB0UZ4}5Itq1~@c@UF9dqY99`=B^3W>^NEs{zepfmYFhQXDAG zK<+~p1I0ARCeTV~&`FxE3XvvzCa-b!k|*I4t#P7 zC|`r-HX%F3KqWJB=><#Up!q3~yFh(lkZU1x0Fb#c?CAuOszBk3UoR-6A!Q(Ht_GFE zpfP7qFBDWGg3<+u4{`y*UO(^|<)E~o&j6}XLA}g!2FR#3X#NW{D+?MU1eI>E(j7ey zf@)vfa*$MvJ(fWyb%EMJE_opjHN`1_z}sQ12d;{z3i+rGHS4 z29-geS`?HEaQ0;M5PFR&86Ck!;6hAIzfD}l;mP#YQKW>Bhxgf%D~ zfNC^k8OWRrrVMT!pj?Mg9||rVKzSC_o&otE#0I5gP#A$~98lQ~3M){3fp8B<1t=as z_JC?^&^jn&cY#70Qr3f1B3d1=d;^LV)RF;mk~O3i0Xi)jbdor#o01r^z-tzX%K^xG z9T}1sKrsrcLqRJyL3srf=OD2thCt|Tb;vppz9-H$CvXW0swF@@eoz>Kau;Y_1!!Im zRMMh`4k%P0;Rmq^)m6wYL01XN(-1ddh9R;((2O7`XMyyCavjJvP=?j*2@Ryq)TS2`eP`e0}k3jJY z5<{e2Pw5J->vIdQ1fmZ*4(gLWZ1uEr1dpbaUMabPz zuoL4T{V-6TLN2F3YCx@YCkD{@ilB8Vpu03cJy*~@LZFfj6ar4*zAUl`=%i{;ct$Wd zfm^%23?LS$oeLW01K9;?pMk;#Gy(-$*$PT=h*m4aC&;ZAL`ex6i-P0?NJ<6uOF+3E zwCWKO3m|=!4N=XgvU|O$BOy zL(&DLW&xF$pb=cqDhA}5091!V(h#WJ1m#>%&l1!M0rdw#XNZ7o#Iz0MUqlNIWE)5X z6fUq96eRaU+Q<+$fJ_C=>3~|apdI?4kq}TjI~9Cl5NP%c)H8z2mxF8sjfa8SQ=r-x zR2P8i4@5r$WFKfY9u&{$?I}=g18MPq>;&Dt3A$SVl*&NkBM>&M1_Z@P00XG}gt-#A zlmW#!C{#eUA?g!Q9)qMPP`=V;0J#=)FBIrhI#BKhwGctIHfZk{Bwd0+5rjehN46`N z0g@jRGePANDD{GNZ6ewjpdPOa z17su*ltMtEf~dXF`*B3Tm~0(lw;# z1L`Ay>J^aNLASp_N-mJkK&PC*#s@&XC{T$ADUU%V3aE{O-WrAZ1~fhaTKNfTp@Vz| zTDJ`GEvUAEwBJE#99GVP$~;gF0@~*c8kqo%0D*RagKm96Kban6FC-*Exf?Vt04nD| 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 R(C9Oy7X<3{gGx?_djMqTL{tC( diff --git a/gamefiles/models/fonts_j.txd b/gamefiles/models/fonts_j.txd deleted file mode 100644 index 437e13f96b2fc655b02c048518ee3594c3c89a9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1052072 zcmWe*U|^WTE5PvoKNAll0|NsK0|S`N%)r1P%D})-!omUOgXChMYz_tn1|~rUhP3>= z5--O923!CtAD^38oQ+kDDgy(^Tm}{fCJsgxhX4QnGyMJgm*Mm0&kXP0y<_C>k<@7}#T z_y7NYkQm6$dw>4?0lDwa-@kv~{Qdhk?eE{eIe-8D1-SvlU-tk1|2hBv|3CNl?_ZER zp8Wm$7o_&j|Ns9%YUlj@`}fNK|NlXF&F9abpS*kb?#buRpX=Vedw1;b-@oTRfBwAX z^XJbX`~Up?`*+LVzkm1q`Sa)Br%#{ueg6FU*r!jQKzi>Qk2+~6Vyq8lR5!_36Mi&BPw#QFF^B$-%1PyoA5 zAz@T;bUv!=C~rVQKtvQHHDI`d9YX}7hgS$fkCH@(04#@sYIH=tgoQ6m7Q#p6LBtTH z0Wx2VL!5yPttBAAA;BSu?k*`wUIunAnYiqtSX@mV!>1IRi4qz^%rp%SO_Vso<`*sOYP6*}ICOL|{Hvij z8p4nefVIp)`509MmUkgEraVXlrW>LLKdFb3(;>RqIrKTik@^QR7TFCPm z*kHO7m+k1T#Lc(05l8qCCreop%{L&Gb{vwLh8&h?W=n8La$vRx%`~mi)G=yWY1*@6 zwmnQtEge9nBVkP|2MI?cKG-B^D4~X@FhtZ0tOB9KMBEV5Oa?{QcOp*CE({F9VD%uAz?ebP$(4yg1jBYWENKapYawL^ zh=kdP5QUTyR?z$p5(kNZS{LqI9^#r1`w*poxg-Olupn3zW)>sAB!?siS`3>@D%)5v zGFYPJS8EPQ4mVWY=IFT`X08N>jV+7~rG+Iup)3?L?9prisS)MSLs0_~qXK4^@;zF80#<2=rXQqE5%?m2AsDQIDA0U4sg97Sw0R?1@t@wZu@JZwfMB94LA&>xj^L$ zy!FS|*yrmTS0HdGR4;P6Ln@hOYj!gYcD12ad5!xvR00|SE+S0IWSaKC|_LmbnD zATEDQm6VH!qxn5pTAaaLnkxjwWL^$wE@>1I1_m~5X;a=%X)X;EabXUnFkcQ1v`}JW z5aEz^hJ^#zj||Ej{^7pL?5JTCEbS>Ef^NGqyPAwD2ZuRIn8-+rGlZh6Wam%;+0Kum z5+ls<$r^A35~tpjLjc_z1r7~nHVzIc6mfM>tjS@-as-#OIV2q5B$qV1vVk<0E=qWc za7af6qWhgo+Cf-cS{^k#IXI$Z)Yz3#!!tly6BK$uXlAO&261pWqPPmT!SaIi7^b2y;Jdw{eQ+;`AWWn$;xkYHfs;NU>%>vMog1#gfHICn#GdMJmD zEu_Z|;iHf0gYq;8W0Te7;D+aYm^=$FgMbUFC_4wZER{qp_cSHhCE2YMP{wlDC3&qB z7&-XB?gQBh!IBD$9GER*h#VSeF3Dkprkjz$4WqAM6v`MXY0Aj!g{GD^^}iX19jZMB zpmvWXny9EatUZO~Cl1L_Mg~cEoIzytKp}}<3o$S<*l?iN{}O0A!TL2pw(BXNhcY9B z6?!X66J(wwT6|bRYGBk_2-Sc1dBPz3!7jnCj)BqE(i1&4g?JemqS4w(LLAW|f)-Yu zXl+DL3lqJj2kW#%3l*@xP0`vupzsxtM2jQzumJl)6HO=BSJt4gG?hecYkE@YFju?5jvrr;E#hn5N%8Tc^V$;cro zg_-}sc5q0d&z^w787=IrIqalF(bb7dnlqyHN5CfXN}{{dLeiAcT#^H&jE0m(Iv8;$ zEa{0pM#IP;p=pKIf@WkeZGw6XvDKybXFBlnwFiLJl21XG{Pzi(-19lvuo`$B9 z=%Xhhk{lSR0UW}X9H`|!IAw}>qxJ{EA#ccGk7N%hCNRei7!@$Wf`O62k|UadQN$Z1 zUonDhN6&$v9s$8T+Lm1sm1_m}RX*4sHxTGC*%vHFg1yJqM z;EG3S#i7b#F_{=wB}j{)nFDT@`a@#^;TH{X`w+zz*&qf60ckERG*{^+igBR#lH@!& zOr--5rh&}SLUh*5H4wD6g3RKTpAqa%F;4uapxc{ zFU^6fl8sARN-9*E3w4%>gChtt9>HnG7cD(t^CO$HG&`CtU>{*MQ%XuI3M1apZGoD` zE**~IcPS2zWUdsn5N2~mPupzFp!UBHgD?j-7bus5M&-b{l0#Bl(h*Vmfb%pz2dH(Y zDG4170*gWC`awAy6{E|d)|N0?xP9P-i(s1-tQi>5T2i2TK++VoW?^J7V&`MWEDNnU z(8pm=-G#)%S{6fUQ6yCiMxoZ?HXMe^DE13mX&Q3aXrlE=kjgu_3D6N=Jxvt-*i?eV zbkIkuA@0$`s0Xps{~-OE81*uP9%jwPV9#O2jy}(z$04aHh~83w^u{p8M1?qPK(?V^ z(6~Cfs1>MAL?0<+U=)@VM{lb$GMI2!qSgOKo*3;G6dU1T3>7uOX!)V0I*@vA4lfQy z3oG=Lqa*2v-hO9<_#JhW6H*64?E{$y#^Cy20>6^9{G`=614frHzX+khR_c3$up0Xv5#dai|(JdpAO z>K>?XK=~Xh%fSv6Lsfyn^ORr^0+lnUss$uDEHUOT7(Mv}(9#h*X!PF-ZDbq64v5*{ zmNkYPMmwKT%FIDh+yu472OY=7+Q);K4kMv4PJ~JZP&tP&iVb#;6~?HqD7bxy?s_jQ z^Oq)?lAv4&a}S7?lH@RE2ldyH_1lBSfx%-4NTM8)28;rru^=Qd22fr_>pwFv^4f3+ zVw5yy9Fi7>nE4;%1|qN>hObdwfzHFs?U-XUpfx9qnr;TDZFOS~Nn7w(1+uF+BsKLs zCDBF|u*M@ej?hQuAvqmwCL5Y=P+bl(laB*70uPnrkW{czump|XAiIeH-4>{7EaU%@ zm@^vK`~RBUsoXl69H6`k%EMq2IV1%nIfOYlp=}+oICxHhft@=5%tLV%SPxhPGX9Ug z(ua|OQQQ%w{SVRsvk^vv#27i)89dO&TtRIdX-^JQ^cEkxW(t?IBS;of#;`Fkh^wfp zFmQOHt3*))YvBf9Yl|^(NJqj=1FKZvkWPya<={{XLlRdE;tl0UjtoNUD`2r#F^HF! zH%OKUmCS4m3YhZ@9MZCE3faU;D%#-3{kQBB-8(RX+{Yx5HqKt70aadVMVzg{g%tE-)0lfwUsT0L0HElTb z7$il!&}&8p%(?}npCT-UHj4{#t0!nw-wLB1z*heYaiEPMGcYoUf=2JqYG5G_Nnr_1 zNpaMN5)YVdAqGiyE70g8!Zo1POj45O63}uB zVjdrdm93;Fk#j~O*w*?;V5}E2b6_-=G+~d%j2$#Wj5-R9 zb^PDf2ECon03C%!%m1LZCO8)%hb9BK|LcjCS2aQFA+1pRfeehiXlWH>4!94jht}sb z1FfF}%a9o=rdUR-LAGJRR#?gkOk3?ZqQxam(NhR`jTO2(!TH|=%}0WuF$M)m)YW=m zost+c1;mg4OE7@uPEcG6wjD772b06n|JRh%WW>_{XJpVrPY>9}|CJ@BBsnC_LG?dU zUgVHu5aQrKY5%h@aByTWvx##kV`<$Z#RrlpNTTeTPGO*Yju<<@u1=JLmw_`AQf9zO zap_cPc5$?kS2+$|Ug=0*lu=uLjtJ%`^c5c{tunZo3~bC8qutDG4B{LqnCfNF+GgMu zpcF>i(pJ+y5!rm)Y+KEEEGjk7b|ZjW!ot$>Y*HK?=&RVJ!0kgstC)>}!9ki!OG*lL zwF|QnhcJUKcn$$<8rbCm3h~bI;v8u1Pv$US&_M4g2umli32<;|p@xYRXmtsi?{q*T z(CDG(&mqi^jyY2yVp!pLdm23>`XtBn|zyL}irW~Ol|HAEx1f^IFE@^bzQ#H_2 zhzz%sCV2D%R>FYuB?kusXtf`#g$Nd7FyOFeK+Gya#L(9OLHhqNvk3tU($fY#-GEiv zppFn@UnPxo&WVphQrr?tn-?_OkDijT)c?HTI6_^y0coM>ptV!5r4V)w-W)C!1_ch3 zTAhP~fytE{ZOk6hZbXd_M9ziO?vPMMh(dBT6N50y><&mCq8`SA=woE?=3r#N9KZMW zl;l9)yCBHR$Y6-RD?q@KLsCHyqqht*9hElnL<=7VA!7Ru42%p$%IIVDLPY0(A&k)k zMg~THv^5;y6wJtA$03Q8^%gMkbXuHJ@hh7SQ3j$ zJ8?-4J+z(=qktY}@0-CJaxc-;jk=i-eGh_BE{^qh{e-UzN1l>ZehU@L_nr3Z+_Hg3wszz~YDIvjPq zHK@&n(b9ysl7i8D0LkcMz_|5dHCbE)r4@!%4cvBgSqo__?O%}JiCoWw(oRIO1#R6D z9v5O&Nxbb?Rbn+0s~eO-JH$c$MU_=UUk!#HZlE~g@C1>#LI71fR80nTO+Qjtp{m4g zrY(^@5^V0oWj^ttgw+J}-XUo|LgZ&q9)-jJLJTFJf@=cosvso-NDf&qrYNQgkO;(9 zHU@JMHfBy%v z$2|1~!!5QFAa$stvkZ(3LgJQKN31dQgLbg8W0{i}^x=c)lTi^mhk&gY#;HUYW6ZV^ zX!8~zH;Qm@bLH4FFhJ)2K=~6nzk*bNFi0GCzQr#K(m%AZ6=)n8b<`AFo&>F~0Iv^2 z^{tx)BQMsmU<@;a*sa7d&Zfaog=+dJZ!`oL8AP$n=b)|c0-qEFn$ZL0Rzx1xGv#Bq z;m{Q4PK1epZ&!Z-0nHR~cGu7I+(Jj_>_T?fm$Yf?ss z83eG8M5B%ci}(jaVu(0WSQFhxD87c<7-)*Nwj8_5h5a#i34=m|BN>Z&%vC-9nppiP zgKY;ec6SozYZ~bd)8MC($yh>Ot=WBRucz_LR7-+6b03^ zpxI@RJRE~pBcrW*gsh5}Kwa-*ASq?XA;@5bI=&1#(}y4Z1R(GlSX0o7dzjte6}Vvg zQP2OfEi2*%zgItAC|1&T;a44hYR+7ROlzR~+5~H%D zrndrQM>9euo5Rzb9q9xxkV_a9BsINF5$o+hs+kx&>&N6`6WzAvFV1&K{NW`1n+XCTEm|8u| zHEf}vl0y=8MIy)t*w$Tx#Hou(OoLe5kIg;GlBRaxSznmHanQK@sEodI0i@pxW2OWg zo0#@vtWpH&9)uV@9b)=q07Ss68qw@U%P$~VXu5&qKjfKrWDyV>lFPw$H%K4Gd7j{S zVF#TLRKQ^YRsj|PukG{(ttW=g@IcK1uZ8B|NJr`cfNE6*1}5-%Dk!T!WH3+g2d~+d zL2J*Lg4PM4tyfQ#W@qP+W(KW@Mm95wD;fP9N9I5d4u*7WYk(X$ERgkr*qUhj5!e_Q z%%$ZuLOBdD+SQt%J-p~GF-T~VO-f;`wgH_1gVGy<+Q^IH9tJk%AO$tJ%l0s z0+8+KYs+QX1jt_*1CCA1wl0=!%PMSj8jD! zu$hTHlt8XR?W56EM4AgTbz$z3U}ERMXy1WyC@h~Nvtjuen;29MToSr*XdV=3P@+ycA;z3Fo zkUka$R&Ys(*b5DkXA%IPF3K*c0Om13+Zf=z(8y;DfJOkbxwu83^2mO{(hmgp7@=(! zkW0YWTvD7dR1!6Q1SB=BI3&?ULA#+bbGn73DYjmdJ!sb_vU|X78ub3Z5xX^qHHRfT z+FERoO;ldJ2pZY7L3a~)a;Cuo9Cr$?V*0sGR11Fe?@vK@YgJ;V;s zX-Xi!qxncv5_C=x%Bd0Hlk!1hJZO1C0<`lAEtHJ0?UG^u&jq3B29K|xkBWd#b4EKQ zm0eO9bV{)$%1(CBofkqFCsde$&Rx?4^)g|8WCYc3Ah)CH28Aj3ydETVATb6k{eRF% z7`!cyCp9Z_mNs{wj3NGY0?fzA`A=+(#{ba z90t;^5FfzFP%Q1EL}?DpbA}jf(a*I9nIDhkBp6!`G0amJnb{Q3&Y;I^=aML*#+AYl zihdG|GKV;uBIqm`jy_YtYayK$gxb<)@a2jE zoz#MQPLcws*OiPBCcap2<^snZN?TZ(OTz$5$YaJkyL6@&2M0e|+$n%|NJpUAp3D^m z@;mBIYXuHXHd$#7)Y%4*-vz|c(h`F*hjdmTn%@Jtq#4XP(06JGUuD zn6f2Gdm_aJ0|T$Lwi*WqgEZQ%cMFbW%o9;TA{^3~GcEGcsB=~fY|QZ-*v_{__ag%X zTUY@HhZH>jflCPl4@WLXQ-x5^$Sx^vEd++0lj4Cr;ZrlhzbbZ0Bb7D(D; zVsPNVY(+An>jk%N_&_Z@v{KiS!%Q6Q))NLBPe}(!%(kTg=DBv@bMZqFE{C$fXP!XW zaG!(AcQ_9uYs@YI+U-h*`k#@(&H!UqAh<1repUxMALLF(@Tvaj?ziSJloCZh*&Y#Ef@#Nny~*OK4+TSZxQ}g6<>m zi6%B^Cz^mqj2+PHMhVOlv_ZQuMHr>fTYebl@4(uJ==DFpB!{su=mZ^*pJ7;1!5Y*) zMeQ9k7-P(MF)}b(fP9bEq5$8_78Qfk zz;Y@BWFDUxh0o3nI>Ac>qz-NZuOx>XhoJ$eU5+FU-i?fU4kO4e1`BR3PFNoSmcKCj zfsm6}(fj`lZXEU)eRVw!Nl>d1t&B6`z|vD^aKq3I+UbvWiX+%nX#F+%_WvC~?Q*o9 zH8?CF<0+tUgkW?&SQI+)g4(y#1Ggg4+xi$M%YaWQmDIEZwM4<;05%b{r(X)&mfo{))o#!^MOe-W0F^$deL0W_JLu#kwEPe5XQRgmXiNd)#C@nr)P42fPy&~qP~U)k zhSlwwk{ni;y*UiM(69j8hHR!FN3=L*M=91zPSk{fA-wy*) zFQkmtM*^FK5x)$KA{?F>C}Z#--5`vVSK<8wkT?t@%frMN*(ELbkirL|hJ(Y0gM)+H z6<#8M?gi82PV)z!H;*g|I)%=jLlSHsq+9`$SjK_DBgWv-2ITf`AeS`gG!1lG$e z#=#Mqj4`L+%caD@fw5Z{G*bZ4g&_U8)Ub@=Vve8ND*L8M>#!?h>`A8j_NLG|^6s@yE7%Rugnq54!vPIdqhLWl+~sF)*;nV2&93a&T}+XQJJc2KFPmnOM)O z0iV3Yi_-cBoyEifKIs&tWel<%{pMyFX?D=bOK7t>SZxQV5N9;^Lsj~sq!545$x9e% z3Hw?54jj^$w?tzJC4bPFLKr9Rr*Mg3+{Wh5!67W2C5?Xnn6os8Ia(;OF^F@haG`}f z16z``0b00$eTUXZ0;gfL&;Z@Z&CY>x!U816BF5lge0;3}c9H0}<(d%#< z4lgY2deBM%6q`ZgD`;oHK;+SD8?Y!ZsEq?=flFH`3!@f*iX*EbiEYIZ&0vRiG94p3 zXe||bdmqea_ePz;2e+0D(MGo2K<4p^qN)VPC%S6|Iif?+>u<>2GMHh4wGM@}-B5fi z$zd&wK0|{w-jzYA#)^UH`X9ah4~`4eQD@MsvjnJZjn{ZCP*b_OCNMnDf(^@KFoV;!C{LQMi4PHKZ3)U9W?R|J97h6 z8{^CC(3}b?IiRg{mPvHi<}zGlDQUR1mR&CI1^p8i-1XqV*m?X$GSg z2wF{z;ZCqmky=CuyU1sO{AdZvugI=v2c3`xUcrbY3cCAT6uln{%4t&I-Z7F&FAhOa zpA+4sSXLFffqDw2_NZ|L?&(s}|L0>s&z0b`i5{NplI&Rf|Gbzn0-7N)2G6)5g*52? z8jQR8KxLm02YTNa+uVgchao6^qR+CjONyhPP+`U41xokm;mLt^w2mNJ-Kh{HP+# z8XO!9826@{f=)*l=O_lZln^}#EbV^YC`I>eyOq z2saRxjRLj6xzN@=DTCdKcK1OL2Zy*cdMF7zBkiJf*o*(0zo_DrRF=@w5Pi zi8zWo!6V(6VS@d!W>w3EnzvW4sx;``blgIjOgd6 zfllgE&|?6dafa+(BTdk$c3ukTC-#_uPCkQ{l~DEAPE7-kuX;)Gq1OWf;FIJ~^oxQ< z)zNDK6ctc=NDvd!krcPHK-)hkVkIodVTo>&h$V+4#_2d_9FnGP=qCk&*8k{Wv}r`p zYyq`#KyROEmLr7L;>SQ2F&q)aQj~mz5Oq&C&0*H zg6<<>EPmGnt^dKeDL}*qd~*cYb?|sVPcvXyP)i*%)iHRZpY+GTs3R$E26h)%AIwxN z>5~zhKGD`mE9imFDOErd1+P#;F^_>!0PDGr;5(k}(bFfE`F}fc(0T%-9EegMqvv{T z>Of+MypHTTBpF*q$o*kxrX#B+nT_E)l1+fc3K=wb%?HM)1cnPBr?X=89x&9A=mPZ9 zCZXn`w#gx8Vhts%`myPTn1M{%T5?!vT8U#F=|EP8iwz19%smpgR8uC7>32~7A5)Zp z(UuWBe*z6he70iKja5C`%0sMbh_DYyA1KXXxg!Ee1+sbG(AjllG4$~=(CR@?*g72~ zbC7Z_SQMQPDHou1Hd3C(REMx#2&p#%QirJ<*;I(^;3eZhy#mZzXwmu}Y`owbu&}K- zM^~w-so?J%uc@htF@J!r61|NMZEw*ltON|CxukV0$aR&hG=~l^YWtgBE@xn13&3cR z!$OZ8bh8B=T>`V0gxFNToOi(&3nB^_yH?P9DNMWy7O3SEC}(1?%@H{nlLgWR3Okq# zhz~LaGLi_Af$SHC@If*#l^`0V8leUxG6FH^6ln!eTMlFWFt`LBfgv*LZ>om?dT$Pt z^I*9VnGH&9AU+~jLUJyI4fqzfbiQ4eAvaod)rLo);j7=BH$SS@T6A5jx zQ8TF@0u-IgPvf{tA=dn0oIMP56BHweKKEY=$qIe% zCCFxBEAZMHBVI!e)SDcHP}bLh?P6dQFk-MXw?W@;t%<$|nUR4}#7fi5!HlTeO&J-Y zc@2?Nx_P3nHDY8C5{9f_77{Up*$$n@Ld}O#ye{AoiYR%|3_Wt4?a!eAUHt>nfts6f z-Tw#mH7K0$U`+GS^zlks2!SvIqpg*=ggNGVGc@&3yUaALK=%cUFfv$S%!Ogsfhk(5 zsaJ+3Y8$N}sTqx$w#xaG1v&H_(bs4(GB8$HDpx|?12U(oLa3rtpcF(Ri87Y+DNAy= zA?vS(ssgD+Qdz_6ts^P!&0B*c##mm;F3Dl#h&H-kZf7AW9$gEvb?{&`H-dZtUcn^F zj+ADFQF9W^_23mqXs1NM539IZiaMqnM#j0m5(mAEKsemA#4S@{C7!OqjrT+&nsI^Qa33N6c!ZjdwMfZjOG zF3BO`X)gi`FZgI3YPy5E!-@mhb`!{|LIJoQ&}=yL&OAL1K24ad9GZ|503dFIkkH*R zB4+3-=NQ1J5J2q%sl}CRQN>|A;Rbs!!Xq#8qziZlabOK>{8NPz6=Zux?DjF zjvN@L;9zat`-0Y7JA>ADNOJ{&+CJct4QCq)i)@`H2ZwY$*bOk*atjW~$_v#7xOiC* zXjT9uZqbP55?u}sjwYC128L>gUNBjWa0x$1FKFe6b~DVKptUw25s=9haFw>=FqKHR zhRJ1uRw_wzNh>4UZYvJ91^pIZnE7b#g!_fY;^Lkt=cF?GYif#1XQ_aE3J)bI4(U{g zdjdfxv%j-#8z}*SzA*php-?Yrez+fTG zCCx4Z+pD1nU+K?**q>{`p#(8UMw)|HN)^IpW((!uNOtzu6h~6Yz#x|CFU-#F>+COX zZVEa97i2HUFCkpg4(7s2sC&{iIXu}SeN976VW;FWad3cF=D_kEWEPH_LxF*j!I~pl z#0|U~hlzn-N>s{@U4q?`!&1{qQ&Te==dK};-T21)VK$-VZm@Zf@&QN5z$?ii0m7j3 zcS0E%1feI2!OX)&gID!}cfDaP`H{*p943^5_S;FK)SxY(lS-Anl|i?s!*x}F?$GpB z2Gu%fHCHRh1f+5p%m;}{BDW>mAo@Xj@!Dao0`*R;wFfd0H9O=5jSN-t!+Veq3mz+ zw}P!80q^_-hZT~aK(_~j#SnWsM684**g@+BK;p37!4mAEQeKdAcR7&OZ*zdo!9?Um zNZym=FaVvy;lLpP%gM?d+>mk)w8NJ}5*&6QT@dw<(8W%|RN>9r7-C?XXyGBB1)a#(Umwj!&u)VY%cdr$BWTY!Bu|UjBZa(~f}W)naoK^59A_<>vi1VH+(?+2quxzJ_8503}zmNL`?!J`7AZ{G;KIE*<)p5*?FP< z0fiPQuYziQ)c!w66k#%q2Pp+Wsv#u{NIwL_R6uwz5+n*yO)d#u)vo|r`+&Ui+@He$ zcMCENb>(?=brY9#Ev#JyYBg4H#CL(+qm8^5wYwamMwtVn6=)&N)r4qs_keWu_Vpt~ znAsTGklU0nw{gMtY$|g|_knF>W@E7BknRDqWu-aVU@F6$6$RQm7 zX7@;QkbgcW*aVPiVDlkx2;VYVR5VNeV3HvpYF1@@74G9>&#y$&vaUSSStMLACnO|b3eU|ZOO zR}-uz`-HrERA-4Y#^7kg|N6ZmmI`Q1_l98KY<-B#B?<|I8;z?xB#6= z1Ujz=;#y5ezet)(ivjL_buqMah`=sHGa1E&<_Ze_0rA4794at3GcYhHf$DG5crN4< zvY0^oZIRj%pj-#aaoim2X!*Mcw9e1mP1z7!^Fw+Gh};d*hrl2caLFN5fmk4w5SPQ$ zgG8{gL8=L1(D?z33_`r%G8cYM3%DLZtN(>OVf89@GwspNqbWtJ{~4Xh3y24Oi@m_a1;%da4uH*ZxWQXc z(2$0ljK`0(dxO_V3S6UeNQy9uK*Pz_j=`Qo5FB@))A*n*2uPg@CG{XN!(gQeg3wmD zIIPA5)tB)04J@2PB{?K5;I%YF6r3`JM7%>q5#xW5ISO8HcC%2Zdmw5_B#k^lZF{J{ zVR|(sJyBc$wiT4?5c!aWfrEn++#d&tBXT1rxb2VJ?n0J_*n=tp;z7)fWoKvChmIw{ z_6S3Cz)5BBZF!(p8#_BYrwk`MJ3KAG)xdm#jfRd5Kt_D6;pYf|^FM0;Uqq6_5Nr?3 zMk5AB$X$IfQBz4z zqLKsLV*rbTR&0Y?XRtgA7KNA#DnpQF6>OpEI4lw6hq)w&TP-6)C1?}^(mP;aWaxnJ z{>9vR3N;zo7P_$Qpk<~BvOhs>Wm8bzM(h-Y_kqD90I=9FQ}BYceR)xCWq^hzwiA$H zI-&mMl?0vrz#++DgGgNlpf)%oxL0Ke>v=PP+rZ$RPA0IEDxkK2LLZjTK|5_hd=R!| zNAyW0;UN#T7ZkP}D5(G>0@~99a|bvlf>ncUg|RSBTY%^zh784Wu97Y4j0FDnKiCa$ zn%(pp!}=E{FP&jhU?+yw?EYe)!E~6S<@-AZ=m}*myJC zOo%w$Nhwbbe`Yz*eFz3qwR0Kzlzm85khv^P%Q-h;IBO+!T0e0?zYLUw~Z#m%*kMzv&QJ zZ}8oNcFLf#Sx6byPQg{=5xSt30JtKo5=1jYYB!{IY$}U;~P&?fo6!)NUc<9Z{;1t5Z2MV`P&}|VQ8yR)L zZD$KfO-6G!M9s`#CTyi?C2WW!!pOjA8_h1k?&T?om^}dZ$813Mz}*Kj)tf`o6O=kZ zY$!&UgkT}+e@9qofK;1!Lhj@RvEf(~X)GUZmk=~9fKmj!wJ%}=Z@)lJ$pYsy4h|`3 zZVu%zg@q_$e#VQ#5Iobtz`!KSt;qms6~XO+M9%lpb$Y zMQKH8bvu%ooiLZQBKaM~1z>aNDPmzMz-R$Vmq;spJS9UJL1_~-6AkJ6GJsBlv1BlT zj;EW!{DE+(14{oNw1S7j1ky8rtBD4giBfVvL?C`P2KD#BYC&fOfle#7gq$k@76Y9d z#RzJh3xoPzlF*zi1Rk{kxgPnn0>tP&@~Nysp0M>p5c|NSfDLp74wwhB37+c_?qP(C zQGjGEkn=ydd<2OiVNtj*;3hJFP6e_I0`>oSApL*aDO@F>kw37FHXL3K92~h|8IWzD{Ef)_AQ4h9x^563QFcH| z3kaVw68reSt|p#6tlG(FYqQbE{~4;|xunJ6WABhwjJmWVWCXsP19ZkFxMhvpDhKyV zz;jjlmSuAF_bSf_*0<&7~wF!hv-D zlC3mXlsTwH4>F$(c7~EN#70vNF=n<`VPIeoL#Twu3wZn=xY;2h6r3aU3i zBA|S31};xQ-1!|<1&jyD)gZHAIzciZ-=oh4!sIEZvDW_(-w{m;p^g88X7t_K z+G{}&?m`Yp4nct$2F6-9q#77JFAWYiNziyQ#6}%S4)3-~hRO;{4oOH&&cMh}sUyh| zUCzkRZh>)=jw7lFsHXrLH>_d@odpQBzgm*Ru9}gd2Gr7k*a9L!qk`p(W!O%RgX#mR zq7*xzpK1*<+fc^}Z7n=V6o##lPI>~}DInwt9)knlLu4|#KS7lhs6e?$dc7L0x zq_~$ba-9sS&p~T)89gPT6m|^E&0~$p@ve6K9s~@kVC(;~=1$69N0X)+S z?!$u4yYT|GtqmkSO)PAnc^h;>v>Asr>U^S(q&TC2q%zbDxJ{BAHja>zh!39EjW{IX z{bq>!5Tq5FJHaxVD0dKo&SM4LA7P3->H}UO2s(cm>PE0W$W3Fg_=K(rwbh9NJ#=JDNt2IN)yUR5rueWHem%3Hs*K*)SI7>TSxfW zOHDLdM#W#`XJ^p=0pM{Ya%E*yL)I^*_vV3J{e#h&BBT3=B=`keP?# zMu;sivKu@y4K@eVx?^CljR1|8b4YU`wL+QebRcFLAnhn%VCdHdo2d?8mjW??%49N^ z60GeCGg(nuia|jPJse=NDB^PB930X~5y}EOps{(_s5~2UGKV!Cg&J-mhbeAJr-*ccd0G0tCQ0QrkU9BvnQhJnqLg9A420djvl zmly+shzb|PUmy{%dS%e81tgX^U~PEW2xvM4iNjP1n1VtQB!YBzb`m&zz$pi*zh#YIa1e&cMh}Q&GxWT7gvmLR2#_GL)k3)nn)cjnzSC0pR{> zG^*gMC`Gg#V7e>#;JpNh+LpG`3cHHZHpnajM2wN4s)EnF6r-N6s_^D5Mbi({K`q)y z9J8i(9hp9SQ$E6~mhSRX)0 z9NO|0fV6<1v*_l6;C_dZu%0Gtb&in%9|NO^CF;#Oyr5pLJ#yZ4B;&Wm>8p`q$$|HATw>jEqP_sF<(3I3NA|y(8;E7U0~IG?A{<~ zjuf&2(d^dX^P?o-V|}2rS0OnV+y?^b1f4YwUHy+3-3OU%WMRp{VHyh`)dPt!*ye)9 zW0WDia%kQaKwrHC5=Z1;NPY(8WRN(B2APBlV^aeYgVDJ3j*1Vu5P-C=q3I0jI$q>e z>QFIM73e%(q*RSA2j?3>Tj0nh!u0X+!q@d7Tx83~3)wXS)*%2>3+BO1WyH*-i2gJ} z6^O+PG7r@hAzle(31tahc&-MigJ7gQiLeoK9uHH5k--dW`G+ut5DVl^G&Q_t?B1bB zp#gCt5{WPGfl6t7@@RH}?)d`kA_BLvK;;3VguqmZDFU(yQo4+iqaiRF0<;SOP~HUP zKTwW?u|a$ghKa#wkQk!34&fn_Fm*5*Sq_~IQiJR(kli3L5RI;Ols_5*qai@65J1g! zARZ)N;>(F3RUmmttqxL;vj0!Oix)id3T<1!R6~4#%46g=L>^~=wi`fZLsTP?=Fpw5 zP*ag)&_xjYGZ`3dk;aA5)sey%5QLAW;<1?&6B+oB&m_Xu1|`Wf(p{y8Il|5_$RP+_ z8Ar%GA#u!kCLDSY?Qt6W$O>)t1c!T2T!E$Cjv`Nt8FW!23?0XytLtF76|@Erl+Pif z0wDjwWI${LW)OCAWeVjG4&`uXMyO|DkYeYAu6{F^Gt$Kz6=@#5JYW zA?~1z6p>0s*p7818>{(JpxvCXv3&42E(3T?xj7p%n}~q83fvd`91*f;CfH&<<4BW( z@ZAI8UKecinxEYlZVTKcaT-!0roL!C;+N9Uj$$xihq;pteOwRVpT9 zxrbK36gC48?+J+)1_m~`N_My`ny=yJV~T5l{RI(+`3~+QW;O-^;V9%2Z=B&P>EUK- zNU!Lp z2t)W_5Jo3BF?qWDY78gv^-oN;>c%>H!W(2Sx@XbCi|fV3Sex65 zo$e+o70oW8X{7_(X#mnMBqho&;b5hS*y{wEb;c~UAz{JCVI=^%iwvZbk--dQttwc| z05PWv=0jW!4qqfbM3g~@9kezbX(pam(iCDd#5RZy6LHW!5AbRj4r6gE$QhTRuyZ0L zI3yjc8LU9DY-`6ZVF13Dlh?!)(Sj0^@-hJJvokU`5teiSt)u~)Yir3NX&`}!9k82> z#3ebb*(Df+H2Dy#Phcv|EzOCns|BDgW?-}ht-t}DLnUEg1z*|22fF!81hkjaL{pN( zO&Bsm4|WxF=P-P<4tg>M`pSGO4l4#@)E0_>9e9@98ni0_>=&?k;Je?TGYcr9Fj+V) zVg|ZBngbDTj0_U&;MhQ{?#FKebU!QHM9?Y$@Vb5*obv_Mo$m zLK%_Hhcf1n)QmQO>|}t45kKezOlt>FUV_eNhDxx5Pj>>Hy8?A3Ts0OxpQD6>6+2Wf zRNh$1i``yR!kp0*vLjs-l+VDS2AN|4=YMv4O)L035b~KVpp|9t^anMO5p<6%C>BK! zyRR5QtIgOA8SKoFTBD|*`7AHco)b@`_|=p|ob>`XQ3y7>gE$$79ky;z6dLj%pIgE9 z$*@auFq%WdPZPTO4s^nmfDMNws3!tTLjoWlz(NGHuU!(nf(^9K$PIRiECVA0#C|lN z3V_$f^NMm9nj>NqqEb}ZkU;{p;venIQhu^x}}TWrX=&1UeHb zY~>)qE}EqP{@OJ_kv~uVXgw*kd9?l zKin*sI?&m9pi;t+!h=PAi6-uLiOmG)D@OVPaqar8EXc23`*CNLYEnz!1ab1Tu$RQj?J%7V2R2 zBAy)LQn0m1Aaga{W}|ju%^E}c#Q*S4G3&~1Q%EY zOroqA!Dy}N%0y{;!q#`dPNp$ucL1H^0$xeMVG3%oGcYiyflULiu<(qM@l^)5yO364 zCw7^bAkANG)*= z(8(@R4x0Y3y`zxTA`aplsxlFXRp&|4o(v2@ifjz#9MWlG9FTT02S*CT?=sRH<`$6E z?riYY^q}1mfsnN=yd0(}nbI603~aK}@cp;GT+-q?AXhPna7d@3^bUB%Ii%&$+vGu@ zd1PC*V3hSi5S6wZrb_VLxdI0M&~_{&e88lln5H=cNUwu9v>y}>YR?C0#|yJ_fbMXH z_{ahj8o~;i@y^m5q0qK2TL2>7r9nHuA>zDRvTO`G9LVQn!cT2wXJC+XRszKZD10oW z<=M>HO{KZSkWLj!=HLLW=n=*YNEgHw1~%q&4i0{{;AC*BfbAyX;7Dg?Gk~Ne z4&;5g3~VyKpnb(CCV+ONYcR9%iy&0;nuE;e6#S!dylMAyc$c7gUCVYG6&|aui(Ga7c2XoTCmpgONkfLP7+sW&)LcC>Xj@ zUmSFrnk2NO1g+o(m1TkodYYi~H6d=2Ftukl;}x>C;jlu4kB**&x4EcoG~~RQP-wjh zvH`ZE4drY|SdA%`KZ3FVXDP)}utb~WCg{U+F?NI}%VPLcc?M(%l3XzA9 z;8kcMpq;%!p!NtzC89qBN?lMHfNEU;=&%ZEc!*$kYzkb0*e6{eEn0*H0KQlOkJt-x;qS{djm0_hPjF|aG!b4WVa z@d|<4>frJjT3*5PuDLh6GA~c+Oid1Um@Wne6HQR-0%Rtr^x)ud0-a!|>7NPWfx{9M z#_X^@2D>MRC+KWpeksvVaBm6ZK4D2v508OSKvW8P`iqE!uq21It*9fY*CzpLNrTom zv72y68W@3kFx6(8L_wqm?fn{{dTB625$~S4oL$$Pe~4YWo!894Thle!Jud2Si{=8pi~9hYhVi9OA9{#9&~ar zDC}(%z^l(deMl)rP)iUL7aTUQ75KKGb0|Ufg4%K*8jQt3qbZCaJse0qZ3aeYEP&NO zeGWOP6;%YZcOOFpl2_1XS3v0oyt4o?N1-683Ch_L;M2n_!K22Y-L57KLcE~W?vfma z@R1ijDPvHM0goi3*k=LWISdLLs4GF|e?iM0b8ra?5;q6+a@;s14ct6!5c~RhMI9tL zB$UBr1xOVb+k?VhN7B^F0WJ<+J1;5jWua#d+KmHlTk}eC2$_QR3V_z%3Bt}40-Jy} z|HEPqabL1HydMP71twuGMmjGEBrbq@&JUxAq=F%bp#><{c)@#4;BY}#DPYg;#v$nl zDv?2H1R65nl17}JGY+2HLAGFG@CggZHw}ZzKae@#Q*;%q6u|XAIGuq-JtaN$p!cU6 zIZA+f(59ex2bC9UpmvR7x-h6!?hjfc4r(LA+V#PpbJM|XaByoB(h?K_oxuWbb4hc+ z&t8nfviH>heg-9C{2O_#xdZgvl`!P?tP=R{6IjXT$f1O2TXb4iQC+!+Nuvq*!31En1u#ia_0FJyNzvpGOl;lsiQEQ_f!ic4C=)>Il17a;Wx z92|jR$s8Oa@HQ+1gQv6%8#}ZG%>ld50TkDuRxMNeb zK{ikyjtks#0-4X?51BEDl;#lT@CWbT4r2D@;6O5gfkQgUmtDaC$*166S12g%5TOd$ z2ND;AG6MiR2MKBm*hV&HEl&=PC})2MdP_F@$Elwl2j6J&qXfy@eT(>f`wTx1}p_Z_M zC}(egOH$C;n_$!Ik!!|K@CtNO6A|Rv(hEG2Ybb06Z(DjnYXk}S33T8+tSByk*aAK) z1Jb@=2iIi`jG%LBKxbe;M4@#XQtJUR^8y`#}4LG6K!CV^y(;JPGD!Seth zHMX!eHXo>c40k!161FF`~zxvScBTXruL3@ zaK9OOTEfp9Vr1Y`fV4V6wU#9VWLE(AWFW8$BsuI%B^?+A7=@9~`tbs#R?wNO2C#EV z-8clu20&s9l;@FW2|(@?0`-HS=?|m^l&@J3I!EBg2H9`FdAy~T(8vd{`25`QCm671{=D~VF zJ7K}LfXW%zZd^O0v|$4Cjg+J~{0x2vSg%KvLr)VW#fpG-%i4K@<_5v$gUvPr&Apl< zwV*+wXezy+BMG1rbKtGbQ0O=l=)@ev>M*F!7(p$2SiHf;SHL|jc&X38DB`WDCl2oa z!}Wt^mO$wMjG-ao#=*w`E$wY3VCM{gMoBm%4WRQU;;{BCSRV%{<`KK;!Dk9-3Ne6o zJAh+Nm_w2slsB0iIXLDpFgQ*DwZS!gWkLBGWD`2(<#1wV;^2VA4ajexeazyF z3|^plIB=N)(F>~o87-p4QPL0tqpc@LF0>5;DPKTj5VUO!Vnfe5)&tuUBMXCmx^*vQ7L#DO$!isLjE$XF~wZxENX zr!uHDi|i_14i1%Ygc`8T`zZm^!VC;4(2?LE z=w4P{#Mw6-9FAaH7}#VW?JdZ>1k4TW;C3mfg&%~}<4ER!?!^_6c4iajFa?{S1G}Zl zmqU{mavK|1Tp)@$kb^^*%~{$LaqgwA1A~Y(R|85Iu@WC0@xYY6s6()2sTh? z@TY)s3+%j2S!oUjTWKy`0niCV{-F5*NcsekNPSq4nUHuvn#};I0j=NR@D$c%X0tU# zO39#J4`^l#DK0Fex%{EIgBNbHt~duYmXX#0DNA!f?hIyP5CE0b;QX1*!NI`+9S<~u zmbl)aHhp3N2M32C{5C@LyboIcE5KpNAPQ0oZ%Z&SGqH0hurPpj4};DU1GO(ey#o%= zNy4D;VTZIKpyCc3rs(D}GC*cdk;QG0TFG#6)Dcfe*#oL6U?Xo(zrfXlRG4BLQ;Ejb zx^MusGvRs#Pr`#;5z_J2ZkGKz!eo25Xj6`(WNVDlsy7&Vb*89=H* zV`bpFO9)i5a)50DkBi$tZ-2FiwgaH`f2g&lHE6UPq!*+EJm+r5F5v*J^}zOkS2pmA zN+H(`;1U|73pD@EE(w|Ihu0F;91@@tDWJ8Bm#3sM=++z|1+xt zDn;NeAydSSXo%f!hLAZGkV_!83q-R=o5Jd3(CP$Gt#8aL3c42>qzZ!hB@C=IVXYN# zD1pKSI^qgx^@2pLIJ`_j>(xMPcrQm&QW<0}be!B1ZWn0W7BU_TZMQOlcPZO&*l9|N zTfxpSg4hqT$<{Jk=& z&9s5V7#SErBfKy+oCd3f^Fa3^gW6PjC}$Rc*8E6{Fe;#&Spd>wYYpy&VF_i>iYla# zgt^VgK@!>*hlwyUFoNdWP<&+xTSo)31B&g?O@ofeBbfuS6Ff?QENTYok3z;yIc(Tr ztH!{+akNqk)cTW@Vr1|Vm*lWCg|?nTB{`yDEpv0wO;#YYA$?4+dJai(=(<2~T!7Z) zfm)KV{t#r$0opo-_V+;J>Y% z4n0Ft1RnQTRf1d#!B*H#)6tZKo?(*;5kaf+rKHS#L2W#7#0qhKDGk|TcF<}g)V4i4hqOG>Isf1m8t4>D z3vjCv+KQ8cpX7*SuLkPaFW7D3pthMfho+hgc+Cj(41DlhKoaQQV~t1+DRYp?0vsHH zpmAUU>8yCr41zq^FJYjS7m(f!=!_f4T6-xDX<0TY4jnC7&}gu}sC~=EVD2f+6$NUA%7c0w{*W!7(e~3EB|?9rL%< z;DVjJsmTGo7gt8w6m-KgIK~qY8L0X)bfh`Ukr(99|NM=G(k$@*?z6Qc(U;ytC zaX`8w4WwR)!$MevD+M&O1Gz<6U77*rJ72D32H0vcST18?Fy-(G1?NHw4qH*^2tl+b zsGf!9bjTPJwlfZ(c^IOOfgzVm8tfNv-Usz4Qn@+Ag~2oRNW0ziI3!Kk**Rr=Ei@UB zdH}NA92}++>~=`y9;A%6VwXTF^FS>!Gti22DbUSN;4x>&dT9~RigQuWid~d3XCW!j znhV${7wF7(Gj`BTj>zMIOaj>%oyBE?aaaBuaGqm zpwnVR7%dFVL3gEsR||xK?2vJDM=15 zknPa*Juvl*;I##?mK#`93N&vHj$NotpthSGXpK4IoK*8tcH8ZZXuGo+QsU>AYf zpr9FjZVp}sP~8tQg%{LM0Ou@dFAJ=akpXfu9w>i<{RR<*-dzC8S5}bn36ulDCV<5? zA^llUI}Ds#ApI8bs4$q%A&FG_fJR|KqL9^TFq^DFronEQg4hh&X9Ow{5a9q52lZ?@ zAa=s^!&bo~*1AK^Oa|G6SVIT8WezHW&=1Oonv&w)7N8Xx*3kJwNDp2J+O~zCWDClB zwl*A=pdJ9M|6~pxJqCq{4k&iOE&})Zp>0ViGjZ@5Jaf>PwgiWyCg_YvAx%iC0q;Cw zmlOxx?=EQ$nWX~tvLJdfw&O7E(nyyAmuL9eW9@Z6Hq=_ zEog@XG9NS>1WIA3xxX7=FV0F@pb91ciraRJbJKn@Pj z`d-x2!l33bfX4rnIi$I!C_`rcLE@lNf{B4a#9mX+R8YZ60k+PNg@M7AGr&nfM^jG$ z5|U7r3@i+xn%uCn*Rn3I7;~@8vLDa}uh{JXoa6v>MWISjUiMlQW19S}wTPD;O0=&FIvO%ym zBX~?#z(JZTf}J50rHz@WWC3meGO#hTDR6*Rlz{A#hx?Qlyc-#OlBA9~8|Wr31~z8M zZUnIHT)qqfFx#2gLM;@0p=*&KE@We15Q*oK)5$1^S0k52rjpyLd zL0TD)RVCbHkelH#jvA^^H45UPY|KFhpq&PAA2CRCsWC7pgVutHi?A`nVlWgu#t&X) zBY-jkBZ3$mhq_h-ex531ydU8Pd1*~yY|L7ab5@0+dZBIxhboi}bGaPiMlWc( z1+5HHf$w>Mm;gCb)RciORSCL7gMk6EdjT>l5`@^t4qCg!!NHO23JzPinYJ9#NibhS z%w%9-OY{e&rA*k(1t9Tw*!nfwlq5vxfqH}-97;(%(ApoAYr!i76eQ51@bg_l*>cvw{OBF8ai0qinS*7g1AEfWfz!(1gMS{@Itv+9*c=E z7htEc+6S$R{%>_belcgJT1U4^;~a6%0`!5lnO4 zgh4GIs4kceEGHG3q2(!1oO=m-gX?o6NG}AU8+#nHn_)}I$oe35>ivV*kd^(YYGLv)8ln!O z5}^+!I!cd*z-S22F9cw@64p~kwB|u>fXRZ`s2C)JJ)a}gfz)8j;V^NCoe)z-$dhV4S_C?ix1O>OMa+`yFtd5iSWIU4(fVt+&&b7j>X_s z0h1BJdG`!V1&lT#S|xl|pP-+>gL?$^%RhMg})wJZ*JhVO!Yg9U%P> zlOUxSf)8TB`~ zo?v!CZ*xLbX$V=-FJNa18;1t%fU?Hy2{L$r&q-sn74@`)^^k2Xg)wuP9puz521au` zgi4qjaM0jWvLJGhz3(DcDC?OZZjNS`U_f#wwjKQp@HvxEY-=YW=Aeyq_n|>&Ng}5bp-_8I=!^iGDNubdQH-8GANc+( z(5_;n@JEOVxIxzsfy{xX1(;c2S`?Z(%@B8epooL?k&Hoewvh1~uvy6Zy|9l0V5kG@ zae&;I0%pTh@JoP05F`fKQ3PTkVJTQRFbL#;*X}@aHXP7En`B^E847 z8bySi^~ZrczX~5sgpHy?N)8a2j6N#>9tQ`FY=UGl)srd01zN9yqBj6@lplNxFEbm1 z1Bb456k@y>%XyP*44R--F$@gi$zlHRISIBb(AhjFwlK5Va)8$1FffQmMMl8PWQXl? zMfRf@Yz2{cL?Y&D8Dy1kwrR2=>>L{CnsC_O0mwMAtTYE`6@5Ghhl6yg7}WMq4(T+= zt^~L_pq2R?4&b|cg$3ZJv5K&>`^xyTv$G@576e6VNJ&X)L~8H~cqT`}-HG=+BnE|K zMewQ{W;R>MDkf0;`XbFMurXM`Zc2u@9700FGo8Z`v_hVN!8Tn+6?#S#(rsH%e}T+I z@)0wefB^@1kFYIdr4T4yKZYuoM89fhbAPRfGAauvIZ&9;keQmauR>NDKpmPPKtyKaD0J7yrO6@)~P=V&E3Bn?1y3rdf`0lL~M6uhDvWFF`~T+ICt z{P0!s0yeNZoE^Nr3PNJ5A{j(?R7s$gPMKINqL;kds$nsz5Yo zrCww#;G#?L|Lk91SgM}O@W+B*8$`Z0F2c#cqzaC5_cpoOj)dH3}5K%8r zc*sggLUz!Cbc6TBN`m}}e9k9mwXZ2C1WZC9v&pda9g-Y^7Rak@AZDYGBA_)8(6l9t z*mDPQIhcgl%K&yI)R&S{W{~|5U^(3NzmT}S0P6Y)Si1n`22qe-pcvjNhuH$6QQL_q zr|QGZ0PRA6rwOo&gg`f{+1i6v0E78pm5?@$IiHB6DIZ)0Vy7LiC zKV&Tm*c?+yUflUrki!b84hQ9FQ0al(BLJBJzQqi*cOP_S5B%;mxT%n|fN(hjqktjO zUIoyZy5N`rg%4;o46;fzHj+Bn>MocHTM76|d(f&dQ2K$KECXU8 zK>OUmBJ9?%6X78t0U<%T8{`68h#Cm#1-A*B0#WlncoiKZgC1yQ6|C>Uz{uc+oby0t zg0Ka61s(&VCcG9vI;8;|Dj-#e)3P`u9iVe`AaSToi~@E@Emp{01x5xT^Ju8;W{CI> zh3_5!>4&XXfvkH6i9pH(h~Htm0vPl-1T{@`(AQ^y(jF>?ob?1=YXd<@O^$(3VNEBNP7=JXINNi z8fsd>`$`ZK!K4A`Q~@vxY_bGsuM?UWqcErjvgWX4FoUj~0;xCgbmM0Lq*L%E{0(6=mks{ zxLk-!2JiU<*?`dF$Pt6ovH`V_q&%e|r>H>0BcUxb&>9E$>TQfx6u89`uc@Hm&n2y+ zso)=g+LmIFLTOurR|$bukw990kToNqGgA+CvMm7fiz1wdU{@JxD8kz$YTY z%mlTOpe7*hVukFg1-HXMdki3U!QCkU(+d`dt^@&{yn_&jxRU|dcG&6tvS3|MfBAw# z1NrnEuq@cj6lZ@^4vu7Jf6xi2&iN^^kXH<^P&2O7d~_h6<9=(>N9$sqTnf!5`RaDn%Ya3Sq#fS5oOiLyfgWF|8k zgA}xP8VKD@!6pD|&4bUa&GZMg?_DA3!55s0z;VHav5JRTi9-kGPG<0m9!P9r>`o6s zbGa$FCn*jl;UORo+UFby>O~{1X)*=vB{1jUNJ(^Z5P+=CjfAYz6%Z}}uL%a{Q_z|~ zP^~OrBFtLNlcosh96NA10a6Rq zDS~oCI!G3DdLg`Ihm=rWQjikb5L9D<)PT;Q2A={4YFESdd_mlZ^?WsOn-^Nnf%HSm zU~mo00o!p1I!OU00H;0pc#ywOHVl_OSY2Ku-ar zTTcOWDl=3a*hLVXU=rMafSm^j7J>WS$N|1Dmx0j&>Q7sHq*~hztQ+c92Jn6ba0!nP zfy5PLA0db>VE|s03JpCQkiQxD*sVeBBd8c+Wx6EnoNjUWiev`R+G+5re_P}_*ATkn z%nTl$kn;dVO(i)%sX-LHVjbivJ_beu@Y?cF_?axAb6go19rUEYJ4hkzV$g}}kQxg@ zf<|{P;*j)24lA@aD`qbft`nr2G1MN^S{H$(Ly(vm=#Eik z3D9bAcv}u64#IATT^}HGY$3e?FGw2%B*Fk*%?#>=DM%vUN?;4=Tfz2>gUkZCRD#_K z)Q&|m71VB#0G*`{&BaLh6>2_6uMoI3jw)vaO4U-lQtr_E%%Qm)oc|<|Yyjy8%`430 z;uaS`G823zFp5t=d$VD!3{a01q7!sZ04xQ=S}0H%RNbIm@UYZ|Sb-0*5fr*evu_}` zgHF2T;{~N9sA-@TQ=yU^ZoGU_NIgH$&M4F!=nRauAXg&woFI1a!p;}AL@K+YIiNf2 zJrSwh9-6MftvQHZ&`wVduJs-jK6!8QeG|bzmg`JSBnl(7;N7P~_AJ3L6{9?JEd-K`e1e#9miu z=_9D=#_k34FLWP;q>hz^L?|p|K&F|ALw3$Xb`XI?KzAfadV>4&u(1-*Nv@!gA+SFz z;r1h!GN3d8+4;_BAnCx!4lZGk&eDaS+63C$0O@@omq(zK0!|SibC5AKM8P`{Btd(+ zKsgrVV=xAvp~qo~hzkMGxn))gpnfd4R0fwR5MN=EpdDKhpxZf+#?m3GKqtQnEP;ui+ey@SnyIo z7*zX%^g`N4koJQLWHc4pwn9Er-xM;s4sInWz+1u4)-Fsvv@Hg28zP+{i8{6q+VzP( z{x1h=F@e`)!&_3!Z03+1l&~{ZU?zjkqGXHIFo&N$%FM<98E==8Du%B72JOZLw|vc| zx!`jLQYu{1;8E^Cgip1lIZVO+G61#FpnkF7fbKk1M|UU04M7msLPHfAhP=pkNkQBL zS}_lm1(^&V{|D{Hgovl>aKQG%21|2zg4gadghp^lD?q|QghM(DWhJ@+BupT(Ffxiu zS{cS>ON>wuc7UAHlMFx8$y_JiH41#=44Wy+o>_>E3}Wz>zJRGTmx_qEXF9VS;+BJ8 z6%G!~6s}|e26n_5IEa)0X<0+(6hb*TbeWYvXTx%VPE3M?m>e`-Kqu~l&gW!cU<+1b zS7uiO-KD^;CZoo#3_gPtB%;QytRv0ktIV$K8;)qLOLM7!_F|*#)eYj{5C@(6>Iv(O zL1QEcaTY671QOb4WT+CCw5I|5lp(k*yEOVp*)0QPBOl zU^C^R>ED8bLj$~%4>JDGt)q!{$}y;YE2!xW>I1;?FQm5s_5~|*AxIRuXBm7$2=s&$ zP)=rIU;ypcL|+5KF3ABd%b{flxcpHB?K%Y2n$YrzK?2kc5w=6E!I8$0!Fx{OCV<)i zh;kWb21ffIRD(-_b|rf8qU5n@n=oh}9jN68tyvhr zw}F9L51{%2RnVE1kkZ^+TR<}f)Wa9|Cb3h1sCJ0D}DEO=(M)290&>kMRwFruLXwHS^ zat{s;6n}toE4ah}nFGZZk{mY5ptEck7??7-g%R_Bwj7ZC#VBUVfX)Sm>I9V@%uEcz z;QfUj2y;Or%i^FN$>3fa)W3|j63UQy3(%QUur?~hBt7)~(jYykr3Xj^bUq96$*^EC z&|Y^&jGh_vJblD?G)OI^WyK3WD*)QEg|`pEVFf)=2T~%ydm2K}(N}9^S6M*U1{ola zbwhWmn4`3_p`{bbsWc!LK{2SG1_=oy5^^>IstO(G*+CFdUdYTBdT9za!vNGG1G6A% z!6fW7S-3bTrz4NagH?gbHSkV+Fb}L2JpONu*6#z4{~JKsqF_}B^|13ZK_V8Qb1#j+ zISnzFD+nqxASd2JPE`P@gkV%Zf<`DbAtOG}dmLG|!TB2M`PsbjF@ zkc6I}VTMR!I`Do!(g=VRXr2J92QmW!&Y!#-h?xjzzGPs4jQ@k%42awb)(Le5i0ujP z!-C6ZA^2DfNFMpbGO!(>^#!J&bAgadv<2OLV`%|Oi6Av#nJ{S`&}g&54z8@zoBZM6zOXC6?*p{;bp z9j&S0cBVY2pW+MOsSBAsF!hvH_YLLc1)Y!sHWRXs*8#Qf0NEuQg<=ah1en=0k;lKm zCNMBCD50EO1XalZKHVLC7b`Ox!kwVoSCoBa*%QgYYIdX6)$-{avP?tkyT{OWxAW+*CtWpEq zD)xts{lmqD)771kWIkCmQ?}G3}nIXAGUP_ z?R6LDkPZOP;W#6DUbIpjO2;|OU@H`thog_-bPO_DPxtxsw6jsna zIJkud%C*QCV-yRN-{GYLNF@V9ETj($UMVEOA;}NV#mw#;94Kl*>W#oBj)GV)Y{|hP z%p}XrAq6%YA_{7Wz)MpkafqxTT0H`q!6u^p&%h@x$zcz!i6G`MGT4E}d_d#b==DEn z3>joEQmYAcmNIx08gkYRNY<7QH2w!#hXUe3u@Gb?Kmk1B1QmnYXA2q!g0c}ZnpjRA zWbi_^8KxF|e*%(z=n4|h`JpH+C5U>I`X8dp8fj)3A_6{D8+mLPq}LX7Vuc~f$QC1m z5vZSovaZz#az-E8%#9oP#Cgz3PjDN+XYWDkU?efn+4kslH^_DdM(}75vPwqK2tMZ7 zi=cDtG3Fky`VllwgxZz^+XR~FfuuFKZQwKf;XJS^(25Am^~A_?5is>w+hO2VC!&wQ z$Y2JKH^?dtM96^LVW=!WQ29fQdtBaBm95E|7S%IH>0ZVj-{)_ZM5G0JhUuR#4>q;+;+G0@FapmG{y77X))+=<>R2Kf;-Is?`TQw_S|7-i&w zkpVQj1MPvqRDs3_AR{(#5k>|^M@iVN2uPxssSrG(fs!jBF0e<7H}v!gp4nl5gdNB| zX7K!P!~yQ-KvSn1bYuuz9-*BRY>3?Q7J$s}f$m3!nGMzh>NA1j8!-zZ!olGV&h6m& zKP2BlTn;JEAUPM3uVHKu4Js=bl_C8fP`z#kt2H6!IB;-qLd=HnK`YxlIXLp6?J|_I zgqMQ@HYWfw72Kj>z#P?7oxq{cPK-9>ASD-6#`GeM>LvO}~oM{7Yn}cUBe8Dz? zPUVN(YYSTQ4zWd!LqULzS&rA7Lpli}!p6X08wEOFh=Gk+474@{x{^azfdkyGwAJ+I zf{wF-T8m(leUZmj!6IzTp!OQXg%DCMSPay%L)ZdtT?z=RK<$Ft4iXmut%*T8tp#jm zV5T(k-L4?p!M=m83WE9_G@cC=;R4S~fc3I5vk8besBlSpBG%V~Yz#?^^5o!1hN%IW znF>CO)ERZXd8jGKOikprzcR?>(7OUaXU~K5G6#ZAVS={YBanMtVfCI${z9Ss_x_Jr0Q98%C3z*!s|98;W~ zG&MD?G$paN)fhOqlR!C{0dz+=2Zso(Twnv;90o11L1G{^;4{eJbq!1uOiOVhNuC}P=M<{a9s!yGXt+NMyxi5w(!9F7u-iPxeco6 zz_mZjpIeCJVhy5p>!dWX4%fQ_mE61QD#CLl3o`0vSJpjx9n>1o>VE zxwQ%s2i3ITnh0ti$R0@!LD0-HSOhjQ4;uM{)i@vJ`!QUNx?4-o^cL&Xd^&`Fn|b70Y0@F0I8@8Sfll>x;O zbetAyA_F5Ycr+hebHc^IekQX12c<3aIWVw(RMQ}5DZ;`IO%7WB!$j>oB~i{Y1dGE% z5X6I?iX;MViNS1BfW)d9^qfhMIz|T2S`bhU1npP@mGPi;u%Ny;sP)gp%%ln1t;4~= z9SO?AAYCB!Fg7Ev9wcT2>`nD7;Qb2lY8%jKEle%gykKq}5twUGY3N8a$aDmTv_24g z@LDa{E?B63A^56k(7HEdwb3nu{0&v4j#Iha~8(O0exP)4;Qlh_)?44%DMofX*GkMJ2_N+zJsj zkmS&V#4>~rCP86@t`}q@w!RdWl)x(~4(We_^x(rLDEHcj;9|-cy&kYj;qq`E zTKNbO2hUPrs%7MrP_~BTCI^In`PjV;KsifK6SOuFmYY#^!$e^;Sk~6U7QC(qVkeXY zl|aaQ`4$vgI1J#s7vSPpVp&!UODv06VCn_AhaGKvCu=h387}=smq zPXkI_8d9OCaZP6b7~D2DFG&E=u>1+1?+b?XX+UzI+=_57X#GDU0|UPY>}GHQNnvc` zSs+~?-6$oAvIB=7ddncxkii6H91}$cxJ-eHAdS{RMHm z6A{G8IN%j93XBXk=8Rb8Adq!iL2va!76Y;Eu(<|gTPWI&WRMs!Sl9+WpAIsg8dwN^ ziXCEX2X3yW75eBNuLSD2B;@o!V%&~Z4bE_YtW-4@B6$8E+^ty6hsZ)!(;!IDXcI&R zJTs3u?ggZYN|@~u;Po+(JK12a z0n?!ShGBL?Y0#a?7-M#zJB6Y0V0{dH;Qh(qxiI(&3Q=K@ z=^-TrN_CL=0k981a*&chl*8Hr<{r3cs33zi@{WJ79*Cb&Ni)c9Llk)v^z~g>ZxsgL z_9|jyDhiHWsHtF;mh8qTGb2zrgdLz;pg0WKVXj8VBlfBw#6T<|4oSoqIe2~&I@^UX z6FbWSW!DjQH6)56)|?=XMhinv7eLJiAd^wg2?DLuLoE+LYOrCH(}&>q*oMOL2q;ug zFvMnY8!2mCWhgdVaEL)e7ar2cYpuY04bb&LY=?=0cAdcWN!3kuV;Z2HkE5cBz$u33PoLc;1vl z($kGW53!CPJadW&6&vW>20{e7P6#|^2ik)NI-##X09NyZb_2ua|3K$*^;+hKa&hZMG3Mrtla)g9W6qmFE_`Fi&-3AcbVRi|}2Y^hF=2B7s zn*hG;D-gUVSj~ZhLo6J$0~orl-x;(Y8hnzJrZjZrl`i3qB#$l*0jZ!?P504hYPaisDKKpPvffXKV}F_W(LY2+8l@GggzikoUU>X)1_I z%Y*g@_#<)wFL)m_csH{F2V#E!FKH2 znVnNcO`Jp1SB8^anH|=mf!EjIa*vT6v~~|{hPi|Tc!ex@y*H!;0F@iuu3%ZvIdkAr z3natgSp+UkP}lFk%1lrxhjp#IDY&lHloUXo0fnfvWVeIX-$s!2)#9MLEkP|g@O(0~ zW&)jcA;B);0KPes0jo;TU6XKkN}{ZoHwp!djEgoFhOi8z@8boRG|vLN`J z4R3ao^#ijOLc$JpoWP5LZCfDRW4QgW92nSl5=JsE6nxOe&+* zvq)hCN_Qx-sP#Y8Y~)o_a2J@Otr`K>=HU7ty%vYJ2f%uj!FD226T}V#AIt))L{D`P zmEe635Hk=d9>Rx{FqP~OzaiECFc}6$(0&1EO95n?khr8NXg4-!XC;Ww$Y9FB9n8eQ zAPl+b7$U~VV5O<2splyvZlz!aK7SA`=R?egu5_~#2JHj@seqJJkUS4wcMNTJh$wT0 zb1JigPBenAh&EzZW{;JLWmjhR)`Xs40x=c577O8Lh>Jk0@IdF!8zR=_Kv$8uF_`IC zf=3j=`-Z^b3JW1{se&H9;1rLVhG8)e**y*-MGY{|!nL!2-^mMhsWE!L1GFpN)C|0* z0VStH#~vU)fsw|L)*;v=sF;)&co#U-^+>S>l}D%r?OuZV6kNt3WQb$IMo3Wd0r(zx zwET~}5)*cZAZQmkD2z}}NkTevz#euU0>~|V|(Z0oG7QCHwW!yM{%=pJt&NUs`{Tfi)^d1x(g=&jcrk~&rj zR-TgLdYXE$6DH8pCn(eyz^AJjc(Z$(BJYw$*b8QXRPsx(OK5`YJAS18KS&0&uYlc} z18wan*jp2b19CM7hq#lolcoT;M*vzKY^7=CDXC+nsmZ|&8|4F=3epA2 z=L`%?GTa;%$_qHaZGC9p0pxd>3MH-rq&-29nL-y14rpElsf1t#O>S5#l7WFil}no4 zfIQ(%|IC#3RL}&q=|Fpl*#s06`~%`O#W_^K zt-N^f$``CEVeLT%Hs(MM4#b)10_<4lCVV+i`XV5=@p5oTXBKO6aKK#-Hq#$vjW*Q% z9MYgOA*G6;tw=TtSPMEL3Eb)gwP8VKf=xgP4TMNI(0 zS!oUjaLZJgJpyDS$Q-a;$o7)K7M9M0_KFauDT3F+V}>M`v^c0`jdVi;GiY5u#{OXo zY1F;Ppq&Sh5QdT~!=VJ3mjrgH$V@r3UoU?LhT5wEl;Ubt2XOny{K2RSaYcXr(=(_JoZsL1n;U1=>RmU5Agf-`omq%*z@! z$_~*3Ki?G;hS2e8aCn0GpwN_pwMoEpInde}yjL4!f&geVRRZKI5DytcRid`%Kp}*> z+W_3>(=_vh$1!M3+!S;Uq!)-~0XaDUnl>DknxIqWtw1wow%(xjvyOzage_+MZ^dB+ zZGnSq0r?LZgVG%XgG-zSuM}@GR}Qa~6bA&eEyye|2DK%0 ztl=kzfpR*MDskj}@E|!R1_lAd+G(f=1LzDd#113aIq+7Hkb;DU2)OSLJ_{2OMp#uc zF!EYSfqS>gp#79!S28d%@M(%NfX4s5k@t9DRmo@p%J*idz1C1@E<)Xb06wS38{-Td z(77<6lh>hkqxV7~In&kzdbTPkKA?RubI@sPUZBzzbYB3XUko<^;diLnpng0DoDK3P z>>MnJEug*c5D{KJUQtbOuN4xaSo{CroB~aig3yu{v98?>el7t*3^Wb_wI6ZjfH|z3 zfXaYv1nmiex*zEr2GH#hNUA_BVT8XycT2(YDVPSUgqMb(kb{lYgJn!5#X&888>CaT z1UV!aOwh_0uv!jq3tRy?cYxA7Xl4x>8z5JM>LLY6O=}KG*j)^u5Z45$6a}%Mq0Gl2 z$soaQtRTs5%x)$H&HuLc1`u@;999fwFgHO`HDsg!8q#3*fKL^Lh7ZVQ&?yk0cCszf z`EVHF0ksL<^TF)@qn?fh4KZ+7g4v+?Imn0^yCsJey98*b2s^l)uE@#G&MqMiy^R8? z41wiZ7U=l@JaB&jDc6Ht4>BVMdJ-g}?uV4o=>1g&b8f_0|BljJN|06ho`^FJi#a%; zyERqdr${njRmsM{pedcnrpckemIXTf9NOw)_U901@aKwW@PwX;2o}exQkR3nvp5y~ zv>P^NEn(1k{i@(r9mKb6nxK}MF5+ZLSSvFW)E0!@zQv#kY7v4&psh5>nK1$o5eJbV zdDJuLr9fvunsRU;jnxZ)MwO+oonZq$D+uftXxk3Tc1Ajb6Xq(=2|(&lmxDqHJpQi> zjU$M-FQ~-{X_cnIP6mRH|ED2Nz1M)WVnHTrN^?Q}n1EBC{U}FxE;&qUg*WeXkKpOuC>1AL5s|1HR#77WPlLK^8kp%~bDyXi9mj>Wo zJO>A)K0zvFIXJjwQ1UP|heO)`Xe)0Ja!b@E<_((iREp)sat4i>w2|Kj@N1O}-uBjpQKVm)_e8woK9z;D`2V^g5?GN*l zt(PX`Y!yg}4LbJ#G`bHuj}jsRA%!?3#RWMe5p6~W&?!aG*<+Yl40`Nlp&-AaoWu^2 z1)Two?WRqnS`%UqnAAZzZ4WZC4jQ+C)=XeEAX6c&EKqq5;eq@O8Dm1KZ>>PJ6u4GG zoQ(&o>mf5O5c6PS;5~bg^a3#zObTI~^TY_M%@C(nAWn010EGa=OfYF{iF)=4yzK%R zZ3L?kfUw~tylw*bUeLo@T+#tHwhPt`b|Lz_2TTU6QUP{Xrk6N4X2Br^I@1VRZ-M#X z+7nWjgIZl2k_?g@qMDNId>mH1uv*!k!wMwIAi-h959$YiZGq=DhzVdZw0a#X26idv zR3J&DabPocOAdQ*U2V@H$qs2Rz-|<>LZ1Hz>jtGeh#F)wA?p^*ps~aN9hn#8uwwUS zm*j9@2k+ezkx-UkXBX#o=45Br0p%G`y$>nNA-NW0A_F@&7Y}@d4^;)?ymydFC}ziU znu>r8au0{W48Cp#w4)pv<|6RXbkM$a=xQ#kDj94*eR6Q`))H~vkSFM*SaAPe93B(c zRYLcI9r#RczMg2fn3L326C z3R!)I){N z4TI$17@l|GBJdVCG|hp|835%xa9RSLs|CF+3(Q9iWzf8dBnO|SB)cew6|DUaIzbAY z?KO(M3{G5}3=9m=+##T;;1uAbpa~lPhs;)hZ34RqnZ+&% zKQ9DTj=_MNi`yJ>e<-NDfQ<9ya$w&53pyP?3fhu^lrL~H6x-S7>B!^qkoF7%=zK@$ zxiOG4>A|Dhpq4yjr>7YBoWgj}IIIBNOsp!wEldV~lvWBGgDHoSbBZHqy#(BC3~bD> z*$4p+X{7s^0->ifsv02LIcy9HNVgUs#3MK~8T`>ttTcePsA0Z?wB?ZR@8yN87}1E- z;NURTh}3}em>3vreZebLeAU6@%P66$%E93Y@f{K=AkCGGuq8>FgCBg`nFEKkJj|z{ zvHlPP4&+mkK&SUOfY-4|Ntt4}))a9nKh&q}pwox2>_HY#;gSZe=|XWQ%wDKoh~J4J z&84~0!F~aSD#DMZNPa;w6Ic5mYy!j$THqBjY~ZxS#$c`kU1t>lx`!b?K$n3*7&4Q@ z#ta&Zm*z_LeZ8ZL8t7iacJtmPZm;U2d(*00Jp$xc|mNrjTqs^pvxuA zA;6%7bOS)3j2gQq_|^+gW#4efDj+rR+>$ScCIe`00LhOG3=HuoD}^BbVguVA0iKls zk)@I)KiHgP&6Z zlLMU(CoX_`GpI4>WJ$zWIYc*{v`3wLg@`+#mRt}w!Bm<+S~cJ@8gzFQxW*HP%q2kT z1v99bSXDx70Iw@Ru9YF7Bk5`F2=Axx^I1r8ShGuLf>vIG+l>&tApc;Q3$cQowFFTG zB|&#HLfnr;vLl!GsN!%Qto(=3sPo>SaZp&3xw1=EM2d*(u z>Uz*QHYn%+LGHSNh6-x?A9PwDYJ7sy0{ZDgVB0}wB7)-w%tLh<={zBD8xN!pDK;1w zLAM8>o%I7!gKCYjUxVEZb*Tch&4nz+poe)wHUlG6rI03A2e^;M z$Y2IZi2_z&9iaX{=yV>?tOp|lR+TV&Y$3C7P**VUiAcc4;6bZB~f=c!20x{y9PC(`4Y)ya4v+WQ1HGD zDN$2MjDgK#U=;8I%`zf|Jw)6NbPg6Igg`z5-R}XSK_}+G(-v$+74!rokUXTni{t`` zXK=-_0#9G2`7?4Yq5(D=U*X#NOhG6U-P zKgdPkF&m81hk+pm-2R`>4!r>kmfj)pjG-QC5~z;^Q2|{E1s2!AJlT%H0<`j98SXBy zIsqFF4vsuoNST6_#JX}Ew9*;TzJs=R;3~nZ=D}mMNNT`m*l5CTw}Q4ev8sf&GF|+kXe$!z1`Tk( z1j(IX+c`K?!Lm?s)Vq%%twmn&O}hvZy3Z8qDv({_aN9wxYz~z91h6f(o}h7b=xxG~ z^-dh%-jWFX9$v6ra-JL<5#SY5Q1?LYy4BVI+pdAK(#e5Cno9|_MK3PRr39Jr0GkGL z6(}U7IS{tP#G$bXb|EQjCFos~Y!;g0pmBGQUb#@vjExd61NgjB4o^r=3*>9a+zW(6 z+hzpvl1@9iYpg$>GZk>Ni7fh69~%3i3-l zgC>WPvl3_y2bz9VH9a{nd?cWeiEKNlE(hgCD-L$($)6w|81qY+a)V|#gyTW$gHiJ? zjK?dX44QLQ(2UWBnZ&4U2tErG#s{?4+37urHth*1F(4nr($Ww6~a^U0&p%WSYI z(E1259mfyWKm_q3P`A!A&)>YFbZJo z5N2THg`P5r?hYMEr1RszriozN6%IP*P*NN|ri*S08GH#2D~Mk}y%$)k0u~tnGjF6oOhag2M__|AT!Co_zp~--2ftz~;m4gSXKzYG71# z(Ecf?#RyGn;L~EkE4M@>!RNC=YIQg0xVZ#}rLu%FD0PEc49I=}%?u#-2Ec9vweP?o z0p>wx=W;nX5VK|A8GR-O22dLpGy)1$11`CsB@2iR%FQ4ec_kl$4>BF30#*uOYZVJY z;*5;=2APfrLr1q!RhTJ*TT`gEVO5E$kA^%=do1OjnK?Y(QQb;BPXw~Z3F2}gWkjzF zA_69Dv4jTkHegpNK&;D+DEA|Z3yfglXv>G#t1e;%O}!xh^0C{4+tu)SL-1HTl4=G< z2G~u=AoXx8tOqGWVD_Q&K{G~3`?@3)pt~HP=ELm++YU8V80Ab=tSXJbIUTB=fe%`G zK;p~3&7+5;4vK#52OYp4`PF95q9v1C72CgA;c>+13Zt2A}Wk! z7d(Rm`gpB5q~*g0HWg$W2%A9KRG^j*qFjQiWMn{AYX?4$i%$x9^c`dZCN@L28Dw%O zWR3#aL`DWXNSjlD4|x~A2ulARq!)BQGuU<^UJTm}ywG|;W)L%>`k<~e2ZxX?>bYEI zU^9)RAS2LFm5>!-=BRxwh&%b%q3b3gW{aTkAYx$B4SqHg)J$-AqK673C?p{XjF+gQZ(Z)Xnz_9^04XP>>9FwSLr}2Wt&{cwb#491f z$cvQ5p|&%E#1ZNt?nG9{z-SIL(+tV|LP&l$f~9e=nMP7V42;P6Ll_+IsAhsxn!6#V zV$i-3kUJR|%^4Ylz+)UxeO-W_sTn=F)k1;@I0NEHEIAAxHLdq5} zDFeT;6gCp<3|=K4Db2wP6Jcf(;NSqA6C{N?uAd1yp9OS}EokjE*feG~263<&4h~;M z_-;rkX)X;0e(=6tO%7@JxP~c5O0Yj@yw=%Y6Mi?9yfkRFL?m=%7hLLrRt2dt%OR}- z2iuheR>{o9z%L>O9vcRYC3}KL^g*MxDEkLMeg}{Bg4BRUtl1bmIsC!5n)%B3vcr8U z5B3q7?GPWaBe|S`fh|+olz|}~u}1{c+4nQ@SvsbH6YV?>Kf+5o&y7aSwdxZ~&G5R>s`*94Em!^ZD*xun_QDq-^>ATyo8 zW9nRp*#7Pf$FvgI3$Kb0|Y%Sr@eCiCx;6jhzE=@)0}qR%>>oyXY7~ zKq^7&u{7ba#>{5Gp~)7;#vmn?%#|($OCc#-5%BQwg{}Ar1?^4&?LE*y+W!#3B`wU$ ztC1#cDkY@>O`lAm9O4X`+?hO5yi&YUJc^JyJcmn#U04&eCP|Yc2wZDplmMWyRu0Jc zCTQglw-jPzpAodi5V@=Xvq58%kdgp$&KP75FJyHNvgx3ezeqc-KqD-WIb_r|@WPTD zjJ%=@d?@p)e6YO&$ZDZ%Ne&ZnN!UHMATeG`@LandVuz@JB!?*CK(oN$wb&Mt$g}XE{k|OFab0lefa*m_j%a9z zg2D=7D%3~tb>(1DknP}GgrMh2fKA|oxYGjp#0b#sj-WaivPuN37gV})NFv1^!VJ*8 zXGnV&A#?qqATv3i3aAZz0%~ zpj$&h`|Kbo2for6q*4>KA{umV6Kwp_jl&WV8?bn0m*fD=>x1+gT0q9YKxfU^fKO=z ziNbf2g3J^KoiYT%;F=G-$`{l=66CN1?;i%Y1sE80z$a*!N_ryO&dA{9DQT()SyKje zJEN&2cs&%@9{BtXXfFx)91aeUerOxeQxY@-0oqf~&c_a0k>LhPYoPObKp1AGj-+rj zy99i{9VC`Or&>a7;ee+GaO$v!`4rk3w&Cysi(83UIeNoFUR=`CO4E|VM$-^yB3i4ZGrp=UZZFr=?RHfc*;i31CSMfj*=Y4?2;UA?A{KN>=Ll`g5VQu zA*Anu-eQ+v2gipaD5o2P);@t^37U57I3z(UH^Cy3@LUbrw_pX{5n%&$ z4Fa4qfcAMn_dnQhfX@_w+60*c zwd0VqMPAtt3U@{Z8xDJ6(7AkinpO(1)ZoQo16t{0E1_)3;U*3}y+A~ggAud?nZt@5 z5%QuOlAyIhP|kPGfYwhE(%|xEum!i{85r1Pr8z>Sz^mg! zr9tN@f^;$Pa!4nDbb(qk0kIM~5$P0%U} z*eN%*ATvEVG<`FrHQCvH<3Q%KF{^N}3rIWr8^G6qGqb^M2d~9e0I#tDxypirBZ`?# zgo7g))>;LrL|bVC@sXo4V$}-dHd>JFh;u!m=TL@8bFe%5JNs*znu191*+(EV6Ckkx zCPC{t7(ng}1-Sv_I~j1x71U-GPy&Z}AeXc!e6>EvOwc-XPl(?kXU>RlNGHT=YHB7! z+wow(J4-t-*n)QhuuIGMLgI@dltVhsUlY_~R^s5$^oRH~7_vWDnnQ{m>T+f_1`!VF zL=_GP-k``JDPE}{$Qd!I(w+>wzB0ZJ92}sQG(XtQA{^4PZ01rRl0y@=f<9Q9gP#{{ zJ7_m8bPq8*hjbd)*U;598X*75OAB*wBy&k~7_j?uNee?lNs}X4)>oK=!#`Y!!;{?? z+%lF!(W}G`vE70rSr(LLz^D2sK;17Z%^_l|mFdgN%NxigW)8W>Oq?TyS&KuQA&^;( zgB|8m8EFnF@cMm7c!EVRGx!Wqd1(hJUTC{K6}0w0#o1p$Q^DWaALMdyKh~Ey zf`eDn-&uvj)DyZ(0~GQc(lY)Wn#zcfx8P6;3z7o4Hl4$iR|6jMpiqK_3Fr(WW+ny; z4nw5U9NH!@<#6DJgc`Fy2Pn;fdIgZ2i$WTJ>NaTp2G^jVb3_d_p>>Ob6?kqEszXYW zLxcgeLKu{zL1%$jLeJ0R^F%t^CKPlIDfGsAaEk)6&j4KWNP$|CP}3MJLF;5VBts=Q zY&_wuNKgwBR_1|du$!znB*7=VOLAC(_Qpb5INIMH4R!bZvd_vyJvOd2|;^4mK>IjHn2U(Af2FHAD+gb z^Ufh_qCvM}>sV`o&%xAm^R$7SY059jAt5EnVFGShTfxrp2k(NE0Jpx}IBdXngIvSM zV9#MqdY1kwMO1g)M%^f)1N0iYh7rlbQOxZP(6$*mwW8LU8irgbDWL1!<4d<(ke97Kcq z%U~MhCQx4u*>-U01KRrnifb!PD^MR1;!lv7u+{#cSO@pnKv4k#8twu5>ecHmQQp?(6b3qwB98Qca2pVtK1X8_7y?9l$d2&h~J?JBot2g!Sb z%X2AX?QVKM;Wys-W3Sxol z7j{MtNhx~{D`imoA8fxc*i1-hfJso?founr@{pL9g!Fnrwu82PWf7;)FvCxbF_7kx=4G&uc2?pLW{-l7qlI`UBvxZ8lBV$SxZ*$ae53FIXk0mBYrs0J2>~nO#jrnu9}FO-2oL3Vot9hd6ls zJ*f1QHsIihfci)p`4oNd$u?j!Wu(Q~9i+K@*`dAzg`1SEr!=TlCm;>os{jfm@a_UB z*a~I?mSbQCofr#R#~+{sJyXb*Lz>GMe8LZCzbzZ|oF$N64H;ik4hP>PX%2RF z(3*RYnZ?lX)a3A$ft<*s!ok7e4|NYLCG&&KWarS-;7XQ~l1c}M7^sH^njZkgDL9XS zdp;mDQ$S{d(h{f_0Xpvp9P(^j(hTez{)mwG1g940oC7#CAfdz&1fO4GX9t}z1+tx! zfk9K!L4utfcAf{Q#i*>wk;4@u&cUF`!O0baG;Rl~(Lp^vP>I3^*};ZXmx4ywpnV8v zUWd%|F)=Xc_;7H9f=?F#%a}MABW4g8_#iz614&`<={=yDT*^ojJQfWuf$XICctJI= z7l;PUsdGqjSXqEhW&@4?^MU#T42+<v5KpnZkVIskGKkR%7n-dG06 z$v5C~8q}VI&qnJR7=cb$fvoChumi941eMN`{NC)|3X&Y)HUFTs0HC^-1GxvAojs^U!vLwTz! zj#_wKW(cmUL3OYtyEhnucGrRY4vKdPUeHJm3F_5@+W(HAzA$v`LkAS^e7vC3BqZ1kL8qlLFxpCjM*1Ns9ZZ7yt4184(FagF z9PCQyjD(~(Xy()2)6HB$++M&9+^PqqB?(>$4triu>1PNXX8`AaP(KXZBLbNSo^t~C z{~@s~0WJGMWB+{Yu#pDHEiXnKU~{BExeVO?2Zx=crz8g>qK^kE;TgcTvrB4CA8#)guErV%(3Ed)0EVdfX)A5dzrl{5vF9rhfW;@r$m9HATvSX%U;7_tWMJ(d8E zf57s(4~{c|3^=$Ir*N=?$`?>;7d%!EZvTQ>G@!G2z-=4`1~%{sD?wb+&{13lhID3W z@E9Z;^7y}jFlb#1Wc**i0mNotU{C|A3pf?6zE$ZI|zd^ z=ip$2jsGhn;sWe8uu71RK%>8~Q*glU7ZK)=W=_%6R8ZnlQP5O?oPwhjAT8{v1G3!_ zF$(PfZj(a84P-tj7E)ZLH5nA7BmF_+|B=v{0+33iJ^`qw#lVmPavM9yOpsov-$Oz1 z4t60l^g#Q##ayK|MKt5VCV*~v0PmKyU^|3mIumW!P%4 za8>XbKcI7@RJo!QI70oMl{ieH^C@yN((Itr=!-o5@4yb~bFgc2L^(@qvWr8~e-wCq z65Mvkx+0L@ont&XJRu{6nwp>%y14=eyAxL)hq$;T=u9xA`X83dSwJ-vgC)4M1(mO$ z(g1>?lq5~Ym3?M%n!&=a=waS{H z`rpe_lEYra5OO~+_-s@O1_=&9@F_Sp@cJLzKY*riSa?`L>wj+s2@Y@A_&+$_AwHCZ z?%xIV6d_~hk{sarAJj?$`G^CQGC`wypfPrcJFP%wprD(G!QlyN|AW>ApoF|Pa{C_^o*bZ518N;gfZA5zxC8aTyf`Ec zz$5YO;64R7Hcd1QIRrJW7&yc|xSWvs{}4BWNYFT8o`Qm=f+x2#D5pcjxVgY*h=I+9 z_x%}!JSD}A7#MW8Ghr%0s$m$`0tfTKZ94E>bWk%uZU*&xK_v#528)ANv~WmDf%^Y~ z7Lc?7Q|S%9hY+q7+y`a^&G3MF>|ouXSOBj=6N%TK;sMij0{2wkURxe4K~vn z)Taf_^nmn&b0B*EADpYDKq<@~G)@9;1%mX0+S!b#J_nT#puR46z6x{~A2>Hd)2kQA zouKwL)Fv}c@G3TJe1a`_$2vG4KtdGMmiGd$g8`3;Lv%yJ0W?nlPKA(C60|R0 zl-J8bl$X!kN(wZt08X!<{=bwJXtq)cI#U2TC6@toQVu9Jf-uNG;JFC_NpVq6rYM}U0+y0t-)LlS-h6G#PU1_PQi;qH{=5H&Xg-RWS!2O22?@7f3De|ymA zhZMNo4puA4;l?Wp8h;1ffejV`hYx6cg~L+Qk^|QM2cT!tL@`ZwC z+9Wt6l%ebYKr_U=lCW7lNSOc{?*RAzL3hM>!RlI&2s>y8KgjiN&>J}QI6(K(fkeO< zGI9el8yq{3`9E05L;C-spp}Q3;1MWD=>tEh4Ae6Lg|Z%pwT`5xAqR&hH&-492e_nQ zP~eu~WOo4F3E(K{;LTwIuFXNMH^^>(kUk_VF6jVk7l6Wn53Cv`pF47Ja3?Y`Fqlhn z7=rT^NIk?nHt?NOh*N#i!KdPAfJWj$?PqYy9JGQQeN8`jMLP!vuWkTnT{w7b7_304C!0c5))c${0D!xSNI3R?feV9KEa8pVgH1m8jh+SMQqZ3lwJ=^5Ci zoi)IH3XuE3CV1s?^}%Z~(a+zQ@BE)c)53^%OL< zWK=jTz#$LXo8b%Zr+`xk$V|A1G<=1aCWkL*W(nNGV%LPO{{i*UKsNw@TnKhED2_nu z=Gmk;G}$8MKq(yDQvmM}0Nru`F&WbSX8_L+D1b)yLH(L|P+Wj)2habY>=R(n9 zN|@O|wkJ6W7;t!-OX@IiaD&(XgT}x>B@71#cN(_{J7mrqT&f{*J!t$7y5gUM16-1U z@-*n?Krg6D2p=?O2%4vd%)feZaCm0J*91dN(?PU$K{LUiaca!^pAWnS7BqGN9?1pQ z7@&Dih#9a|1JF7UwH5@|z#w&&pflMuK{c)oK|C+;YAjIQYbFj^kpdEhnu&4>4ygWT1mBZj1z8~hvI!Ip z@O~I<6*{O!7xDzJ5e2PE0I37jLZJHJ!4hfwAJnS1LhcoT(-U~z188kNhol2!tpmtK zpjzFKLs9@lyTR^=V3!1~p0NP87&IlJw_br%z|s-e%^>>~K<$4~WlLc@&}ogDkai>J zL><`pADj%1+D)XL1Kti&aila(IDNRwfOv!9ESWLcYxC*NEBqYDQF!WC~d*o zQ{EgVo|61}pfJ|-*1=!@OW3lDbEmm@a)A22kh)uegPl>zi^EFTi^GONnS&EO$Aaty zw>dzi1Pnt$2r(uAT1gEm16;&8z&lewY$g#7a5{sig^dWa5q8UWc3?yEyx33UnBjnFlXpw%ak z9tda+2nXcsU`fdC0+4AOlD39$-LNtd+NVIb9kX8zYO5o3gUS+!nP9(z`obU=LNL@! z&>l|EXgo-r0cfp`5M+J>6fO{Vf<}KpvXB#%K`h9wBN0&F80=O}6G)k&DXAO{i&-gq zXpJGkVI=|^b+G4IW(%!RGKeK*s4I@n*##0UDX&ux7W`G+~#3ob1Fd$qwH6!69jC z#18TaNUa11=ypmg$Qnyc#EK|JDHG7X8AnM^NGS*EMM^Muc}j@baF{T_?oeUWl+*<8 z>EjURu$Qs|hX!rDK~Y@k*v z(uw=h;1%y|%xbXvoj9aZm4r<>lp@&}1jMDYKx50G7C5M71)6;Twd+9c0k^9m?KH?; zt`Ih;9f&?&4QheALdUK_>v15qL&vVAIZPFNGvRk4aY!?RT7c34s_eYN(p({+_9Vzm zP&k0c|B-wITLS`aNkYU?*Oo)p>N7z74qmSgG6&gA2GELqsO=UU7T{Zt!F#G1ETj`* zW`g|=Jp~`)cXkfxBxw#$5w@@t(E3lv9_9dP_E6Y94lda3Vc_w9$T|893>MJd2WV7Z zL0TSsQ*%HBa%}Q~`WF!#(7TC2ZD36c4(UuS26GD~F4+BJpm>iE0qrpct%_HL?3e(V z3EB(54%TZ9bEiM(Y<^f97!pU|_=*69zX7zJ&kPz@2d&uwotF;||16N-gSb+_sR%3r zZ~rTR+y9yh@y_uIn&PPK|6~OP&3JX#ehLMSpa6em5pYjR2X^-{XapXSlA-N?1<+VM zI36K(fozA(%ZPEn=6678Pk|$y%ioqAw5ANC9_&sw8EFF@(EWG<;_Phlh>%ZF_hnGv z(2$X4H{bxT6k}ium*z0wkmeE-V6au?lIHLP&oP1KKA3EEK%;It931(OnqEQD!BW93 zl+Tt!yeN~KLjY2CqLR>a%XoQtWO;ab!K+3)?J9efujBZClh zL`FyfGP?;eO;16H0lFuTmyZ|HW`mr2W(HY913%jjq!OgZN?Z>a$+1K1Jq1g_?SA#^#ZnN0#tGOB zAXmawLP86s7GahIEaYs#Eo=_>y`K=>Fu$XmdS|9!WeYnMLkQ-75DjSwFfa&O|{-L{EedwwF}IN`X%Seu9Vt zBxE6e7dGHwW)ju}kE4U`1c(s<_1hU4+{_t;L16`MyQ9nkK>Gg>cR@&)8W;@{MP@^4 zeNZa_Br}RfLtr!n25$(!axQfK9-8+NqR1|XiDDCj=m)oH;PpO8Jw#-b91Vfd5E$4H zfYr#LTnS@Cax$t2Di5SW*qn)(iQN&=YGGht;7N61U=RkiCehCn1L+_RgU>BPGL?~m z5#y{ph)J;aBZP;K#5maw)qEI_7d)LaNUelS1YQiX?fb14$1g}nm^lQPkgU5|A-0le)3xVG~!T{bK0UCz~>y}^# z_4F7S;49t0VF8_eK-yu2JP!hv<%R9NfQ+Xg%R|-|f^JEJx*F_1ur3BhDbY{~O&i!v z-H`AC%_NAx#-2g5d0@YTbirr2U}l2OlmwXs@imAA@wpvj7Dz-A>AqV~2t!H*6f==` zcYy3bV5D6g81t}TRYKsD2pYWr?_L6nf%fniiZJrp=z!9RC1lJRBm-K_1fpSnWMBlX z8Ul^`DTQu*1RIpof*h>M+r|M5lIe4;S>*-oXolSk1SuVmS_l@B;-Gn8(AfVJ0myg(BZD|cPCz_|r+7RUx3~g$uAPB_ zi3>JQ0Gbm7xdT)(Kt?+uBxo!bG{OlwYcd72mk}~r3nN28)m>8**2$rY2;) zI>;_z4i#oL1|9f{An=(&;FUtqIT7&Mk|3DvQjY8);C&E?(BR;Zj?)lefbN3;&1gu0 z&dCAW4xO72Fm+@D`CZ39QiC6+5^g2~FMBb}Obdu##6#I+eBmnDrK-r+RPvG0fU@9S}PQ`<2UrqlkX>rJ&2nA3IWME(jgyl}8ReX#( zlI)BYlEMrk+*w5ou)Gb*xd_a_!JX>j$zclKhb01S0XTAS@PSG>Pf76k3DC9&{8T$V z_^2mnUfm5cUM&S*^~}KN2%2*RtyTe*b+8f%v5FI3uLy|pMspaN+jH3ST5?!R!CNWd z@pmNiASE1VO*{xgcu>*?d}0gu93iL(ybeUI|2aT2wtC7Eknwu3T0Za!5ZIlKkh%;S zGN^hrB~8r?B+S7h^1O&u4dAngL_qh@T0-Z_!L>Rss9pip|A-Yhpq0uXU)v$=UI5n& z44_*dB|*2zgJ+?Q*ey9g=O#+nf@&gYy=u$H3%Qw+4^%Tj>oL$i0z+ZMDKcQ!gX&!l zNht{q8_0e#aQhTu4~PWKr9;h>vQ)6-0I%W%nFqp<773_c1f49R3EI^Maxr4>og|X& zLL8F(k{n*1lEO%4BCQ7ix1PXtnH7g2XlEK|XB)yyaOi`=1ng=E54NV29Zej%W&+wS zgZYS;4}3o=$XC!9V_@V5tpRuAFk$e5uf_nog9CiqG}MovwacKj0HFIeLGc7@nSj

&l@u3(wgW&d1W+5s-a(R`PuyEv(!q_xUJ91J?Kvc&dpcmcK{VKf z$o0RJB!@R>Edsk0hahO)3+yA1O7Iyb;4p*o7{GhkK`Xz75vdmJMrbU7*^tn4l;jXp z&{W9d;?{)aa{*1KOwhRtO3qH=pq)WxkX1np3=EJq0H}ll`Nl@XlVeJvM<@qqr8K0U zXDaEy2%4SH0q@yx1l9AP76XU|>4KF|ATdN52i;xP=; zL2LP?Kr6dIJHQcP13H@)WFw;kVx=JXL>OKp(2fGo*)34l>2ZMerh`ln1+4{wm?{80 z9{_ZQ5Ohr;#O)@aH71&%QWz4-CZIjdp*9?LpcUg#m0){7?gFp21g~TRn+jT42QDk6 zU@I`eH|&8zf`d^3REmJ}hOi!J-vMYp5oi?~)J#TUD}G516Hidf*b3%O==lN=mw`?n z0{IwppDn0QA;DpVFw+(s#txub0?Y!thmY5d!;n|hLINrd_7TiXb_os}O+BdXU>||j z0D<$71Y}*khy=T#g9N(?cwdbbv|X*IX{Z1?f73)nf&+9q2KcNYun$45Gy|2k?2t43 zg+f8+X&Q2PNl741^4l7IZHy0|SFU^wbkJhENV^S6^jKjtChwc4c(UsISDy5ci@oD0I;BZ_%JZAvvEnA3mdS3){{e3f^N2DU;vSzmHbdMH8nMrxKuPX z1=v7qw4f^EGr=p#K_RAzSk=$Kpu(lbAOKp)qX1ip6r>G0$0#aEl^4lONLay0DM%Og1ka7c3n!A@@inaRLl07`YCp!GJP z92}68>Run+aX} z1U-33fdT9zh%GP@{hng5IJ8FwW`piB2H$J}Z~udPAK){zK)rJxa4v?NQ{=&+06sBO z!j{1xPZl}P!}2~O1FMWQho+PgR{=Xaha|hVIB3KSv?GvPiXAjUfm91JD1dJN=0KDv z(7GB?$HC550gX0*YCn|n4RmG;LNBP+1eH<>lI-9!(?NEzgU(MuxD0e&AoRpUkV?=x zZ}6!wqEeuiAoMI}5%{`WTN`-E=MCC%J5DLKjh%U!D?Xm>3N`iW3XBs-tR)L{~@-6>Qfj7-4ZNr1sW67 zw9+)wgxCK9mY{Jhb4hk^yBMSzbjv18KRYOvVQmUf=zvdOWS0Q9H$b5TI=jyjv@2Ew zsZAjOTA>5FOW8_6Pg4-K${FlFMg`C*sfG$RupSk=q&Vn)29P~yK4Lf11f9(d?RzOm zic2U<2wQI`EycpEm2DMnBD~J&z=^#@eHh}B~+W-rDFbx(3-$DTmeUK>F z?|d9qkoCV(4B|fKpt>4TyP}i?o}j*w1n2}1(47zB9Lh}0Oi~=+^JYOKf}k>mgM%A1 zuK@1dfyBUNCKtB?xK#koE#NjBJNTp)uz!TaLA!gvF$U&?+~_543CdTR;2wpzBxLkb z0dztM+})u5C0soy6rn4gK|5?fzJg=WYI4w+gctan(P$3P>MAoZ8)OqWj6l6A)IK~1 z*k*8x5w^Yx+!tn-1oumj^S=aWB$gfAmxsFtblyGa{CfBa_6#N*k`9cXlIEfug5b61 z5WC^I4eVNQ4_ZKw1G4iTJPt2z1L=th8*)g3$0EQsgUS-ndO=YB1Dz5eg4F*9^$^TK z=ca-8`9pMrW)3(c1-w9MO99mW2lu4m`QMuze4Y#_6hJu<>=sGzj11V%42;U4)8_?2 zr%!>*17YxZJS;9G5PfyfsiUDnp5Rlw6ky}q5}=kkxDSrh|7QS=uvmf2;*bQL6a@)8 zUeG>wE6|>FgqaW-=q?+u|G^?4vltmbJFGyf_`zWZ@t-E>Oib`j5wMRyBQT=i{=XN8 zBrNP9yBk8GyCR@*Zx22#AsTdADfqNyaK2=h6t@ST_0Py)2s+yn(&v_v^aP#A!w0fa z6M7aEB-}u{K_dXrm5~zQG6NP;&=WWrK>H}bDG$_NhptOBV+Z&2K_+roLB&9$8<24a zsBghOM=}j;C)k~kG69q#pe%3- zNb&JUgYq`)>;$lVAeErf0F=wD7{DbO*j{iM2RgS*N|e`2*pS_rUBVIU7O*Z**(C}} zjgYfI!L2srwzfZ5ge?G4LcmE)a2u8Ze0DzM40U*G7qn_S3fxOj1+{`HeA0 z!r;~os6`ndX0D*%AE3e^uHYY#!m9wf0YE?;yjI;5JhILpg1Q5kje!AnvOC08pwU?d zHqbl++!pYtxw8C_aCq`cbBP&nh_Hc9;z68~1RLiDg);{SbVenJO9>Q)%%Jlwp=N?_ zUQ+_ycmQg#LRIpD_oRZ(@0Zi$kb>Pp6)4WZp~966+W+bdvz?to3DlPYx4|_TU}l2v zZ2-+ba7ZJ<8Mc=ql1%|&COE7hH?kq^eunOE0Ijb_^r$R2G}!{AL!qGr_7QkYT>;b! zRO8Tuq$>tCMev!hV7;J`du7m00uk`-a=h&9N{T@o98%B|fZ)3>K>KJlAiE7f^9)&_ znFE-eOS&|DCtFUSBoTUL!-Sw}k4SD9VeH#`ue64dX3 zr3Ww@9Pgn1gg6H~TN-Gl1#-p`*j{#BXD3ZfP)Px~{eyuQlA}2!*$u(H0&Xlb08$(U zAfK8?aY>u9bNDj5fOh}ba%Xb$f=&*$6qe%PPU2>VjTnMj2B3L;aN7t{A}~lOOK?ak zfXB;VYq`NK1*8%UQocg=WjRQKPTB*P-Qdy;elrPpoD^y%BX|bE%mKXT6d?v`C&5~U zU{O2J9XSG$9FVp5W>6Yj3WG-IpmhMm9?&Q~h=ptqs4jHlkPNkfoa+HL6I7Q9YU+7P z>R2fl!ds@GItk_@Xn80isbdYg=?io|Jgg3angA-_p{l?le7r{N-kOp+-XIcs$`GP; zVFfxD23r4vN2DAiIlQHi>VH#74oh}MQ%Pau`d=q4LjID_U`AZ7}I>wl!SEOageqy7hqM#lL2YGrMh0sR zYk1g0cj`f125KKNGI)m?g3gB01c$aQIHWa#(_5#1p(H9MswYoeBu*$AL@(>4ai% zIDqW}g%ET-L#U)UXyhGqvN>oU9aIL?>V)PMun73nQg6^0C1{=ib{Z78Z4M1-=-dc6 z#j`{F&%wbB?dywjh>LT}_=_2-`CkG$9*?BfT+kFe z`zHlE+ntd?P{a##Hl{6T211WRf*pL~JoH2W$Xp0)-#XY_a6cV%3J{nFUY!9cN5TD9 z$hsK@Mg~FfE@@C`!N>m%K&OI&Z#hGZ|C>X0Xj_BMlXV2O%fRU!6tWPEH2x1tY2dH` zpUng7t3z{eD7a4zDKii~1?2I61|tVh56OhX9$`BJr2P+SgM)f`Ff*a;f6#ma$SiOu zgKY-8$qF&10G2U>t_B0&rUw=QnZ*b?E5HC63m{R@xj|r^kh6tBp$F|_v4cjMyg@tf zLFzy@g6)CW2vWxgJ}224ytWNg%0OZTbQ&?}gi_GWlad^apq=-i-alL~C@n)>0-k}h z6K1rvw*Z~AV+N{K;H_mZQ%MKV>0sblR0nHF9*2e`)OJ`bL*&4&1jUsd2k6viaIYKW zJBT=lL^+`WW(Ml`KO={vfF7uR64%qz6M(k=L8;qZ6m&)fXm%RxO3?Vf6>Ro|BN}v? z9>@j^3@X1Zg+cc)fOfKTSb$CrWB{M91_?(n3Dac(vJVuJAh*H#5a3gOkXrQMHoFMy z=2CE*1>EA+z1VJP6Qkq(zlW0Kecpx((3>+Lm;9G+Ixq?7!kX^Qc%vzq{`vpL4RdC3#DN1{S zPod{E2i>^<9#aPIX9l+urMaX*_n$#jGP5xlaKy_*ad0qz+SkzA2OOojR5(mcl|U_4 zUN)#o4Gs==B`$x^Y87W`Ug-J%4$@rG!VI8ug@idYVJdwgr)r9GfXC&bW-@?pYXgnZ zb8vv?8$c-`h!=DlmIkjBuP(w&aF~d5B!hehie+%fgVu5>r739&fX`0l;DF4X=z`J! zhjb)#ZU7ug8XO$FLGse<3{s$3ALQ|I0S@qY-!Tz(uJ29lLeN=FkUG$gOW4Vl$fKin;1bskp^}$RiqG6cijP;++#25c0GDF$5*~C)2FOg% z9kh^{S~CThuh3P3>u7j63YCSmDKsTHgiJvrFW?arko$4h|DKYd_6a+ry$G_Mk3%xl z9u!C7pt2e|)@cr{l|ZM&z((~!=CVt2K*##P{$*tF0^M>PD#2g{8odOqL$o0PkC{>t&!WT3? z3snjBFDN{*kNg6#wOk`dG+1!2&g5b%=%A-6`Gf!xdht(65pE3-kX2CTpgkR(3Gb1hu2V?I*BFpnezl3|i#+Rv8l8mK-LqmV&UACaC_m5@z(2 zWCzvuAa{CmSbJJ2ONQDQ7;#7nfX+N(1hoq_tvEyx_auR9RyWX@hX!__@mtV}1PAE) zABdgM@Bx_!!a|PLpgtr-4&p{$Ne*kssZ^j9HtgVb8$yOMf>nXq?ru7EynMWN;$~8?`)VaQ_+X>546ytUx_JP$qS1>(60(yY$A|{_)KLL& z2@v z)D8vp3_)jzf%@xU6TrRhQ1HwmXpRgl2JQ)h`tr7Xh_z^rpwp5>IV>5Bc!gkQ>evW? zT7IA#PbAKw-vBxOF!I2A^tz!Vq zZJ23tXvSo5gKzBxr&2VNL3%+Yov1nJ#4bs86Al~5*r5Uk_@pi?5m4{i20VAj#9(XS z!{N!m#LNl00Sr|8fX5SpJUPVWnAyOiv1}aBRW7_LToIs?{6S-j4AN=P6DG|)K_i}^ zmMJrvrUi68jGVl*IOrT0P#Z@~TNl*oaRsfohO}$^xu7T8fW(o`c!9`*NDdBFSq&+6 z&^=?&6Jr=cA$Q<{?xzw5jRHgT8gOucTJ8!Qi1Aqt_$l$=HA~PI7GgzH5Zasss7)u$ z0l!xlU2qhx&9#lhp_4jhm(+u4{wCzOKQvj*_B)klz< zbHOI)g6=DWu6PHn>H(kI4?1-R+=d1D7q$W)A{)pBKB)#Y2LNgnf_w@Ze}}N4w(Ek! zFdZBh5M3bmRDgQ}ARmGI4dAu$Apa_Gh(Y@(YOuBOBA|17I84DeDL~Eig_s82VF8{; z0k3z`0QD!N*us55cNT+v#0Hsn0iEr`zy`WS7wk4$Q)zgQ4Sa_(0|P^ps}^`2JLu+U zwlL^AC1KG02q7FC4B%Dw5Zlc`r-^caS5JY?6ouK&0CJ}T*hiY+6NEsaA*;f{p()L! z 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�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 z%0A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%0D^e}DuhX4)d^L`#lyvbeP|S_075}S0>T+K zB+bVgsy&+KfFQ!w0Q#5fd+3-1Fd01>z@rT-;VkQ zJp>TVKQL=F_R#}qWbp}g^F~%^jQVyo1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON zU}S{={8T!~9vW`U*+%era}ZfDiC7>63MtqT0bnUcMsCc>NT_~@MHuoh{TLD;!$E7L zVFts`&qLS`+nf&C`2)3uksBe+02Tw;%YoRd2U?^6wG(Uulnq(|1yTt*0uadr&?*av z132LJGa?Tp!SsO5!b0$YR#!sZ#LdXb$cZI@v1p^45a`Gs(E1I~8Ya+M1oS1WpmWV2 z2d9A-LxIj`MR6N+Z4YRXHE1&r#u^`VM(`qQcIdWfuvP{}(C%)~!W0hhT4k_y&@vm) zvRTlYHIOPsW)@yv@OCQDY84iCRwne5en4jsfX?t@Ek}x&<(`144t&jRCC@gLnb7SRXa@Gl5snf)>w#Hb{e3 zTcOFbvND6Wd4W%wU}r;#0MHs8@X=0epp7cvvw~3NIhjC9Kf!AnL3>rehwY%64_czd z&d$ol!3|oB$-;}W#uT*tiH)5Xv@Dbfw7{N~jSYE?5NK5=8)$tw2k540un$2CC;6Dc z2U@bRgNi!PA}%&&R#pzs7BtW)av1p&vr=9f_9p~_CoVO7Ll_sg7ycaFAxJcg$uOs8ngn93$n+G1!WB>ALw#vP{{~dtH%U7 zL<-6OjGzV1pyi#QQ&2!_9Knl)*;!E!S>)yfT@Vi5eh#X~Kz7m(bAwhrgWL}deb8b! zWZR(|j6sXbz`=*U7lNCWl?k-C5wr{qw3(Y1ZHg6qS^+56fT9O<1Q*H_JU27w@DI=; zSkMwh$U;rj#g>eqeWkqYumh&pL2Dr4?&Aipssu?gfVK*O&UZx$eFg?@$jU!ZMXva9JHAPV~HfpELzc=p!Juawd0`k zMM2?%w#Jtc+%^Ce|KR9{o)Lm@4JR!ALHQJ%|52A%aDs9VXomx6oi8Z-P|OE~9%zjY zXc0ANCk1Fb1ajDb;tFIisMO&EogM^U4GFiM8+1AiXjwQ1c>g^pDI*vE4B*3K!JGd% zKs!A^q0G+2z|92OC;>mI5t1@M8*SNH(bi{zEdrGmEZ~F5I6>tcS_p80sy|TfUlj(7G8EX7El&IKYbQz6748XP^ApI zxgNZf7PJH!<@iU?7A#QWW&@p40!kh%=sWm9wI28sAZ9jRc3zA%-k|eALFaZcGl3R+ zv!NY81d3D8(tgkZE#Pe=pv^oe9SBa)@y2Y-;1dFvLCeUIPZ$8LzXcUMOdO!?&!Cf( zQ1cJ8@M7cS0iQAraz864s8tBslmu!CfWj3d1TX8ZR(DoV{|Igi7r4>I!U8@(2;2fd-Qf<}fz1r6zPR~7 zX9a*ZY@q08U}k0pZLnYmZBPg8_C(#`&&kRJs`f#70T#sT)A1B}>Mc-cS) zM1kUn4XNm4-~pXI1M0GX4iW*SWVHRMpzXb&9XO!lFTl|cK1u`B6#*4=VE2O>0N_|* z0qx&It-HVqxFGS*%gz952!JXpG#`Rg@iBvHNOpEsCgk=5ANXV^Py*nEwyr>Dm9wz0 z!`pv+p!5A$m>@$RJRG3@D*7HU4qp%*+Ei3I>!= z(ByeRJu=Wa5}=|SRIH-OgEWKAxL{-iM?d-!dCb51kAH4Zz=4i$;sI5( zppgXR&J#CiQza<=K|MNf4TBm|;QY_R!pp=5+rY}g&d34s1?Z>&Q11_<9@GE;pDvER zeG4QBI--glbOJv!7ihOHW&;JJ2)vDwjh&Z;8GN1+NC<>Ez}vGy@y`M}!;~Eo`=EXz zY(F8Wfruy(dH6tsAt>DokTJBxjJ!;siXXH=402F2dh;DrXM$2Js38D4jRU3m208!< zv_}QB$qTd+kx75+@MWx%&hG2auwnRMyTsKK?MOg9@tnpIYBOFN2rK#|3Fzv#~OPPEY|Y)kFOV;53Y1Vl2Z*6~lNofb0H{;I0cxdz zx(`U9#lr|XIDnmvg%czR+CGeGJ2?Kq=>v3%1n6{OUN&}6Ck`}XiKs_7IKh1{=!r@w z)`L%I0y&HwbnYrREhCC+s7g@EWd${pF>7v=1OQG2AlI-bKiELWCxJ@>jN|`7U0=}1FDQ$H8dazi{vXN(D`McSm$B_Cp30eR0E*rhq8mB5?oB7=x1bSVP|IMWrsAJ z(TAo$g9o7SW@BRlyABdZpske5%_A(8Nh8Slx_duaSGHX6v!Z2VLnic3be@;lzl-FjOGUp zHa2jv4%vYY%8RIO1D!q(+Mo+M*^M1MON7z@0uQc%QV7U+$Up;{eo&7dRCj~Ahame| zQM(_Y^OHd3HpqVP02ONUfSZ?%8FX+5D2IX$4@4>(z##@{*@3zZpqm9id%Stsc|oTP zvm%}71gc{|hd{BSM=aO~&)>U zV*Upl|HwTC25x3vwEL;RuAmjc2s%=kg$2}a18rhQ+x`to+n@mp*a1+WMlx#M1a4q~ zPCfviGY1;QLzQRX0Bu1A4UsUjfF=mgH^6g)t}_7b&;d37K(UA#zg&!dXR26(1=6LEAn+T{w0oP8MEp5d=!cNX=MKkb}-C0-uEk z(uRz=AV#pWGVyVO4(Y(y!VkKB406OQYRZQh!pF!79`*poJ!lq*8EFET6Lfbna(?urYZq21HX7Y!xTyMkL7b^Pv7SXe&Ed97aHzhoJck&@mG1 zn8%+pa4>)_X5isq;suw%sEsE+M$p+$pbi{#_yBcmodJC51L)jq&<1xs4mKnHk&$w5%r2x|U;yUoa>ub|0Y@PH=hQUYdB83{UI2-d3xn*uvn z3RJv!8tRP!$dCT!A7OZ2$*!01_K3D+_4!4>XsLHu?;jJ^&>va1$LVPQiAA z&d&l5sDUaTHg+a1(5yeGox=|5vA~-dpfe~yPJk{GfN6!%pbi-*>4UEi0M&)44OmcX z0u;C4gH&O9P-xJtN}z5dNEN80LzMm?2Qss>BR9DiK@*{fo(YOUwBUeGWo2cUef_;1A;3kkTI;B z(4|078z3zJs2Hg9XJtZ7U{H0mq4+>&IAR>-h{&sst~UIy$3&@s-SQEqVTGclsp5`3V1#l{96{|6n! z11_3S=D%QO(1ZpJi-CG)sEuxfRp9m&xZMWIe4vFIs8ti_)K*ZRoC%y0LG6Dud61_; zO>fZ1AuFh_fhrGbJb|hg&>Si#AG5Kc9+J-pN}r&L1yn|WYH_4y8v_Fa7c~As#Xo4| z2|eJzV>jUHo)xqN0CW~03k&F)6GST$beb*`=n6Pc{IjAo#lgVW%j^`KrLDE?th zC5S8}SU^Y2gT~K5r)QzN0i+Hzun!6eRwho!NIysrjJZHr9^^SDPEJm6{}jE11S_Kz z0UCb*g%4`3McBp(3Kh_;L7-L?sGEj5ItMzx6CAUk<{4;o5Up{<06KLAG`bI(*#@=4 zLDwuHOlM#Kjn9FmT|rYfpd<3ooA6-$Z0z7W6hISI?1*w3Yz!yp&~4DMx1c5%7EeH$ zub|0Wc1}=V6g&t8N&v8A$jt;fO$#&(#tb6h0%Q@5Ft|iy=Vim$ z`~!O$T*!fHFwis+ic2^lbM`EZe4vv&LH7`&%PT)lLA;f>6sXuTU1KrLAF&CW#m5;1U z*w#ifFo5qT<^^2=3+f1=6%gnKQI`*DUV(-#G3z~uJ>dKYj(!M%Ho6ZU-2;U^Blu8y z&{!hs2n;7={S~Nu292S>uB?O@4q90aSy00Unb~1yLqDMmWIuRP2vkIZvI%0)7Gwr! z{1@Ud(3&b#t3mRh@&_FKEZ}t=%;5Pq&{{&+Gz}wYc#;J)qRRw1Xc{9RKqUyM{0CbD zx*`o_@}C)0@`Kt(pg;iS6}09t*byLt2Xs3mBT~-~BnZKL42+;9Kp^{BnQ#;z5S7#? zLB0a5uf=6D2WV~(qzH=9rzRoM3tAk&&IB3(LR=gIF_8l_Fb~zs%FN7()YFA1fXIWE z27-?A#JGJNq#rct16lw8y4oB~Kj=(cPAKt4fUe!u{#J3)dljIuZZZU%?}+K7NP`azNm z+_3e(*jf)@6$3?pj-O*-fJ_5oT+WK*DC~#VF`%CNhtqdFJfP#}uvL5z`;ja{VItM0 zJa`Xxz;6twi4Gb0!eR(SD|8hYFQVm$;t+xyE)EVP#}ZUN$P{pJf(kl}vCl!~N*Xu^ zcI^bHaSkdy(9YK9-TF3>GHpm9PhLo7J73=3iCtye58tf1Z*X!aXz@$<0oC1Fo+fY!i) zR`DZ`eG%3+^i{y7FTtk=a&ivL22C0UBOeC`2kL|bR?9eG;ea|ihgB_o1wrn|GHHj+ z5%~QII-wnB_Y|9PgG7v|_yfBYoBtV^m_Y0DIS2(I9|s3FBO@pJ?Y&@gL5rL?xCt5o zQ%hYMbY(3g5tie1KL<|dqpW4X;&Mim!zQpO00j;=%5f3sittLJE5_s#7k>;8|D%qc zf|eh!va&KWK?9Kwyiy0l3ed(KMovy9(EdHN=^xOz2{>VJLXAMz%)tq|^NX300mOh^ zT7j;J5}D4J{I)p0q|@R6S^pp35=lI z`p{1_K$7PKU2cRCY;XlEENl#*OQzrg=nO8R z3JUq)nPHH_KvM{;Oc?zWi2Ff{zChhL^s@~Zct8t7L37*Sh-5`ud<TAF6D<&a2F<^+v*Ws6h=GBPosAC`|5!3N0|Nud?_dvr zw%22LpMil1G;#ylWddHkhp-vK;)G0Xg6{qWb??|P)&YU$v>;Z1=089;5kWM1hnt~G%yYF1g7^Hz%x{!71E&G&yEqjjG$RNX3!Qe=n6%I!4MWC z*MLaS-exAuq7J-hi-irePLQ3A1)>Q-LgJqtoc}@dcvSB{fH&SlZkYsSatsH6T+YG< z%7xh74~Zbq#nh0S&Jj+Bu)q-vbw8F39*m421(^PZXl7slFB)LNRxU$SfD0r}%y@yw z5<`L(uE1ttSung0E+0U{mf#D{pqynKR{kpa#?S3xNs)GYx`o-%_@`oYWqp!fxEPk=N~G29Q@3dqFF32xqk znh5C5A?SWaP!__-S1@BhCqm$keFg?d+m91>`w(UjP8#liaQtB^0~PC#CO)Wziz&~* z0O}WlOaVn8hDX?$nL%AdZf;ON6WjbOBwRVb{R>81$OsBLG+jvY z1eus!8VoH6|6{c88Mr|42l78C{xEy9;NlCkJ_1yYU>@xT*_{n;TCs!n>0vH%2W`Fr zl`o*iAE*fpavYLx!RCYIL7fLS7TCHQkTMWvWMTm=-v{MVaQgyuwJ~UgHWPF&CR9HQ zcm){f>uLz}?* zLG3s;jP@rJq~!{#`a$PVVD#@G>;FKfFM-TwVMCw30h!MN>Y0MKXtA+DYz4Utg2Da= z+mBs8X!$v4-77>jCJ9;@4hniq8HfmI`xh%a3ueBBNP}AUV2?w&7!){sLHQTdO#!tf z(Ze5PIp_opFwKGye$dnni2ycs&@l@rc7T1&0^S4wVWRagz*d8j4`_)L8w)%7`Y@Oj zmd9y4TvgG34<=r#?A^Z*bp|NvOs57fUHIpMex`` zTgq5*_Yc9#-?6l-VJ3jg24TnwRIK3--n<6ggparn( zxchG)T_D}C_(G>a`@uj5M4*eq_@INiKsf@&N2ejqMc1+9VwX#ts!(1FSVr4P^$3aTiA2Od9S!&CnALTX-w4pbJzegw&e)qP-j&;SWW z_<-szQ1%12qClaJp1;6a+1Q!Dr?7z*0HN9sN}r&#!vtDd4{D^L*$*lI*w{e&L5BpR zZSMlrZ(tih=YoP6Y@h>lK_Lq92^%YDg*poh6L_6CsGE*zKdATwMGvU&0@jb_eo&DE zs{Ww<1MOo+F#x0&6#t-M5LQq{gW-O#sUZ8oO3~8~M3#*g#ZV*;s7wX5Xpn?Zm>~Ti zYf%J|I3WF?_(2jvVM6qS!w1wp$M7FW9)v;u2c5&lg62PPrx7&l#R%F44%&WzVmzpR z0BL7oV1(pEEdFN)m0w(-i|#>%30nSv)+=nFvlBp-Iu`vP^FfEZfy0-D8NA;f)F%MP zBxuVpNC5+Q7e1Ey4K(P;!otD@S;!AMB^1R2;O)O`p!Mk>Q?S(k5L?+8KnL}LGCPL* zA^I3V8|6UB5=|bIwm@-&Vkr^_l(sRJt;N z&q)CFoKU2}`3r15B>XV)KjdJ0Mn=#@@u2j9R{!z9xA833YB#m?Y7Gx*L z4tR*6F<2qpN-X1c5QQN9pb8Pf!z4lSAj|~`KaBVVxf!%I1?GSB_7fKm^zsAH2p}kc z(ZUBI52|HB2koM|0U-|>K4oKOMk`+s@}TY?8w+~*kB|rD5>Ri6k&~Sj)Kp;yo5ak@ z!V4-lp!uH#ef2%4{sGA|f;QrT0s=LCLdq|8W@biC78Y<>2R0Sq2auORVFccR17e{0 zAC&f3K=T%yplb#|0}u$kAQq_o3Oe@=#Kwj}X%lqrFE%-l7^v?9vKGX~hCyBeB@t|L zATdyp1@Z$V{e#Lk)BzHZez5sC@;_)=iw$%_Eh{r*s~uYSf#pF4Knik<_ybMrfM$Qd znSh0t8GQpSNI&Rs8PFaa&>m25t_C?AiaD5g!RG>iS~(zpfLf}|pi6rpHgSP=gn^F8 zgZht+7tMX3W0^r)xIifeq#xaUu>V031lqa`Qh=!+6vd#11t@`Iq%V*pXlpvC9|kfD zeSZ^pS35H^&ioHLlZcfScl&@H+`hrxe*l%5_{x9Cy~d#W4N}sf=P!_(K^Pi-807=# z=zCDGfcDsdX!P&{kAHv)P*%|JI%fNT3EV*fClJut>#XSE1Jw_50yq}X%OBA40MHBq zE2IMtZZ1PhVsK6bpDoSG$`09_15GqY6e#{dPGAGA&jh&>OZ@VJ=Jr5xpu!w%D#8Fz z-3iOXAV;FtFW~$OIxqkv3F;`L>1Tr^P@LsAsC)t?EQF1yEOyZTGd4W)N9^n@tn9ov z(--KxZIIJ=VD%T8`#^Fa%!4EUgMtMVd!VWvRL`K*&kUfj1?gvph5>r`fJ<#q<^b)@ z#}YmuvqAbn`2e)f5Z!#xz$$2aKe!(PDo8+uKgduvNKMNII+TN%7iaiFdY+&jEVvXv zKb`_o{(}c@K&>=T`G^+&AiF?=c+8+$1hakvNrO60;Jm@k!V7T~!VJ*C=Aiwv2oY2k zC|p6-qlzMUpu7zVAA|@h3q0`6%8EPwK?#%%-2MgkkTAm+6v8YlIO89rA6&?>fX;Wv z=s$q^E+F@@gTn_i{GjOvG=vJ8Ab`di!Ve(5Amc%2M1W5BLGOQnV+FMB8{!TY$SpBo z)!>v2vKLfugW9K{sa__u4WOVT2TD7jF?Nt$kX|FY{U8+}S@1Eo2uTLe`U;RZJM@GR z(Ba}J(hQ*Z2fGn82Fl8Y#eblh2lxCfs3QY98xYl01P_#UKzRfqg31DAEzsQwsGA5 zZ0wL$8^V2{d;@A5fbuCgfufhsAjg3UU?>ePk3pSwX2@JMC}P0vXGT!x5_H1~!fX%= z6n3B@6qH9nY;^a7#2|Gnh=o~yf$}E{C;-8|6LwaN_9e)3Pz;(z;zesef|?bqtn4`Z z|KRw?vpxjWwgJTv$S>G1NDg#s5H>lG7|3ZLr-S=XpnL?*H6R%XhJ-z+eE?F)f@6Fi zEC)(Ts5jey?$m))0N`p2qzb)#0LdF*64De!vmcaqK@y;F0<+QN!8$<)LqMA^pjZNp zMDRlTe+-~;IZz%19rOY+2g82QS=yjAdY}#=jvxs(sDAYF z6P$iQ3ZNJxe}Re)R&47oAmI(Pn3-Ae)PEok!sC|(y?q7F zPb}c_AJqC`!*D;;U$Fimx;$v?5@ZADm}XGipob4cI~(L^d{90{3x8<%v4PHU1i1y> ze6W7dvMp%)1iVrby5SlW7@(!8pqd?2zG07l(7h!1+6N#TaJR2OW`b0J>;hxd?h|<**QtrUUNy2Zb4^48WolECel8aitHC{mh`1Envl12$0)BcHpevp$b6b8(=2Z z_+bN$&w-*DqkjM%R0NL?f^~z=;Y4u-Sd;}6|De;Gu+*<$1z_{RRXb+>1tm*%Hdz0J zjg0}m;~HcUXnYqI|Db!Iu+;D1o++v>kWL7OTF-)49#lSq7TJL}`9So+NRWO|9R$~p zwtx+^GYr&ngsDfTLGwGHIv!md#s`&&pn!+*(P>cs2IN6>aTp)uJ`jf2@96a_NRk~C zzMxRVtiM6!6KDt(6#gI@qy7YCU~v3{7@+naY6b!2X;2vj8b4)b2i>#>a~XsNSq~c3 z10A9dKHUl}{ejws5P4874=TXHDnSgeN)~potJpyG8_2Eb?gND%s0|Ie90c4#0PBL- z4I;s=W@iUoUIOY$qmNI5@)xKIVq;(gwRG69*8iZc4Jdp-@r2$!067%o29RCYFvxG9 zF+OZ^ATen9gD?Msti@aYgTfdTJ|Mqh<}dKk?kpgAP&t7v4+>LI(~Au>=nCpgqK6;I zP_RZwOkk<3 z*v%jUoP99IuR&6v#v3RcK^WcrApe1)7pxsLfs0vwK$Jix@-W&@pu7i)RVL6ndXP%= z@C7*lbp9e6Xa_ADp7tjjs2R%+o`VC~1)b>!Eo%a|?LiH7ko(Zg2c72zx_l614QQMj zBY%RDA1G-++LsvfLoA?!K|uu=Xz~N37K{HuiID|#fF;NcX!e6f9`NOVP^TCazL40$ zBtdBpk-70roeZ@m=uA{CM_XZ0F3HLkUUrpQc+^8?*qw$!wr;4K?>3A2ao@Q z;s&&~3$)k;n>@sUAl;yB4r-(_v$H_93NnEr2;@Id{< z7gBwL6rk&e6pNsRryyC3^`nsE?LjFRngY@EgW?xdccO+Gf(Od~pzuYApt3-gf>JxG zD1rydx1f15ga|4N9KIk!Kxq_2qqz?pKafs5xORi=H$a%d#|geb3*KFIle z;G!2)2BMe044}(&K%E>&`wt_3gY|>l20EV+RFR^^KS&-F>5%9JSp!Z@Ozg~@;Dzrz zVE2K9q86)(B>9U1PLegMe;2py;_Q22qp1|~pvRAI;?f|rGj zi4%2sJOkSKe5jhiJjh@Sn2D7jULLFxV*?IY6syS)K^`s!@b)cSVFcULfZ;KScGU9+ zp<<*^gxp7pS+r0~$bE$5Y2hX+n+YkMaQ2a@Y}=@DgDnIgYXfk$fd`v&N8Ll^5MX5n z_0C4)pUS~Hbc`DYb=c4e>`|AFhQMeDjJy!w0|8RK4LUo3i1P!%#)6OPLmi$2i-QS} z<+$X)3Me5!HWQ~Gq!OopXzE5h?gKjtk36yz559BwaC!ju0eHw}V__3}ejxPxIUMH) zl5IT$1N2}@=sps(-ThDp6L~})%#Bc8XcPr*L^FwGF6aOb&>0m3HG&V}Kp&!l>B8Xw z)C2HfieWVP*gjU==l6jw{bU85{sK8Y4?JcE(+i=I&!1yv#ymd|a(p1>h~03~~s>R2az(x_}2XK>(U4#T@>JC}TxAA`fdR0}BPvT6EZm5=1k`5r-Jk9Gsx5 z$b}U>cbr{U7pkrjf=kH*K5XcJDLk=+<2tNT3VgyJB0)x-*V+P&K$IOiN{65eS zH|YF3(3m_6`bl@7^8-Ogr-6?Cz;=Eh11Mv1Le8H9kMUxpPSE*#Oq`%&96=`#BHRUG zfzA(PXNR7@$Igm+c`WGsN_G}D&}k8n`?)aBHvpRgp1Xk_k%#557RV7u5I16*%LSc% z30j5@I$#Zl8$nY5pfCc>pkjm(*bS5r%;58_K-ZIk4%@*r3CRPXNmvX85DzeeE;7T6 zW6-`m(C!@2Bmq0dITYaiJ8a>tZRnR09=&(sNlR@XVfi5-U-~e6J%EFF* zJr(HuK*$UQCtsJS6@>2Y`Zd2&xqR6#_-Ds$KQk-n@FsQ^@HKUy zbw=2VN6_JR;3EP-3xU8Z%u!tlN}}vgXD~9N-*Cgl3=SeDs4p?snnT>k4m#r+d>Afz z8wu4ivUprP3|x>9LXSSMaV(%?a^M~S3n3Gri~~8skqHz{$Wjap@B{Ebp@fn4p=x1; zDi@XpJ_8R22M<^?Xb~V(1Dpb%zXv*E9;6DrF##lk1;ed{GoXrCctJY^ zSlM_uq5I3R`v7!IAE*@sTBn9_#32LNjiANfpvEfZX^o)s(IGMrBcN8JQP6$#jF|e- z6q3#bHQO0M=QxAf>ev!EXqOBmgMp4H#IOJo_nZ(TP>)FFX5xk3YYfUfZ0O6|7(nOC zfl5vA{w`4Uiq^vh$$`p721XWM(E30u>+?Y?e?aSxdBICC(bsRWfR=o+vx3i80GWU$ z4=O%Dc0krIW1h4Ox-=EEvJ|%d9ew{XsQ1PQE%(4KWM^aNT<6=*#mm}X`Kb=5dP zcbxLFvG9UUDQ4kiLBE2Qj}dYN4ruueXt55u{h&KgLCYrDL2J?2vAQ3;3JFw6vaz$U zvLbJx1h?uyj)61-Fwe*1Wq~a*1F6Djzkvin7!>|&poKDM`41!qy8jsxf1ssZsHqcF z`-Aq-@IWpChwS=CQUY2M4l)CxAGE#|Run-LF@p~7Vr6EA$YYuhI>HgW?+|1WsG-Wv z!U73)h<>m~4!*}89JOfXb25Xv zR-m)-AO?UIlYv>hEKJ-C3|ye-2Q6@dTye_Fj=n{c5mdN?Qy)8MCkY#-`$7H!IS`Zz zu(==FF#s*YV_{`S(GNW~3!J^dcA&){XxSE6oCOp}Y#95iLBR$}Iy{UZZ-MrI!owBJ zfXK74LiZ$F z4WOV0$1V#yS^*1NLJ3ZZU}dQB3y}x89fa9I`3Dp&aLfeRI|{M|loLSZ3tSGw09DTH zpnaYo?V$7u>S}^iv#>JrF>rB!PEH4F1TBvR?bbo_0_cbguyRoL2AP5GepXPkA5_Lb zS23aul7W_hg7ib}03C({aux)G7QTWcKuvd0IAerA=Bm^o-(1*yu2aJN!B`hDKn$N(@&d$mN@&u?H1eHT* z@*pX&(?J%nu`z>E9VlGD7&hnyIbRPmd_kT9`44nHAIK2&_46PzL70J&7d*ItE)U9| zpcTEK{du4mM3)EY1&wPkaD%$eY#8M?sJsHH0p)K{Qb5NUhy9dim2vjQT|%*+cOqXezTN6nucpehxj9~2Qx=v5da zD9eKeZ@^ttkW1K^AO{?=gIi*ppaBd}z%zkMKvwiA5)P0SQ1nBhh#k5y9vpihf`gZh z1$2lI8|Vl_&?ZlG_k)UWn0~NZklhc;l%RYMYd@iB24^eK(LbR0166P6`^Ufy9?1T3 zNb*EB9CW@0sL>7H9}FsGKx6eFHzP2}VW80~21d{T2dJZskOQ&UL1Rh~^Fccd*w9Be z*jQP4!TBGQ&_KBd)T9Dwgk$KzXl%?}ob0?T%&h25Tt-l%9klU*ixbp=VPQerLIBav z%*xCF-V1zep2Z9$fmfg3n(B zwJ_1^A5fDQo)Y zEDH-bSAujxFif5UqMwZohdehQCuo|E8C^d&bm)Ks9KRrEaxy?-8Z@j0x}OJBX0x$y zb3jT37FN^&C{9oloSB7%lZz7+5p3w@bAkp1*+Cmum>{h~wCbM|6a_4xdqzNKeStp^aDB~33PraD0VQ~ z2cWhPXn31}5mLONcYa{E128bMf$A|V`a#!Lv9mCM$G1TNgysRz4hLuqfO{BNF7W1q z%Y(}(wD4nKfXRao$YW!}DG!-OU_qDXf*pbhv7d#FlM&2fV*_^-K_|d~X6-l_As%F7 z;y@WDV*ZRw2~>iD4toNd3Q4;lk_j~X35tKvFb60KQJRk+ z13?!ffyQ4zO-S_c2X89_olgd8e}THVXu%6I5LEC(;ve(;ERf}(PzBZRp!x&7eqm>0 z;|1*uXW#~hE=K$!;vd|4z-%9Y4(DTKV_{%oW&>9h=oWx(Z~|vANb&;}glI!ppkg0X zGJ@`i0tE+J^N9g^#2sXe9aK@H=?9HagDNjjRsmII==wQX*?7Ts6F__bPN?9f6bnct zAM^k@a1RC)n&>+;nc0~kEktNjhz+C*6tNJ@2Ob;(H%~z`xhyQasPdp0QdVfk5_G^f znmowEpgsq*{>La^!N)p*>tC>wp}VpnR)a{8iy`q3ie=CMAxIQ~p@k1Sr2c^I>P5(d z`hU#Kpz;MWNQWMMETG0G*nUt;6jMLwY9CPWFfcGehVLN9MjI&4p5+K?hK}1@+HBg$sK942pkH;}@2GFx!V<6|8*R;3N7$%^0Z35DFv< zs&-)gfArK3%KsoALe77}@I3=)>p56I^nfCE^!Von=|;lnC%AD#V;)LjoL~df4@%x( zHK@%y25!*&11JT9TSA~~;!(nvfdksS1H}v|qk#4@fEzkcn>ayppU~5eAwhylg4_pg z`hXgYpxlIZ!YbH(pp*fb2Lm-EQ49ddgDPgQ60j#wnunmU1DVVKD&Il=Lv=j^3+MoD z(ET%vpgIav`k|N(>UM#TD1^j6XnYn^9#lbr>KBmhSkey*J2N{Q17!RUWB(~=R0$M& z;Q9sBjz*s!U}Xj6C^iNLNIRDut#=2~2htD2Z0u+aM2I#}F$9{P0F4l$gb!FhD3gFN zD2mz8_49(3F0rzL2d7wAn3>Vi2P3H03L04eMLsB}v4Uz*P*6Zj;sn)xY;3%o44@fG zCMISkZj|9aMo`sbhl5jN2ILZAeW?fe07z=6(p2bX#n=7Sof z%&hEOj9~jQ>wi$11dsoKq6btuqmKWB$8%UgbGo2@8XF4>+5`}!(*+JAP>BmF;7~^Q zLG#-X7lPu4otce=6-^#23o-zN*;shd4w*nT?qlbiEcRc3IJypM0R|4K%?5y21qH1#I%5 z!CSB#$SIYEq3qF4jbig;*e;{WgFt~XH z4swY3=-n&O{a|2&LD>UTje^GH5!xYLHIM>O6A=_`X!6XEbP3W89!p_Cljj8YU_lOp z8Uk8t2QmlRkpQip0mTgmH)wU}#c+mWhE)QzH zz#8FT7ofV26@2UtD>JzK2bB)!{WoyXf#zR8t#{1+H>h<2G6K~92jw1&`X6-YFB@on z7Zi`6{EHN}klSlP(@nO*DEk^mw3aX%3nL+)3 zQ2e8p?;tTy#s%Fk1MVWBn-8u&LFb!-`psC{pP@`?fXZ4>tRR$tMqgRL$L4?<>YxG=i#$|6D1gvLe;K&I=^s1* z4w+(Q@SFJFo`_*4cb2d>KB0|z?c`bj298OAbF5DFX)6X$Vv$|bp4=tMNq_p!VVNbX!6{k z-U(>oGAJE`)qzi&2B`!e#RPI6Xn+)4OMw~?X!;?s2DuXp1wbo2!PNxFRcQGS6fdALc5oLIRE47kF9YcQ5>OC=tOk`M==mQs zHUKW7nVG>k0bL$6Wdmv=fYvU78b9dm2T<1))GC8HA6-8v`-9RTDE`4E6`BE{<_~D- z24oJ%3>LH<1mNa3*zu55hQ7l9tRECEpi5Ff2B3_dGJu+g;3M!raR@dB&3w?Y<)G{V zUfab2ieLx<>JfrU67co6kWM&gs13Au044u|X9}1>@egkNVakI?y}%PgpwWNO=r+23 zND2T|0w6D(GKWm z2OZD|b~{)BM*RaCGzArF5Lt}$&jCHZ6Do}<5AMx@GBZ1P`5yY@KLZoA{AU3T4S?eT z)EEUd_#p!gtl;zGK{GHQlX%fDXyyY|zbq`Eh9|_8X!S1xI9fr&f}lbeWIlTSfVdoT z4JHo3kbs4fpv6a^QVWv2K+{Z62`B|xya=@d)D2`o8=V4`k6@Rv zv4M*x)X8V?;w!3#ww#=GMXI z^MPyz4Nia>QP|``n}a|@8@S{_Aqw2Q_U$)ejT;@->kC;2n_cpldc+vB`s)aLnwi zpp=SL9u#(<+69yhm{0~c!Jb4}3lA1SC1@^>(qBcj8^j}IKS&J{CSV$pO0t+Fx`u%P zHMwE6laq}dR6Br5ZXQ1J+z--)Ixd9OrcuGc7y{rv9!AYK7+pH*CK`kQAE=GRf;=uv z14~AY9J~N@bpi_u3u?!4@H%(YWuqZ58Uh0r0;v5POlJ_1$J8+@G8zInLx2x_#2QE% zV`mLW5DDXzr(jn+DMt+ARg3fVJ0wqFW#TmzO$T1JWV-;(68dsMGoMVH=p#P}H^5JL zW59JwHwPyZ#>fpqKQm}hlZg#&XbmpU2s-qNnB(str{6JQjFEs%!g2Z?SdI`u;vt8e zSVmbG7(k~B;>{x1T>&{B4-y2RBQnsVfsj0QQ&B}hXX`OB<2=9)w6cnooelGFIH)P0 zlPN%(&roOHp^{*V6Ep#U?sBjUhyd?sV}i_wgU)LJi6LP|R`9+m&>Z&~lE-5-LW%>tg_##}fE_y<`T=&J9g5)VzY#i6 zSfD^>2Hg*jB8tQT4RElt^P+?bk~DbI1QGv8GGHcX{{(0mI5YH|N%SF721ahsxh$X) z`alEiXagxwNzf2FI2~a-q>uwN3J>x&2NUR|GIalgmtKG`A_bkE2RcRt>@Fk%e6k8C z7(kN=Xp4R#AYDX+hEoVse0XX0b!VpACBR5lDgobTk<|XlR=Sw73Rz z)*0IAHK2_r_~ap`5Fk02Ky%pO1FS&DXtJU%F=7BY9z1)8!x&aJHqZrdm`&oVu&PU z1Rpeo$jpRk0ta{yAMAh7UP6omyg(a2LG$dOy8^*w5!7rr1+|0)GFymtND63s2P->h z7dJ0xqKFl=l@zWM%mD2SWP==X1|Feu24Xo&g?17f1gJ$P&m;suAU}a{7#UG|BaFlRjJ-H53F@^{yXnhZ8b_To)26R_6 zniBBT6)53?RzR_#g+41YXkr93w*s0b1Wn+^8g2El8FUuKgbm1@Q3XEVgsEK z0h;E**xo=$9?d4~TuA&w(m!ZI8Y%t3G=Pp-22D`F_{cP9G813>kO2}NoM=k}kc~iQ zqvd}FZcy$5-7XEvJ)rPGRt#c;A{7*}pndSn=tm5K${kRqg3o}1Ch|bKkT59!v$L@? z@_-L;1Z6}dNzfueNC^l|XP_9yxQT=fG&u)y8hAAa6DLX)1&VM`=>$4J4(t+)Q|^$$ zA7lt}`2(wQKqr5JiXK#>85ju3qk04f4|0GV_>evDTri6B!FqT=-5S(=$zX9X!Oe|J z1}ses!GqBzL+Ijw95Dzw{tmov79;dQ#X1`+_z*+TS#qcw=|Bw=s3hcsLr@eT34(^ZT6jaxz5}(|z}A3T zX=rUIka@6O`d}kaO#n%Qn(!Q;W0n~~MFEC>$kEK8BhWcG_|WHJLFY0;4><&x07}OY zBhg8C9)L3#U|YvQIg*1L<7i5P@<>*ImQS#Qc48ojfth@u1I$3V0<g!3Z|6ECXoiKX~~oM#hH7L(abg*WMsMU^|}= zwDg1*)Iwtct@MMetbk|+k&MisMf4CKf|i4!uCQhRo&N{gW(-mQatA9XS`>oTaDgNl z!J9dF+1bz*(LnAfWe08H0=be6y#QeXwHsO3*cmxMdz^WhF}8StPLN>%ovjRB?TNAm znU@uG*peP0{!b3S94`d2-3kMqqH|U&d zb~cP1_TaPeSU_7mKxVL@ZxI5m_5<}_IJiNpHCb8N(AHowL)U|Xwt#^RKw85IPSoJl zrQkE(SXj{7W`yKH?uTGd1cR3GLU>3d$`Vyj`ycImInW6LpymJQORwQZFoTZuVP?fC z54s{2bcQyr_9JKw8>kJ5y?w|B?tOuBI4FsLk_wvpK?n}#4WK>%CX;R=Ly20qaGa!}fW?V&;2 zg3QOl#tYsh1>R#1iUQPt;9~(tA{#qQKWI1w zpzblo3EK=zNTnmlb?C(#11o6t9y2Sh@mU5|HWpSUX58aDOstT-JE*~qa2aF|BDj-? z5Ja#*OYlKwqk>Ma0I!tCD1O146d()yK#T3rmbgQfSAaGdfg>0^(1$Rcfq@g`KTyF9 zN+Y1Of~Fs|LmVW`%*6@aWQ#hG#Ry&7&&~ zg9=Kd;s>lBbj1QIJNmJgU@0>4K-23>rTJb1?|e8hlXcgLhNvZ8M>WP%^y2P!-;^>c!*7-45) z6O%*)IKTFZ^h_&Mly2`110BwDS8WE?vas9MA+&js2y%Z^@aBI#!a zb&1grZh*^!&*uZhF&8H<_?$zudI+?`5i~RgJ)e&S{d_-e&<;d)b~aG)3@S!2yRLZ6v}$un>=gDxGw8NZ+%2%rV}=q($Veoj#K z1XqeopxzxX#`$-kG7}u@;NBC4`#C{b5?twm=PE0 zfP`#%1IIsTlMu%FT!iEiGxF@9WB%AcC#67~1tUStD^TwWbSfRF34z`_Wng9jozR9m z|AN{NpmWbqi)EPcpaTw>K(j||Xx(nO0`S?jEWBvNHe8yMl?~KDWMc%+lCiR)pRWf# z!Jdtk9U>2^XV8jYP~HViYJ&8Gsu{HA9q397&>;|v;89p!(C|OpZV&@}fD)*O!vi@e z4!wSW$n&x=gN{G}6`*Jy;ReMj8yk3sKj?%PHnc6y+|cGfGY_bv1M1@-2PCL%1acGP zcnHwp?I1THFd=z9M#!;3OrTl{e3lPFFN6iHlt3W^j(+ssD;H?ch!r$Ej=lco0u32~ z;vcnD3^5!;f)2<5rE%0+6C?w{ptI9Jt#cgunZP?t*;%+jHw1uYbI_W9pxGf%^$L~; zg*Cc7s87$%2GI{Hf6?T@A;ZGP&J7-C03Gj-I{XEyA0emyf=(C#9WjpTP*D8@igr-* z4b%)k-=YTUK7giInHWHOy+O?fH2u7g7=Y?W+kyr*5p;Y2H^}L%80Tvckmq9r%{ha{ z=Rl-a(YyHLv)&{@BrMEo<{ue%MLnp9TY(*+Ta{c(D4JHZM<+16b58;nuUdl2Nb`caY(e{6Xa&l0W6^7 ztw9M9&HbR_7ZmPHV0lpdqw5FloCLLQK%+CD;ZIa~(C8Mpk;TUduIMlhh++k;I$&XD z;sc$a1_}tY`UO<=fyy7SJZQT+YWf4+E(fY!*g)t1f(GbNPZ$8@SWvah06NG9v{f2S zHz9c@(9tWPQ8RG-gAbZP310B|aUkbGgAp|OfKpIH&zA+AK!c(Y#^D2(&!ABgm zfzk}Kd8kU7ih!IIP9-TyWAGq_(#?A`vU4zz0A@`m^_g8}4 z&&CGoU4t?wX7S7hTCm9qmIt*I(R=6M@)1Js z3nR#-prt-oMjIUlSq(bl40b*ymirZ1@X13*M_3v7z@zl+ z=+}pWf*;g|0QWvY&POeN7#KLgqc7~}w?@Mg0cdsuH2jOJc?h}}3bgVWHCo`>!I!Fl zM)+|w9~mLNLl!1JPBvy1&|!(F^$;l5LD2#(K3Q0JdC?|c!1CZ@!=V`s&3}xbvH^T; zFi0LW(TQq4sD1=h|Defz&@GNE>}cf!xc&j{-h~Vw@M10w02#{820H%{RKB1#?;!Or zDBd|h!yBO3Ml~NK!pjC~U4Y6-jPr-U$6n!+X98VJ$j-_RK0yrB(?rW>pw>Ic4p0*c z2v-8SegxD4Knqs5JotWT(4{zV5fla|XkP)u zfuMtQ*_qLH_kbGhpx^^f@_>$3Lv=r-(GRL#K#3gGSwfWuB|lIB0B#z98h@-Py>A8v zK2V^5^nnrqXcz~r1I7n37hJG|2~Z0Q#r=Gs^aWbD3{nSjDEjaM$b5+ZKvBSsK1>dh zW@G1M0-v7_p2b2j9u)teGaYftgYrLU0|BTJ0-7O5@5X~pr-4`xavTdgJKFhm;5jSM z`9!$l588e}o0LH~5>&o{4(Ug&H4*ZxY@kU~v{n^dnuim#?i}hs&<%3TXuW61m_9Ga zYoMS4^~2$sK@5;QByvH0Lr?{Rx_|~G&&o5MP1D z@4$;x(Z~NmZ9}Nt;Pw@I^9X$YF{lHIEB+uS3$dZCxq$@_133MFZn!{gwISp|=bwSf zcpT=#+y`1B1Byp>)Z>*Iz<1_=4oCt8GDrbx@d+-zA^rn}6bmo9|3LbgL74;+xh&|# zGjwtmlzku=t^NSdPJ!%(T7o|M3%YX*CIwc8RzE?_hbh76K7b|%K$l8@@;@a0QHNm( z$%7`J!3S@G4*3TM0V3!@EKt`RR5XFwm>@@>6;BMH_918h2S@Lm0W`S}YIWgi{_%mj zhoBpbPzDu1HbXE6=m1C1rV9ucg9Nz=gh5dY#%S#bkR0UfP;lsg#&M9%0N;)RQUhv& zf&7V)e?SBB;PDYiL5A*sP^$o}AC!-HSwU+zQG5bAJ{}yeAVnaIR)4_sgBod|Oo%eM z4?6!2)b;`CgJIO+32^=fjh{i!XGixRA$dN~;wI3=g`gHZX!Q#E=r?F>9w=NOYnU+4 zkK+W5%z>`hLJn0VHfZz?ly-15-yqHg&#ohBLSk})MpQwI1Chj#nULlMByd0%G@%Zj zgPTv_NmY;^K*KXw0y%UT z7zoLO*Q9_(#X$RDKkrWGT~uq~JW%=v1rDzA0W^34 z@)~Nb2G`C2DxW|Xz~Iu)4N?FKJ&+-6tZ21A1L*udP^$2_yjaW!oo@&V8&DquRC{ou9ni)BT0Q`BA86qe8yhnxYWJD}q#tBI zxO8G?W9CGx?FR<}SROR)1o9sXJBB=@Y-44Gou7|hJ`s{+Lo5Wq zXWFu`jmG~Fi#KXH7j)sJn>^0npLe zpxtZ4sUB4|+(H17|Izn_4>wrQ> z=c*4&zm9qeGXy}FLV@ESQ)*OX1cU(STyPfN(e+;=AgZx?5qdHp+PRQem5vIIhQMeD zjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mk zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By z2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J zhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kin zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kW!5Eu=C(GVC7fzc2c z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C z(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R z7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7 zfzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S`WG8UmvsFd71* zAut*OqaiRF0;3@?Vncu#>hu5qnRrAQ7#K=eSQtQTMg|6k7$}>Afq{WZkbxmBKd;0H zsva8!mXFU(EY8Lz%fP^(%D@0Jmw}0aiGz`a;n%NUAYA(E*RNH-e*N0@>({T;U%!5x z`}OOW;;&!7?*01pYv!+Cze0cg`epd**RTJ-e*JR!_3M|wuV263{rdH*6VnzYMm9D^ zHbzDnOetg$d9W*xMUdF4jEsz`3=9m6jEura!f>Vl8zU58NNeyyWRR=}D~9U@GsM7R zjErnzU@n}{kdc>{k&#z|3t(l4fvo^J5UVr;*a=7uKvl)a$S990G6;F#@S&-@@P>h^ zs;UM91A~UDDy~r0&|qX_#2!zosv0282-mBsYN%=>xDb{G#0m(9M3M`f0B~x;FAMb> zPTh2tV4<^pqt=avz-S1JhQMeDjE2By2#kinXb6mk08$7rGBFQWi!&&k!0lt0i2pZlH53Dp?c>kOSdDC=9R@kQ{&_$-vFcjW_M1svaO7IDE*m8xlCU@+RC!yb74Px%n6v7&y7P zv856YaPY$j)NlrAfyltdN*Tbh0k;>#02Lh&Md%hVL4;XBs&Hb69as}4L=Pj#6p#lX zTr?8hPBiI3!Q}z@03L!QISCxx1pUYZiD4Wjb8~Zp27TGNxv|6q%mR=TK^P?gfCQiz znm@sj0cAt1B12~PIh+-Ri&L=H|u^uf893{dffHRUq!ar5(XbF*?WNCf~`fEV0;02{#os%_DI0#*bPgp~G3 zE`?-V{Am~DDsFCeOot(ffNelB7bXR<5G;!?{vpo5q90}st!Z!$!JEQyx&Y#KNcoLZ z5d$ALHwW%!5WdzQIB9~Kh1}fSkf?x0G{`cDIk-R#2o6RT9^}3rxMjx70I3E*g+4g6 zQLTU!380n*JII?T9TjNH0AKSTY$Ac|4@%zHe8<4R07_USF~AFoB#hb}sZ@tV4yc$$F$xkk+}y07G5|$}0h;d_!RCWgAUL!!@){%x zq2{9&_7FjIW0CmK;s>e9L6U?sA;w?{K~Tto(lv(1;aWiqh#%2YK1hZ>80361vp)m0 ziUVanoQ?%&e+E!yLstR{8<6b?jA0N$3NsSG0mlwXS)kGZ+<(L}4gpJ|5R;Id0Et}; zE0L5yy@w=%jR`Rs(|w@U2nU3~rVSB0f~kzAV~g)80w;sMqE3=E+7K?{Dc zrQDDz8QKW|3!xBT=fMcH$O88(z;Zm0SisUwM=oRVm%}L5f;pf>NyPXa*aeuW6Kn)t z0$hMWbVEt{mjYlv;wuC3`T!FDc*B*On;SA3kF5Y;0F}<5p?}=L3=J6wh2~H;i2cmG z43I_`hFd|#Lv%t*Aq*Ax1fXdLpAx9sLERGq%CJa7N`AQexVf>GUsyC!Q3%xh#y0Fq zoD~qa<5LUE{tOIk;943@Egz(G0JW6RWZ+zo9K;@IPZ2HyV(>!h46q_z1_n-6K5jmC zSTX^N!u4`9Fffsn!Js-p*5JX=QV7cc5FSlnDa`zjt^NWl#Y%93<}W}q7%W&CpICKZ z2!b6?e%liqLU;4%tq6|SxrSOq7f5&$a%8476;g1Hca z8Pu8p%V2~9RspCkta1oJu-#Z1HwYEDSd_*;r1S&1lI$3yEc=5Rw|J*^7!cVX+yX!; zX&9L~K%H_XCJsfu!x9{j{7BIc>E}VUa6`HXFdkYX0;_>wK~R?k zf5HSSgT?}wO&S4qHq2RInxx_h68d0$xB`xld%!Lr%~E6|At8h;g3d;%c3Dw#3E1T* z1Qu`baxsDjcwwH!ntefrurfeX~7+e5D7Z897esH6oA38n= z%N*c}4rCzlr5!YX5hyN*83I9bFe(>f4fgow~<`LE=-;P4GK=Y6(nTn56Kj?qzZ~$25{dEYpj4H7L>fXxuK&ZpaB&m zmadU%G6Rb>vx)7uWj&WIqX*sm?#Vm4= zltMBu&JadYiJJ*(_G3?Ekp2~BF2ZdVvJ4^J;QA6aREDgPNH(-dg(XrT2EfV(c+f)` z5Lxhe5Gde4xfCXZK_kZ?A3WtCl!4s<<04WEERs>2zyS&nm<&u0J{l6acmE@P9 z_^d~?V6k`{zecbuIDVl`EU*9?0getdF;ckD(MM1g#;T2lg`c01g^`7yg@uukpOKND zg`b6yk&z#kq1ai$YtEV2S#c&I&@4Zwnaj@1#E;D$kQ~zD6EGLm$6Soy-5bmt;AkXq zqXsyH@I@{pec_$|!WuM03UWYN|Ii5(A~nI4F@bdR@gao|TnfbC1#Ogo#RW)Uuws-p z1F9pL82S0Z5epM$kbs4mJw09^Xws!zaq6U&M-%B_W(0Byig&_stCG)j>h0&Ki^=45yo7?9T^lWPY~ zeUR#flCcGxMvqDife--IKI|yX+aciSQ72L@1Sr_EPBk}-8Z;ULqaiRF0;3@?8Umvs zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Au#MifQuh={v`*t^%qdTbFr~uJ9H5$3mPTI zKa>U9`%HKx0_d0|{N}(dL}P%=M-w82%ge=v^JGepITRWXGGZVxe&@4+mso*@qH#`i zLsei;AZ(BYdEDIGIEJ!WpxQBxXG9AV$VyAl#vWt|u<4*}2z;Q;2z*!;h%>^>XF^|O z2U=PVS|JZzCj&ai5_7H%v2>gn>qHQZE zdVhJ4RmMoCr5DZZD z5t3#I6OsP0B_A{kFueeEBb>tJShxbTRECy5(US*c{R~_)sx(^K0IPy{3Qj^-V1T8- z1X_6t7DFP?q~YdJ!hpp-X5bMp6`E?W9i0WyiQzklFcJy%8Y_5@7Knqk5(_y9u_S(Y z?qq}&qiE3wD}UHPTLD4lV-ye&$AF|D7|j8Q&Nudc5?l9^wkYk_x{10*_ zmVy-)eJs!|NEm?&+j9>NRFENP@dpW0s03=xgLoe*1r9VQ8zKQCc{xF6KY+p)W*1Bb ziH0UUhyh6A@GZZ%*5JWvFOVKy?7b6^6ufZ22qS3xgAxt29SQadSQEl_aH|$t6o7*Y zCeOgY%gh8i+mabY8$ueafQgBNi5X-CvN)K{1xuF@uY=PWSb{hLO*e)W(C7m>8EOGq z7KZu>96i|L2dWD~p_B|T2eNT7alqlJ9%N?V;$-2(T{T0UhGm;HH2y)QCp3Sfq#|hX2u?OoL(nQgsIPFJIRH&o zSnOs1Z;yre8cKp<3gLGUiS_**5LTe#*G+CG_ zFsET!4X+^?d7%jnHF-h>!O;R`qlE%ARe*B<%svzvnuM?_fI1&RVRTLrQVVzDL z29bb}*n9|b4K(;LMlc|{AZ~+25J)`~g9DBgmI_eqhAM$ku&M?d~J#Ye=IdGj54$A}>2@rOIGB-2qFbC8;49i{!FT$+^-HVJ6hO$s~L)1d0KxI5c z0EL9R9Hb0XR3ghltp|k(ETYjWS&%N!C?m2i6gEBuP~)LWuv~z|18%#52R}i>n0z3I zAej!!)^G!mq)0nxCk1Lr z>bC#TiYBNdpdpMcY@kw*D2E0nrXkQA0#OAu6orB&Bj{ldC{j=kG%cL2_TXSl;)45)))6igUFL-GVn9-23B^-mB@ zJj|32F#|f&2*@%poW7egk~^{jSbX7$KCZ{U;yne!Y7Xy{Uf>m4|6`gGfzNn24ReV zVPJqBe*sCnu(lM~SI7h`2(TFdQin){xKw~tL0fld4FHhCFffjGCe(q*1u0Z3IC(%* z7`kR?xqx1YfT7@xy1Tly*5>W<#eS%~dDD6P{f1pijprnQ* ziPZiBm7gdwa1J!oz*z(?2xCCA6xdd1G-8^B*94;60JaWm_`*UJg$66fB%u8SWCudE zfz?9Yj~4&1=mUEZtPYugmR#T>1zOdk$3FuDBRd}-9}~j{frzW=vG71KU%OrRYBtf)TD)31(iXfpk*{>z<||2oq(<0U|`^7W8r6pj1GYg zhX#2A#TaOqgTxUSNd+$_SU)6GpoJZB1VAkZI|OO~n2jKy-p8K&VZ%q@z=4JZI4vOb z!&%sK0UHYlaI)Yo`B+%McMyQBfE$K|0Z9R9%Ajt7dJTNe9g0@4|MA5>Xz&PBhTw1? zv}gwvj!-+0OIN5>U`udKF+odRZf?*58t@_^s4g%C)e1HgTGpV1FH{U_HW&* zMPO+KY%r97+79ADg9_vo5EqJJsTz`kpn?brnmWLt4s|OiFTfRWadGl9v$BFh4=N3I z3S1sGDTLN3K*+-tAg5X+X=ElpX6Km$bT}l~X3!~|e4tq>WE~6)?A+)hVyN<<8jg>T zj}OwrLz6=^j#%N{8%!mziW_SX!g2*P>d<=t(4qshtOynp;IM|-0?pD0-5?gy7#K8C zL8s%uq93VrfS>=$f#@Bexe}UyaAbd2{s)-}b1KYfU>Y3s;G~aL8gjrD$jxBY*a&C} z1^ED*G|k1J?ncRVNS49^7~}^K2BmZ)X%G_@@E|q@h6WHwD-@%|FD%lzL32Q01!(yb z(sl-oYeTI;a{yQmXjKM0rJy(tr((Ae_YyJX}G(1Lac;H$a6V5Zzct$e^hbDvwc&z|t3n1k4VY`8XB86w-)>)z5g0 zhjl(#(aScd9$bD0Nkiq3D2!wRD?&kPFtQKG3@8T4gKJtSA4Wma1uj_z2BZ;G47*{) zGah@PEnu+ud`K-1nDt1;W0_rq)~+aH(lDK18m0g}VS**;KtS!s3>g%=x!AaHI}qG~ zVZmO3fV(!34h{==Z4S1JP&qk3=QA>M;7DIkmq3o1#O4g>@s9ks^mBpDXTs(}MzE{! z^v*ytj9~MbnQ*D%0`&k`nOLyZAzTnwW3w9KEgnuzZ~}(#=udKiV~-P~*rdNpMy!pX z78pjgHey3##CaT?{c#mtBQ7*Xn1{K*v5zrqJHkR?wm*p{LT1^ne)k|7Zw|hQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kin zXb6mkz_1Si&;sFs^dv9naKV9ezyR9~I^qz0c?E2F5NP=eWHS&WY$+{I7|vq{pAy3dTf+@HWDsNxe9{KwE6_kb$RPX}WDrOzsw%Mg zuyf1Uz@~v#bHf)~vO{ge3>k}UPR*;e0e6R(Y9AGZ$oFilr z3P>Lx%33I-#aVoi#nAkqHRYfMw-CFLNRVzYMqf+>7DOh%%l(mbBBwIUJq)l#T5uE4 zS7E^=5DXMgAcSEo6ln&ik6@A*sRJefNf_`2VK5KCmhi#C7bcEL!&JiJ3915SK8Oon z5RJ5723a1Y1|7rXVG~KPMUAlCf-rgLA_GWvfhh(VhO~waq!yBDKoZESGnparzyUoe z2xS`tNG)s`Fh&Hzd<`-hicu2))Im@=j5WZpHIxW>)a6uI%tu*oheaM55+G+Y!1t9S z%twt$c$7et!<++OvIFxts;3}|QAyZhQPd0qa~~*G!0kfHp2+g3=0SKcd3eAfJOWk# zHxpz5VoL`i4qK!BS8Hl9eDzAm%|O zz!d5tYv>#~SO!X9*jwj4jP``sH zWCwyu6R=+)<}g9aKbY+>8euD1@WPJu1DOlQU;`mqF>*iJ5q*$q2d)#sfM|t~Slo}2 zfw9O#G(t#_{~(4Uk>HSm$iv+ajbB)Dh1WtbZOD3{TG1$&N_fiwEDv)Z3v34@I+)Uus1~+OJ zMU*OF%Tcl?q}l)-%)`q7J3|SniUk!fU`^b7jBuyG%T|ydA+p@u{QQVC26hlg63J%J zN>p@HzPO+@G+ygkO6Us5lA)K5eZ-+sN-Offv78CvJg!$w}LH%5b#g|abb=}=qDWh zFdIPnF)>UQa>NxpFCi&}selNZ+MGd4s0LlW8qy<+6O*c>%DLy0tj^3 z0$33!0^w%!zz;fw#y8AOuqcB@BqZs8^n*%7P_Y3%CJ7w>;A#RSg}|^h2rJ$ZGDtN8 zcuWK05_nj_3wNkESn0ZB11!0m@{v5}wv zfVdikggY1}ik2g=7=>LW%zZFfq@oRM2F(BPFawJs2#9`=zd-$cSZV>821zj}?&pJ_ zHvlyNqz;5(u7{Y0bP5wl5}Y5Ixw+ZFeLql$!;%ZCDbOJTl;$HWNr23OVR+bq6BS4l z-P2HWK@>P7e%#ZzFN5CWnP67P&q*FxeP;!lV?jD+`QAev!*h8DjF z+aS`Qp)powh$Jg3J3j*xD=P~FJ1aX<7D6h5;Aj1S6AZ)%cn*WP0Obr$Sl0xByrb z8vzSz)Vu@t5!hG|ftnZK^4N?-xDR4DvL*^g{{=ZdihcIs)crNKt{*nF8x2 zmH@dLG9(NwK9I^Ps9T^)AQU33APE&ENuXH@(+_blj0Z`QAf*tGL(GMe2;)IB3s6A> zg&e+6_ktV0FgEI8oiG~_`oS!4lL%x#ECu0C!5~#23{#1kcd(cb$+sXaNbZODA1a7M zLG?p2J~TR^c>=5o7Culhu;aPm%|BT9!y*jU97GNyurc@um?3No3{XEJ1qRefkU1Qf z?V#)iHW3!)NCgI196`VghlCoeGK2>|WKs$=V#374%*4#W%)!hIHyvaO+d4z&=3VTpD~O?=!e8V z!~lLsnt-GjnET-Y1yKWa1T6evl?%)^h+b^=VT!?176&s2)I22ZFkgdX7~(M4z$DVJ z0n}6uZa!vy)P2@4{SXI391m*fKy`pyBp^|+`7l8w8lfL_Iyx@{=$Jf&G}OJIHaDn$ z12PDN;jxQIA)E}nphMO{vLFl#FnG8l%*0@^ae-4LNE-;F%0tU#kOVv+k<$`P9?3~4 z20-Nb;O+pmL?C$vY$+^!*pUVoL3TmSfcYQh9gq|VNGTX90%?V=XXwBrRZlFajnI zwI3!7qv0k(1YqS8ga;yF`k^5L^DNvtm;p#79!MJu!+eBv6gj-91y%z$A8Y|Ec%adN zG&~E7Ft8>h0;-=8)G34NhIMMes$gXbC;Tiluqs&n35#$@@W6bBv$6pjiAI3ULnq*B zU`ZO>B7k3I1NRNAy#cC}d0~MCZjC`rfQK(H8xJh8g0c!!8h$|rGcV|DLC_K+E;dNQ zhp2$rj~eO_Ii%o)44uNFA1N|n`k_Lw+7#>^kSVYN1kyYKiJ)MZllh^u=IC=djQspijBEome7F$t&jjsMLrjFqgDN;^u>g)LSOSB`I4D8GJck^<$aZ06 z!vY9wES!Kx0o+HR;TO0xEcw9;T(}H~0dfn>E|`9hI249GVERGIVQB$07YE{lFp{|lCfs(A3IZ6WiXh&mWNL4=M_$5N5&?AY2YL z^&ttvnaJ^r&3uT@A$Gtt;fNpja41Y2m_}-Uf%&ktS%~BcF&w>l0vCldkb)d)60+lv z^h4bTOAhcX0M&&|p_l-X;Dh(PK*wi8#2{H58a@#7AQB)F?m$?P2NHx~SYrsT2oD2R zfxzMfY6jemP(CUJaT>%_SOP_;fQUm$gfM~yl>$=;Q3MOwc$g?yF*X9zev|}=svlOH zf-7r~X|Uvrk|#kDFbvZVr(qIM8YT|qLaTE~bp#TF$s^Gyxf3GJjF_f?k7m3E?6Ev0WYv%X$E8feCh$w=!FVHDCGEol~xcLB%Kg@;o$+7 z2elL+av&0mJYr=7;^ruPhq5DTJ*XYv(|kdOBTc?RlQ*oggV$d$&5-bgYC@)92?T03 zxE@B5hqZs;=?9u$Ve2cA>0v67bXmQwcQ$mO)_Q0}}>K4#WDIFfFk21wm@~AP$8|p$%Gq=INjXB~%3#^HH)d zOdekx z9R#x1JS;k3&V?8bH3XJMz=p$p29+d0fzHnZo$&`R zlQ_YvaNwr_@_-~kQ?i`k)i<0xsL=;Coeg}#9xDew+!&|?187bcJgo~dmW2mB_!y9k z1}*&o*@kleCq$kFbw~+jIGkoeGCk2{2U>-v(vZ5IdIXMud6?B3h z*dRWX6UIQN4uX!lgRFO903B`zaw>GK1rtaIAJYCp7SKjCkOD|ZL!Aa*AHfVh+yt@` z3uG;5zdG3cV4IN+tpFJTb`b|?zZ;kZ(FI-42^N8v57G}ieh=hIkh$Q~{7_c1fZPMY zkY&IiT@VZoR)VWCAbLS0TIhid;o)cJ=0Gf20gE9M9IUL+VV;6&q|_ z5kwWbG(;4cM70mLst&3G#k){3Gz!TESki$C!4{-J4S^XA4;Pq0(BuN;f~BEskjG)m z?jVN3*JOdD;7ckYsSv6Owq*gfeiw3@4VrqGS`ZD9f{^eutja`rtF#ka{!Bl~y7+^=0LQlRz+NqAVAPyA&(4+!h=?P0kP*Y%rf|CP` z16iU8b3DY$;OGJ=fF>`Hex%p|$v`mJ7LY6mLv04hfVjvQ9Ci@1k%dv&i10@-7NiJd zCIW+tIgl^{gIotH=wJbYkb$!h#=}iQaS^zTf=huJpzy?}A9;-?EU$qzLI}84%=Mq> z3gDYsAbP;z1zKnc;leX3EIuIGx#1hgpl%1HC#V!C2x04FVcvwNLI(H=2e3V?pzs6h z1X~DZfe0`ULcr4mNF0V?CWDng9l^=T2~EUcQ3wIn0Ab=J+1S{i!2n;E3{#6*Fk^{- zkOJ_AF_b8SX$R9#=W#PL!C1)A2R~2*>{1v3)(9mKx?r;0+(_jkOpuWap3o2l9xNlm z6hUdI$%x|*U@n4XC0Kkz!v%JnBHRX;0npNe4ZeOBY!KS2Swy5WA+}k;G7QuN@Rm7H zV1iu;Gaf|46o4gQ1j2{VHUpxF0_j0uZ~&k*77%hsENF^_wt5f}a2J6s#*BZEJ`Qj$ z!O#jf1gsT$xFF0txFpiHVrCY2@S>bxhS1N;3%llGju-zd0Ks#0~;D0pg4fYLP@A5 zuoIv{PzvTCsPkd=gB=4>0!xx0HlnBk^FRdDLN0hZ0yz^_Vk2ccaPYxg0ir>gAsA`| zHzzzLV3fiTg-D4RDgdFNApmzWL=;Mb-2(L-R0tad4F(J;c7AxA^Rl2Gi~&{)@)xA+ zgR29JBN5P~1=*qi@;V5^<>6H$#QCt?j1*Ha6_88|3nXw;3SEpc(hYfm?!PFjNj~97G=GBUYFZ z7^xSc4p;QU+Bi^EXcRa=Awh>GgTe(@6R=tiMFu|yp&NQI0O`mU}>Z+E+GBjng(P5QUw9#LI`H090$`5qG6dBOU8m|gxLp6Oi0BKQ~@Z; zVa6cILgOD?0zy^7_Ee#6)q?4TD1sz*kkhd2@r4SbQxKiVZBwWUND$&pHBgnfDTv|l zOodw^nhfYLUvQ-0vL1141TzP;kOAixm^l!O5$DB00~9InU@3x?i3y%XVDSYq1>$|E zIjkrl3z7z5m=b6v2MIwjIC~&=4Z@m#NC^dMFsKNHGP#jb8PvI;aU7T|tciz|N= z7IABZI~>74lt~BBsN-z!0I5RaX_#Mpd<2-bc6c=FbO0Yt^^~aLE{eIBt_B$ zVuD?W<`$4R3Wi1lBG6G}@o=D)Ln?Qy>R?4G+ykH>f~y3(4z#HgCIV9i<0F@>Fgegc zl5lwj2DH&bi~s_6Pr-VTG(nkY5e`;`e7pfX)>&cs47uompPB$mMj-uAHo7xlMGO4s zG^h)Z+87|+Xr%^B5l9M*5m^T&MIi3L(u4|jXdMkRk^~y!E#xeLrWqO>V8=rUWG}$N zAC^F2jYUN0f!z<$2q)3K191dQ8o6u$I|gP1vc+HtM6V5+@?l0mWkD1y--1gykUWa< zu=ER(K*ca0fy_WUh7Tq6L*?LSz+sgHDS{h~2p5nr7!!y)aPtz2&%t_O1f=Qp!w(cOs7fK);m7O1BoQ=J0hEHJB9J_K>O~v^hG+&swLvM6E-*%R z7*r0Lc(5c4r~s|AR)eeR!KH~fafs2}+@Mhm7L4uNu=od;u1Kd(BN7R$`NxBq zG~f;Zr9UocJ^-CE50`*2V3r^Zg@_|{%OCH%0ehMKQoq98@AFsFhzsMRs7 zngq$f5*x%y2nor5$fKGNaR>>~g=nQhL}4UE7RAXhDKHK8JyL%YEQm@#>u4jUrJPk4p7UGa`Jr;Nzg5)3=p&!OV4q9er@Z17voIr|il7EVD5ws|^eZg= zAX@-$;z3oSBn^~$2jvJ&$Y2G;4sh89)efOR##P$Cx=u%;a-heHAnr2!2qa>3C8O~y!L z2Vif&nt#~B03PMcoG_Q7&!m9E4`wxb6A4L@1$I;_NG;f67y%LhW0-B|)i}(BAWyt8c7(YQEm?r9Kz0~{4U&Okh#;1(4OAYQEU_33 zR{$-9@hO3;C6NIxd_YdbsSj3ygA_q9N>Kq30)-vY5x7V>95Vx>7q0Lugw+YKIs;}8 z+Sn3E53KwEbpk5Bbf|CvOut652Mj}KSq#3G#ixYIb9t-**gJ4HuF&}(vA4ogGAQnz!3m|ca zl;WWFAX7}t%*=RlH?)pMN>s?2>C1-XHTv2)lx>5?9X}fvz7_y(AA-^^wD>_vwYb&O zTn3Z?z?q5WHVq34kSZ^-{6ndJvMj}`i3`U#7hX*xRubOi1UEoQ4+cd01YZM@baO{_ z&?f{S)jxmRjHt@N6eE3$dz||69FoTZb<0E;g3v`B@n;ZFRR{~Zcq(SZn?NY%x zLk~J*keiPi|MnZGB5a0$7Y8G*{6*LdWkC)OBw#*NEww4o+A<2K7Qtx<+u}>o-3nc3 zOX6G?z6GE}xB)iDj!P+ceI6nI!4{ffGXye$hckZ=vLBm~R1*U)P@&8;=o~kNsR--_ zXh@N^zyuaQplk*lyhLsyNDPhL(ytdStO;s84aT72MIe+oNc0)P63Is%&_X!@eee6UMtLa?&3QWka4 zOpC4NBhkUo)z|n}%VL-bwV#iNkr~ShO$_B20#N-pGXd!8WL8#o{0lh13tU-Qu^9rY zV!6={jYD<>)PBk$0og$Mvhme?B)SAoCcE3(|9-_d5D!6qYcgv zKeUvI3C|j8JOKr7zH)$_fl-3-MWu%GfX8oUxT#6vpP%$L}S>G=0Rv^qltoaB4MZ%*jxaOUq-}9S*T?w)P9`i zgB*?vgIs_ihZevvPeav_ngGzWWAuZ;9Z0Cz5DK*sh93Rs;~>!BfoKJjs5uQ*Jc6Y_ z1WG>&MHYwGK$=i6iV3hv2cZHjCqgB#wd_E_55Z7H*jxaOUtYLVAv)kB9<5+CPQS_P>QMdM+|1BC!j0lSc=CXm zjySs=;zpQ$PFOz-#eQhv3{ixd@F3cecYQ-tq3sffM+;0A)qU_>3o{NY4a)@BTmUr} z77r-CM`|8m(+aW+(|u3_K@=zQ*;F6_5Jt5DBm%X{haJg)`)AW{?~ftzaRz z`*`44g%$27E~Mjcu)7}?JY0z5%fZHyO0e-j+wkbsGc-~_g*G&agQ6O4JjiRH-T_#E znVX%JnFD-~9GH(dya5!au&74K2~hpuf)%MH1=9{aJppycF+vjQ@J=>FTLG&);)r@u4wYg?H2;uV zg2+}tYY&K*p;qDd3dm9<4Ap}~fr@H`0%!z+^At3Ek#hkSA%tGU;SXRf(Buhb!xX`? zERy}G)77v{0n>m^BL@J~5EKtU%Pf%lk-Y*p2G;z73t(fwA_g)0H6J-ELZu=0GqE!< zq8%{`^%E#cU?nxOc3A1j2O3@nVOCaFK9u|k^)%RiRF^?`PzNAefRg^94gi(QP$nd= zKy<@PTAb#C)j=HrNR=v2kC*ArEp0i7|_xm6eieHD%4RRuOlT@xXDoa!ES;D1zZxPAcI9U$RvacX#IhE z@D=K5kOL9AkXTR$fDC{#Q7wR0zo0?~>J@NU!A&4!K3E|hMeqy+>s_EEZ+QISbU%{& z5Rr~l=s_Kg{A$tI+u6W`no>P@@NCD9A!~ZdPU{ezY@Wp!TD98l)J8p#gwo0XQsR(#Wv_H43#R zh6;k3k8nL03}_@^a|AU0_~5N`P)`G=$v!bB~8k?!q+NTbbf!O|aYA3(JsC=>_4$|nXy{Gb>`*n9?*oQa|tX><>X ziQ+**<|DN%pdkq=KB1oBL=>tB_oEhX7!d?2GteE0j}Ns9L7|p}P)8x8QA&T1!3ZfZ z3nlcC`e$HC5P_Z(UbX1}8pymyf3Gxcma4-cGhUx}81T0P@0V`Fw z`Jlc;H6Lm$^q4!W!*Eb9f>okw20H;J4XtS~t0&|V9OL*vX!Q#6KiD)Z1k~N!P^G9A zfL#SS*B{D6P2W&g;WHmzvt#ibEL^~O9u^bGSpaH2HmzW$oGO;kQfRE6_a6ah%9e$7#SeY0xYk5x4*(xk(Z9=f62m)*YKdga?nw3FE_i;iF z>;u`)$%1x=HVa4;T@Yb3gawTRY)%IqImpQZIS`PI6J#0-3vvS!YCopOASOe?9PB>O zNpLJIEFeojXB0v&69$CPFNxDd=8qsjt&-pR_W2fn!#xWd}lr8`o_WOU~0Px6#Hlk zd#P>3AT|$qfg`?i!UnMyC~_J&_PHTjlqoW3Xlh1GAw%XUM_NF@wpfhNSu|+s=Vs>T zhpklrt??Y1X_*{X!&aD+qjwnSfn<8<(r9R6ps%-hnZc)`@w0)KO0Z(C66ORia$sg- zU}R?IU}i!)Ws?)4or?>k9d&gz+#ie}Ic{!lc8t}x%uG-zZe|Xwt1~#6nV2~^m_e)S zIGH(^KoD*$0|O&72NN>~)J4q9%p6QiC}#{Zf*i*TSzeFCW@BXnOMv~#0y>fpdMpV) z6BEcXuyqh?7@3)vn3Q8V8?*iILOTj-9mv{QiFZK%?+u>utp(liwD>ONI=3}4i)@e3A0Ay6HGB8AQ2XaR&`I!f9D z<#ANA5vdQfK^B}hxKY|iQ2iiTtQ%mUZEKL7us8>8zks?K8q3f`!i_kB3Mv6|3^dNc zMF`XZ;Isge17oOJFbb4V!Qw;_;IK!j@4+rc5h2PT3KT)J70d%@C%nLd4Tm%$%s>i| zvnI?%u+Rm`gD^NGVUn=@jUWj~E{4g#Xs`@7_;Lg!CQKF@>7Z%_n*EW=QU>_0DWvU} zAX~tpj^t0M!BAm{WoR~lq7|AHPzo6Mws)u*Xs6%7O~Jtcrzli8kPyf=R8bo8U@qr| zCj=zR;0vgs!3#Te6s`oEUSUQc4A$6h#(>!;Smp!0GB3E{jeSApkxIt$WUuAG`$Ez;RfJifFc_u zLqJc2z^8}Ga_|^NRDVce2ul-eh=dL*KoM?0WN&6xG@pPKA(hZ9oEX&uCv0^lJ12N+ z8(0f60W}^}us}l^6cY#)5cjdd;}^AThQ%Hm{PYCS>5tGPi=-41?@$s{m>?`*fY`u? z*g=FOhhRd}2Kw2>2nE<#AS==A1A7y@YMO{b`yAk7H9^inJ>d~50;-T80fFAYfq5Jh zL)hF0jel-F4($66q59DR0d5l1Qc%+X%0x|M;LzgcgQrfoMkoVfJSPJvqe1+_3}Zu8 zfGFf@2q{^Bq!^$n5T3%Ym2uE&2yJsYSUY|Kk6v|AFHVL3i56}oZ zq|FU#2f$Uqk_0!F9qiE30+zzS;e^l#VL_cnV&M-xy$>}(L$;GbjHL?+$sv$dHPj!7 z@*kWSp)Dn7{DZP0!eOx515`jDM3GrgBcMj3r5^YJD9AdH*f8VS;7vKS5*8YnP<1G6 z3$QVe(hVAiU^nnVk_4(l;Kc)`2~eY9$JB#OMI*rGlC=d4T&AI#2676fD^S%?lLvJ? zs8)x16)71*;~ZQ>K^3CrKS=nZR|+WZLrnl^359@uBx#s2C}zVdcu=5WjQ~jb0Fj2o zJcP}SQj9~zFdDaDyCD9CmLRC9A1n_GHMEoomLo)fJq0S<;0nP$Mh#=Q94#1-0D{z9 zV7pOHc!l=E8$vM~G%C^J51R8pwjKA=!XgI>05_*tp2L zgcf2gvT;hSnA^E<$}f_)TdB+X!8wZ zJk~@Hl0e1iLkO_^hf-`oO$Sjh7l0Bj!Z#opD263*&@Bfbt1#SwumSaI0+4=$i6E^g zT_=z<5f~bRe9ZhDFsGsh5fNrkq6F%0BnrheByk86)p5`o6{!G2(T$YjAiBBHRYHYv zoy>rchOto1hjyXBk{B{z0eI;R;(^tnuCamDf86k+^3YQltc>HvXnVlNG-2lAZ3lxK zfCa-H05b%$j=`dfT0+ofEzE9iw83x82t*AXXp+UqGjQj@S`APO(4!yH+XYLa8Vof6 zYCc#2m_RO^AZlPXpe9U+90OuZ6V!x(#Uzp|pxF=H{smirWds0RCxaw0D;RY5VLA`) z5S$EX9s*ea!gP&(ShdavcLYkm2yyHv$Yo%R>J6|E=9Dp#B9suqQpZD0z?E}g(yY*I zf@uP@`bLUVB-_zOZK0+i;t|E$u$llpCBeLaC6z-Bgj1-sBZ@=ta9|c-c8~CAqK*_a z_i!*UfDY+HSvvu>fERQ=A2ScM97PKQ(D`+cL+PNZu~01F)B9MN_|cOVL@f*Ca6nwi z9wg1o&&$BY0y=*X?RY+r32cya??6nf7<6bJC-j6s7EVr17UUxg!RP0(a6-@I1KR*o zi!cltM%WrTAV-1B1eppl8j-RP+KFNDgIhI9>UF5s6t$=tRd)iqMQt_mO+^xG<-mmj-jOp+O#3uY=ve7wC3N? z@+=vy1xG!I7^VrI6%5!3*Xm$(tn9Hyd&SrLuxleGggYUNhH^Z<79N1<=!13`x zE-Qg)h11;J+)P-)9WKwnz{Ub;!yyTwFrfo{+}wOPauO#8v^9)1{y|{^YA8W4`VcBa z6g+_fvj<%XiepIUK#gVR$6RC#F^rQR>O}BN07MKyLcIocC%W69!k|VVv?GMHeh8d# zxVhPJ+;76b%L5BItTuz=9%=#l>8v`BJFNq##IhL;vQrTuAv@;3hX%( zIslJrj2araARAC8*g#U=VLA2Ai4=VAC@6OB^lIY;sXw!&Cv1-E#RQR35s)AA%tWz)B&LKAF3VO z8U?T_SPbAD$Kv4t2LqZL!1|%L9I}Hh0)q;mQlJVD+;HFpwKLF+fTlj=S`1VapqfB2 z5841lvm0tGIR0@rZ$ZunJBdi=qguiRso_xtp%z279`W&Gmjso};M>(07}yw@F!CM= z0mlo{j&mI%IAS@l=3JONAv701j`kl9J3lynA<8gF6z}nZgA%TW7d-C@nONlkPZ@)+ zG=s}ik-^2!isBNu(LDIOwoDaE$jfE5BeIC$EFAMZWH@M*-1{Xh$VKg2-yd7&4 zn;B384st0T#AYtgJTnU?{wQQ&!dk~LFtB2q+6Os%=wL23HZEL^*P-JJ+PRd_@>4c8 zE-uWjEy6vV+|XVw)@lm0l7$$(VxfdEKhzj*@Lp|@@s-Q z1ul$Q0>Fh443wb8@IG268Idp%27oPw5`^SoMKAVjg&0`D)pCRBCnS%Nt)cG2lKxSQ zf|-x-9kv=AHbetb1vMCjA|wwT1qErxS`ZS_kHwXc%>vjYkh34s&%YM0Fnb?O6761-LNHZWd9M8hq@HxLKw#8QkWcwrnNjbH)tg; zq`!!$`}z3cIT5*hhY7NRt^xOs&5nS>Rhagf3C^S%7zhDKF%EJ>e$apMW6jbw(x?ix|4eeCI z0u!kOf~8Cx#Uo_+4coyUV2>ffA4m8S)DNrJFar%@0jy%gB@fe&wNb`^NZ;7y;l(2~ zM8M&Tl-OYb28n+7aT~}L1jw1tR04G?O7jUM4ckQvbt@rx%%Fst57kddo|~BmRFH$b z1l0&>3NV1ivG^Hz*pP>TU_J)v-~?~>KrIPig(5RV60}ljpdSo0LQO#;;lreNulTzOasVAl_`9Tp`p)nKcU4ljVE9$080 zhae&kz&Zgi-7p%K%IGBzaV5yd5EgiQ9?UVQG+N04R*#|r7XDxv2!T?+ks*(gz#vBA zb|JCyD2_(r!1SZW7)$}WEUdALE)V0wuY@&Jw zCeKS)9-7`z^}~XIkbXpCmlbr-I;fV0RnE}j4D4J~0v4}K;6v=er@^BrfLYGU!~{AX zo|%IgbtV)=9(2?@>H+ew4f5QqAfuT;3Q%X!VGS;nHYJh^s3i}JK_sI=&0(nbVc`Rd zDp(Z=3qM$vfcX|C4>Ap2Lvb*{wmTq8BTjh6A&=0{0a-tSG;aqoA6~+8FhQ0{;FM>E z$-|2?nEOHIfU5&OW)75P)UX7Nl4qf+!4#~4j4OVKm4}5O*ia+_8UZ*PD72M_g%2$L zVYb0i3odz3-hz1omO^2ALDQ8mIS@^TJiIwVjDDCKvDptx&(QJ>rUYax1jCvR@Du|P zMv$0V5ON?Eh4SbHF33n^3`?K5(g#c)r9eh90N%Yp5<_C5g%7m&g;)RZ<5i%kAEq4H zH83B*0s>4USuvpUu;_(kZ&*r%@W5__B_3!30gE9Mu)+r=MItGHg)h1CFbBf=*GNW# znJ{^j5)~{1Az;lDT=E3;!y+8we3)T~ae>Z+0Ly_0SdK#JbATkEm{@t_0vW0mOcBrzk5N#TfJHVU z`y-BT0?EVD5|TXD_Akm&{ICFk1vG?4WH*GN5E%#wEpHeY;IrQlaTrNRKUf_oQG*$1 z1jsMoz(E`ejG_Wo`GM5H!Vg6ONCJwn$s?D=gydo7B0LN=7)nt~9yv`zjRsRN^HFFd z$DoMAIEc`P_su}pxPS%;2cP224BWj?K77Rpln;}KHLq~V!_9|x30mYQc!~BotEU4*-HLtXi2U&!YhCy{ENDv9* zlLwuD2Rg$J-eTZH-DLn;^8%V!MaZ*2mdHTO2lH4UD|Ns^ph;Aa5nv7jZ07`G#uPe( z3X3Ctumh0vb8<5BGcvO9gVaIIU|`_l2gMUBGe1(!gGfT%2Xi%OdKP5|EEiY-XjT_w zAjs(`$Nw?#fP_Hq1x*V>XyoGo86d)-5CR(w;-brgg8 zCxIw{xf;U5Me;I&k66TU!wzWcH&`Cm35>Xm9Yo@wdSVbcXVfWl4gr3g8yo5DkWuRf zCIpb$Yy;zfQCmktU^E0qLtr!nMnhmU1V%$(*o6QWKOZ*}){ZKucg@Md2^w191$Bj4 zSP=brSTJxiq4c|9!e}%vC+_p-*f^QF*|FXc3pzdmG)@2-gaCD@L5sZ63?AiD6avtL zU%;bem`8|#g&}(iVABn-@f(<}ka1wVX#nr}bBu^lURI3LGGJ4Xpm_@p zSg1m1w8#aGy?`V@lo-a!(e>K8;~+e-&2|G~1@9RZdC6WHP(HVq0^0N?8cGYKLJ z-V})J7MS!XO>qc7;-4K_(4tLNK_tPYGHf~&Bm1$zClYbYWWy%Pz_EzoUTFCby(SpV z2w36(&7s1K!7yP|fRYdZonQ{yU@JS&l(6DGof_5MD6U~(-~shH zA%{Bfg1Uk5>)Oz)z{w^4fNmViEO;PCNAqEJjTjg}2Xlc=GzTRg@Ht_8h}E|^T|}A$ z*!`f?k53yHXzvB6h{U3Z6Ljo3j-$;H%6YlC*sxX3FcqL1j)&wl4731Y=jXxhd|vp` z;8?>CR_8#<9<;;>TM&a>I-;g#Sn!cgL#t(+2aGfDfC^2J^T=>N#95rMg-qOhSk2&p zx`7)*9@He@tR@HCC_)AM}6%PdNtuW(3G;DkU$H{l#stXjlV2l?3An$?1 zL7@g~1A)w>CWgli^bibmvk~sc+AYTGey~|=s7jE-7Mnb190n{7B4B|F3IL?t0`TGr zwmuvx56et&c~FFd0uZ`D6xP^-*YGg&p+z$+j1l?~OPImNfC#8vAm@QFJnh0)DS|{1 z7~1+I>tuUa*n^S<$ZGV>QwUqgXAyEgY)}quUmeUsSdc@U2XZJ(21>)C2%-RVlLS-( zO5v4E#5@EyUhP9=sstmg=ga9DK1qmYpKNP9$JW}}A#%m|Frm7$JA#6PqU zgNj2b)XV|(CsYo;!3uN+H`IQtnGmL)9GZCdgK8lR8}Pax%K}pLyVw!dLp_Lcf-6i6 zVl6B-p}869dUl9Bthj{6Hqz;xX!#o+%rNsIRX3*j*q6AYR>7R0wh_o6xTz4=KuKu) zLyzHx3L+>___1lNW zyMM5qj*pSMq27U6fL|Uy@CQ*2D-Pj#04>5`MHO5go`ImD2C^K4VRbk`{fP4wLE2y# zqY7gHcP!B&58`IfCMiCg=h`zcAWcZ{vY>7r2h}~`n}I<7VFGmn`1rVCPKTOKB?>%6 zgIwz&%;n_fX2o+hJ5sxmmxUD?&T!qZ9Ldd%{rot11fa;nn*h+X#|;Vq#QuFmMT;g6 ztI81Z14^BsScBwmwAKLPWFn~fnEF9c0MgIR&Bn{X2CF`x%Hh6*FraooI0zDDLmxtT z@Uc+Ny+SyTBKO0>AJYDYwG|K*AtY>JTLNM7@QMc3Hibqg%rtoU3yTnFvcr%^i*Q(S zf!hz$kIQ`Y8V2fI)cEINhPs;_J^Mlekr6iV$d1u>04d;Pf>wci7`X=|&Ap4~tDiAb{jR7$Ohr-9cj;srd(u zaF})QNCN2vVO;tV=ktN8BzR>7Q4S_yZUUJC#$Ztd0kaY;$Bl747$NPjBe7uGF%J5{ zFaWL+;s&^zq2kbxfJlNz6`>MP3N8UsAr56hYa*z2_yGe@S;#UOm?VfsNT9PIxddGlt%O03Uho}?AakLZ zkUVL6Ko^s>OufrWYnEQ@G;u(QGI0hkPg zhJ^sa02VfwH$XN)?dRr(*5T+IU10K@@SYMRs34{zyw3@@AGN*ewHvwih+74JQMh;Nx4wP%5 zi3v3V8Tpw(jW3WCp$E=E{d1|(-N(4Ce|3f9=Q3;o3V1PzER0S(5D=W-GCeY9mSR5Aq zNZPLNF}8VfKR^gEUGAi*IQDgU1If3}Naa zromLhYYUiqXqdumLlmLVG8NWfLp2Ujpg{FwnvXa!7VJV;a)PP{xe6u(GaCJ%W>^Y` z%OeLLw&o$&B9O@t3@f2<=!Z8T;POZe4hE?IkrOn;SSSfAbdWTmbTF{VBbRU3r5$CQWq9~%EK;}O9D)d7u9C=aR{ z)lO_Yr2ZvLD|-2iBo1YwlpQelLFGUc#3C385<$ht!H=llQPn_sEU-2ma+JVK2GiK$ z57~jR5Q7>BrjX^~5ek-p5XkZ{^C1BYD@_n9SYYyy7{Qc>m0pA8JS=>{ zH3qCP0ILm<(hoR&Vlf{+xB~G2th|AyHzWi2__?6fA4>j)`H!1}6Q&m>f5Y6*%Fl*P zJN$H5ZYCC(eppco_CHLJo0Xpn>{mWe`47Wvu=t0h875W^eoh_~`=Rm24%GoF z8A%=~wZqNlV?kW;h_D_pxPojxatuOa1yU%&*D*j-17dIxS>{eZmqtm`0S}*yTZ?39$rQ`GXXFF!zH^g%c315E3qk#6U_Ph(v`X577xBp&0Zy4sKYBzQ$f)KWr7kq#Arn40wf004pIu2hXoHv5SxBj?GG{lno>c< z13Nb>GZQ~(6CG3#lzgF1MQz^0@(0L9c5Y^74zMl|4}y{9S>dKa7j6+q7>=QtnvV^p5EK(|S@@U_KYYjrIdLQMKQ8@n1CZ=T+``4efS6B# zxg6K#9#=CF@A>>c_0<&H4JL>V|Wi_4{{WuYsZzpK>ENKSuF@RX_F$5Ud^=kzh80K=VD)_y$A`R2RYpXyH$?Jfe*Rwg9zx1GWYw ziDAkkAJ2zzJ|D*3J`DdM`k-L@k=l-6%NZC@%tz_^fiDCA>p~{bLIB=E<%gE_P-CGK zyaCJyEg;d-FFbc(*A8#saq~e-LNx0c;08d3|KKi#2Ly5ivVvL%P?y0dl;DT!g2|$e zP@o@=2vUWtADcXA{v*cdrjK?6t_JF`LNGcd66gO8VE=D@MVgpCo@ z^8tv`9VxYkX#@GSQ!}@KzG_f ze8R+t;s{RgwHr7Vmw;w~A>oVjct2?PFo7DB2zwDM9*BM>%;OUgYDQTD83G(gU6z4# z$Ee){69Rk~?Z$y|$Ed9X69UXkD3g8z0DR&I%ovUT z!4WI;a|Lwv5*+*357DKGTd+*1VYP=B%giKPAt#QBLAV0^3?8&42RK#ZJO7Rs$K)kW z!w?eGu^-puD#9MTEIw{-enxmAz^jxbNzkqVkg?#IdeB)GsOQ&lbMxUn)f;3NFAHcx z1BitM!_F?jVG1Yc&5AG7vl`r0{|4 z=7bz12Gs?pI6&uX;7i{imEiq9n5!2+QVeX+3tJusK-55VHD#3APRl zt1qByq}Xwu(E>|jsEhYtW+5+t;Ko>g1X2Zd95-yO4Mrk@Bpz-&_QSRaVU2&(HA<-K zmq4~7{0<2W4Ew=~;59xM%Gv?290MaOD>F23v6&B1gq4IfD?v#L7Foy&AwdHokwp<~ zkPHMP#E@8^lns#vkx(Zh$wL>2vq0C;fKnl{EQAdWf1Ky{!B)=VSO<+7|5&VmgaIFH zsTx#ymI;qJl{KxnX;mFzg4NkO(?f5n>!@u>d!y)P!=u{Q*$u zf_80ip|5X)D*~&)l!dN(0w0(GRf4?46=`)I+$0nROb`0DDySlY@ek1tTjvQ%g;1SH z6g2-MZA(Lv1lL;-Q*fN$NHF{%B zgbb61(C~r+VE||i5kwL>Zo%>}zwsj0A|n@Ki1^1*t{@^9YXuE;E7Wq#{0}uBwg?dF zL$J#b1h~!v8-Zy6NEIT2u{shV4Kf1}Y#^;*3<(2H*kKl6F=T>x`_UE;LJUDI|MA!l zJuCyF3qeA|2!3J=$QLMO4O9S1VUK@k8HyaYU>l&CKR#IXq zgTQC6fmC6)0Gj_5qwp4eARNIWPxgGN@#Rn1fOMLxe$!z%@TCIUw>1 zsB6Fi3TcoUP)veNMJ1qV7^4D%w0Oa*!Z|>jXt17N2WmcJ2{(`ppoEC0cZYO#9s|bN zdEoWCpfh`UK>Hy0aHcVkJq+Oe`Pjps3xEHBg&E;M9u6%209B@Ze4yqZs1t(S4hC@l z0((c4lbf5J18eaIb~%du{8)-8(57)vtDgxJ8R#pVk((djqyfn?$n`Ba_82(9QH&+^ zf*k=)8aNv1U|STU5n6;yBTpWj{xP*ubp9Qtakxcr#W4Ziz{SkO1VZSB!uUMQAi#uC z^T6b}m^qk00LI5cbAcB~bMt{#QDc#2fXZ`|D-SK-`PeavM+OESkn=b=K+fl60{Ijz zBtYKd;9vq}O-@iqF{AmE2NX6;91wXXCT0$1kWmObEn7&jkA5`uI}K|?eMMOt;Wr8vx!vA1Hxj}tz*k)iW}_02!4IfBhytZlWF;Umu+7MV zNNgI*qeUM^69z*b$!Q=arSeekfr1;#L@gqqf}o}Wl!;XyNk51Qav20eH6iIom4_V> z0a3>a+tH6`=0hZqNc0Fqlo_Bx3SujQglXi2?~q0A1kz{32E%YrD2(ln-y9P;gpBzN3DJl`eE{@fdtDQxY|&#(i7JZ3oN@5 zA&+Dg!h5hmAy_cL_Y=aDz$}0%fK*j5SuhP(f*P}6IcV(+jy`Azf{G%r9GHORA20_C zK}a4}JY&%c79yY@<~}ai5Fv8I7uo`0bA1WXY;l|n554X!{!0%L{)t^!ZR z0Isv3X2XpJxgWNF8&wc210kRROe=Y)pTO>evQbhoRE%cw&^!SOIw%v>r%*vc@*qu6 zr649G=s+Y?5J^8MDS>357*@c*N(ZQi;h7X_0BF(E)bs-qK?_tA6QJ^_mLjQu%ER4@Bn4(d<#FhT zx)0<#cuk0G6s7Xe(8Xy!to4I*^)yQH18e=@lEA^$OG+M0*(+!zRgc<>(Kxq-K09Ne41<)9TfIPHz z0hbOi|H1V#zz4&?^02T*mWNjFM9E__AE|W$O)99>JCZy!DUvOZ)qHrO=YY))Lt+Wk zUI6i{bjTbtE6VwD4A=~X>IGAj%0oj9wNV8& z8B8F@A5~8h|(zK;=;^h3JHk6v{*6 z44gbb{zku_0UCZd4%U0fD}U$Ge|wW5dz{sN9UkSl=cHO{<%4z`4FRX2-U=m>wGwR`GMG(;RmBE(@Vm<*JL3PVygEE6Nf zIFXuPu+jml5kkSz2htC|vq3IK+es~KN>O4$^ zP!pi?=+TS3dIF>bQ$IXRLDCq-Bh-IjIWU1{03mr)(~+lbAz?^J9+p2KwFaz*1D}v9%MhN1e6DrM{^WZ5^?${ zPV-S#*J3+e5HTzaaz7-P5XOU8uzZ0_9+rhbt8g&&gLHu~D^wY}OF?oV%nI#@;gV;D z>Ie5kLC%6=kX{gm=|_`?r7twq@X->GR_MBDC=<;9SPLI43vV?-je}BLp!4CFSvgQo zr2|WHa!{aeqNY< z40-U0fDn1m@q}pR^RR#bCoJOFK#pL6a~T*IL9xREmIgC9u>>W^`^>C3yax;8QF=54 zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON zU^E0qLtr!nMnhmU1V%$(Gz3ONU}%Q`=-3%PKFot>K)wR68v!v!@o)_R*cw5Mr75uO zMd)irhigELP=7&JrlGA|g#-p@@f^;@eGnz1VyFZ0qFUBSl9jyfOAHzq;m*> zPv_%g86EwnbGVOMHyQ$?Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71* zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@? z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*U^E0q zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$( zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$( w6pV(zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-R~zr4V3-I`;p6CLUxq0A#vg=>Px# diff --git a/gamefiles/models/fonts_p.txd b/gamefiles/models/fonts_p.txd deleted file mode 100644 index c05e402ea668edaf0df58b56517da73c2f50f81a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1379752 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